Реферат: работа по дисциплине : «Вычислительные задачи в системах управления»
Название: работа по дисциплине : «Вычислительные задачи в системах управления» Раздел: Остальные рефераты Тип: реферат | |||||||||||||||||||||||||||
Московский Государственный Университет Путей Сообщения Курсовая работа по дисциплине: «Вычислительные задачи в системах управления» на тему «Решение системы обыкновенных дифференциальных уравнений» Москва 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. Способ выбора шага – переменный шаг, выбираемый по верхней оценке остаточного члена. Характер системы – линейная автономная. Таблица описания переменных
АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ 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 г. |