- •Основы математического моделирования
- •Содержательные математические модели
- •Классификация содержательных моделей
- •Формальные математические модели
- •Законы сохранения
- •Вариационные принципы
- •Элементы теории размерностей
- •Контрольные вопросы
- •Основы работы с системой Maxima
- •Установка и запуск системы Maxima
- •Графический интерфейс wxMaxima
- •Справочная информация в wxMaxima
- •Сохранение данных и управление wxMaxima
- •Система компьютерной математики Maxima
- •Основные возможности системы Maxima
- •Скалярные выражения
- •Векторные и матричные выражения
- •Функции и управляющие структуры
- •Контрольные вопросы
- •Элементы вычислительной математики
- •Основы теории погрешностей
- •Абсолютная и относительная погрешности
- •Погрешности основных операций
- •Численное решение нелинейных уравнений
- •Локализация корней уравнения
- •Метод бисекции
- •Метод простой итерации
- •Метод касательных
- •Методы численного интегрирования
- •Метод прямоугольников
- •Метод трапеций
- •Метод парабол
- •Численное решение задачи Коши
- •Метод Эйлера
- •Метод Эйлера–Коши
- •Методы Рунге–Кутты
- •Контрольные вопросы
- •Моделирование в приложениях
- •Падение тела с учётом сопротивления воздуха
- •Колебания маятника с учётом силы трения
- •Полёт тела с учётом сопротивления воздуха
- •Листинги программ
Приложение А
Листинги программ
А.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 |
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
4√7 + 7 % |
|
4√7 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
Отпечатано с оригинал-макета заказчика. Ответственность за содержание предоставленного оригинал-макета типография не несёт. Требования и пожелания направлять авторам данного издания.
