Troubles simplifying expressions



Hello Christopher, All,
> Dear all,
>
> Yes, there are ways to get an "explicit" curve as the solution to this 
> problem.  I've worked on this problem myself.  My code for "Watt's 
> linkage" is below, which I'm sure you can adapt to your problem.
> This code does take some time to execute.  I suggest, for the first 
> few runs at least, you use specific values for the constants *before* 
> you solve the system!
>
> I hope this helps.
>
> Chris Sangwin
>
> // Attached code stripped
sorry, for responding so late, this issue is still open, but it's part 
of my spare time project, so I need to prioritize
My intention is to find general forward kinematics to the delta robot 
problem, which I actually solved already with the attached code. In the 
forward kinematics, I will allow differing arm lengths, joint positions 
etc. since one can't possibly build everything 100% perfectly. I will 
however still need some kind of an interpolated 
3D-correction-volume-function in the end, I fear.
The next step is to have a dynamic model of the robot-to-be in order to 
pre-control inter-actuator-couplings. For this I will use perfect 
geometry for simplicity, since I will need 1st derivatives of the the 
forward kinematics and they literally explode, as I witnessed with my 
original Maxima script - I think the effects of the small construction 
imperfections are negligible in this regard.
Now the thing is, even the solution for the basic forward kinematics 
would explode, if I hadn't used some substitutions with recurring 
patterns (Maxima basically runs out of memory for solving the 
equations). Doing a derivative is then basically 
straight-forward-doable, as can be seen with my script, however the 
result is far too "big" expression-wise. And this is where my problem 
begins. I can see recurring patterns there as well, also I can see basic 
expanded binomials. However when I try to substitute them with ratsubst, 
the term gets even bigger, because ratsubst seems to outsmart me and 
rearranges terms, introduces virtual "zeros" (like adding + a - a). This 
leads to the situation, where trying to substitute parts actually makes 
the result way "bigger". But if I take the necessary hours to do it by 
hand, I will a) do a bunch of mistakes (I could of course use Maxima to 
check my doings for equivalence) and it is b) not automatically 
reproducable later-on, which is the bigger problem.
Granted I learned a bit more about Maxima in the meanwhile, so I will 
basically try to introduce some of the substitutions prior to deriving 
and will declare the symbols as being dependant on the variables, so I 
can derive the whole problem in smaller steps and get a reasonable 
result with any luck.
What I would basically need was something like ratsubst, just not as 
smart. If I have an n-ary sum/product, it should find sub-patterns in 
them and not only in whole expressions like subst, but it should not try 
to do stuff that might "enlargen" the expression that I'm working on 
like ratsubst does.
So currently: subst too weak, ratsubst too strong/indetermenistic for 
math-dilletants like me.

Okay, that being said, I'm also interrested in the 
Grobner-bases-strategy you've used (Only that I think that it is not 
really applicable to my problem, since I need to do further algebraic 
operations on the results I get here and they seem to yield "automatic" 
but expression-wise suboptimal results). I'm such an engineer guy who 
was described in an unrelated message on the list just recently: "Maths? 
I don't need no fucking maths!". A professor of mine briefly mentioned 
them. He had used them to optimize a feedback-control which was 
basically a set of polynomial equations. Now Wikipedia's article doesn't 
really help me understanding that fully (that applies to most 
maths-articles there). I currently think that they're basically about 
finding, under some given ordering, a unique set of polynomial equations 
("representative set") with the same roots as the original set, just 
with simpler terms? Is there a recommendable pdf that covers them 
floating on the web, for maths-agnostics like me? Or is this really 
advanced stuff?

And now to an problem-wise unrelated question. I have developed a 
science-unit (Imperial, SI, etc.) converter which basically works on 
ASTs and simplifies them with commonly known algebraic rules until you 
get an affine projection (or an error, since the conversion is illegal). 
My first attempt just used pattern-matching with replacement. However, 
for me, pattern-matching seemed basically nearly undoable to find 
commutative or associative permutations of the base pattern. So I could 
not use the pattern-matcher to factor out common factors and had to 
resort on specially build alghoritms: the rule "%1 * %2 + %1 * % 3 => %1 
* (%2 + %3)" of course works for "a*b+a*c", but does not work for 
"a*b+c*a" with a matcher that can't handle commutative operations.
Now from what I gathered so far, Maxima uses some kind of Lisp, and with 
that an AST, just like I'm using. With that I assume that it works with 
pattern matching (much more advanced obviously) just like I do. Does 
Maxima's/Lisp's pattern matcher support matching equivalent (under 
commutativity or associativity) permutations of a pattern? I'd be 
delighted to find out, how one would go about that...

With Kind Regards,
Michael

PS: Sorry to Christopher, I replied personally in my first attempt.