我编写了一个代码,在数值上使用勒让德多项式直至某个高 n 阶。例如:
....
case 8
p = (6435*x.^8-12012*x.^6+6930*x.^4-1260*x.^2+35)/128; return
case 9
...
如果向量x
太长这会变得很慢。我发现说之间存在性能差异x.^4
and 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
f4
is faster by a factor 2比其他人。然而当我去x.^6
之间差别很小(x.*x.*x).^2
and x.*x.*x.*x.*x.*x
(而所有其他选项都较慢)。
有没有办法告诉我们什么是获取向量幂的最有效方法?
您能解释一下为什么性能差异如此之大吗?
这并不完全是您问题的答案,但它可能会解决您的问题:
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
这样,您只需执行一次幂,并且仅使用指数 2。此技巧可以应用于所有勒让德多项式(在奇数次多项式中,x2
被替换为x
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)