微分方程的解在boost::odeint和集成电路

2024-07-05 15:13:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将我的快速原型从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++正在上升。你知道吗


Tags: type符号解决方案原型样本statedoubleconst
1条回答
网友
1楼 · 发布于 2024-07-05 15:13:37
<> C++代码有细微的不一致性。输出向量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));
}

相关问题 更多 >