关于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)

运行结果:
在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值