[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