- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图为我的化学论文求解一个微分方程,在那里我偶然发现了一个关于 scipy 的微分方程求解器“odeint”的问题。
首先,我根据scipy网站上的示例,通过函数CIDNP_1(CIDNP是一种化学现象,解释了不寻常的变量)实现了微分。但解决方案甚至偏离了正确的方向。
import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate
R0 = 5e+5
kt = 5e5/R0
beta = 3/R0
def CIDNP_1(y, t):
dP_dt, dQ_dt = y
def R(t):
return R0/(1 + kt*R0*t)
dP_dt = -kt*dP_dt*R(t) - kt*beta*(R(t))**2
dQ_dt = +kt*dP_dt*R(t) + kt*beta*(R(t))**2
return [dP_dt, dQ_dt]
def CIDNP_2(y, t):
dP_dt, dQ_dt = y
def R(t):
return R0/(1 + kt*R0*t)
return [-kt*dP_dt*R(t) - kt*beta*(R(t))**2, \
+kt*dP_dt*R(t) + kt*beta*(R(t))**2]
y0 = [-1, +1]
t = np.linspace(1e-9, 100e-6, 1e3)
sol_1 = scipy.integrate.odeint(CIDNP_1, y0, t)
sol_2 = scipy.integrate.odeint(CIDNP_2, y0, t)
然后我将解决方案更改为 CIDNP_2,得到了正确的结果,但在我看来,实现没有任何区别,因为变量 dP_dt 和 dQ_dt 在实现 CIDNP_1 中没有更改。
因此,任何人都可以给我一个提示,为什么 CIDNP_1 的实现会给出错误的结果,我会非常幸运,因为至少最后两个小时没有完全丢失。
问候,
雅各布
最佳答案
在您的第一个版本中,您在执行 to 行时不同时执行更新
dP_dt = -kt*dP_dt*R(t) - kt*beta*(R(t))**2
dQ_dt = +kt*dP_dt*R(t) + kt*beta*(R(t))**2
不同时;因此,您可以使用已更新的 dP_dt
来更新 dQ_dt
。这是 ODE
系统的错误实现。你的第二种方法更好,因为它没有这种错误。您要么必须直接返回更新后的值,要么必须在计算新的 dQ_dt
之前将新计算的 dP_dt
值保存在另一个变量中。
new_dP_dt = -kt*dP_dt*R(t) - kt*beta*(R(t))**2
new_dQ_dt = +kt*dP_dt*R(t) + kt*beta*(R(t))**2
return [new_dP_dt, new_dQ_dt]
这可以解决您的问题。
关于python - Scipy:实现微分方程的两种方法:两种不同的解决方案:已回答,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46083368/
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
Julia的新手,试图测试ODE求解器的速度。我在本教程中使用了Lorenz方程 using DifferentialEquations using Plots function lorenz(t,u
我来这里是因为我一直在尝试使用 sympy 求解微分方程,不幸的是到目前为止我还没有成功。到目前为止我所做的是: 1)插入微分方程,赋值并求解: import sympy as sp from IPy
我不知道问这个地方是否合适,因为我的问题是关于如何使用微分方程增长和衰减方法计算计算机科学算法的复杂性。 我想证明的算法是二分查找排序数组,其复杂度为log2(n) 算法说:如果要搜索的目标值等于中间
我想知道是否有人可以帮助我使用 MatLab 求解 Lotka-Volterra 方程。我的代码似乎不起作用。我执行以下操作: 第 1 步 - 我创建了一个名为 pred_prey_odes.m 的文
我是一名优秀的程序员,十分优秀!