04.05.2016, 17:42 | #1 (permalink) |
Member
Регистрация: 24.03.2016
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Уравнение методом Эйлера
У меня есть программа которая вычисляет уравнение методом Эйлера. y'*cosx+y*sinx=1 Начальное условие x0 = 0, y0 = 1, b = 0,5 Точное решение уравнения y=sinx+cosx Помогите, пожалуйста, изменить эту программу под это условие. y=y'*(x+1) начальное условие x0= 1, y0 =2 , b = 4 Точное решение y=x+1 текст программы в архиве |
04.05.2016, 17:42 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Эти обсуждения очень схожи с вашей темой Решить уравнение методом половинного деления Excel. Решить дифференциальное уравнение методом Эйлера Помогите с модифицированным методом Эйлера Помогите решить уравнение методом половинного деления Приближенное решение дифференциального уравнения методом Эйлера с уточнением. |
05.05.2016, 22:21 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ладно, держите. Только уж извините, но тот кромешный ужас, который Вы представили в качестве образца, я не использовал. Массивы за каким-то хреном, эти дебильные переходы по меткам... Извините, не мой стиль.
Код:
Uses Graph, CRT; Const Dx=0.1; x0=1.0; b=4.0; y0=2.0; Var GraphDevice, GraphMode: integer; x,y,Kx,Ky,D:Real; i,N:Integer; S:String; Function Accur(z:real):real; begin Accur:=z+1; end; Function Der(Xd,Yd:real):real; begin Der:=Yd/(Xd+1); end; Begin N:=Round((b-x0)/Dx); GraphDevice := Detect; GraphMode := Detect; InitGraph(GraphDevice, GraphMode, ''); if GraphResult <> grOk then begin writeln('Error'); Exit; end; SetLineStyle(SolidLn,0,ThickWidth); Line(30,GetMaxY-40,GetMaxX-10,GetMaxY-40); Line(30,GetMaxY-40,30,20); SetTextJustify(CenterText,TopText); OutTextXY(GetMaxX-15,GetMaxY-30,'X'); SetTextJustify(LeftText,CenterText); OutTextXY(12,25,'Y'); Kx:=(GetMaxX-40)/5; Ky:=(GetMaxY-60)/7; SetLineStyle(SolidLn,0,NormWidth); SetTextJustify(CenterText,TopText); for i:=0 to 4 do begin Line(Round(30+i*Kx),GetMaxY-34,Round(30+i*Kx),GetMaxY-40); Str(i,S); OutTextXY(Round(30+i*Kx),GetMaxY-30,S); end; SetTextJustify(RightText,CenterText); for i:=0 to 6 do begin Line(30,Round(GetMaxY-40-i*Ky),24,Round(GetMaxY-40-i*Ky)); Str(i,S); OutTextXY(20,Round(GetMaxY-40-i*Ky),S); end; SetColor(LightRed); Line(30,Round(GetMaxY-40-Accur(0)*Ky),Round(30+5*Kx),Round(GetMaxY-40-Accur(5)*Ky)); SetTextJustify(LeftText,CenterText); Line(50,50,70,50); OutTextXY(80,50,'Accurate function'); SetColor(Yellow); Line(50,80,70,80); OutTextXY(80,80,'Euler method'); SetFillStyle(SolidFill,Yellow); FillEllipse(60,80,2,2); x:=x0; y:=y0; SetFillStyle(SolidFill,Yellow); FillEllipse(Round(30+x*Kx),Round(GetMaxY-40-y*Ky),2,2); MoveTo(Round(30+x*Kx),Round(GetMaxY-40-y*Ky)); for i:=1 to N do begin D:=Der(x,y); x:=x+Dx; y:=y+D*Dx; FillEllipse(Round(30+x*Kx),Round(GetMaxY-40-y*Ky),2,2); LineTo(Round(30+x*Kx),Round(GetMaxY-40-y*Ky)); end; ReadKey End. |
06.05.2016, 00:21 | #5 (permalink) |
Member
Регистрация: 24.03.2016
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Добрый вечер, Vladimir_S, спасибо вам большое!!!
а то с этим " кромешным ужасом" я бы сам не справился. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
06.05.2016, 09:41 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Пожалуйста. Только вот вчера заметил, что там лишняя дублирующая строкаПопытался отредактировать, так форум, сволочь, опять "лег" аккурат когда я отправлял сообщение. Сейчас исправил.
На работе программы это, впрочем, не сказывается. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|