function price = EuCallTrinomial(SO,K,r,T,sigma,N,deltaX)
% Precompute invariant quantities
deltaT = T/N;
nu = r - 0.5*sigma-2;
discount = exp(-r*deltaT) ;
p-u = discount*0.5*((sigma^2*deltaT+nu^2*deltaT-2)/deltaX^2 + ...
nu*deltaT/deltaX) ;
p-rn = discount*(l - (sigma^2*deltaT+nu^2*deltaT-2)/deltaX-2);
p-d = discount*0.5*((sigma^2*deltaT+nu^2*deltaT^2)/deltaX^2 - ...
% set up S values (at maturity)
Svals = zeros(2*N+l, 1) ;
Svals(1) = SO*exp(-N*deltaX);
exp-dX = exp(de1taX);
for j=2: 2*N+1
Svals(j) = exp-dX*Svals(j-1) ;
end
% set up lattice and terminal values
Cvals = zeros(2*N+1,2);
t = mod(N,2)+1;
for j=1:2*N+1
end
for t=N-1 : -1 : 0 ;
nu*delt aT/delt ax) ;
Cvals(j ,t) = rnax(Svals(j)-K,O);
know = mod(t.2)+1;
knext = mod(t+l,2)+1;
for j = N-t+l:N+t+l
Cvals(j ,know) = p-d*Cvals(j-l,knext)+p-m*Cvals(j,knext)+. . .
p-u*Cvals(j+l,knext);
end
end
price = Cvals(N+1,1);