Моя цель состоит в том, чтобы спроектировать многоразовый двигатель, запрограммированный в MATLAB, используя MATLAB OOP. Это моя первая попытка сделать это. Моя проблема, которую я хотел бы решить, заключается в следующем: у меня есть абстрактный класс cPayoffBase
, который определяет интерфейс для выплаты неизвестного типа. Наследует cPayoffBase
, у меня есть конкретный класс cPayoffCall
, который реализует опцию вызова. Теперь я определил еще один класс cVanillaDerivs
, который принимает определяемый пользователем объект выплат и цену исполнения. Когда я передаю в определяемом пользователем объекте значение cVanillaDerivs
для вычисления количества исключений Index exceeds matrix dimensions.
. Я предоставлю коды в деталях.MATLAB: OOP Функции вызова от другого класса
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
. Пожалуйста, сообщите мне свои ошибки и, если возможно, как я могу добиться того же процесса в OAT MATLAB, как C++.
Ах. поэтому нужно '.' вызвать функцию' mfGetPayoff() '. Все эти вопросы пишут для отличного ответа. Спасибо. – AnonymousJ