Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 23.07.2016
Сообщений: 4

Метод Рунге-Кутта 4 порядка точности

31.07.2016, 15:09. Показов 5647. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые Форумчане помогите решить задачу Коши для обыкновенного дифференциального уравнения y' =f(x, y) на промежутке [a, b] методом Рунге–Кутта четвертого порядка точности. f(x, y) = y + cos x –sin x, y(a) = 1, a = 0, b = 1.
Точное решение задачи: y(x) = e^x + sin x.

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
{nmax максимальное число возможных уравнений
x независимая переменная
y вектор зависимых переменных (искомое решение)
f вектор правых частей
a начальное значение зависимой переменной
b конечное значение независимой переменной
h шаг интегрирования = (b-a)/10
}
 
 
const
 
 
  nmax=8;
type
  vec=array[1..nmax] of real;
var
h,a,b,:real;
 
procedure der(x:real;y:vec; var f:vec);
begin
{вектор правых частей};
end;
procedure rk4(n: integer; x, h: real; var y: vec); {готовая процедура метода Рунге-Кутта}
var   i, j: integer;  
h1, h2, q: real;  
y0, y1, f: vec; 
begin  h1 := 0; 
h2 := h1/2;  
for i := 1 to n do begin   
y0[i] := y[i]; 
y1[i] := y[i];  
end;  
for j := 1 to 4 do begin    
der(x+h1,y,f);   
if j = 3 then h1 := h else h1 := h2;   
for i := 1 to n do begin    
q := h1*f[i]; 
y[i] := y0[i] + q;    
if j = 2 then q := 2*q;    
y1[i] := y1[i] + q/3;   
end ;  
end;  
for i := 1 to n do   y[i] := y1[i]; 
end;
 
Процесс заканчивается по достижению верхней границы например:
while x<b+0.00001 do begin
rk4(1,x,h,y);
x:=x+h;
end;
как все связать вместе не знаю. выручайте
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.07.2016, 15:09
Ответы с готовыми решениями:

Решение уравнений методом Рунге-Кутта 4 порядка
напишите програму для решения уравнений методом Рунги-кута 4 порядка))

Решение диф. уравнения 1-го порядка методом Рунге-Кутта
Здраствуйте, извините за обращение, задание поди пустяковое, но и с ним мне нужна помощь( (2x–y)y'=(x^2)y+ 2 - само уравнение X0=a=0 ...

Метод Рунге-Кутта
Составить программу для решения задачи Коши dy/dx=f(x,y), x=, y(a)=y0 четырехэтапным методом Рунге-Кутта, если f(x)=y-2x/y, a=0, b=1, y0=1

2
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8665 / 4502 / 1670
Регистрация: 01.02.2015
Сообщений: 13,931
Записей в блоге: 13
31.07.2016, 16: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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
program RungeKutta4;
 
  function f(x, y: real): real;
  begin
    f := y + cos(x) - sin(x);
  end;
 
  function Yetalon(x: real): real;
  begin
    Yetalon := exp(x) + sin(x);
  end;
 
  procedure RungeKutta4Step(var t, y: real; h: real);
  var
    k1, k2, k3, k4: real;
  begin
    k1 := f(t, y);
    k2 := f(t + (h / 2), y + k1 * (h / 2));
    k3 := f(t + (h / 2), y + k2 * (h / 2));
    k4 := f(t + h, y + k3 * h);
    y  := y + (k1 + 2 * k2 + 2 * k3 + k4) * h / 6;
    t  := t + h;
  end;
 
  procedure RungeKutta4(t0, tfin, h, y0: real; var yfin: real; Nprint: integer);
  var
    t: real;
    y: real;
    Xprint: real;
  begin
    t := t0;
    y := y0;
    if Nprint > 0 then
    begin
      Xprint := t + (tfin - t0) / Nprint;
      writeln('x': 9, 'y': 12, 'Yetalon': 15);
      writeln(t: 12: 5, y: 12: 5, Yetalon(t): 12: 5);
    end;
    while t <= tfin do
    begin
      RungeKutta4Step(t, y, h);
      if (Nprint > 0) and (t >= Xprint) then
      begin
        writeln(t: 12: 5, y: 12: 5, Yetalon(t): 12: 5);
        Xprint := Xprint + (tfin - t0) / Nprint;
      end;
    end;
    yfin := y;
  end;
 
  procedure Differ(t0, tfin, y0: real; eps: real; Nprint: integer);
  var
    h: real;
    y1, y2: real;
  begin
    if Nprint <= 0 then
      exit;
    h := (tfin - t0) / Nprint;
    RungeKutta4(t0, tfin, h, y0, y2, 0);
    repeat
      y1 := y2;
      h  := h / 2;
      RungeKutta4(t0, tfin, h, y0, y2, 0);
    until abs(y2 - y1) < eps;
    RungeKutta4(t0, tfin, h, y0, y2, Nprint);
  end;
 
const
  a  = 0;
  b  = 1;
  Ya = 1;
  Eps = 0.1;
  Nprint = 10;
begin
  Differ(a, b, Ya, Eps, Nprint);
end.
1
0 / 0 / 0
Регистрация: 23.07.2016
Сообщений: 4
31.07.2016, 19:39  [ТС]
попробую переделать но я если честно дуб дубом((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.07.2016, 19:39
Помогаю со студенческими работами здесь

метод Рунге-Кутта
Нужно составить программу расчета зависимости температуры окружающей среды от температуры тела методом Рунге-Кутта. dT/dt=-r(T-TSR),...

Решение дифференциального уравнения методом Рунге-Кутта четвертого порядка
Решить дифференциальное уравнение y'-(y/x) = x*sin(x) X принадлежит y(пи/2)= пи y= 2x-x*cos(x)

Метод Рунге - Кутта - Мерсона
Я написала из книги программу по методу Рунге - Кутты - Мерсона. Выдает ошибки. Я уже не знаю, что ещё можно исправить. type VEC=ARRAY ...

Диффур второго порядка - Метод Рунге Кутты (уравнение 2го порядка)
Ребята, помогите разобраться. Нужно решить дифференциальное уравнение второго порядка с помощью метода Рунге Кутты. Преподаватель требует...

Решение дифференциальных уравнений четвертого порядка методом Эйлера и методом Рунге-Кутта
Форумчане прошу помочь решить уравнение f :=y+y'*x+y''+y'''*x методами Рунге-Кутта и Эйлера. Если ест ссылки на источник или исходник буду...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru