关于TypeError: only length-1 arrays can be converted to Python scalars。

一个很小的Python问题 关于plt 以及integrated的积分

今天在做老师作业的时候遇到这么一个题目:

Ex-4:试计算广义积分

I ( x ) = ∫ 1 ∞ e − x t t n   d t I(x) = \int^{\infty}_{1}{\dfrac{e^{-xt}}{t^n}\,dt} I(x)=1tnextdt

这里: n n n 是参数,取 n = 2.5 n=2.5 n=2.5,做出 x x x 从 1 到 10 范围的积分函数曲线

题目很简单,主要是涉及到integrate库求带有参数的积分的问题,需要解决两个:第一个是写出题目中给定的参数,第二个是利用plt进行画图。

  1. 写出待积分函数:fun=lambda t,x,n:np.exp(-x*t)/(t**n) #这里需要看清楚,在积分函数中主变#量为t,因此lambda的参数顺序依次设置为t,x,n.
  2. 写出I(x),主要是n为参数,所以很容易写出I的表达式:
    def lxfun(x):
    y,err=integrate.quad(fun,1,np.inf,(x,2.5,))
    return y;
    由于quad会返回两个值,一个是积分的计算值,一个是绝对误差估计值,我们只需要计算值,所以返回y。
    3.画图:
    画图主要是调用plt进行画图,我已开始想的很简单,就是直接套用模板:
    x=np.linspace(1,10,100)
    plt.plot(x, lxfun(x))
    可是一直报错,主要的错误是:
TypeError: only length-1 arrays can be converted to Python scalars。

经过查资料,发现使用math函数,或者一些函数的时候可能会出现这种情况。
相关解决方法
通过这个以后,发现是由于运算得到的是一个数,而不是一个向量,所以会出现这种情况,那么对代码进行一些修改:

x=np.linspace(1,10,100)
y=[lxfun(a) for a in x]
plt.plot(x, y)

运行结果:
关于TypeError: only length-1 arrays can be converted to Python scalars。_第1张图片

你可能感兴趣的:(关于TypeError: only length-1 arrays can be converted to Python scalars。)