歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Matlab 線性擬合 & 非線性擬合

使用Matlab進行擬合是圖像處理中線條變換的一個重點內容,本文將詳解Matlab中的直線擬合和曲線擬合用法。

關鍵函數:


fittype

Fit type for curve and surface fitting

Syntax

ffun = fittype(libname)
ffun = fittype(expr)
ffun = fittype({expr1,...,exprn})
ffun = fittype(expr, Name, Value,...)
ffun= fittype({expr1,...,exprn}, Name, Value,...)

/***********************************線性擬合***********************************/

線性擬合公式:


coeff1 * term1 + coeff2 * term2 + coeff3 * term3 + ...其中,coefficient是系數,term都是x的一次項。

線性擬合Example:

Example1: y=kx+b;

法1:

x=[1,1.5,2,2.5,3];y=[0.9,1.7,2.2,2.6,3];
p=polyfit(x,y,1);
x1=linspace(min(x),max(x));
y1=polyval(p,x1);
plot(x,y,'*',x1,y1);

結果:p =    1.0200    0.0400

即y=1.0200 *x+ 0.0400

法2:

x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];
p=fittype('poly1')
f=fit(x,y,p)
plot(f,x,y);

運行結果:

 x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];
p=fittype('poly1')
f=fit(x,y,p)
plot(f,x,y);

p =

    Linear model Poly1:
    p(p1,p2,x) = p1*x + p2

f =

    Linear model Poly1:
    f(x) = p1*x + p2
    Coefficients (with 95% confidence bounds):
      p1 =        1.02  (0.7192, 1.321)
      p2 =        0.04  (-0.5981, 0.6781)

Example2:y=a*x + b*sin(x) + c
法1:

x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];
EXPR = {'x','sin(x)','1'};
p=fittype(EXPR)
f=fit(x,y,p)
plot(f,x,y);

運行結果:

 x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];
EXPR = {'x','sin(x)','1'};
p=fittype(EXPR)
f=fit(x,y,p)
plot(f,x,y);

p =

    Linear model:
    p(a,b,c,x) = a*x + b*sin(x) + c

f =

    Linear model:
    f(x) = a*x + b*sin(x) + c
    Coefficients (with 95% confidence bounds):
      a =      1.249  (0.9856, 1.512)
      b =      0.6357  (0.03185, 1.24)
      c =    -0.8611  (-1.773, 0.05094)

法2:

x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];
 p=fittype('a*x+b*sin(x)+c','independent','x')
f=fit(x,y,p)
plot(f,x,y);

運行結果:

x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];
 p=fittype('a*x+b*sin(x)+c','independent','x')
f=fit(x,y,p)
plot(f,x,y);

p =

    General model:
    p(a,b,c,x) = a*x+b*sin(x)+c
Warning: Start point not provided, choosing random start
point.
> In fit>iCreateWarningFunction/nThrowWarning at 738
  In fit>iFit at 320
  In fit at 109

f =

    General model:
    f(x) = a*x+b*sin(x)+c
    Coefficients (with 95% confidence bounds):
      a =      1.249  (0.9856, 1.512)
      b =      0.6357  (0.03185, 1.24)
      c =    -0.8611  (-1.773, 0.05094)

Example:y=a*x^2+b*x+c

法1:

x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];
 p=fittype('a*x.^2+b*x+c','independent','x')
f=fit(x,y,p)
plot(f,x,y);

運行結果:

p =

    General model:
    p(a,b,c,x) = a*x.^2+b*x+c
Warning: Start point not provided, choosing random start
point.
> In fit>iCreateWarningFunction/nThrowWarning at 738
  In fit>iFit at 320
  In fit at 109

f =

    General model:
    f(x) = a*x.^2+b*x+c
    Coefficients (with 95% confidence bounds):
      a =    -0.2571  (-0.5681, 0.05386)
      b =      2.049  (0.791, 3.306)
      c =      -0.86  (-2.016, 0.2964)

法2:

x=[1;1.5;2;2.5;3];y=[0.9;1.7;2.2;2.6;3];
%use c=0;
c=0;
p1=fittype(@(a,b,x) a*x.^2+b*x+c)
f1=fit(x,y,p1)
%use c=1;
c=1;
p2=fittype(@(a,b,x) a*x.^2+b*x+c)
f2=fit(x,y,p2)
%predict c
p3=fittype(@(a,b,c,x) a*x.^2+b*x+c)
f3=fit(x,y,p3)

%show results
scatter(x,y);%scatter point
c1=plot(f1,'b:*');%blue
hold on
plot(f2,'g:+');%green
hold on
plot(f3,'m:*');%purple
hold off

Ubuntu Server上安裝Matlab http://www.linuxidc.com/Linux/2014-09/106242.htm

Matlab與C/C++聯合編程之從Matlab調用C/C++代碼 http://www.linuxidc.com/Linux/2012-08/68148.htm

二分類SVM方法Matlab實現 http://www.linuxidc.com/Linux/2013-05/84050.htm

Matlab中的取整函數fix, floor, ceil與round http://www.linuxidc.com/Linux/2013-10/91161.htm

Matlab編譯cuda的.cu文件 http://www.linuxidc.com/Linux/2014-04/100675.htm

Linux Matlab服務器進一步改造成Application Server(應用程序服務器) http://www.linuxidc.com/Linux/2014-09/106340.htm

Copyright © Linux教程網 All Rights Reserved