问题标签 [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.

0 投票
1 回答
659 浏览

wolfram-mathematica - 某些微分方程和 DSolve 的数学问题

我很难开始。我在金融工程专业,我正在尝试使用 2003 年写的一本书来帮助我对偏微分方程、布莱克斯科尔斯模型等进行建模。

但在介绍章节中有一个非常基本的 ODE 利率问题,我的输出与书中有很大不同。

是我输入的。这本书有一个非常巧妙的解决方案 {{y(t)->P*exp^(rt)}}

我得到的是类似的东西(注意,我不能发布输出)

什么是大K?这只是一些无法生成符号解决方案的规则输出吗?因为我的设置或文件系统有问题?此外,在提供的代码可能已过时的情况下,是否有任何建议使用有关 Mathematica 的旧书?我只需要找到一种前进的方法并将其应用到我的学习中。

最后,有时使用其他 ODE,我会得到与我的源不同的结果。IE 我遵循了 Mathematica ODE 教程,我的输出也不同。在某些地方,我的 Mathematica 版本不会计算,或者在解决方案中丢弃某些变量 s 或常量,或者没有输出。我浏览了 DSolve 的一般故障排除,但没有发现任何持久且公认的错误。我想知道我的文件系统是否有问题,或者其他什么?请帮忙!

0 投票
1 回答
410 浏览

c++ - 具有复整数的 ODE

我正在尝试解决具有复杂条目的 ODE 系统。从 GSL 文档可以看出,它只接受真实的条目。有什么方法可以传递复杂的(比区分实部和虚部更直接的方法)?如果不可能,您能否为此目的建议任何其他好的图书馆?

0 投票
2 回答
2957 浏览

c++ - Valgrind 输出带有地址和问号?

我刚刚从 valgrind 收到一个我不太明白的输出:

特别是,我对这些问号感到困惑。通常你在这个地方得到的是 valgrind 检测到的错误的位置。我以前使用过 valgrind,所有输出都如手册中所述。我使用了这个 valgrind 命令:

程序本身会出现分段错误。虽然这次valgrind没有告诉我内存泄漏的任何位置,但从调试中我已经确定了发生分段错误的位置。不幸的是,它位于英特尔 ODE 求解器库 (dodesol) 的 ODE 求解器函数中,我无法访问它。我已经多次仔细检查了我传递给这个函数的所有参数,它们似乎没问题(至少与我之前的手册和示例中的参数相对应)。

0 投票
1 回答
536 浏览

microcontroller - 在微控制器上求解 ODE

我想解决微控制器上的两个 ODE 一阶问题。必须每 100 毫秒评估一次

基本上我想到了使用欧拉积分(Runge-Kute I)

我希望误差小于 0.001。我如何确定在达到该错误率之前应该运行多少次迭代?

0 投票
1 回答
304 浏览

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_timefinal_time/10执行代码,但结果没有任何意义。但是,即使在求解器之后什么都不做,仍然会抛出异常could not allocate space for gsl_interp_accel

我试图将循环拆分为几个(许多)循环,并在其间擦除内存,但这并没有太大帮助。

如果这很重要,我使用 Ubuntu 12.10,使用 GNU 编译器和 Intel C++ Composer 编译。还在 Mac 上进行了测试(不知道是哪个版本的操作系统),结果相同。

问题是:有没有办法“欺骗”求解器并使程序正常工作?

PS:ODEint 求解器,具有更智能的获取中间结果的方法,也会引发异常。

0 投票
1 回答
411 浏览

python - Python - Scipy:ode 模块:启用求解器的 step 选项的问题

当我调用它时,我想存储求解器本身采取的不同集成步骤:

所以我做了一个while循环并启用了step选项,将其值设置为True

然后我绘制y,整合的结果,我的问题来了。我有出现在定位区域的不稳定性:

y 启用求解器的 step 选项

我认为这是因为循环或类似的原因,所以我检查了结果,删除了step

和惊喜......我有正确的结果:

y 禁用求解器的 step 选项

这是一个非常奇怪的情况......如果你们中的某个人能帮助我解决这个问题,我将不胜感激。

编辑 :

要设置求解器,我这样做:

我使用存储结果.append()

0 投票
1 回答
288 浏览

c++ - GSL ODE 解决方案中的指针类型编译时错误

我正在使用 GSL 示例页面上的代码来尝试求解一个由四个微分方程组成的系统。我一直在努力将五个参数传递给 ODE 系统,并且遇到了一个最终的(我希望如此!)编译时错误。下面是一个片段,给了我错误

这对应于以 开头的行gsl_odeiv2_system

对可能发生的事情有任何想法吗?

非常感谢,

马克 C。

0 投票
1 回答
903 浏览

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

这些值与第一个示例中的值不同。如何使用数组获得相同的结果?

0 投票
2 回答
531 浏览

simulink - 在 simulink 中更改 ODES 是什么意思

我在 simulink 中实现了两个控制器;PID和模糊控制器。两个控制器的实现方式不同。PID 在 ode45 中实现,而模糊控制器在 ode14x 中实现。这样做是为了实现所需的响应,即收敛到参考值。但是我仍然无法理解更改 ode 是什么意思....我知道有不同的方法可以解决 odes,但是当我在 simulink 中更改 ode 时我正在做什么......请指导我。

0 投票
2 回答
1055 浏览

matlab - 在 MATLAB ode45 输出上设置条件(运行时)

我正在用 ode45 为许多不同的参数(这些参数是微分方程的系数)求解一个 ODE 系统,我想找到解小于(不大于)给定值的参数。

如何在 ode45 上设置条件,以自动“检测”解决方案(对于其中一些参数)是否在求解系统时大于该(给定)值并停止求解进一步步骤

Jan 建议将以下条件放在输入函数的定义中,以便 int. 我试过这个,但它不起作用:经过几个步骤(虽然条件还不正确)迭代很快结束,输出保持在某个数字不变。(不正确的输出)

(qm、U、V 等是常数,X 有 4 列)

  • 上面的代码有什么问题?
  • 有人建议在 ode45 上附加一个监控功能。(这里)。有谁知道如何做到这一点?谢谢