Matlab的應用-多項式函式及多項式擬合
本節將向大家簡要介紹matlab 在多項式處理方面的應用。
多項式函式主要有:
roots 求多項式的根
poly 特徵多項式
polyval 多項式的計算
poly2str(p,'x')多項式代換
polyfit 多項式曲線擬合
conv 多項式乘法
deconv 多項式除法
polyder 微分多項式
polyint 多項式積分
下面我們將介紹這些函式的用法:
1,roots---求多項式的根
格式:roots(c)
說明:它表示計算一個多項式的根,此多項式係數是向量c的元素.如果c有n+1個元素,那麼此多項式為:
c(1)*x^n+c(2)*x^(n-1)+c(3)*x^(n-2)+--+c(n)*x+c(n+1)
2,poly---特徵多項式
格式:poly(a)
說明:(1)如果a是一個n階矩陣,poly(a)是一個有n+1個元素的行向量,這n+1個元素是特徵多項式的係數(降冪排列).
(2)如果a是一個n維向量,則poly(a)是多項式(x-a(1))*(x-a(2))*..(x-a(n)),即該多項式以向量a的元素為根。
3,polyval—多項式計算
格式:polyval(v,s)
說明:
如果v是一個向量,它的元素是一個多項式的係數,那麼polyval(v,s)是多項式在s處的值.
如果s是一個矩陣或是一個向量,則多項式在s中所有元素上求值
例如:
v=[1 2 3 4];vv=poly2str(v,’s’)
(即 v=s^3+2*s^2+3*s+4)
s=2;
x=polyval(v,s)
x =
26
例如:
v=[1 2 3 4];
s=[2 4];
polyval(v,s)
ans=26 112
4,conv-多項式乘法
例:as=[1 2 3]
as =
1 2 3
>> az=[2 4 2 1]
az =
2 4 2 1
>> conv(as,az)
ans =
2 8 16 17 8 3
conv(az,as)
ans =
2 8 16 17 8 3
5,deconv-多項式除法
例:deconv(az,as)%返回結果是商式的係數
ans =
2 0
[awwq,qw]=deconv(az,as)%awwq是商式的係數,qw是餘式的係數
awwq =
2 0
qw =
0 0 -4 1
6,polyder 微分多項式
polyder(as)
ans =
2 2
7,polyfit--多項式曲線擬合
格式::polyfit(x,y,n)
說明:polyfit(x,y,n)是找n次多項式p(x)的係數,這些係數滿足在最小二乘法意義下p(x(i)) ~= y(i).
“人口問題”是我國最大社會問題之一,估計人口數量和發展趨勢是我們制定一系列相關政策的基礎。有人口統計年鑑,可查到我國從1949年至1994年人口資料資料如下:
如何確定我國人口的發展變化規律呢?
一般地,我們採用下面的分析處理方法:
首先,在直角座標系上作出人口數與年份的散點圖象。觀察隨著年份的增加人口數與年份變化關係,初步估計出他們之間的關係可近似地可看做一條直線。那麼我們如何把這條直線方程確定出來呢?並用他來估計1999年我國的人口數。
方法一:先選擇能反映直線變化的兩個點,如(1949,541.67),(1984,1034.75)二點確定一條直線,方程為 N = 14.088 t – 26915.842 ,代入t =1999,得N »12.46億
方法二:可以多取幾組點對,確定幾條直線方程,將t = 1999代入,分別求出人口數,在取其算數平值。
方法三:可採用“最小二乘法”求出直線方程。這就是曲線擬合的問題。
方法一與方法二都具有一定的侷限性,下面我們重點介紹資料的曲線擬合。所謂曲線擬合是指給定平面上的n個點(xi,yi),i=1,2,….,n,找出一條曲線使之與這些點相當吻合,這個過程稱之為曲線擬合。最常見的曲線擬合是使用多項式來作擬合曲線。曲線擬合最常用的方法是最小二乘法。其原理是求f(x),使達到最小。matlab提供了基本的多項式曲線擬合函式命令polyfit
格式::polyfit(x,y,n)
說明:polyfit(x,y,n)是找n次多項式p(x)的係數,這些係數滿足在最小二乘法意義下p(x(i)) ~= y(i).
已知一組資料,用什麼樣的曲線擬合最好呢?可以根據散點圖進行直觀觀察,在此基礎上,選擇幾種曲線分別擬合,然後比較,觀察那條曲線的最小二乘指標最小。
下面我們給出常用的曲線(下面的為變數,等為引數)
直線:
多項式:(一般情況下,n不宜過高,n=2,3)
雙曲線:y=
指數曲線:
冪函式:
有些曲線的擬合,為了利用數學軟體,在擬合前需作變數替換,化為對未知數的線性函式。
思考:如果根據經驗,曲線是雙曲線或指數曲線及冪函式等,如何利用matlab的多項式擬合函式來作曲線擬合?
例2:在化學反應中,為研究某化合物的濃度隨時間的變化規律。測得一組資料如下表所示:
試求濃度y與時間t的經驗函式關係。並推斷第20、40分鐘時的濃度值。
本題是一個可以用資料的曲線擬合來解決的問題。下面是利用matlab編的一段程式。
clear;
%錄入資料
xy=[1 4
2 6.4
3 8.0
4 8.4
5 9.28
6 9.5
7 9.7
8 9.86
9 10
10 10.2
11 10.32
12 10.42
13 10.5
14 10.55
15 10.58
16 10.6];
x=xy(:,1);
y=xy(:,2);
plot(x,y,'r*');%畫出散點圖,觀察曲線走勢
hold on;t=0:.3:10;pxdxs=polyfit(x,y,2);
pxd=poly2str(pxdxs,'x')
pxdx=polyval(pxdxs,t);plot(t,pxdx,'-k')
方法2:解下述方程組:(這是超定方程組(方程個數大於未知數個數的方程),這個方程組沒有普遍意義下的解,但可以在最小二乘法意義下求解)
把它寫成矩陣乘法的形式:
y=a*[a,b,c]'
其中,a=[1,1,1;1 2 2^2;1 3 3^2;1 4 4^2;1 5 5^2;1 6 6^2;1 7 7^2; 1 8 8^2;1 9 9^2;1 10 10^2; …
1 11 11^2;1 12 12^2;1 13 13^2;1 14 14^2;1 15 15^2;1 16 16^2];
y=[4 6.4 8.0 8.4 9.28 9.5 9.7 9.86 10 10.2 10.32 10.42 10.5 10.55 10.58 10.6]';
於是,abc=a\y