[英]Matlab function handle optimizing
我在Matlab中有一個這樣的函數句柄
fhandle = @(A) max(1-2*A,0).*(2*A.^5+2*A + 1)
其中A
通常是矩陣。 我執行了很多次,這減慢了計算速度。 可以將其保留為函數句柄(因此我不必重寫代碼),但可以一勞永逸地計算2*A
,然后再應用3次?
提前致謝。
首先,有一個小問題:您沒有計算2*A
3次。 您計算兩次,一次計算2*A.^5
。 注意, 冪運算符優先於乘法運算符 。 您可以將其分解為(2*A).*A.^4
,但是您可能不會節省很多工作。
由於您僅限於匿名函數內部的單個表達式,因此在這種情況下,我認為沒有特別干凈或有效的方法可以預先計算2*A
相反,您可以將乘法因子移到括號外以減少執行的乘法量。 您可以按如下方式重寫方程式:
fhandle = @(A) 4.*max(0.5 - A,0).*(A.^5 + A + 0.5);
請注意,使用MAX進行的運算不會因將系數2移到運算之外而受影響,因為它只是將1-2*A
所有負元素設置為零。 從方程的每個部分中刪除的因數2都會使結果乘以4的單個因數,從而使您執行的逐元素乘法的次數減半。
即使您提到不想重寫代碼,但如果效率是關鍵,您可能仍要考慮使用函數或子函數而不是匿名函數。 根據此問題的答案所顯示的結果, 有關OOP時序的問題似乎表明,匿名函數可能會有更多開銷。 對於這么短的功能,重寫就不需要那么多的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.