Найти приближенное решение обыкновенного дифференциального уравнения y’=f(x,y), y(a)=y0 методом Рунге-Кутта пятого порядка на отрезке [a,b] с заданным постоянным шагом h. Значение функции y(x) в узловых точках вычисляются по формуле:
Y [i+1]=y[1]+h/6(K[i]+2K[2]+2K[3]+K[4]), i=0,1,2,…
Где K[1]=f(x[i],y[i]);
K[2]=f(x[i]+h/2, y[i]+h/2K[1]);
K[3]=f(x[i]+h/2, y[i]+h/2K[2]);
K[4]=f(x[i]+h, y+hK[3]).
Основная блок схема
Procedure RK4
Procedure der
Введены данные (Enter = a, b, h1,k). Программа выводит y (решение) с постоянным шагом h.
Выбор состава технических и программных средств.
Для решения задачи «методом Рунге-Кутта» используется компьютер с минимальными требованиями:
1.Процессор - Intel 166.
2. ОЗУ 16Мб, видеокарта 8Мб.
3.Операционная система MS – DOS.
4.Винчестер (жесткий диск)-1Гб.
Вызов и загрузка программы.
Данная программа находится на диске А(floppy disk).
Для запуска необходимо вставить floppy disk в дисковод.
На рабочем столе открываем «Мой компьютер», диск А, файл «Rkutt.exe»
Тестирование программы
Программа работает на языке Turbo Pascal 7.0, по методу Рунге-Кутта.
Тестирование алгоритмов и программ - одна из наиболее сложных и ответственных задач в процессе их отладки. Времени для тестирования мало, но и спешка в работе недопустима, слишком дорого обходятся неудачные попытки предъявить решение задачи. Проверка корректности алгоритмов, равно как и составление, авторами задачи достаточно полного набора корректных тестов - наборов данных для задачи и ответов к ним - далеко не всегда представляют собой простую проблему.
В задачах на этапе тестирования программ есть много общего - и те и другие должны обеспечить корректность алгоритмов. Но есть и различия. Автор задачи не ограничен во времени, но должен предусмотреть все возможные огрехи участника. Специфика положения тестирующего, связана с коварством составителя тестов, от которого можно ожидать, например, непредвиденной глубины рекурсии, разрядности, точности вычислений или размерности наборов данных. Поэтому будет неправильно, успешно решить задачу для нарисованного на листочке бумаги примера.
Данная программа приближённо вычисляет обыкновенные дифференцированные уравнения по методу Рунге-Кутта. Вводятся исходные данные (a,b,h1,k) и в результате появляются результативные данные (приложение №1).
Заключение
В ходе выполнения курсовой работы выполнена цель: найти приближенное решение обыкновенного дифференциального уравнения y’=f(x,y), y(a)=y0 методом Рунге-Кутта пятого порядка на отрезке [a,b] с заданным постоянным шагом h. Значение функции y(x) в узловых точках вычисляются по формуле:
Y [i+1]=y[1]+h/6(K[i]+2K[2]+2K[3]+K[4]), i=0,1,2,…
Где K[1]=f(x[i],y[i]);
K[2]=f(x[i]+h/2, y[i]+h/2K[1]);
K[3]=f(x[i]+h/2, y[i]+h/2K[2]);
K[4]=f(x[i]+h, y+hK[3]).
С использованием языка программирования «Turbo Pascal» было найдено решение обыкновенного дифференциального уравнения. Вычисление функции, используемую в задаче, оформила в виде подпрограммы, так, чтобы можно было представить любую функцию, не меняя самой программы.
Список литературы
1.Бахвалов Н.С. Численные методы учебник для ВЗУов М., Наука, 1978
2.Воробьева Г.Н. Данилова А.Н. Практикум по численным методам: М., учебник 1987
3.Демидович Б.П. и Марон И.А. Основы вычислительной математики учебник для ВЗУов издание четвертое М., Наука, 1970
4.Каханер Дэвид. Численные методы и программное обеспечение учебник для ВЗУов М., Мир, 1998
5.Немнюгин С.А. Turbo Pascal.Практикум,учебник для ВУЗов, второе издание, С.-П., издание Питер. 2003.
6.Немнюгин С.А. Turbo Pascal. Программирование на языке высокого уровня. Учебник для ВУЗов, второе издание. С.–П., издание Питер, 2003.
7. Новикова Ф.А Дискретная математика для программистов. С.-П., издание Питер 2001.
8. Рюттен Т.Г. Франкен П.Р. Turbo Pascal 7.0 – К.: Торгово-издательское бюро BHV, 1996 – 448 С.: ил.
9.Турчак Л.И. Основы численных методов учебник для ВЗУов М., Знание, 1987
10. Фараонов В.В. Турбо Паскаль (в 3-х книгах). Книга 2. Библиотека Turbo Vision.-М.: Учебно-инжерненый центр МВТУ-ФЕСТО ДИДАКТИК, 1993.
Приложение: форма окна
Borland Pascal Version 7.0 Copyright (c) 1983,92 Borland International
Рис.
Листинг программы:
PROGRAM RKutt;
uses crt;
const
nmax=8;
type
vec=array[1..nmax] of Real;
var
h,a,b:Integer; i:Integer;
procedure der(x:Real; y:vec; var f:vec);
var
ki:array[1..5] of real;
begin
for i:=1 to 5 do
f[i]:=(h/6)*ki[i]+2*ki[2]+2*ki[3]+ki[4];
y[i+1]:=y[1]+h*y[i];
y[i]:=x*x+5;
end;
procedure RK4(n:Integer;x,h:Real; var y:vec);
var
i,j:Integer;
h1,h2,q:Real;
y0,y1,f:Vec;
begin
h1:=0;h2:=h1/2;
for i:=1 to n do begin
y0[i]:=y[i];
y1[i]:=y[i];
end;
for j:=1 to 4 do begin
der(x+h1,y,f);
if j=3 then h1:=h else h1:=h2;
for i:=1 to n do begin
q:=h1*f[i];
y[i]:=y0[i]+q;
y1[i]:=y1[i]+q/3;
end;
end;
for i:=1 to n do
y[i]:=y1[i];
end;
var
k,n:Integer;h1,y1:Real;
k1,k2,k3,k4:Integer;
x,ki:Array[1..5] of real;
y:Array[1..5] of real;
begin
writeln('Enter a=');
Readln(a);
writeln('Enter b=');
Readln(b);
writeln('Enter h1=');
Readln(h1);
writeln('Enter k=');
Readln(k);
n:=3;
h1:=a;
ki[1]:=k;
for i:=1 to n do begin
y[i+1]:=y1+(h1/6)*(Ki[i]+2*ki[2]+2*ki[3]+ki[4]);
writeln(y[i+1]);
end;
while h1<=b do begin
h1:=h1+h;
end;
Readln;
end.