gpt4 book ai didi

python - func (1) 返回的数组与 Python 中的大小不匹配

转载 作者:行者123 更新时间:2023-11-28 18:16:03 25 4
gpt4 key购买 nike

我是 python 的新手,所以请多多包涵。我正在使用 Python 中的 odeint 函数求解模型,其中出现错误:The size of the array returned by func (1) does not match the size of y0 (2)。 。也许我在 odeint 函数中返回 args 时犯了一个错误,但我看到了一篇关于 odeint 的相关帖子 LINK在 stake overflow 上,这与返回参数一起工作正常。我不知道是什么问题,或者我在错误的方向上遇到了错误。如果我错了,请纠正我。

from scipy import *
from scipy.integrate import odeint
from operator import itemgetter
import matplotlib
matplotlib.use('Agg')
from matplotlib.ticker import FormatStrFormatter
from pylab import *

import sys

ExpData = [1.0 , 1.1660520579009868 , 1.3688685188071037 , 1.6165891026469563 ,
1.9191557810726714 ]

t_range = arange(0.0,20.0,0.1)

y0 = [1,0.5]
VarList = ["a","b"]
ParaList = ["k1","k2"]
k1 = 1
k2 = 2


def func(Y,t,modelID,t1,t2):
return GenModel(Y,modelID,t1,t2)

def GenModel(Y,modelID,t1,t2):
RetY = [None]
if modelID == 1:
RetY = Y[0] + Y[1]
elif modelID == 2:
RetY = t1*Y[0] + Y[1]
elif modelID == 3:
RetY = Y[0] + t1*Y[1]
# code reduced from here

if Y[0] == 0 or Y[1] == 0:
if modelID == 27:
RetY = 0
elif modelID == 28:
RetY = 0
if Y[0] != 0 and Y[1] != 0:
if modelID == 27:
RetY = Y[0]*Y[1]
elif modelID ==28:
RetY = t1*Y[0]*Y[1]
elif modelID == 29:
RetY = t2*Y[0]*Y[1]
# code reduced from here as well
return RetY

def EvalModelFitness(Stofloat,ExpData):
Sum = 0.0
for i in range(len(Stofloat)):
Sum += (Stofloat[i]-ExpData[i])**2
print Sum/len(Stofloat)

if y0[0] == 0 or y0[1] == 0:
NumModels = 28
else:
NumModels = 39

for j in range(1,NumModels+1):
S = odeint(func, y0,t_range,args=(j,k1,k2))
Stofloat = S[:,0].astype(type('float',(float,),{}))
EvalModelFitness(Stofloat,ExpData)

最佳答案

首先,您似乎没有在“func”函数中的任何地方使用 t。

其次,返回值集的长度必须与 Y0 的长度相匹配。在这里,您从 func 返回单个值(1,就像错误状态一样),而 Y0 的长度为 2(就像错误状态一样)。

关于python - func (1) 返回的数组与 Python 中的大小不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48264157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com