Автор: Пользователь скрыл имя, 13 Октября 2011 в 16:06, курсовая работа
Курсовая работа состоит из двух глав. В главе 1 содержатся теоретические сведения о численном решении обыкновенных дифференциальных уравнений, во второй главе программная реализация на языке Паскаль для численного решения обыкновенных дифференциальных уравнений методом Адамса-Штёрмера.
Введение…………………………………………………….…………..…..…3
Глава 1.Многошаговые методы Адамса……...……………………….………5
1.1 Теоретическое обоснование метода Адамса…………………….….… 5
1.2 Численное решение дифференциального уравнения второго порядка...............................................................................................…………..8
Глава 2. Программная реализация метода Адамса-Штёрмера для решения обыкновенного дифференциального уравнения второго порядка…….…………………………………………………………………10
2.1 Описание поставленной задачи……………………………………….10
2.2 Анализ полученных результатов работы программы………….…....11
Заключение…………………………………………………………………12
Список использованных источников………………………………………...13
Приложение А………………………………………………………...……….14
Приложение Б…………………………………………………………...…….18
Приложение В…………………………………………………………………19
Для этого вводится новая неизвестная функция , слева в каждом уравнении системы оставляют только первые производные неизвестных функций, а в правых частях производных быть не должно
Функция f2(x,y1,y) в систему (1.2.3) введена формально для того, чтобы методы, которые будут показаны ниже, могли быть использованы для решения произвольной системы дифференциальных уравнений первого порядка. Рассмотрим несколько численных методов решения системы (1.2.3). Расчетные зависимости для i+1 шага интегрирования имеют следующий вид. Для решения системы из n уравнений расчетные формулы приведены выше. Для решения системы из двух уравнений расчетные формулы удобно записать без двойных индексов в следующем виде:
Метод Адамса-Штёрмера (1.2.6).
В
данном случае отбрасываются разности
шестого и более высоких
ГЛАВА 2. РЕАЛИЗАЦИЯ ПРОГРАММЫ ДЛЯ ЧИСЛЕННОГО РЕШЕНИЯ ОБЫКНОВЕННОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ МЕТОДОМ АДАМСА-ШТЁРМЕРА
2.1
Описание поставленной
задачи
Для численного решения дифференциальных уравнений была составлена программа на языке Паскаль [приложение А], реализующая метод Адамса-Штёрмера для следующего дифференциального уравнения
с начальными значениями :
Для данного уравнения определена система формул нахождения решения
(2.2)
Требуется
найти численное решение задачи на отрезке
[0,4]
2.2 Анализ полученных
результатов работы
программы
Программа численного решения дифференциального уравнения второго порядка методом Адамса-Штёрмера была реализована на языке программирования Паскаль. 1
С помощью составленной программы, решим уравнение:
Отрезок [0,4] , начальное значение :
При
шаге 0,5 получены результаты,
которые оформлены в
виде таблицы:
Таблица 1. Полученные результаты по y
xi | yi | yti | pogr |
0.00 | 0.00 | 0.00 | 0.00 |
0.50 | 0.13 | 0.13 | 0.00 |
1.00 | 0.50 | 0.50 | 0.00 |
1.50 | 0.75 | 0.75 | 0.00 |
2.00 | 1.00 | 1.43 | 0.43 |
2.50 | 1.25 | 2.25 | 1.00 |
3.00 | 2.21 | 2.68 | 0.47 |
3.50 | 4.29 | 4.03 | 0.26 |
4.00 | 7.14 | 6.74 | 6.74 |
Заключение
В
курсовой работе рассмотрен метод Адамса-Штёрмера,
который относится к многошаговым методам
Адамса и была реализована программа на
языке Turbo Pascal 7.0 для нахождения численного
решения обыкновенного дифференциального
уравнения второго порядка методом Адамса-Штёрмера.
В ходе проделанной работы было установлено,
что метод даёт сравнительно невысокую
точность в вычислениях, но достаточная
простота реализации делает метод Адамса-Штёрмера
одним из весьма распространенных численных
методов решения задачи Коши ОДУ второго
порядка.
Список использованной литературы
Приложение А
Листинг программы
program Kursovaya;
uses crt;
var
yo,y,yt,x: array [0..100] of real;
func1,func,o,pogr,e,yss,q,p,r,
n,a,b,i:integer;
function fc(x,y:real):real;
var
l:real;
begin
yss:=cos(x+y)+0.5*(x+y);
l:=yss;
fc:=l;
end;
begin
clrscr;
writeln('vvedite znachenie koncov otrezka');
writeln('a=');
read(a);
writeln('b=');
read(b);
writeln('vvedite y[0]');
writeln('y[0]=');
read(y[0]);
writeln('vvedite kol-vo shagov');
writeln('n=');
read(n);
begin
h:=(b-a)/n;
x[0]:=a; x[n]:=b;
for i:=1 to n-1 do
x[i]:=x[0]+i*h;
end;
begin
yo[0]:=y[0]-h*fc(x[0],y[0]);
yo[1]:=y[0]+h*fc(x[1],y[0]);
for i:=2 to 5 do
yo[i]:=y[0]+2*h*fc(x[i],y[0]);
end;
begin
for i:=0 to 5 do
y[i]:=yo[i];
end;
for i:=5 to n-1 do
begin
func:=67*fc(x[i],y[i])-8*fc(x[
y[i+1]:=y[i]+y[i-4]-y[i-5]+
end;
begin
yt[0]:=y[0]-h*fc(x[0],y[0]);
yt[1]:=y[0]+h*fc(x[1],y[0]);
for i:=2 to 3 do
yt[i]:=y[0]+2*h*fc(x[i],y[0]);
end;
for i:=3 to n-1 do
begin
func:=(fc(x[i-3],y[i-3])+fc(x[
func1:=17*(func)+232*fc(x[i],
yt[i+1]:=y[i]+y[i-2]-y[i-3]+
end;
for i:=0 to n do
begin
o:=abs(y[i])-abs(yt[i]);
o:=abs(o);
writeln('pogreshnost ravna ',o:5:2);
end;
for i:=-1 to n-1 do
begin
writeln(x[i+1]:5:2,' y[',i+1,']=',y[i+1]:5:2,' yt[',i+1,']=',yt[i+1]:5:2);
end;
end.
Приложение Б
Результаты вычислений программы
Уравнение
Приложение В
Описание алгоритма
решения задачи
program Kursovaya ;
uses crt; // подключение библиотеки для вывода на экран
var
yo,y,yt,x: array [0..100] of real;
func1,func,o,pogr,e,yss,q,p,r,
n,a,b,i:integer;
function fc(x,y:real):real;
var
l:real;
begin
yss:=cos(x+y)+0.5*(x+y);
l:=yss;
fc:=l;
end;
begin // основная программа
clrscr;
write('vvedite znachenie koncov otrezka'); //ввод начальных значений
writeln('a=');
read(a);
writeln('b=');
read(b);
writeln('vvedite y[0]');
writeln('y[0]=');
read(y[0]);
writeln('vvedite kol-vo shagov'); //ввод количества шагов
writeln('n=');
read(n);
begin
h:=(b-a)/n;
x[0]:=a; x[n]:=b;
for i:=1 to n-1
do
x[i]:=x[0]+i*h;
end;
begin
yo[0]:=y[0]-h*fc(x[0],y[0]);
yo[1]:=y[0]+h*fc(x[1],y[0]);
for i:=2 to 5 do
yo[i]:=y[0]+2*h*fc(x[i],y[0]);
end;
begin
for i:=0 to 5 do // для i от 0 до 5 шага
y[i]:=yo[i];
end;
begin
for i:=5 to n-1 do // для i от 5 до предпоследнего шага
func:=67*fc(x[i],y[i])-8*fc(x[
y[i+1]:=y[i]+y[i-4]-y[i-5]+
for i:=3 to n-1 do // для i от 3 до предпоследнего шага
func:=(fc(x[i-3],y[i-3]+fc(x[