这是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的有限了解有关,但是...
您的系统方程式,如之前注释中所宣布的,应为