使用boost c ++ odeint库,如何解决以下常微分运动方程,
z''=-n²·z。
上述ODE的分析解决方案
z(t)=(z0'/ n)·sin(n·t)+ z0·cos(n·t)。
解决方案尝试按照评论(1月17日23:01)由OP回答
我的节目是:
void ode( const state_type &z , state_type &dzdt , double t ) {
dzdt[0] = z[1];
dzdt[1] = -1 * z[0] * w * w;
}
void write_ode( const state_type &z , const double t ) {
cout << t << '\t' << z[0] << '\t' << z[1] << endl;
}
int main { ...
integrate( ode , z , t , 1000 , 0.1 , write_ode );
}
但是,积分函数只返回z0和z0'的值。我需要找到z(t)的值。
答案 0 :(得分:2)
您可以使用标准方法转换N维的一阶ODE的N阶微分方程。在您的情况下,这是:
x = z
y = dz/dt
dx/dt = y
dy/dt = n^2 x
您可以轻松地将其放入odeint的任何解算器中。但是,你的ODE似乎是汉密尔顿主义者 - 你也可能会想到一个辛解算器。它们保存了相空间体积和能量,仅仅是#34;围绕初始能量振荡。 Odeint已经实现了两个辛解算器。