Python和Julia TensorFlow科学计算常微分方程求解器

常微分方程

常微分方程(ODE)可用于描述动态系统。 从某种程度上来说,我们生活在一个动态系统中,窗外的天气从黎明到黄昏都在变化,我们体内发生的新陈代谢也是一个动态系统,因为随着时间的推移,成千上万的反应和分子被合成和降解。

更正式地说,如果我们定义一组变量,比如一天的温度,或者某个时间点X分子的数量,并且它随着自变量的变化而变化(在动态系统中,通常是时间t) 。 ODE 为我们提供了一种以数学方式描述定义变量动态变化的方法。 与之相反的系统称为静态系统,想象一下拍一张外面的照片,这张快照不包含任何动态,换句话说,它是静态的。

求解常微分方程意味着确定变量如何随着时间的推移而变化,解有时称为解曲线(如下图所示),为任何动态系统的默认行为提供信息预测。

方程式

这里我首先介绍一些术语,读者可以从中受益。常微分方程 (ODE) 看起来像这样:
d R d t = k 0 + k 1 S − k 2 R \frac{d R}{d t}=k_0+k_1 S-k_2 R dtdR=k0+k1Sk2R
这是一个涉及导数的方程,但方程本身没有偏导数。 换句话说,我们只考虑一个自变量,即时间 t。 当我们有多个自变量进来时,它就变成偏微分方程(PDE),这不属于本文的讨论范围。
∂ 2 μ ∂ x 2 + ∂ 2 μ ∂ y 2 = 0 \frac{\partial^2 \mu}{\partial x^2}+\frac{\partial^2 \mu}{\partial y^2}=0 x22μ+y22μ=0
在 ODE 中,如果包含因变量的项(在上述情况下为变量 R,包含 R 的项包括 dR/dt 和 k2R)的系数与 R 无关,则该 ODE 被视为线性 ODE。 为了说明这一点,让我向您展示一个非线性 ODE 作为比较:
R d R d t = k 0 + k 1 S − k 2 R R \frac{d R}{d t}=k_0+k_1 S-k_2 R RdtdR=k0+k1Sk2R
可以看到,现在dR/dt的系数为R,这违反了线性ODE的定义,因此变成了非线性ODE。

最后一对术语,如果变量的导数与自变量(这里是时间t)无关,我们称它们为自治ODE,否则,它成为非自治ODE。同样,非自治 ODE 如下所示:
d R d t = k 0 t + k 1 S × t − k 2 R \frac{d R}{d t}=k_0 t+k_1 S \times t-k_2 R dtdR=k0t+k1S×tk2R
现在你可以看到时间 t 位于右侧,因此它是一个非自治 ODE。

求解 S 形信号响应曲线

d R p d t = k 1 S ( R T − R P ) k m 1 + R T − R P − k 2 R P k m 2 + R P \frac{d R_p}{d t}=\frac{k_1 S\left(R_T-R_P\right)}{k_{m 1}+R_T-R_P}-\frac{k_2 R_P}{k_{m 2}+R_P} dtdRp=km1+RTRPk1S(RTRP)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

d R p d t = 0 k 1 S ( R T − R P ) k m 1 + R T − R P − k 2 R P k m 2 + R P = 0 \begin{gathered} \frac{d R_p}{d t}=0 \\ \frac{k_1 S\left(R_T-R_P\right)}{k_{m 1}+R_T-R_P}-\frac{k_2 R_P}{k_{m 2}+R_P}=0 \end{gathered} dtdRp=0km1+RTRPk1S(RTRP)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 定理分析平面上非线性自主动力系统
参阅一:亚图跨际
参阅二:亚图跨际

你可能感兴趣的:(数学,Python,tensorflow,python,julia,tensorflow,微分方程)