python拟合曲线并求积分_Python如何将曲线拟合为包含数值计算积分的函数?

本文介绍了在Python中如何使用`curve_fit`进行曲线拟合,并结合`quad`函数进行数值积分。在尝试将曲线拟合的函数应用于包含积分的计算时,遇到了`quad`不接受向量参数的问题。通过修改目标函数,使其能够处理数组参数,成功解决了这个问题。
摘要由CSDN通过智能技术生成

简而言之:curve_fit试图在扩展数据数组上计算目标函数,但是quad不能接受向量参数。你需要通过输入数组的列表理解来定义你的目标函数。在

让我们想出一个最少可重复的例子:In [33]: xdata = np.linspace(0, 3, 11)

In [34]: ydata = xdata**3

In [35]: def integr(x):

...: return quad(lambda t: t**2, 0, x)[0]

...:

In [36]: def func(x, a):

...: return integr(x) * a

...:

In [37]: curve_fit(func, xdata, ydata)

-

ValueError Traceback (most recent call last)

in ()

> 1 curve_fit(func, xdata, ydata)

[... removed for clarity ...]

~/virtualenvs/py35/lib/python3.5/site-packages/scipy/integrate/quadpack.py in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points)

370 def _quad(func,a,b,args,full_output,epsabs,epsrel,limit,points):

371 infbounds = 0

> 372 if (b != Inf and a != -Inf):

373 pass # standard integration

374 elif (b == Inf and a != -Inf):

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

这正是你所看到的错误。好的,错误来自quad,它试图计算func(xdata, a),最后归结为integr(xdata),但这不起作用。(我是怎么发现的?我将import pdb; pdf.set_trace()放在func函数中,并在调试器中进行了查找)。在

然后,让目标函数handle数组参数:

^{pr2}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值