[問題] fminsearch函數初始值非常敏感 已回收

看板MATLAB作者 (黑白照片)時間14年前 (2011/10/25 21:07), 編輯推噓5(5010)
留言15則, 6人參與, 最新討論串1/1
由於我的最優參數解 只要改變一點參數初始值 最優參數解就完全變了 連符號都會改變 有時候還無法求解 想請問大家 我是不是目標函數有設錯 以下附上我函數設定 其中r,d都是已知的變量 這個問題已經困擾我很久了 真心的求助版上的高手 m(_ _)m function [llf,LogLikelihood]=LLF(para,r,d) T=length(r); h=zeros(T,1); c=para(1); h(1)=mean((r-ones(T,1)*mean(r)).^2); u(1:3)=r(1:3)-ones(3,1)*c; for t=4:T u(t)=r(t)-c-r(t-1:-1:t-3)'*para(2:4)-para(R+2)*r(t-3)*d(t); h(t)=para(5)+para(6)*u(t-1)^2+para(7)*h(t-1)+para(8)*d(t)+ para(9)*d(t)*u(t-1)^2+para(10)*d(t)*h(t-1)+ para(11)*d(t)*u(t-1)^2*h(t-1); end llf = -sum(log(h(4:T))+((u(4:T)).^2)'./h(4:T)); end objectionfun = @(para) -LLF(para,r,d); para0=[-0.001688;0.010819;-0.129009;-0.057876;0;0.15;0.75]; options = optimset('MaxFunEvals',10000000,'MaxIter',100000,'TolX',1e-20,'Hessian','bfgs','Algorithm','interior-point'); [parae,llfs,exitflag,output] = fminsearch(objectionfun,para0,options); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.27.41.183

10/25 22:45, , 1F
改用fmincon
10/25 22:45, 1F

10/25 22:48, , 2F
TOLX 太小了吧 DOUBLE的精確度也沒那麼高
10/25 22:48, 2F

10/25 22:54, , 3F
不過我一開始用fmincon也有這個問題
10/25 22:54, 3F

10/25 23:03, , 4F
不是TOLX的問題耶 我拿掉還是一樣
10/25 23:03, 4F

10/26 00:04, , 5F
先畫畫看你要的範圍內的函數圖形
10/26 00:04, 5F

10/26 00:05, , 6F
再把區間細切成好幾個點去當初始值收斂
10/26 00:05, 6F

10/26 00:06, , 7F
畫出來你就知道要分隔多大多小比較適當
10/26 00:06, 7F

10/26 00:06, , 8F
解可能很多個~~當然會收斂到不同解
10/26 00:06, 8F

10/26 00:46, , 9F
它的解很多 任一個參數初始值變動0.001都會收斂到不同解
10/26 00:46, 9F

10/26 00:46, , 10F
所以想讓大家幫我看看 我的程序有寫錯嗎?
10/26 00:46, 10F

10/26 00:47, , 11F
如果不是我程序的問題 我可能就要修改我的模型設定
10/26 00:47, 11F

10/26 00:49, , 12F
還是matlab最優化函數對初始值很敏感 尤其又沒有限制條件
10/26 00:49, 12F

10/26 10:02, , 13F
是不是model還沒有identified啊?加入constrait?
10/26 10:02, 13F

10/27 13:33, , 14F
恐怕你的model就容許多組參數都可達到最優fit
10/27 13:33, 14F

10/27 13:34, , 15F
那就不是程式碼問題了,而是model的數學或物理問題
10/27 13:34, 15F
文章代碼(AID): #1EfhHz8b (MATLAB)