Московский Государственный Университет Путей Сообщения
Курсовая работа
по дисциплине:
«Вычислительные задачи в системах управления»
на тему
«Решение системы обыкновенных дифференциальных уравнений»
Москва 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
|
C1,c2 |
Приращение функции y2
|
Z1,z2 |
Приращение функции y3
|
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 г.