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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
ruster
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 4
#1

Метод Рунге-Кутта - C++

25.10.2013, 13:00. Просмотров 1414. Ответов 4
Метки нет (Все метки)

Помогите написать метод Рунге Кутта для решение систем диф. уравнений из 4 уравнений.
dx/dt=Px=f1(t,x,y,Px,Py)
dy/dt=Py=f2(t,x,y,Px,Py)
dPx/dt=-(w^2)*x-2axy=f3(t,x,y,Px,Py)
dPy/dt=-(w^2)*y-ax^2+by^2=f4(t,x,y,Px,Py)

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
void Rugge_Kutte2(double h,double &Xo,double &Yo,double &PXo,double &PYo,double a,double b)
{
//вместо t везде нули, так как в f1,f2,f3,f4 оно не на что не влияет
    k11=h*f1(0,Xo,Yo,PXo,PYo,a,b);
    k21=h*f2(0,Xo,Yo,PXo,PYo,a,b);
    k31=h*f3(0,Xo,Yo,PXo,PYo,a,b);
    k41=h*f4(0,Xo,Yo,PXo,PYo,a,b);
 
    k12=h*f1(0,Xo+h/2,Yo+k21/2,PXo+k31/2,PYo+k41/2,a,b);
    k22=h*f2(0,Xo+h/2,Yo+k21/2,PXo+k31/2,PYo+k41/2,a,b);
    k32=h*f3(0,Xo+h/2,Yo+k21/2,PXo+k31/2,PYo+k41/2,a,b);
    k42=h*f4(0,Xo+h/2,Yo+k21/2,PXo+k31/2,PYo+k41/2,a,b);
 
    k13=h*f1(0,Xo+h/2,Yo+k22/2,PXo+k32/2,PYo+k42/2,a,b);
    k23=h*f2(0,Xo+h/2,Yo+k22/2,PXo+k32/2,PYo+k42/2,a,b);
    k33=h*f3(0,Xo+h/2,Yo+k22/2,PXo+k32/2,PYo+k42/2,a,b);
    k43=h*f4(0,Xo+h/2,Yo+k22/2,PXo+k32/2,PYo+k42/2,a,b);
 
    k14=h*f1(0,Xo+h/2,Yo+k23,PXo+k33,PYo+k43,a,b);
    k24=h*f2(0,Xo+h/2,Yo+k23,PXo+k33,PYo+k43,a,b);
    k34=h*f3(0,Xo+h/2,Yo+k23,PXo+k33,PYo+k43,a,b);
    k44=h*f4(0,Xo+h/2,Yo+k23,PXo+k33,PYo+k43,a,b);
    
    Xo=Xo+(k11+2*k12+2*k13+k14)/6;
    Yo=Yo+(k31+2*k32+2*k33+k34)/6;
    PXo=PXo+(k21+2*k22+2*k23+k24)/6;
    PYo=PYo+(k41+2*k42+2*k43+k44)/6;
 
}
Он почему то работает неправильно
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2013, 13:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод Рунге-Кутта (C++):

метод Рунге-Кутта - C++
Всем доброго времени суток, меня интересует, пользуясь методом Рунге -Кута для диф уравнений, я получу в ответе точки, графика диф...

Метод Рунге-Кутта - C++
Всем добрый день! Задали практическую работу, в которой необходимо проинтегрировать функцию методом Рунге-Кутта 4го порядка. Решил...

Метод Рунге-Кутта - C++
Нужно решить диффур второго порядка. При решении выводятся нуля. Где я оплошал? #include <math.h> using namespace std; ...

Метод Рунге-Кутта - C++
как реализовать программу для уравнения вида dv/dt=const*dm/dt методом рунге-кутта. как именно заменить производную справа

метод Рунге-Кутта - C++
Помогите написать программу на хаотичное движение бильярдных шаров методом Рунге-Кутта. При столкновении шары должны отталкиваться, ну и...

Метод Рунге-Кутта. - C++
хотелось бы спросить знающих людей. Мне необходимо решить систему ДУ уравнений методом Рунге_кутта 4 порядка. А значит мне нужно в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
25.10.2013, 13:20 #2
Как раз t убирать нельзя, его надо передать как ссылочный параметр функции .
Ваша функция для текущего t будет вычислять значения в точке t+h.
0
ruster
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 4
25.10.2013, 13:26  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
Как раз t убирать нельзя, его надо передать как ссылочный параметр функции .
Ваша функция для текущего t будет вычислять значения в точке t+h.
Так сами функции не зависят от t , так что если я вместо 0, напишу t+h/2, то для данного случая ничего не ихменятся, так как в уравнений нет параметра t
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
25.10.2013, 13:32 #4
Функции не зависят. Но решение в целом зависит.

Добавлено через 3 минуты
В принципе, можете не передавать.
Но тогда в вызывающей программе организуйте цикл по t
от нуля до желаемого конечного с шагом h
0
ruster
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 4
25.10.2013, 14:26  [ТС] #5
Цитата Сообщение от zss Посмотреть сообщение
Функции не зависят. Но решение в целом зависит.

Добавлено через 3 минуты
В принципе, можете не передавать.
Но тогда в вызывающей программе организуйте цикл по t
от нуля до желаемого конечного с шагом h
Да я так и делаю, но что то результат неправильный, ну может в чем то другом ошибка, в чем не пойму,
Но спасибо за ответы)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 14:26
Привет! Вот еще темы с ответами:

Метод Рунге-Кутта 2-го порядка - C++
Написал код программы. С компиляцией вроде бы нет проблем. А цикл for воспринимать не хочет. Программа просто его пропускает. Помогите...

ДУ. Метод Рунге-Кутта. Погрешность. - C++
Сам Рунге-Кутта III порядка. - "реализовано". Огорчает погрешность, не могу понять как улучшить точность (и не достаточно ли такой?). ...

Цикл for. Метод Рунге-Кутта - C++
Программа считает, но неправильно из за цикла for. Он считает только начальное значение, а нужно чтобы считал предыдущее посчитанное. И еще...

Метод Рунге-Кутта 4-го порядка - C++
Правильно ли я записал выражения для коэффициентов моего уравнения(система Лоренца) #include <math.h> #include <stdlib.h> ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.10.2013, 14:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru