2. Теоретические сведения
.1 Метод Рунге-Кутты
Методы Рунге-Кутты - важное
семейство численных алгоритмов решения обыкновенных дифференциальных уравнений
и их систем. Данные итеративные методы явного и неявного приближённого
вычисления были разработаны около 1900 года немецкими математиками К. Рунге и
М.В. Куттой.
Формально, методом Рунге -
Кутты является модифицированный и исправленный метод Эйлера, они представляют
собой схемы второго порядка точности. Существуют стандартные схемы третьего
порядка, не получившие широкого распространения. Наиболее часто используется и
реализована в различных математических пакетах стандартная схема четвёртого
порядка. Иногда при выполнении расчётов с повышенной точностью применяются
схемы пятого и шестого порядков. Построение схем более высокого порядка
сопряжено с большими вычислительными трудностями. Методы седьмого порядка
должны иметь девять стадий, в схему восьмого порядка входит 11 стадий. Хотя
схемы девятого порядка не имеют большой практической значимости, неизвестно,
сколько стадий необходимо для достижения этого порядка точности. Аналогичная
задача существует для схем десятого и более высоких порядков.
Метод Рунге-Кутты четвёртого
порядка столь широко распространён, что его часто называют просто методом
Рунге-Кутты.
Тогда приближенное значение в
последующих точках вычисляется по итерационной формуле:
Вычисление нового значения
проходит в четыре стадии:
Где -
величина шага сетки по.
Этот метод имеет четвёртый
порядок точности, то есть суммарная ошибка на конечном интервале интегрирования
имеет порядок(ошибка на каждом
шаге порядка).
.2 Априорный выбор шага
интегрирования
Величина x0 (значение решения в узле, для
которого выбирается шаг h), ε, ∆
(допустимые относительная и абсолютная погрешности) считаются заданными.
Вначале вычисляются масштабирующие множители αi, i ∈
[1: n], если она задана пользователем, иначе:
Затем вычисляется величина τ:
/u, 1/v вычисляются интерполированием, ρ
= ρ(α) и h = τρ.
3. Решение задания
Программа запускается в файле
b2.m. Сначала была объявлена функция a2 с добавлением трех дифференциальных
уравнений из файла a2, начальные условия, граничные условия и точность
интегрирования. Далее функция запускается с учетом объявленных значений. Также
в файле b2.m выполняется графическая часть работы. Сначала строятся графики с
приближенными значениями функций f(x), f(y), f(z) по отдельности.
Рисунок 1 - сравнение метода
Рунге-Кутты с функцией ode45 по уравнению X(T).
Рисунок 2 - сравнение метода
Рунге-Кутты с функцией ode45 по уравнению Y(T).
Рисунок 3 - сравнение метода
Рунге-Кутты с функцией ode45 по уравнению Z(T).
Затем была объявлена функция
реализующая решение ОДУ стандартным решателем MATLAB (функция ode45). После
вычислений был построен график по полученным значениям.
Далее был создан видеофайл
формата avi с помощью функции VideoWriter и открывается для того, чтобы вписать
в него информацию. В цикле for для всех приближенных значений функций f(x),
f(y), f(z) создаем трехмерный график и добавляем точку, которая должна
двигаться по полученной трехмерной декартовой системе координат. В цикле были
заданы координаты точки относительно каждой оси, по которым она должна
двигаться. В конце файла b2.m файл закрывается. Видеофайл с движением точки в
декартовой системе координат был записан на диск формата DVD-RW.
Рисунок 4 - декартова система
координат движения точки.
Далее высчитывалось
приближенное значение трех дифференциальных уравнений в последующих точках по
формуле: .
Далее идет вычисление априорного шага интегрирования и новых значений для
следующей итерации.
Вывод
В процессе выполнения контрольной работы была
разработана реализация системы обыкновенных дифференциальных уравнений в
программе Matlab, алгоритма шага интегрирования, трехмерного графика движения
точки в декартовой системе координат и реализация графика движения в видеофайле.
Список литературы
1) Шампайн Л.Ф., Гладвел И., Томпсон
С. Решение обыкновенных дифференциальных уравнений с использованием MATLAB:
Учебное пособие. 1-е изд. - СПб.: Лань, 2009, 304 с.
) Чарльз Генри Эдвардс, Дэвид Э.
Пенни. Дифференциальные уравнения и краевые задачи: моделирование и вычисление
с помощью Mathematica, Maple и MATLAB. 3-е издание. - Диалектика-Вильямс, 2007,
450 с.
) Е.Р. Алексеев, О.В. Чеснокова.
Решение задач вычислительной математики в пакетах Mathcad 12, MATLAB 7, Maple
9. Серия: Самоучитель. - М.: НТ Пресс, 2006, 496 стр.
Приложение А
Текст программы
Файл a2.m
function [x, y, te, ye] =
a2(f,x,h0,y0,e)
function с2 = div(t,Y)
% далее запишем систему ДУ=
ones(length(y),1);(1) = y(1)*cos(y(2))-y(3);(2) =
sqrt(abs(y(2)^2-y(1)^3))+3*y(3);(3) = y(2)^2*sin(y(1))+0.1;- имя функции
системы,y0 - начальные условия- интервал времени- начальный шаг интегрирования-
точность= 1000;= h0;= 1;j < jmax
N = length(y0);= max(x);=
ceil((H-x(1))/h);= zeros(N,n+1);(1) = min(x);k=1:1:N(k,1) = y0(k);i=1:1:n(i+1)
= x(i) + h;i=2:1:n+1= h.*f(x(i-1),y(:,i-1));= h.*f(x(i-1)+h/2,y(:,i-1)+k1/2);=
h.*f(x(i-1)+h/2,y(:,i-1)+k2/2);= h.*f(x(i),y(:,i-1)+k3);= (k1 + 2*k2 + 2*k3 +
k4)/6;(:,i) = y(:,i-1) + dy;(j) = n+1;j ~= 1i3=1:1:N(i3) = max(abs(Y2(i3,:) -
Y1(i3,:)));(i3) = max(abs(y(i3,:)));(i3) = max(abs(y(i3,:)));= max(M11);=
max(M22);i1=1:1:Ni2=1:1:L(j-1)(i1,i2) = y(i1,2*i2-1)/M2;i2=1:1:L(j)(i1,i2) =
y(i1,i2)/M1;(j > 1) && (max(M) <= e);= h/2;= j+1;
end= x';= y';= x(n+1);= y(n+1,:);
Файл b2.m
[t,Y,te1,ye1] = a2(@div,[0 6],0.2,[0, 0.1,
0],0.01);('NumberTitle', 'off', 'Name', 'Метод Рунге-Кутта (X(T))')('Метод
Рунге-Кутта (X(T))')('X(T)');(t,Y(:,1),'k'); on;('T');('X');('NumberTitle',
'off', 'Name', 'Метод Рунге-Кутта (Y(T))')('Метод Рунге-Кутта
(Y(T))')('Y(T)');(t,Y(:,2),'b'); on;('T');('Y');('NumberTitle', 'off', 'Name',
'Метод Рунге-Кутта (Z(T))') ('Метод Рунге-Кутта (Z(T))')('Z(T)');(t,Y(:,3))
on;('T');('Z');
[x, y, te2, ye2] = ode45(@div,[ [0 6],[0, 0.1,
0]); % решение через ode45('NumberTitle', 'off', 'Name', 'ode45 (X(T))')('ode45
(X(T))')(x, y(:,1))('X(T) ode45');on;('T');('X');('NumberTitle', 'off', 'Name',
'ode45 (Y(T))')('ode45 (Y(T))')(x, y(:,2))('Y(T) ode45');on;('NumberTitle',
'off', 'Name', 'ode45 (Z(T))')('ode45 (Z(T))')(x, y(:,3))('Z(T) ode45');on;=[0
6]; % границы
[x, y, te, ye] = ode45(@div,t,[0, 0.1,
0]);('NumberTitle', 'off', 'Name', 'Метод Рунге-Кутта (движение точки)') =
VideoWriter('rgr.avi'); % создание видеофайла.FrameRate = 25;(mov);i =
1:length(T)
plot3(Y(:,1),Y(:,2),Y(:,3),'-k',... %
построение графика
Y(i,1),Y(i,2),Y(i,3),'*r')(-38+0.1*i,26+0.1*i)(
[ 15, 25 ] )([min(Y(:,1)), max(Y(:,1))])([min(Y(:,2)),
max(Y(:,2))])([min(Y(:,3)), max(Y(:,3))])on(['T=',num2str(T(i),'%1.3f'),])
заголовок графика со значением Т
xlabel('X(T)')('Y(T)')('Z(T)')=
getframe(gcf);
writeVideo(mov,F); % запись видео(mov);
Приложение Б
Таблица погрешности
|
Функция
ode45
|
Собственная
функция
|
Относительная
погрешность (%)
|
X(t)
|
-1.763379798047849
|
-1.763118495173552
|
0.999852
|
Y(t)
|
0.004430856890985
|
0.004528856919895
|
1.022118
|
Z(t)
|
-0.006494568945723
|
-0.006351795448609
|
0.978017
|
Вывод: погрешность собственной функции,
реализующей метод Рунге-Кутты, не превышает 1,02%.