如何解决Matlab函数句柄优化
| 我在Matlab中有一个这样的函数句柄fhandle = @(A) max(1-2*A,0).*(2*A.^5+2*A + 1)
A
通常是矩阵。我执行了很多次,这减慢了计算速度。可以将其保留为函数句柄(因此我不必重写代码),但可以一劳永逸地计算2*A
,然后将其应用3次?
提前致谢。
解决方法
首先,有一个小问题:您没有计算2次3次。您要计算两次,一次计算
2*A.^5
。注意,幂运算符优先于乘法运算符。您可以将其分解为5英镑,但可能不会省下很多工作。
由于您仅限于匿名函数内部的单个表达式,因此在这种情况下,我想到的方法没有特别干净或有效的方法来预先计算2*A
。相反,您可以将乘法因子移到括号外以减少执行的乘法量。您可以按如下方式重写方程式:
fhandle = @(A) 4.*max(0.5 - A,0).*(A.^5 + A + 0.5);
请注意,使用MAX进行的运算不会因将系数2移到运算之外而受影响,因为它只是将1-2*A
的所有负元素设置为零。从方程的每个部分中删除的因数2都会使结果乘以4的单个因数,从而使您执行的逐元素乘法的次数减半。
即使您提到不想重写代码,但如果效率是关键,您可能仍要考虑使用函数或子函数而不是匿名函数。根据此问题的答案所显示的结果,有关OOP时序的问题似乎表明,匿名函数可能会产生更多开销。对于这么短的功能,重写就不需要那么多的工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。