问题标签 [ode]

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 投票
1 回答
1128 浏览

matlab - 使用 ode45 时获得意外结果

我试图通过在 Matlab 中编写代码来解决微分方程组。我在这个论坛上发帖,希望有人能以某种方式帮助我。我有一个由 10 个耦合微分方程组成的系统。它是一种载体-宿主流行病模型,它捕捉了一种疾病在人群和昆虫种群之间的传播。由于它是一个简单的微分方程系统,因此我将求解器 ( ode45) 用于非刚性问题类型。

有 10 个微分方程,每个代表 10 个不同的状态变量。有两个函数具有相同的 10 个耦合 ODE 系统。一个被称为NoEffects_derivative_6_15_2012.m包含 ODE 的原始系统。调用另一个函数,OnlyLethal_derivative_6_15_2012.m它包含相同的 ODE 系统,从时间开始,提款率增加gamma=32 %days,提款率随时间呈指数衰减。

我使用ode45相同的初始条件来解决这两个系统。两个系统的时间向量也是相同的,从t0tfinal。该向量tspan包含从t0到的时间值tfinal,每个增量为 0.25 天,总共有 157 个时间值。

解值存储在矩阵ye0yeL中。这两个矩阵都包含 157 行和 10 列(对于 10 个状态变量值)。当我比较第 10 个状态变量的值时,对于time=tfinal矩阵中的ye0,并yeL通过绘制差异,我发现它在某些时间值内变为负数。(使用命令:)plot(te0,ye0(:,10)-yeL(:,10))。这不是预期的。t0对于从until开始的所有时间值tfinal,状态变量 10 的值应该更大,因为它是从 ODE 系统获得的解决方案,它没有应用增加的提款率。

我被告知我的 matlab 代码中有一个错误。我不确定如何找出那个错误。或者我正在使用的 matlab 中的求解器 ( ode45) 效率不高,确实会出现这种问题。任何人都可以帮忙。

我也尝试过ode23ode113但遇到了同样的问题。图 (2) 显示了一条曲线,该曲线对于时间值 32 和 34 变为负数,这表明了一个未预期的结果。对于所有时间值,该曲线应始终具有正值。还有其他任何人可以建议的论坛吗?

这是主要的脚本文件:

函数文件:NoEffects_derivative_6_15_2012

函数文件:OnlyLethal_derivative_6_15_2012

函数文件:artificialdeathrate1

函数文件:iOFt

函数文件:oOFt

0 投票
1 回答
295 浏览

matlab - 常微分方程表示中的错误

更新 我试图找到链接LE中给出的 Lyapunov 指数。我试图通过为我的案例采用以下 eqs 来弄清楚并理解它。这些是一组常微分方程(这些仅用于测试如何使用 cos 和 sin 作为 ODE)

x=X(1); y=X(2); cos(y)=X(3);

f1 表示dx/dt;f2dy/dt和 f3 在这种情况下是-10sinx. 但是,当表示为 x=X(1);y=X(2);时,我不确定如何表示 cos。这只是一个试验示例,我这样做是为了了解如何处理我们有cos,sin 等术语作为另一个变量的函数。

使用 ode45 求解这些方程时

它引发以下错误

???尝试访问 (2);index 必须是正整数或逻辑整数。

  1. 我的代表x=X(1); y=X(2); cos(y)=X(3);还好吗?
  2. 如何解决错误?谢谢
0 投票
1 回答
1896 浏览

genetic-algorithm - matlab ode15s 在 GA 中调用时不起作用

我有一个套管的数学(参数)模型。模型的输入是位移(正弦波),以力为输出(在各个时间步长)。

模型的参数将使用 GA 进行识别,力方程将使用 ode15s 求解器求解。

当假设一组参数(不使用 GA)时,求解器给出输出,但是当从 GA 调用时,我得到以下错误n次数:

警告:矩阵是奇异的,接近奇异的或严重缩放的。结果可能不准确。RCOND = NaN。

最后

警告:在 t=1.570796e+000 时失败。如果不将步长减小到低于时间 t 允许的最小值 (3.552714e-015),则无法满足积分容差。

我有点困惑,因为代码在不使用 GA 而不是 GA 的情况下可以正常工作。我将非常感谢您的投入。

提前非常感谢。

代码:主调用

GA_test 函数:

my_force_Curve计算单个模型的力:

differential_BW解方程:

抱歉,如果它太长了。

再次感谢。

0 投票
0 回答
1491 浏览

python - 数组大小上的 Scipy odeint ODE 错误

我正在尝试解决由物理学场论中的 N 体问题引起的 ODE。为此,我想到了使用 scipy.integrate.odeint 函数,并编写了一些代码,可以在以下位置找到:

http://pastebin.com/yuBbEjwg自首次提出问题以来已更新

但是,当我尝试执行它时,出现以下错误:

有人可以指出我做错了什么吗?为什么我的代码不起作用?另外,我想问一下在我的情况下使用 ode 和 odeint 函数有什么区别吗?

谢谢。

编辑:纠正愚蠢的错误(shape()-> shape),感谢Talonmies指出这一点。上面的链接现在应该指向正确的脚本。

编辑 2:我不知何故怀疑 odeint 函数不喜欢 ODE 函数返回的元组。如果需要解决耦合向量 ODE,有人可以帮助如何格式化元组吗?我发现人们正在解决耦合 ODE 或向量 ODE 的情况,但不是两者都...

编辑 3:我已经修改了示例,以便为 odeinit 函数提供一个初始条件矩阵,并且从名为 ODE 的函数返回的矩阵是相同维度的矩阵......但是,我得到了同样的错误。

0 投票
2 回答
2490 浏览

java - 寻找一个好的 Java ODE 求解器

我正在开发一个项目,使用 ODE 求解器(ode45)为 MATLAB 中的算法创建 GUI。所以我必须将 MATLAB 代码翻译成 Java。问题在于 ode45 求解器。Java 似乎没有准备好使用的求解器,而且 ODE 并不是我的专长。我只是看起来不太好,还是真的没有实现 Java 的 ODE 求解器?

谢谢

0 投票
0 回答
362 浏览

c++ - 编译错误 Odeint CUDA Visual Studio 2008

我正在使用 ODEint 来求解一组耦合 ode 方程。我有一个用于 CPU 的工作代码,并正在尝试使用 CUDA 在 GPU 上实现相同的代码。我已经编译了推力库中给出的 CUDA 代码,这些代码似乎和 CUDA 计算工具包中提供的代码一样工作正常。但是,在在推力部分编译 ODEint 附带的示例 CUDA 代码时,我在编译时收到以下错误:

我之前也为我的 CPU 代码使用了 boost 库,这些库似乎工作正常。但是当我尝试合并 boost 库并转换我的代码以使其在 GPU 上运行时,它再次显示相同的错误。我正在使用 Visual Studio 2008 IDE 进行编译。我对 CUDA 很陌生,如果有人能帮助我找出问题的解决方案,我将不胜感激。

0 投票
1 回答
704 浏览

c - 如何访问和打印分布在 MPI 工作人员之间的完整向量?

如何从 MPI 中的单个线程访问全局向量?

我正在使用一个名为 CVODE( SUNDIALS的一部分)的库——特别是 ODE 求解器库。该库与 MPI 一起使用,因此多个线程并行运行。他们都在运行相同的代码。每个线程向它“旁边”的线程发送一条数据。但我希望其中一个线程(rank=0)在某些点打印出数据的状态。

库包含函数,以便每个线程都可以访问自己的数据(本地向量)。但是没有办法访问全局向量。

我需要在特定时间输出所有方程的值。为此,我需要访问全局向量。任何人都知道如何获取 MPI 向量中的所有数据(如果可能,使用 CVODE)?

例如,这是我每个线程运行的代码

在函数(我正在解决的函数)中,我使用andf来回传递数据。但我不能在 PrintData 中真正做到这一点,因为其他进程已经提前运行。另外,我不想增加消息传递开销。我想访问 中的全局向量,然后打印出需要的内容。是否可以?MPI_SendMPI_RecvPrintData

编辑:在等待更好的答案时,我对每个线程进行了编程,将数据传递回第 0 个线程。我不认为这会增加太多的消息传递开销,但如果有更好的方法,我仍然想听听专家的意见(我相信没有更糟糕的方法!:D)。

编辑 2:虽然 angainor 的解决方案肯定是优越的,但我坚持使用我创建的解决方案。为了将来有相同问题的任何人参考,以下是我如何做到的基础知识:

0 投票
1 回答
483 浏览

matlab - 通过设置 tspan=[to:very_small_step:tf] 会影响 ode45 求解器的步长吗?

我知道ode45求解器具有由 Matlab 程序本身控制的自适应步长。以下描述由Matlab 网站给出:

指定具有两个以上元素的 tspan 不会影响 > 求解器用于遍历从 tspan(1) 到 tspan(end) 的区间的内部时间步长。ODE >suite 中的所有求解器都通过基本公式的连续扩展获得输出值。尽管 >a 求解器不一定精确到 tspan 中指定的时间点,但在指定时间点产生的 >solutions 与在内部时间点计算的 >solutions 具有相同的精度顺序。

但是,如果我在 中指定very_small_steptspan=[to:very_small_step:tf]这是否会影响程序控制的步长。这个强制步长会小于 的值very_small_step吗?OR matlab会在指定时间点进行插值计算得到对应的结果吗?

0 投票
1 回答
301 浏览

wolfram-mathematica - 方程组的动态生成

我是 Mathematica 的新手,正在尝试弄清楚如何动态生成 ODE 系统。例如,我有一个由 100 个方程组成的系统,其中每 10 个方程基本相同,但可以从向量(长度为 10)中读取的参数略有不同。我想写出 10 个方程,然后遍历一些迭代器以生成所有 100 个方程。有没有标准的方法来做到这一点?

例如,这是一个由 30 个方程组成的系统(对于 i 在 1:10):

如果我将 i 增加到 100(即给我们三百个 ODE),复制粘贴新方程似乎是多余的。

0 投票
1 回答
1027 浏览

matlab - Matlab:采用普通 Matlab ODE 参数的 CVODE 接口

CVODE 是流行的SUNDIALS 包中的两个 ODE 求解器之一。提供了一个Matlab接口,但是用法和标准的Matlabode*接口不一样。必须初始化求解器,然后逐步遍历所需的每个时间点,最后释放内存。显然,它不是类似ode15s. 有没有人围绕 CVODE 编写了一个包装器,它采用 Matlab ODE 求解器的常用参数?