问题标签 [differential-equations]
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.
math - 是否有一个数学函数在 >0 时增加而在 <0 时保持不变而不使用分段函数
是否存在一个恒定为 0 的数学函数,但一旦达到 0,它就会开始增加。我不在乎它是什么样的递增函数:e、抛物线等。我试图避免分段函数。
differential-equations - 如何访问modelica中的时间变量
我想在 Modelica 中建模一个明确的时间相关微分方程。
说我想建模
在模型中。访问时间变量 t 的正确方法是什么?
wolfram-mathematica - 如何在 NDSolve 中引用我的函数的特定点?
问题:
我正在尝试解决这个微分方程:
我收到错误(Function::slotn
和NDSolve::ndnum
)
(它应该返回一个等于的数字函数3/16 x^2 + 5/8 x
)
我正在寻找一种方法来解决这个微分方程:有没有办法以更好的形式编写它,以便 NDSolve 能够理解它?是否有其他功能或包可以提供帮助?
注 1:在我的完整问题中,K[x, x1]
不是 1 - 它(以复杂的方式)取决于x
and x1
。
注2:天真地推导方程的两侧是x
行不通的,因为积分限制是确定的。
我的第一印象:
似乎Mathematica不喜欢我引用一个点A[x]
——当我在做这个简化版本时会发生同样的错误:
(它应该返回一个等于 的数值函数2/11 x^2 + 7/11 x
)
在这种情况下,可以通过解析求解A''[x] == c
,然后找到来避免这个问题c
,但在我的第一个问题中,它似乎不起作用——它只会将微分方程转换为积分方程,而 (N)DSolve 之后无法求解。
matlab - 求解受限于给出非负解的延迟微分方程 (DDE) 系统
在 MATLAB 中,ode45
有一个名为的参数NonNegative
将解约束为非负数。他们甚至写了一篇关于这种方法如何工作的论文,以及它如何不像将 y_i 设置为 0 那样愚蠢,因为它通常不会起作用。
现在,MATLAB 也有dde23
用于求解延迟微分方程的功能,但NonNegative
该积分器没有等效参数。
不幸的是,我的任务是向现有的 ODE 系统添加延迟,该系统可以使用ode45
with NonNegative
enabled 解决。
任何想法我应该如何进行?
编辑:
我不确定这是否有帮助,但是...
我系统的 DDE 部分基本上如下所示:
其中X
(第三个等式中的大写字母变量)是 的延迟版本x
。然后,我将这个 DDE 系统链接到现有的(和更大的)ODE 系统,方法是在x
和的方程中添加几个项z
,然后将组合系统整合在一起。
wolfram-mathematica - MaxStepSize, MaxSteps 似乎对 MATHEMATICA 中的 NDSolve 没有影响
我是mathematica的新手,所以请多多包涵!
我正在尝试使用 NDSolve 求解 mma 中的非线性 PDE。由于在模拟时间用完之前就出现了奇点,求解过程被缩短了。我意识到拥有这种奇点的僵硬系统可以通过减小步长来处理(至少通过蛮力)。
但是“MaxSteps”或“MaxStepSize”似乎对我的代码没有明显的影响。
是什么赋予了?我可能会缺少其他任何方法吗?
**
代码:
**
错误信息:
NDSolve::ndsz: 在 t == 2.366570254802048`,步长实际上为零;怀疑是奇点或僵硬系统。>>
NDSolve::eerr: 警告:自变量 x 方向上 571455.5042645375at t = 2.366570254802048
的缩放局部空间误差估计值远大于规定的误差容限。具有 19 个点的网格间距可能太大而无法达到所需的准确度或精度。可能已形成奇点,或者您可能希望使用 MaxStepSize 或 MinPoints 方法选项指定更小的网格间距。>>
matlab - MATLAB 中的 ode 求解器事件位置索引
假设我正在尝试使用ode
MATLAB 中的求解器求解微分方程组。
假设我已经定义了一个事件函数来定位三个不同的事件,它们都是终端。
我注意到在某些情况下,ie
在其中一个事件的位置返回的数量(ie
是停止求解器的事件的索引,在我的情况下它可能是 1、2 或 3)并不总是一个数字但是一个带有两个元素的向量(通常这些元素是相同的)
在那些ie
不是标量的情况下,是它ie(1)
还是ie(2)
停止了求解器?
c++ - 是否有用于常微分方程 (ODE) 求解器的 c++ 库?
更具体地说,我对基于 Runge-Kutta 和刚性方程的 8 阶 Dormand-Prince 嵌入式方法感兴趣。
我使用 Numerical Recipes 3,但我经常无法编译他们的库。我想知道替代方案。
wolfram-mathematica - 在 Mathematica 中找到微分方程解的零点
给定以下代码:
这绘制了微分方程的解。我将如何数值求解 x[t] 的零,其中 t 介于 0 和 3 之间?
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
要么返回正确的解决方案,但由于右手部分的不连续性,当存在解决方案时,求解器可能不会返回解决方案。
所以从某种意义上说,问题是:使用第一种方式和第二种方式之间的实际理论区别是什么?
c++ - 用三对角矩阵求解线性方程组的库?
我正在用热传导建模物理系统,并且要进行数值计算,我需要用三对角矩阵求解线性方程组。我正在使用这个算法来获得结果:http ://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm但我担心我的方法很简单而且不是最优的。应该使用哪个 C++ 库以最快的方式解决该系统?我还应该提到矩阵不经常更改(仅更改等式的右侧部分)。谢谢!