问题标签 [odeint]

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 回答
1597 浏览

c++ - odeint 中的重复 delta 函数

我有以下 odeint 程序:

每次t都是 10 的倍数,我想设置x[0]=0.1.

也就是说,我想要一个重复的 delta 函数。

或者,如果我可以让 delta 函数出现在有限数量的时间点,我将能够近似递归。

不幸的是,我无法在 odeint 中找到 delta 函数的文档。有谁知道如何实现这一目标?

0 投票
1 回答
1632 浏览

c++ - 限制 boost::odeint 集成的步数

假设我有以下boost::odeint代码:

如何修改代码以使集成在一定数量的步骤后中断?我正在运行大量集成,并希望避免在集成任何特定系统上花费太多时间。

我曾考虑过使用integrate_n_steps(),但这可能意味着集成会持续到我感兴趣的结束时间。

0 投票
1 回答
273 浏览

boost - 在 odeint 中设置当前状态

我想current_state在 boost::odeint 中设置步进器。

我有以下 MWE:

这条线stepper.set_current_state(x);是行不通的。有没有我可以用来完成此任务的命令?

我意识到我可能只使用:

但是目前还不清楚这是否真的是最好的策略,或者我是否丢失了步进器的一些内部状态(例如当前的步长或误差估计),最好保留这些状态。

0 投票
2 回答
539 浏览

c++ - 绑定一个 odeint 变量

我正在使用 odeint 来模拟一个系统,其中有几个变量不应小于零。

是否有适当的方法将 odeint 中的变量绑定到特定范围?

0 投票
1 回答
1834 浏览

python - 在 ODEINT 中启用 full_output 时遇到问题

启用 full_output 应该是一项微不足道的任务,但是,像往常一样,问题有些复杂。不幸的是,除了向您展示我的代码之外,没有任何简单的方法可以描述我的问题。

编写 odeint (derivs, y_initial, t, full_output = 0) 不会导致任何问题,但编写 odeint (derivs, y_initial, t, full_output = 1) 会给出:

我认为由于我定义 odeint 的方式(使用数组等)而发生此错误。如果我要创建一个循环来计算 odeint 值并将它们存储在一个数组中然后让它继续到下一行,这个问题会得到解决吗?如果是这样,这样的代码会是什么样子?

如果你不明白我为什么用这种奇怪的方式写了它,这就是为什么:

我希望你很清楚这种方法使我能够切换变量而不必重复写出数学。但现在我无法在 odeint 中启用 full_output。

感谢您的宝贵时间,感谢您的回复!

0 投票
1 回答
402 浏览

c++ - 状态类型 boost:fusion in boost:odeint

我想用并行boost::odeint求解不同变量集合的微分方程——比如类型。std::vector一种解决方案当然是将所有变量组合成一个大向量,然后将其用作状态变量。

但是,我更喜欢更优雅的解决方案,例如boost::fusion用作状态类型,然后保存不同的向量。据我从帖子和相关问题的实施中了解到,这样做原则上没有障碍。我只错过了一些具体实现的提示——特别是关于正确的规范

代数、运算和调整大小

例如创建错误步进器所需的。哪些现有的实现——例如odeint::fusion_algebra——可以直接使用,在这种情况下还需要做什么?

0 投票
2 回答
985 浏览

c++ - 停止与与推力一起使用的 odeint 集成

我正在尝试将 ODE 系统与 odeint 库集成,并在一组点上并行推进(这意味着具有许多不同初始条件的相同 ODE)。特别是我正在使用自适应步长算法runge_kutta_dopri5。在某些情况下,算法会失败,从而减小步长并极大地减慢整个集成过程。

如果某些测试失败,有没有办法仅针对集合中的某些点停止集成过程?

在我的特殊情况下,由于我正在积分重力问题,我想在点靠近吸引子时停止积分,因此距离小于某个限制。

在串行计算中,我认为这可以通过带有函数的自定义 while 循环来执行,正如这个问题stepper.try_step背后的想法或多或少所说明的那样。

如何在带推力的并行计算中执行此操作?

谢谢。

0 投票
2 回答
7344 浏览

python - 对象对于所需数组来说太深 - scipy.integrate.odeint

我昨天刚开始使用 Python,使用scipy.integrate.odeint.

我定义了一个函数

它接受numpy.array对象x,tM; 和标量浮动beta, gamma, 和mu.

M(60,60)大小,但我认为这并不重要。

x并且t都是非单例的,有x.shape存在(180,)t.shape存在(5000,)。我试过给他们一个单一的维度,让他们分别有形状(180,1)(5000,1),但我仍然得到同样的错误:

即使SIR刚刚返回x,我也会收到此错误,并且如果我将所有参数从中剥离x出来t

如您所见,导致错误的行是

编辑 :

我被要求添加该SIR方法的完整代码。因为它相对较长,所以我将完整的 .py 脚本放在了一个 pastebin 中:http: //pastebin.com/RphJbCHN

再次感谢。

0 投票
3 回答
1187 浏览

python - 在具有相移变量的方程上使用 scipy odeint

基本上......我需要一种在我的微分方程中包含相移的方法。也就是说,我的系统函数定义中有返回 dY/dt 之类的 Y(t-3)。就像这个微分方程:

现在,如果我尝试将其编写为传递给 scipy.odeint 的系统定义函数,我会迷失方向:

基本上就是这样。我真的希望有一个简单的答案,但我似乎无法找到一个。

具体来说......我正在尝试以数值方式计算由以下函数定义的系统的解决方案:

然后这个函数随后被赋予 odeint,如下所示:

然后我可以像这样取出 ETA 的每个单独组件(如 eta_0)ETA[:,0]

我在这里遇到的问题是pastEta(t-theta[?]). 目前,这是一个试图找到已经计算的 eta 值的函数(对于 whenstart_time < t-theta[?] < ttheta[?] > 0。这不是很好。

我看到在这种情况下,我可以单独找到 eta 的每个组件,然后获取先前计算的 eta 组件(eta_0、eta_1、eta_2)的计算值来计算 eta_3,并且类似地计算 eta_4,但这并不理想,因为它剥夺了我可以“即插即用”任何通用公式。

0 投票
1 回答
1039 浏览

c++ - 使用推力::transform 替换 for 循环

我正在尝试通过在 GPU 的线程上实现 for 循环来优化我的代码。我正在尝试使用推力::transform 消除两个 for 循环。C++ 中的代码如下所示:

我正在估计上述循环中常微分方程(ODE)的系数,并已使用推力将所有数据传输到设备上。考虑基因数量由 N_gene 表示的情况。第一个 for 循环必须运行 N_gene 次。第二个 for 循环受每个基因的激活因子(基因库中的其他友好基因)数量的限制。每个基因都有许多激活因子(友好的基因,其存在会增加基因 i 的浓度),由 n_ka 载体的元素表示。n_ka[i] 的值可以在 0 到 N_gene - 1 之间变化。ka_val 表示每个激活器 ka 的激活量度。ka_vec_d 具有激活基因 i 的基因索引。

我正在尝试使用迭代器来表示这些循环,但无法这样做。我熟悉将thrust::for_each(thrust::make_zip_iterator(thrust::make_tuple)) 用于单个for循环,但是很难想出一种使用counting_iterator或transform迭代器来实现两个for循环的方法。任何转换这两个 for 循环的指针或帮助将不胜感激。谢谢你的时间!