TL; DR : Я хотел бы использовать подтверждение класса свойств для проверки fitoptions
объектов, но MATLAB жалуется.
Рассмотрим следующие классы:
% SUPERCLASS:
classdef (Abstract) BaseModel
% CWLvsT is an abstract parent class for different CWL(T) models.
properties (Abstract = true, Access = protected, Constant = true)
MODEL (1,1) string
FITOPTS (1,1) % ???
end
end
% SUBCLASS:
classdef RationalFraction < BaseModel
% This corresponds to a fit of type "rat11".
properties (Access = protected, Constant = true)
MODEL = "CWL(T) = (P1 * T + P2) / (T + Q1)";
FITOPTS = fitoptions('rat11', ...
'Lower', [-1, -1E5, -1E4], ...
'Upper', [10, 5E5, 5E4], ...
'StartPoint', [4, 0, 0]);
end
end
Я бы хотел, чтобы подклассы определяли какой-либо объект fitoptions
(существует несколько типов) для свойства FITOPTS
.
Попытка # 1 :
Первым делом я попытался создать пример объекта fitoptions
(согласно определению в подклассе) и посмотреть, каков был его class
. В результате я получил curvefit.nlsqoptions
, поэтому я попытался поместить его вместо % ???
в суперкласс и создать экземпляр класса RationalFraction
, но получил следующую ошибку:
Error defining property 'FITOPTS' of class 'BaseModel':
Class named 'curvefit.nlsqoptions' is undefined or does not support property validation.
Попытка # 2 :
Я думал, что вышеприведенная ошибка является признаком того, что для fitoptions
существует некоторый суперкласс, по которому я должен проверить объект, поэтому я попытался сделать metaclass(optsObj)
на объекте примера, но получил пустой метаклассом . Прибегнув к ручному поиску, мне удалось найти хорошего кандидата, перебрав папку MATLAB\R2019b\toolbox\curvefit\curvefit\@curvefit
- curvefit.basefitoptions
, но это привело к аналогичной ошибке.
Попытка # 3 :
Я заметил, что fitoptions
объекты находятся недалеко от простых struct
объектов, поэтому я попытался FITOPTS (1,1) struct
- что действительно привело к успешному созданию объекта. К сожалению, когда позже, обращаясь к этому полю FITOPTS
при попытке вызвать fit
, я получил следующую ошибку:
Error using fit>iParseOptionalArgs (line 949)
Algorithm options must be specified in a FITOPTIONS object or as property-value pairs.
Error in fit (line 113)
[useroptions, useroptargs, probparams] = iParseOptionalArgs( varargin{:} );
Что означает, что проверка свойства cast nlsqoptions
объект в struct
, теряющий «дополнительную информацию», в которой он содержал параметры соответствия. Хотя такое поведение является интересной находкой, оно не очень полезно в данном сценарии.
Мой вопрос :
Может кто-нибудь предложить способ выполнения проверки этого класса таким образом, чтобы FITOPTS
заканчивался содержащий объект параметров подгонки?
Я работаю с R2019b.