如何通过引用传递矩阵或获取函数的返回值

时间:2015-04-27 17:21:26

标签: matlab matrix

我有一个名为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的新手。如果你能举例说明如何处理这个

,我将不胜感激

2 个答案:

答案 0 :(得分:2)

编辑:“如何在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

通过这种方式,您可以通过引用获得某种传递,并避免为您的程序获得大量副本。

答案 1 :(得分:0)

函数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

的输入中调用它