Python 向量微分方程

Python 向量微分方程,python,matrix,vector,ode,differential-equations,Python,Matrix,Vector,Ode,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 r

我正试图用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的向量,所以我不确定发生了什么

你能帮我一下吗?

来自:电话号码是funt,y。这里t是一个标量。我想你们的论点在系统中被交换了

如果我将system的签名更改为systemt,您的代码对我来说运行良好。尽管如此,我不能说我是否得到了预期的答案。

来自:呼叫签名是funt,y。这里t是一个标量。我想你们的论点在系统中被交换了


如果我将system的签名更改为systemt,您的代码对我来说运行良好。尽管如此,我不能说我是否得到了预期的答案。

来自solve_ivp的文档:呼叫签名是funt,y。这里t是一个标量。我想你们的论点在系统中被交换了。@brady天哪,我想就是这样了。。。谢谢你可以把M的结构缩短为M=np.ones[N,N]。在numpy中,从文件中读取矩阵也有一个专用的方法,很少会出现必须逐个元素构造这样一个矩阵的情况。@LutzLehmann是的,谢谢solve_ivp文档:调用签名是funt,y。这里t是一个标量。我想你们的论点在系统中被交换了。@brady天哪,我想就是这样了。。。谢谢你可以把M的结构缩短为M=np.ones[N,N]。从文件中读取矩阵在numpy中也有专门的方法,很少会出现这样的情况,你必须逐个元素构造这样一个矩阵。@LutzLehmann是的,你是对的,谢谢,这是一个完美的解决方案,谢谢,实际上我有一个新问题,因为现在我想添加一个条件,当u向量中的任何变量达到-30时,它的集合为v_rest,我尝试了一些方法,但是如果语句不起作用,它们都不起作用,因为u是一个向量,它只是不起作用,把du的表达式改成du[u@MichalPiotrak听起来你可能需要在向量中循环并逐个检查每个值。如果你想不出来,我建议创建一个新问题,更新代码显示你尝试过的内容。如果有人能看到你尝试过的内容,他们会更容易回答。我尝试过,但id无效:<我想我应该创建一个新问题谢谢你的帮助是的,这是一个完美的解决方案,谢谢事实上我有一个新问题,因为现在我想添加一个条件,当u向量中的任何变量达到-30时,它的集合为v_rest,我尝试了一些事情,但是如果语句不起作用,它们都不起作用,因为u是一个向量,它只是不起作用改变edu到du的表达式[u@MichalPiotrak听起来你可能需要在向量中循环并逐个检查每个值。如果你想不出来,我建议创建一个新问题,更新代码显示你尝试过的内容。如果有人能看到你尝试过的内容,他们会更容易回答。我尝试过,但id无效:<我想我应该创建一个新问题谢谢你的帮助