Вы получаете те же результаты, что и,
>> blsprice(S,K,r,t(end),sigma)
ans =
7.1509 6.6114 6.1092 5.6427 5.2102 4.8097
Это потому, что с помощью C(l) = ...
вы перезаписываете каждый элемент C
numel(t)
раз и, следовательно, сохраняете / возвращаете только последнийрассчитанные значения для каждого значения z
.
Как минимум, вам нужно использовать,
%C(l) = S*N1-K(l)*exp(-r*t(z))*N2;
C(z,l) = S*N1-K(l)*exp(-r*t(z))*N2;
Но вы также должны предварительно выделить свою выходную матрицу. То есть перед любым из циклов вы должны добавить
C = nan(numel(K),numel(t));
Наконец, вы должны заметить, что вам вообще не нужно использовать какие-либо циклы,
[Kmat,tmat] = meshgrid(K,t);
d1 = (log(S./Kmat) + (r + 0.5*sigma^2)*tmat)./(sigma*sqrt(tmat));
d2 = d1 - sigma*sqrt(tmat);
N1 = 0.5*(1+erf(d1/sqrt(2)));
N2 = 0.5*(1+erf(d2/sqrt(2)));
C = S*N1-Kmat.*exp(-r*tmat).*N2;