function [y]=AmericanPutClassic (St,t)
% S0 = 100;
K = 100;
r = 0.05;
sigma = 0.3;
T = 2;
nsteps = 5;
% St
dt = T / nsteps;
u=exp(sigma*sqrt(dt));
d=1/u;
Pu=(exp(r*dt)-d)/(u-d);
Pd=1-Pu;
if t==T
y=max(K-St,0);
return
elseif t<T
upPrice=AmericanPutClassic(St*u,t+dt);
downPrice=AmericanPutClassic(St*d,t+dt);
PrevPrice=(Pu*upPrice+Pd*downPrice)*exp(-r*dt);
if max(K-St,0) > PrevPrice
y=max(K-St,0);
else
y=PrevPrice;
end
return
end
end
私のコードは仕事をしていると思いますが、「nsteps」を 5 より大きくするとクラッシュします...さまざまなエラーが発生し続けます...5 より大きいとコードに問題があるとだけ表示されます... 「??? 最大再帰制限の 500 に達しました。set(0,'RecursionLimit',N) を使用して制限を変更してください。使用可能なスタック領域を超えると、MATLAB やコンピューターがクラッシュする可能性があることに注意してください。」
誰でも問題を見つけることができますか?まず、AmericanPutClassic(100,0) を呼び出します...
ありがとう