|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
31.03.2013, 20:55 | #1 (permalink) |
Новичок
Регистрация: 05.12.2012
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Метод Рунге-Кутта 2-го порядка, Паскаль
А что надо изменить, если нужен рунге-кутта 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. |
31.03.2013, 20:55 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посмотрите, может быть в обсуждаемых топиках проблема уже решена Методом Рунге-Кутта найти решение дифференциальных уравнений Помогите собрать корпус для бандпасса 6-го порядка Заполнить с клавиатуры симметричную квадратную действительную матрицу N-го порядка Метод Ван Хао C++ Определение порядка фильтров верхних частот Метод Рунге-Кутта-Мерсона в Turbo Pascal |
31.03.2013, 22:47 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Попробую.
Прежде всего, я переделал программу решения по методу Рунге-Кутты. На мой взгляд, там у Вас та-а-акого понаверчено-понакручено, что - ух! Упростил. Извините, входные данные оформил в виде констант - поправите сами, если нужно. Поскольку Вы не привели главного - параметров стартовой точки x0, y0 и интересующего диапазона, я взял "с потолка" одно из решений исходного уравнения, а именно y=4x, и диапазон от 1 до 10. Подбор шага сохранил, только сделал по-человечески. Итак, мой вариант Рунге-Кутты: Код:
Uses crt; Const x0=1.0; y0=4.0; b=10.0; eps=0.1; Var x1,y1,y2,h,p:real; i,N:integer; Function f(x,y:real):real; begin f:=y/x; end; Function u1(x,y,h:real):real; var k1,k2,k3,k4: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:=y+h*(k1+2*k2+2*k3+k4)/6; end; Begin y2:=y0; h:=2; Repeat ClrScr; x1:=x0; y1:=y0; h:=h/2; N:=Round((b-x0)/h); for i:=1 to N do begin x1:=x1+h; y1:=u1(x1,y1,h); writeln('x= ',x1:6:3,' y= ',y1:6:3,' h= ',h:0:5); end; p:=Abs(y1-y2); y2:=y1; Until p<eps; Readln End. Код:
Uses crt; Const x0=1.0; y0=4.0; b=10.0; eps=0.1; Var x1,y1,x2,y2,y2a,y3,h,p:real; i,N:integer; Function f(x,y:real):real; begin f:=y/x; end; Begin y3:=y0; h:=2; Repeat ClrScr; x1:=x0; y1:=y0; h:=h/2; N:=Round((b-x0)/h); for i:=1 to N do begin x2:=x1+h; y2a:=y1+h*f(x1,y1); y2:=y1+h*(f(x1,y1)+f(x2,y2a))/2; writeln('x= ',x2:6:3,' y= ',y2:6:3,' h= ',h:0:5); x1:=x2; y1:=y2; end; p:=Abs(y2-y3); y3:=y2; Until p<eps; Readln End. |
10.03.2014, 21:18 | #3 (permalink) |
Новичок
Регистрация: 10.03.2014
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
помогите пожалуйста написать программу на паскаль. методом Рунге Кутта решить диффер уравнение второго порядка U''(p)- p^2*U'(p) - (мю)*ln(1+ U(p))=0 на Паскаль, и обязателен вывод графика.промежуток от 0 до 10.(насколько я поняла график должен стремится к 1)
|
10.03.2014, 21:56 | #5 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
10.03.2014, 22:43 | #6 (permalink) |
Новичок
Регистрация: 10.03.2014
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо за ответ, Владимир!дело в том, что программа у меня есть, но она неправильно выводит график! шаг h=0,001(кстати, в примерной программе h= -0,001 ). А стартовая точка х=0.
|
11.03.2014, 10:08 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Этого мало! Повторяю: должны быть даны значения искомой функции и ее первой производной в стартовой точке. Т.е.
U(0) = ... U'(0) = ... кстати, аргументом является p, а не x. Кроме того, в уравнении присутствует параметр μ - его значение тоже не худо бы знать. А еще некоторое недоумение вызывает соотношение длины интервала (10) и шага (0.001). Это что же - 10000 точек считать? Не многовато? |
12.01.2019, 15:26 | #8 (permalink) |
Новичок
Регистрация: 09.01.2019
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите добавить к программе из этой темы из первого поста (рунге 4го порядка), решение этого задания еще по методу Эйлера. С выбором метода решения через case
|
12.01.2019, 18:35 | #9 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Численные методы решения дифференциальных уравнений Подстановку нужной функции, удаление лишнего и выбор процедур через Case сделаете сами, невелика премудрость. Не очень, правда, понимаю, как мыслится добиться "заданной точности". В отличие от алгебраических уравнений, эти методы не предполагают какой-либо итерационной процедуры. Если только дробить шаг до получения сходимости. Если так, то добавьте внешний цикл по измельчению шага. P.S. И ещё: как модератор, я НАСТОЯТЕЛЬНО прошу Вас прекратить цепляться к чужим темам. Создавайте свои темы под свои задачи. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Метки |
паскаль; помогите;, рунге-кутта |
Опции темы | |
Опции просмотра | |
|
|