Why I can't get my output? What's wrong with line 13?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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
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.
Réponse acceptée
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.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Financial Toolbox dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!