matlab拟合线性,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

matlab拟合线性,Matlab 线性拟合 & 非线性拟合_第1张图片

法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)

matlab拟合线性,Matlab 线性拟合 & 非线性拟合_第2张图片

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)

matlab拟合线性,Matlab 线性拟合 & 非线性拟合_第3张图片

/***********************************非线性拟合***********************************/

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)

matlab拟合线性,Matlab 线性拟合 & 非线性拟合_第4张图片

法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

matlab拟合线性,Matlab 线性拟合 & 非线性拟合_第5张图片

你可能感兴趣的:(matlab拟合线性)