[問題] lsqnonlin
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
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