Метод Рунге-Кутта 2-го порядка, Паскаль
Есть решение задачи Коши для обыкновенного дифференциального уравнения 1-го порядка с помощью метода Рунге-Кутты 4-го порядка
А что надо изменить, если нужен рунге-кутта 2 порядка? Помогите пожалуйста. Program R_K; Uses crt; Var a, b, x0, y0, x1, y1, x2, y2, eps, p, u01, u02, u11, u2, h, g, m, k1, k2, k3, k4: real; i: integer; Function f(x,y:real):real; begin f:=y/x; end; Function u1(x,y,h:real):real; begin k1:=f(x,y); k2:=f(x+h/2,y+h*k1/2); k3:=f(x+h/2,y+h*k2/2); k4:=f(x+h,y+h*k3); u1:=u01+ h*(k1+2*k2+2*k3+k4)/6; end; Begin ClrScr; writeln(' Vvedite a,b '); readln(x0, b); writeln('Vvedite y0'); readln(y0); writeln('Vvedite h, E '); readln(h, eps); writeln('X':10,'Y':17,'h':19,'P':20); u01:=y0; u02:=y0; x1:=x0; x2:=x0; y1:=y0; y2:=y0; While x2<b do begin u11:=u1(x1,y1,h); u01:=u11; y1:=u11; x1:=x1+h; m:=h/2; u2:=u1(x2,y2,m); u02:=u2; y2:=u2; x2:=x2+m; u2:=u1(x2,y2,m); u02:=u2; g:=y2; y2:=u2; x2:=x2+m; P:=abs(u11-u2); if (p>eps) then h:=h/2; end; x1:=x0; u11:=0; u01:=y0; y1:=y0; u02:=y0; y2:=y0; x2:=x0; u2:=0; While x1<b do begin u11:=u1(x1,y1,h); u01:=u11; y1:=u11; m:=h/2; u2:=u1(x2,y2,m); u02:=u2; y2:=u2; x2:=x2+m; u2:=u1(x2,y2,m); u02:=u2; y2:=u2; x2:=x2+m; P:=abs(u11-u2); writeln((x1):15:13,' ',u11:15:13,' ',h:15:13,' ',p:15:13); x1:=x1+h; end; readln; End. |
Цитата:
Прежде всего, я переделал программу решения по методу Рунге-Кутты. На мой взгляд, там у Вас та-а-акого понаверчено-понакручено, что - ух! Упростил. Извините, входные данные оформил в виде констант - поправите сами, если нужно. Поскольку Вы не привели главного - параметров стартовой точки x0, y0 и интересующего диапазона, я взял "с потолка" одно из решений исходного уравнения, а именно y=4x, и диапазон от 1 до 10. Подбор шага сохранил, только сделал по-человечески. Итак, мой вариант Рунге-Кутты: Код:
Uses crt; Код:
Uses crt; |
помогите пожалуйста написать программу на паскаль. методом Рунге Кутта решить диффер уравнение второго порядка U''(p)- p^2*U'(p) - (мю)*ln(1+ U(p))=0 на Паскаль, и обязателен вывод графика.промежуток от 0 до 10.(насколько я поняла график должен стремится к 1)
|
людиии!программа нужна срочно!!!завтра после обеда нужно сдать!!!(
|
Цитата:
|
Спасибо за ответ, Владимир!дело в том, что программа у меня есть, но она неправильно выводит график! шаг h=0,001(кстати, в примерной программе h= -0,001 ). А стартовая точка х=0.
|
Цитата:
U(0) = ... U'(0) = ... кстати, аргументом является p, а не x. Кроме того, в уравнении присутствует параметр μ - его значение тоже не худо бы знать. А еще некоторое недоумение вызывает соотношение длины интервала (10) и шага (0.001). Это что же - 10000 точек считать? Не многовато? |
Вложений: 1
Цитата:
|
Цитата:
http://www.tehnari.ru/f41/t96417/ Подстановку нужной функции, удаление лишнего и выбор процедур через Case сделаете сами, невелика премудрость. Не очень, правда, понимаю, как мыслится добиться "заданной точности". В отличие от алгебраических уравнений, эти методы не предполагают какой-либо итерационной процедуры. Если только дробить шаг до получения сходимости. Если так, то добавьте внешний цикл по измельчению шага. P.S. И ещё: как модератор, я НАСТОЯТЕЛЬНО прошу Вас прекратить цепляться к чужим темам. Создавайте свои темы под свои задачи. |
Часовой пояс GMT +4, время: 10:28. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.