微分方程的解在 boost::odeint 和 scipy.integrate 中完全不同
Solution for differential equation is completly different in boost::odeint and scipy.integrate
我正在尝试将我的快速原型从python移植到C++。我尝试用一个简单的微分方程来测试符号,但起始值 [2,0] 的结果非常不同。Python正在下降,而C++解决方案正在强劲增长。
它适用于此处找到的示例:如何将查找表中的时变参数合并到 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++代码有一个微妙的不一致。输出向量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、numpy 和 scipy 代码转换为兼容C++代码?
- EXC_BAD_ACCESS或SIGABRT,同时从C++拨打scipy.stats.anderson_ksamp
- scipy.io.loadmat() 导致指向 PyImport_Import() 的空指针
- C++相当于Python的scipy.sparse.rand
- 微分方程的解在 boost::odeint 和 scipy.integrate 中完全不同
- 比numpy/scipy openblas慢性 mkl或开放式布拉斯
- 在另一个应用程序中嵌入python时,如何在子模块(即scipy.optimize.nnls)中导入或调用函数
- Eclipse integrate with qt
- 使用scipy.weave.inline将大整数从Python传递到C/C++
- 带提升功能的 Scipy::p ython 函数
- 相当于 C++ 中的 python:scipy.optimize()
- Integrate C++ and QML. Qt 5.4
- Comparison Boost.Odeint vs Scipy.integrate.odeint?
- 将scipy.ndimage.filters correlated1d从Python移植到C++或C#
- 犰狳/ MKL /其他?c++中的插补相当于Scipy中的插补
- 在哪里可以找到SciPy库中csr矩阵加法的内部工作
- Integrate Fortran, C++ with R
- 对于小数组,比scipy. nimage .filters.laplace更快的离散拉普拉斯
- How to Integrate matlab with Qt on windows 7