Negligible terms in polynomials



You can substitute bt = a*eps and expand: taylor(..., eps, 0, 0).

Or use taylor(...,[a,binv],inf,1) where you've substituted binv = 1/b.

You can also expand to higher orders, and the terms will be nicely ordered.

On my blackberry, so I can't give a worked example.

         -s

On 1/8/09, Alexey Beshenov <al at beshenov.ru> wrote:
> On Thursday 08 January 2009 13:24:41 Stefano Ferri wrote:
>> Mmm... I think it's not the right way. I gave a bad example.
>> The real problem is this: I have a vector containing some
>> polynomials, wich represent the displacements of some points of a
>> structure (I'm writing a didactic software to solve structures in a
>> symbolic way). In this vector, displacements are the combination of
>> two kinds of deformation, axial and flexional, the first dependin
>> on A (area), the second on I (momentum of inertia). So, in example:
>>
>> (%i1) u:matrix( [M*l^2/(E*I) + q*l/(E*A)] , [q*l/(E*A)] )$
>>
>> that is the matrix (a column vector) of displacements. The first
>> term depends on both  flexional and axial deformation, the second
>> only on the axial one. Do not care about the meanings of the
>> symbols, they are all assumed > 0. Now, I say that axial
>> deformation is negligible with respect to flexional one. I can do
>> this by saying A>>I. The resulting vector should be:
>>
>> u2: matrix( [ M*l^2/(E*I)] , [q*l/(E*A)])$
>
> If you just want to cancel terms that depend on some variable
> (which is not correct in terms of limits, of course), then try
>
> cancel_terms (poly, x) := block([terms, poly : expand(poly)],
>   terms :
>     if atom(poly) or op(poly)#"+" then
>       [poly]
>     else
>       args(poly),
>   terms : sublist (terms, lambda([e], freeof (x,e))),
>   if terms=[] then
>     0
>   else
>     apply ("+", terms)
> )$
>
> cancel_terms (M*l^2/(E*I) + q*l/(E*A), A) => l^2*M/(E*I)
> cancel_terms (M*l^2/(E*I) + q*l/(E*A), I) => l*q/(A*E)
> cancel_terms (M*l^2/(E*I) + q*l/(E*A), E) => 0
>
>
> If you want to reduce elements that depend on A and I, but keep
> elements that depend only on A, then try something like
>
> u : [M*l^2/(E*I) + q*l/(E*A), q*l/(E*A)]$
>
> map (lambda([e], if freeof(A,e) or freeof(I,e) then e else
> cancel_terms(e, A)), u);
>
>
> A more mathematically correct version:
>
> map (lambda([e], if freeof(A,e) or freeof(I,e) then e else
> limit(e, A, inf)), u);
>
> --
> Pungenday, Chaos 8 YOLD 3175
> Alexey Beshenov  http://beshenov.ru/
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>