Помощь в написании студенческих работ
Антистрессовый сервис

Обыкновенные дифференциальные уравнения

Лабораторная работаПомощь в написанииУзнать стоимостьмоей работы

Решить задачу Коши для уравнения первого порядка на одном и том же множестве значений с шагом и ., используя метод Эйлера первого порядка, исправленный или модифицированный метод Эйлера и метод Рунге-Кутта 4-го порядка Полученные результаты свести в одну таблицу и сопоставить. Используя метод Эйлера с уточнением, найти приближенное решение задачи Коши в тех же точках, что и в предыдущем задании… Читать ещё >

Обыкновенные дифференциальные уравнения (реферат, курсовая, диплом, контрольная)

Государственное образовательное учреждение высшего профессионального образования

" Пермский государственный университет"

Лабораторная работа № 13

вариант 6

«Обыкновенные дифференциальные уравнения»

Выполнил:

студент группы РФЭ-2

Собенин Александр Николаевич.

Проверил:

Шкарапута Александр Петрович.

Пермь 2011

Краткое содержание.

Задача Коши для дифференциального уравнения первого порядка Задача Коши для дифференциального уравнения первого порядка включает уравнение вида:

и начальное условие: .

Существуют различные методы численного решения задачи Коши: методы рядов Тейлора, одношаговые методы Рунге-Кутта, многошаговые разностные методы. При решении уравнения численными методами значения функции находятся приближенно в виде дискретной числовой последовательности {yi}, где .

Методы Рунге-Кутта Простейшим вариантом методов Рунге-Кутта является метод Эйлера, при котором производная заменяется конечной разностью.

В случае, , тогда ,

где, ,, .

Данный метод имеет первый порядок точности по h, погрешность нарастает с удалением от точки. Метод Эйлера является методом Рунге-Кутта первого порядка.

Общий вид методов Рунге-Кутта (при) записывается с помощью формулы:

где порядок метода, ,

.. .. .. .. ,

.

дифференциальный уравнение дискретный последовательность Коэффициенты, , выбираются из соображений точности.

Метод Эйлера получается при .

Для имеется уже семейство методов Рунге-Кутта второго порядка, для которых должно выполнятся условие .

В частности при и получается, так называемый, исправленный метод Эйлера:

.

При, ,, получается модифицированный метод Эйлера:

.

Большое распространение получили методы Рунге-Кутта четвертого () порядка точности.

Для повышения точности вычислений можно воспользоваться итерационным методом уточнения. Он заключается в том, что каждое значение вычисляется с помощью последовательных приближений. Например, для метода Эйлера за начальное приближение берется, найденное значение уточняется по формуле, где

Уточнение продолжают до тех пор, пока в пределах требуемой точности два последовательных приближения не совпадут.

Постановка задачи.

1. Решить задачу Коши для уравнения первого порядка на одном и том же множестве значений с шагом и ., используя метод Эйлера первого порядка, исправленный или модифицированный метод Эйлера и метод Рунге-Кутта 4-го порядка Полученные результаты свести в одну таблицу и сопоставить.

2. Используя метод Эйлера с уточнением, найти приближенное решение задачи Коши в тех же точках, что и в предыдущем задании. Точность вычислений должна составить 0,0001. Помимо решения в каждой точке вывести число итераций.

Ход работы.

Текст программы:

#include

#include «math.h»

float function (float x, float y)

{

float f;

f = x + cos (y/2.25);

return f;

}

float euler (float x, float y, float h)

{

int i;

y=y+h*function (x, y);

return y;

}

float repair_euler (float x, float y, float h)

{

int i;

float h2=h/2;

y=y+h2*(function (x, y)+function (x+h, y+h*function (x, y)));

return y;

}

float met_RK4(float x, float y, float h)

{

float Y, h2, k[4];

int i;

h2=h/2;

k[0]=function (x, y);

k[1]=function (x+h2,y+h2*k[0]);

k[2]=function (x+h2,y+h2*k[1]);

k[3]=function (x+h, y+h*k[2]);

y=y+h*(k[0]+k[1]*2+k[2]*2+k[3])/6;

return y;

}

void utochnenie (float x, float y, float h)

{

float h2 = h/2,y2,Y, eps=0.0001;

int i, kol=0;

printf («nnIteracionyi metod utochneniya»);

for (i=0;i<=10;i++, x+=h, kol=0)

{

Y=y+h*function (x, y);

do

{

kol++;

y2=Y;

Y=y+h2*(function (x, y)+function (x+h, Y));

} while (fabs (Y-y2)>eps);

y=y2;

printf («n%f i=%d», y2, kol);

}

}

void main ()

{

float x0, y0,h, y_e, y_r, y_m, x;

int i;

printf («Vvedite x0, y0 i shag h:»);

scanf («%f%f%f» ,&x0,&y0,&h);

y_e=y_r=y_m=y0;

x=x0;

printf («nnmet. Euleratispravl. met. Euleratmet. Runge-Kutta 4 por»);

for (i=0;i<=10;i++, x+=h)

{

y_e = euler (x, y_e, h);

y_r = repair_euler (x, y_r, h);

y_m = met_RK4(x, y_m, h);

printf («n%ftt%ftt%f», y_e, y_r, y_m);

}

utochnenie (x0,y0,h);

}

Работа программы:

Vvedite x0, y0 i shag h:1.4 2.2 0.1

met. Eulera ispravl. met. Eulera met. Runge-Kutta 4 por

2.395 887 2.397 176 2.397 192

2.594 351 2.596 643 2.596 673

2.794 922 2.797 972 2.798 012

2.997 195 3.803 3.851

3.200 840 3.204 855 3.204 905

3.405 606 3.409 922 3.409 970

3.611 322 3.615 882 3.615 921

3.817 899 3.822 687 3.822 713

4.25 328 4.30 371 4.30 377

4.233 676 4.239 041 4.239 021

4.443 091 4.448 879 4.448 826

Iteracionnyi metod utochneniya

2.397 176 i=2

2.596 643 i=2

2.797 972 i=2

3.803 i=2

3.204 855 i=2

3.409 922 i=2

3.615 882 i=2

3.822 687 i=2

4.30 371 i=2

4.239 041 i=2

4.448 879 i=2

Вывод: Сравнивая методы Рунге-Кутта с итерационным, видим, что методы более высокого порядка обеспечивают наибольшую точность.

Показать весь текст
Заполнить форму текущей работой