簡體   English   中英

Matlab函數句柄優化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM