Python 中的联立微分方程

Simultanous differential equations in Python

我想求解一个基于洛伦兹方程的联立微分方程:

def f(xyz, t, rho, sigma, beta):
    x, y, z = xyz
    return [sigma * (y - x),
            x * (rho - z) - y,
            x * y - beta * z]

我写了这个:

def f(xyz, t, rho, sigma, beta):
    x, y, z = xyz
    return [sigma * y(t).diff(t) + sigma * x + beta * y -77,
            x + rho * y - 61]

所以基本上我在第一个方程中有另一个 y 的微分,我试图求导但它说:

类型错误:'numpy.float64' 对象不可调用

你能告诉我如何解决这些问题以及这些问题的第二个订单吗?

那么你想解Python中的洛伦兹微分方程吗?

下面的 link 可以帮助您找到您想要的答案 https://www.programmersought.com/article/82154360499/

或者你可以这样解决:

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from mpl_toolkits.mplot3d import Axes3D
 
def lorenz(state, t, sigma, beta, rho):
    x, y, z = state
     
    dx = sigma * (y - x)
    dy = x * (rho - z) - y
    dz = x * y - beta * z
     
    return [dx, dy, dz]

问题是,当你写 y(t) 时,Python 认为你正在调用一个名为 y 的函数,参数为 t,但 y 出现是一个十进制数,而不是一个函数。

Python 有一个动态类型系统,所以当你写

x, y, z = xyz

Python会将变量y赋值给xyz

中间值的数据类型

你有一个导数的线性系统,称它们为xp, yp。幸运的是它是三角形的,所以你可以通过回代来解决它。所以首先解决 yp 然后插入 xp.

def f(xy,t):
    x,y = xy
    yp = 61 - (4*x + y)
    xp = 77 - (2*yp + 2*x + 5*x)
    return xp,yp

一般来说,您可以使用线性系统求解器 numpy.linalg.solve 或更通用的求解器 scipy.optimize.fsolve 从隐式方程组中提取导数(尽可能使用 DAE - 系统微分代数方程也可以有这种形式)。