2017-06-22 24 views
0

任何人都可以幫助我理解Scilab的這段代碼嗎? 假設flag ='c',thres = 2且A是某個矩陣。在scilab函數名稱前使用%符號?

deff("[flag]=%smallei(x)","flag=real(x) >= thres") 
[X,dsmall] = schur(A,%smallei); 

雖然我得到'deff'被用來做一個名爲%smallei的函數,它正在比較這些值。但是在Schur函數中,使用%smallei時沒有輸入參數。請幫助我,這段代碼片段正在做什麼以及我錯了什麼。

有關完整的Scilab代碼 - http://cgit.scilab.org/scilab/plain/scilab/modules/linear_algebra/macros/psmall.sci?h=5.1&id=b97dd3f34da8b52ac799da43848d8d0910d83aef

回答

1

舒爾函數內部調用%smallei功能,爲您傳遞一個函數指針在舒爾(見help)。函數通過傳遞一個參數(在你的例子中是'x')並且期望返回一個值(在你的例子中是'flag')來調用這個函數指針。因此,您可以使用任何遵循原型的函數來工作。

這是優化算法中的一種典型方法,您可以在其中使用一種可用於不同優化標準的通用算法。因此,您將算法在通用代碼和用於標準的特定函數之間進行分割,並且該函數在算法中作爲函數指針進行調用。用戶可以通過將優化函數注入爲函數指針來決定使用哪個自定義條件。