Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы математического моделирования в системе Maxima. Учебное пособие для студентов агроинженерного факультета по направлению 35.03.06 - «Агроинженер.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
805 Кб
Скачать

Приложение А

Листинги программ

А.1. Численное решение нелинейных уравнений

А.1.1. Локализация корней уравнения

(%i1) l(x):=1/2-(x-1/2)^3$ r(x):=exp(-3*x^2)$

(%i2) y(x):=l(x)-r(x)$

(%i3) plot2d([r(x),l(x),y(x)],[x,-1/2,3/2],[y,-1/2,3/2])$

А.1.2. Метод бисекции

(%i1) f(x):=1/2-(x-1/2)^3-exp(-3*x^2)$

(%i2) a:-1/4$ b:0$ n:0$ en:1.E-4$

(%i3) for i:1 while abs(b-a)/2 > en do ( c:(a+b)/2, n:i,

if f(a)*f(c) < 0 then b:c else a:c)$ print("Приближенное решение x[", n, "]=",

round((a+b)/2/en)*en)$ Приближенное решение [11] = 0.2169

А.1.3. Метод простой итерации

(%i1) y(x):=1/2-(x-1/2)^3-exp(-3*x^2)$

f(x):=1/2+(1/2-exp(-3*x^2))^(1/3)$

p(x):=(2*x*exp(-3*x^2))/(1/2-exp(-3*x^2))^(2/3)$

(%i4) plot2d([x,f(x),y(x)], [x,-1/2,3/2], [y,-1/2,5/2])$

(%i5) a:-1/4$ b:0$ n:0$ en:1.E-4$

x0:(a+b)/2$ x1:float(f(x0))$

q:float(lmax(abs([p(a),p(b)])));

64

А. Листинги программ

(%o11) 0.86972822962442

(%i12) if q>=1 then error("Сходимость отсутствует.") else for i:1 while abs(x1-x0)*q/(1-q) > en do (

x0:x1, n:i, x1:float(f(x0)))$ print("Приближенное решение x[", n, "]=",

round(x1/en)*en)$

Приближенное решение [30] = 0.2169

А.1.4. Метод касательных

(%i1) f(x):=1/2-(x-1/2)^3-exp(-3*x^2)$ p(x):=6*x*exp(-3*x^2)-3*(x-1/2)^2$ w(x):=x-f(x)/p(x)$

(%i4) a:-1/4$ b:0$ n:0$ en:1.E-4$ x0:(a+b)/2$ x1:float(w(x0))$

(%i10) for i:1 while abs(x1-x0) > en do ( x0:x1, n:i, x1:float(w(x0)))$

print("Приближенное решение x[", n, "]=", round(x1/en)*en)$

Приближенное решение [3] = 0.2169

А.2. Методы численного интегрирования

А.2.1. Метод прямоугольников

(%i1) f(x):=exp(-x^2/2)/sqrt(2*%pi)$

(%i2) a:-1$ b:3$ en:1.E-6$ Jc(h):=float(h*sum(f(a+h*(i-1/2)),i,1,(b-a)/h))$

(%i6) h:1/2$ J0:Jc(2*h)$ J1:Jc(h)$

(%i9) while abs(J1-J0) > en do ( h:h/2, J0:J1, J1:Jc(h))$

print("J[", h, "]=", round(J1/en)*en)$

[ 2561 ] = 0.839995

А.3. Численное решение задачи Коши

65

А.2.2. Метод трапеций

(%i1) f(x):=exp(-x^2/2)/sqrt(2*%pi)$

(%i2) a:-1$ b:3$ en:1.E-6$ Jt(h):=float(h*((f(a)+f(b))/2 +

sum(f(a+h*i),i,1,(b-a)/h-1)))$

(%i6) h:1/2$ J0:Jt(2*h)$ J1:Jt(h)$

(%i9) while abs(J1-J0)/3 > en do ( h:h/2, J0:J1, J1:Jt(h))$

print("J[", h, "]=", round(J1/en)*en)$

[ 2561 ] = 0.839995

А.2.3. Метод парабол

(%i1) f(x):=exp(-x^2/2)/sqrt(2*%pi)$

(%i2) a:-1$ b:3$ en:1.E-6$ Jp(h):=float(h/6*(f(a) + f(b) +

4*sum(f(a+h*(i-1/2)),i,1,(b-a)/h) + 2*sum(f(a+h*i),i,1,(b-a)/h-1)))$

(%i6) h:1/2$ J0:Jp(2*h)$ J1:Jp(h)$

(%i9) while abs(J1-J0)/7 > en do ( h:h/2, J0:J1, J1:Jp(h))$

print("J[", h, "]=", round(J1/en)*en)$

[ 18 ] = 0.839995

А.3. Численное решение задачи Коши

А.3.1. Метод Эйлера

(%i1) a:0$ b:1.6$ ya:0.5$

h:[0.4,0.2,0.1]$

f(x,y):=y-x;

(%o5) ( , ) :=

(%i6) x[i,j]:=a+h[j]*i;

y[i,j]:=y[i-1,j]+h[j]*f(x[i-1,j],y[i-1,j]);

 

66

 

 

 

А. Листинги программ

(%o6)

, := +

 

 

(%o7)

, := 1, + ( 1, , 1, )

(%i8)

y[0,1]:ya$ y[0,2]:ya$ y[0,3]:ya$

 

 

dots1:makelist([x[i,1],y[i,1]],i,0,(b-a)/h[1]);

 

 

dots2:makelist([x[i,2],y[i,2]],i,0,(b-a)/h[2])$

 

 

dots3:makelist([x[i,3],y[i,3]],i,0,(b-a)/h[3])$

(%o11)

[[0, 0.5],[0.4, 0.7],[0.8, 0.82],[1.2, 0.828],[1.6, 0.6792]]

(%i14)

ode2(’diff(y,x)=f(x,y),y,x);

 

 

ic1(%,x=a,y=ya);

(%o14)

= (% (− − 1)% )%

 

 

rat: replaced -0.5 by -1/2 = -0.5

(%o15)

=

%

2

2

 

 

 

 

 

 

 

2

 

 

А.3.2. Метод Эйлера–Коши

(%i1) a:0$ b:1.6$ ya:0.5$

h:[0.4,0.2,0.1]$

f(x,y):=y-x;

(%o5) ( , ) :=

(%i6) x[i,j]:=a+h[j]*i;

y[i,j]:=y[i-1,j]+h[j]*f(x[i-1,j],y[i-1,j]); z[i,j]:=z[i-1,j]+h[j]*(f(x[i-1,j],z[i-1,j])+

f(x[i,j],y[i,j]))/2;

(%o6) , := +

(%o7) , := 1, + ( 1, , 1, )

(%o8) , := 1, + ( ( 1, , 12, ) + ( , , , )) (%i9) y[0,1]:ya$ y[0,2]:ya$ y[0,3]:ya$

z[0,1]:ya$ z[0,2]:ya$ z[0,3]:ya$

dots1:makelist([x[i,1],z[i,1]],i,0,(b-a)/h[1]);

dots2:makelist([x[i,2],z[i,2]],i,0,(b-a)/h[2])$

dots3:makelist([x[i,3],z[i,3]],i,0,(b-a)/h[3])$

(%o15) [[0,0.5],[0.4,0.66],[0.8,0.716],[1.2,0.6248],[1.6,0.3256]]

А.4. Моделирование в приложениях

67

(%i18) ode2(’diff(y,x)=f(x,y),y,x);

ic1(%,x=a,y=ya);

(%o18) = (% (− − 1)% )%

rat: replaced -0.5 by -1/2 = -0.5

(%o19) = % 22 2

А.3.3. Метод Рунге–Кутты

(%i1) a:0$ b:1.6$ ya:0.5$

h:[0.4,0.2,0.1]$

f(x,y):=y-x;

(%o5) ( , ) :=

(%i6) load(dynamics)$

dots1:rk(f(x,y),y,ya,[x,a,b,h[1]]);

dots2:rk(f(x,y),y,ya,[x,a,b,h[2]])$

dots3:rk(f(x,y),y,ya,[x,a,b,h[3]])$

(%o7) [[0.0,0.5],[0.4,0.654133],[0.8,0.687366],[1.2,0.540247],[1.6,0.124090]] (%i10) ode2(’diff(y,x)=f(x,y),y,x);

ic1(%,x=a,y=ya);

(%o10) = (% (− − 1)% )%

rat: replaced -0.5 by -1/2 = -0.5

(%o11) = % 22 2

А.4. Моделирование в приложениях

А.4.1. Падение тела с учётом сопротивления воздуха

(%i1) assume(k>0)$ assume(g>0)$

de:’diff(v,t)+k*v**2-g$

gs:radcan(solve(ode2(de,v,t),v)[1]);

ps:radcan(ic1(gs,t=0,v=v0));

68

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А. Листинги программ

 

 

 

 

 

 

 

 

 

 

 

%

 

 

 

(2 +2% ) + 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(%o4)

=

(

 

 

 

 

 

 

 

 

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(% (2

+2% ) 1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

% 2+ 1

0 + % 2

(%o5)

=

 

(

 

 

 

 

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

% 2

0 +

 

 

% 2 + 1

(%i6)

vs:limit(rhs(gs),t,inf);( )

(

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(%o6)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(%i7)

ws:radcan(subst([t=u*vs/(g*2),v0=w0*vs],rhs(ps)/vs));

(%o7)

(% + 1)

0 + %

1

 

 

 

 

 

 

 

 

 

 

(% 1)

0 + %

 

 

 

 

 

 

 

 

 

 

 

 

 

+ 1

 

 

 

 

 

 

 

 

 

 

А.4.2. Колебания маятника с учётом силы трения

(%i1)

de:’diff(x,u,2)+2*a*’diff(x,u)+x;

 

v:’diff(x,u)$

 

(%o1)

 

d2

+ 2 (

d

) +

 

d 2

d

(%i3) array(ps,4)$ for i thru 4 do

ps[i]: ic2(ode2(subst(a=i/3,de),x,u),u=0,x=1,v=0)$

logcontract(ps[2]); ps[3]; logcontract(ps[4]);

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

+ 5 cos

5

 

 

 

 

 

% 3

2 sin

 

 

 

 

(%o5)

=

 

 

 

 

 

(

( 3 )

 

 

 

 

 

(

3 ) )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

(%o6)

= ( + 1)%

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

 

4)

 

 

 

 

 

 

 

 

 

(

 

7+4)

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

47 + 7 %

 

47 7 %

 

 

 

3

 

 

3

(%o7)

=

(

 

 

 

 

)

 

 

 

 

 

( )

 

 

 

 

 

 

 

 

 

 

14

 

 

 

 

 

 

 

 

 

 

 

14

 

 

 

А.4.3. Полёт тела с учётом сопротивления воздуха

(%i1) eq1:’diff(v,t)=-k*v*sqrt(v**2+w**2);

eq2:’diff(w,t)=-k*w*sqrt(v**2+w**2)-g;

eq3:’diff(x,t)=v;

eq4:’diff(y,t)=w;

 

 

 

А.4. Моделирование в приложениях

69

(%o1)

 

d

 

 

 

 

 

 

 

= 2 + 2

 

 

 

 

d

 

(%o2)

 

d

 

 

 

 

 

 

 

= 2 + 2

 

 

 

 

d

 

(%o3)

 

d

=

 

 

 

 

d

 

(%o4)

 

d

=

 

 

 

 

d

 

(%i5)

load(dynamics)$ vxy:[v,w,x,y]$

 

fin:[1,2,0,1]$ tin:[t,0,1,0.01]$ eqs:fullmapl(rhs,[eq1,eq2,eq3,eq4])$ s1:rk(subst([k=0.1,g=9.81],eqs),vxy,fin,tin)$ s2:rk(subst([k=0.2,g=9.81],eqs),vxy,fin,tin)$ s3:rk(subst([k=0.3,g=9.81],eqs),vxy,fin,tin)$ s4:rk(subst([k=0.4,g=9.81],eqs),vxy,fin,tin)$

Учебное издание

Москалев Павел Валентинович Шацкий Владимир Павлович

Учебное пособие издаётся в авторской редакции

Подписано в печать 28.12.2015 г. Формат 60 × 84 1 .

16

Бумага кн.-журн. Усл. п.л. 4,38. Гарнитура «Concrete». Тираж 100 экз. Заказ № ____

Федеральное государственное бюджетное образовательное учреждение высшего образования «Воронежский государственный аграрный университет имени императора Петра I»

Типография ФГБОУ ВО Воронежский ГАУ. 394087, г. Воронеж, ул. Мичурина, 1 Информационная поддержка: http://tipograf.vsau.ru

Отпечатано с оригинал-макета заказчика. Ответственность за содержание предоставленного оригинал-макета типография не несёт. Требования и пожелания направлять авторам данного издания.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]