[ODE] How to do iterative
david@csworkbench.com
david at csworkbench.com
Wed Mar 19 08:25:02 2003
A is not only sparse, though, it's incomplete. Let me introduce a new
matrix to make myself a little clearer. The LCP system is trying to solve
A*x = b where A is the big mxm matrix created from J*invM*J' , for all the
joints simultaneously. My A, which I'll call alpha from now on, is a set
of 6x6 or smaller matrices created from J*invM*J', for all the joints
_separately_. So any method of solving alpha*x = b is going to yeild an
approximation to the correct results, but not good enough, unless you
lower the timestep to a fraction of the main timestep, and integrate
repeatedly. This works (I've got an implementation that does it), but I
think there's a better way. Since alpha * x = b _can't_ give a correct
solution for the entire system, because it only "sees" one joint and the
body on either side of it. I propose to feed back the forces created by
all the x's from all the joints that affect the bodies connected to each
joint into the b in its own alpha*x = b equation, and solve again,
treating the forces caused by other joints as new external forces.
Anything that involves a direct solution for A won't work with my
algorithm because A doesn't exist, only alpha's which don't represent the
interaction of the joints like the big A does.
David
>
>
> david@csworkbench.com wrote:
>>
>> rhs includes components of external
>> force, and lamda * J is added to the external forces each iteration,
>
> That's currently the way you implement the iteration, but as far as I
> can see, you don't need to implement it that way. What both you and the
> LCP code are trying to do is solve A*x = b where A is sparse. Where A
> and b come from is irrelevant, unless you want to exploit some other
> structure in A and b.
>
> Just a thought,
> Martin