有效的方法来获取向量的权力

8 arrays matlab polynomials

我写了一个代码,数字上使用勒让德多项式达到某个高n阶.例如:

....
case 8 
p = (6435*x.^8-12012*x.^6+6930*x.^4-1260*x.^2+35)/128; return
case 9 
...
Run Code Online (Sandbox Code Playgroud)

如果向量x很长,这可能会变慢.我看到说x.^4和之间存在性能差异,x.*x.*x.*x并且我认为可以使用它来改进我的代码.我用过timeit并发现了:

x=linspace(0,10,1e6);
f1= @() power(x,4)
f2= @() x.4;
f3= @() x.^2.^2
f4= @() x.*x.*x.*x
Run Code Online (Sandbox Code Playgroud)

f4更快的通过一个因子2比其余部分.然而,当我去x.^6那里(x.*x.*x).^2和之间的差别很小 x.*x.*x.*x.*x.*x(而所有其他选项都较慢).

有没有告诉我们什么是最有效的方法来获取向量的力量?你能解释为什么性能会有这么大的差异吗?

Lui*_*ndo 8

这不是您问题的答案,但它可以解决您的问题:

x2 = x.*x; % or x.^2 or power(x,2), whichever is most efficient
p = ((((6435*x2-12012)*x2+6930)*x2-1260)*x2+35)/128
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您只需执行一次幂,并且仅使用指数2.此技巧可应用于所有勒让德多项式(奇数次多项式中的一个x2被替换为x).