matlab的擬合函數polyfit()函數


 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

 

 

 

 

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-.');

 

注:紅色是三次擬合的結果。

綠色是四次擬合的結果。

 例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表示擬合的殘差的二范。


 

以下例子的來源:https://blog.csdn.net/qq_33591755/article/details/82453757

有如下數據

時間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))]));

 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('人口數據');

 

 
        

 

 

 

 

 


 

最佳擬合次數的確定:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM