如何在Matlab

时间:2015-04-28 00:58:10

标签: matlab matrix pass-by-reference

我是matlab的初学者,在线了解以下问题并且无法解决问题。我有一个名为current_load的1 x 20矩阵,我需要定期更新。该矩阵位于Matlab的主工作空间中(如下面的代码所示)。

current_loads = zeros(1, 20); 
for col=1:20
    current_loads(1,col)=10; %// Initially give all nodes a current value of 10    
end

Object = HandleObject(current_load);%To pass by reference
recursive_remove(Object, 0);

为了通过引用传递current_load,我创建了以下类HandleObject.m

classdef HandleObject < handle
   properties
      Object=[];
   end

   methods
      function obj=HandleObject(receivedObject)
         obj.Object=receivedObject;
      end
   end
end

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

function recursive_remove( current_load, val )
     current_load.object = new matrix;
     if(val<10)
        current_load.object(1,3) = 2+val; %Not the correct way of using current_load ??
     end
     recursive_remove( current_load, current_load.object (1,3) )
end

这里的意图是修改此函数中的current_load变量,稍后我可以从main中看到这些相同的变化。但是这段代码不起作用,因为我不知道如何通过引用传递。我需要通过引用传递,因为我以递归方式调用此函数而不返回main以使其在调用者处覆盖其变量。如果可能,请举例说明。

1 个答案:

答案 0 :(得分:0)

如果您确实需要此功能,可以考虑将HandleObject类转换为Singleton,如下所示:

classdef HandleObject < handle
   properties
      Object=[];
   end
    methods(Static)
    function obj = Instance(receivedObject)
        persistent uniqueInstance

        try
            if isempty(uniqueInstance)
                obj = HandleObject(receivedObject);
                uniqueInstance = obj;
            else
                obj = uniqueInstance;
            end
        catch ME
            disp(ME.getReport);
        end
    end
   end
   methods
      function obj=HandleObject(receivedObject)
         obj.Object=receivedObject;
      end
   end
end

您的递归函数会变得更简单:

function recursive_remove(val )
   current_load = HandleObject.Instance();
   current_load.object = new matrix;
   if(val<10)
       current_load.object(1,3) = 2+val;
   end
   recursive_remove(current_load.object (1,3) )
end

要创建HandleObject类的实例,请执行以下操作:

Object = HandleObject.Instance(current_load);

希望这会对你有所帮助。