问题描述
我们如何在python中编写一个函数来返回两个点(X_1
和X_2
)之间的多项式的确定积分?
该函数带有3个参数:
- 多项式系数的列表
A
(即对于多项式f(x)=5x^4−2x+1
,该列表变为A=[5,−2,1]
) - 实数
X_1
- 实数
X_2
我们得到了多项式的定积分的公式,例如
我在下面尝试此功能,但是输出返回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],3))
该函数的预期结果应为:
print(take_integral([1,3))
21.0
print(take_integral([5,-2,1))
1.0
解决方法
这里有几点:
-
之后,将
A
与全部内容相乘存在一个严重的问题。A
是一个列表,其余的为浮点数。计算机不一定知道该怎么做。想象一下,如果我告诉您将一组蜡笔乘以4。您可以猜到我想要的是什么,但是最终,这实际上没有任何意义。您想将列表的内容而不是列表本身加倍。 -
使用给定的公式来计算多项式的定积分,我很确定应该有一个总和,将所有项加在一起。那就是多项式的定义,对吗?当前,您正在计算每个术语并擦除上一个术语。因此,您需要将它们加起来。
-
您的尝试也...“翻转”了指数。由于系数列表
A
按幂的降序排序(A[0]
是最高幂的系数),因此当样本输入中的X_1**(i+1)
时i=0
,其中{ {1}}将乘以最高幂与最低指数,而不是所需的A=[1,2,1]
。因此,您想从左到右遍历该列表,但是在提高3
时,i
的需求就减少了。值得庆幸的是,X
可以很方便地解决这个问题。- 如果您进行
len(A)
,则根据公式,您将准确获得len(A)-i
。确实如此,因为i+1
的多项式比多项式的最高幂大,并且len(A)
从i
到小于0
的长度小一,并且结果将根据公式为您提供A
。
- 如果您进行
以下代码将为您提供正确的答案:
i+1
,
在函数中,您忽略X_1和X_2并将它们都设置为0。因此结果始终为0