Автор работы: Пользователь скрыл имя, 21 Ноября 2011 в 07:59, лабораторная работа
Работа содержит задачи по "Математике" с решениями
Лабораторная работа № 7
Решение дифференциальных уравнений
Вариант
1
Используя
метод Эйлера, составить
таблицу приближенных
значений интеграла
дифференциального
уравнения
, удовлетворяющего
начальным условиям
на отрезке
; шаг h=0,1. Все
вычисления вести с
четырьмя десятичными
знаками. Решить данную
задачу с помощью Matlab,
составив программу
для нахождения решения
с помощью метода Рунге-Кутты.
Решение
Сначала решение задачи ведется методом Эйлера с уточнением. Каждое значение , где – искомая функция, а , определяется следующим образом. За начальное приближение берется , где . Найденное значение уточняется по формуле .
Вычисления представлены в таблице 7.1
Таблица 7.1
0 | 1,8 | 2,6 | 2,196811905 | 2,819681 |
1 | 1,9 | 2,820084 | 2,204693388 | 3,040553 |
2 | 2 | 3,040791 | 2,209352843 | 3,261727 |
3 | 2,1 | 3,261853 | 2,211817141 | 3,483034 |
4 | 2,2 | 3,4831 | 2,213106144 | 3,704411 |
5 | 2,3 | 3,704468 | 2,214213646 | 3,925889 |
6 | 2,4 | 3,925985 | 2,216095156 | 4,147595 |
7 | 2,5 | 4,147777 | 2,219662309 | 4,369743 |
8 | 2,6 | 4,370056 | 2,225783286 | 4,592634 |
9 | 2,7 | 4,593119 | 2,235288414 | 4,816648 |
10 | 2,8 | 4,817345 | 2,248980059 |
Таким образом, ответом являются значения .
Далее составлена программа в среде Matlab для решения уравнения методом Рунге-Кутты.
function [x,y]=RK(y0,a,b,h)
y(1)=y0;
x(1)=a;
for i=1:1:(b-a)/h+1
x(i+1)=a+i*h;
end
for i=1:1:(b-a)/h+1
k1=f(x(i),y(i));
k2=f(x(i)+h/2,y(i)+h/2*k1);
k3=f(x(i)+h/2,y(i)+h/2*k2);
k4=f(x(i)+h,y(i)+h*k3);
y(i+1)=y(i)+h/6*(k1+2*k2+2*k3+
end
x=x';
y=y';
В качестве входных параметров функция использует начальное условие, отрезок, на котором ведется решение, и шаг. В каждой точке сетки вычисляются четыре необходимых коэффициента. В результат выводятся два вектора – аргументы функции и соответствующие значения функции.
Чтобы использовать составленную программу, дополнительно составлена функция:
function f=f(x,y)
f=x+cos(y/sqrt(5));
Это позволяет изменять исходное уравнение, не меняя основной программы. После запуска функции получены следующие результаты:
>>
[x, y] = RK(2.6, 1.8, 2.8, 0.1)
x
=
1.8000
1.9000
2.0000
2.1000
2.2000
2.3000
2.4000
2.5000
2.6000
2.7000
2.8000
y
=
2.6000
2.8201
3.0408
3.2619
3.4831
3.7045
3.9260
4.1478
4.3700
4.5931
4.8172
Для сравнения решений различными способами построены два графика (рис. 7.1).
Рис. 7.1. Графики решения методом Эйлера и методом Рунге-Кутты |
Таким
образом, по графикам можно видеть, что
решения, полученные методом Эйлера и
методом Рунге-Кутты различаются в данном
примере незначительно. Однако для большого
количества задач метод Рунге-Кутты дает
более точную оценку. Эта обусловлено
различной точностью методов, метод Рунге-Кутты
дает меньшую погрешность и является более
предпочтительным для использования,
хотя и требует большего количества вычислений.