MATLAB函数拟合指令,MATLAB拟合函数使用说明
(由于不方便上傳公式,有部分直接截圖)
2.?Polyval函數
對應多項式擬合,多項式求值函數也相當重要,可以通過設定向量,快速定義如下多項式
據此,可以大概猜測到polyval調用的形式了
y?=?polyval(p,x)
如上所述
[y,delta]?=?polyval(p,x,S)
S即為polyfit函數返回的誤差估計,具體delta的數學意義本人暫時不清楚
y?=?polyval(p,x,[],mu)
[y,delta]?=?polyval(p,x,S,mu)
結合polyfit的例子,可以嘗試將擬合曲線畫出來
x?=?-10?:?0.2?:?10;
y?=?0.59*x.*x?+?1.4*x+2+2*(rand(1,length(x))-0.5);
plot(x,y,'.')
[p,?S]?=?polyfit(x,y,2)
yfit?=?polyval(p,x);
hold?on
plot(x,yfit,?'r');
結果如下圖
1.?Fittype函數:滿足自定義復雜的擬合公式
使用fittype函數可以自定義擬合函數,可以滿足線性擬合和非線性擬合。Fittype函數具有很靈活的配置,基本滿足各種復雜場景,有相應的cftool工具箱。這里簡要的介紹一下fittype的使用方式
aFittype?=?fittype(libraryModelName)
Fittype?=?fittype(expression)
使用如上兩種方式,可以使用MATLAB已經實現的擬合算法或者使用自定義的擬合算法(可以引用.m文件),具體算法有‘poly11’,‘poly2’,‘linearinterp’等,具體詳見fittype的文檔說明。
Fittype?=?fittype(expression,Name,Value)?constructs?the?fit?type?with?additional?options?specified?by?one?or?more?Name,Value?pair?arguments.
這是常用公式,使用如下
g?=?fittype('a*time^2+b*time+c','independent','time','dependent','height');
可以制定擬合公式,變量和因變量,
g?=
General?model:
g(a,b,c,time)?=?a*time^2+b*time+c
使用fittype擬合polyfit例子的數據,如下
ftype?=?fittype('a*x.^2+b*x+c',?'independent',?'x',?'dependent',?'y');
pf?=?fit(x',y',ftype)
結果如下
>>?pf?=
General?model:
pf(x)?=?a*x.^2+b*x+c
Coefficients?(with?95%?confidence?bounds):
a?=??????0.5888??(0.585,?0.5927)
b?=???????1.398??(1.377,?1.418)
c?=????????2.04??(1.865,?2.216)
給出95%的置信率。
如果x為行向量,則如下報錯
Error?using?fit>iFit?(line?127)
X?must?be?a?matrix?with?one?or?two?columns.
結合上述幾個函數,我們做一個邏輯回歸的sigmoid函數擬合,具體場景見《分類算法之邏輯回歸》
x=2:2:20;?%月薪
y=[zeros(1,5)?ones(1,5)];?%滿意度
%簡單的線性擬合
p1=polyfit(x,y,1);
%高階線性擬合
p5=polyfit(x,y,5);
%sigmoid函數擬合
sf=fittype('1/(1+exp(-a*(x-10)))',?'independent',?'x');
ps=fit(x',y',sf)
%擬合結果展示
figure
plot(x,y,'o')
hold?on
xp=linspace(min(x),?max(x));
y1=polyval(p1,xp);
y5=polyval(p5,xp);
ys=1./(1+exp(-ps.a*(xp-10)));
plot(xp,?y1,?'r');
plot(xp,?y5,?'g');
plot(xp,?ys,?'k');
hold?off
總結
以上是生活随笔為你收集整理的MATLAB函数拟合指令,MATLAB拟合函数使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5--3.7 input元素(6
- 下一篇: 7月27