【问题标题】:Matlab extend a function on scalar to a function on matrixMatlab将标量函数扩展为矩阵函数
【发布时间】:2020-09-05 00:34:24
【问题描述】:

Matlab page 数组中提供了一种简单的方法来将标量函数 $func$ 扩展到向量和矩阵(以及高维张量),即

B = arrayfun(func,A)

但是,当我尝试这样做时,它返回了一个错误

function [output_matrix]=func(y1_matrix)
    output_matrix = arrayfun( func_elementwise  ,y1_matrix);

    function [output_x]=func_elementwise(x1)
    % a scalar function
    ...(Arguments that had been verified worked)
    end

end 

当我尝试运行该函数时,它返回了

Not enough input arguments.
Error in func/func_elementwise 
        x1=mod(x1,2*pi)-pi;

Error in func
output_matrix = arrayfun( func_elementwise  ,y1_matrix);

你能告诉我出了什么问题吗?为什么 arrayfun 对 func_elementwise 不起作用? (func 的尝试输入是标量和 1*N 矩阵,两者都不起作用。)

【问题讨论】:

    标签: matlab function matrix scalar


    【解决方案1】:

    在您的代码中,

    arrayfun(func_elementwise,y1_matrix)
    

    你调用函数func_elementwise 不带参数:

    func_elementwise
    

    相同
    func_elementwise()
    

    您需要将函数句柄传递给arrayfun,如下所示:

    arrayfun(@func_elementwise,y1_matrix)
    

    【讨论】:

    • @ShoutOutAndCalculate 请注意,arrayfun's documentation 表示它的第一个输入应该是“应用于输入数组元素的函数,指定为函数句柄”跨度>
    【解决方案2】:

    在这种情况下,您需要将 func_elementwise 作为函数句柄传递给 arrayfunc:

    arrayfun(@func_elementwise, y1_matrix)
    

    Matlab 帮助中的更多详细信息: https://www.mathworks.com/help/matlab/ref/arrayfun.html https://www.mathworks.com/matlabcentral/answers/226399-arrayfun-with-a-function-that-takes-multiple-inputs

    【讨论】:

    • 对不起,我的意思是函数句柄。就像 Cris Luengo 所说的那样。您需要将函数作为函数句柄传递。抱歉,没有给出更好的解释。这就是为什么我在 Mathworks 中包含了答案链接。
    猜你喜欢
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多