Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Система компьютерной математики Octave. Лабораторный практикум
.pdf
=
′
=
′
)
(
xyy
=
=
3
−
2
Б) Вычислить значение определенного интеграла
∫
−
1
x
dxex
, используя:
1) метод Симпсона;
2) квадратурную формулу Гаусса;
3) квадратурную формулу Лобатто.
Результат (значение интеграла и количество вычислений подынтегральной
функции) вывести в формате long.
В) Вычислить определенный интеграл от таблично заданной функции, ис-
пользуя:
1) метод трапеций;
2) ее интерполяцию кубическим сплайном.
x 0.0
0.0
0.5
3.9
1.0
11.7
1.5
18.3
2.0
20.0
2.5
15.0
3.0
3.9
3.5
-10.6
∞
Г) Вычислить несобственный интеграл
∫
e
Д) Вычислить интеграл от неограниченной функции
. )
2
xxdxln
4
dx
∫
3
1
.
−
1x
4.0
-24.4
Лабораторная работа № 7
РЕШЕНИЕ ОБЫКНОВЕННЫХ
ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
Цель работы: научиться применять
дифференциальных уравнений и их систем
Octave
.
для решения обыкновенных
Обыкновенным дифференциальным уравнением первого порядка называет
ся уравнение вида
yyxF
0),,(
или
,
где
),( yxfy
.
Обычно уравне
ния первого вида преобразовывают так, чтобы получить уравнение второго ви
да
–
уравнение, разрешенное относительно производной. Соответственно
обыкновенным дифференциальным уравнением
)(
уравнение вида
′′′
n
yyyyxF
или
0),...,,,,(
=
n-
ого порядка называется
)1()( −
=
′′′
nn
yyyyxfy
.
),...,,,,(
Такое
уравнение можно свести к системе из n уравнений первого порядка, чем мы и
будем пользоваться в дальнейшем
.
Чтобы из множества решений дифференциального уравнения выделить од
но, необходимо задать дополнительные условия. Чаще всего рассматривается
задача Коши, в этом случае все дополнительные условия задаются в одной и
той же точке
, в
противном случае это краевая задача
xx
0
.
-
-
,
-
100

=
′
1)0
(
−
=
y
2
=
′
⋅−+
=
⋅+=
Численные методы решения задачи Коши детально рассмотрены в учебной
литературе, однако для правильного выбора метода решения приведем здесь
необходимые сведения.
Прежде всего следует заметить, что решение дифференциального уравнения
может существовать лишь в некоторой области изменения независимой переменной. Если уравнение решается аналитическими методами, то область существования решения можно установить, исследуя полученную формулу. При
численном решении такого уравнения мы можем получить неверные результаты при выходе за пределы области существования решения. Приведем пример
решения дифференциального уравнения вида
.
),( yxfy
Задача. Найти решение задачи Коши для дифференциального уравнения
1
′
первого порядка
=
1
с начальным условием
yy−
. Это уравнение лег
-
ко решается аналитически методом разделения переменных. Результат можно
представить как зависимость
–
парабола, ветви которой направлены влево
ний
x.
Исследуя эту функцию, легко установить, что максимальное значение
x от y:
yx
2
)(
=
– в
сторону отрицательных значе
32
++−
yy
.
График этой функции
x = 2.
Попробуем теперь решить эту задачу методом Эйлера. Этот метод, как
впрочем, большинство численных методов решения дифференциальных урав
нений, основан на дискретизации области изменения независимой переменной
x.
Пусть мы уже вычислили значение
в
y
i
точке
,
тогда из исходного диффе
x
i
ренциального уравнения можно определить значение производной
.
Используя линейную интерполяцию
),(
yxfy
iii
.
При равномерной дискретизации все интервалы
),()(
11 iiiiii
++
yxfxxyy
разбиения имеют одну и ту же длину, которую обозначим через
четная формула упрощается
:
1 iiii
+
),(
yxfhyy
количество интервалов разбиения. Так как значение
,
получим формулу
h.
Тогда рас
для
i = 1,2,…,n,
уже задано в начальном
y
0
где
n
есть
условии, то из полученного соотношения последовательно находятся значения
в
соответствующих точках независимой переменной
yyy ,...,,
21
n
Будем искать решение на интервале
[0; 4]:
x.
-
-
-
-
f = @(x,y) 1/(1-y);
h=0.01;
n=idivide(4,h,'round');
x(1)=0; y(1)=-1;
for k=2:n+1
x(k)=x(k-1)+h;
y(k)=y(k-1)+h*f(x(k-1),y(k-1));
end;
plot(x,y,'linewidth',2);
grid on
101

Вот что у нас получилось:
Сопоставим полученный результат с аналитическим решением (красная линия на графике):
102

−−=
′
0)0
(=y
Видно, что при x<=2 численное решение совпадает с аналитическим, а при
дальнейшем увеличении x мы получаем фантастическую чушь.
Рассмотренный выше метод Эйлера называется явным, поскольку значение
непосредственно выражается через
y
1+i
уравнения используются
– неизвестные на данном шаге значения функции
y
1+i
y. В этом случае для вычисления значений
. В неявных методах в правой части
y
i
yyy ...,,,
приходится решать си-
21
n
стему в общем случае нелинейных уравнений, что увеличивает время расчета.
Однако неявные схемы часто имеют преимущество перед явными, особенно в
случае решения жестких систем уравнений. Поэтому в численных расчетах для
решения жестких систем ОДУ применяются методы, отличные от тех, что применяются для решения нежестких ОДУ. Подробно методы решения жестких
ОДУ рассмотрены в литературе [6, 7].
Оценить жесткость системы ОДУ "на глазок" достаточно сложно. В качестве примера приведем простое уравнение
, которое будем
)cos( xyAy
решать при начальном условии
. При больших значениях параметра
A
для получения правильного решения необходимо выбирать очень мелкий шаг
разбиения по
x,
что требует значительных временных затрат. Если шаг разбие
ния больше некоторого критического значения, полученное решение будет да
леко отклоняться от истинного. Покажем это. Напишем программу, реализую
щую явный метод Эйлера в первом случае
втором
– с
шагом дискретизации
0.1.
Сначала получим решение для значения
A = 10;
f = @(x,y) -A*(y-cos(x));
L=2;
% задаём параметры графика
axis([0,L,-0.5,2]);
grid on
hold on
% выполняем расчёт для двух значений шага h
for h=[0.01, 0.1]
n=idivide(L,h,'round');
x=[];
y=[];
x(1)=0; y(1)=0;
for k=2:n+1
x(k)=x(k-1)+h;
y(k)=y(k-1)+h*f(x(k-1),y(k-1));
end;
% строим график
plot(x,y,'linewidth',2);
end
– с
шагом дискретизации
A = 10:
0.01, а во
-
-
-
103

Из рисунка видно, что существенная разница наблюдается только на не-
большом начальном участке.
Будем постепенно увеличивать значение параметра A. При A=14 появились
колебания, но они быстро затухают:
При A=18 время затухания колебаний увеличивается:
104

При А=20 незатухающие колебания решения сохраняются на всей времен-
ной оси:
Заметим, что при выборе шага дискретизации h = 0.01 приближенное реше-
ние (синяя линия) практически совпадает с аналитическим решением:
2
A
=
xy cos
)(
2
+
A
1
sin
A
x
−+
ex
−Ax
На практике для решения нежестких задач чаще всего применяется метод
Рунге – Кутты 4-го порядка точности или многошаговый метод Адамса. Для
жестких задач применяются методы, использующие так называемые разностные формулы дифференцирования назад (backward differentiation formula –
BDF). Они аппроксимируют производную по значениям функции в нескольких
предыдущих точках.
В пакете Octave реализовано несколько методов решения систем ОДУ.
Наиболее универсальной является функция
lsode
(…), которая реализует
одноименный метод LSODE (Livermore Solver for Ordinary Differential
Equations), – с его помощью можно решать как жесткие, так и нежесткие системы ОДУ [8]. Однако для совместимости с пакетом Matlab в пакет Octave включены также функции:
–
ode23
(…) – метод Рунге – Кутты 2-го порядка;
–
ode45
Эти методы, а также вспомогательные методы
(…) – метод Рунге – Кутты 4-го порядка.
odeget
(…),
odeset
(…), задающие параметры решателей, входят в состав ядра системы. Чтобы использовать другие методы решения ОДУ, необходимо сначала подключить пакет
odepkg командой
>> pkg load odepkg
После этого в Octave становятся доступны дополнительные методы для ре-
шения нежестких:
ode54
(…),
ode78
105
(…) и жестких задач:
ode2r
(…),

ode5r
(…), а также уравнений с запаздывающим аргументом:
ode23d
(…),
ode45d
(…),
ode54d
(…) и
ode78d
(…) и некоторые другие возможности.
Пример 1. Рассмотрим систему обыкновенных дифференциальных уравне-
ний, описывающих взаимодействие популяций типа "хищник – жертва":
dx
1
dt
dx
2
dt
Здесь
−=
xCxAx
211
+−=
– количество жертв;
)(1tx
xDxBx
212
– количество хищников в момент
)(2tx
времени t; A – коэффициент естественного прироста жертв; B – коэффициент
естественной смертности хищников; C – коэффициент, определяющий количество жертв, съеденных хищниками; D – коэффициент рождаемости хищников.
Эти уравнения впервые предложили независимо друг от друга американский математик Лотка и итальянский ученый Вольтерра, поэтому эта система
носит их имя.
Используем для решения системы функцию
lsode
(…).
Синтаксис вызова функции:
x = lsode(fcn, x0, pts)
где
fcn
– функция вида f(x,t), задающая правую часть системы ОДУ;
x0
– начальные значения;
pts
– последовательность точек, в которых вычисляется решение.
x – матрица решения в точках
pts.
Кроме матрицы x функция может вернуть статус решения и текстовое сообщение.
Выполним программу:
A = 0.2; B=0.1; C=0.01; D = 0.001;
LV = @(x,t) [ A*x(1) - C*x(1)*x(2);...
-B*x(2) + D*x(1)*x(2)];
pts = 0:1:200;
[res,code,msg] = lsode(LV, [100,30], pts);
code=code, msg=msg
plot(pts,res, 'linewidth',2)
В результате в командное окно выведется код завершения и текстовое сообщение об успешном решении задачи:
code = 2
msg = successful exit
а в графическое окно – графики изменения численности жертв и хищников:
106

Часто оба графика сводят в один на фазовой плоскости с осями Ox1 и Ox2:
Программа построения решения на фазовой плоскости:
hold on
plot(100,30,'ok','linewidth',4)
plot(res(:,1),res(:,2),'linewidth',2)
axis([10,200,10,35]);
grid on
xlabel('Value of x1','fontsize',16);
ylabel('Value of x2','fontsize',16);
107

dt
dt
dt
txxxx
sin=′+′′+′′
′
−=′′=′−
=
=
′
=
′′=
Пример 2. Рассмотрим уравнение
2
xd
2
dx
k
ω
2
0
=++ x
при начальных усло-
виях
,)0( x
xx
0
dt
t===
0
. Решение этого уравнения описывает малые колеба-
1
ний маятника (или другой колебательной системы) при наличии сопротивления
среды, пропорционального скорости движения. Чтобы решить это уравнение,
необходимо преобразовать его в систему ОДУ первого порядка. Положим
dx
tdx
ω
)(
:
2
uku
1
-
utxu
);(
== ,
21
тогда получим систему двух уравнений первого порядка
du
1
=
u
dt
du
dt
2
2
−−=
2
Решим систему при следующих значениях параметров и начальных усло
вий
: k = 0.5, w = 2, x0 = 1, x1 = 0.
k=0.5; w=2;
f = @(u, t) [u(2); -k*u(2)-w*w*u(1)];
res = lsode(f, [1,0], [0:0.1:10]);
plot(res(:,1),res(:,2),'linewidth',2)
grid on
Фазовый "портрет" системы есть спираль
закручивающаяся вокруг точки равновесия
.
Аналогично решаются уравнения более
высокого порядка. Решим, например, урав
нение
условиями
с
начальными
xxx
3)0(,4)0(,1)0(
при
-
,
0 <= t <= 10.
Обозначим
,
)(1txu
,
)(2txu
тогда исходное уравнение сводится к системе
du
1
=
u
dt
du
dt
du
dt
Теперь легко составить программу
f=@(u,t) [u(2); u(3); -u(3)u(2)+u(1).*sin(t)];
pts = [0:0.1:10];
res = lsode(f, [-1,4,-3], pts);
108
2
2
=
u
3
3
+−−=
123
sin
tuuu
:
,
)(3txu

=
′
1)0
(=y
plot(pts,res,'linewidth',2)
grid on
и получить результат:
Для лучшего понимания результатов расчета на график можно добавить так
называемую легенду с пояснениями к каждой построенной кривой. Добавим в
программу после команд
legend(' x(t)', ' x`(t)', ' x``(t)')
plot
строку
тогда на графике появится прямоугольник с текстовыми пояснениями (фрагмент графика приведен на рисунке справа).
Варианты заданий к лабораторной работе № 7
Вариант 1
А) Написать программу решения методом Эйлера задачи Коши для дифференциального уравнения
. Выполнить расчет для трех вариантов выбора шага
Сравнить полученные результаты
на отрезке [0; 1] с начальным условием
xyy 10
h: 0.1, 0.01, 0.001.
.
Б) Используя функцию
lsode(…),
получить решение системы ОДУ
du
1
dt
du
2
dt
+=
4 uu
uu
21
−−=
21
109
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
