【问题标题】:Matlab - difficulty getting output for my functionMatlab - 难以为我的函数获取输出
【发布时间】:2015-03-19 00:51:31
【问题描述】:

我正在尝试编写一个函数 transform(A),当给定矩阵 A 时它会返回一个新矩阵。新矩阵应根据以下公式获得: 如果 A 有不止一行,则交换第一行和第二行。在此平方之后,第一行中的元素。 到目前为止,这就是我所写的:

function[Anew] = transform(A)
dimension = size(A);
if dimension(1) > 1            %if there is more than 1 row
   A([1 2],:)=A([2 1],:);
end
A(1,:,:) = A(1,:,:).^2          %squares elements in the first row
end

我通过在 matlab 中调用它来测试我的函数。 我注意到,因为我在 A(1,:,:) = A(1,:,:) 旁边没有分号。^2
我仍然获得了想要的结果,但不是函数的输出。 我得到 A = 而不是 Anew =

如果我在 A(1,:,:) = A(1,:,:).^2; 旁边放一个分号然后我根本没有得到输出。

你能告诉我哪里出了问题,我应该在我的程序中进行哪些更改才能获得 Anew 的输出? 谢谢

【问题讨论】:

    标签: matlab function output


    【解决方案1】:

    要从 Matlab 中的函数返回值,您必须直接分配给它。 在您的情况下,您需要在操作结束时分配给Anew(从技术上讲,您也可以完全使用该变量)。

    function [Output1, Output2] = SomeFunction( ... )
        % Do Some Work
    
        % Store Output
        Output1 = Result1(:,2) %some output
        Output2 = Result2(3:end, :) %some other result
    end
    
    function[Anew] = transform(A)
        dimension = size(A);
        Anew = A;
        if dimension(1) > 1            %if there is more than 1 row
            Anew ([1 2],:)=Anew([2 1],:);
        end
        Anew(1,:,:) = Anew(1,:,:).^2;          %squares elements in the first row
    end
    

    【讨论】:

    • 我在最后一个结尾之前添加了 Anew = A。它有效但不返回 Anew = .... 它返回 ans = .... 有什么问题? @Rollen D'Souza
    • 函数就是这样工作的。变量名只是函数内部的一种占位符。使用函数的时候,还是需要赋值给某个东西(不然会保留在ans变量中)
    • 因为我需要将第 1 行和第 2 行与命令 A([1 2],:)=A([2 1],:)可能涉及新
    • 我应该补充一点,@Hannah,函数不能更改全局范围内的任何变量。也就是说,函数内部使用的所有变量名都被有效地丢弃了。这就是为什么您需要使用输出值返回它们并再次存储它们的原因。
    • 我有点困惑,您能否更正我的程序并编写解决方案以便我理解您的意思?非常感谢@Rollen D'Souza
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多