У меня есть проблема, в которой я хочу смоделировать какое-то физическое явление. Это явление состоит из нескольких фаз, каждая из которых может иметь свои собственные определяющие уравнения (динамика и, следовательно, количество переменных, ограничений, границ переменных и т. Д.). Чтобы сгруппировать свойства этой фазы, я написал класс phase
. Экземпляр этого класса имеет, ао, свойство, называемое nVars
, числом переменных в определяющих уравнениях (которое, таким образом, может варьироваться в зависимости от экземпляров этого класса).
Теперь предположим, что я хочу иметь другое свойство для этого класса, которое называется boundaries
. Поскольку мне требуется, чтобы границы переменных были сформулированы очень специфическим образом, я также создаю класс boundaries
. Этот класс имеет свойства lower
и upper
;нижняя и верхняя границы переменных. Однако длина этих нижних и верхних границ зависит от nVars
экземпляра phase
.
В самом общем случае все нижние границы -Inf
, а верхние - Inf
. Поэтому я хочу установить значения свойств boundaries
lower
и upper
по умолчанию -Inf * ones([1 nVars])
и Inf * ones([1 nVars])
соответственно. Теперь мой вопрос: как сделать значение свойства класса по умолчанию зависимым от переменной (nVars
в данном случае).
Моя первая попытка:
classdef phase
properties
nVars(1, 1) double
boundaries boundaries
end
methods
function obj = phase(nVars)
%Some constructor method
obj.nVars = nVars;
obj.boundaries = boundaries(obj);
end
end
end
classdef boundaries
properties
parent phase
lower = -Inf * ones([1 parent.nVars]);
upper = Inf * ones([1 parent.nVars]);
end
methods
function obj = boundaries(parent)
%Some constructor method
obj.parent = parent;
end
end
end
В качестве альтернативыЯ попытался установить значения по умолчанию для свойств класса границ следующим образом:
classdef boundaries
properties
parent phase
lower(1, parent.nVars) double = -Inf;
upper(1, parent.nVars) double = Inf;
end
methods
function obj = boundaries(parent)
%Some constructor method
obj.parent = parent;
end
end
end
Может кто-нибудь помочь мне понять, как присваивать эти значения по умолчанию на основе переменной?