Why I can't get my output? What's wrong with line 13?
2 ビュー (過去 30 日間)
古いコメントを表示
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/149773/image.png)
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 件のコメント
Joseph Cheng
2015 年 10 月 6 日
編集済み: Joseph Cheng
2015 年 10 月 6 日
shawn read the cyclist's answer to remedy your comment above.
採用された回答
the cyclist
2015 年 10 月 5 日
編集済み: the cyclist
2015 年 10 月 6 日
[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.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Price and Analyze Financial Instruments についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!