python中数值积分中的解包错误
下面是我的代码片段,通过python中数值积分中的解包错误,python,matplotlib,Python,Matplotlib,下面是我的代码片段,通过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.linspa
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)
但是与解包
相关的问题有如下值错误
:
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 . . .
回溯(最近一次呼叫最后一次):
文件“C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\2.1\visualstudio\u py\u util.py”,第106行,在exec\u文件exec\u代码(代码、文件、全局变量)中
文件“C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Python Tools for Visual Studio\2.1\visualstudio\u py\u util.py”,第82行,在exec\u代码exec(代码obj,全局变量)中
文件“C:\Users\Matinking\documents\visual studio 2013\Projects\NeuroSimulation\NeuroSimulation\XSundry\test2.py”,第63行,在
plt.pcolormesh(tt,nn,T)
pcolormesh中的文件“C:\Python34\lib\site packages\matplotlib\pyplot.py”,第2946行
ret=ax.pcolormesh(*args,**kwargs)
pcolormesh中的文件“C:\Python34\lib\site packages\matplotlib\axes.py”,第7747行
十、 Y,C=self.\u pcolorargs('pcolormesh',*args,allmatch=allmatch)
文件“C:\Python34\lib\site packages\matplotlib\axes.py”,第7357行,在_pcolorargs中
numRows,numCols=C.shape
ValueError:需要超过1个值才能解包
按任意键继续。
这个问题似乎与代码的最后一行有关,但我想不出任何解决方案
你能告诉我这个案子吗
循环变量是浮点数。您正在使用的“t”和“n”不是索引变量,您想说的是:“对于枚举(TT)中的i,t”和类似的其他变量。@Sandman:可能是。。但由于我是这个领域的新来者,如果您能告诉我潜在的解决方案,我将不胜感激。。。我的意思是,我应该如何使用
I
变量?谢谢,但是ValueError
仍然存在,并且没有根据结果进行任何更改…您的被积函数被定义为包含两个参数,但只提供了一个参数。“n”是你想提供的第二个参数吗,因为我没有看到你在循环中的任何地方使用它?你是对的n
必须作为其他参数考虑。。。那么,代码应该是怎样的?…args=(x,n)在四元函数调用中。虽然我不确定代码中变量“x”的值是从哪里来的,但我不这么认为args
tuple是积分变量的代表,即x
args=(x,n)
将一维积分转换为二维积分。。。
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()