偶是学经济的,编程七窍通六窍,这个matlab的程序也是扒下来的,可算改完不再显示各种各样的错误开始运行,可是一下午一晚上没关机也没出个结果,等待条一动不动。。。
谁能帮着给看看小女子先行谢过啦

function Y=MRJ(dP,dt,lambda,sigma,eta,Pm,dPhi)
format compact
filename = input('Enter test number: ', 's');
%%%%%%%%%%%%
% Real Option Parameters :
rho = 0.10; % Exogeneous discount rate
lambda = 0.15; % Annual frequency of jumps
sigma = 0.22; % Volatility
eta = 0.03; % Reversion speed
Pbar = 20; % Average oil price (US$/bbl)
D = 5; % Development cost (US$)
T = 10; % Lease period (Expiry) (in years)
q = 1/3; % Economic quality of the reserve
% Finite Difference Grid :
Pm = 40; % Truncation of the space grid
dP =0.1; % Space Grid interval
dt = 1e-4; % Time Grid interval
sigma1=1/8; m1=1/2;
sigma2=2/7; m2=2;
% Jump characteristics
% Reference to function pdf_phi
m1 = 1/2;
m2 = 2;
dPhi=5e-2; % Step size for discretisation of PDF of Phi
% Number of steps : 
K=3/dPhi
% Grid Parameters :
m = Pm/dP % Number of space steps, better be an integer
n = T/dt % Number of time steps, better be an integer
K=3/dPhi % Has to be an integer

%%%%%%%%%%%%
% Initialisation
t_stor=100;
k = (m1+m2)/2 -1;
for i = 0:m
P(i+1) = dP*i; % Prices scale
payoff(i+1)= max( q*P(i+1) - D , 0); % Payoff constraint
pplus(i+1) = 1/2 * dt *(sigma^2*i^2+i*eta*Pbar-i^2*eta*dP-i*lambda*k);
pzero(i+1) = dt*(1/dt-sigma^2*i^2 -lambda-rho);
pminus(i+1)= 1/2* dt *(sigma^2*i^2-i*eta*Pbar+i^2*eta*dP+i*lambda*k);
pjump(i+1) = dt*lambda;
end
vold = payoff;

%%%%%%%%%%%%
% Time loop
h = waitbar(0,'Please wait...');
time(n+1)=n*dt;
Stor(n/t_stor+1,:) = vold;
thres(n+1)=D/q;
for t = n-1:-1:0
 time(t+1)=t*dt;
 F(1)=0;
 % Space loop
 for i = 1:m
  % Expectation term
  for k = 1:K
    Phik = (k-1/2)*dPhi;
    lb = floor(i*Phik);
    ub = ceil(i*Phik);
    if ub<=m & lb~=ub
    vold2 = interp1([lb ub],[vold(lb+1) vold(ub+1)],i*Phik);
    elseif ub<=m & lb==ub
    vold2 = vold(lb);
    else
    vold2 = vold(m+1);
    end
    prob = dPhi*1/(2*sigma1*sqrt(2*pi))*exp(-1/2*((Phik-m1)/sigma1)^2)...
    +dPhi*1/(2*sigma2*sqrt(2*pi))*exp(-1/2*((Phik-m2)/sigma2)^2);
    expt(i+1)=cumsum(prob*vold2);
  end
  clear Phik lb ub prob % Elimination of unuseful variables
% Calculation of the Option value at time t
  vold(m+2)=max( q*(m+1)*dP - D , 0);

  F(i+1) = pplus(i+1)*vold(i+2) + pzero(i+1)*vold(i+1) + pminus(i+1)*vold(i) + pjump(i+1)*expt(i+1);
  if F(i+1)<payoff(i+1)
  F(i+1)=payoff(i+1); % Boundary condition
  end
  
%%%%%%%%%%
% Threshold
  if (F(i+1)==payoff(i+1)) & (F(i)~=payoff(i))
  thres(t+1)=i*dP;
  end
  
end
vold = F; % New initial guess


if t/t_stor==floor(t/t_stor)
tt=t/t_stor;
Stor(tt+1,:) = vold; % Storage
end
end
close(h)
F_init = F; % Initial value of the option
save(filename)
ans= F_init