% Options Fin Diff pp556-7 FncOptns FiglewskiSilberSubrahmanyan B1IrwinNYU
% Written in MatLab. To recode in C, change col ops (:) and matrix inversion
% Student version of MatLab limited to n=30
s=50;r=.06;sig=.4472;dt=.25;x=45;n=10;h=log(s)/n;k=dt/n;dvrt=0;
a=k*(-.5*(sig/h)^2 +(r-dvrt-(sig^2)/2)/h/2);    b=1+r*k+k*(sig/h)^2;
c=k*(-.5*(sig/h)^2 -(r-dvrt-(sig^2)/2)/h/2);    lnSmin=h;
w=zeros(n,n); for i=1:n,w(i,n)=0;end
gmat=zeros(n,n);for i=2:(n-1),gmat(i,(i-1))=a;gmat(i,i)=b;gmat(i,(i+1))=c;end
gmat(1,1)=a+b;gmat(1,2)=c;gmat(n,(n-1))=a;gmat(n,n)=b;ivmat=inv(gmat);
for j=1:(n-1),
  nhmg=w(:,n-j+1);nhmg(1)=nhmg(1)-a*h*exp(lnSmin);w(:,n-j)=ivmat*nhmg; 
  for i=1:n,w(i,n-j)=max(exp(lnSmin+i*h)-x,w(i,n-j));end
end
' Values for stock back integrated to first time step '
format compact;format bank;[exp(lnSmin+h*(1:n))' w(:,1)]
' Black Scholes gives 7.62 at Stock 50 '
w(n-1,1)