矢量微分方程
Vector differential equations
我正在尝试求解 Python 中的矢量微分方程,但我一直收到我不太理解的错误。
这是我的代码:
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
N=100
tau_s=1
tau_n=1
R=1
t0=0
t1=10
v_rest=-65
M=[]
for i in range(N):
M.append([])
for j in range(N):
M[i].append(1)
M=np.array(M)
def I(t):
I=5
return I
def system(u,t):
du=np.zeros((N,)
du=-1/tau_s*(u-v_rest)+R*(I(t)+np.dot(M,u))
return du
u0=v_rest*np.ones(N,)
ts=(0,1000)
sol=solve_ivp(system,ts,u0)
我得到的错误是:
ValueError: could not broadcast input array from shape (100,100) into shape (100)
如果我理解正确,这意味着 diff 方程的一侧具有与另一侧不同的形状,因此 Python 无法解决它,但是 M 和 u 的乘积应该产生一个向量形状 (100) 所以我不确定发生了什么。
你能帮我吗?
来自 documentation for solve_ivp:"The calling signature is fun(t, y). Here t is a scalar"。我想你在系统中交换了你的论点。
如果我将系统签名更改为 system(t, u)
,您的代码对我来说运行良好。虽然,我不能说我是否得到了预期的答案。
我正在尝试求解 Python 中的矢量微分方程,但我一直收到我不太理解的错误。 这是我的代码:
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
N=100
tau_s=1
tau_n=1
R=1
t0=0
t1=10
v_rest=-65
M=[]
for i in range(N):
M.append([])
for j in range(N):
M[i].append(1)
M=np.array(M)
def I(t):
I=5
return I
def system(u,t):
du=np.zeros((N,)
du=-1/tau_s*(u-v_rest)+R*(I(t)+np.dot(M,u))
return du
u0=v_rest*np.ones(N,)
ts=(0,1000)
sol=solve_ivp(system,ts,u0)
我得到的错误是:
ValueError: could not broadcast input array from shape (100,100) into shape (100)
如果我理解正确,这意味着 diff 方程的一侧具有与另一侧不同的形状,因此 Python 无法解决它,但是 M 和 u 的乘积应该产生一个向量形状 (100) 所以我不确定发生了什么。
你能帮我吗?
来自 documentation for solve_ivp:"The calling signature is fun(t, y). Here t is a scalar"。我想你在系统中交换了你的论点。
如果我将系统签名更改为 system(t, u)
,您的代码对我来说运行良好。虽然,我不能说我是否得到了预期的答案。