Why I can't get my output? What's wrong with line 13?

1 vue (au cours des 30 derniers jours)
Shawn Miller
Shawn Miller le 5 Oct 2015
Commenté : Shawn Miller le 6 Oct 2015
function [call,put,calldif,putdif]=bs(S,r,T,sigma,K,q)
% S is current stock price
% r is annualized risk free rate
% T is time to expiration (in years)
% sigma is annualized stock return standard deviation/volatility
% K is strike price
% q is annualized dividend rate
temp1=(log(S/K)+(r-q+sigma^2/2)*T)/(sigma*T^0.5);
temp2=temp1-sigma*T^0.5;
call=S*exp(-q*T)*normcdf(temp1)-K*exp(-r*T)*normcdf(temp2);
put=-S*exp(-q*T)*normcdf(-temp1)+K*exp(-r*T)*normcdf(-temp2);
[a,b]=blsprice(S,K,r,T,sigma,q);
[calldif,putdif]=[call,put]-[a,b]
end
  5 commentaires
Shawn Miller
Shawn Miller le 6 Oct 2015
Modifié(e) : Shawn Miller le 6 Oct 2015
>> bs(100, 0.1, 0.25, 0.5, 95, 0)
Error using -
Too many output arguments.
Error in bs (line 17)
[calldif,putdif]=[call,put]-[a,b]
call, put, a, b are all scalers. call and put are what I attempt to compute using my defined formula, and a and b are the values computed using blsprice function in MATLAB. Basically, what I am doing here is to compare the two results.
Joseph Cheng
Joseph Cheng le 6 Oct 2015
Modifié(e) : Joseph Cheng le 6 Oct 2015
shawn read the cyclist's answer to remedy your comment above.

Connectez-vous pour commenter.

Réponse acceptée

the cyclist
the cyclist le 5 Oct 2015
Modifié(e) : the cyclist le 6 Oct 2015
[calldif, putdif] = [call,put] - [a,b]
is not valid MATLAB syntax. MATLAB can't distinguish how the right-hand variables should be sorted into the left-hand variables. The right-hand side is a 1x2 vector, and MATLAB doesn't "know" how you want that parceled out between the two output variables. It is similar to the (invalid) syntax
[x,y] = [[1 2 3],[4 5]] - [[5 6 7],[8 9]]
In that case, the right-hand side is a vector of length 5, and MATLAB would not know how to split it up between x and y.
Instead, you could do
callputdiff = [call,put] - [a,b]
calldiff = callputdiff(1);
putdiff = callputdiff(2);
Alternatively, you might not need to separate them at all, just keeping them in the vector while you operate on it. Similarly, perhaps call and put could just have been in a vector themselves.
  1 commentaire
Shawn Miller
Shawn Miller le 6 Oct 2015
Many thanks, I think I'll just change my output to a vector called "callputdiff".

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Financial Toolbox dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by