计算数学函数下方的面积

4 投票
5 回答
4638 浏览
提问于 2025-04-15 19:50

我有一组数据,我用Python里的二次多项式(也就是最高次数是2的多项式)来近似这些数据。我想计算这个多项式在0到1之间的面积。

请问有没有什么数学工具,或者numpy里类似的包可以用,还是说我应该自己写个简单的函数来计算这些函数的积分呢?

我对怎么定义数学函数还不是很清楚,想请教一下最好的方法是什么。

谢谢。

5 个回答

3

对于你的特殊情况,使用通用的数值积分算法可能有点过头了……如果你仔细算一下代数,就会发现有一个简单的公式可以直接给你面积。

你有一个二次多项式:f(x) = ax2 + bx + c

你想找出在[0,1]这个范围内曲线下的面积。

它的反导数是F(x) = ax3/3 + bx2/2 + cx + C

从0到1的曲线下的面积是:F(1) - F(0) = a/3 + b/2 + c

所以如果你只是想计算[0,1]这个区间的面积,使用这个简单的公式可能比用那些通用的方法要方便得多。

5

看,妈,没用任何导入!

>>> coeffs = [2., 4., 6.]
>>> sum(coeff / (i+1) for i, coeff in enumerate(reversed(coeffs)))
8.6666666666666661
>>>

我们的保证:适用于任何正次数的多项式,否则退款!

来自我们研究实验室的更新:保证延长;把“正”改成“非负”了 :-)

更新 这是一个工业级的版本,能够应对系数中出现的杂乱整数,而且在循环中没有函数调用,也没有在设置中使用 enumerate()reversed()

>>> icoeffs = [2, 4, 6]
>>> tot = 0.0
>>> divisor = float(len(icoeffs))
>>> for coeff in icoeffs:
...     tot += coeff / divisor
...     divisor -= 1.0
...
>>> tot
8.6666666666666661
>>>
9

如果你只是想对多项式进行积分,那就不需要表示一个一般的数学函数,可以使用 numpy.poly1d,它有一个 integ 方法来进行积分。

>>> import numpy
>>> p = numpy.poly1d([2, 4, 6])
>>> print p
   2
2 x + 4 x + 6
>>> i = p.integ()
>>> i
poly1d([ 0.66666667,  2.        ,  6.        ,  0.        ])
>>> integrand = i(1) - i(0) # Use call notation to evaluate a poly1d
>>> integrand
8.6666666666666661

如果你想对任意的数值函数进行积分,那就需要用 scipy.integrate,并且用普通的 Python 函数来表示这些函数。如果你想进行解析积分,可以使用 sympy。不过在这种情况下,听起来你并不需要这两者,尤其是后者。

撰写回答