- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我通过解决以下初始值问题来测试这些方法之间的差异:
y'=2*y-t
您可以通过考虑 y(t)
是齐次解 y_h(t)=c1*exp(2t)
和特定解 y_p(t)=t/2+1/4
。常量 c1
是通过替换 y(t0)=y0
找到的。则解析解为:
y(t)=(y0-t0/2-1/4)*exp(2*(t-t0))+t/2+1/4
注意如果y0=0.25
和t0=0
,这与y(t)=t/2+1/4
。在这种情况下 y(1)=0.75
。
solve_ivp
与odeint
的比较首先 from scipy.integrate import solve_ivp, odeint
。
通过编写 odeint(lambda y,t: 2*y-t,[0.25],[0,1])
我们得到了预期的结果 y(0)=0.25
和 y(1)=0.75
。
但是,通过编写 solve_ivp(lambda y,t: 2*y-t,t_span=[0,1],y0=[0.25],t_eval=[0,1])
我们得到结果 y(0)=0.25
和 y(1)=0.82775742
。
如 this question 中所述, solve_ivp
应具有“LSODA”方法并调整其公差,以便与 odeint
进行公平比较。通过阅读 scipy odeint documentation我们看到公差在 1.49e-8
左右。
但是 solve_ivp(lambda y,t: 2*y-t,t_span=[0,1],y0=[0.25],t_eval=[0,1],method='LSODA',atol=1.49e -8,rtol=1.49e-8)
仍然产生 y(0)=0.25
和 y(1)=0.82772876
。
如果您在更长的时间跨度内尝试这样做,对于这个特定示例,solve_ivp
的结果只会变得更糟。
我错过了什么吗?
最佳答案
我要 sleep 了......
根据odeint documentation ,该函数必须是 func(y, t)
类型(尽管它确实接受 f(t,y)
如果您指定它)。
并根据solve_ivp documentation ,函数必须是 func(t, y)
类型。
关于python - Scipy 整合 : is solve_ivp "always worse" than odeint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61947973/
我正在尝试求解以下简单的线性方程组: x'(t) = A_eps(t) x(t) 其中 x 是一个 n 维向量,A_eps(t) 是一个随时间变化的矩阵。 以下是我在帖子之后所做的尝试: scipy
我很难适应 scipy 的 solve_ivp。假设我们有一个普通的二阶线性微分方程,例如 spring (y'' = -k**2*y)。条件是当 Spring 处于位置 0(时间 0)时速度为 v0
我有一个 ODE 系统,我想在求解器到达精确时间点时更改变量的值。我正在尝试做的与此类似 example in Julia 我尝试做的是使用 else 和 if 来检查时间 t 是否已到。然而,这是行
我不明白为什么会出现此错误...这是代码: from scipy.integrate import solve_ivp def exponential_decay(t, y): return -0.5
尝试使用solve_ivp的矢量化选项,奇怪的是它会抛出一个错误,即y0必须是一维的。MWE: from scipy.integrate import solve_ivp import numpy a
我正在尝试使用solve_ivp,但我不明白它如何处理参数中的初始值。 solve_ivp 上的 documentation 指出: scipy.integrate.solve_ivp(fun, t_
这是我关于堆栈溢出的第一篇文章。所以我在 SciPy 的文档中遇到了solve_ivp求解器的这个例子。正在解决的问题如下: 加农炮在撞击时向上发射并产生最终事件。事件的终端字段和方向字段通过猴子修补
我想优化微分方程组中的参数。举一个最小的例子,我有微分方程: dx1/dt=-k*x1 和 dx2/dt=k*x1。 因此,我使用 solve_ivp 对 ODE 进行积分,并使用 curve_fit
我正在尝试求解一个简单的 ODE 以可视化时间响应,这适用于使用 SciPy 中新的 solve_ivp 集成 API 的恒定输入条件。例如: def dN1_dt_simple(t, N1):
Scipy 正在从 odeint 转向 solve_ivp,它不再支持为动力学函数传递附加参数。相反,lambdas are recommended 。但是,当我对事件尝试相同的操作时,它们无法正常工
我一直在尝试使用 solve_ivp 或 solve_bvp 来解决我一直遇到的问题,但我没有取得任何进展。我认为我这里的代码可以工作,但我无法获得正确的范围。出于某种原因,我无法理解范围总是从 0
我不确定 scipy.integrate.solve_ivp 中的事件处理是否正常工作。在下面的示例中,我集成了一个导数,该导数应生成具有三个根的三次多项式,分别位于 x=-6、x=-2 和 x=2。
示例 ODE 的解析解 我通过解决以下初始值问题来测试这些方法之间的差异: y'=2*y-t 您可以通过考虑 y(t) 是齐次解 y_h(t)=c1*exp(2t) 和特定解 y_p(t)=t/2+1
Solve_ivp 是 Scipy 中的初始值问题求解器函数。简而言之 scipy.integrate.solve_ivp(fun, t_span, y0, method=’RK45’, t_eval
我正在尝试使用 solve_ivp 求解大型微分方程组。 from scipy import integrate sol = integrate.solve_ivp(func_syst
来自 https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html 与 sol = scipy
我从事航天器轨迹设计工作,我正在实现一种算法来寻找周期性轨道,该算法需要在轨迹穿过特定平面时进行检测。我正在使用 scipy.integrate 的 solve_ivp 及其 events 功能。 理
为了使用 SciPy 求解简单的 ODE,我曾经使用 odeint 函数,其形式为: scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, c
目前,我确实使用 assimulos solver suite求解形式为 0 = F(t, y(t), y'(t)) 的隐式微分方程。我想使用 native scipy 安装附带的求解器,并查看了 s
我是一名优秀的程序员,十分优秀!