问题标签 [odeint]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1808 浏览

python - 带有带状雅可比矩阵的 Scipy odeint

我正在使用 SciPy 的集成.odeint 函数集成一个僵硬的 ODE 系统。由于集成非常重要且耗时,我也在使用相应的 jacobian。通过重新排列方程,我可以将雅可比定义为带状矩阵。按照API 文档,我想用muml参数定义形状。不幸的是,文档有点模棱两可,所以我无法弄清楚如何实现我的 jacobian 函数。

为了验证必须如何调用 odeint,我一直在使用以下(有点傻)代码:

使用完整的 NxN 雅可比矩阵,集成成功。仅使用对角线和mu=0ml=0积分也成功。

为了测试带状矩阵用例,我正在使用mu=1ml=1创建一个人工 3xN 带状雅可比矩阵,其中对角线之外的所有导数都为零。这会导致求解器出现奇怪的行为(类似于我在原始问题中看到的非对角线非零)。

将带状雅可比选项与 SciPy 的集成 odeint 一起使用的正确方法是什么?

0 投票
1 回答
205 浏览

c++ - odeint 禁止负值

我有一个使用“odeint”模拟种群动态的程序。我想设置一个 if 条件来禁止我的 ode 的结果为负。这是我的代码的摘要:

...

如所写,以下循环是无用的:

你对程序有足够的了解吗?你知道我怎样才能让它工作吗?

谢谢 !

集成自适应的代码

0 投票
1 回答
405 浏览

scipy - 如何使用 scipy odeint 获得多种解决方案?

我正在学习如何使用odeintinScipy来解决 ODE。现在我正在尝试用半无限势阱求解薛定谔方程:

所以确切的解决方案应该是

我在 x<0 区域(给定)中设置了一个起点f(x0),f'(x0),x0<0,但我获得的解决方案始终是 x>0 区域中的 exp(x)。但是 exp(-x) 在物理学中更有意义。如何通过使用获得此解决方案odeint

0 投票
1 回答
9010 浏览

python - 使用 Scipy/Numpy-NDSolve 等效求解 Python 中的矩阵微分方程?

我有两个 numpy 数组:9x9 和 9x1。我想在离散时间点求解微分方程,但无法让 ODEInt 工作。我不确定我是否在做正确的事情。

使用 Mathematica,方程为:

其中 Ab 是 9x9 矩阵,A0 是 9x1 矩阵(初始)。在这里,我解决了时间和生活是美好的。

在 Python 实现中,我有以下代码,它给了我错误的答案:

输出是:

但正确的答案应该是:

谁能指出我可能做错了什么?

0 投票
1 回答
3429 浏览

python - 在 PYTHON 中求解矩阵耦合微分方程时如何绘制特征值?

假设我们有三个复数矩阵和一个带有这些矩阵的耦合微分方程系统。

我基本上有两个问题

  1. 如何减少我的代码?通过减少我的意思是,有没有办法通过不单独写下所有组件来做到这一点,而是在解决 ODE 系统时处理矩阵?

  2. 我如何绘制特征值(绝对值)(假设矩阵 A 的特征值的绝对值作为 t 的函数),而不是相对于t(我的代码的最后 2 行)绘制矩阵的元素?

0 投票
0 回答
209 浏览

thrust - 使用嵌套的 zip_iterators 时,odeint 推力会大大减慢

我正在 odeint 和推力之上构建一个分析工具。该工具解决了大量的初始条件问题。我在 odeint 和推力教程/演示之后取得了成功。到目前为止,我一直在使用的系统只有不到 5 个状态变量,但现在我需要扩展系统以能够处理更多。

正如教程中提到的,有一个小问题,thrust 的元组最多只能有 10 个项目。这个问题可以通过使用嵌套的 zip_iterators 来解决。

从其中一个教程的底部附近引用:

“Thrust 元组的最大元数为 10 是一个小问题。但这只是一个小问题,因为我们可以创建一个包含 zip 迭代器的 zip 迭代器。因此,顶级 zip 迭代器包含一个用于状态的 zip 迭代器,一个普通迭代器用于参数,一个 zip 迭代器用于导数。”

我已经实现了这个解决方案,它可以工作,但不幸的是速度大大降低。对于同一个系统(一个双变量系统,同时求解 8192 个初始条件),最初的、简单但不可扩展为超过 5 个变量的解决方案只需要一秒钟多一点的时间:

而更复杂但可扩展的嵌套解决方案需要大约 2000 倍的时间!

这两个程序之间的唯一区别是

  1. 在仿函数的内部operator(),我指的是状态变量和导数,以及

  2. 在仿函数的构造函数中,特别是for_each在我创建 zip_iterators 和元组的命令中。

下面我为每个程序摘录了这些部分的摘录。我希望我在这里做错了什么,因为这种速度损失是毁灭性的!任何帮助将非常感激。

“简单”代码的摘录(非嵌套迭代器)

“EXTENSIBLE”代码(嵌套迭代器)的摘录

0 投票
1 回答
838 浏览

c++ - 安装 odeint 时出错

我正在尝试安装odeint,但每次编译代码时,都会出现此错误。

我已经包含了包含路径。我检查了这个文件boost/config.hpp,这不是一个完整的路径<config.hpp>,所以我把它改成了<boost/numeric/odeint/config.hpp>. 现在,我在相同情况下的其他文件出现错误。有没有办法解决这个问题?

0 投票
0 回答
57 浏览

python - 同步两组微分方程

我正在使用 Python odeint 来同步两组洛伦兹方程。我正在获取一个系统 (Xi) 的 X 值并使用它来驱动第二个系统,因此第二个系统的 X 值 (Xr) 将与第一个系统同步,这非常有效。当噪声被添加到第一个系统的 X 值的输出时,我想尝试测试同步性的限制。当我在方程中添加一个高斯随机数时,我收到以下错误,在这个调用上完成了额外的工作(可能是错误的 Dfun 类型)。以 full_output = 1 运行以获取定量信息。

如何向 Xi 添加噪声,以使 Xr 的解开始偏离 Xi?

这是代码:

0 投票
2 回答
4225 浏览

c++ - odeint 的 runge_kutta4 与 Matlab 的 ode45 对比

我想使用odeint C++ 库runge_kutta4中的方法。我已经在 Matlab 中解决了这个问题。我在 Matlab中用初始值求解的以下代码如下x'' = -x - g*x'x1 = 1x2 = 0

main.m

ODESolver.m

我已经安装了 odeint 库。我的使用代码runge_kutta4如下

结果如下图 在此处输入图像描述

我的问题是为什么结果会有所不同?我的 C++ 代码有问题吗?

这些是这两种方法的第一个值


更新:

问题是我忘记在我的 C++ 代码中包含初始值。感谢@horchler 注意到它。在包含正确的值并runge_kutta_dopri5按照@horchler 的建议使用后,结果是

我更新了代码以反映这些修改。

0 投票
0 回答
496 浏览

python - 重写 python scipy.integrate.odeint 以模仿 matlab ode15s

我是 python 新手,想模仿在 python 中使用 matlab ode15s 而不是 scipy 的内置 odeint。

代码最初是这样写的:

其中 PSP 定义为:

通过阅读 scipy.integrate.odeint() 上的说明,此函数采用以下格式的参数:

这意味着func=PSP, y0=Rphi, t=t, args=(b,k,f) So Rphi 进入 PSP 函数,并被整合并成为 yy 并出来,并且该函数对 t 的每个元素重复执行此操作。

现在我想把它翻译成可以模仿 matlab 中的 ode15s 的东西。通过阅读其他一些踏板,我发现我可以使用

现在问题变成了,我如何将原始参数传递给这个积分器?

我想它可能看起来像这样:

我知道 f 是我的 PSP 函数,y0 仍然是相同的:Rphi,这是我的问题:

  1. t0 的初始值是多少,是否只是 t[0]?
  2. 如何将变量 (b,k,f) 传递给函数 f=PSP?
  3. 当我调用这个 ode15s 时,如何通过 t 的向量大小进行积分并收集 yy 的最终值?

任何帮助将不胜感激。谢谢你。