Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка Maple, Стребуляев

.pdf
Скачиваний:
297
Добавлен:
27.03.2015
Размер:
1.24 Mб
Скачать

> 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