🫑Python和Julia TensorFlow科学计算常微分方程求解器
Python | Julia | TensorFlow | 符号计算 | 常微分方程 | 时滞微分方程 | 数学 | NumPy | Matplotlib | scipy | 神经常微分方程 | 矩阵 | 线性齐次动力系统分析仪 | Hartman-Grobman 定理 | 非线性自主动力系统
常微分方程
常微分方程(ODE)可用于描述动态系统。 从某种程度上来说,我们生活在一个动态系统中,窗外的天气从黎明到黄昏都在变化,我们体内发生的新陈代谢也是一个动态系统,因为随着时间的推移,成千上万的反应和分子被合成和降解。
更正式地说,如果我们定义一组变量,比如一天的温度,或者某个时间点X分子的数量,并且它随着自变量的变化而变化(在动态系统中,通常是时间t) 。 ODE 为我们提供了一种以数学方式描述定义变量动态变化的方法。 与之相反的系统称为静态系统,想象一下拍一张外面的照片,这张快照不包含任何动态,换句话说,它是静态的。
求解常微分方程意味着确定变量如何随着时间的推移而变化,解有时称为解曲线(如下图所示),为任何动态系统的默认行为提供信息预测。
方程式
这里我首先介绍一些术语,读者可以从中受益。常微分方程 (ODE) 看起来像这样:
dtdR=k0+k1S−k2R
这是一个涉及导数的方程,但方程本身没有偏导数。 换句话说,我们只考虑一个自变量,即时间 t。 当我们有多个自变量进来时,它就变成偏微分方程(PDE),这不属于本文的讨论范围。
∂x2∂2μ+∂y2∂2μ=0
在 ODE 中,如果包含因变量的项(在上述情况下为变量 R,包含 R 的项包括 dR/dt 和 k2R)的系数与 R 无关,则该 ODE 被视为线性 ODE。 为了说明这一点,让我向您展示一个非线性 ODE 作为比较:
RdtdR=k0+k1S−k2R
可以看到,现在dR/dt的系数为R,这违反了线性ODE的定义,因此变成了非线性ODE。
最后一对术语,如果变量的导数与自变量(这里是时间t)无关,我们称它们为自治ODE,否则,它成为非自治ODE。同样,非自治 ODE 如下所示:
dtdR=k0t+k1S×t−k2R
现在你可以看到时间 t 位于右侧,因此它是一个非自治 ODE。
求解 S 形信号响应曲线
dtdRp=km1+RT−RPk1S(RT−RP)−km2+RPk2RP
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
def model(Rp,t,S):
k1 = 1
k2 = 1
Rt = 1
km1 = 0.05
km2 = 0.05
dRpdt = (k1*S*(Rt-Rp)/(km1+Rt-Rp)) - k2*Rp/(km2+Rp)
return dRpdt
dtdRp=0km1+RT−RPk1S(RT−RP)−km2+RPk2RP=0
S_all = np.linspace(0,3,100)
def equation(Rp,S):
k1 = 1
k2 = 1
Rt = 1
km1 = 0.05
km2 = 0.05
return k1*S*(Rt-Rp)/(km1+Rt-Rp) - k2*Rp/(km2+Rp)
from scipy.optimize import fsolve
store = []
for S in S_all:
Rp_ss = fsolve(equation,[1],args=(S,))[0]
store.append(Rp_ss)
Python常微分方程求解器
Python符号计算求解常微分方程
Julia常微分方程求解器
TensorFlow神经常微分方程
时滞微分方程
求解时滞微分方程及其系统的两种数值方法
使用 Lambert W 函数求解一阶时滞微分方程方法
项目:平面常系数线性齐次动力系统分析仪
项目:利用 Hartman-Grobman 定理分析平面上非线性自主动力系统
Last updated