gpt4 book ai didi

python - 微分方程的解在 boost::odeint 和 scipy.integrate 中完全不同

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:14:11 30 4
gpt4 key购买 nike

我正在尝试将我的快速原型(prototype)制作从 Python 移植到 C++。我尝试用一​​个简单的微分方程来测试符号,但对于起始值 [2,0],结果非常不同。Python 正在衰落,而 C++ 解决方案正在强势崛起。

它适用于此处找到的示例:How to incorporate time-varying parameters from lookup table into boost::odeint, c++

但它不适用于我的例子

TransferF::TransferF(const double& deltaT) : dt(deltaT), t(0.0), y(2)
{
// initial values
y[0] = 2.0; // x1
y[1] = 0.0; // x2
}


void TransferF::ode(const state_type &x, state_type &y, double t)
{
y[0] = x[0];
y[1] = x[1];
y[2] = (-2*y[1] - y[0] + 1) / (pow(y[0],2));
}

在py中也一样:

def modelt(x,t):
y = x[0]
dydt = x[1]
dy2dt2 = (-2*dydt - y + 1)/ (y **2)
return [dydt,dy2dt2]

x3 = odeint(modelt,[2,0],timev)

我预计时间序列的结果相同,但 python 的解决方案正在下降,C++ 正在上升。

最佳答案

C++ 代码有细微的不一致。输出 vector y 应该只包含导数 y', y",而不是函数 y 本身:

void TransferF::ode(const state_type &x, state_type &y, double t)
{
y[0] = x[1];
y[1] = (-2*x[1] - x[0] + 1) / (pow(x[0],2));
}

关于python - 微分方程的解在 boost::odeint 和 scipy.integrate 中完全不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55865896/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com