问题标签 [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 - MATLAB 中的事件位置问题
假设在matlab中如下:
[t, x, te, xe, ie] = ode15s(@myfunc, [tStart tFinal], x0, odeset('Events', @events));
问题 1
1a) 该函数仅在求解器成功执行后events
调用。这是真的?
1b)在求解器成功执行步骤之后,是否有可能最后一次调用myfunc
不是导致成功步骤的调用?
1c) 如果events
函数包含多个终端事件,并且在成功的步骤中检测到其中两个(不仅仅是一个)已经发生,求解器的行为是什么?
问题2
假设myfunc
包含以下代码
check
的某个函数在哪里x
。
解决此问题的一种方法是不使用事件函数。根据我的经验,ode 求解器可以通过这种方式解决此类问题。
解决此问题的另一种方法是使用事件函数进行定位check(x) - 2 == 0
,一个终端事件用于定位,direction = 1
另一个用于定位direction = -1
。在求解器在任一事件上停止后,全局变量例如myvar
被适当地设置以区分这两个事件,然后模拟从它停止的地方继续。在这种情况下,代码myfunc
将是
在简单的情况下,两种方式都会产生正确的结果。但是我正在尝试解决一个非常复杂的问题(除上述之外的其他事件以及微分方程的不连续右手部分在某些情况下被证明是可解的)并且我试图找出第一种方法是否会产生不同的结果比第二个。
有人可能会说 ode 之前要么无法返回解决方案,tFinal
要么返回正确的解决方案,但由于右手部分的不连续性,当存在解决方案时,求解器可能不会返回解决方案。
所以从某种意义上说,问题是:使用第一种方式和第二种方式之间的实际理论区别是什么?
java - Java 编程,尝试制作 ODE 求解器库(面向对象编码的新手!)
我正在尝试编写一个 ODE 求解器(类似于 MATLAB 中的 ODE45)。我希望这个求解器是“独立的”,即我可以将我希望它求解的 ODE 的名称传递给它,它运行该特定微分方程的代码。
到目前为止,我有我的主类(大部分程序所在的位置)和一个名为 ODEsolver 的类(ODE 求解器所在的位置)。我希望能够从我的主类调用 ODEsolver,并让 ODE 查看一个由字符串争论引用的方法(我要解决的 ODE 的名称)
我设想的方式是:
其中 ODE45 是 ODEsolver 类中的 ODE 求解器。
但是我不知道如何使用“name_of_ode_to_be_solved”来创建对该方法的调用(该方法不在 ODEsolver 中,它在主类或其他类中)
谢谢!
r - 避免 ODE 迭代求解中的循环
我正在将参数模型拟合到一些具有时间相关协变量的生存数据。拟合过程涉及迭代求解一些 ODE - 每个受试者每个时间间隔一个 ODE,但是手头间隔上 ODE 的初始条件是前一个间隔上 ODE 解的最后一个值。从这个意义上说,ODE 相互依赖。
我的问题归结为:现在,我正在通过循环迭代地求解这些 ODE,因为我需要使用前一个解决方案的最后一个值作为下一个解决方案的起点。问题是这种循环对于大型数据集会消耗大量时间。有什么方法可以让我使用 vapply 或其他矢量化函数来做同样的事情吗?
我一直在搜索档案,但没有任何方法可以解决矢量化依赖于先前值的操作的问题。
这是一个代码示例,它本身不会产生任何具有统计意义的东西,但说明了我的问题:
python - 如何用 Python 解决僵硬的颂歌?
我是 Python 初学者。我正在尝试切换我在 matlab 中的一些程序。我需要求解一个僵硬的 ode 方程,其输入都是矩阵。在matlab中我使用
matlab - Matlab 求解 ODE 应用于状态空间系统,输入时间相关
我在状态系统中有“强制”输入。我的 SS 方程是:zp = A*z * B。(A 是方阵,B 列)
如果B是一步(顺着经验),是没有问题的,因为我可以用
和 SS 是:
我的问题是当我应用 slop 时,所以 B 将取决于时间。
我写了一个新方程(试图解决),这个问题,但我无法调整“时间步长”,而且我没有得到 22x100 的 au (这是目标)。
SolveSS 有代码:
我希望你能帮忙!
python - Matlab -> scipy ode (complex) function translation
I'm learning python, numpy and scipy. I'm wonder if it is possible translate this kind of functions in matlab to python:
In this example, n is number, e.g 15;
t is the time array
AH = [15]x t matrix
t0 = 0
tf = 20 (e.g)
u_env = [20,20,20,20,20,20,20,20,20,20,20,20,20,20,20]
utop_init = 20
utop_final = 40; ubottom = 20;
te_idx = 4;
c - GSL 求解钟摆运动的 ODE
我正在尝试求解摆锤运动的微分方程,给定摆锤初始角度 (x)、重力加速度 (g)、线长 (l) 和时间步长 (h)。我用欧拉法试过这个,一切都很好。但现在我要使用 GSL 中实现的 Runge-Kutta 方法。我试图从 gsl 手册中学习实现它,但我遇到了一个问题。钟摆不想停下来。假设我从初始角度 1 rad 开始,它总是在 1 rad 处具有峰值倾斜,无论它已经做了多少次摆动。这是我用来将其提供给 GSL 的方程式和函数:
改造它:
并分解:
这是代码片段,如果这还不够,我可以发布整个程序(它不会太长),但也许这是某个地方的问题:
参数g
和l
正确传递给函数,我已经检查过了。
matlab - MatLab 中的 ode23 - 使用可选参数作为输入
我正在尝试自己学习 MatLab。我得到了关于求解 ODE 的大部分概念,但我对使用可选参数作为输入有点不确定。我创建了以下功能:
另外我定义了:
我不确定的是如何mu
在使用ode23
函数时更改变量。我知道这应该可以通过输入可选参数来实现,但我无法让它工作。说如果我写:
然后一切计算正确,我们自动得到mu
= 1。
但如果我想改变这一点,我该如何进行?我尝试编写以下内容来设置mu
= 4:
但后来我得到以下信息:
我这样做是基于我对教科书中所写程序的理解,但显然我在这里做错了。如果有人能解释我如何更改参数mu
,以及一般来说如何p1, p2, ...
使用可选参数,ode23
我将不胜感激!
c++ - 在类中使用 boost::numeric::odeint
对于模拟,我正在使用 boost::numeric::odeint 但我遇到了问题。我在我的一个类的方法中使用了集成函数,我遇到了“没有匹配的函数来调用集成”的错误。更清楚地说,这是我的代码的压缩版本:
请注意,我的方法都不是静态的,事实上,我不能使用静态方法。构建项目时,出现以下错误:
我认为将系统函数作为类方法是一个问题,但我不知道如何处理这种情况。