Python 中多项式的积分
Integral of a Polynomial in Python
我们如何在 python 中编写函数 returns 两点(X_1
和 X_2
)之间的多项式的定积分?
该函数有 3 个参数:
- 多项式系数列表
A
(即对于多项式 f(x)=5x^4−2x+1
,此列表变为 A=[5,0,0,−2,1]
)
- 实数
X_1
- 实数
X_2
我们给出了多项式的定积分公式,例如
我对这个函数的尝试如下,但是输出 returns 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
在您的函数中,您忽略了 X_1 和 X_2 并将它们都设置为 0。因此结果始终为 0
这里有几点:
将 A
与之后的所有内容相乘会出现严重问题。 A
是一个列表,其余的给出一个浮点数。计算机不一定知道该怎么做。想象一下,如果我告诉你将一组蜡笔乘以 4。你可以猜到我想要什么,但最终,它并没有真正的意义。您想要乘以列表的 内容 而不是列表 本身 .
根据你给出的计算多项式定积分的公式,我很确定你将所有项加在一起应该有一个总和。这就是多项式的定义,对吧?目前,您正在计算每一项并删除前一项。所以,你需要把它们加起来。
您的尝试也有点……“翻转”指数。由于系数列表 A
是按幂降序排列的(A[0]
是最高幂的系数),所以在样本输入中 i=0
时执行 X_1**(i+1)
where A=[1,2,1]
会将最高幂乘以最低指数而不是所需的 3
。因此,您想从左到右遍历列表,但是当您提高 X
时,您的 i
需要减少。值得庆幸的是,len(A)
可以派上用场来解决这个问题。
- 如果你
len(A)-i
,你会根据公式得到i+1
。这是真的,因为 len(A)
会给出比多项式最高次幂大一的值,而 i
从 0
开始到比 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
我们如何在 python 中编写函数 returns 两点(X_1
和 X_2
)之间的多项式的定积分?
该函数有 3 个参数:
- 多项式系数列表
A
(即对于多项式f(x)=5x^4−2x+1
,此列表变为A=[5,0,0,−2,1]
) - 实数
X_1
- 实数
X_2
我们给出了多项式的定积分公式,例如
我对这个函数的尝试如下,但是输出 returns 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
在您的函数中,您忽略了 X_1 和 X_2 并将它们都设置为 0。因此结果始终为 0
这里有几点:
将
A
与之后的所有内容相乘会出现严重问题。A
是一个列表,其余的给出一个浮点数。计算机不一定知道该怎么做。想象一下,如果我告诉你将一组蜡笔乘以 4。你可以猜到我想要什么,但最终,它并没有真正的意义。您想要乘以列表的 内容 而不是列表 本身 .根据你给出的计算多项式定积分的公式,我很确定你将所有项加在一起应该有一个总和。这就是多项式的定义,对吧?目前,您正在计算每一项并删除前一项。所以,你需要把它们加起来。
您的尝试也有点……“翻转”指数。由于系数列表
A
是按幂降序排列的(A[0]
是最高幂的系数),所以在样本输入中i=0
时执行X_1**(i+1)
whereA=[1,2,1]
会将最高幂乘以最低指数而不是所需的3
。因此,您想从左到右遍历列表,但是当您提高X
时,您的i
需要减少。值得庆幸的是,len(A)
可以派上用场来解决这个问题。- 如果你
len(A)-i
,你会根据公式得到i+1
。这是真的,因为len(A)
会给出比多项式最高次幂大一的值,而i
从0
开始到比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