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];endP(:,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