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