作者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