1)问题表述:
给定长度为n的向量:a=[a1,a2,..,an]我需要计算向量b=[b1,b2,..bn],这样:
b1=a1+a2+...+an
b2=a1a2+a1a3+...+a1an+a2a3+...+a2an+...+a{n-1}an
b3=a1a2a3+a1a2a4+...+a1a2an+a1a3a4+...
...
bn=a1a2a3...an
Run Code Online (Sandbox Code Playgroud)
每个连续的条目b包含条目的a总和,成对产品的总和,三元产品等.
有没有人知道有效的算法,或者可能是现有的库实现?
我在想类似的东西
b1=sum(a)
b2=a1*sum(a[1,:])+a2*sum(a[2,:])+...
Run Code Online (Sandbox Code Playgroud)
同样适用于所有其他条目.
2)为什么我需要这个:
我想使用拉格朗日插值多项式展开来执行一维函数积分.我的问题是Newton-Cotes公式的扩展.该公式用于计算定积分.与Newton-Cotes不同,我想在选定的搭配点计算给定函数f的完全反微分特征,因此我必须整合每个拉格朗日插值多项式.
我不需要工作代码.我对算法更感兴趣,是否已经实现了.
谢谢,米哈伊尔
编辑:示例:
我们a=[1,2,3,4].
然后
b=[1+2+3+4,1*2+1*3+1*4+2*3+2*4+3*4,1*2*3+1*2*4+1*3*4+2*3*4,1*2*3*4]=[10,35,50,24]
from functools import reduce
from itertools import combinations
from operator import mul
a = [1, 2, 3, 4]
print([sum(reduce(mul, c) for c in combinations(a, i + 1)) for i in range(len(a))])
Run Code Online (Sandbox Code Playgroud)
这输出:
[10, 35, 50, 24]
Run Code Online (Sandbox Code Playgroud)