Вам не нужно явно писать цикл for
, так как вы уже векторизовали его.Другими словами, Sfinal
и S_h
являются векторами длины M
, а их i
-ые записи соответствуют S_i
и S^h_i
на изображении.Поскольку правая часть выражения delta
соответствует вектору длины M
, который содержит все значения дельты, вы должны присвоить этот вектор непосредственно delta
, а не delta(i)
.
Еще одна вещь: псевдокод на изображении, кажется, предполагает, что одно и то же случайное число должно использоваться для вычисления S_i
и S^h_i
.Это не относится к вашему коду, так как вы вызываете randn
отдельно для вычисления Sfinal
и S_h
.Я думаю, вы должны сгенерировать случайные выборки один раз, сохранить их, а затем использовать их для обоих вычислений.
Вот код:
randn('state', 100)
%Problem and method parameters
S=10; E=9; sigma=0.1; r=0.06; T=1;
Dt=1e-3; N=T/Dt; M=2^17;h=10^(-4);
xi = randn(M,1);
Sfinal = S*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*xi);
S_h = (S+h)*exp((r-0.5*sigma^2)*T+sigma*sqrt(T).*xi);
delta = exp(-r*T).*(max(Sfinal-E,0)-max(S_h-E,0))/h;
aM=mean(delta);
bM=std(delta);
conf=[aM-1.96*bM/sqrt(M),aM+1.96*bM/sqrt(M)]