Raspberry 发表于 2016-5-4 10:13

Matlab 线性拟合 & 非线性拟合

fittypeFit type for curve and surface fittingSyntax<font color="#000000">ffun = fittype(libname)
ffun = fittype(expr)
ffun = fittype({expr1,...,exprn})
ffun = fittype(expr, Name, Value,...)
ffun= fittype({expr1,...,exprn}, Name, Value,...)</font>线性拟合公式:coeff1 * term1 + coeff2 * term2 + coeff3 * term3 + ...其中,coefficient是系数,term都是x的一次项。线性拟合Example:Example1: y=kx+b;法1:<font color="#000000"> view plaincopyprint?
x=;y=;
p=polyfit(x,y,1);
x1=linspace(min(x),max(x));
y1=polyval(p,x1);
plot(x,y,'*',x1,y1); </font>
结果:p =    1.0200    0.0400即y=1.0200 *x+ 0.0400<font color="#000000">法2:
view plaincopyprint?
x=;y=;
p=fittype('poly1')
f=fit(x,y,p)
plot(f,x,y);
运行结果:
view plaincopyprint?
x=;y=;
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)</font><font color="#000000">Example2:y=a*x + b*sin(x) + c
法1:
view plaincopyprint?
x=;y=;
EXPR = {'x','sin(x)','1'};
p=fittype(EXPR)
f=fit(x,y,p)
plot(f,x,y);
运行结果:
view plaincopyprint?
x=;y=;
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:
view plaincopyprint?
x=;y=;
p=fittype('a*x+b*sin(x)+c','independent','x')
f=fit(x,y,p)
plot(f,x,y);
运行结果:
view plaincopyprint?
x=;y=;
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)</font><font color="#000000">Example:y=a*x^2+b*x+c
法1:
view plaincopyprint?
x=;y=;
p=fittype('a*x.^2+b*x+c','independent','x')
f=fit(x,y,p)
plot(f,x,y);

运行结果:
view plaincopyprint?
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)</font><font color="#000000">法2:
view plaincopyprint?
x=;y=;
%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</font>转自:http://blog.sina.com.cn/s/blog_6c41e2f30101c48i.html

页: [1]
查看完整版本: Matlab 线性拟合 & 非线性拟合