python中的同时微分方程

o4tp2gmn  于 2021-09-29  发布在  Java
关注(0)|答案(3)|浏览(324)


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

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的微分,我试着求导,但它说:
typeerror:“numpy.float64”对象不可调用
你能告诉我如何解决这些问题吗?还有第二个问题?

kxe2p93d

kxe2p93d1#

你有一个线性的导数系统,叫它们 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 从隐式方程组中提取导数(尽可能,微分代数方程组也可以具有这种形式)。

uxh89sit

uxh89sit2#

问题是当你写作的时候 y(t) ,python认为您正在调用一个名为 y 争论不休 t 但是 y 似乎是十进制数,而不是函数。
python有一个动态类型系统,所以当您编写

x, y, z = xyz

python将分配变量 y 的中间值的数据类型 xyz

hm2xizp9

hm2xizp93#

那么你想用python解洛伦兹微分方程吗?
下面的链接可以帮助你找到你想要的答案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]

相关问题