Динамическое заполнение класса Matlab свойства

Я пытаюсь динамически заполнить свойство в классе Matlab. Я передаю векторы функции метода, а затем вычисляю различные параметры. Я хотел бы заполнить свойства в цикле for, см. пример кода. OwnClassFunction — это всего лишь пример дополнительной функции в классе, но она не реализована в примере кода. Как я могу сделать это правильно?

classdef Sicherung < handle      

    properties
        x = ([],1)
    end

    methods
        function examplefunction(object,...
                single_parameter_vector) % (n,1) n can be any size 

            for i=1:length(param_vector)

                [object.x(i,1)] = object.OwnClassFunction(single_parameter_vector(i,1));
            end
        end
    end
end

Если я попробую что-то подобное

...
properties
   x = []
end
...
function ...(object,parameter)
   for i=1:length(parameter)
     [object.x(i)] = function(parameter(i));
   end

Я получаю сообщение об ошибке Несоответствие размера назначения в подписке.


person Prof. Putzmichel    schedule 09.08.2018    source источник
comment
x = ([],1) не похож на правильный синтаксис MATLAB. В остальном проблемы не вижу. Почему вы считаете, что ваш код неверен?   -  person Cris Luengo    schedule 09.08.2018
comment
Да, это псевдосинтаксис, я не знаю, как правильно его реализовать. В данный момент я получаю ошибки. Главный вопрос в том, как мне определить свойство, чтобы я мог заполнить его в цикле for.   -  person Prof. Putzmichel    schedule 09.08.2018


Ответы (1)


У меня нет под рукой MATLAB для тестирования, но следующее должно работать.

Ваш код довольно близок к правильно функционирующему методу. Измените его следующим образом:

classdef Sicherung < handle      

    properties
        x = [] % initialize to empty array
    end

    methods
        function examplefunction(object,param_vector)
            if ~isvector(param_vector)
                 error('vector expected') % check input
            end
            n = numel(param_vector)
            object.x = zeros(n,1); % preallocate
            for i=1:n
                object.x(i) = object.OwnClassFunction(param_vector(i));
            end
        end
    end
end
person Cris Luengo    schedule 09.08.2018
comment
Большое спасибо, теперь я решаю проблему. Была ошибка в подфункции и в объявлении свойства, теперь все работает нормально. - person Prof. Putzmichel; 09.08.2018