已更新C语言的Runge Kutta(RK4)二阶DE错误代码

问题描述 投票:0回答:1

这是Runge Kutta (RK4) 2nd order DE in C++ ERROR CODE的更新版本>

我仍然在使用代码方面遇到困难。也许这与我对Runge-Kutta的有限了解有关,但是当我运行此代码时,它不会产生输出。

#include <iostream> 
#include <cmath>

    //dvdt=-(g/L)*sin(theta)
    //v=dxdt

double dxdt( double timepassed, double theta )
        {
            return theta/timepassed;
        }

    double L;   
    double g=9.8;
    double coeff=-1*(g/L);

double dvdt( double timepassed,  double x, double v)
        {
            return coeff*sin(x);
        }

int main(){

// Standard Variables   
    double theta;
    double theta1;
    double h = 0.1;
    double L;
    double timepassed;
    double time1;

// Input and Output Printing
    std::cout << "Please input initial angle (in decimal radians), length of the pendulum (in meters) and the time desired (in seconds). Click ENTER key after each value."<<"\n";
    std::cin >> theta1;
    std::cin >> L;  
    std::cin >> timepassed;

// Specific Variable Declarations
    double coeff=-1*(g/L);
    double v = dxdt(theta1, timepassed);
    double x = theta1;
    double d2xdt2 = dvdt(timepassed, theta1, v);

// Defining K Values in Runge Kutta
    double kx1,kv1;
    double kx2, kv2;
    double kx3, kv3;
    double kx4, kv4;
    double dt;

kx1=dt*dxdt(timepassed,x);
kv1=dt*dvdt(timepassed,x,v);
kx2=dt*dxdt(timepassed+dt/2,x+kx1/2);
kv2=dt*dvdt(timepassed+dt/2,x+kx1/2,v+kv1/2);
kx3=dt*dxdt(timepassed+dt/2,x+kx2/2);
kv3=dt*dvdt(timepassed+dt/2,x+kx2/2,v+kv2/2);
kx4=dt*dxdt(timepassed+dt,x+kx3);
kv4=dt*dvdt(timepassed+dt,x+kx3,v+kv3);
x = x + (1.0/6.0)*(kx1 + 2*kx2 + 2*kx3 + kx4);
v = v + (1.0/6.0)*(kx1 + 2*kv2 + 2*kv3 + kv4);


std::cout << "The angle is" << x; "\n"; 
std::cout << "The velocity is" << v;

}

这是C ++中的Runge Kutta(RK4)二阶DE的更新版本。错误代码我仍然在使用代码方面遇到困难。也许这与我对Runge-Kutta的有限了解有关,但是...

c++ runge-kutta
1个回答
0
投票

您的系统方程式,如之前注释中所宣布的,应为

© www.soinside.com 2019 - 2024. All rights reserved.