繁体   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