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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисляемые константы http://www.cyberforum.ru/cpp-beginners/thread609870.html
Можно ли сделать так, чтобы сначала вычислить, а затем сделать константой?
C++ Объявление массива int *arr почему так Объявление массива int *arr почему так, а не int arr, что означает * http://www.cyberforum.ru/cpp-beginners/thread609858.html
C++ Ошибка crosses initialization of
Решил добавить к своей программе простенькое меню. При компиляции выдает кучу ошибок "crosses initialization of". А также почему то ругается на все case, кроме первого. Это класс (общий для обоих...
C++ Ошибка при компилировании
Приветствую, скачал visual studio 2010 профессиональную, создал проект win32 с кодом окна апи, ничего не менял, попытался запустить этот код и вот, что вылезло: Скрин:...
C++ Перебор текста по символам[как в поисковиках] http://www.cyberforum.ru/cpp-beginners/thread609800.html
Всем привет,часто лазию по гуглу ну наверное как все,и тут захотел написать программку которая тоже бы определяла какое слово пользователь хочет ввести,ну то есть ввожу : "сиск" и он автоматом...
C++ Как этот код работает? #include <iostream> using namespace std; int main () { char ch = 0; int count = 0; cout << "Please enter a sentence:" << endl; подробнее

Показать сообщение отдельно
vndtta
90 / 67 / 13
Регистрация: 17.10.2011
Сообщений: 235
Завершенные тесты: 1
21.06.2012, 08:46
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
41
42
43
44
45
46
47
48
void runge_k(
    void f(double *y, double *ys, double t),
    double *y, int n,
    duble tn, double tk,
    int m, double delt)
{
    double k1[n],k2[n],k3[n],k4[n],Yh[n+1];
    double h=delt;
    double* ys=y+n+1;
    double X;
    for(X=tn;X<tk;X+=h){
        f(y,ys,X);
        
        for( int i=0;i<n;i++) k1[i]=h*y[i+1];
        for( int i=0;i<n;i++) Yh[i]=y[i]+0.5*k1[i];         
        f(Yh,Yh+n+1,X+h*0.5);
        
        for( int i=0;i<n;i++) k2[i]=h*Yh[i+1];
        for( int i=0;i<n;i++) Yh[i]=y[i]+0.5*k2[i];
        f(Yh,Yh+n+1,X+h*0.5);
        
        for( int i=0;i<n;i++) k3[i]=h*Yh[i+1];
        for( int i=0;i<n;i++) Yh[i]=y[i]+k3[i];
        f(Yh,Yh+n+1,X+h);
        
        for( int i=0;i<n;i++) k4[i]=h*Yh[i+1];
        
        for( int i=0;i<n;i++) y[i]+=1./6.*(k1[i]+2*k2[i]+2*k3[i]+k4[i]);
    }
    h=tk-X;
    f(y,ys,X);
    
    for( int i=0;i<n;i++) k1[i]=h*y[i+1];
    for( int i=0;i<n;i++) Yh[i]=y[i]+0.5*k1[i];         
    f(Yh,Yh+n+1,X+h*0.5);
    
    for( int i=0;i<n;i++) k2[i]=h*Yh[i+1];
    for( int i=0;i<n;i++) Yh[i]=y[i]+0.5*k2[i];
    f(Yh,Yh+n+1,X+h*0.5);
    
    for( int i=0;i<n;i++) k3[i]=h*Yh[i+1];
    for( int i=0;i<n;i++) Yh[i]=y[i]+k3[i];
    f(Yh,Yh+n+1,X+h);
    
    for( int i=0;i<n;i++) k4[i]=h*Yh[i+1];
    
    for( int i=0;i<n;i++) y[i]+=1./6.*(k1[i]+2*k2[i]+2*k3[i]+k4[i]);
}
код неахти конечно
тут мне кажется надо еще добавить количество k в зависимости от m

и еще надо подставить твою функцию
для начала перепишем уравнеие в таком виде
y''=-3/2y'-1/2y-1/2y^3+1/2x^2+5/2;

C++
1
2
3
4
5
void f(double *y,double *ys, x)
{
    //int n=(ys-y)/sizeof(double);
    *ys=2.5+0.5*x^2-0.5*y[1]-0.5*y[1]^3-1.5y[2];
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru