Решение системы обыкновенных дифференциальных уравнений

Автор работы: Пользователь скрыл имя, 26 Марта 2015 в 17:27, курсовая работа

Краткое описание

Программа решает систему методом прогноза и коррекции (исправленный метод Эйлера). Точность решения ε=0.0001. Способ выбора шага – переменный шаг, выбираемый по верхней оценке остаточного члена. Характер системы – линейная автономная.

Содержание

• Назначение и характеристика программы
• исходные, нормативно-справочные и промежуточные данные
• Математическое описание способа решения
• Алгоритм решения
• Текст программы
• Результат работы программы
• График функции
• Заключение
• Список использованной литературы

Вложенные файлы: 1 файл

vish_zadachi.doc

— 89.50 Кб (Скачать файл)

 


 


 


Московский Государственный Университет Путей Сообщения


 

 

 

 

 

 

 

Курсовая работа

 

по дисциплине:

«Вычислительные задачи в системах управления»

 

на тему

«Решение системы обыкновенных дифференциальных уравнений»

 

 

 

 

 

 

 

 

 

 

 

Москва 2005 г.

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

 

СОДЕРЖАНИЕ

 

  • Назначение и характеристика программы
  • исходные, нормативно-справочные и промежуточные данные
  • Математическое описание способа решения
  • Алгоритм решения
  • Текст программы
  • Результат работы программы
  • График функции
  • Заключение
  • Список использованной литературы

 

                  НАЗНАЧЕНИЕ И ХАРАКТЕРИСТИКА ПРОГРАММЫ

 

Программа предназначена для решения системы обыкновенных дифференциальных уравнений Методом проб и коррекции:

 

y1’=-3y1+48y2-28y3

y2’=-4y1+40y2-22y3

y3’=-6y1+57y2-31y3           при а=0, b=3, y1(a)=1, y2(a)=1, y3(a)=1

 

Программа решает систему методом прогноза и коррекции (исправленный метод Эйлера). Точность решения ε=0.0001. Способ выбора шага – переменный шаг, выбираемый по верхней оценке остаточного члена. Характер системы – линейная автономная.

 

 

 

 

 

Таблица описания переменных

Обозначение в программе

Описание

k

Счетчик шагов интегрирования

Y1,y2.y3

Неизвестные системы

h

Шаг интегрирования

sumR

Методическая погрешность(суммируется на всем отрезке)

R

Погрешность на одном шаге

k1,k2

Приращение функции y1              (к2 более точное чем к1)

C1,c2

Приращение функции y2                (с2 более точное чем с1) 

Z1,z2

Приращение функции y3                 (z2 более точное чем z1)

dmax

Максимальная 3-я производная

d3y1

Третья производная функции y1

d3y2

Третья производная функции y2

x

Переменная х


 

 

 


 


 


 

 

 

 

 

 

 

 




АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ

 

 

                              IV ТЕКСТ ПРОГРАММЫ

{Программа для  решения систем диф.уравнений  методом проб и коррекции}

                               {$n+}

program metod_prob_i_korrekcii;

uses

crt;

var

y1,y2,y3 :  extended;

k1,c1,z1 : extended ;

k2,c2,z2 : extended;

k3,c3,z3 : extended;

k : integer; {номера шагов интегрирования}

 h : real;  {шаг интегрирования}

 R : real; {погрешность на к-ом шаге}

sumR : real; {суммарная  погрешность}

x : real;  {отрезок  интегрирования}

d3y1,d3y2,d3y3,dmax : extended; { 3-я производная }

 print : integer;

f : text;

begin

  textbackground(white);

  clrscr;

  y1:=1; { y1 в начале отрезка интегрирования }

  y2:=1;

  y3:=1;

  assign(f,'c:\f.txt');

  rewrite(f); {результаты вычислений запишутся в текстовый файл}

  repeat

    d3y1:=-51*y1+552*y2-316*y3;

    d3y2:=-52*y1+490*y2-274*y3;

    d3y3:=-78*y1+723*y2-403*y3;

    if (d3y1>d3y2)and(d3y1>d3y3)

     then dmax:=d3y1

     else

      if (d3y2>d3y1)and(d3y2>d3y3)

       then dmax:=d3y2

       else dmax:=d3y3;

    h:=exp((1/3)*ln(12*0.0001/dmax));

    textcolor(blue);

   { writeln(k,'-ый шаг интегрирования равен ',h:1:9);}

    k1:=h*(-3*y1+48*y2-28*y3);  {для y1}

    c1:=h*(-4*y1+40*y2-22*y3);  {для y2}

    z1:=h*(-6*y1+57*y2-31*y3);  {для y3}

 

    k2:=h*(-3*(y1+k1)+48*(y2+c1)-28*(y3+z1));  {для y1}

    c2:=h*(-4*(y1+k1)+40*(y2+c1)-22*(y3+z1));  {для y2}

    z2:=h*(-6*(y1+k1)+57*(y2+c1)-31*(y3+z1));  {для y3}

 

    y1:=y1+((k1+k2)/2);

    y2:=y2+(c1+c2)/2;

    y3:=y3+(z1+z2)/2;

 

 

    R:=(h*h*h)*dmax/12; {погрешность метода на одном шаге инт-ния}

    textcolor(black);

    sumR:=R+sumR;  {суммарная погрешность}

    x:=x+h;

    k:=k+1;

    print:=k+100;

    if ((print mod 100)=0)or(k=1)  {значения печатаются с шагом 80}

     then

        begin

         {печать в текстовый файл}

 

          writeln(f,'Y1= ',y1:0:3,' Y2=',y2:0:3,' Y3=',y3:0:3);

          writeln(f,k,'-ый шаг интегрирования равен ',h:1:9);

          writeln(f,' погрешность метода на ',k,'-ом  шаге   R=',R:1:4);

          writeln(f,' X= ',x:1:3);

         {печать в паскале}

          writeln('Y1= ',y1:0:3,' Y2=',y2:0:3,' Y3=',y3:0:3);

          writeln(k,'-ый шаг интегрирования равен ',h:1:9);

          writeln(' погрешность метода на ',k,'-ом  шаге   R=',R:1:4);

          writeln(' X= ',x:1:3);

        end;

  until x>=3;   {конец отрезка интегрирования}

    close(f);

    readkey;

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Результат работы программы

 

Y1= 1.299 Y2=1.246 Y3=1.352

1-ый шаг интегрирования  равен 0.017052522 погрешность метода  на 1-ом шаге   R=0.0001 X= 0.017

 

Y1= 124.121 Y2=110.241 Y3=161.694

100-ый шаг интегрирования  равен 0.006313207 погрешность метода  на 100-ом шаге   R=0.0001 X= 0.996

 

Y1= 553.260 Y2=508.101 Y3=752.419

200-ый шаг интегрирования  равен 0.003867977 погрешность метода  на 200-ом шаге   R=0.0001 X= 1.484

 

Y1= 1466.039 Y2=1372.205 Y3=2039.611

300-ый шаг интегрирования  равен 0.002788804 погрешность метода на 300-ом шаге   R=0.0001 X= 1.811

 

Y1= 3040.150 Y2=2880.244 Y3=4289.805

400-ый шаг интегрирования  равен 0.002180586 погрешность метода  на 400-ом шаге   R=0.0001 X= 2.057

 

Y1= 5453.307 Y2=5209.931 Y3=7769.572

500-ый шаг интегрирования  равен 0.001790200 погрешность метода на 500-ом шаге   R=0.0001 X= 2.254

 

Y1= 8883.238 Y2=8538.993 Y3=12745.503

600-ый шаг интегрирования  равен 0.001518382 погрешность метода  на 600-ом шаге   R=0.0001 X= 2.418

 

Y1= 13507.680 Y2=13045.166 Y3=19484.200

700-ый шаг интегрирования равен 0.001318231 погрешность метода на 700-ом шаге   R=0.0001 X= 2.559

 

Y1= 19504.375 Y2=18906.192 Y3=28252.276

800-ый шаг интегрирования  равен 0.001164704 погрешность метода  на 800-ом шаге   R=0.0001 X= 2.683

 

Y1= 27051.068 Y2=26299.816 Y3=39316.349

900-ый шаг интегрирования  равен 0.001043208 погрешность метода  на 900-ом шаге   R=0.0001 X= 2.793

 

Y1= 36325.510 Y2=35403.788 Y3=52943.043

1000-ый шаг интегрирования  равен 0.000944666 погрешность метода  на 1000-ом шаге   R=0.0001 X= 2.892

 

Y1= 47505.454 Y2=46395.860 Y3=69398.988

1100-ый шаг интегрирования  равен 0.000863134 погрешность метода  на 1100-ом шаге   R=0.0001 X= 2.983

 

 

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ 

 

Данная программа написании на алгоритмическом языке Turbo-Pascal.

 И работает следующим  образом:

Организуется цикл по переменной  «х» на интервале от «а» до «в» , шаг интегрирования переменный. Результаты расчетов печатаются в текстовый файл с шагом равным 100. 

Далее по полученным результатам строится график в Exel.

 

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

  1. Максимов В.М. «Решение на ЭВМ систем обыкновенных дифференциальных уравнений. Методические указания к курсовой работе.» Москва, 1995 г.
  2. Максимов В.М. лекции по дисциплине «Вычислительные задачи в системах управления», 2005 г.

 

 


Информация о работе Решение системы обыкновенных дифференциальных уравнений