簡體   English   中英

如何在GNU Octave中調用矩陣的每個元素的冪運算的自定義函數?

[英]How to call a custom function with exponentiation for every element of a matrix in GNU Octave?

試圖找到一種方法來針對GNU Octave中矩陣中的每個項目調用自定義函數中使用的冪函數(^)。

我是一個初學者,我想這很簡單,但是我無法使其正常工作。


代碼如下:

function result = the_function(the_val)
    result = (the_val - 5) ^ 2
endfunction


我試圖這樣稱呼它:

>> A = [1,2,3];
>> the_function(A);
>> arrayfun(@the_function, A);
>> A .@the_function 2;

這些都不起作用(我相信最后一個語法根本不正確),並拋出錯誤:

error: for A^b, A must be a square matrix

我猜這意味着它正在嘗試對矩陣求平方,而不是對其中的元素求平方。

我應該怎么做?

非常感謝!

將該函數稱為the_function(A)是正確的,但是您必須確保該函數可以處理矢量輸入。 就像您說的那樣, (the_val - 5)^2試圖對矩陣求平方(如果the_val不是平方,則會產生錯誤)。 要計算逐元素的冪,請使用.^而不是^

因此:在功能定義中,您需要進行更改

result = (the_val-5)^2;

result = (the_val-5).^2;

另外需要注意的是,由於您的代碼可以使用標量輸入,因此您也可以使用arrayfun方法。 正確的語法是(刪除@ ):

arrayfun(the_function, A)

但是,使用arrayfun通常比定義函數以使其直接用於向量輸入(或“ 向量化 ”它)要慢。 因此,只要有可能, 就將您的函數向量化 這就是我上面的.^建議所做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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