问题标签 [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.
wolfram-mathematica - 某些微分方程和 DSolve 的数学问题
我很难开始。我在金融工程专业,我正在尝试使用 2003 年写的一本书来帮助我对偏微分方程、布莱克斯科尔斯模型等进行建模。
但在介绍章节中有一个非常基本的 ODE 利率问题,我的输出与书中有很大不同。
是我输入的。这本书有一个非常巧妙的解决方案 {{y(t)->P*exp^(rt)}}
我得到的是类似的东西(注意,我不能发布输出)
什么是大K?这只是一些无法生成符号解决方案的规则输出吗?因为我的设置或文件系统有问题?此外,在提供的代码可能已过时的情况下,是否有任何建议使用有关 Mathematica 的旧书?我只需要找到一种前进的方法并将其应用到我的学习中。
最后,有时使用其他 ODE,我会得到与我的源不同的结果。IE 我遵循了 Mathematica ODE 教程,我的输出也不同。在某些地方,我的 Mathematica 版本不会计算,或者在解决方案中丢弃某些变量 s 或常量,或者没有输出。我浏览了 DSolve 的一般故障排除,但没有发现任何持久且公认的错误。我想知道我的文件系统是否有问题,或者其他什么?请帮忙!
c++ - 具有复整数的 ODE
我正在尝试解决具有复杂条目的 ODE 系统。从 GSL 文档可以看出,它只接受真实的条目。有什么方法可以传递复杂的(比区分实部和虚部更直接的方法)?如果不可能,您能否为此目的建议任何其他好的图书馆?
c++ - Valgrind 输出带有地址和问号?
我刚刚从 valgrind 收到一个我不太明白的输出:
特别是,我对这些问号感到困惑。通常你在这个地方得到的是 valgrind 检测到的错误的位置。我以前使用过 valgrind,所有输出都如手册中所述。我使用了这个 valgrind 命令:
程序本身会出现分段错误。虽然这次valgrind没有告诉我内存泄漏的任何位置,但从调试中我已经确定了发生分段错误的位置。不幸的是,它位于英特尔 ODE 求解器库 (dodesol) 的 ODE 求解器函数中,我无法访问它。我已经多次仔细检查了我传递给这个函数的所有参数,它们似乎没问题(至少与我之前的手册和示例中的参数相对应)。
microcontroller - 在微控制器上求解 ODE
我想解决微控制器上的两个 ODE 一阶问题。必须每 100 毫秒评估一次
基本上我想到了使用欧拉积分(Runge-Kute I)
我希望误差小于 0.001。我如何确定在达到该错误率之前应该运行多少次迭代?
c++ - std::bad_alloc 和 GSL ODE 求解器
我正在尝试使用 GSL 求解器求解(大型)ODE 系统。当我使用驱动程序方法时,我收到一条错误消息could not allocate space for gsl_interp_accel
,当我手动定义控件、错误和步进器时,我得到bad_alloc
异常,据我了解,这是由在另一种情况下导致的相同原因引起could not allocate space for gsl_interp_accel
的 - 缺少的记忆。
我已经咨询过其他bad_alloc
查询,例如这个,但我没有发现任何对我的特定案例有用的东西。此外,我尝试过其他 ODE 求解器,但它们也最终会出现内存错误。我还用 valgrind 检查了我的程序,以确保除了求解器之外的其他任何地方都没有内存错误/泄漏。
任何求解器都有“积分限制”,在我的案例中,程序在大约 10% 的上限(与下限相比很大 - 我很确定这是我得到的错误的来源 - 但我确实需要在这些特定限制之间进行整合),然后以我上面引用的例外之一终止。我尝试了各种(固定/自适应)步长,但从未达到我想要的 10% 以上。
给出异常的代码是:
因此,如果我更改final_time
为final_time/10
执行代码,但结果没有任何意义。但是,即使在求解器之后什么都不做,仍然会抛出异常could not allocate space for gsl_interp_accel
。
我试图将循环拆分为几个(许多)循环,并在其间擦除内存,但这并没有太大帮助。
如果这很重要,我使用 Ubuntu 12.10,使用 GNU 编译器和 Intel C++ Composer 编译。还在 Mac 上进行了测试(不知道是哪个版本的操作系统),结果相同。
问题是:有没有办法“欺骗”求解器并使程序正常工作?
PS:ODEint 求解器,具有更智能的获取中间结果的方法,也会引发异常。
python - Python - Scipy:ode 模块:启用求解器的 step 选项的问题
当我调用它时,我想存储求解器本身采取的不同集成步骤:
所以我做了一个while循环并启用了step选项,将其值设置为True
:
然后我绘制y
,整合的结果,我的问题来了。我有出现在定位区域的不稳定性:
我认为这是因为循环或类似的原因,所以我检查了结果,删除了step
:
和惊喜......我有正确的结果:
这是一个非常奇怪的情况......如果你们中的某个人能帮助我解决这个问题,我将不胜感激。
编辑 :
要设置求解器,我这样做:
我使用存储结果.append()
c++ - GSL ODE 解决方案中的指针类型编译时错误
我正在使用 GSL 示例页面上的代码来尝试求解一个由四个微分方程组成的系统。我一直在努力将五个参数传递给 ODE 系统,并且遇到了一个最终的(我希望如此!)编译时错误。下面是一个片段,给了我错误
这对应于以 开头的行gsl_odeiv2_system
:
对可能发生的事情有任何想法吗?
非常感谢,
马克 C。
arrays - Matlab:如何在 dsolve 函数中使用数组?
我有一个由两个方程组成的 ODE 系统,但想通过只使用一个方程和另一个方程的结果来最小化它。
1)
x = 2*exp(t) - 2*t*exp(t);
y = -2*t*exp(t)
xx = 2.0000;0; -14.7781
YY = 0; -5.4366;-29.5562
得到结果后,我尝试只用一个方程求解,并在 Dy 方程中使用 xx 数组。
2)
y = xx/2 - (xx*exp(2*t))/2
YY = 0; 0; 396.0397
这些值与第一个示例中的值不同。如何使用数组获得相同的结果?
simulink - 在 simulink 中更改 ODES 是什么意思
我在 simulink 中实现了两个控制器;PID和模糊控制器。两个控制器的实现方式不同。PID 在 ode45 中实现,而模糊控制器在 ode14x 中实现。这样做是为了实现所需的响应,即收敛到参考值。但是我仍然无法理解更改 ode 是什么意思....我知道有不同的方法可以解决 odes,但是当我在 simulink 中更改 ode 时我正在做什么......请指导我。
matlab - 在 MATLAB ode45 输出上设置条件(运行时)
我正在用 ode45 为许多不同的参数(这些参数是微分方程的系数)求解一个 ODE 系统,我想找到解小于(不大于)给定值的参数。
如何在 ode45 上设置条件,以自动“检测”解决方案(对于其中一些参数)是否在求解系统时大于该(给定)值并停止求解进一步步骤?
Jan 建议将以下条件放在输入函数的定义中,以便 int. 我试过这个,但它不起作用:经过几个步骤(虽然条件还不正确)迭代很快结束,输出保持在某个数字不变。(不正确的输出)
(qm、U、V 等是常数,X 有 4 列)
- 上面的代码有什么问题?
- 有人建议在 ode45 上附加一个监控功能。(这里)。有谁知道如何做到这一点?谢谢