Моя цель — спроектировать многоразовый движок, запрограммированный в MATLAB, используя MATLAB OOP. Это моя первая попытка сделать это. Моя проблема, которую я хотел бы решить, заключается в следующем: у меня есть абстрактный класс cPayoffBase
это определяет интерфейс для выплаты неизвестного типа. Наследование cPayoffBase
У меня есть конкретный класс cPayoffCall
который реализует опцию вызова. Теперь я определил другой класс cVanillaDerivs
это берет определенный пользователем объект выплаты и цену исполнения. Когда я передаю пользовательский объект в cVanillaDerivs
рассчитать некоторое количество исключение Index exceeds matrix dimensions.
поверхностей. Я предоставлю коды в деталях.
cPayoffBase.m
classdef (Abstract) cPayoffBase < handle
methods (Abstract)
mfGetPayoff(argSpotPrc)
end
end
cPayoffCall.m
classdef cPayoffCall < cPayoffBase
properties (GetAccess = private, SetAccess = private)
dmStrikePrc
end
methods
function obj = cPayoffCall(argStrikePrc)
obj.dmStrikePrc = argStrikePrc;
end
function rslt = mfGetPayoff(obj, argSpotPrc)
rslt = max(argSpotPrc - obj.dmStrikePrc, 0.0);
end
end
cVanillaDerivs.m
classdef cVanillaDerivs
%% Data Members
properties (GetAccess = private, SetAccess = private)
dmPayoffObj
dmExpiryDt
end
%% Implementation
methods
% Constructor
function obj = cVanillaDerivs(argPayoffObj, argExpiryDt)
obj.dmPayoffObj = argPayoffObj;
obj.dmExpiryDt = argExpiryDt;
end
% Member Functions
function rslt = mfGetExpriyDt(obj)
rslt = obj.dmExpiryDt;
end
function rslt = mfGetDerivPayoff(argSpotPrc)
rslt = obj.dmPayoffObj(argSpotPrc);
end
end
end
командное окно
>> clear classes
>> spot = 100; strike = 50; T = 1;
>> payoffObj = cPayoffCall(strike);
>> typeVanilla = cVanillaDerivs(payoffObj, T);
>> mfGetDerivPayoff(typeVanilla, spot)
Index exceeds matrix dimensions.
Error in cVanillaDerivs/mfGetDerivPayoff (line 37)
rslt = obj.dmPayoffObj(argSpotPrc);
В C ++, учитывая, что у меня есть класс-обертка и обернуть объект класса cPayoffBase
Я могу сделать что-то вроде return (*dmPayoff)(dmSpotPrc)
для двойной функции возврата mfGetDerivPayoff(double dmSpotPrc) const
в классе cVanillaDerivs
, Пожалуйста, дайте мне знать мои ошибки и, если возможно, как я могу добиться того же процесса в MATLAB OOP, как C ++.
Вы пытаетесь получить доступ к элементу 100 объекта dmPayoffObj
, Однако это свойство установлено в payOffObj
, который не является массивом. Таким образом, ошибка.
Я думаю, что вы хотели вернуть выплату dmPayoffObj
, Вы должны изменить метод mfGetDerivPayoff
класса cVanillaDerivs
следующее:
function rslt = mfGetDerivPayoff(argSpotPrc)
rslt = obj.dmPayoffObj.mfGetPayoff(argSpotPrc);
end
Ты имел ввиду rslt = obj.dmPayoffObj.mfGetPayoff(argSpotPrc);
вместо rslt = obj.dmPayoffObj(argSpotPrc);
?