syms omega j theta sigma
k=[90 94 98 102 106 110]; % Strike prices
putprices=[.1606 .2806 .9285 2.8801 6.1523 10.0147]; % Put prices at each strike
mustar = log(100)-sigma.^2/2-omega.*(exp(-theta)-1); % risk-neutral mean
Es1j=exp(mustar-theta.*j+sigma.^2./2); % Expected value of stock price at state j 1 period from now
x1=(log(k)-(mustar-theta.*j))./sigma; % the first normcdf value
x2=(log(k)-(mustar-theta.*j)-sigma.^2)./sigma; % the second normcdf value
qpkandj = k.*normcdf(x1)-Es1j.*normcdf(x2); % combination of normcdfs and strike prices and expected value of stock price 1 peroid from now
qpk=exp(-omega).*omega.^j./factorial(j).*qpkandj; % Poisson formula
eqns = symsum(qpk,j,0,inf)== putprices % Continuation of Poisson formula
assume(omega > 0)
assume(theta, 'real')
assume(sigma, 'real')
S = solve(eqns, [omega theta sigma], 'Real', true, 'ReturnConditions', true)
S.omega
S.theta
S.sigma
Попытка работать над моделью смеси Пуассона, чтобы найти значения трех параметров (омега, тета и сигма), которые соответствуют выходным данным уравнения Пуассона для цен на путы в третьей строке. Всякий раз, когда я запускаю это, я получаю очень, очень длинный список условий, и я пытался поместить все это в условие предположения, и это не имело никакого значения. У кого-нибудь есть идеи, что происходит или как мне это сделать?
1 ответ
Matlab напечатает список условий, потому что вы не добавляете точку с запятой. Чтобы не печатать список условий, просто добавьте точку с запятой следующим образом:
eqns = symsum(qpk,j,0,inf) == putprices; % Continuation of Poisson formula
Похожие вопросы
Новые вопросы
matlab
MATLAB - это высокоуровневая языковая и интерактивная среда программирования для численных расчетов и визуализации, разработанная MathWorks. Не используйте оба тега [matlab] и [octave], если явно не задан вопрос о сходстве или различии между ними. При использовании этого тега, пожалуйста, укажите версию MATLAB, с которой вы работаете (например, R2017a).