[問題] 關於非線性迴歸問題已回收

看板MATLAB作者 (head)時間17年前 (2008/11/23 02:37), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/1
要來麻煩版上大家了 最近在搞非線性迴歸 搞得一個頭兩個大 我是用 [beta,r,J] = nlinfit(X,y,fun,beta0) 去做 在nlinfit中要設定參數初始值beta0 想請問一下初始值要怎麼找才會迴歸才會成功 我都是自己設定初始值比如說beta0=[1 1 1]或beta0=[2 2 2] 可是有時會出現 Error using ==> nlinfit>checkFunVals MODELFUN has returned Inf or NaN value 想請問板上高手初始值要怎麼找才是正確的 ------------------------------------------------- 另外這是我在一個大陸網站找到的一個例子 它的問題如下: 對公式: y=2*(exp(a*b*X/2.)-1)/(a*x)中的参數 a,b 進行非線性迴歸,討論它的 收斂域。觀測次數43 ,迴歸時, ab可作為一個參數。 觀測值如下: y=2060.,2140.,2240.,2340.,2440.,2490.,2550.,2630.,2720.,2800.,2880. ,2940.,3010.,3080.,3140.,3200.,3240.,3280.,3330.,3380.,3420.,3460. ,3510.,3550.,3600.,3640.,3680.,3720.,3750.,3800.,3850.,3900.,3940. ,3980.,4020.,4060.,4110.,4150.,4180.,4210.,4230.,4250.,4280. t=0.3,0.4,0.5,0.6,0.7,… 4.2,4.3,4.4,4.5。 (從0.3始,間隔0.1,至4.5) 有一個人寫的code為: function F = fun(x, xdata) F= 2 * ( exp ( x(1) * x(2) * xdata ./ 2.0 ) - 1 ) ./ ( x(1) * xdata ); ---------------------------------------------------------------------- xdata = [0.3:0.1:4.5]; ydata = [2060.,2140.,2240.,2340.,2440.,2490.,2550.,2630.,2720.,2800.,2880.,2940.,3010. ,3080.,3140.,3200.,3240.,3280.,3330.,3380.,3420.,3460.,3510.,3550.,3600.,3640. ,3680.,3720.,3750.,3800.,3850.,3900.,3940.,3980.,4020.,4060.,4110.,4150.,4180. ,4210.,4230.,4250.,4280.]; x0 =[.2e-3, 2000]'; % Starting guess [betafit,r,J]=nlinfit(xdata,ydata,'fun',x0) 我好奇的是 他怎麼能一開始就知道初始值x0 =[.2e-3, 2000]' 還有題目中講到觀察參數a,b的收斂域是怎麼去觀察的呢 文章很長真是抱歉= = 只是非線性迴歸研究了好久我還是不懂 只好來向板上高手求救了 麻煩大家了謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.224.67 ※ 編輯: biggoodhead 來自: 60.250.224.67 (11/23 10:40)

11/23 13:28, , 1F
不知道初始值就利用Matlab強大的運算,用迴圈去跑
11/23 13:28, 1F

11/23 13:29, , 2F
用二次迴圈,每次都只加0.001跑個一千次,再看結果
11/23 13:29, 2F

11/24 15:52, , 3F
想請問樓上大大..若是用for迴圈去改初始值..但如果用
11/24 15:52, 3F

11/24 15:52, , 4F
到錯的初始值.跑到nlinfit那行就會出現error了..這樣
11/24 15:52, 4F

11/24 15:54, , 5F
for迴圈不就會中斷嗎.還是有別的寫法阿..麻煩了= =
11/24 15:54, 5F
文章代碼(AID): #19A55awV (MATLAB)
文章代碼(AID): #19A55awV (MATLAB)