问题标签 [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 回答
5398 浏览

python - Scipy odeint 发出 lsoda 警告

我对编码完全陌生,我想用数字求解这 5 个微分方程。我拿了一个python 模板并将其应用到我的案例中。这是我写的简化版本:

我收到以下错误:

对于某些参数集,在使用mxstepodeint (也尝试过hminhmax没有发现任何区别)时,虽然错误仍然存​​在,但我的图表看起来不错并且没有受到影响,但大多数时候它们是。有时我得到的错误要求我使用 odeint 选项运行,full_output=1这样做我得到:

搜索时我不明白这意味着什么。

我想了解问题出在哪里以及如何解决。odeint 是否适合我正在尝试做的事情?

0 投票
2 回答
313 浏览

c++ - “受控龙骨库塔”不是类模板

这是以下代码中的一个已知错误:

“受控龙骨库塔”不是类模板

在以下代码中:

我知道为什么会出现此错误。但我的问题是,它在第​​ 146 行来自github的原始 boost 库中是如何工作的?

谢谢你。

0 投票
2 回答
2956 浏览

python - 在 python odeint 中传递一个数组

我对 Python 很陌生,所以如果以下问题有一个“duh”的答案,请原谅。

所以,我正在尝试使用 odeint 解决 ODE 并希望传递一个数组。但是,TypeError: can't multiply sequence by non-int of type 'float' 不断出现,在行中:

所以,代码是:

请帮忙?

0 投票
1 回答
143 浏览

c++ - get_unit_value 在 boost ODEINT 中的作用

Boost 库的以下代码中:

...

get_unit_value我不清楚他的角色。它有什么作用?我们传递一些东西给它,它返回相同的值。为什么有人要把它包装成一个结构?除了减慢运行时间之外,它还有什么作用吗?

这段代码是从这里调用的:

0 投票
1 回答
64 浏览

c++ - static_cast 会影响简单类型浮点数的 Boost 吗?

Boost ODEINT库中,您可以找到很多static_cast关键字,例如:

哪里value_type由模板决定。

我的问题是,如果value_type是一个简单的类型,和double之间有什么区别 吗?我想知道他们为什么使用这种铸造方式。if is or一样吗?static_cast<value_type> ( 5 )(double)5value_typedouble&double&&

0 投票
1 回答
2528 浏览

python - 试图改变 odeint 的容差但得到“检测到非法输入”和“无限循环”

我得到以下微分方程 y'' + a y' - y + by^3 = c cos(kx) 初始条件 y(0) = y'(0) = 0 和参数值 a = 0.05, b = k = 1 和 c = 0.5。

现在,我要做的是降低求解器的相对容差,直到数值解 y(t) 与前一次迭代的变化在 x = x_max 时小于 10^−8。

这是我的代码:

我得到了输出:

以不同的 R1 值重复...

我不明白为什么我得到“检测到非法输入”和“明显的无限循环”。后者是新的,我不确定为什么会这样。

任何帮助将不胜感激。

PS我很抱歉格式。我是新手,我不知道如何更改它以使问题看起来不错。

-编辑-

我尝试了建议的“full_output = 1”并将 Ydiff 的第 5 行更改为

我会得到类似的东西

或者

这很奇怪。今天我没有收到无限循环错误,但我仍然收到这些消息。为了查看发生了什么,我再次将同一行编辑为:

我得到了输出(除了'nje'的一次出现为0):

我想知道如果可能的话如何解决这个问题。

0 投票
0 回答
120 浏览

python - odeint 中的波特洛伦兹参数

我正在尝试创建一个洛伦兹解决方案,其中一个参数被调制。

在创建一组简单的 Lorenz 方程时,使用 odeint 很简单:

上面的代码完美地创建了一个简单的 Lorenz 系统。我现在想创建一个调制参数 Lorenz 系统来研究它在通信中的有效性。这可以通过调制参数 Beta 来完成。Beta(t) 可以采用两个值之一,4.0 或 4.4 来表示“0”或“1”。

为了调制 beta,我选择了随机的 1 和 0,并将它们分配给 beta 的两个值,4.0 和 4.4,每个“1”或“0”有 500 个样本。

然后,我将对 odeint 参数集的调用更改为:param = [Sigma, Rho, Bauded_Beta]

当我运行它时,我收到以下错误消息,“检测到非法输入(内部错误)。以 full_output = 1 运行以获取定量信息。ValueError:使用序列设置数组元素。odepack.error:函数调用的结果是不是正确的浮点数组。ValueError:使用序列设置数组元素。odepack.error:函数调用的结果不是正确的浮点数组。”

我知道这个错误来自 beta 不再是恒定的。但是,如何将调制参数传递给 odeint?

0 投票
1 回答
775 浏览

c++ - 使用 std::vector作为 odeint 中的状态类型

我目前正在尝试使用 odeint 和 Eigen3 来集成 nBody 系统(目标是一个库,提供用于行星形成的高级例程,例如 MVS 的混合变量辛或钱伯斯混合变体)。在尝试使用不同的步进器时,我发现使用普通步进器时 state_typestd::vector<Eigen::Vector3d>工作正常,但使用受控步进器(例如burlisch_stoer)编译失败,第一条错误消息是:

这是否意味着norm_result_type 推导不正确?这个规范到底是做什么的?它应该是在 x_err 中找到的最高 value_type 吗?

第二个:

我必须提供自己的代数才能以这种方式使用它吗?我宁愿不切换到 astd::vector<double>或 Eigen::VectorNd,因为将坐标分组对 ODE 右侧的可读性非常有益。

这是我使用的代码的简化示例。

Headmyshoulders 解决方案有效。我创建了一个继承自的代数range_algebra

range_algebra我认为应该可以使用and来创建这样的代数vector_space_algebra,但我还没有尝试过。

0 投票
1 回答
730 浏览

c++ - Rcpp NumericalMatrix 数据类型,全局声明

我对 C++ 很陌生,我正在尝试通过 Rcpp 使用它来加速我的 R 代码。

下面的代码从 t0 集成到 t1 - 这是在“lorenz”函数中完成的。Test4 使用“lorenz”“counts”次数进行积分。然而,在时间“t1”,系统状态在系统重新运行之前在“write_lorenz”中被修改,这就是问题所在。如果我通过从 R 调用 test4 一遍又一遍地运行相同的程序,打印到屏幕上总是会产生相同的结果,但是,我返回的矩阵“u”不会,并且似乎最终会收敛到任何“t1”是问题。

我的输入值没有改变,所以我想知道是否存在内存泄漏,或者是否发生了其他事情,如何解决它。另外我想知道我对“u”的初始化是否不正确,我应该使用“new”命令。

我尝试的是 NumericMatrix* u = NULL; *u = 新数值矩阵;然后我尝试以 *u(1,2) 的形式访问矩阵的元素,但是以这种方式访问​​元素会导致错误说 u 不是函数。

任何帮助将不胜感激

我从以下站点修改了此代码

http://headmyshoulder.github.io/odeint-v2/examples.html

所以我可以将它与 Rcpp 一起使用

0 投票
0 回答
1149 浏览

python - 我可以将 scipy.integrate.odeint 限制为边界条件吗?

我想要一个自由落体的物体“反弹”。在一个简单的例子中,一个物体从一个初始高度自由落体。当它撞到“地面”时,我希望它“弹跳”。

在这个例子中,一个物体以 0 的初始速度下落并以 1 g 的速度加速。有没有办法强制 odeint 从其“x”位置而不是经过一段时间后终止其“积分”?

还是 scipy 提供了更好的解决问题的方法?