matlab的拟合函数polyfit()函数
生活随笔
收集整理的這篇文章主要介紹了
matlab的拟合函数polyfit()函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
matlab的多項(xiàng)式擬合:
polyfit()函數(shù)
功能:在最小二乘法意義之上,求解Y關(guān)于X的最佳的N次多項(xiàng)式函數(shù)。
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) ;%兩個(gè)變量的相關(guān)系數(shù) a=polyfit(x,y,2) x1=1:0.1:5; P=polyval(a,x1);%a是多項(xiàng)式擬合后返回的系數(shù) figure(1);hold on;plot(x,y,'r*',x1,P,'b-.');
注:a是返回的兩次多項(xiàng)式的系數(shù),返回結(jié)果是:14.3071 -51.9929 45.2000,這意味著擬合的多項(xiàng)式是:
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是多項(xiàng)式擬合后返回的系數(shù) Pb=polyval(b,x1);%a是多項(xiàng)式擬合后返回的系數(shù) Pc=polyval(c,x1);%a是多項(xiàng)式擬合后返回的系數(shù) %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-.');
注:紅色是三次擬合的結(jié)果。
綠色是四次擬合的結(jié)果。
例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是多項(xiàng)式擬合后返回的系數(shù) Pb=polyval(b,x1);%a是多項(xiàng)式擬合后返回的系數(shù) %Pc=polyval(c,x1);%a是多項(xiàng)式擬合后返回的系數(shù) %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是個(gè)結(jié)構(gòu)體,s中的normr表示擬合的殘差的二范。
以下例子的來源:https://blog.csdn.net/qq_33591755/article/details/82453757
有如下數(shù)據(jù)
|
時(shí)間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的經(jīng)驗(yàn)公式為 y = at^2 + bt + c
clear;
clf; %清除當(dāng)前窗口
clc;
t = 1900:10:2000; %時(shí)間t
y = [76 92 106 123 132 151 179 203 227 250 281]; %人口y
plot(t,y,'k*');
hold on;
% figure; %重新開一個(gè)圖
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的經(jīng)驗(yàn)公式為y = a e^(bt)
clear;
clf; %清除當(dāng)前窗口
clc;
t = 1900:10:2000; %時(shí)間t
y = [76 92 106 123 132 151 179 203 227 250 281]; %人口y
yy = log(y); %指數(shù)基尼必需的線性化變形
p2 = polyfit(t,yy,1);
b = p2(1);
a = exp(p2(2));
y2 = a * exp(b*t); %指數(shù)擬合函數(shù)式
plot(t,y,'rp',t,y2,'k-');
grid off;
xlabel('時(shí)間t');
ylabel('人口數(shù)(百萬)');
title('人口數(shù)據(jù)');
最佳擬合次數(shù)的確定:
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);%計(jì)算擬合函數(shù)在x處的值。
if sum((Y-y).^2)<0.1
c=i
break;
end
end
總結(jié)
以上是生活随笔為你收集整理的matlab的拟合函数polyfit()函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python xpath提取转码_pyt
- 下一篇: python敏感字替换_教学案例_Pyt