作者kelocter (方头)
看板MATLAB
标题[问题] lsqnonlin
时间Sat Apr 21 20:42:40 2012
x0 = [0.1 0.01];
lb =[-Inf -Inf]; % searching lower bounds
ub =[Inf Inf]; % searching upper bounds
options=optimset('TolFun',1e-4,'TolX',1e-4,'DiffMinChange',1e-2,'MaxIter',30,'Display','off');
x=lsqnonlin(@(x) differ_HW(x, Bond_contract, Zero_curve), x0, lb, ub,options);
----------(以下为differ_HW)------------
function df=differ_HW(x, Bond_contract, Zero_curve)
% 输入参数
a=x(1);
sigma=x(2);
number_of_contract=size(Bond_contract,1);
%计算契约数目
theoreticalprice=zeros(number_of_contract,1);
%先设理论价起始值为0
% 跑所有契约的资料
for i=1:number_of_contract
dt=1/12;
%时间间隔,调整每年要几个nodes,这里为12个nodes
T=(Bond_contract(i,6)-Bond_contract(i,1))/365;
%契约存续期间
N=round(T/dt);
%存续期间总共有几个nodes
dt=T/N;
%重算出一个node的时间间隔
spot_curve = Zero_curve(find(Zero_curve(:,1) == Bond_contract(i,1)),:);
%产生市价当日的Term Structure
spot=interp1(spot_curve(:,2),spot_curve(:,3),dt:dt:T,'linear','extrap')./100;
%内插法算出每一个node的利率
theoreticalprice(i)=Backward(a,sigma,Bond_contract(i,4),spot,dt,N-1);
%计算理论价
clear spot_curve spot;
%清除该契约的Term Structure及每一个node的利率
end
%传回所有契约理论价与市价的价差比率
df=(theoreticalprice-Bond_contract(:, 12))./Bond_contract(:, 12);
以上为我的程式码
想请问版上的高手,为什麽我的x只进入lsqnonlin一次就回传出始值了?
拜托各位高手赐教
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.109.22
1F:推 kolun:optimset设的条件太松? 04/22 21:31
2F:→ kelocter:不是条件设定太松,是犯了一点逻辑上的错误 04/28 21:48
3F:→ kelocter:谢谢一楼给的建议,已有神人帮忙解决罗,感谢! 04/28 21:48