Форум программистов, компьютерный форум CyberForum.ru

Метод Рунге-Кутта 4 порядка (исправить код) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
Alexandr1966
25 / 25 / 1
Регистрация: 17.12.2012
Сообщений: 425
29.04.2014, 15:18     Метод Рунге-Кутта 4 порядка (исправить код) #1
Всем привет. Нужно решить пример методом Рунге-Кутта 4-го порядка точности.

Пример:
y=1/2*x*y
x0=0 - начало интервала.
y0=1 - конец интервала.
h=0.1 - шаг.

Ответ (из книги):
x=0 y=1
x=0.1 y=1.0025
x=0.2 y=1.0100
x=0.3 y=1,0277
x=0.4 y=1,0408
x=0.5 y=1.0645
x=0.6 y=1.0942
x=0.7 y=1,1303
и так далее до x=1.0

Вроде бы в код всё запихал из википедии про метод, а не работает, помогите разобраться(((
C++
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
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
 
double f(double x, double y)
{
          return 1/2*x*y;               
}
 
int main(void){
   int i;
   double x,y,h,k1,k2,k3,k4;
   
   x=0;
   y=1;
   h=0.1;   
 
   for(i=1;i<=10;i++)
   {
      k1=f(x, y);
      k2=f(x+h/2, y+h/2*k1);
      k3=f(x+h/2, y+h/2*k2);
      k4=f(x+h, y+h*k3);
      x+=h;
      y= ????????????????????????????????
      printf("x=%.1lf   y=%.4lf     \n", x,y);
   }
 system("PAUSE");
}
Где y=????? вот видимо здесь что-то не то(

http://ru.wikipedia.org/wiki/%D0%9C%...82%D1%82%D1%8B

Добавлено через 1 час 34 минуты
Ребята помогите код исправить или дополнить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 15:18     Метод Рунге-Кутта 4 порядка (исправить код)
Посмотрите здесь:

C++ Метод Рунге-Кутта пятого порядка, модификация Мерсона
C++ Метод Рунге-Кутта 4-го порядка
метод Рунге-Кутта C++
C++ Метод Рунге-Кутта
C++ Метод Рунге-Кутта 3 порядка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev_Hyper
 Аватар для Ev_Hyper
1806 / 1627 / 435
Регистрация: 15.12.2013
Сообщений: 5,777
29.04.2014, 15:41     Метод Рунге-Кутта 4 порядка (исправить код) #2
Alexandr1966, ошибка у вас в функции:
C++
1
y=1/2*x*y
а начальные условия:
y(0) = 1. Подставьте сами, и скажите какой ответ должен быть.
Alexandr1966
25 / 25 / 1
Регистрация: 17.12.2012
Сообщений: 425
29.04.2014, 17:20  [ТС]     Метод Рунге-Кутта 4 порядка (исправить код) #3
Ev_Hyper, что значит ошибка в функции?! она такая задана, пример из учебника

Добавлено через 21 секунду
Ev_Hyper, Игрек НЕ ОТ НУЛЯ, а игрек нулевое

Добавлено через 16 секунд
Ev_Hyper, вы можете исправить код?

Добавлено через 50 минут
программисты помогите решить, горю
Ev_Hyper
 Аватар для Ev_Hyper
1806 / 1627 / 435
Регистрация: 15.12.2013
Сообщений: 5,777
30.04.2014, 08:18     Метод Рунге-Кутта 4 порядка (исправить код) #4
Alexandr1966, я же вам доступно объяснил, что параметры некорректны. Если пример из книги, то скажите автора, главу и страницу.

Цитата Сообщение от Alexandr1966 Посмотреть сообщение
Ev_Hyper, Игрек НЕ ОТ НУЛЯ, а игрек нулевое
Alexandr1966, http://www.cyberforum.ru/cgi-bin/latex.cgi?{y}_{0} = y({x}_{0})=y(0)
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
30.04.2014, 08:45     Метод Рунге-Кутта 4 порядка (исправить код) #5
Цитата Сообщение от Alexandr1966 Посмотреть сообщение
return 1/2*x*y;
y всегда равен нулю, т.к. 1/2 равно нулю(целое делится на целое)
Alexandr1966
25 / 25 / 1
Регистрация: 17.12.2012
Сообщений: 425
30.04.2014, 10:06  [ТС]     Метод Рунге-Кутта 4 порядка (исправить код) #6
Ev_Hyper, zss, короче вот код метода для моего примера рабочий и точный.
C++
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
//Метод Рунге-Кутты
#include "stdafx.h"
#include "conio.h"
#include "math.h"
 
double f(double x, double y)
{
          return 0.5*x*y;               
}
 
int main(void)
{
   double x=0,y=1,h=0.1,k1,k2,k3,k4,d;
   printf("x0=0,  y=1,  h=0.1\n\n");
   for(x=0;x<=1;x+=h)
   {
      printf("%.1f    |   %.4f     \n", x,y);
      k1=h*f(x, y);
      k2=h*f(x+h/2, y+k1/2);
      k3=h*f(x+h/2, y+k2/2);
      k4=h*f(x+h, y+k3);
      d=(k1+2*k2+2*k3+k4)/6;
      y=y+d;
   }
_getch();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 10:54     Метод Рунге-Кутта 4 порядка (исправить код)
Еще ссылки по теме:

Метод рунге-кутта 3 порядка C++
Метод Рунге-Кутта 2-го порядка C++
C++ Метод Рунге-Кутта четвертого порядка

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

Или воспользуйтесь поиском по форуму:
Ev_Hyper
 Аватар для Ev_Hyper
1806 / 1627 / 435
Регистрация: 15.12.2013
Сообщений: 5,777
30.04.2014, 10:54     Метод Рунге-Кутта 4 порядка (исправить код) #7
Alexandr1966, если бы вы использовали редактор формул, то вам бы помогли гораздо быстрее...
Yandex
Объявления
30.04.2014, 10:54     Метод Рунге-Кутта 4 порядка (исправить код)
Ответ Создать тему
Опции темы

Текущее время: 03:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru