MATLAB: How To Fix an Infinite Recursion

errorinfinite recursion

I keep getting the following error when I run this code: "Out of memory. The likely cause is an infinite recursion within the program." It refers to this part of the code: "Error in AmericanPrice (line 4) P=AmericanPrice(0.08,0.12,0.2,100,50,10,300,3);" How can I fix this?
Update1: My bad, there was some typos in the code, it should be updated now! After entering the input arguments , i get this error "Undefined function 'find' for input arguments of type 'cell'. Error in AmericanPrice (line 32) bn=find(sign(diff(Pn)/dx+1)-1,1,{'last'})+bn;"
Update2: After changing "bn=find(sign(diff(Pn)/dx+1)-1,1,{'last'})+bn;" to "bn=find(sign(diff(Pn)/dx+1)-1,1,['last'])+bn;" i was able to get an output , im checking atm if it is the appropriate output
function [P,b]=AmericanPrice(r,delta,sigma,K,nx,nt,Xhat,That)
%Usage:P=AmericanPrice(r,delta,sigma,K,nx,nt,Xhat,That)
%Example:P=AmericanPrice(0.08,0.12,0.2,100,50,10,300,3);
dx=Xhat/nx;
dt=That/nt;
for i=1:nx-1
A(i,i:i+2)=[((r-delta)*dt*i-sigma^2*dt*i^2)/2...
1+r*dt+sigma^2*dt*i^2
(-(r-delta)*dt*i-sigma^2*dt*i^2)/2];
end
P(:,1)=max(K-[0:dx:Xhat],0);
if(delta==0)
b(1)=K;
else
b(1)=min(K,K*r/delta);
end
for j=2:nt+1
bn=0; run=1;
while(run)
An=[A(1+bn:end,1+bn:end)];
An(end+1,end-1:end)=[-1 1];
An(end+1,1)=1;
Cn=[P(bn+2:nx,j-1)' 0 K-bn*dx]';
Pn=inv(An)*Cn;
if(Pn(2)<K-((bn+1)*dx))
bn=find(sign(diff(Pn)/dx+1)-1,1,{'last'})+bn;
else
b(j)=bn*dx; run=0;
end
end
P(:,j)=[K-[0:bn-1]*dx Pn'];
end

Best Answer

Make a file called test.m and put this in it (assuming you have R2016b or later):
P=AmericanPrice(0.08,0.12,0.2,100,50,10,300,3);
function P = AmericanPrice(input1, input2, input3, input4, input5, input6, input7, input8);
dx=Xhat/nx;
dt=That/nt;
for i=1:nx-1
A(i,i:i+2)=[((r-delta)*dt*i-sigma^2*dt*i^2)/2
1+r*dt+sigma^2*dt*i^2
(-(r-delta)*dt*i-sigma^2*dt*i^2)/2];
end
P(:,1)=max(K-[0:dx:Xhat],0);
if(delta==0)
b(1)=K;
else
b(1)=min(K,K*r/delta);
end
for j=2:nt+1
bn=0; run=1;
while(run)
An=[A(1+bn:end,1+bn:end)];
An(end+1,end-1:end)=[-1 1];
An(end+1,1)=1;
Cn=[P(bn+2:nx,j-1)' 0 K-bn*dx]';
Pn=inv(An)*Cn;
if(Pn(2)<K-((bn+1)*dx))
bn=find(sign(diff(Pn)/dx+1)-1,1,{'last'})+bn;
else
b(j)=bn*dx; run=0;
end
end
P(:,j)=[K-[0:bn-1]*dx Pn'];
end
end
If you have an antique version of MATLAB you can't put that all into one file, so either have the first line be
function test()
P=AmericanPrice(0.08,0.12,0.2,100,50,10,300,3);
end
OR put this into test.m
P=AmericanPrice(0.08,0.12,0.2,100,50,10,300,3);
and the rest into an m-file called AmericanPrice.m