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 - 系统微分代数方程也可以有这种形式)。
我想求解一个基于洛伦兹方程的联立微分方程:
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 - 系统微分代数方程也可以有这种形式)。