matlab多項式
- 電腦
- 關注:2.33W次
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=[1234];vv=poly2str(v,’s’)
(即v=s^3+2*s^2+3*s+4)
s=2;
x=polyval(v,s)
x=
26
例如:
v=[1234];
s=[24];
polyval(v,s)
ans=26112
4,conv-多項式乘法
例:as=[123]
as=
123
>>az=[2421]
az=
2421
>>conv(as,az)
ans=
28161783
conv(az,as)
ans=
28161783
5,deconv-多項式除法
例:deconv(az,as)%返回結果是商式的係數
ans=
20
[awwq,qw]=deconv(az,as)%awwq是商式的係數,qw是餘式的係數
awwq=
20
qw=
00-41
6,polyder微分多項式
polyder(as)
ans=
22
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.088t–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=[14
26.4
38.0
48.4
59.28
69.5
79.7
89.86
910
1010.2
1110.32
1210.42
1310.5
1410.55
1510.58
1610.6];
x=xy(:,1);
y=xy(:,2);
plot(x,y,'r*');%畫出散點圖,觀察曲線走勢
holdon;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;122^2;133^2;144^2;155^2;166^2;177^2;188^2;199^2;11010^2;…
11111^2;11212^2;11313^2;11414^2;11515^2;11616^2];
y=[010.210.3210.4210.510.5510.5810.6]';
於是,abc=ay
- 文章版權屬於文章作者所有,轉載請註明 https://miaozhigu.com/sm/diannao/8mj1gl.html