——轉載網絡
在科學計算和工程應用中,經常會遇到需要擬合一系列的離散數據,最近找了很多相關的文章方法,在這里進行總結一下其中最完整、幾乎能解決所有離散參數非線性擬合的方法
第一步:得到散點數據
根據你的實際問題得到一系列的散點
例如:
x=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]';%加上一撇表示對矩陣的轉置
y=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]';
第二步:確定函數模型
根據上述的實際散點確定應該使用什么樣的曲線,或者說是想要模擬的曲線
t=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]';
tt=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]';
plot(t,tt,'.');%得到散點圖
散點圖如下所示:
我們已知現存的幾種典型的(也是絕大多數情況下的函數模型)
選定一個與散點圖像相匹配的函數模型,在此例中我們選擇典型的S型曲線模型y= 1/(a+b*e^(-x)),其實此處的函數模型可以任意。
第三步:確定選用函數模型中的未知參數
首先了解一下matlab中的inline函數,inline是用來定義內聯函數的
比如說:
y=inline('sin(x)','x') %第一個參數是表達式,第二個參數是函數變量
y(0) %計算sin(0)的值
y(pi) %計算sin(pi)的值
q=quad(y,0,1); %計算sin(x) 在0到1上的積分
之后,我們在代碼中進行函數的定義
x=[3.2,3.6,3.8,4,4.2,4.5,4.8,5,5.3,5.4,5.6,5.8,6,6.2,6.4,6.6,6.9,7.1]';
y=[0.38,0.66,1,0.77,0.5,0.33,0.66,0.83,0.33,1,0.33,0.5,0.33,0.71,0.71,1,0.87,0.83]';
myfunc = inline('1./(beta(1)+beta(2).*exp(-x))','beta','x');%三個參數分別為:函數模型(注意需要使用點除和點乘),待定系數,自變量
beta0 = [0.2,0.2]';%待定系數的預估值
beta = nlinfit(x,y,myfunc,beta0);%
其中,beta返回了非線性擬合之后的待定系數,beta(1)和beta(2)表示待定系數,可以為任意數量的擴展beta(n),也就說明了選擇函數模型的自由性,甚至可以有100個參數!
beta0表示的是函數模型中待定系數的預估值,可以任意設定
matlab 中的nlinfit(x,y,f,a)函數:用於擬合非線性表達式的函數
f:符號函數句柄,如果是以m文件的形式調用的時候,別忘記加@.這里需要注意,f函數的返回值是和y匹對的,即擬合參數的標准是(f-y)^2取最小值,具體看下面的例子
a:最開始預估的值(預擬合的未知參數的估計值)。如上面的問題如果我們預估A為1,B為2,則a=[1 2]
x:我們已經獲知的x的值
y:我們已經獲知的x對應的y的值(這部分不懂的在matlab中help命令進行了解)
求解出beta的大小:beta(1) = 1.1562 beta(2) = 15.1875;
畫圖:使用plot()函數
t=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]';
tt=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]';
plot(t,tt,'.');
hold on%保證同時顯示
x = 0:0.01:8;
y = 1./(1.1562+15.1875.*exp(-x));
plot(x,y);
結果:是不是很棒!~,另外可以自行加上對應的橫縱坐標內容,這里就不多說了。
總結一下matlab非線性擬合散點圖的過程:得到散點數據=>確定函數模型=>求解函數模型的待定系數=>得到擬合函數的具體形式=>畫出擬合圖像
=========================================================================================
用過Matlab的擬合、優化和統計等工具箱的網友,會經常遇到下面幾個名詞:
SSE(和方差、誤差平方和):The sum of squares due to error
MSE(均方差、方差):Mean squared error
RMSE(均方根、標准差):Root mean squared error
R-square(確定系數):Coefficient of determination
Adjusted R-square:Degree-of-freedom adjusted coefficient of determination
下面我對以上幾個名詞進行詳細的解釋下,相信能給大家帶來一定的幫助!!
一、SSE(和方差)
該統計參數計算的是擬合數據和原始數據對應點的誤差的平方和,計算公式如下
SSE越接近於0,說明模型選擇和擬合更好,數據預測也越成功。接下來的MSE和RMSE因為和SSE是同出一宗,所以效果一樣
二、MSE(均方差)
該統計參數是預測數據和原始數據對應點誤差的平方和的均值,也就是SSE/n,和SSE沒有太大的區別,計算公式如下
三、RMSE(均方根)
該統計參數,也叫回歸系統的擬合標准差,是MSE的平方根,就算公式如下
在這之前,我們所有的誤差參數都是基於預測值(y_hat)和原始值(y)之間的誤差(即點對點)。從下面開始是所有的誤差都是相對原始數據平均值(y_ba)而展開的(即點對全)!!!
四、R-square(確定系數)
在講確定系數之前,我們需要介紹另外兩個參數SSR和SST,因為確定系數就是由它們兩個決定的
(1)SSR:Sum
of squares of the regression,即預測數據與原始數據均值之差的平方和,公式如下
(2)SST:Total sum of squares,即原始數據和均值之差的平方和,公式如下
細心的網友會發現,SST=SSE+SSR,呵呵只是一個有趣的問題。而我們的“確定系數”是定義為SSR和SST的比值,故
其實“確定系數”是通過數據的變化來表征一個擬合的好壞。由上面的表達式可以知道“確定系數”的正常取值范圍為[0
1],越接近1,表明方程的變量對y的解釋能力越強,這個模型對數據擬合的也較好。