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
>