ale*_*t87 0 matlab function-handle
我有像Matlab这样的函数句柄
fhandle = @(A) max(1-2*A,0).*(2*A.^5+2*A + 1)
A通常在哪里是矩阵.我执行了这么多次,它正在减慢计算速度.可以将它保存为函数句柄(所以我不必重写代码)但是要2*A一劳永逸地计算然后再应用它三次?
提前致谢.
首先,一个小狡辩:你没有计算2*A3次.你计算它两次并计算2*A.^5一次.请注意,功率运算符优先于乘法运算符.你可以分解它(2*A).*A.^4,但你可能不会为自己节省太多工作.
由于您只限于匿名函数中的单个表达式,因此2*A在这种情况下,我没有特别干净或有效的方法来预计算.相反,您可以将乘法因子移到括号外,以减少您执行的乘法运算量.您可以按如下方式重写您的等式:
fhandle = @(A) 4.*max(0.5 - A,0).*(A.^5 + A + 0.5);
Run Code Online (Sandbox Code Playgroud)
请注意,使用MAX的操作不受在操作之外移动因子2的影响,因为它只是将所有负数元素设置1-2*A为零.从等式的每个部分中移除的因子2导致单个因子4乘以结果,从而将您执行的逐元素乘法的数量减半.
即使你提到不想重写代码,如果效率很关键,你可能想要考虑使用函数或子函数而不是匿名函数.根据关于OOP计时的问题的答案中显示的结果,似乎匿名函数可能具有更多开销.对于这么短的功能,重写它不会那么多工作.
| 归档时间: |
|
| 查看次数: |
1026 次 |
| 最近记录: |