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

1 visualización (últimos 30 días)
Shawn Miller
Shawn Miller el 5 de Oct. de 2015
Comentada: Shawn Miller el 6 de Oct. de 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 comentarios
Shawn Miller
Shawn Miller el 6 de Oct. de 2015
Editada: Shawn Miller el 6 de Oct. de 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 el 6 de Oct. de 2015
Editada: Joseph Cheng el 6 de Oct. de 2015
shawn read the cyclist's answer to remedy your comment above.

Iniciar sesión para comentar.

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Financial Toolbox en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by