Я только вчера начал работать с Python и получаю сообщение об ошибке при использовании scipy.integrate.odeint
.
Я определил функцию
def SIR(x, t, beta, gamma, mu, M):
который принимает numpy.array
объекты x
, t
и M
; а скалярные числа с плавающей точкой beta
, gamma
и mu
.
M
имеет (60,60)
размер, но я не думаю, что это имеет значение.
x
и t
оба не одноэлементные, причем x.shape
- это (180,)
, а t.shape
- (5000,)
. Я пробовал дать им одноэлементное измерение, чтобы они имели формы (180,1)
и (5000,1)
соответственно, но все равно получаю ту же ошибку:
In [1]: run measles_age.py
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/IPython/utils/py3compat.py in execfile(fname, *where)
173 else:
174 filename = fname
--> 175 __builtin__.execfile(filename, *where)
/Users/qcaudron/Documents/SIR/measles_age.py in <module>()
111
112
--> 113 x = integrate.odeint(SIR, x0, t, args=(beta, gamma, mu, M));
114
115 # plot(t, x);
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/scipy/integrate/odepack.py in odeint(func, y0, t, args, Dfun, col_deriv, full_output, ml, mu, rtol, atol, tcrit, h0, hmax, hmin, ixpr, mxstep, mxhnil, mxordn, mxords, printmessg)
141 output = _odepack.odeint(func, y0, t, args, Dfun, col_deriv, ml, mu,
142 full_output, rtol, atol, tcrit, h0, hmax, hmin,
--> 143 ixpr, mxstep, mxhnil, mxordn, mxords)
144 if output[-1] < 0:
145 print _msgs[output[-1]]
Я получаю эту ошибку, даже когда SIR
просто возвращает x
, и если я убираю из него все аргументы, кроме x
и t
:
def SIR(x, t):
return x;
Как видите, строка, вызывающая ошибку, выглядит так:
x = integrate.odeint(SIR, x0, t, args=(beta, gamma, mu, M));
РЕДАКТИРОВАТЬ :
Меня попросили добавить полный код для метода SIR
. Поскольку он относительно длинный, я поместил полный скрипт .py в pastebin: http://pastebin.com/RphJbCHN а>
Еще раз спасибо.
SIR
должен вернутьdx/dt
в 3_. Это то, что делаетSIR
? - person askewchan   schedule 29.03.2013x
, это не совсем актуально - уравнение, которое мы решаем, вполне может бытьdx/dt = x
, и в этом случае да, оно возвращает правильный расчет. Я не уверен, почему объект слишком глубокий для того, чтобы возвращалась ошибка желаемого массива. - person Quentin   schedule 29.03.2013fortran
. Вы пробовали использоватьintegrate.ode
? - person askewchan   schedule 29.03.2013SIR
должна бытьSIR(x, t)
. Аргументt
является обязательным. - person Warren Weckesser   schedule 30.03.2013