问题标签 [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.
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
相同的初始条件来解决这两个系统。两个系统的时间向量也是相同的,从t0
到tfinal
。该向量tspan
包含从t0
到的时间值tfinal
,每个增量为 0.25 天,总共有 157 个时间值。
解值存储在矩阵ye0
和yeL
中。这两个矩阵都包含 157 行和 10 列(对于 10 个状态变量值)。当我比较第 10 个状态变量的值时,对于time=tfinal
矩阵中的ye0
,并yeL
通过绘制差异,我发现它在某些时间值内变为负数。(使用命令:)plot(te0,ye0(:,10)-yeL(:,10))
。这不是预期的。t0
对于从until开始的所有时间值tfinal
,状态变量 10 的值应该更大,因为它是从 ODE 系统获得的解决方案,它没有应用增加的提款率。
我被告知我的 matlab 代码中有一个错误。我不确定如何找出那个错误。或者我正在使用的 matlab 中的求解器 ( ode45
) 效率不高,确实会出现这种问题。任何人都可以帮忙。
我也尝试过ode23
,ode113
但遇到了同样的问题。图 (2) 显示了一条曲线,该曲线对于时间值 32 和 34 变为负数,这表明了一个未预期的结果。对于所有时间值,该曲线应始终具有正值。还有其他任何人可以建议的论坛吗?
这是主要的脚本文件:
函数文件:NoEffects_derivative_6_15_2012
函数文件:OnlyLethal_derivative_6_15_2012
函数文件:artificialdeathrate1
函数文件:iOFt
函数文件:oOFt
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 必须是正整数或逻辑整数。
- 我的代表
x=X(1); y=X(2); cos(y)=X(3);
还好吗? - 如何解决错误?谢谢
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
解方程:
抱歉,如果它太长了。
再次感谢。
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 的函数返回的矩阵是相同维度的矩阵......但是,我得到了同样的错误。
java - 寻找一个好的 Java ODE 求解器
我正在开发一个项目,使用 ODE 求解器(ode45)为 MATLAB 中的算法创建 GUI。所以我必须将 MATLAB 代码翻译成 Java。问题在于 ode45 求解器。Java 似乎没有准备好使用的求解器,而且 ODE 并不是我的专长。我只是看起来不太好,还是真的没有实现 Java 的 ODE 求解器?
谢谢
c++ - 编译错误 Odeint CUDA Visual Studio 2008
我正在使用 ODEint 来求解一组耦合 ode 方程。我有一个用于 CPU 的工作代码,并正在尝试使用 CUDA 在 GPU 上实现相同的代码。我已经编译了推力库中给出的 CUDA 代码,这些代码似乎和 CUDA 计算工具包中提供的代码一样工作正常。但是,在在推力部分编译 ODEint 附带的示例 CUDA 代码时,我在编译时收到以下错误:
我之前也为我的 CPU 代码使用了 boost 库,这些库似乎工作正常。但是当我尝试合并 boost 库并转换我的代码以使其在 GPU 上运行时,它再次显示相同的错误。我正在使用 Visual Studio 2008 IDE 进行编译。我对 CUDA 很陌生,如果有人能帮助我找出问题的解决方案,我将不胜感激。
c - 如何访问和打印分布在 MPI 工作人员之间的完整向量?
如何从 MPI 中的单个线程访问全局向量?
我正在使用一个名为 CVODE( SUNDIALS的一部分)的库——特别是 ODE 求解器库。该库与 MPI 一起使用,因此多个线程并行运行。他们都在运行相同的代码。每个线程向它“旁边”的线程发送一条数据。但我希望其中一个线程(rank=0)在某些点打印出数据的状态。
该库包含函数,以便每个线程都可以访问自己的数据(本地向量)。但是没有办法访问全局向量。
我需要在特定时间输出所有方程的值。为此,我需要访问全局向量。任何人都知道如何获取 MPI 向量中的所有数据(如果可能,使用 CVODE)?
例如,这是我每个线程运行的代码
在函数(我正在解决的函数)中,我使用andf
来回传递数据。但我不能在 PrintData 中真正做到这一点,因为其他进程已经提前运行。另外,我不想增加消息传递开销。我想访问 中的全局向量,然后打印出需要的内容。是否可以?MPI_Send
MPI_Recv
PrintData
编辑:在等待更好的答案时,我对每个线程进行了编程,将数据传递回第 0 个线程。我不认为这会增加太多的消息传递开销,但如果有更好的方法,我仍然想听听专家的意见(我相信没有更糟糕的方法!:D)。
编辑 2:虽然 angainor 的解决方案肯定是优越的,但我坚持使用我创建的解决方案。为了将来有相同问题的任何人参考,以下是我如何做到的基础知识:
matlab - 通过设置 tspan=[to:very_small_step:tf] 会影响 ode45 求解器的步长吗?
我知道ode45
求解器具有由 Matlab 程序本身控制的自适应步长。以下描述由Matlab 网站给出:
指定具有两个以上元素的 tspan 不会影响 > 求解器用于遍历从 tspan(1) 到 tspan(end) 的区间的内部时间步长。ODE >suite 中的所有求解器都通过基本公式的连续扩展获得输出值。尽管 >a 求解器不一定精确到 tspan 中指定的时间点,但在指定时间点产生的 >solutions 与在内部时间点计算的 >solutions 具有相同的精度顺序。
但是,如果我在 中指定very_small_step
,tspan=[to:very_small_step:tf]
这是否会影响程序控制的步长。这个强制步长会小于 的值very_small_step
吗?OR matlab会在指定时间点进行插值计算得到对应的结果吗?
wolfram-mathematica - 方程组的动态生成
我是 Mathematica 的新手,正在尝试弄清楚如何动态生成 ODE 系统。例如,我有一个由 100 个方程组成的系统,其中每 10 个方程基本相同,但可以从向量(长度为 10)中读取的参数略有不同。我想写出 10 个方程,然后遍历一些迭代器以生成所有 100 个方程。有没有标准的方法来做到这一点?
例如,这是一个由 30 个方程组成的系统(对于 i 在 1:10):
如果我将 i 增加到 100(即给我们三百个 ODE),复制粘贴新方程似乎是多余的。
matlab - Matlab:采用普通 Matlab ODE 参数的 CVODE 接口
CVODE 是流行的SUNDIALS 包中的两个 ODE 求解器之一。提供了一个Matlab接口,但是用法和标准的Matlabode*
接口不一样。必须初始化求解器,然后逐步遍历所需的每个时间点,最后释放内存。显然,它不是类似ode15s
. 有没有人围绕 CVODE 编写了一个包装器,它采用 Matlab ODE 求解器的常用参数?