Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 04.05.2016, 17:42   #1 (permalink)
Алекс2
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

текст программы в архиве
Вложения
Тип файла: rar Ejler.rar (1.5 Кб, 14 просмотров)
Алекс2 вне форума   Ответить с цитированием

Старый 04.05.2016, 17:42
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Эти обсуждения очень схожи с вашей темой

Решить уравнение методом половинного деления
Excel. Решить дифференциальное уравнение методом Эйлера
Помогите с модифицированным методом Эйлера
Помогите решить уравнение методом половинного деления
Приближенное решение дифференциального уравнения методом Эйлера с уточнением.

Старый 04.05.2016, 19:28   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

И что - так же с графикой надо? И что такое "b"?
Vladimir_S вне форума   Ответить с цитированием
Старый 04.05.2016, 23:28   #3 (permalink)
Алекс2
Member
 
Регистрация: 24.03.2016
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Добрый вечер, Vladimir_S,
да, мою программу тоже нужно с графикой.
"b" относится к интервалу.(x0 - начало интервала, b- конец)
Алекс2 вне форума   Ответить с цитированием
Старый 05.05.2016, 22:21   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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.
Миниатюры
fp01.jpg  
Vladimir_S вне форума   Ответить с цитированием
Старый 06.05.2016, 00:21   #5 (permalink)
Алекс2
Member
 
Регистрация: 24.03.2016
Сообщений: 25
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Добрый вечер, Vladimir_S, спасибо вам большое!!!
а то с этим " кромешным ужасом" я бы сам не справился.
Алекс2 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 06.05.2016, 09:41   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Пожалуйста. Только вот вчера заметил, что там лишняя дублирующая строка
Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
FillEllipse(Round(30+x*Kx),Round(GetMaxY-40-y*Ky),2,2);
Попытался отредактировать, так форум, сволочь, опять "лег" аккурат когда я отправлял сообщение. Сейчас исправил.
На работе программы это, впрочем, не сказывается.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 05:24.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.