方法不更新当前对象MATLAB

时间:2015-10-07 12:55:00

标签: matlab

我正在使用Matlab OO编程编写代码。我遇到了一个问题,试图编写一个方法来改变同一对象内的矩阵的值。 我已经测试了我的方法,它完全符合我的要求,但它不能保存结果。

这是我的代码: 看看:function obj = initCC(obj)

%% searchDat在fite中选择对象属性的值 %% Importa一个有趣的搜索引擎() %%

classdef methExpl
    %Classe de Metodos Explicitos
    %   Detailed explanation goes here

    properties
        %Declara Altura da Placa, Largura, Nós em X, Nós em Y, K, Matriz
        %com a solução do passo atual, matriz com a solução do passo

        %Variáveis Geométricas
        %Altura e Largura
        Height
        Length
        %Variáveis da Malha
        %Número de nós em X e Número de nós em Y
        %Passo de tempo
        NodeX
        NodeY
        timeStep
        %Propriedades Físicas
        %Condutividade Térmica, Temperatura no Contorno
        %Temperatura Inicial uniforme na chapa

        kTerm
        boundaryTemp
        initTemp

        %Soluções parciais
        %Matriz com a solução da iteração atual
        %Matriz com a solução da iteração passada
        curMat
        lastMat

    end

    properties (SetAccess = private)
        %Arma
        funTermMAT
        erro = {}
    end

    methods
        function obj = methExpl()
            %Construtor da Classe
            %Inicializa as variaveis com os valores no arquivo input.dat
            %Inicializa a matriz 
            obj.Height = searchDat('[Height]','input.dat');
            obj.Length = searchDat('[Length]','input.dat');
            obj.NodeX = searchDat('[NodesX]','input.dat');
            obj.NodeY = searchDat('[NodesY]','input.dat');
            obj.kTerm = searchDat('[ThermalConductivity]','input.dat');
            obj.boundaryTemp = searchDat('[BoundaryTemperature]','input.dat');
            obj.initTemp = searchDat('[InitalTemperature]','input.dat');
            obj.curMat = zeros(obj.NodeX,obj.NodeY);
            %inicializa a matriz com a temperatura do contorno:
            obj.initCC();
            obj.lastMat = zeros(obj.NodeX,obj.NodeY);
        end



        function obj = initCC(obj)
        %initCC Inicializa a matriz com a condição de contorno de
        %temperatura
            lim = size(obj.curMat);
            for (i =1 : lim(1))
                for (j = 1 : lim(2))
                    if (i==1) || (i == lim(1))
                        obj.curMat(i,j) = obj.boundaryTemp;   
                    elseif (j==1) || (j ==lim(2))
                        obj.curMat(i,j) = obj.boundaryTemp
                    end

                end
            end
            obj.curMat
        end



    end

end

在退出initCC之前获取:

ans =

     3     3     3     3     3     3     3     3     3     3     3
     3     0     0     0     0     0     0     0     0     0     3
     3     0     0     0     0     0     0     0     0     0     3
     3     0     0     0     0     0     0     0     0     0     3
     3     0     0     0     0     0     0     0     0     0     3
     3     0     0     0     0     0     0     0     0     0     3
     3     0     0     0     0     0     0     0     0     0     3
     3     0     0     0     0     0     0     0     0     0     3
     3     0     0     0     0     0     0     0     0     0     3
     3     0     0     0     0     0     0     0     0     0     3
     3     3     3     3     3     3     3     3     3     3     3

这正是我想要的。 如果我在初始化之后从外面调用它,我得到:

ans =

     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0

好像我创建的方法的结果已被破坏。

1 个答案:

答案 0 :(得分:0)

只是为了扩展评论中的建议,你基本上有两个选择。首先,您可以简单地捕获正确返回修改对象的initCC方法的返回,如下所示:

myObj = initCC(myObj);

请注意,由于MATLAB的“写入时复制”行为,这实际上不会产生任何昂贵的数据副本。

另一种选择是将您的类声明为handle,如下所示:

classdef methExpl < handle
...
end

然后您不需要从initCC返回。