查看单个帖子
旧 2019-12-01, 00:20   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
默认 量化金融Cox Ingersoll Ross将Matlab转换为R,从lsqnonlin转换为nls

我正在尝试将以下旧的Matlab转换为R。这是旧的matlab代码:

sw=[2.40096 2.72778 3.09914 3.25061 3.29394 3.63792 3.90653 3.92677 3.85058 4.14440 4.43973 4.27808 4.82375 4.56853 4.86894]./100; tau = [1;2;3;4;5;6;7;8;9;10;12;15;20;25;30]; T=(1:tau(end))'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Calibration CIR%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [d,fi,ni,r,SSE,scarti]=calibCir(x0,lb,ub,T,tau,swap) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Data%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % x0 = [0.2 0.12 0.8 0.02]; % Lower bounds % lb = [0 0 0 10^-8]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% options=optimset('tolfun',10e-20,'maxfunevals',20000,'tolx',10e-20,'tolfun',10e-20,'maxiter',20000); [P,SSE,scarti] = lsqnonlin(@fun,x0,lb,ub,options,T,tau,swap); d = P(1); fi = P(2); ni = P(3); r = P(4); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [F] = fun(x,T,tau,swap) A_tau = ((x(1)*exp(x(2).*T))./(x(2)*(exp(x(1).*T)-1)+x(1))).^x(3); B_tau = (exp(x(1).*T)-1)./(x(2)*(exp(x(1).*T)-1)+x(1)); v_model = A_tau.*exp(-x(4).*B_tau); % model prices % where: x(1)=d, x(2)=fi, x(3)=ni, x(4)=r sum_v_model = cumsum(v_model); Q = 100; Z = 100*swap.*sum_v_model(tau)+v_model(tau).*100; F = ZQ; end end 这是我正在构建的新R代码:

sw
poster 当前离线   回复时引用此帖