Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЧМ_2012 / ЧМ_Maxima_Excel / ЧМ_Excel_Maxima.pdf
Скачиваний:
198
Добавлен:
09.06.2015
Размер:
1.41 Mб
Скачать

Решение обыкновенных дифференциальных уравнений

Решить дифференциальное уравнение с заданными начальными условиями:

, y(0), [a,b]=[0,0.3], h=0.1.

Решить краевую задачу методом прогонки:

A(x) =

0.4 + 2x +

 

x2

,

 

 

 

2

 

 

B(x) = x 0.7 ,

 

 

 

 

C (x) = −0.95x 2 ,

 

 

 

 

f (x) =

 

 

+ cos(2x) ,

 

 

 

x

 

 

 

 

 

π

 

 

xn x0

 

x0 = 1, xn = 1.5, n =

8, h =

= 0.0625 ,

n

 

 

 

 

 

 

 

 

y(x0 ) = 1.3, y(xn ) = 1.1.

Метод Эйлера

Файл eiler.mac:

func(x,y) := exp(x*y); print("Method eilera"); print("y'=exp(x*y)");

x0 : read("Vvedite x0: "); xN : read("Vvedite xN: "); h : read("Vvedite shag: "); y : read("Vvedite y0: ");

print("x

y");

while x0<xN+h do(

 

dy : h*func(x0,y),

 

print(x0,"

", y),

y : y+dy,

 

x0 : x0+h

 

);

 

Рис. 20. Метод Эйлера.

Метод Рунге-Кутты 4-го порядка

Файл RK4.mac:

func(x,y):=exp(x*y);

x0 : read("Vvedite x0: "); xN : read("Vvedite xN: "); h : read("Vvedite shag: "); y : read("Vvedite y0: ");

x : x0;

 

print("x

y");

while x<xN+h do(

 

print(x,"

",y),

k1

: h*func(x,y),

 

k2

: h*func(x + h/2, y + k1/2),

k3

: h*func(x + h/2, y + k2/2),

k4

: h*func(x + h, y + k3),

y : y+(k1+2*k2+2*k3+k4)/6, x : x+h

);

Рис. 21. Рунге-Кутты 4-го порядка.

Метод Рунге-Кутты 5-го порядка

Файл RK5.mac:

func(x,y):=exp(x*y);

x0 : read("Vvedite x0: "); xN : read("Vvedite xN: "); h : read("Vvedite shag: "); y : read("Vvedite y0: "); x : x0;

print("x y"); while(x<xN+h) do( print(x," ",y), k1 : h*func(x,y)/3,

k2 : h*func(x + h/3, y + k1)/3,

k3 : h*func(x + h/3, y + k1/2 + k2/2)/3,

k4 : h*func(x + h/2, y + 3*k1/8 + 9*k3/8)/3,

k5 : h*func(x + h, y + 3*k1/2 - 9*k3/2 + 6*k4)/3, y : y+(k1 + 4*k4 + k5)/2,

x : x+h );

Рис. 22. Рунге-Кутты 5-го порядка.

Метод Адамса

Файл adams.mac:

func(x,y):=exp(x*y);

x0 : read("Vvedite x0: "); xN : read("Vvedite xN: "); h : read("Vvedite shag: "); y0 : read("Vveidte y(x0): "); n : ceiling(abs(xN-x0)/h);

i : 0; y : y0; x : x0;

array(yh, n); array(yh2, 2*n); while x<=xN do( yh[i] : y,

k1 : h*func(x,y),

k2 : h*func(x + h/2, y + k1/2),

k3 : h*func(x + h/2, y + k2/2),

k4 : h*func(x + h, y + k3),

y : y+(k1+2*k2+2*k3+k4)/6, x : x+h,

i : i + 1 );

i : 4;

x : x0 + i*h; while x<=xN do(

yh[i] : yh[i-1]+h*(55*func(x,yh[i-1])-59*func(x-h,yh[i-2])+37*func(x-2*h,yh[i-3])-9*func(x- 3*h,yh[i-4]))/24,

x : x+h, i : i+1 );

print("Result: y(", xN,") = ", yh[n]); y : y0;

x : x0; h : h/2; i : 0;

while x<=xN do( yh2[i] : y,

k1 : h*func(x,y),

k2 : h*func(x + h/2, y + k1/2),

k3 : h*func(x + h/2, y + k2/2),

k4 : h*func(x + h, y + k3),

y : y+(k1+2*k2+2*k3+k4)/6, x : x+h,

i : i + 1 );

i : 8;

x : x0 + i*h; while x<=xN do(

yh2[i] : yh2[i-1]+h*(55*func(x,yh2[i-1])-59*func(x-h,yh2[i-2])+37*func(x-2*h,yh2[i-3])- 9*func(x-3*h,yh2[i-4]))/24,

x : x+h, i : i+1 );

print("eps = ", (yh[n]-yh2[2*n])/(2^4-1));

Рис. 23. Рунге-Кутты Адамса.

Прогонка

Файл progon.mac:

funA(x) := 0.4+2.0*x+x*x/2.0; funB(x) := x^0.7;

funC(x) := -0.95*x*x;

funF(x) := (x^2+cos(2.0*x/3.1416))/funA(x);

a : read("vvedite a: "); b : read("vvedite b: "); N : read("vvedite n: "); array(y, N);

y[0] : read("vvedite y(a): "); y[N] : read("vvedite y(b): "); h : (b-a)/N;

m[0] : -2.0+funB(a)*h/funA(a);

n[0] : 1.0-funB(a)*h/funA(a)+funC(a)*h*h/funA(a); c[0] : 1.0/m[0];

d[0] : -n[0]*y[0]+funF(a)*h*h; for i:1 thru N do(

x : a+i*h,

m[i] : -2.0+funB(x)*h/funA(x),

n[i] : 1.0-funB(x)*h/funA(x)+funC(x)*h*h/funA(x), c[i] : 1.0/(m[i]-n[i]*c[i-1]),

d[i] : funF(x)*h*h-n[i]*c[i-1]*d[i-1]

);

for i : N thru 2 step -1 do(

y[i-1] : c[i-2]*(d[i-2]-y[i])

);

 

print("x

y");

for i: 0 thru N do(

 

print(a+i*h, "

", y[i])

);

 

Рис. 24. Прогонки.