微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 odeint 时数组的不均匀形状

如何解决使用 odeint 时数组的不均匀形状

我正在尝试使用 odeint 对描述某些聚合过程的方程组进行 qolve。为此,我需要使用系数,这取决于我正在求解的变量之一。当我尝试运行代码时:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
T = 25+298.15
p = 1
omega0= 0.3
def kp(x):
    return (3.3*10**5+3.8*10**6*np.exp((-5.3*omega0*(1-x))/(1-omega0*x)))*np.exp((-1.88*10**3+(0.096+0.11*omega0*(1-x)*p/(1-omega0*x)))/T)
k_sd = 9.3*10**6
c_nu = 13
k_td = 10**9
Crd = 100
def nu(x):
    return np.exp(c_nu*x)
def kt(x):
    return 1/(k_sd**(-1)+nu(x)/k_td)+Crd*(1-x)*kp(x)
f = 0.64
kd = 1.58*10**(-4)
parameters = (f,kd)
IC = [0.05,3.5,0]
def omega(c):
    return c*86/1000
def X(a):
    return (omega(IC[1])-omega(a))/(omega(IC[1])-omega(c)*omega(IC[1]))
t = np.linspace(0,500,10001)
def model_basic(y,t,f,kd):
    I,M,Y0,Y1,Q0,Q2 = y
    dydt = [-kd*I,-kp(X(M))*M*Y0,2*f*kd*I-2*kt(X(M))*Y0*Y0,kp(X(M))*M*Y0-2*kt(X(M))*Y0*Y1,2*f*kd*I-kt(X(M))*Y0*Y0/2,kp(X(M))*M*Y0+2*kp(X(M))*M*Y1+kt(X(M))*Y1*Y1]
    return dydt
sol_2 = odeint(model_basic,IC,parameters,hmax = 0.1)

我收到以下错误

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-45-bec4df54cef7> in <module>
      9             kp(X(M))*M*Y0+2*kp(X(M))*M*Y1+kt(X(M))*Y1*Y1]
     10     return dydt
---> 11 sol_2 = odeint(model_basic,hmax = 0.1)

C:\eclipse\miniConda\lib\site-packages\scipy\integrate\odepack.py in odeint(func,y0,args,Dfun,col_deriv,full_output,ml,mu,rtol,atol,tcrit,h0,hmax,hmin,ixpr,mxstep,mxhnil,mxordn,mxords,printmessg,tfirst)
    239     t = copy(t)
    240     y0 = copy(y0)
--> 241     output = _odepack.odeint(func,242                              full_output,243                              ixpr,ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (6,) + inhomogeneous part.

关于类似问题的其他主题总是与不正确的初始值列表有关。我检查了我的代码,没有发现初始值和我传递给 model_basic函数 odeint 之间有任何不一致。可以请任何人帮助我吗?

解决方法

将您的代码复制到干净的工作空间中,我收到第一个错误,即 def X(a) 中未定义变量 c。如果您在会话中的其他地方发现了它,并且之前的 c 是一个列表,那么您会收到您报告的错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。