0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 7
1

График в методе Эйлера для решения задачи Коши

23.12.2011, 18:51. Показов 4060. Ответов 12
Метки нет (Все метки)

Прошу помощи в построении точечного графика.
Сам метод я сделал, но вот с графиком не могу справится.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Program Lab6;
const
  a=0;
  b=5;
  N=10;
 
var
  I:integer;
  h:real;
  x,y:array [0..N] of real;
 
function f(x,y:real) of real;
  begin
    f:-y;
  end;
 
begin
  h:=(b-a)/N;
  y[0]:=1;
  x[0]:=a;
 
    writeln(' X[I]    Y[I]');
    writeln(' ____________');
 
  for I:=0 to N-1 do begin
    y[I+1]:=y[I]+h*f(x[I],y[I]);
    x[I]:=x[0]+I*h;
    writeln('  ',X[I]:1:2,'   ',y[I]:1:3);
  end;
  readln;
end.
P.S.
Задание заключается в следующем:
Методом Эйлера решить ОДУ y'=-y на интервале [0,5], y[0]=1.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2011, 18:51
Ответы с готовыми решениями:

Алгоритм численного решения задачи Коши для ДУ 2 порядка методом Эйлера-Коши
Составить программу численного решения ДУ с помощью метода Эйлера-Коши y''+xy'-exp(-y)=x...

Составить программу для решения задачи Коши методом Эйлера
Ребят, помогите пожалуйста по составленной блок-схеме написать код проги. Суть в кратце. Нужно...

Найти численное решение задачи Коши для ДУ-1 (по методу Эйлера). Построить график интегральной кривой
Найти численное решение задачи Коши для ДУ-1 (по методу Эйлера) на отрезке с шагом h = 0,1....

Написать программу решения задачи коши модифицированным методом эйлера
Вложил файл, т.к не все условие получается вставить. Очень нужна помощь с так называемымми третьими...

12
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
23.12.2011, 20:07 2
Pascal
1
2
3
4
function f(x,y:real) of real;
  begin
    f:-y;
  end;
Это что за чудная функция, даже если заменить - на =?

Добавлено через 33 минуты
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Program Lab6;
uses crt,graph;
const
  a=0;
  b=5;
  N=10;
 
var
  I,xc,yc:integer;
  h,mx,my:real;
  x,y:array [0..N] of real;
  s:string;
function f(x,y:real):real;
  begin
    f:=y;
  end;
 
begin
clrscr;
  h:=(b-a)/N;
  y[0]:=1;
  x[0]:=a;
 
    writeln(' X[I]    Y[I]');
    writeln(' ____________');
 
  for I:=0 to N-1 do begin
    y[I+1]:=y[I]+h*f(x[I],y[I]);
    x[I]:=x[0]+I*h;
    writeln('  ',X[I]:1:2,'   ',y[I]:1:3);
  end;
  readln;
initgraph(xc,yc,'');
xc:=50;
yc:=getmaxY-60;
line(xc,yc,getmaxX-30,yc);
line(xc,yc,xc,30);
mx:=(getmaxX-30-xc)/(x[n-1]+1);
my:=(yc-30)/(y[n-1]+5);
for i:=1 to n+1 do
 begin
  line(xc+round(i*mx),yc-3,xc+round(i*mx),yc+3);
  str(i,s);
  outtextXY(xc+round(i*mx),yc+10,s);
  line(xc-3,yc-round(i*my*10),xc+3,yc-round(i*my*10));
  str(i*10,s);
  outtextXY(xc-30,yc-round(i*my*10),s);
 end;
outtextXY(getmaxX-24,yc-10,'X');
outtextXY(xc+10,30,'Y');
moveto(xc+round(x[0]*mx),yc-round(y[0]*my));
setcolor(10);
circle(xc+round(x[0]*mx),yc-round(y[0]*my),2);
for i:=0 to n-1 do
 begin
  setcolor(12);
  lineto(xc+round(x[i]*mx),yc-round(y[i]*my));
  setcolor(10);
  circle(xc+round(x[i]*mx),yc-round(y[i]*my),2);
 end;
readln
end.
1
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 7
23.12.2011, 21:16  [ТС] 3
ох, простите
перепечатывал допустил ошибку,
конечно там
Pascal
1
2
3
4
function f(x,y:real) of real;
  begin
    f:=-y;
  end;
большое спасибо за помощь, в ближайший семестр постараюсь освоить данный модуль.
0
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
24.12.2011, 07:55 4
Тогда и график по другому нужно нарисовать. Кстати для чего в функции параметр х?


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Program Lab6;
uses crt,graph;
const
  a=0;
  b=5;
  N=10;
 
var
  I,xc,yc:integer;
  h,mx,my:real;
  x,y:array [0..N] of real;
  s:string;
function f(x,y:real):real;
  begin
    f:=-y;
  end;
 
begin
clrscr;
  h:=(b-a)/N;
  y[0]:=1;
  x[0]:=a;
 
    writeln(' X[I]    Y[I]');
    writeln(' ____________');
 
  for I:=0 to N-1 do begin
    y[I+1]:=y[I]+h*f(x[I],y[I]);
    x[I]:=x[0]+I*h;
    writeln('  ',X[I]:1:2,'   ',y[I]:1:3);
  end;
  readln;
initgraph(xc,yc,'');
xc:=50;
yc:=getmaxY-60;
line(xc,yc,getmaxX-30,yc);
line(xc,yc,xc,30);
mx:=(getmaxX-30-xc)/(x[n-1]+1);
my:=yc-30;
for i:=1 to n+1 do
 begin
  line(xc+round(i*mx),yc-3,xc+round(i*mx),yc+3);
  str(i,s);
  outtextXY(xc+round(i*mx),yc+10,s);
  line(xc-3,yc-round(i*my/10),xc+3,yc-round(i*my/10));
  str(i/10:0:1,s);
  outtextXY(xc-30,yc-round(i*my/10),s);
 end;
outtextXY(getmaxX-24,yc-10,'X');
outtextXY(xc+10,30,'Y');
moveto(xc+round(x[0]*mx),yc-round(y[0]*my));
setcolor(10);
circle(xc+round(x[0]*mx),yc-round(y[0]*my),2);
for i:=0 to n-1 do
 begin
  setcolor(12);
  lineto(xc+round(x[i]*mx),yc-round(y[i]*my));
  setcolor(10);
  circle(xc+round(x[i]*mx),yc-round(y[i]*my),2);
 end;
readln
end.
0
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
24.12.2011, 08:05 5
Метод Эйлера - это численный метод интегрирования, некоторые дифференциальные уравнения решаются прямым интегрированием: если https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{dy(x)}{dx}=f(x), то https://www.cyberforum.ru/cgi-bin/latex.cgi?y(x)=\int f(x)dx. Значит надо всего лишь получить первообразную в табличном представлении. Ну а если в этой задаче появился график, значит, скорее всего, первообразной же. Итого: дана функция в аналитическом представлении, требуется получить её первообразную в табличном и графическом представлениях. Сам же метод прост до безобразия: имеются x, y(x), https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{dy}{dx} и константа https://www.cyberforum.ru/cgi-bin/latex.cgi?\Delta x, считая [LATEX]\frac{dy}{dx} на интервале от x до https://www.cyberforum.ru/cgi-bin/latex.cgi?x+\Delta x постоянной, ищем https://www.cyberforum.ru/cgi-bin/latex.cgi?y\left( x+\Delta x \right) и переходим к следующему шагу цикла.
0
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 7
24.12.2011, 08:30  [ТС] 6
Цитата Сообщение от Puporev Посмотреть сообщение
Кстати для чего в функции параметр х?
я обычно программы пишу для общих случаев, в этот раз какая-то функция просто попалась не красивая.

Цитата Сообщение от Puporev Посмотреть сообщение
Тогда и график по другому нужно нарисовать.
прошу прощения, за эту ошибку.
0
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
24.12.2011, 08:57 7
Что-то я поторопился исправить масштаб по У, посмотрел что там максимум=1, в общем случае для убывающей функции нужно
Pascal
1
my:=(yc-30)/y[0];
0
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 7
24.12.2011, 09:39  [ТС] 8
Puporev, я наберусь смелости ещё раз просить вас о помощи, программу я переписал
но возникла одна проблема при запуске, выводится только табличка Х Y

пролистав форум, я заметил что когда делают графики, writeln не используют, ну недолго думая, я просто их убрал, но не помогло

вроде бы уже всё настроил, и файлы в нужные папки кинул и путь указал

ещё было предположение что паскаль просто не настроен под графики, но это тоже отпало, скопировал программу с бегающим треугольником, заработала отлично

вот такой код получился после вашей помощи
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Program Lab6;
uses crt,graph;
const
  a=0;
  b=5;
  N=10;
 
var
  I,xc,yc:integer;
  h,mx,my:real;
  x,y:array [0..N] of real;
  s:string;
function f(x,y:real):real;
  begin
    f:=-y;
  end;
 
begin
  clrscr;
 
  h:=(b-a)/N;
 
  y[0]:=1;
  x[0]:=a;
 
    writeln(' x[I]      y[I]');
    writeln(' _______________');
 
  for I:=0 to N-1 do begin
    x[I]:=X[0]+I*h;
    y[I+1]:=y[I]+h*f(x[I],y[I]);
 
    writeln(' ',x[I]:1:2,'      ',  y[I]:1:3);
  end;
  readln;
 
  initgraph(xc,yc,'D:\Program Files\Turbo Pascal 7.1\BGI');
  xc:=50;
  yc:=getmaxY-60;
  line(xc,yc,getmaxX-30,yc);
  line(xc,yc,xc,30);
  mx:=(getmaxX-30-xc)/(X[n-1]+1);
  my:=(yc-30)/y[0];
  for i:=1 to n+1 do begin
    line(xc+round(i*mx),yc-3,xc+round(i*mx),yc+3);
    str(i,s);
    outtextXY(xc+round(i*mx),yc+10,s);
    line(xc-3,yc-round(i*my/10),xc+3,yc-round(i*my/10));
    str(i/10:0:1,s);
    outtextXY(xc-30,yc-round(i*my/10),s);
  end;
  outtextXY(getmaxX-24,yc-10,'X');
  outtextXY(xc+10,30,'Y');
  moveto(xc+round(x[0]*mx),yc-round(y[0]*my));
  setcolor(10);
  circle(xc+round(x[0]*mx),yc-round(y[0]*my),2);
  for i:=0 to n-1 do begin
    setcolor(12);
    lineto(xc+round(x[i]*mx),yc-round(y[i]*my));
    setcolor(10);
    circle(xc+round(x[i]*mx),yc-round(y[i]*my),2);
  end;
  readln
end.
осмелюсь спросить, а у вас эта программа работает?
0
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
24.12.2011, 09:44 9
Цитата Сообщение от Зеленоглазый Посмотреть сообщение
осмелюсь спросить, а у вас эта программа работает?
Если бы моя программа не работала, то зачем бы я публиковал этот свой код?

Добавлено через 2 минуты
Я так подозреваю что у Вас проблема с файлом EGAVGA.BGI скопируйте его из папки BGI в папку с программой.
0
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 7
24.12.2011, 09:44  [ТС] 10
Цитата Сообщение от Puporev Посмотреть сообщение
Если бы моя программа не работала, то зачем бы я публиковал этот свой код?
да уж, глупо с моей стороны задавать такие вопросы,
ну тогда я ещё поищу ошибки со своей стороны
0
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
24.12.2011, 09:46 11
Попробуй запустить программу прямо в папке.
Вложения
Тип файла: rar График.rar (27.8 Кб, 26 просмотров)
0
Почетный модератор
64275 / 47574 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
24.12.2011, 09:47 12
Там правда .pas файл от другой программы, выкиньте его.
0
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 7
24.12.2011, 09:47  [ТС] 13
Цитата Сообщение от Puporev Посмотреть сообщение
Я так подозреваю что у Вас проблема с файлом EGAVGA.BGI скопируйте его из папки BGI в папку с программой.
да уж, всё таки это была моя ошибка, всё заработало
спасибо большое Puporev
постараюсь больше не допускать таких ошибок
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2011, 09:47
Помогаю со студенческими работами здесь

Модификации метода Эйлера для решения задач Коши
Модификации метода Эйлера для решения задач Коши. исправленный метод Эйлера........ помогите с...

Модификации метода Эйлера для решения задач Коши
Помогите пожалуйста. нужно написать 5 программ на паскале: 1) метод трапеций 2) метод Хойна 3)...

Метод Эйлера-Коши и трапеций для решения систем диф. уравнений.
Здравствуйте. Не могу найти внятной информации по численным методам решения систем...

Программная реализация и исследование методовй эйлера численного решения коши для оду1
Добрый день народ, прошу помочь сделать пару лабораторных в MC, если не затруднит, очень нужно, от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru