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

Отображение Пуанкаре для системы Хенона-Хейлеса и метод Рунге Кутта - C++

Восстановить пароль Регистрация
 
ruster
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 4
24.10.2013, 18:59     Отображение Пуанкаре для системы Хенона-Хейлеса и метод Рунге Кутта #1
Здравствуйте, столкнулся с такой проблемой, не могу понять ошибку, то ли сам метод не понимаю, то ли где то прокралась. Вообщем суть задачи, отрисовать точки сечения Пуанкаре системы:
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)
задаются начальные условия H0=0.0417, x=0,y=0.1,Py=0,Px вычисляется через H=1/2(Px^2+Py^2)+w^2/2(x^2+y^2)+ax^2y-b/3y^3
Далее с помощью метода Рунге Кутта вычисляется следующие точки x,y,Px,Py,
и проверяю попадает ли данная точка в сечение по x, чтобы попало в сечение |x-x_sech|<h_sech, где x_sech=0 плоскость сечения, а h_sech=0.05 его ширина.
Если попадает, добавляю точку для отрисовки, далее считаю новые точки и так далее. В конце отрисовывается. Отрисовка сама по себе работает правильно, так что как мне кажется вся проблема в методе, подскажите где ошибка
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
31
32
33
34
35
36
37
38
39
40
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;
 
}
// вот Эйлер, рисует так же неправильно
void Eiler(double h,double &Xo,double &Yo,double &PXo,double &PYo,double a,double b)
{
    
    double xt=Xo,yt=Yo,pxt=PXo,pyt=PYo;
    Xo=Xo+h*f1(0,Xo,Yo,PXo,PYo,a,b);
    Yo=Yo+h*f3(0,Xo,Yo,PXo,PYo,a,b);
    PXo=PXo+h*f2(0,Xo,Yo,PXo,PYo,a,b);
    PYo=PYo+h*f4(0,Xo,Yo,PXo,PYo,a,b);
 
}
Помогите, пожалуйста, столько времени убил, бросать жалко)

Добавлено через 18 часов 29 минут
Люди добрые, помогите

Добавлено через 5 часов 29 минут
Ну хотя бы, метод Рунге Кутта, для системы посмотрите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 18:59     Отображение Пуанкаре для системы Хенона-Хейлеса и метод Рунге Кутта
Посмотрите здесь:

Метод Рунге-Кутта. C++
метод Рунге-Кутта C++
метод Рунге-Кутта C++
Функция для численного интегрирования системы дифференциальных уравнений методом Рунге - Кутта C++
Метод Рунге-Кутта C++
C++ Метод Рунге-Кутта
C++ Метод Рунге-Кутта 3 порядка
Метод Рунге-Кутта C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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