- •Численные методы
- •Содержание
- •Введение
- •1. Вычисление определенных интегралов Справочная информация
- •Формула средних прямоугольников
- •Формула трапеций
- •Формула Симпсона (j.Gregory(Грегори)1668,Th.Simpson1743)
- •Пример решения в среде Matlab
- •Контрольные задания
- •2. Решение нелинейных уравнений Справочная информация
- •Метод простых итераций Метод основывается на приведении исходного уравнения к форме
- •Относительная разница между значениями приближения корня на третьей и четвёртой итерациях составляет
- •Метод хорд
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •3. Решение систем линейных алгебраических уравнений Справочная информация
- •Метод Гаусса с выбором главного элемента
- •Метод простых итераций
- •О выборе метода решения систем уравнений
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •4. Интерполяция таблично заданных функций Справочная информация
- •Кусочно-линейная интерполяция
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •5. Аппроксимация таблично заданных функций Справочная информация
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •6. Решение задачи коши для обыкновенных дифференциальных уравнений 1-го порядка Справочная информация
- •Усовершенствованный метод Эйлера
- •Оценка погрешностей методов
- •Программное обеспечение
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •7. Решение задачи коши для нормальных систем обыкновенных дифференциальных уравнений и уравнений высших порядков Справочная информация
- •Метод Эйлера
- •Усовершенствованный метод Эйлера
- •Оценка погрешностей методов
- •Пример решения на пэвм в среде Matlab
- •Контрольные задания
- •Приложение. Основы работы в среде matlab Интерфейс среды
- •Переменные и константы
- •Арифметические операторы
- •Операторы отношения
- •Логические операторы
- •Элементарные функции
- •Простейшие способы ввода–вывода информации
- •Векторы и матрицы
- •Оператор двоеточие «:»
- •Оператор разветвления if
- •Операторы циклов
- •Вывод информации в файл
- •Форматный вывод информации
- •Ввод данных из файла
- •Построение графиков
- •Сообщения об ошибках и исправление ошибок
- •Список литературы
Программное обеспечение
Система Matlabпозволяет решать задачу Коши для обыкновенных дифференциальных уравнений и их систем посредством обращения к функциямode23иode45. Первая из них реализует методы Рунге–Кутта второго и третьего порядков, а вторая – четвертого и пятого порядков. Выбор шага интегрирования в них осуществляется автоматически на основе задаваемой абсолютной погрешности решения. Решение задачи эти функции возвращают в виде массива значений аргумента и искомой функции.
Обращение и функциям ode23иode45осуществляется следующим образом
[t,x]=ode23('fun', t0, tf, x0)
[t,x]=ode45('fun', t0, tf, x0)
или
[t,x]=ode23('fun', t0, tf, x0, tol, trace)
[t,x]=ode45('fun', t0, tf, x0, tol, trace)
где fun – имя m-файла, с помощью которого вычисляются правые части уравнений или системы дифференциальных уравнений, t0 – начальное значение аргумента, левая граница отрезка построения решения, tf – конечное значение аргумента, правая граница построения решения, х0 – вектор начальных условий, tol – задаваемая абсолютная погрешность построения решения, по умолчанию для ode23 она принята равной 0.001, а для ode45 – 0.00000l, trace – признак выдачи промежуточных результатов.
Пример решения на пэвм в среде Matlab
Пусть дана задача Коши для дифференциального уравнений 1-го порядка
,
для которой надо построить решение на отрезке [0, 5] с относительной погрешностью не более 2%.
Для применения одной из описанных выше функций Matlab’а сначала надо сформироватьm-файл, например с именемS.m, для вычисления правой части уравнения
function v=S(x,y)
v=sin(x*y);
После этого можно обратиться к функции ode45, задавая имя созданногоm-файл, начальное условие, границы интервала интегрирования и требующуюся абсолютную погрешность интегрирования, например 10–12. Относительная погрешность решения при этом не находится. Построим также график полученного решения. Описанные действия реализуются следующим набором команд
t0=0;
x0=[1];
tf=5;
[t,P]=ode45('S',t0,tf,x0,1e-12)
plot(t,P);
После запуска этой программы на выполнение в командном окне появятся результаты решения в виде таблицы
t = P =
0 1.0000
0.1250 1.0078
0.2500 1.0316
0.3750 1.0719
0.5000 1.1297
0.6250 1.2058
0.7500 1.3006
0.8750 1.4119
................
4.9600 0.6636
5.0000 0.6576
а в графическом окне (см. рис.6) будет показан график полученного решения.
Рис.6.
Для прямой реализации метода Эйлера и оценки его относительной погрешности по правилу Рунге следует написать две программы. В первой программе надо реализовать сам метод Эйлера и оформить её как функцию, в которой можно задавать шаг интегрирования, начальное условие и границу интервала. Текст этой программы может выглядеть следующим образом
function [y,x]=eiler(a,b,n,y0)
h=(b-a)/n
y(1)=y0; x(1)=a; ←задание начального условия
for i=2:n+1
x(i)=a+(i-1)*h;
y(i)=y(i-1)+h*sin(x(i-1)*y(i-1));
end
При такой организации процесса вычислений вторая программа должна реализовывать правило Рунге. Она должна дважды обратиться к первой программе. Первый раз с nшагами по отрезку интегрирования рассматриваемой задачи Коши, а второй раз – с 2nшагами. Результаты такого обращения будут храниться в векторахyиy1соответственно. Для расчета относительной погрешности решения, хранящегося в вектореy1, следует вычислить максимальное значение этого решения. После этого можно найти его относительную погрешность, сохранив её в виде вектораdy. Текст такой программы при 10-и шагах по отрезку построения решения может иметь вид
n=10
[y,x]=eiler(0,5,n,1);
[y1,x1]=eiler(0,5,2*n,1);
maxy(1:n)=y1(2:2:2*n+1);
plot(x,y,x1,y1), grid ←вывод графиков решений
for i=2:n+1
maxy(i)=max(y1(3:2:2*i-1));←поиск максимума решения
end
dy=abs(y(1:n+1)-y1(1:2:2*n+1))./maxy;
hold on ←использование того же графического окна
Y=[x',y1(1:2:2*n+1).',dy.'] ←построение матрицы решений и погрешности
plot(x,dy),grid
Эту программу следует сохранить в виде m-файла с именемodeqv.mв той же папке, что и функцию, реализующую метод Эйлера.
Запуск этого файла на выполнение позволяет получить в командном окне следующий результат
Y =
0 1.0000 0
0.5000 1.0619 0.0582
1.0000 1.3829 0.1035
1.5000 1.8520 0.0753
2.0000 1.8778 0.0563
..........................
5.0000 0.6555 0.0031
П
Рис.7.
При необходимости решения поставленной задачи Коши усовершенствованным методом Эйлера можно воспользоваться предыдущеей программой. Для этого надо переделать m-файл, в котором хранится программа решения задачи Коши методом Эйлера. Его содержимое, сохраняемое под именемu_eiler, показано ниже
function [y,x]=u_eiler(a,b,n,y0)
h=(b-a)/n
y(1)=y0; x(1)=a; ←задание начального условия
for i=2:n+1
xs(i)=x(i-1)+h/2; ←средняя точка
ys(i)=y(i-1)+h/2*sin(x(i-1)*y(i-1));
x(i)=a+(i-1)*h;
y(i)=y(i-1)+h*sin(xs(i)*ys(i));
end
При этом в программе odeqv.mследует только заменить имя функцииeilerнаu_eiler. Её запуск на выполнение для 10-шагов по отрезку интегрирования даёт в командном окне следующий результат, в графическом окне отобразится график, показнный на рис.8.
Y =
0 1.0000 0
0.5000 1.1282 0.0024
1.0000 1.5334 0.0027
1.5000 1.9068 0.0099
2.0000 1.8100 0.0263
...........................
5.0000 0.6595 0.0208
Рис.8.
Точность полученного решения – неудовлетворительна: относительная погрешность составляет 3%. Поэтому надо пересчитать решение с более мелким разбиением отрезка интегрирования. В данном случае оказывается, что достаточно разбить отрезок интегрирования на 40 участков, чтобы получить относительную погрешность решения не превышающую 1.1%. При этом график этого решения совпадёт с графиком, показанным на рис.6.