【问题标题】:How to pass matrix by reference or get the return value of function如何通过引用传递矩阵或获取函数的返回值
【发布时间】:2015-04-27 17:21:26
【问题描述】:

我有一个名为 current_load 的 1 x 118 矩阵,我需要定期更新它。该矩阵位于 Matlab 的主工作区中(如下面的代码所示)。

current_loads = zeros(1, 118); 
for col=1:118
    current_loads(1,col)=10; %// Initially give all nodes a current load of 10    
end
recursive_remove(current_loads); %calling function

这个矩阵将被传递给函数调用recursive_remove如下所示)。

function updater = recursive_remove( current_load )
     current_load(1,3) = 2.6; %// This update can't be seen from main ??
     %this function will be called recursively later
end

但是无论我从函数中对这个current_load 矩阵做什么更新,它都不会得到更新,因为我不知道如何通过引用传递它。

我是 Matlab 的新手。如果您能举例说明如何处理这个问题,我将不胜感激

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    编辑:“如何在 Matlab 中通过引用传递参数” 您可以通过引用来解决您的问题

    你需要一个handle class

    句柄类

    与其他对象共享引用的对象

    也就是说,使用以下代码创建一个名为 HandleObject.m 的文件:

    classdef HandleObject < handle
       properties
          Object=[];
       end
    
       methods
          function obj=HandleObject(receivedObject)
             obj.Object=receivedObject;
          end
       end
    end
    

    然后你可以做这样的事情

    Object = HandleObject(your matrix)
    yourFunction(Object)
    

    在你的函数内部

    function yourFunction(myObject)
        myObject.object = new matrix;
    end
    

    这样,您可以通过引用实现某种传递,并避免在您的程序中获得大量副本。

    【讨论】:

    • 当我看到问题的标题时,我正在认真思考这个问题,结果发现它实际上并不是问题。反正答案很好!
    • 为什么没有?,他想改变函数内部矩阵的值。
    • 好吧,公平地说,OP 在评论中暗示这就是他想要的。但据我了解,问题的真正标题应该更像是“如何从函数返回结果”。这与如何传递 参数给函数无关,而是如何返回它们。无论如何,我认为您的答案值得保留,但现在为了使其更容易理解,您可能应该对其进行编辑并在顶部添加您最初回答“如何在 Matlab 中通过引用传递参数”
    • 问题的真正标题应该是“请解决我的问题”,任何使人代码工作的代码对他来说都可以。无论如何谢谢;)我会编辑我的问题
    【解决方案2】:

    函数 recursive_remove 的输出尚未定义,因此您的输出不能在其他任何地方使用。

    在 matlab 中,您使用方括号定义函数的输出,如下所示。

    function [ output1, output2 ] = recursive_remove( input1, input2 )

    现在可以将输出传递到其他MATLAB docs - functions

    当您在上面的示例中调用与您在第一个代码中所做的不同的函数时,您将调用它,如下所示:

    current_loads = zeros(1, 118); 
    for col=1:118
        current_loads(1,col)=10; %Initially give all nodes a current load of 10    
    end
    [ output1, output2 ] = recursive_remove( input1, input2 ); %calling function
    

    使用此语法,您可以使用 output1 并在下一个函数 recursive_remover 的输入中调用它

    【讨论】:

    • 非常感谢您向我展示示例代码。现在很清楚了
    • 只需要明确这个答案是按值传递,而不是按引用传递。
    • 谢谢,其实我总是把这两个人弄混了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2015-03-28
    • 2016-12-20
    相关资源
    最近更新 更多