Python中多项式的积分

2024-04-25 16:38:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我们如何用python编写一个函数,返回两点(X_1X_2)之间多项式的定积分

该函数接受3个参数:

  • 多项式系数的列表A(即,对于多项式f(x)=5x^4−2x+1,此列表变为A=[5,0,0,−2,1]
  • 实数X_1
  • 实数X_2

给出了多项式的定积分公式,如 We are given the formula for the definite integral of a polynomial such as

下面是我对这个函数的尝试,但是输出返回0.2

    def take_integral(A, X_1, X_2):

            integral = 0

            for i in range(len(A)):
                integral = A*(X_2**(i+1) - X_1**(i+1))/(i+1)
            return integral

    print(take_integral([1, 2, 1], 0, 3))

该功能的预期结果应为:


    print(take_integral([1, 2, 1], 0, 3))
    21.0
    print(take_integral([5, 0, 0, -2, 1], 0, 1))
    1.0

Tags: 函数in列表for参数lenreturndef
2条回答

在函数中,忽略X_1和X_2,并将它们都设置为0。因此结果总是0

这里有几点:

  • A乘以之后的一大堆东西有一个严重的问题A是一个列表,其余部分给出一个浮点数。计算机不一定知道该怎么做。想象一下,如果我告诉你用一组蜡笔乘以4。你可以猜到我想要什么,但最终,这并没有什么意义。您希望将列表的内容相乘,而不是列表本身

  • 根据你给出的计算多项式定积分的公式,我很确定应该有一个和,你把所有的项加在一起。这就是多项式的定义,对吗?目前,您正在计算每个术语并删除前一个术语。因此,您需要将它们相加

  • 你的尝试也有点…“翻转”了指数者。由于系数列表A按幂的降序排序(A[0]是最高幂的系数),因此在样本输入中i=0时执行X_1**(i+1),其中A=[1,2,1]将最高幂与最低指数相乘,而不是所需的3。因此,您希望从左到右遍历列表,但是当您提高X时,您的i需要减少。谢天谢地,len(A)在解决这一问题上派上了用场

    • 如果你做了len(A)-i,你会根据公式得到i+1。这是正确的,因为len(A)将给出多项式中大于最高幂的一,并且i0开始,小于A的长度,因此根据公式给出i+1

以下代码将为您提供正确答案:

def take_integral(A, X_1, X_2):

        integral = 0

        for i in range(len(A)):
            integral += A[i]*(X_2**((len(A))-i) - X_1**((len(A))-i))/((len(A))-i)
        return integral

print(take_integral([1, 2, 1], 0, 3))
21
print(take_integral([5, 0, 0, -2, 1], 0, 1))
1

相关问题 更多 >