#### 6.76 asympt() with multiple variables? (16.2.01)

##### 6.76.1 Daniel Krofchick

I am trying to simplify several long expressions using the assumption that some constants in the expression are much larger than others. The expressions are obtained by solving a cubic. Here is the code


lambda:=[solve(l^3+A*l^2+B*l+C,l)]:
A:=K32+K34+K43+K21+K23+K12:
B:=K21*K43+K23*K34+K12*K43+K12*K34+K12*K32+K21*K34+K32*K43+K23*K43+K12*K23+K21*K32:
C:=K43*K21*K32+K12*K23*K34+K12*K32*K43+K12*K23*K43:



where all $$Kij>0$$ and presumably Real (since they represent rate constants). The assumption I want to use to simplify the expression is K12,K21,K34,K43>>K23,K32).

Is there any way to do this in Maple 6? I have been playing with asympt which works well when I want to make this kind of assumption for one variable (in a simpler system derived from a cubic), but the function isn’t deﬁned for multiple variables.

##### 6.76.2 Chris Eilbeck (19.2.01)

One way would be to write K23= t*k23, K32 = t*k32, and expand in a Taylor series in t. But the answer is still very messy in this case, even with t=0!

##### 6.76.3 Boris Alexeev (20.2.01)

restart;
f:=exp(1/x+1/y): n:=2: m:=3:
asympt(f,x,n): remove(has,%,O):
asympt(%,y,m): remove(has,%,O);



Towards solution:

Is this from chemical kinetics? YES!

chemical reaction

x1=x2
x2=x3
x3=x4



diﬀerential equations

x1' = -k12*x1+k21*x2
x2' = k12*x1-k21*x2-k23*x2+k32*x3
x3' = k23*x2-k32*x3-k34*x3+k43*x4
x4' = k34*x3-k43*x4



Jacobi matrix

array([[l+K12,-K21,0,0],[-K12,l+K21+K23,-K32,0],[0,-K23,l+K32+K34,-K43],
[0,0,-K34,l+K43]]);



restart;



get Jacobi matrix

array([[l+K12,-K21,0,0],[-K12,l+K21+K23,-K32,0],[0,-K23,l+K32+K34,-K43],
[0,0,-K34,l+K43]]);
ll:=simplify(linalg[det](%)/l):



switch asymptotics on

s:={K12=x*k12, K21=x*k21, K34=x*k34, K43=x*k43};



switch asymptotics oﬀ

si:={k12=K12,k21=K21,k34=K34,k43=K43,x=1}; sll:=subs(s,ll/x^2);



get crude solution (one eigenvalue)

asympt(sll,x,1): remove(has,%,O);
collect(subs(si,%),l,factor);
crude eigenvalue=,solve(%,l);



get next (and last) approximation (two values)

asympt(sll,x,2): remove(has,%,O);
collect(subs(si,%),l,factor);
eigenvalue revisited (even twins)=,solve(%,l);



##### 6.76.4 Helmut Kahovec (21.2.01)

Instead of K12,K21,K34,K43 >> K23,K32 I’d like to prefer K23,K32 << K12,K21,K34,K43. Then we may use mtaylor() as shown in the Maple6 session below.

> restart;

> A:=K32+K34+K43+K21+K23+K12:
> B:=K21*K43+K23*K34+K12*K43+K12*K34+K12*K32+
>    K21*K34+K32*K43+K23*K43+K12*K23+K21*K32:
> C:=K43*K21*K32+K12*K23*K34+K12*K32*K43+K12*K23*K43:

> equ:=l^3+A*l^2+B*l+C:

> lambda:=[solve(equ,l)]: nops(lambda);

3

> mtaylor(lambda[1],[K23,K32],2,[1,1]):
> map(factor,%):
> subs(
>   {signum(K43-K21+K34-K12)=1,signum(-K43+K21-K34+K12)=-1},
>   map(simplify,%,assume=positive)
> ):
> map(factor,%):
> subs(
>   {signum(K43-K21+K34-K12)=1,signum(-K43+K21-K34+K12)=-1},
>   map(simplify,%,assume=positive)
> ):
> map(factor,%):
> subs(
>   {signum(K43-K21+K34-K12)=1,signum(-K43+K21-K34+K12)=-1},
>   map(simplify,%,assume=positive)
> ):
> map(factor,%):



Unfortunately, I could not ﬁnd another way to force Maple to choose the appropriate branch cut:

> subs(J=I,map(simplify,subs(I=J,%),symbolic)):
> lambda1:=map(factor,%);

K32 K34
lambda1 := -K34 - K43 - ---------
K34 + K43

> mtaylor(lambda[2],[K23,K32],2,[1,1]):
> map(factor,%):
> subs(
>   {signum(K43-K21+K34-K12)=1,signum(-K43+K21-K34+K12)=-1},
>   map(simplify,%,assume=positive)
> ):
> map(factor,%):
> subs(
>   {signum(K43-K21+K34-K12)=1,signum(-K43+K21-K34+K12)=-1},
>   map(simplify,%,assume=positive)
> ):
> map(factor,%):
> subs(
>   {signum(K43-K21+K34-K12)=1,signum(-K43+K21-K34+K12)=-1},
>   map(simplify,%,assume=positive)
> ):
> map(factor,%):
> subs(J=I,map(simplify,subs(I=J,%),symbolic)):
> lambda2:=map(factor,%);

K21 K23
lambda2 := -K12 - K21 - ---------
K21 + K12

> mtaylor(lambda[3],[K23,K32],2,[1,1]):
> map(factor,%):
> subs(
>   {signum(K43-K21+K34-K12)=1,signum(-K43+K21-K34+K12)=-1},
>   map(simplify,%,assume=positive)
> ):
> map(factor,%):
> subs(
>   {signum(K43-K21+K34-K12)=1,signum(-K43+K21-K34+K12)=-1},
>   map(simplify,%,assume=positive)
> ):
> map(factor,%):
> subs(
>   {signum(K43-K21+K34-K12)=1,signum(-K43+K21-K34+K12)=-1},
>   map(simplify,%,assume=positive)
> ):
> map(factor,%):
> subs(J=I,map(simplify,subs(I=J,%),symbolic)):
> lambda3:=map(factor,%);

K23 K12     K32 K43
lambda3 := - --------- - ---------
K21 + K12   K34 + K43



Finally, let us check the solutions:

> testeq(
>   A=simplify(-(lambda1+lambda2+lambda3))
> );

true

> testeq(
>   B=factor(
>     mtaylor(
>       expand(
>         lambda1*lambda2+lambda1*lambda3+lambda2*lambda3
>       ),
>       [K23,K32],2,[1,1]
>     )
>   )
> );

true

> testeq(
>   C=factor(
>     mtaylor(
>       expand(-lambda1*lambda2*lambda3),
>       [K23,K32],2,[1,1]
>     )
>   )
> );

true