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

1 view (last 30 days)
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 Comments
Shawn Miller
Shawn Miller on 6 Oct 2015
Edited: Shawn Miller on 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 on 6 Oct 2015
Edited: Joseph Cheng on 6 Oct 2015
shawn read the cyclist's answer to remedy your comment above.

Sign in to comment.

Accepted Answer

the cyclist
the cyclist on 5 Oct 2015
Edited: the cyclist on 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 Comment
Shawn Miller
Shawn Miller on 6 Oct 2015
Many thanks, I think I'll just change my output to a vector called "callputdiff".

Sign in to comment.

More Answers (0)

Categories

Find more on Financial Toolbox in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!