Методичка Maple, Стребуляев
.pdf> readlib(proot);
proc(p, r) ... end proc
>psqrt(x^2+2*x*y+y^2); # корень квадратный от выражения
вфункции psqrt;
x y
> proot(x^3+3*x^2+3*x+1,3); # корень кубический от выра-
жения в функции proot;
x 1
> psqrt(x+y);
_NOSQRT
> proot(x+y,3);
_NOROOT
> p1:=a1*x^3+b1*x^2+c1*x+d1;
p1 := a1 x3 b1 x2 c1 x d1
> p2:=a2*x^3+b2*x^2+c2*x+d2;
p2 := a2 x3 b2 x2 c2 x d2
> p1+p2;# сумма полиномов;
a1 x3 b1 x2 c1 x d1 a2 x3 b2 x2 c2 x d2
> p1*p2;# произведение полиномов;
(a1 x3 b1 x2 c1 x d1 ) (a2 x3 b2 x2 c2 x d2 )
>collect(%,x);# упорядочивание полинома по убыванию степеней x;
a1 a2 x6 (b1 a2 a1 b2) x5 (c1 a2 b1 b2 a1 c2) x4
(d1 a2 c1 b2 b1 c2 a1 d2) x3 (d1 b2 c1 c2 b1 d2) x2 (d1 c2 c1 d2) xd1 d2
> p3:=p1/p2; # деление полиномов;
p3 := a1 x3 b1 x2 c1 x d1 a2 x3 b2 x2 c2 x d2
> expand(%,x);
a1 x3 |
|
|
b1 x2 |
|
|
c1 x |
|
|
a2 x3 b2 x2 c2 |
x d2 |
|
x2 c2 |
x d2 |
x2 c2 |
x d2 |
||
a2 x3 b2 |
a2 x3 b2 |
|||||||
|
d1 |
|
|
|
|
|
|
|
x2 c2 |
x d2 |
|
|
|
|
|
|
|
a2 x3 b2 |
|
|
|
|
|
|
71
> normal(%);# приведение дроби к нормальному виду; a1 x3 b1 x2 c1 x d1
a2 x3 b2 x2 c2 x d2
> diff(p1,x);# производная от полинома;
3 a1 x2 2 b1 x c1
> diff(p1,x$2);
6 a1 x 2 b1
> Int(p1,x)=int(p1,x);# неопределенный интеграл от поли- |
|||||||
нома; |
a1 x4 |
b1 x3 |
c1 x2 |
|
|||
|
d1 x |
||||||
a1 x3 b1 x2 c1 x d1 dx |
|
|
|
|
|
||
|
|
4 |
|
3 |
|
2 |
|
|
|
|
|
|
> Int(p1,x=0..1)=int(p1,x=0..1); # определенный интеграл
от полинома;
|
1 |
|
|
a1 |
b1 |
c1 |
|
|
|
|
|
d1 |
|||||
a1 x3 b1 x2 c1 x d1 dx |
|
|||||||
|
|
|
|
4 |
3 |
2 |
|
|
0 |
|
|
||||||
> p3; |
|
a1 x3 b1 |
x2 c1 |
x d1 |
|
|
|
|
|
|
|
|
|
|
|||
|
|
a2 x3 b2 |
x2 c2 |
x d2 |
|
|
|
|
> denom(p3);# знаменатель дроби;
a2 x3 b2 x2 c2 x d2
> numer(p3); # числитель дроби;
a1 x3 b1 x2 c1 x d1
> collect(denom(p3),x);
a2 x3 b2 x2 c2 x d2
>collect(numer(p3),x); на множители полинома;
>restart:
>p:=x^4+4;
p:= x4 4
>factor(p); a1 x3 b1 x2 c1 x d1
># Разложение
(x2 2 x 2) (x2 2 x 2)
>factor(p,complex);
72
(x 1. 1. I) (x 1. 1. I) (x 1. 1. I) (x 1. 1. I)
>factor(x^5-6*x^4+9*x^3-6*x^2+8*x,complex);
(x 1. I) x (x 1. I) (x 2. ) (x 4.)
> ifactor(453);
(3) (151)
># наименьший общий делитель (н.о.д) двух полиномов;
>s[1]:=x^2-x*sqrt(3)-sqrt(2)*x+sqrt(6);
s1 := x2 x 3 2 x 6
> s[2]:=x^2-2;
s2 := x2 2
> gcd(s[1],s[2]);# н.о.д двух полиномов; x 2
1.9. Решение дифференциальных уравнений и их систем
Дифференциальные уравнения лежат в основе математического моделирования различных, по своей природе, динамических систем и процессов. В настоящем разделе рассматриваются функции, реализующие аналитическое и численное решение линейных и нелинейных дифференциальных уравнений и их систем. Рассматриваются обыкновенные дифференциальные уравнения, системы уравнений и уравнения в частных производных. Для решения системы дифференциальных уравнений (задача Коши) используется функция dsolve в разных формах записи:
dsolve(ode); dsolve(ode, y(x), extra_args); dsolve({ode,ics}, y(x), extra_args); dsolve({sysode,ics}, {funcs}, extra_args),
где ode — обыкновенное дифференциальное уравнение или система уравнений, y(x) — искомая функция одной переменной, ics — выражение, задающее начальные условия, {sysode} — множество дифференциальных уравнений (система), {funcs} — множество определяемых функций, extra_args — опция, задающая тип решения. Параметр extra_args принимает может принимать следующие значения: exact — аналитическое решение
73
(принято по умолчанию), explicit — решение в явном виде, system — решение системы дифференциальных уравнений, formal series — решение в форме степенного многочлена, series — решение в виде ряда, numeric — решение в численном виде. По умолчанию функция dsolve автоматически выбирает наиболее подходящий метод решения дифференциальных уравнений. Однако в параметрах функции dsolve в квадратных скобках можно указать предпочтительный метод решения дифференциальных уравнений. Допустимы следующие методы: quadrature, lin-
ear, Bernoulli, inverse_linear, separable, homogeneous, Chini, lin_sym, exact, Abel, pot_sym.
Решение обыкновенных дифференциальных уравнений первого порядка:
> restart:with(linalg):with(DEtools):with(plots):
>
> dsolve(diff(y(x),x)-a*x=0,y(x));
a x2 |
|
y(x) 2 |
C1 |
> dsolve(diff(y(x),x)-y(x)=exp(-x),y(x));
|
1 |
e |
( 2 x) |
|
e |
x |
|
y(x) |
|
|
C1 |
|
|
||
|
|
|
|||||
|
2 |
|
|
|
|
||
|
|
|
|
|
|
> dsolve(diff(y(x),x)-y(x)=sin(x)*x,y(x));
1 |
1 |
1 |
sin(x) x ex _C1 |
|||
y(x) |
|
cos(x) x |
|
cos(x) |
|
|
|
|
|
||||
2 |
2 |
2 |
|
> ode_L:=sin(x)*diff(y(x),x)-cos(x)*y(x)=0;
ode_L := sin(x) |
d |
|
y(x) cos(x) y(x) 0 |
|
|||
|
|
||
dx |
|
> dsolve(ode_L,[linear],useInt);
|
cos(x) |
|
|
|
sin(x) |
|
|
y(x) _C1 e |
|
dx
> value(%);
y(x) _C1 sin(x)
> dsolve(ode_L,[separable],useInt);
74
|
cos(x) |
|
y( x) |
|
|
1 |
|
||||
|
|
|
|||
|
|
dx |
|
|
d_a C1 0 |
|
|
|
|||
sin(x) |
|
|
_a |
|
|
|
|
|
|
||
|
|
|
|
|
|
> value(%);
ln(sin(x)) ln(y(x)) C1 0
> mu:=intfactor(ode_L);
1
:= sin(x)2
> dsolve(mu*ode_L,[exact],useInt);
y(x) _C1 sin(x)
># Графическое представление решений дифференциального уравнения, применение функции odeplot пакета plots;
>
> restart:with(plots):
>
P:=dsolve({diff(y(x),x)=cos(x^2*y(x)),y(0)=2},y
(x),type=numeric);
P := proc(x_rkf45) ... end proc
> odeplot(P,[x,y(x)],-
15..15,labels=[x,y],color=black,thickness=2);
>
Решение дифференциальных уравнений второго порядка:
75
>restart:
>od1:=diff(y(x),x$2)-diff(y(x),x)=sin(x);
|
d2 |
|
d |
|||||
od1 |
:= |
|
|
|
y(x) |
|
|
|
|
2 |
|
||||||
|
|
|
dx |
|||||
|
dx |
|
|
|
|
y(x) sin(x)
> dsolve({od1},y(x));
1 |
1 |
|
{y(x) |
|
sin(x) cos(x) ex _C1 C2} |
|
||
2 |
2 |
> dsolve({diff(y(x),x$2)- |
||
diff(y(x),x)=sin(x)},y(x)); |
||
1 |
1 |
|
{y(x) |
|
sin(x) cos(x) ex _C1 C2} |
|
||
2 |
2 |
> dsolve({diff(y(x),x$2)- |
|
|
|
|
|
|||||||||
diff(y(x),x)=sin(x),y(0)=0,D(y)(0)=11},y(x));# |
||||||||||||||
уравнение с начальными условиями; |
||||||||||||||
|
|
|
|
1 |
|
|
1 |
|
23 |
x |
||||
y(x) |
|
|
|
sin(x) cos(x) |
e 12 |
|||||||||
2 |
||||||||||||||
|
|
|
|
|
|
2 |
|
2 |
|
|||||
> y(x):=rhs(%); |
|
|
|
1 |
|
|
1 |
|
23 |
x |
||||
|
|
|
|
|
|
|
||||||||
y(x) := |
|
|
|
sin(x) |
cos(x) |
e 12 |
||||||||
2 |
||||||||||||||
|
|
|
|
|
|
2 |
|
2 |
|
|||||
> y(x); |
1 |
|
|
|
|
1 |
23 |
|
x |
|
||||
|
|
|
|
|
|
|
||||||||
|
|
|
sin(x) |
cos(x) |
e 12 |
|||||||||
2 |
||||||||||||||
|
|
|
|
|
2 |
2 |
|
|
|
>restart:
>od2:=m*diff(y(x),x$2)-k*diff(y(x),x);
|
d2 |
|
|
d |
|
||||
od2 |
:= m |
|
|
|
y(x) k |
|
|
y(x) |
|
|
2 |
|
|
||||||
|
|
|
dx |
|
|||||
|
dx |
|
|
|
|
|
|
|
> yxo:=y(0)=0,D(y)(0)=1; # Задание начальных усло-
вий;
yxo := y(0) 0, D(y)(0) 1
> dsolve({od2,yxo},y(x));
k x
m
y(x) m m e
k k
Решение систем дифференциальных уравнений (в явном виде, в виде ряда, с использованием преобразования Лапласа):
> restart:
76
> sys:=diff(y(x),x)=2*z(x)-y(x)- x,diff(z(x),x)=y(x);
sys := dxd y(x) 2 z(x) y(x) x, dxd z(x) y(x)
> fncs:={y(x),z(x)};
fncs := {y(x), z(x)}
> A:=dsolve({sys,y(0)=0,z(0)=1},fncs); # решение
системы уравнений в явном виде (exact);
5 |
|
( 2 x) |
1 |
x |
1 |
x |
5 |
|
( 2 x ) |
1 |
x |
1 |
|||||
A := {z(x) |
e |
|
e |
|
, y(x) |
|
|
e |
|
e |
} |
||||||
2 |
|
||||||||||||||||
12 |
|
|
3 |
|
4 |
6 |
|
|
3 |
|
2 |
> A[1];
|
|
|
|
|
|
|
5 |
|
|
|
( 2 x) |
1 |
x |
1 |
|
x |
|
|
|
|||
|
|
|
|
|
z(x) |
|
|
e |
|
e |
|
|
|
|||||||||
|
|
|
|
|
|
|
12 |
|
|
|
|
3 |
|
4 |
|
2 |
|
|
|
|||
> z(x):=rhs(%); |
|
|
5 |
|
|
|
|
( 2 x) |
1 |
x |
1 |
|
x |
|
|
|
||||||
z(x) := |
|
|
|
|
e |
e |
|
|
|
|||||||||||||
|
|
12 |
|
|
|
3 |
|
4 |
|
2 |
|
|
|
|||||||||
> A[2]; |
|
|
|
|
|
|
|
|
|
|
x |
|
|
|
|
|
|
|
1 x |
|||
5 |
|
|
( 2 x) |
1 x |
1 |
|
|
|
5 |
|
( 2 x) |
1 |
x |
|
||||||||
|
|
|
e |
|
|
e |
e |
|
|
e |
|
|||||||||||
12 |
|
|
||||||||||||||||||||
|
|
3 |
4 |
|
|
|
2 |
12 |
|
|
3 |
|
4 |
2 |
||||||||
> y(x):=rhs(%); |
|
|
5 |
|
|
|
|
( 2 x) |
1 |
x |
1 |
|
x |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
y(x) := |
|
|
|
|
e |
e |
|
|
|
|||||||||
|
|
|
|
12 |
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
|
2 |
|
|
|
>restart:
>sys:=diff(y(x),x)=2*z(x)-y(x)- x,diff(z(x),x)=y(x);
sys := dxd y(x) 2 z(x) y(x) x, dxd z(x) y(x)
> fncs:={y(x),z(x)};
fncs := {y(x), z(x)}
> B:=dsolve({sys,y(0)=0,z(0)=1},fncs,series); # ре-
шение системы уравнений в виде ряда;
|
3 |
2 |
7 |
3 |
13 |
4 |
9 |
5 |
|
|
6 |
|
|||
B := {y(x) 2 x |
|
|
x x |
|
|
|
x |
x O(x |
|
), |
|||||
2 |
|
|
|
||||||||||||
|
|
6 |
|
24 |
|
40 |
|
|
|
|
|
||||
2 |
1 |
3 |
7 |
|
4 |
|
|
13 |
5 |
|
6 |
|
|
|
|
z(x) 1 x |
x |
|
x |
|
x O(x |
|
)} |
|
|
||||||
|
|
|
|
|
|||||||||||
|
2 |
|
24 |
120 |
|
|
|
|
|
|
> y(x):=rhs(B[1]);
77
3 |
2 |
7 |
3 |
13 |
4 |
9 |
5 |
6 |
|
|
|||||
y(x) := 2 x |
|
|
x x |
|
|
|
x |
x O(x |
) |
||||||
|
|
24 |
|||||||||||||
2 |
|
6 |
|
|
40 |
|
|
|
|
||||||
> z(x):=rhs(B[2]); |
|
|
|
|
|
|
|
|
|
|
|
|
|||
3 |
2 |
7 |
3 |
13 |
4 |
9 |
5 |
6 |
|
||||||
z(x) := 2 x |
|
|
x x |
|
x |
x O(x |
|
) |
|||||||
|
|
|
|||||||||||||
2 |
|
6 |
|
24 |
|
40 |
|
|
|
|
>restart:
>sys:=diff(y(x),x)=2*z(x)-y(x)- x,diff(z(x),x)=y(x);
sys := ddx y(x) 2 z(x) y(x) x, ddx z(x) y(x)
> fncs:={y(x),z(x)};
fncs := {y(x), z(x)}
> Order:=8;# задаем порядок приближения рядом (по
умолчанию 6);
Order := 8
> B:=dsolve({sys,y(0)=0,z(0)=1},fncs,series);
|
3 |
|
2 |
7 |
3 |
13 |
4 |
9 |
5 |
53 |
|
|
6 |
107 |
7 |
|
|
8 |
|
|||
B := {y(x) 2 x |
|
|
x x |
|
|
|
x |
x |
|
|
|
x |
x O(x |
|
), |
|||||||
2 |
|
|
|
|
|
|||||||||||||||||
|
|
|
6 |
|
24 |
|
40 |
|
720 |
|
5040 |
|
|
|
|
|
||||||
2 |
1 |
3 |
7 |
|
4 |
|
|
13 |
5 |
3 |
6 |
|
|
53 |
7 |
|
8 |
|
|
|
||
z(x) 1 x |
x |
|
x |
|
x |
x |
|
|
x O(x |
|
)} |
|
|
|||||||||
|
|
|
|
|
|
|
||||||||||||||||
|
2 |
|
24 |
120 |
|
80 |
5040 |
|
|
|
|
|
|
> y(x):=rhs(B[1]);
3 |
2 |
7 |
3 |
13 |
4 |
9 |
5 |
53 |
6 |
107 |
7 |
8 |
|
|
y(x) := 2 x |
|
x x |
|
x |
x |
|
x |
x O(x |
|
) |
||||
|
24 |
720 |
|
|||||||||||
2 |
|
6 |
|
|
40 |
|
|
5040 |
|
|
|
> z(x):=rhs(B[2]);
3 |
2 |
7 |
3 |
13 |
4 |
9 |
5 |
53 |
6 |
107 |
7 |
8 |
|
|
z(x) := 2 x |
|
x x |
|
x |
x |
|
x |
x O(x |
|
) |
||||
|
24 |
720 |
|
|||||||||||
2 |
|
6 |
|
|
40 |
|
|
5040 |
|
|
|
>restart:
>sys:=diff(y(x),x)=2*z(x)-y(x)- x,diff(z(x),x)=y(x);
sys := dxd y(x) 2 z(x) y(x) x, dxd z(x) y(x)
> fncs:={y(x),z(x)};
fncs := {y(x), z(x)}
>
78
> dsolve({sys,y(0)=0,z(0)=1},fncs,method=laplace);#
решение системы уравнений с использованием преобразования Лапласа;
5 |
|
( 2 x) |
1 |
1 |
x |
5 |
|
( 2 x) |
x 1 |
1 |
x |
|
|||
{y(x) |
|
|
e |
|
e , z(x) |
e |
|
e |
|
} |
|||||
|
|
|
|
||||||||||||
6 |
|
|
2 |
3 |
|
12 |
|
|
2 |
4 |
3 |
|
|
Численное решение системы дифференциальных уравнений:
>restart:
>sys:=diff(y(x),x)=2*z(x)-y(x)- x,diff(z(x),x)=y(x);
sys := dxd y(x) 2 z(x) y(x) x, dxd z(x) y(x)
> fncs:={y(x),z(x)};
fncs := {y(x), z(x)}
> F:=dsolve({sys,y(0)=0,z(0)=1},fncs,numeric); #
решение уравнения по методу Рунге-Кутта- Фелберга;
F := proc(x_rkf45) ... end proc
> F(2);
[x 2., y(x) 2.94775576123128014, z(x) 3.72064997248744600]
plots[odeplot](F, [x,y(x)],0..2.5,labels=[x,y],color=red); # построения графика y(x) решения;
79
> plots[odeplot](F,
[x,z(x)],0..2.5,labels=[x,z],color=red); # построения графика z(x) решения;
>restart:with(plots):
>sys:=diff(y(x),x)=z(x),diff(z(x),x)=3*sin(y(x));
sys := ddx y(x) z(x), ddx z(x) 3 sin(y(x))
> fncs:={y(x),z(x)};
fncs := {y(x), z(x)}
> P:=dsolve({sys,y(0)=0,z(0)=1},fncs,type=numeric);
P := proc(x_rkf45) ... end proc
> odeplot(P,[[x,y(x)],[x,z(x)]],-
4..4,numpoints=25,color=red,thickness=2);# построение графиков y(x) и z(x) в одних осях;
80