matlab的多项式拟合:

polyfit()函数

 功能:在最小二乘法意义之上,求解Y关于X的最佳的N次多项式函数。



clc;clear;
close all;
x=[1 2 3 4 5];
y=[2.7 7.4 20.0 54.5 148.4];
r=corrcoef(x,y) ;%两个变量的相关系数
a=polyfit(x,y,2)
x1=1:0.1:5;
P=polyval(a,x1);%a是多项式拟合后返回的系数
figure(1);hold on;plot(x,y,'r*',x1,P,'b-.');


注:a是返回的两次多项式的系数,返回结果是:14.3071  -51.9929   45.2000,这意味着拟合的多项式是:

 y=45.2000+(-51.9929)*x+14.3071*x^2

matlab的拟合函数polyfit()函数_返回结果

 

 

 

 



clc;clear;
close all;
x=[1 2 3 4 5];
y=[2.7 7.4 20.0 54.5 148.4];
r=corrcoef(x,y) ;
%a=polyfit(x,y,2)
b=polyfit(x,y,3)
c=polyfit(x,y,4)
x1=1:0.1:5;
%Pa=polyval(a,x1);%a是多项式拟合后返回的系数
Pb=polyval(b,x1);%a是多项式拟合后返回的系数
Pc=polyval(c,x1);%a是多项式拟合后返回的系数
%figure(1);hold on;plot(x,y,'r*',x1,Pa,'b-.');
figure(1);hold on;plot(x,y,'r*',x1,Pb,'r-.');
figure(1);hold on;plot(x,y,'r*',x1,Pc,'g-.');


 

matlab的拟合函数polyfit()函数_返回结果_02

注:红色是三次拟合的结果。

绿色是四次拟合的结果。

 例1:



clc;clear;
close all;
x=[1 2 3 4 5];
y=[2.7 7.4 20.0 54.5 148.4];
r=corrcoef(x,y) ;
%a=polyfit(x,y,2)
[b s]=polyfit(x,y,3)
%c=polyfit(x,y,4)
x1=1:0.1:5;
%Pa=polyval(a,x1);%a是多项式拟合后返回的系数
Pb=polyval(b,x1);%a是多项式拟合后返回的系数
%Pc=polyval(c,x1);%a是多项式拟合后返回的系数
%figure(1);hold on;plot(x,y,'r*',x1,Pa,'b-.');
figure(1);hold on;plot(x,y,'r*',x1,Pb,'r-.');
%figure(1);hold on;plot(x,y,'r*',x1,Pc,'g-.');


注:[b s]=polyfit(x,y,3) %这里返回的s是个结构体,s中的normr表示拟合的残差的二范。



 

有如下数据



时间t



1900



1910



1920



1930



1940



1950



1960



1970



1980



1990



2000



人口y



76



92



106



123



132



151



179



203



227



250



281



1. y与t的经验公式为 y = at^2 + bt + c



clear;
clf; %清除当前窗口
clc;
t = 1900:10:2000; %时间t
y = [76 92 106 123 132 151 179 203 227 250 281]; %人口y

plot(t,y,'k*');
hold on;
% figure;                          %重新开一个图
p1 = polyfit(t,y,2);
h=polyval(p1, t);
plot(t, h);
axis([1900 2000 0 300]); %图像xy轴范围

disp(char(['y=',poly2str(p1,'t')],['a=',num2str(p1(1)),' b=',...
num2str(p1(2)),' c=',num2str(p1(3))]));


matlab的拟合函数polyfit()函数_多项式拟合_03

 2. y与t的经验公式为y = a e^(bt)



clear;
clf; %清除当前窗口
clc;
t = 1900:10:2000; %时间t
y = [76 92 106 123 132 151 179 203 227 250 281]; %人口y
yy = log(y); %指数基尼必需的线性化变形
p2 = polyfit(t,yy,1);
b = p2(1);
a = exp(p2(2));
y2 = a * exp(b*t); %指数拟合函数式
plot(t,y,'rp',t,y2,'k-');
grid off;
xlabel('时间t');
ylabel('人口数(百万)');
title('人口数据');


 


 

 

matlab的拟合函数polyfit()函数_多项式_04

 

 

 



 

最佳拟合次数的确定:



clc;clear;
close all;
x=[1 2 3 4 5];
y=[2.7 7.4 20.0 54.5 148.4];
for i=1:6
y2=polyfit(x,y,i);
Y=polyval(y2,x);%计算拟合函数在x处的值。
if sum((Y-y).^2)<0.1
c=i
break;
end
end