close
3459

Matlab程式(非線性回歸)

請問: 我們都知道

由曲線方程式要找線上的任一點是很簡單的

但是…… 如果有六個點座標(x0

y0)

(x1

y1)

(x2

y2)

(x3

y3)

(x4

y4)

(x5

y5)

而且是非線性的分佈

要如何找出它們的曲線方程式呢?? 例如:y=a1*exp(λ1*x) a2*exp(λ2*x) 其中:x0~x5是線性參數

但是y0~y5是非線性參數。

data=[x0 y0;x1 y1;x2 y2;x3 y3;x4 y4;x5 y5]; init_theta=[0 0 0 0]; theta=fminsearch('f'

init_theta

[]

data); . . 請詳細列出。

謝謝!!
非線性迴歸困難的原因如下:無法一次找到最佳解無法保證能夠找到最佳解須引用各種非線性最佳化的方法各種相關數學性質並不明顥以下為主程式範例:=============================================================data = [0 5.8955;   0.1 3.5639;   0.2   2.5173;   0.3   1.9790;   0.4   1.8990;   0.5   1.3938;   0.6   1.1359;   0.7   1.0096;   0.8   1.0343;   0.9   0.8435;   1.0   0.6856;   1.1   0.6100;   1.2   0.5392;   1.3   0.3946;   1.4   0.3903;   1.5   0.5474;   1.6   0.3459;   1.7   0.1370;   1.8   0.2211;   1.9   0.1704;   2.0   0.2636;   ];init_theta = [0 0 0 0];theta = fminsearch('f'

init_theta

[]

data);x = data(:

1);y = data(:

2);est_y = theta(1)*exp(theta(3)*x) theta(2)*exp(theta(4)*4);plot(x

y

'ro'

x

est_y

'b-');legend('Sample data'

'Regression curve');=============================================================function E=f(theta

data)x = data(:

1);y = data(:

2);model_y = theta(1)*exp(theta(3)*x) theta(2)*exp(theta(4)*x);E = sum((y-model_y).^2);=============================================================以上程式出處:書名:「MATLAB程式設計與應用」作者:張智星 著出版社:清蔚科技ISBN:957-97544-0-3=============================================================書中令有提到「混成法」(Hybrid)

若有興趣可自行查書

在第28章。

剛好在圖書館看到同樣的題型

希望能幫上你的忙 參考資料 MATLAB程式設與應用
這是標準的「迴歸」分析

你應該找數值分析裡的迴歸分析

或者利用Matlab裡的迴歸相關指命

迴歸

簡單來說就是你有Input值(x)及Output值(y)

由事先假設的方程式

如簡單的y = ax1 bx2

這邊的x1與x2不見得是「線性」

也可以是二次項

然後你可以用「最小平方法」來算出相應的係數

書不在手邊

不好回答這個問題

不過可以建議你讀「數值分析」

林丕靜著

這一書裡的迴歸分析會有你想要的解答

當然也包含過exp(ax)形式的迴歸。

至於相應的matlab函數

你應該查「regression」作關鍵字

就會找出相應的指命。

同豬皮所說

如果a1到an與λ1到λn都是待定係數

那就不曉得怎麼解

這邊提供一與原要求差一些的方式:Y= a*exp(bx)取lnln(Y) = ln(a) bx等同於Y = A BXY = [lny1;lny2; ...; lnyn];X = [1 x1; 1 x2; ...;1 x3];B = [a0;b1;b2;...];則B = inv(X'*X)*(X'*Y);如真得也要再加考慮a都不一樣

可能還要加入對a作偏微的條件

應該也是解得出來

可惜矩陣式我推不出來。


fminsearch是求已知方程式的最小值

例如方程式為x^2在x=0的時候有最小值。

你的問題用fminsearch可能不太恰當。

若λ1與λ2是已知正整數

在某些狀況下(Ex.λ1=1

λ2=2)

已知一數列的x與y

求a1與a2是很容易的。

若λ1與λ2是變數

那就要等高手回答了。


奧林兄提到:y = ax1 bx2

這邊的x1與x2不見得是「線性」。

但是如果x1與x2為「已知」函數

例如x1=x

x2=x^2

或x1=e^x

x2=e^2x

那方程式y即是「線性」。

當然可用「最小平方法」求得。

但發問者的問題是exp(λ1*x)與exp(λ2*x)

且λ1與λ2為未知數

若x

y為實驗數據

理論上來說是不可能求得最佳解

因為不同的λ1與λ2值

都可依最小平方法求得解

所以會有無限多解。


奧林兄所言甚是啊~~ 對y=a1*exp(λ1*x) a2*exp(λ2*x) 做a1

a2

λ1和λ2偏微了老半天

整理不出矩陣式

想不到最後找到書上範例竟是小弟一開始認為不恰當的fminsearch

真令人感到學問的無止境啊。


的確學無止境呀

想不到是用小弟主學的「最佳化技術」

看來小弟對主學汗顏、汗顏呀!


非線性剪輯,線性 非線性,非線性光學,非線性剪接,非線性系統,非線性規劃,非線性迴歸,非線性方程式,非線性函數,非線性思考非線性,程式,方程式,最佳解,張智星,Matlab,Regression curve,回歸,ISBN,曲線

ASP|參數|XML|TABLE|連結|遊戲|VB.net|原始碼|HTML|宣告|分析|VB|C |ASP.net|設計|TELNET|組合語言|條件|函數|RFID|8051|型別|命令|程式|PHP|字串|C|DOS|Push|陣列|

3459
參考:http://tw.knowledge.yahoo.com/question/question?qid=1105062100848如有不適當的文章於本部落格,請留言給我,將移除本文。謝謝!
arrow
arrow

    Flex XC 3401 發表在 痞客邦 留言(0) 人氣()