Error using plot: vectors must be the same lengths
3 ビュー (過去 30 日間)
古いコメントを表示
Anthony Knighton
2021 年 4 月 21 日
コメント済み: Anthony Knighton
2021 年 4 月 21 日
I am trying to plot two function in the same file; however, I am getting the following error: "Error using plots: vectors must be the same lengths". The rest of the code works. The only problem in in the plotting. I can plot them individually, but I cannot plot them together. Please help me to find a way to do this. Here is my code:
clear; clc;
% Definition of all variables and functions
% Stock price
variance = 1; % Variance
average = 0; % Average
t = 10000; % Time
stock_value(1) = 200; % Initial stock value
% Delta hedging
K = 200; % Strike price
r = 0.05; % Risk free interest rate
sigma = 0.4; % Volatility of asset
tau = 1; % Time constant
d1(1) = (1/sigma*sqrt(tau))*(log(stock_value(1)/K)+(r+(sigma^2)/2)*tau);
N(1) = normcdf(d1(1));
delta(1) = exp(-r*tau)*N(1);
for j=2:t
% Monte Carlo somulation of stock price
stock_value(j) = stock_value(j-1) + randn*variance;
if stock_value(j) > 1
variance = 0.5;
elseif stock_value < -1
stock_value = 2;
else
variance = 1;
end
% Delta hedging
d1(j) = (1/sigma*sqrt(tau))*(log(stock_value(j)/K)+(r+(sigma^2)/2)*tau);
% Cumulative normal distribution
N(j) = normcdf(d1(j));
% Delta
delta(j) = exp(-r*tau)*N(j);
end
% Plots
x = linspace(0,t);
y1 = stock_value;
y2 = delta;
tiledlayout(2,1)
% Top plot
ax1 = nexttile;
plot(ax1,x,y1)
title(ax1,'Stock Value')
ylabel(ax1,'S_t')
% Bottom plot
ax2 = nexttile;
plot(ax2,x,y2)
title(ax2,'Delta to Maturity')
ylabel(ax2,'delta_t')
% Show results
% Stock value
fprintf('initial stock value =%.8f\n',stock_value(1))
fprintf('stockvalue at first quarter =%.8f\n',stock_value(t/4))
fprintf('stockvalue at second quarter =%8f\n',stock_value(t/2))
fprintf('stockvalue at third quarter =%.8f\n',stock_value((3*t)/4))
fprintf('final stockvalue =%.8f\n',stock_value(t))
% Delta
fprintf('initial delta =%.8f\n',delta(1))
fprintf('delta at first quarter =%.8f\n',delta(t/4))
fprintf('delta at second quarter =%.8f\n',delta(t/2))
fprintf('delta at third quarter =%.8f\n',delta((3*t)/4))
fprintf('delta at maturity =%.8f\n',delta(t))
0 件のコメント
採用された回答
Clayton Gotberg
2021 年 4 月 21 日
編集済み: Clayton Gotberg
2021 年 4 月 21 日
The problem is that x and y1 (and y2) are different sizes. Look at the linspace documentation -
A = linspace(start,end);
returns 100 evenly spaced points between the start and end values. If you want to create a vector climbing by 1 from zero to the value of t, instead try
t_vec = 0:t; % start:step:end (if step isn't included it's assumed to be 1)
Also note that your other arrays start at t = 1, so you'll likely want this to start at 1 as well.
When I change
x = linspace(0,t);
to
x = 1:t;
I am able to execute your code without other errors.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Get Started with MATLAB についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!