问题标签 [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.
c++ - odeint 中的重复 delta 函数
我有以下 odeint 程序:
每次t
都是 10 的倍数,我想设置x[0]=0.1
.
也就是说,我想要一个重复的 delta 函数。
或者,如果我可以让 delta 函数出现在有限数量的时间点,我将能够近似递归。
不幸的是,我无法在 odeint 中找到 delta 函数的文档。有谁知道如何实现这一目标?
c++ - 限制 boost::odeint 集成的步数
假设我有以下boost::odeint
代码:
如何修改代码以使集成在一定数量的步骤后中断?我正在运行大量集成,并希望避免在集成任何特定系统上花费太多时间。
我曾考虑过使用integrate_n_steps()
,但这可能意味着集成会持续到我感兴趣的结束时间。
boost - 在 odeint 中设置当前状态
我想current_state
在 boost::odeint 中设置步进器。
我有以下 MWE:
这条线stepper.set_current_state(x);
是行不通的。有没有我可以用来完成此任务的命令?
我意识到我可能只使用:
但是目前还不清楚这是否真的是最好的策略,或者我是否丢失了步进器的一些内部状态(例如当前的步长或误差估计),最好保留这些状态。
c++ - 绑定一个 odeint 变量
我正在使用 odeint 来模拟一个系统,其中有几个变量不应小于零。
是否有适当的方法将 odeint 中的变量绑定到特定范围?
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。
感谢您的宝贵时间,感谢您的回复!
龙
c++ - 停止与与推力一起使用的 odeint 集成
我正在尝试将 ODE 系统与 odeint 库集成,并在一组点上并行推进(这意味着具有许多不同初始条件的相同 ODE)。特别是我正在使用自适应步长算法runge_kutta_dopri5。在某些情况下,算法会失败,从而减小步长并极大地减慢整个集成过程。
如果某些测试失败,有没有办法仅针对集合中的某些点停止集成过程?
在我的特殊情况下,由于我正在积分重力问题,我想在点靠近吸引子时停止积分,因此距离小于某个限制。
在串行计算中,我认为这可以通过带有函数的自定义 while 循环来执行,正如这个问题stepper.try_step
背后的想法或多或少所说明的那样。
如何在带推力的并行计算中执行此操作?
谢谢。
python - 对象对于所需数组来说太深 - scipy.integrate.odeint
我昨天刚开始使用 Python,使用scipy.integrate.odeint
.
我定义了一个函数
它接受numpy.array
对象x
,t
和M
; 和标量浮动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
再次感谢。
python - 在具有相移变量的方程上使用 scipy odeint
基本上......我需要一种在我的微分方程中包含相移的方法。也就是说,我的系统函数定义中有返回 dY/dt 之类的 Y(t-3)。就像这个微分方程:
现在,如果我尝试将其编写为传递给 scipy.odeint 的系统定义函数,我会迷失方向:
基本上就是这样。我真的希望有一个简单的答案,但我似乎无法找到一个。
具体来说......我正在尝试以数值方式计算由以下函数定义的系统的解决方案:
然后这个函数随后被赋予 odeint,如下所示:
然后我可以像这样取出 ETA 的每个单独组件(如 eta_0)ETA[:,0]
:
我在这里遇到的问题是pastEta(t-theta[?])
. 目前,这是一个试图找到已经计算的 eta 值的函数(对于 whenstart_time < t-theta[?] < t
和theta[?] > 0
。这不是很好。
我看到在这种情况下,我可以单独找到 eta 的每个组件,然后获取先前计算的 eta 组件(eta_0、eta_1、eta_2)的计算值来计算 eta_3,并且类似地计算 eta_4,但这并不理想,因为它剥夺了我可以“即插即用”任何通用公式。
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 循环的指针或帮助将不胜感激。谢谢你的时间!