Matlab 曲線擬合之polyfit與polyval函數


p=polyfit(x,y,n)

[p,s]= polyfit(x,y,n)

說明:x,y為數據點,n為多項式階數,返回p為冪次從高到低的多項式系數向量p。x必須是單調的。矩陣s用於生成預測值的誤差估計。

 

多項式曲線求值函數:polyval( )

調用格式: y=polyval(p,x)

[y,DELTA]=polyval(p,x,s)

說明:y=polyval(p,x)為返回對應自變量x在給定系數P的多項式的值。

[y,DELTA]=polyval(p,x,s) 使用polyfit函數的選項輸出s得出誤差估計Y DELTA。它假設polyfit函數數據輸入的誤差是獨立正態的,並且方差為常數。則Y DELTA將至少包含50%的預測值。

 

有如下數據

時間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);
plot(t, polyval(p1, t));
axis([1900 2000 0 300]);                                  %圖像xy軸范圍

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

結果如下:

y=   0.0094289 t^2 - 34.7482 t + 32061.5711
a=0.0094289   b=-34.7482   c=32061.5711

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

 


免責聲明!

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



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