Questions tagged «ode»

常微分方程(ODE)仅包含一个自变量的函数,以及一个或多个关于该变量的导数。该标签旨在解决有关使用ODE建模现象,解决ODE以及其他相关方面的问题。

17
是否有适用于Python的高质量非线性编程求解器?
我要解决几个具有挑战性的非凸全局优化问题。目前,我使用了MATLAB的Optimization Toolbox(特别是fmincon()使用algorithm = 'sqp'),它非常有效。但是,我的大部分代码是在Python中进行的,我也想在Python中进行优化。是否存在可以与Python绑定竞争的NLP求解器fmincon()?它必须 能够处理非线性等式和不等式约束 不需要用户提供雅可比行列式。 如果不保证全局最优(fmincon()没有),也可以。我正在寻找一种即使在遇到挑战性问题时也可以收敛到局部最优的东西,即使它比慢一些fmincon()。 我尝试了OpenOpt提供的几种求解器,发现它们不如MATLAB的fmincon/sqp。 只是为了强调,我已经有了一个易于处理的公式和一个好的求解器。我的目标仅仅是更改语言,以使工作流程更加简化。 Geoff指出问题的某些特征可能是相关的。他们是: 10-400个决策变量 4-100个多项式相等约束(多项式范围从1到大约8) 有理不等式约束的数量大约等于决策变量数量的两倍 目标函数是决策变量之一 等式约束的雅可比行列是密集的,不等式约束的雅可比行列是密集的。

3
并行ODE方法的最新技术水平是什么?
我目前正在研究ODE集成的并行方法。有很多新旧文献描述了各种各样的方法,但是我没有发现任何有关该主题的最新调查或概述文章。 Burrage着有这本书[1],但是它已经有20多年的历史了,因此没有涵盖许多更现代的想法,例如超现实算法。 [1] K. Burrage,常微分方程的并行和顺序方法,克拉伦登出版社,牛津,1995年

3
如何测试数字ODE求解器实现?
此问题是从数学堆栈交换迁移而来的,因为可以在计算科学堆栈交换中回答。 迁移 6年前。 我将开始研究数字ODE求解器的软件库,并且正在为如何为求解器实现制定测试而苦苦挣扎。我的目标是,库,最终将包括两个非刚性和刚性问题解决者,以及至少一个隐式求解(或多或少看齐的能力将ode在Matlab程序),所以测试方法需要反映各问题类型和针对不同求解器的条件。 我现在的问题是,我不知道从哪里开始测试。我可以想到几种不同的方法来测试算法的输出: 测试具有解析解的问题,并检查数值解是否在所有返回的数据点的公差范围内。这需要了解许多分析问题,这些问题具有我想要不同求解器使用的所有属性(刚度,隐式问题等),而我却没有,至少没有超出我的头脑。 此方法测试求解器方法的结果。因此,不能保证求解器实际上是有效的,只是不能解决给定的测试问题。因此,我怀疑需要大量测试问题才能放心地验证求解器是否正常工作。 使用我打算实现的算法在几个时间步骤内手动计算解决方案,然后对求解器进行相同的操作,并检查结果是否相同。这不需要真正解决问题的知识,但是反过来又需要大量动手工作。 这种方法,在另一方面,只测试算法由我来说,这是很好的-如果别人已经证明,4 次阶龙格库塔的作品,我不觉得一个迫切需要。但是,我确实担心制定测试用例会非常麻烦,因为我不知道一种生成测试数据的好方法(除了可能需要手工,否则很多工作……)。 根据我目前的知识,上述两种方法都对我造成严重的限制-我不了解第一个方法的一系列好的测试问题,也不了​​解第二个方法的良好生成方法。 还有其他方法可以验证数值ODE求解器吗?在实现方面还有其他标准需要验证吗?有没有很好的(免费)资源可以测试ODE求解器1? 编辑: 由于这个问题非常广泛,我想澄清一下。我要创建的测试套件将满足两个主要目的: 验证求解器是否可以按预期工作,以解决他们要解决的问题。换句话说,非刚性问题的求解器可以解决刚性问题,但应在非刚性问题上表现出色。同样,如果库中还有其他提供更高准确性的求解器,则可能不必强制执行非常准确的结果-只需“足够准确”即可。因此,我的问题的一部分是对哪些求解程序应使用哪些测试;或至少应该如何决定这一点。 安装磁带库后进行完整性测试。这些测试不必(不应)详尽或费时;只是可以在5秒钟内运行的最基础知识,但是如果有些东西太奇怪了,这将提醒用户。因此,我还需要一种构造测试的方法,该方法非常简单,但是仍然可以告诉我有关库状态的信息。 1是的,我一直在搜寻我的眼睛,但是我发现的大部分内容都是带有非常琐碎示例的讲义,但值得注意的是Bari的CWI ODE测试集例外,我不知道我是否或如何做。可以用于我的目的,因为它比我要测试的解决方案更复杂。
26 ode 


2
对于数字积分器,“折衷”是什么意思,SciPy的odeint是否使用它们?
在此评论中,我写道: ...默认的SciPy积分器,我假设它仅使用辛方法。 在这里,我指的是SciPy odeint,它使用“非刚性(Adams)方法”或“刚性(BDF)方法”。根据消息来源: def odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0): """ Integrate a system of ordinary differential equations. Solve a system of ordinary differential equations using lsoda from the FORTRAN library odepack. Solves the …

4
为什么不经常使用高阶Runge–Kutta方法?
我只是想知道为什么几乎从未讨论过/没有采用过高阶(即大于4)的Runge-Kutta方法(至少据我所知)。我知道每步需要更多的计算时间(例如RK14和12阶嵌入步骤),但是使用更高阶的Runge–Kutta方法还有其他不利之处(例如稳定性问题)吗?当将其应用于极端时间尺度上具有高振动解的方程式时,这种高阶方法通常不是首选吗?
17 ode  runge-kutta 

4
刚性ODE系统的定义
考虑ODE系统的IVP,。最常见的是这个问题被认为是刚性的,当雅可比矩阵有两个非常大的负实部的特征值和特征值非常小的负实部(我认为只有稳定案件)。y′=f(x,y)y′=f(x,y)y'=f(x,y)y(x0)=y0y(x0)=y0y(x_0)=y_0∂f∂y(x0,y0)∂f∂y(x0,y0)\frac{\partial f}{\partial y}(x_0,y_0) 在另一方面,在只有一个方程的情况下,例如普罗瑟罗-罗宾逊方程y′=λy+g′+λgy′=λy+g′+λgy'=\lambda y + g'+\lambda g,它被称为硬当λ≪−1λ≪−1\lambda\ll -1。 所以有两个问题: 为什么ODE系统的刚度定义中包含小的特征值?我相信,仅存在非常大的负实部就足以使系统变得僵硬,因为这使我们对明确的方法使用了很小的时间步长。 是的,我知道最常见的刚性问题(例如,由抛物线形偏微分方程引起的)的特征值的确很大。因此,第二个问题是:是否有一个很好的自然例子,说明大型刚性系统没有非常小的特征值(或者具有适度的)?λmax/λminλmax/λmin\lambda_{\max}/\lambda_{\min} 好,让我们修改问题。考虑两个二维线性ODE系统:第一个具有特征值{-1000000,-0.00000001},第二个具有{-1000000,-999999}。对我来说,他们都很僵硬。但是,如果我们考虑刚度比定义,则第二个系统就没有。主要问题:为什么完全考虑刚度比? 问题的第二部分仍然很重要,换句话说:我正在寻找一个具有大的负特征值和适度的刚度比(不大于100)的“自然”大型ODE系统。
17 ode  stiffness 

5
为什么ODE的数值解会偏离不稳定的平衡?
我希望模拟双摆式系统的行为。该系统是一个2自由度的机器人操纵器,该操纵器没有被致动,因此其行为主要类似于受重力影响的双摆。双摆的唯一主要区别在于,它由两个刚体组成,两个刚体在其质心处具有质量和惯性特性。 基本上,我ode45在Matlab下进行编程,以解决以下类型的ODE系统: ⎡⎣⎢⎢⎢10000M110M1200100M120M22⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢x˙1x˙2x˙3x˙4⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢x2−V1−G1x4−V2−G2⎤⎦⎥⎥⎥[10000M110M1200100M120M22][x˙1x˙2x˙3x˙4]=[x2−V1−G1x4−V2−G2] \left[ \begin{array}{cccc} 1 & 0 & 0 & 0\\ 0 & M_{11} & 0 & M_{12}\\ 0 & 0 & 1 & 0\\ 0 & M_{12} & 0 & M_{22} \end{array} \right] \left[ \begin{array}{c} \dot{x}_1\\ \dot{x}_2\\ \dot{x}_3\\ \dot{x}_4 \end{array} \right]= \left[ \begin{array}{c} x_2\\ -V_1-G_1\\ x_4\\ -V_2-G_2 \end{array} …

3
不连续rs ODE的数值方法
具有不连续右侧的ODE数值求解的最新方法是什么?我最感兴趣的是分段平滑的右侧函数,例如sign。 我正在尝试解决以下类型的方程式: x˙v˙=v={(|Fexternal|−|Ffriction|)sign(Fexternal)0:|Fexternal|&lt;|Ffriction|:otherwisex˙=vv˙={(|Fexternal|−|Ffriction|)sign⁡(Fexternal):|Fexternal|&lt;|Ffriction|0:otherwise\begin{align*} \dot x &= v\\ \dot v &= \begin{cases} (|F_\text{external}| - |F_\text{friction}|) \mathop{\rm sign} (F_\text{external}) & :|F_\text{external}| < |F_\text{friction}|\\ 0 & : \text{otherwise} \end{cases} \end{align*}
15 ode 

2
在GPU上解决ODE系统的选项?
我想在“平凡的可并行化”设置下将ODE的求解系统投放到GPU上。例如,使用512个不同的参数集进行灵敏度分析。 理想情况下,我想使用智能自适应时间步长求解器(例如CVODE)而不是固定时间步长(例如Forward Euler)来执行ODE解决方案,而是在NVIDIA GPU而不是CPU上运行它。 有人这样做吗?有图书馆吗?
15 ode  gpu 

4
固定数量的RHS评估的最佳ODE方法
在实践中,数值求解运行时IVP X (吨0)= X 0 通常通过评估右手侧(RHS)的持续时间支配 ˚F。因此,让我们假设所有其他操作都是即时的(即没有计算成本)。如果用于解决IVP整体运行时受到限制,那么这是相当于限制性的评估的数目 ˚F一些 Ñ ∈ Ñ。x˙(t)=f(t,x(t)) for t∈[t0,t1]x˙(t)=f(t,x(t)) for t∈[t0,t1] \dot{x}(t) = f(t, x(t)) \quad \text{ for } t \in [t_0, t_1] x(t0)=x0x(t0)=x0 x(t_0) = x_0 ffffffN∈NN∈NN \in \mathbb{N} 我们只对最终值感兴趣。x(t1)x(t1)x(t_1) 我正在寻找理论和实践结果,以帮助我在这种情况下选择最佳的ODE方法。 例如,如果那么我们可以使用两个显式欧拉步长(t 1 - t 0)/ 2或一个宽度t 1 - t 0步长的中点方法求解IVP 。我现在还不清楚哪一个更可取。对于更大的N,当然也可以考虑多步方法,迭代的Runge-Kutta方案等。N=2N=2N = 2(t1−t0)/2(t1−t0)/2(t_1 - …

3
描述基于代理的模型的最佳实践
我在数学生物学/流行病学方面投入了大量精力,其中大多数建模/计算科学工作仍由ODE集所主导,当然,有时它们是相当复杂的。这些模型的优点之一是它们很容易描述和复制。参数值表,方程式本身以及您已经给了他们所需的一切,以便他们以自己喜欢的任何方式来复制研究。 但是有些更复杂的模型已经开始变得越来越流行。基于代理的模式,特别是似乎都很难在出版物来形容,且难以复制的,因为他们并不一定完全由一组微分方程描述。在以读者理解发生的事情并使它们相对易于复制的方式描述这些模型之后,是否有任何指南(或仅有实践经验)?

3
在Matlab中使用ODE选择步长
嘿,谢谢您抽出宝贵时间看我的问题。这是我先前在physics.stackexchange.com中发布的问题的更新版本 我目前正在研究2D激子旋量玻色-爱因斯坦凝聚物,并对这个系统的基态感到好奇。达到基态的数学方法称为虚时法。 其中在量子力学时间由假想一个替换方法是非常简单的 这种取代导致在我的系统的高能量粒子衰减比低能量更快。在计算的每个步骤中重新归一化粒子数,我们最终得到了一个最低能量的粒子系统。基态。t=−iτt=−iτ t = -i \tau 所讨论的方程是非线性的,称为非线性薛定ding方程,有时也称为Gross-Pitaevskii方程。为了解决该问题,我使用了Matlabs ode45,它可以使系统及时向前发展,并最终达到基态。 注意!非线性薛定ding方程包含拉普拉斯方程和空间中的其他一些微分项。这些都是使用快速傅立叶变换解决的。最后,我们只有一个时间ODE。* 我的问题和疑问:计算从到t f。ode45置于for循环中,因此它不会同时计算巨型向量[ t 0,… ,t f ]。第一轮将以ode45(odefun,[ t 0,t 0 + Δ / 2 ,t 0 + Δ ] ,y ,…)开始,然后从t 0 + Δ开始进行t0t0t_0tftft_f[t0,…,tf][t0,…,tf][t_0,\dots,t_f][t0,t0+Δ/2,t0+Δ],y,…[t0,t0+Δ/2,t0+Δ],y,…[t_0, t_0+\Delta/2, t_0 + \Delta],y,\dotst0+Δt0+Δt_0 + \Delta。在这里,时间步长是我的问题。时间步长的不同选择为我提供了不同的基态解决方案,并且我不知道如何确定哪个时间步长为我提供了“最”正确的基态!ΔΔ\Delta 我的尝试:我意识到在此方案中,较大的时间步长将导致大量粒子在重新归一化为原始数量的粒子之前衰减,而较小的时间步长将导致更少量的粒子在重新归一化之前衰减。我最初的想法是,较小的时间步长应该提供更准确的解决方案,但这似乎是相反的。 我不是数值专家,因此ode45的选择完全是任意的。ode113给了我同样的事情。:( 有没有人对此事有任何想法。让我知道是否需要其他详细信息。 谢谢。 更新1: 我一直在研究假想时间方法和ODE。看来,如果时间步长不够小,整个事情就会变得不稳定。这使我想知道我的非线性方程是否僵硬,这使我理解的事情变得更加困难。我会及时通知你的。 更新2: 修复:问题的确是在ODE之外进行了标准化。如果规范化保持在odefun内,则ODE将为“外部”时间步长的不同选择返回相同的结果。我的同事给我看了旧的代码,我只是在我的odefun中添加了一行。 function …

1
ODE线性系统的算法
我想知道:什么是最好的算法来解决 dudt=Aududt=Au\begin{equation} \frac{du}{dt} = Au \end{equation} 其中AAA是一个实n×nn×nn\times n矩阵。A与时间无关,通常是稀疏的,但不一定是带状的。其特征值具有非正实部。A也是对角线化的,但对于完全对角线化可能太大,以至于计算效率不足。 我有一个很好的经验,有一个隐含的梯形法则。 (I−Δt2A)un+1=(I+Δt2A)un(I−Δt2A)un+1=(I+Δt2A)un\begin{equation} \left(I-\frac{\Delta t}{2} A\right) u_{n+1} = \left(I+\frac{\Delta t}{2} A\right) u_{n} \end{equation} 显式方法或Pade近似值如何?此外,如果将强制性条款添加到RHS中,这会如何变化?

2
是否存在使用本机C99复杂类型的C的ODE求解器的开源集?
我一直在使用GSL作为许多模拟的基础,但出于我的目的,这有点过头了,并且出于遗留原因,它定义了自己的复杂类型。除了编写自己的Runge-Kutta ODE求解器(可能效率不高)外,还有没有使用本机C99复杂类型的开源ODE求解器?
12 c  ode 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.