• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Уравнение методом Эйлера

Алекс2

Новые
Регистрация
24 Мар 2016
Сообщения
25
Реакции
0
Баллы
0
Уравнение методом Эйлера

Добрый день.

У меня есть программа которая вычисляет уравнение методом Эйлера.
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

текст программы в архиве
 

Вложения

И что - так же с графикой надо? И что такое "b"?
 
Добрый вечер, Vladimir_S,
да, мою программу тоже нужно с графикой.
"b" относится к интервалу.(x0 - начало интервала, b- конец)
 
Ладно, держите. Только уж извините, но тот кромешный ужас, который Вы представили в качестве образца, я не использовал. Массивы за каким-то хреном, эти дебильные переходы по меткам... Извините, не мой стиль.
Код:
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.webp
    FP01.webp
    7.8 KB · Просмотры: 44
Добрый вечер, Vladimir_S, спасибо вам большое!!!
а то с этим " кромешным ужасом" я бы сам не справился.
 
Пожалуйста. Только вот вчера заметил, что там лишняя дублирующая строка
FillEllipse(Round(30+x*Kx),Round(GetMaxY-40-y*Ky),2,2);
Попытался отредактировать, так форум, сволочь, опять "лег" аккурат когда я отправлял сообщение. Сейчас исправил.
На работе программы это, впрочем, не сказывается.
 
Назад
Сверху