Метод Адамса-Штёрмера

Автор: Пользователь скрыл имя, 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

Работа содержит 1 файл

M.A.S.doc

— 152.00 Кб (Скачать)

                                                                                        (1.2.3).

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

    Функция f2(x,y1,y) в систему (1.2.3) введена формально для того, чтобы методы, которые будут показаны ниже, могли быть использованы для решения произвольной системы дифференциальных уравнений первого порядка. Рассмотрим несколько численных методов решения системы (1.2.3). Расчетные зависимости для i+1 шага интегрирования имеют следующий вид. Для решения системы из n уравнений расчетные формулы приведены выше. Для решения системы из двух уравнений расчетные формулы удобно записать без двойных индексов в следующем виде:

      Метод Адамса-Штёрмера (1.2.6).

    В данном случае отбрасываются разности шестого и более высоких порядков. Вторая формула в этой группе является, как правило, более точной. 

    ГЛАВА 2.  РЕАЛИЗАЦИЯ ПРОГРАММЫ ДЛЯ ЧИСЛЕННОГО РЕШЕНИЯ ОБЫКНОВЕННОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ МЕТОДОМ АДАМСА-ШТЁРМЕРА

   2.1 Описание поставленной задачи 

    Для численного решения дифференциальных уравнений была составлена программа на языке Паскаль [приложение А], реализующая метод Адамса-Штёрмера для следующего дифференциального уравнения

                                                                                      (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 для нахождения численного решения обыкновенного дифференциального уравнения второго порядка методом Адамса-Штёрмера. В ходе проделанной работы было установлено, что метод даёт сравнительно невысокую точность в вычислениях,  но достаточная простота реализации делает метод Адамса-Штёрмера одним из весьма распространенных численных методов решения задачи Коши ОДУ второго порядка. 

 

Список  использованной литературы

  1. Камке Э. Справочник по обыкновенным дифференциальным уравнениям. - М.: Наука: Гл. ред. физ-мат. лит., 1971.- 589с.
  2. Коддингтон Э.А., Левинсон Н. Теория обыкновенных дифференциальных уравнений. – М.: Изд-во иностранной литературы, 1958. - 475с.
  3. Калкин Н.Н. Численные методы. – М.: Мир, 1984. - 494с.
  4. Мак-Кракен Д., Дорн У. Численные методы и программирование на Фортране. – М.: Мир, 1977. - 584с.
  5. Самарский А.А. Введение в численные методы. – М.: Наука,1982. - 269с.
  6. Туpчак Л.И. Основы численных методов. - М.: Наука, 1987. -320с.
 
 
 

 

Приложение А

Листинг программы

program Kursovaya;

uses crt;

var

yo,y,yt,x: array [0..100] of real;

func1,func,o,pogr,e,yss,q,p,r,h:real;

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[i-1],y[i-1])+122*fc(x[i-2],y[i-2]-8*fc(x[i-3],y[i-3])+67*fc(x[i-4],y[i-4]));

          y[i+1]:=y[i]+y[i-4]-y[i-5]+sqr(h)/48*(func);

          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[i-2],y[i-2])+fc(x[i-1],y[i-1])+fc(x[i],y[i]));

func1:=17*(func)+232*fc(x[i],y[i])+222*fc(x[i-1],y[i-1])+232*fc(x[i-2],y[i-2])+17*fc(x[i-3],y[i-3]);

yt[i+1]:=y[i]+y[i-2]-y[i-3]+sqr(h)/240*(func1);

         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,h:real;                // инициализация переменных

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                               // для i от 1 до предпоследнего шага

   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[i-1],y[i-1])+122*fc(x[i-2],y[i-2]-8*fc(x[i-3],y[i-3])+67*fc(x[i-4],y[i-4]));                 // вычисление значения функции

         y[i+1]:=y[i]+y[i-4]-y[i-5]+sqr(h)/48*(func);  // определение значений у

          for i:=3 to n-1 do                  // для i от 3 до предпоследнего шага

         func:=(fc(x[i-3],y[i-3]+fc(x[i-2],y[i-2])+fc(x[i-1],y[i-1])+fc(x[i],y[i])));

Информация о работе Метод Адамса-Штёрмера