matlab多項式?

Tags: 曲線, 多項式,

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

相關問題答案