2015-05-28 3 views
1

Вот мой фрагмент кода, чтобы сделать интегральную функцию NumPy, SciPy и MatPlotLib библиотек:Распаковка ошибки в численном интегрировании в питоне

import numpy as np 
from scipy.integrate import quad 
import matplotlib.pyplot as plt 

sigma = 1 

def integrand(x,n): 
    return (n/(2*sigma*np.sqrt(np.pi)))*np.exp(-(n**2*x**2)/(4*sigma**2)) 

tt = np.linspace(0, 20, 0.01) 
nn = np.linspace(1, 100, 1) 

T = np.zeros_like([len(tt), len(nn)]) 

for i,t in enumerate(tt): 
    for j,n in enumerate(nn): 
     T[i,j] = quad(integrand, -oo, t, args = (x)) 

plt.pcolormesh(tt,nn,T) 

Но есть ValueError ниже о unpacking вопросе о связанном:

Traceback (most recent call last): 
    File "C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\2.1\visualstudio_py_util.py", line 106, in exec_file exec_code(code, file, global_variables) 
    File "C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\2.1\visualstudio_py_util.py", line 82, in exec_code  exec(code_obj, global_variables) 
     File "C:\Users\Matinking\documents\visual studio 2013\Projects\NeuroSimulation\NeuroSimulation\XSundry\test2.py", line 63, in <module> 
plt.pcolormesh(tt,nn,T) 
    File "C:\Python34\lib\site-packages\matplotlib\pyplot.py", line 2946, in pcolormesh 
ret = ax.pcolormesh(*args, **kwargs) 
    File "C:\Python34\lib\site-packages\matplotlib\axes.py", line 7747, in pcolormesh 
X, Y, C = self._pcolorargs('pcolormesh', *args, allmatch=allmatch) 
    File "C:\Python34\lib\site-packages\matplotlib\axes.py", line 7357, in _pcolorargs 
numRows, numCols = C.shape 
ValueError: need more than 1 value to unpack 
Press any key to continue . . . 

вопрос, казалось бы, связанные с последней строки кода, но я can'y понять любое решение, за что ...

Не могли бы вы рассказать мне об этом случае?

С наилучшими пожеланиями

+0

Числа varibakes петлевого с плавающей точкой. Вы используете «t» и «n», которые не являются переменной индексации. – Sandman

+0

Вы хотите сказать что-то вроде: «для i, t в перечислении (TT)» и аналогично для вашей другой переменной. – Sandman

+0

@ Sandman: Это могло бы быть ... Но поскольку я новый человек на этой территории, я был бы признателен, если бы вы сообщили мне о потенциальном решении ... Я имею в виду, как я должен использовать переменную 'i'? – Roboticist

ответ

2
import numpy as np 
from scipy.integrate import quad 
import matplotlib.pyplot as plt 

sigma = 1 

def integrand(x, n): 
    return (n/(2*sigma*np.sqrt(np.pi)))*np.exp(-(n**2*x**2)/(4*sigma**2)) 

tt = np.linspace(0, 19, 20) # divides range 0 to 19 into 20 equal size portions. Thus, tt = [0, 1, 2, ..., 19] 
nn = np.linspace(1, 100, 100) # nn = [1, 2, ..., 100] 

T = np.zeros([len(tt), len(nn)]) 

for i,t in enumerate(tt): 
    for j,n in enumerate(nn): 
     T[i, j], _ = quad(integrand, -np.inf, t, args=(n,)) # evaluate integral from -infinity to t, with value of n in the function set to n passed in from here. 

x, y = np.mgrid[0:20:1, 1:101:1] # create a mesh/grid for plotting. 

plt.pcolormesh(x, y, T) #plot 

plt.show() 
+1

Спасибо, но 'ValueError' все еще существует и ничего не изменилось в связи с результатом ... – Roboticist

+0

Ваша функция подынтегрального выражения определяется как 2 аргумента, но предоставляется только один. «n» - второй аргумент, который вы хотите предоставить, поскольку я не вижу, чтобы вы использовали его внутри цикла? – Sandman

+0

Вы правы ... 'n' следует принимать во внимание как другой аргумент ... Как бы тогда был код? – Roboticist

Смежные вопросы