Odes
Odes
Odes
Aleksas Domarkas
aleksasd873@gmail.com
aleksas.domarkas@mif.vu.lt
December 1, 2013
odecv intfactor1
dchange odeL
odeC odeL ic
solvet fs
ode1 ic partsol
ode2 ic odeM
P iter odeM ic
ode1taylor matrix exp
ode2taylor odelinsys
ode1exact wronskian
odecv.wxm 1 / 2
odecv
Function: odecv(tr,eq,y,x)
Makes the change of independed variable in ODE.
(%i1) load(odes)$
Examples:
1. x^3y''' + xy' - y = x
(%i2) eq:x^3*'diff(y,x,3)+x*'diff(y,x)-y=x$
(%i3) odecv(x=exp(t),eq,y,x);
d3 d2 d
(%o3) y - 3 y + 3 y - y = %e t
dt 3
d t 2
d t
(%i4) odeL(%,y,t);
t 3 %e t
(%o4) y = t 2 %e t C3 + t %e t C2 + %e t C1 +
6
(%i5) sol:subst(t=log(x),%);
2 x log( x )3
(%o5) y = x log( x ) C3 + x log( x ) C2 + x C1 +
6
2. (1 + x^2)y'' + xy' + y = 0
(%i6) eq:(1+x^2)*'diff(y,x,2)+x*'diff(y,x)+y=0$
(%i7) trans(eq):=block(
coeff(lhs(eq),'diff(y,x))/coeff(lhs(eq),'diff(y,x,2)),
t=radcan(integrate(exp(-integrate(%%,x)),x)))$
(%i10) odecv(tr,eq,y,x);
d2
(%o10) y +y =0
d t2
(%i11) ode2(%,y,t);
(%o11) y = %k1 sin( t )+ %k2 cos( t )
(%i12) sol:subst(itr,%);
(%o12) y = %k1 sin( asinh( x ))+ %k2 cos( asinh( x ))
odecv.wxm 2 / 2
(%i13) eq:'diff(y,x,2)-1/x*'diff(y,x)+4*x^2*y=0$
(%i16) odecv(t=x^2,eq,y,x);
d2
(%o16) 4 t y + 4 t y = 0
2
d t
(%i17) ode2(%,y,t);
(%o17) y = %k1 sin( t )+ %k2 cos( t )
(%i18) sol:subst(itr,%);
(%o18) y = %k1 sin( x 2 )+ %k2 cos( x 2 )
(%i19) eq:4*x^4*'diff(y,x,3)-4*x^3*'diff(y,x,2)+4*x^2*'diff(y,x)=1$
(%i20) odecv(x=exp(t),eq,y,x);
d3 d2 d
(%o20) 4 %e t y - 16 %e t y + 16 %e t y = 1
d t3 d t2 d t
(%i21) eq1:%/4/exp(t),expand;
d3 d2 d %e - t
(%o21) y - 4 y + 4 y =
d t3 d t2 d t 4
(%i22) odeL(eq1,y,t);
%e - t ( 3 t %e 3 t - 2 )
(%o22) y = t %e 2 t C3 + %e 2 t C2 + C1 +
72
(%i23) subst(t=log(x),%),expand;
x 2 log( x ) 1
(%o23) y = x 2 log( x ) C3 + x 2 C2 + C1 + -
24 36 x
(%i24) y=collectterms(rhs(%),log(x),x);
1 1
(%o24) y = x 2 log( x ) C3 + + x 2 C2 + C1 -
24 36 x
(%i25) sol:subst([C1=%k1,C2=%k2,C3=%k3-1/24],%);
1
(%o25) y = %k3 x 2 log( x )+ %k2 x 2 - + %k1
36 x
dchange.wxm 1 / 3
dchange
Function: dchange(tr,eq,y,x,new_func,new_var)
Makes the change tr:x=f(new_var) of independent variable x.
(%i3) eq:(1-x^2)*diff(y(x),x,2)-x*diff(y(x),x)+n^2*y(x)=0$
(%i4) assume(n>0)$
(%i9) ode2(%,y(t),t);
(%o9) y( t )= %k1 sin( n t )+ %k2 cos( n t )
(%i10) sol:dchange(itr,%,y(t),t,y(x),x);
(%o10) y( x )= %k1 sin( n acos( x ))+ %k2 cos( n acos( x ))
2. xy'' + y'/2-y = 0
(%i11) eq:x*diff(y(x),x,2)+diff(y(x),x)/2-y(x)=0$
(%i14) eq1:dchange(tr,eq,y(x),x,y(t),t),ratsimp;
d2
(%o14) y( t )- y( t )= 0
d t2
(%i15) ode2(%,y(t),t);
(%o15) y( t )= %k1 %e t + %k2 %e - t
(%i16) sol:dchange(itr,%,y(t),t,y(x),x);
(%o16) y( x )= %k1 %e 2 x + %k2 %e - 2 x
dchange.wxm 2 / 3
(%i17) eq:x^2*diff(y(x),x,2)-2*x*diff(y(x),x)+2*y(x)=x^5*log(x);
d2 d
(%o17) x 2 y( x ) - 2 x y( x ) + 2 y( x )= x 5 log( x )
d x 2
d x
(%i20) eq1:dchange(tr,eq,y(x),x,y(t),t);
d2 d
(%o20) y( t )- 3 y( t ) + 2 y( t )= t %e 5 t
dt 2 d t
(%i21) ode2(%,y(t),t);
( 12 t - 7 ) %e 5 t
(%o21) y( t )= + %k1 %e 2 t + %k2 %e t
144
(%i22) sol:dchange(itr,%,y(t),t,y(x),x);
x 5 ( 12 log( x )- 7 )
(%o22) y( x )= + %k1 x 2 + %k2 x
144
4. kamke 2.284
(%i23) eq:(2*x+1)^2*diff(y(x),x,2)-2*(2*x+1)*diff(y(x),x)-12*y(x)=3*x+1$
(%i26) eq1:dchange(tr,eq,y(x),x,y(t),t);
d2 d 3( %e t - 1 )
(%o26) 4
y( t ) - 8 y( t ) - 12 y( t )= +1
d t2 d t 2
(%i27) ode2(eq1,y(t),t);
9 %e t - 4
(%o27) y( t )= %k1 %e 3 t - + %k2 %e - t
96
(%i28) sol:dchange(itr,%,y(t),t,y(x),x);
%k2 9( 2 x + 1 )- 4
(%o28) y( x )= %k1( 2 x + 1 )3 + -
2 x+1 96
(%i29) y(x)=map(factor,rhs(sol));
%k2 18 x + 5
(%o29) y( x )= %k1( 2 x + 1 )3 + -
2 x+1 96
dchange.wxm 3 / 3
5.
(%i30) eq:diff(y(x),x,2)-diff(y(x),x)+exp(4*x)*y(x)=0;
d2 d
(%o30) y( x )- y( x )+ %e 4 x y( x )= 0
d x2 dx
(%i31) tr:x=log(t)/4;
log( t )
(%o31) x =
4
(%i32) itr:solve(tr,t)[1];
(%o32) t = %e 4 x
(%i33) eq1:dchange(tr,eq,y(x),x,y(t),t);
d2 d
(%o33) 16 t 2 y( t ) + 12 t y( t ) + t y( t )= 0
d t 2
d t
(%i34) eq2:subst(y(t)=y,eq1);
d2 d
(%o34) 16 t 2 y + 12 t y + t y = 0
d t2 d t
(%i35) contrib_ode(eq2,y,t);
1 t 1 t
(%o35) [ y = bessel_y , %k2 t 1 / 8 + bessel_j , %k1 t 1 / 8 ]
4 2 4 2
(%i36) sol:subst(itr,%[1]);
1 %e 2 x 1 %e 2 x
(%o36) y = bessel_y , %k2 %e x / 2 + bessel_j , %k1 %e x / 2
4 2 4 2
odeC.wxm 1 / 2
odeC
Function: odeC(eq,r,x)
Solves ODE in respect to expression r.
Examples:
(%i1) load(odes)$
(%i2) eq:'diff(y,x)+2*y/(x+1)=2*sqrt(y)/(x+1);
d 2y 2 y
(%o2) y+ =
dx x+1 x+1
(%i3) odeC(eq,sqrt(y),x);
x %c
(%o3) y= +
x+1 x+1
(%i4) ode2(eq,y,x);
(%o4) - log( y - 1 )= log( x + 1 )+ %c
2. boj 360.
(%i5) eq:x*'diff(y,x,3)-'diff(y,x,2)-x*'diff(y,x)+y=-2*x^3;
d3 d2 d
(%o5) x y - y -x y + y = - 2 x3
d x 3
d x 2 d x
(%i6) odeC(eq,'diff(y,x,2)+y,x);
d2
(%o6) y + y = 2 y - x 3 + %c x
d x2
(%i7) ode2(%,y,x);
(%o7) y = %k1 %e x + %k2 %e - x + x 3 +( 6 - %c )x
(%i8) sol:subst(%c=6-%k3,%);
(%o8) y = %k1 %e x + %k2 %e - x + x 3 + %k3 x
3. sam 4.35.
(%i9) eq1:'diff(x,t)=y+z$
eq2:'diff(y,t)=x+z$
eq3:'diff(z,t)=x+y$
(%i12) odeC(eq1+eq2+eq3,x+y+z,t)$
s1:subst(%c=3*C1,%);
(%o13) z + y + x = 3 %e 2 t C1
odeC.wxm 2 / 2
(%i14) odeC(eq1-eq2,y-x,t)$
s2:subst(%c=3*C2,%);
(%o15) y - x = 3 %e - t C2
(%i16) odeC(eq2-eq3,z-y,t)$
s3:subst(%c=3*C3,%);
(%o17) z - y = 3 %e - t C3
(%i18) sol:solve([s1,s2,s3],[x,y,z])[1],expand;
(%o18) [ x = - %e - t C3 - 2 %e - t C2 + %e 2 t C1 , y = - %e - t C3 + %e - t C2 + %e 2 t C1 , z = 2
%e - t C3 + %e - t C2 + %e 2 t C1 ]
Test:
(%i19) subst(sol,[eq1,eq2,eq3])$
ev(%, nouns)$
makelist(rhs(%[k])-lhs(%[k]),k,1,3);
(%o21) [ 0 , 0 , 0 ]
4. filipov 65.
(%i22) eq:'diff(y,x)=sqrt(4*x+2*y-1);
d
(%o22) y = 2 y +4 x-1
dx
(%i23) ode2(eq,y,x);
(%o23) false
(%i24) load(contrib_ode)$
(%i25) contrib_ode(eq,y,x);
Is p positive, negative or zero? p;
- 8 log( 2 y + 4 x - 1 + 2 )+ 4 2 y+4 x-1 -4 x+1
(%o25) [ - = %c ]
4
(%i26) odeC(eq,2*y+4*x-1,x);
(%o26) - 2 log( 2 y + 4 x - 1 + 2 )+ 2 y + 4 x - 1 + 2 = x + %c
solvet.wxm 1 / 1
solvet
Function: solvet(eq,x)
Returns rectform solution of polynomial equation.
In "casus irreducibilis" give real solutions expressed
in trigonometric functions.
(%i1) solvet(eq,x):=block([polf,spr,k],
spr:solve(eq,x),
polf(x):=block([rx],
rx:rectform(x),
if freeof(%i,x) or atom(x) or
freeof(sin,rx) then return(rx) else
map(polarform,x),
rectform(%%),
trigsimp(%%),
trigreduce(%%)),
makelist(x=polf(rhs(spr[k])),k,1,length(spr)),
sort(%%)
)$
Examples:
(%i2) solvet(x^3-3*x^2+1,x);
5 7
(%o2) [ x = 2 cos + 1 , x = 2 cos + 1 , x = 2 cos + 1 ]
9 9 9
(%i3) solvet(x^6-3*x^5-3*x^4+12*x^3-3*x^2-6*x+2=0,x);
2 4 8
(%o3) [ x = 1 , x = 1 - 3 , x = 3 + 1 , x = 2 cos , x = 2 cos , x = 2 cos ]
9 9 9
(%i4) solvet(x^3-15*x-5,x);
atan( 19 ) 2 atan( 19 ) 2
(%o4) [ x = 2 5 cos , x = 2 5 cos , x = 2
3 3
- + 5
3 3
atan( 19 )
cos ]
3
(%i5) solve(x^3-15*x-5,x);
3 %i 1
5 -
3 %i 1 5 19 %i 5 1 / 3 2 2 3 %i 1
(%o5) [ x = - - + + , x = -
2 2 2 2 5 19 %i 5
1/3 2 2
+
2 2
3 %i 1
5 - -
5 19 %i 5 1 / 3 2 2 5 19 %i 5 1 / 3 5
+ + , x = + + ]
2 2 5 19 %i 5
1 / 3 2 2 5 19 %i 5
1/3
+ +
2 2 2 2
ode1_ic.wxm 1 / 1
ode1_ic
Function: ode1_ic(eqn, dvar, ivar, ic)
The function ode1_ic solves an ordinary differential equation(ODE)
of first order with initial condition y(x0) = y0.
Here ic is list [x0,y0].
Examples:
(%i1) load(odes)$
2. (y^4e^y+2x)y' = y, y(0) = 1.
(%i3) eq:(y^4*exp(y)+2*x)*'diff(y,x)=y$
(%i4) ode1_ic(eq,y,x,[0,1]);
( y 3 - y 2 ) %e y - x
(%o4) =0
y2
(%i5) solve(%,x);
(%o5) [ x =( y 3 - y 2 ) %e y ]
(%i6) eq:x*'diff(y,x)+y=2*y^2*log(x)$
(%i7) ode1_ic(eq,y,x,[1,1/2]);
1
(%o7) y =
2 log( x )+ 2
(%i8) eq:(x^2-1)*'diff(y,x)+2*x*y^2=0$
(%i9) ode1_ic(eq,y,x,[0,1]);
1
(%o9) y =
log( 1 - x 2 )+ 1
ode2_ic.wxm 1 / 1
ode2_ic
Function: ode2_ic(eqn, dvar, ivar, ic)
The function ode2_ic solve an ordinary differential equation(ODE) of second order
with initial conditions y(x0) = y0, y'(x0) = y1. Here ic is list [x0, y0, y1].
Examples:
(%i1) load(odes)$
(%i3) sol:ode2_ic(eq,y,x,[0,0,2]);
1/3 1
(%o3) y =( 9 x 2 + 1 + 3 x ) -
1/3
( 9 x2 + 1 + 3 x)
Test:
(%i4) ev(rhs(sol),x=0);
(%o4) 0
(%i7) subst(sol,eq)$
ev(%, nouns)$
radcan(%);
(%o9) 0 = 0
(%i10) eq:'diff(y,x,2)=128*y^3$
(%i11) ode2_ic(eq,y,x,[0,1,8]);
1
(%o11) y = -
8 x-1
(%i13) sol:ode2_ic(eq,y,x,[0,1,0]);
(%o13) y = cos( x ) log( cos( x ))+ x sin( x )+ cos( x )
P_iter.wxm 1 / 1
P_iter
Function: P_iter(eq, x, y, x0, y0, n).
Solves first order differential equation using Picard iterative process.
http://www.sosmath.com/diffeq/first/picard/picard.html
(%i10) load(odes)$
Examples:
1. y'=x^2+y^2, y(0)=0
(%i11) eq:'diff(y,x)=x^2+y^2$
(%i15) eq:'diff(y,x)=2*x*(1+y)$
ode1taylor
Function: ode1taylor(eq, x0, y0, n).
Solves first order differential equation using Taylor-series expansion.
(%i1) load(odes)$
1. y'=x+y^2, y(0)=1
(%i2) eq:diff(y(x),x)=x+y(x)^2;
d
(%o2) y( x )= y( x )2 + x
dx
(%i3) ode1taylor(eq,0,1,6);
3 x 2 4 x 3 17 x 4 31 x 5 149 x 6
(%o3)/T/ 1 + x + + + + + + ...
2 3 12 20 90
2. y'=x^2+y^2, y(0)=0
(%i4) eq:diff(y(x),x)=x^2+y(x)^2;
d
(%o4) y( x )= y( x )2 + x 2
dx
(%i5) ode1taylor(eq,0,0,15);
x 3 x 7 2 x 11 13 x 15
(%o5)/T/ + + + + ...
3 63 2079 218295
3. y'=x-y^2, y(1)=-1
(%i6) eq:diff(y(x),x)=x-y(x)^2;
d
(%o6) y( x )= x - y( x )2
dx
(%i7) ode1taylor(eq,1,-1,5);
( x - 1 )2 ( x - 1 )3 ( x - 1 )4 ( x - 1 )5
(%o7)/T/ - 1 + + + + + ...
2 3 6 60
ode2taylor.wxm 1 / 1
ode2taylor
Function: ode2taylor(eq, x0, y0, y1, n).
Solves second order differential equation using Taylor-series expansion.
(%i1) load(odes)$
Examples:
(%i2) eq:'diff(y(x),x,2)-x*y(x)=0;
d2
(%o2) y( x )- x y( x )= 0
d x2
(%i3) ode2taylor(eq,0,1,0,15);
x3 x6 x9 x 12 x 15
(%o3)/T/ 1 + + + + + + ...
6 180 12960 1710720 359251200
(%i4) eq:'diff(y(x),x,2)='diff(y(x),x,1)^2+x*y(x);
d2 d 2
(%o4) y( x )= y( x ) + x y( x )
d x2 d x
(%i5) ode2taylor(eq,1,1,0,5);
( x - 1 )2 ( x - 1 )3 ( x - 1 )4 ( x - 1 )5
(%o5)/T/ 1 + + + + + ...
2 6 8 12
3.
(%i6) eq:'diff(y(x),x,2)+x*'diff(y(x),x)+y(x)=0;
d2 d
(%o6) y( x )+ x y( x ) + y( x )= 0
dx 2 d x
(%i7) ode2taylor(eq,0,0,1,15);
x3 x5 x7 x9 x 11 x 13 x 15
(%o7)/T/ x - + - + - + - + ...
3 15 105 945 10395 135135 2027025
(%i8) sum((-1)^n*2^n*n!*x^(2*n+1)/(2*n+1)!,n,0,7);
x 15 x 13 x 11 x9 x7 x5 x3
(%o8) - + - + - + - +x
2027025 135135 10395 945 105 15 3
ode1exact.wxm 1 / 1
ode1exact
(%i1) load(odes)$
Function: ode1exact(eq).
Solves first order exact equation.
http://www.math24.net/exact-equations.html
Examples:
1.
(%i2) eq:2*x*y*dx+(x^2+3*y^2)*dy=0;
(%o2) dy( 3 y 2 + x 2 )+ 2 dx x y = 0
(%i3) ode1exact(eq);
(%o3) y 3 + x 2 y = C
2.
(%i4) eq:(6*x^2-y+3)*dx+(3*y^2-x-3)*dy=0;
(%o4) dy( 3 y 2 - x - 3 )+ dx( - y + 6 x 2 + 3 )= 0
(%i5) ode1exact(eq);
(%o5) y 3 - x y - 3 y + 2 x 3 + 3 x = C
3.
(%i6) eq:exp(y)*dx+(2*y+x*exp(y))*dy=0;
(%o6) dy( x %e y + 2 y )+ dx %e y = 0
(%i7) ode1exact(eq);
(%o7) x %e y + y 2 = C
4.
(%i8) eq:(x*dx+y*dy)/sqrt(x^2+y^2)+(x*dy-y*dx)/x^2=0;
dy y + dx x dy x - dx y
(%o8) + =0
y 2 + x2 x2
(%i9) ode1exact(eq);
y
(%o9) y 2 + x2 + = C
x
intfactor1.wxm 1 / 2
intfactor1
Function: intfactor(eq, omega).
Find intfactor mu = mu(omega) of the first order differential equation.
http://www.math24.net/using-integrating-factor.html
Examples:
(%i1) load(odes)$
1.
(%i2) eq:(1+y^2)*dx+x*y*dy=0$
(%i3) intfactor1(eq,x);
(%o3) x
(%i4) ode1exact(eq*%);
x2 y 2 x2
(%o4) + =C
2 2
2.
(%i5) eq:(x*y^2-2*y^3)*dx+(3-2*x*y^2)*dy=0$
(%i6) intfactor1(eq,y);
1
(%o6)
y2
(%i7) ode1exact(eq*%);
3 x2
(%o7) - 2 x y - + =C
y 2
3.
(%i8) eq:y*dx+(x^2+y^2-x)*dy=0$
(%i9) ode1exact(eq);
(%o9) false
(%i10) intfactor1(eq,x^2+y^2);
1
(%o10)
y + x2
2
(%i11) ode1exact(eq*%);
x
(%o11) y + atan = C
y
intfactor1.wxm 2 / 2
4.
(%i12) eq:x*y*dx+(2*x^2+3*y^2-20)*dy=0$
(%i13) intfactor1(eq,y);
(%o13) y 3
(%i14) ode1exact(eq*%);
y 6 x2 y 4
(%o14) + -5 y4= C
2 2
5.
(%i15) eq:(x^2*y^3+6*y^5)*dx+(2*x^3*y^2+12*x^4)*dy=0$
(%i16) intfactor1(eq/y,x*y);
1
(%o16)
x4 y 4
(%i17) ode1exact(-eq/y*%);
1 3 2
(%o17) + + =C
xy 2 y 4 x3
Other method:
(%i18) mu:x^a*y^b;
(%o18) x a y b
(%i19) diff(mu*(x^2*y^3+6*y^5),y)=diff(mu*(2*x^3*y^2+12*x^4),x)$
(%i20) factor(lhs(%)-rhs(%));
(%o20) x a y b ( 6 b y 4 + 30 y 4 + b x 2 y 2 - 2 a x 2 y 2 - 3 x 2 y 2 - 12 a x 3 - 48 x 3 )
(%i21) collectterms(%/mu,x,y);
(%o21) ( 6 b + 30 ) y 4 +( b - 2 a - 3 ) x 2 y 2 +( - 12 a - 48 ) x 3
(%i22) solve([coeff(%,y^4),coeff(%,x^2*y^2),coeff(%,x^3)],[a,b]);
solve: dependent equations eliminated: (2)
(%o22) [ [ a = - 4 , b = - 5 ] ]
(%i23) 'mu=subst(%[1],mu);
1
(%o23) =
x y5
4
odeL.wxm 1 / 1
odeL
Function: odeL(eqn, dvar, ivar)
The function odeL solves an linear ODEs with constant coefficients.
Examples:
(%i3) eq:'diff(y,x,3)-2*'diff(y,x,2)+'diff(y,x) = 0$
(%i4) odeL(eq,y,x);
(%o4) y = x %e x C3 + %e x C2 + C1
(%i5) eq:'diff(y,x,4)+8*'diff(y,x,2)+16*y=x*exp(3*x)+sin(x)^2+1$
(%i6) sol:odeL(eq,y,x);
(%o6) y = x sin( 2 x ) C4 + sin( 2 x ) C3 + x cos( 2 x ) C2 + cos( 2 x ) C1 +
2197 x 2 cos( 2 x )+( 832 x - 768 ) %e 3 x + 13182
140608
(%i7) ode_check(eq,sol);
(%o7) 0
(%i8) eq:'diff(y,x,3)-3*'diff(y,x,2)+y=sin(x)^3;
d3 d2
(%o8) y - 3 y + y = sin( x )3
dx 3
d x 2
(%i9) solvet(k^3-3*k^2+1=0,k);
5 7
(%o9) [ k = 2 cos + 1 , k = 2 cos + 1 , k = 2 cos + 1 ]
9 9 9
(%i10) sol:odeL(eq,y,x);
2 cos
7 x + x 5 x + x
2 cos 2 cos x + x
(%o10) y = %e
9
C3 + %e
9
C2 + %e 9 C1 -
28 sin( 3 x )+ 27 cos( 3 x )- 1068 sin( x )- 267 cos( x )
6052
(%i11) ode_check(eq,sol);
(%o11) 0
odeL_ic.wxm 1 / 1
odeL_ic
Function: odeL_ic(eqn, dvar, ivar, ic)
The function odeL_ic solves initial value problems for linear ODEs with constant coefficients.
Examples:
(%i5) eq:'diff(y,x,4)-y=8*exp(x);
d4
(%o5) y - y = 8 %e x
d x4
(%i7) eq:'diff(y,x,5)-'diff(y,x)=0;
d5 d
(%o7) y- y=0
d x5 dx
(%i8) sol:odeL_ic(eq,y,x,[0,0,1,0,1,2]);
(%o8) y = cos( x )+ %e x - 2
Test:
(%i9) ode_check(eq,sol);
(%o9) 0
(%i10) makelist(diff(rhs(sol),x,k),k,0,4)$
ev(%,x=0);
(%o11) [ 0 , 1 , 0 , 1 , 2 ]
fs.wxm 1 / 2
fs
Function: fs(eq, y, x).
Find fundamental system of solutions of the linear n-th order differential equation with constant coeficients.
Examples:
(%i1) load(odes)$
1.
(%i2) eq:'diff(y,x,3)+3*'diff(y,x,2)-10*'diff(y,x)=x-1;
d3 d2 d
(%o2) y + 3 y - 10 y = x - 1
d x3 d x2 d x
(%i3) fs(eq,y,x);
(%o3) [ 1 , %e - 5 x , %e 2 x ]
(%i4) odeL(eq,y,x);
5 x2 - 7 x
(%o4) y = %e 2 x C3 + %e - 5 x C2 + C1 -
100
2.
(%i5) eq:'diff(y,x,4)+8*'diff(y,x,2)+16*y=x^2*exp(x)*sin(x);
d4 d2
(%o5) y +
8 y + 16 y = x 2 %e x sin( x )
dx 4
d x 2
(%i6) fs(eq,y,x);
(%o6) [ cos( 2 x ), x cos( 2 x ), sin( 2 x ), x sin( 2 x )]
(%i7) sol:odeL(eq,y,x);
(%o7) y = x sin( 2 x ) C4 + sin( 2 x ) C3 + x cos( 2 x ) C2 + cos( 2 x ) C1 +
( 75 x 2 - 260 x + 268 ) %e x sin( x )+( - 100 x 2 + 180 x + 26 ) %e x cos( x )
2500
3.
(%i8) eq:'diff(y,x,8)+'diff(y,x,2)=x^5$
(%i9) solvet(k^8+k^2=0,k);
%i 3 %i 3 3 %i %i 3
(%o9) [ k = %i , k = - ,k=- - , k = - %i , k = - ,k= + ,k=0]
2 2 2 2 2 2 2 2
fs.wxm 2 / 2
(%i10) fs(eq,y,x);
3 x 3 x 3 x 3 x
- x x - x x
(%o10) [ 1 , x , %e 2 cos , %e 2 cos , %e 2 sin , %e 2 sin ,
2 2 2 2
cos( x ), sin( x )]
(%i11) sol:odeL(eq,y,x);
3 x 3 x 3 x
x - x
(%o11) y = sin( x ) C8 + cos( x ) C7 + %e 2 sin C6 + %e 2 sin C5 + %e 2
2 2
3 x
x - x x 7 - 5040 x
cos C4 + %e 2 cos C3 + x C2 + C1 +
2 2 42
Test:
(%i12) load(contrib_ode)$
(%i13) ode_check(eq,sol);
(%o13) 0
4.
(%i14) eq:'diff(y,x,6)-3*'diff(y,x,5)-3*'diff(y,x,4)+12*'diff(y,x,3)
-3*'diff(y,x,2)-6*'diff(y,x,1)+2*y=2*x^7+sin(x)^3;
d6 d5 d4 d3 d2 d
(%o14) y - 3 y - 3 y + 12 y - 3 y - 6 y + 2 y = sin( x )3 +
dx 6
d x 5
d x 4
d x 3
d x 2
d x
2x 7
(%i15) fs(eq,y,x);
2 cos
2 x 4 x 8 x
2 cos 2 cos
(%o15) [ %e x , %e 9 , %e 9 , %e 9 , %e x - 3 x , %e 3 x + x ]
(%i16) sol:odeL(eq,y,x)$
(%i17) expand(%);
8 x
2 cos
4 x
2 cos
(%o17) y = %e 3 x + x C6 + %e x - 3 x C5 + %e 9 C4 + %e 9 C3 +
2 x
2 cos
%e 9 C2 + %e x C1 + 943 sin( 3 x )- 1071 cos( 3 x )+ 3 sin( x )+ 63 cos( x )+ x 7 + 21 x 6 +
8145160 8145160 1768 1768
441 x 5 + 6300 x 4 + 74970 x 3 + 644490 x 2 + 3734010 x + 10735200
Test:
(%i18) ode_check(eq,sol)$
trigreduce(%)$
trigrat(%);
(%o20) 0
partsol.wxm 1 / 2
partsol
Function: partsol(eq, y, x).
Find partial solution of the linear n-th order differential equation
with constant coefficients.
Examples:
(%i1) load(odes)$
1.
(%i2) eq:'diff(y,x,3)+3*'diff(y,x,2)-10*'diff(y,x)=x-1;
d3 d2 d
(%o2) y + 3 y - 10 y = x - 1
dx 3
d x 2
d x
(%i3) partsol(eq,y,x);
5 x2 - 7 x
(%o3) -
100
(%i4) odeL(eq,y,x);
5 x2 - 7 x
(%o4) y = %e 2 x C3 + %e - 5 x C2 + C1 -
100
2.
(%i5) eq:'diff(y,x,4)+'diff(y,x,3)-3*'diff(y,x,2)-5*'diff(y,x)-2*y=
exp(2*x)-exp(-x);
d4 d3 d2 d
(%o5) y+ y - 3 y - 5 y - 2 y = %e 2 x - %e - x
dx 4 dx 3
d x 2
d x
(%i6) partsol(eq,y,x);
%e - x ( 2 x %e 3 x + 3 x 3 + 4 x 2 + 2 x )
(%o6)
54
(%i7) odeL(eq,y,x);
(%o7) y = %e 2 x C4 + x 2 %e - x C3 + x %e - x C2 + %e - x C1 +
%e - x ( 2 x %e 3 x + 3 x 3 + 4 x 2 + 2 x )
54
(%i8) expand(%)$
(%i9) y=collectterms(rhs(%),exp(-x),exp(2*x));
x x3 2 x2 x
(%o9) y = %e 2 x C4 + + %e - x x 2 C3 + x C2 + C1 + + +
27 18 27 27
partsol.wxm 2 / 2
3.
(%i10) eq:'diff(y,x,3)+'diff(y,x,1)=1/cos(x)$
(%i11) partsol(eq,y,x);
sin( x )- 1
log - 2 sin( x ) log( cos( x ))+ 2 x cos( x )
sin( x )+ 1
(%o11) -
2
(%i12) sol:odeL(eq,y,x);
sin( x )- 1
log - 2 sin( x ) log( cos( x ))+ 2 x cos( x )
sin( x )+ 1
(%o12) y = sin( x ) C3 + cos( x ) C2 + C1 -
2
Test:
(%i13) load(contrib_ode)$
(%i14) ode_check(eq,sol);
(%o14) 0
4.
(%i15) eq:'diff(y,x,3)+8*'diff(y,x,1)+9*y=cos(x)^3;
d3 d
(%o15) y +8 y + 9 y = cos( x )3
dx 3 d x
(%i16) partsol(eq,y,x);
13 sin( 3 x )- 39 cos( 3 x )- 63 sin( x )- 81 cos( x )
(%o16) -
1560
(%i17) sol:odeL(eq,y,x);
5 7 x 5 7 x
(%o17) y = %e x / 2 sin C3 + %e x / 2 cos C2 + %e - x C1 -
2 2
13 sin( 3 x )- 39 cos( 3 x )- 63 sin( x )- 81 cos( x )
1560
Test:
(%i18) load(contrib_ode)$
(%i19) ode_check(eq,sol);
(%o19) 0
odeM.wxm 1 / 2
odeM
Function: odeM(A,F,t)
Find solutions of linear system of ODEs
with constant coefficients in matrix form:
Y' = AY + F
Examples:
(%i1) load(odes)$
1. Y' = AY + F.
(%i2) A:matrix([1,1],[4,1]);
1 1
(%o2)
4 1
(%i3) F:transpose([t-2,4*t-1]);
t-2
(%o3)
4 t-1
(%i4) sol:odeM(A,F,t);
%e 3 t %e - t %e 3 t %e - t
4 - 4 C2 + 2 + 2 C1 - t
(%o4)
%e 3 t %e - t
2 + 2 C2 +( %e 3 t - %e - t ) C1 + 1
Test:
(%i5) diff(sol,t)-A.sol-F$
expand(%);
0
(%o6)
0
2. Y' = AY.
(%i7) A:matrix([2,0,-8,-3],[-18,-1,0,0],[-9,-3,-25,-9],[33,10,90,32]);
2 0 -8 -3
- 18 - 1 0 0
(%o7)
-9 - 3 - 25 - 9
33 10 90 32
(%i8) F:transpose([0,0,0,0])$
odeM.wxm 2 / 2
(%i10) solve(%);
(%o10) [ x = 2 - 3 %i , x = 3 %i + 2 ]
(%i11) odeM(A,F,t)$
(%i12) sol:ratsimp(%);
(%o12)
( - 3 t - 1 ) %e 2 t sin( 3 t ) C4 +(( - 9 t - 3 ) %e 2 t sin( 3 t )+ t %e 2 t cos( 3 t )) C3 -
(%i13) sol[1,1];
(%o13) ( - 3 t - 1 ) %e 2 t sin( 3 t ) C4 +(( - 9 t - 3 ) %e 2 t sin( 3 t )+ t %e 2 t cos( 3 t )) C3 -
t %e 2 t sin( 3 t ) C2 +( %e 2 t cos( 3 t )- 3 t %e 2 t sin( 3 t ))C1
(%i14) sol[2,1];
(%o14) (( 9 t + 3 ) %e 2 t sin( 3 t )- 9 t %e 2 t cos( 3 t )) C4 +
(( 24 t + 10 )%e 2 t sin( 3 t )- 30 t %e 2 t cos( 3 t ))C3 +
( 3 t %e 2 t sin( 3 t )+( 1 - 3 t ) %e 2 t cos( 3 t ))C2 +
(( 9 t - 3 ) %e 2 t sin( 3 t )- 9 t %e 2 t cos( 3 t ))C1
(%i15) sol[3,1];
(%o15) - 3 %e 2 t sin( 3 t ) C4 +( %e 2 t cos( 3 t )- 9 %e 2 t sin( 3 t )) C3 - %e 2 t sin( 3 t )
C2 - 3 %e 2 t sin( 3 t ) C1
(%i16) sol[4,1];
(%o16) ( 9 %e 2 t sin( 3 t )+( 3 t + 1 ) %e 2 t cos( 3 t )) C4 +
(( t + 27 )%e 2 t sin( 3 t )+ 9 t %e 2 t cos( 3 t ))C3 +( 3 %e 2 t sin( 3 t )+ t %e 2 t cos( 3 t ))
C2 +( 10 %e 2 t sin( 3 t )+ 3 t %e 2 t cos( 3 t ))C1
Test:
(%i17) diff(sol,t)-A.sol$
expand(%);
0
0
(%o18)
0
0
odeM_ic.wxm 1 / 2
odeM_ic
Function: odeM_ic(A, F, t, t0, Y0)
Find solutions of initial problem for linear system of ODEs
in matrix form:
Examples:
(%i1) load(odes)$
1. Y' = AY + F, Y(0)=Y0
(%i2) A:matrix([2,-4],[2,-2]);
2 -4
(%o2)
2 -2
(%i3) F:transpose([4*%e^(-2*t),0]);
4 %e - 2 t
(%o3)
0
(%i4) Y0:transpose([0,0]);
0
(%o4)
0
(%i5) sol:odeM_ic(A,F,t,0,Y0);
2 sin( 2 t )
(%o5)
sin( 2 t )- cos( 2 t )+ %e - 2 t
Test:
(%i8) ev(sol,t=0);
0
(%o8)
0
odeM_ic.wxm 2 / 2
(%i9) A:matrix([4,1,1,7],[1,4,10,1],[1,10,4,1],[7,1,1,4]);
4 1 1 7
1 4 10 1
(%o9)
1 10 4 1
7 1 1 4
(%i10) F:transpose([0,0,0,0])$
(%i11) Y0:transpose([15,35,55,75]);
15
35
(%o11)
55
75
(%i13) sol:odeM_ic(A,F,t,0,Y0);
27 %e 15 t + 18 %e 10 t - 30 %e - 3 t
54 %e 15 t - 9 %e 10 t - 10 %e - 6 t
(%o13)
54 %e 15 t - 9 %e 10 t + 10 %e - 6 t
27 %e 15 t + 18 %e 10 t + 30 %e - 3 t
Test:
(%i14) diff(sol,t)-A.sol$
expand(%);
0
0
(%o15)
0
0
(%i16) ev(sol,t=0);
15
35
(%o16)
55
75
matrix_exp.wxm 1 / 1
matrix_exp
Function: matrix_exp(A,t)
Returns matrix exponential e^(At)
computed via Laplace transforms.
(%i1) matrix_exp(A,r):=
block([n,B,s,t,Lap,f],
n:length(A),
B:invert(s*ident(n)-A),
Lap(f):=ilt(f, s, t),
matrixmap(Lap,B),
subst(t=r,%%))$
Examples:
1.
(%i2) A:matrix([1,1],[0,1]);
1 1
(%o2)
0 1
(%i3) matrix_exp(A,t);
%e t t %e t
(%o3)
0 %e t
(%i4) e^'A=matrix_exp(A,1);
%e %e
(%o4) e A =
0 %e
2.
(%i5) A:matrix([21,17,6],[-5,-1,-6],[4,4,16]);
21 17 6
(%o5) - 5 - 1 - 6
4 4 16
(%i6) e^'A=matrix_exp(A,1);
13 %e 16 %e 4 13 %e 16 5 %e 4 %e 16 %e 4
- - -
4 4 4 4 2 2
(%o6) e A = %e 4 9 %e 16 5 %e 4 9 %e 16 %e 4 %e 16
- - -
4 4 4 4 2 2
4 %e 16 4 %e 16 %e 16
odelinsys.wxm 1 / 1
odelinsys
Function: odelinsys(A, F, x, x0, Y0)
Find solutions of initial problem for linear system of ODEs
in matrix form: Y' = AY + F, Y(x0) = Y0.
Examples:
(%i3) A:matrix([1,3],[-1,5]);
1 3
(%o3)
-1 5
(%i6) sol:odelinsys(A,F,x,0,Y0);
7 %e 4 x 15 %e 2 x 11 x 29
+ + +
32 8 8 32
(%o6)
7 %e 4 x 5 %e 2 x x 5
+ - +
32 8 8 32
Test:
(%i7) diff(sol,x)-A.sol-F,expand;
0
(%o7)
0
2. Solve Y' = AY
(%i8) A:matrix([4,-1,0],[3,1,-1],[1,0,1]);
4 -1 0
(%o8) 3 1 -1
1 0 1
(%i9) sol:odelinsys(A,[0,0,0],t,0,[C1,C2,C3]),factor;
%e 2 t ( t 2 C3 - t 2 C2 - 2 t C2 + t 2 C1 + 4 t C1 + 2 C1 )
2
(%o9) %e 2 t ( t 2 C3 - t C3 - t 2 C2 - t C2 + C2 + t 2 C1 + 3 t C1 )
%e 2 t ( t 2 C3 - 2 t C3 + 2 C3 - t 2 C2 + t 2 C1 + 2 t C1 )
2
wronskian.wxm 1 / 1
wronskian
Function: wronskian ([f_1, ..., f_n], x)
Returns the Wronskian matrix of the list of expressions [f_1, ..., f_n]
in the variable x.
(%i1) load(odes)$
Examples:
1.
(%i2) wronskian([f(x),g(x),h(x)],x);
f( x ) g( x ) h( x )
d d d
f( x ) g( x ) h( x )
(%o2) dx dx dx
d2 d2 d2
f( x ) g( x ) h( x )
d x2 d x2 d x2
(%i3) depends(y,x);
(%o3) [ y( x )]
(%i4) wronskian([x,x^3,y],x);
x x3 y
d
1 3 x2 y
(%o4) dx
d2
0 6x y
d x2
(%i5) determinant(%)=0;
d2 d 3 d 2
(%o5) x 3 x 2 y - 6 x y -x y + 6 x y = 0
d x2 d x d x2
(%i6) eq:expand(%/x/2);
d2 d
(%o6) x 2 y - 3 x y + 3 y = 0
d x2 d x
(%i7) ode2(eq,y,x);
(%o7) y = %k1 x 3 + %k2 x
References:
1. http://maxima.sourceforge.net/
3.