[問題] lsqnonlin

看板MATLAB作者 (方頭)時間13年前 (2012/04/21 20:42), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
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

04/22 21:31, , 1F
optimset設的條件太鬆?
04/22 21:31, 1F

04/28 21:48, , 2F
不是條件設定太鬆,是犯了一點邏輯上的錯誤
04/28 21:48, 2F

04/28 21:48, , 3F
謝謝一樓給的建議,已有神人幫忙解決囉,感謝!
04/28 21:48, 3F
文章代碼(AID): #1Fagj2FP (MATLAB)