![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
kellnmiir |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всем приятного времени суток, возникла такая необходимость как дополнить программу командами, реализующими:
- построение на одном графике точного и численного решений; - построение графика абсолютной погрешности численного решения По всей видимости подобные задачи уже всплывали, однако вынужден признать что впервые приходить работать с построением графиков на паскале, а поиск не дал ничего толкового ввиду слишком большого обьема предлагаемой информации, бесспорно в некоторых ситуациях это очень хорошо, однако сейчас я немного "утонул" в ней и вынужден просить помочь с построением вышеописанных графиков для вот такой конкретной программы. [code] uses crt,Graph; function f(x,y:real):real; begin f:=2*x+y; end; function ft(x:real):real; begin ft:=0.5*exp(x)-2*x-2; end; type mas=array[0..200] of real; var x,y,yt,delta:mas; a,b,y0,h,w,deltamax:real; i,n,c:integer; tf:text; begin clrscr; assign(tf,'result.txt'); rewrite(tf); writeln('введите левую границу а '); readln(a); writeln('введите правую границу b'); readln(b); writeln('введите начальное условие y0'); readln(y0); writeln('ўўҐ¤ЁвҐ Є®«ЁзҐбвў® и Ј®ў N'); readln(n); writeln; writeln('выберите действие:'); writeln; writeln('1:Решить ОДУ-1 методом Эйлера '); writeln('2:Решить ОДУ-1 улучшенным методом Эйлера'); readln©; clrscr; case c of 1:begin h:=((b-a)/n); x[0]:=a; y[0]:=y0; delta[0]:=0; deltamax:=0; writeln; writeln('метод эйлера:'); writeln; writeln('|--------------------------------------------------------------|'); writeln('| i | x[i] | yt[i] | y[i] | delta[i] |'); writeln('|--------------------------------------------------------------|'); writeln('| |'); for i:=1 to n do begin x[i]:=x[i-1]+h; y[i]:=y[i-1]+h*f(x[i-1],y[i-1]); yt[i]:=ft(x[i]); delta[i]:=abs(yt[i]-y[i]); writeln('| ',i:2,' | ',x[i]:5:2,' | ',yt[i]:7:4,' | ',y[i]:7:4,' | ',delta[i]:7:4,' |'); writeln(tf,i:2,' | ',x[i]:5:2,' | ',yt[i]:7:4,' | ',y[i]:7:4,' | ',delta[i]:7:4); end; writeln('|______________________________________________________________|'); if delta[i]>deltamax then deltamax:=delta[i]; writeln; writeln('максимальная погрешность равна = ',deltamax:7:4); readln; end; 2:begin rewrite(tf); h:=((b-a)/n); x[0]:=a; y[0]:=y0; delta[0]:=0; deltamax:=0; writeln; writeln('улучшенный метод эйлера :'); writeln; writeln('|--------------------------------------------------------------|'); writeln('| i | x[i] | yt[i] | y[i] | delta[i] |'); writeln('|--------------------------------------------------------------|'); writeln('| |'); for i:=1 to n do begin x[i]:=x[i-1]+h; w:=y[i-1]+h/2*f(x[i-1],y[i-1]); y[i]:=y[i-1]+h*f(x[i-1]+h/2,w); yt[i]:=ft(x[i]); delta[i]:=abs(yt[i]-y[i]); writeln('| ',i:2,' | ',x[i]:5:2,' | ',yt[i]:7:4,' | ',y[i]:7:4,' | ',delta[i]:7:4,' |'); writeln(tf,i:2,' | ',x[i]:5:2,' | ',yt[i]:7:4,' | ',y[i]:7:4,' | ',delta[i]:7:4); end; writeln('|______________________________________________________________|'); if delta[i]>deltamax then deltamax:=delta[i]; writeln; writeln('максимальная погрешность равна = ',deltamax:7:4); readln; end; end; close(tf); end. Сообщение отредактировано: kellnmiir - 28.11.2011 21:11 |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 12:52 |