MATLAB 之 数据统计分析和多项式计算

这里写目录标题

  • 一、数据统计分析
    • 1. 最大值和最小值
      • 1.1 求向量的最大值和最小值
      • 1.2 求矩阵的最大值和最小值
      • 1.3 两个向量或矩阵对于元素的比较
    • 2. 求和与求积
    • 3. 平均值和中值
    • 4. 累加和与累乘积
    • 5. 标准差与相关系数
      • 5.1 求标准差
      • 5.2 相关系数
    • 6. 排序
  • 二、多项式计算
    • 1. 多项式的四则运算
      • 1.1 多项式的加减运算
      • 1.2 多项式乘法运算
      • 1.3 多项式除法
    • 2. 多项式的导函数
    • 3. 多项式的求值
      • 3.1 代数多项式求值
      • 3.2 矩阵多项式求值
    • 4. 多项式求根

一、数据统计分析

  • 在实际应用中,经常需要对各种数据进行统计处理,以便为科学决策提供依据。这些统计处理包括求数据序列的最大值和最小值、和与积、平均值和中值、累加和与累乘积、标准差和相关系数、排序等,MATLAB 提供了相关的函数来实现。

1. 最大值和最小值

  • MATLAB提供了求数据序列最大值的函数max和求最小值的函数min,它们的调用格式和
    操作过程类似。

1.1 求向量的最大值和最小值

  • 求向量 X X X 的最大值的函数有两种调用格式,分别如下。
  • (1) y=max(X):返回向量 X X X 的最大值,并存入 y y y。如果 X X X 中包含复数元素,则按模取最大值。
  • (2) [y,k]=max(X):返回向量 X X X 的最大值,并存入 y y y,最大值的序号存入 k k k。如果 X X X 中包含复数元素,则按模取最大值。
  • 求向量 X X X 的最小值的函数是 min(X),用法和 max(X) 相同。
  • 例如,我们求向量 x x x 的最大值。
  • 程序如下:
>> x=[-43,72,9,16,23,47];
>> y=max(x)  %求向量x中的最大值

y =

    72

>> [y,k]=max(x)  %求向量x中的最大值及该元素的位置

y =

    72


k =

     2

  • 以上是对行向量进行操作,事实上对列向量的操作与对行向量的操作结果是一样的。例如,我们对上述 x x x 进行转置,有相同的结果。
>> [y,k]=max(x')

y =

    72


k =

     2

1.2 求矩阵的最大值和最小值

  • 求矩阵 A A A 的最大值的函数有 3 种调用格式,分别如下。
  • (1) max(A):返回一个行向量,向量的第 i i i 个元素是矩阵 A A A 的第 i i i 列上的最大值(返回的是每列的最大值)。
  • (2) [Y,U]=max(A):返回行向量 Y Y Y U U U Y Y Y 向量记录 A A A 的每列的最大值, U U U 向量记录每列最大值的行号(返回的是每列的最大值)。
  • (3) max(A,[],dim):dim 取 1 或 2。dim 取 1 时,该函数和 max(A) 等价;dim 取 2 时,该函数返回一个列向量,其第 i i i 个元素是 A A A 矩阵的第 i i i 行上的最大值(返回的是每行的最大值)。
  • 求矩阵最小值的函数是 min,其用法和 max 函数相同。
  • 例如,我们求矩阵 A A A 每行及每列的最大值,并求整个矩阵的最大值。 A = [ 13 − 56 78 25 63 − 235 78 25 563 1 0 − 1 ] A=\begin{bmatrix} 13 &-56 &78 \\ 25& 63& -235\\ 78& 25& 563\\ 1& 0 &-1 \end{bmatrix} A= 13257815663250782355631
  • 程序如下:
>> A=[13,-56,78;25,63,-235;78,25,563;1,0,-1];
>> max(A,[],2)  %求每行最大值

ans =

    78
    63
   563
     1

>> max(A)  %求每列的最大值

ans =

    78    63   563

>> max(max(A))  %求整个矩阵的最大值,也可使用max(A(:))

ans =

   563

1.3 两个向量或矩阵对于元素的比较

  • 函数 maxmin 还能对两个同型的向量或矩阵进行比较,调用格式如下。
  • (1) U=max(A,B) A 、 B A、B AB 是两个同型的向量或矩阵,结果 U U U 是与 A 、 B A、B AB 同型的向量或矩阵, U U U 的每个元素等于 A 、 B A、B AB 对应元素的较大者。
  • (2) U=max(A,n) n n n 是一个标量,结果 U U U 是与 A A A 同型的向量或矩阵, U U U 的每个元素等于 A A A 对应元素和 n n n 中的较大者。
  • min 函数的用法和 max 函数相同。
  • 例如,我们求两个 2 × 3 2×3 2×3 矩阵 x 、 y x、y xy 所有同一位置上的较大元素构成的新矩阵 p p p
  • 程序如下:
>> x=[4,5,6;1,4,8];
>> y=[1,7,5;4,5,7];
>> p=max(x,y)  %在x、y同一位置上的两个元素中找出较大值

p =

     4     7     6
     4     5     8

  • 上例是对两个同样大小的矩阵操作,MATLAB 还允许对一个矩阵和一个常数或单变量操作。例如:
>> x=[4,5,6;1,4,8];
>> p=max(x,4.5)  

p =

     4.5000     5.0000     6.0000
     4.5000     4.5000     8.0000

2. 求和与求积

  • 数据序列求和用 sum 函数。设 X X X 是一个向量, A A A 是一一个矩阵,sum 函数的调用格式如下。
  • (1) sum(X):返回向量 X X X 各元素的和。
  • (2) sum(A):返回一个行向量,其第 i i i 个元素是 A A A 的第 i i i 列的元素和。
  • (3) sum(A,dim):当 dim 为 1 时,该函数等同于 sum(A);当 dim 为 2 时,返回一个列向量,其第 i i i 个元素是 A A A 的第 i i i 行的各元素之和。
  • 数据序列求积用 prod 函数,其使用方法与 sum 函数相同。
  • 例如,我们求矩阵 A A A 的每行元素之和和全部元素之和。
  • 程序如下:
>> A=[1,2,3,4;5,6,7,8;9,10,11,12];
>> S=sum(A,2)

S =

    10
    26
    42

>> sum(S)

ans =

    78

>> 

3. 平均值和中值

  • 数据序列的平均值指的是算术平均值。中值,是指在数据序列中其值的大小恰好处在中间的元素。
  • 例如,数据序列 -2,5,7,9,12 的中值为 7,即它的大小恰好处于数据序列各个值的中间,这是数据序列为奇数个数的情况。如果数据序列为偶数个数,则中值等于中间的两数的平均值。例如,数据序列 -2,5,6,7,9,12 中, 处于中间的数是 6 和 7,故其中值为 6.5。
  • 求矩阵和向量元素的平均值的函数是 mean。设 X X X 是一个向量, A A A 是一个矩阵,mean 函数的调用格式如下。
  • (1) mean(X):返回向量 X X X 的算术平均值。
  • (2) mean(A):返回一个行向量,其第 i i i 个元素是 A A A 的第 i i i 列的算术平均值。
  • (3) mean(A,dim):当 dim 为 1 时,该函数等同于 mean(A);当 dim 为 2 时,返回一个列向量,其第 i i i 个元素是 A A A 的第 i i i 行的算术平均值。
  • 求中值的函数是 median,其调用方法和 mean 函数相同。
  • 例如,我们向量 x x x 的平均值。
  • 程序如下:
>> x=[9,-2,5,6,7,12];
>> mean(x)

ans =

    6.1667

4. 累加和与累乘积

  • U = ( u 1 , u 2 , u 3 , … , u n ) U=(u_{1},u_{2},u_{3},\dots ,u_{n}) U=(u1,u2,u3,,un) 是一个向量, V 、 W V、W VW 是与 U U U 等长的另外两个向量,并且 V = ( ∑ i = 1 1 u i , ∑ i = 1 2 u i , … , ∑ i = 1 n u i ) V=(\sum_{i=1}^{1} u_{i},\sum_{i=1}^{2} u_{i},\dots ,\sum_{i=1}^{n} u_{i}) V=(i=11ui,i=12ui,,i=1nui) W = ( ∏ i = 1 1 u i , ∏ i = 1 2 u i , … , ∏ i = 1 n u i ) W=(\prod_{i=1}^{1} u_{i},\prod_{i=1}^{2} u_{i},\dots ,\prod_{i=1}^{n} u_{i}) W=(i=11ui,i=12ui,,i=1nui)
  • V V V U U U 的累加和向量, W W W U U U 的累积乘向量。在 MATLAB 中,使用 cumsumcumprod 函数能方便地求得向量和矩阵元素地累加和与累乘积向量,它们地调用格式相同,其中 cumsum 函数地调用格式如下。
  • (1) cumsum(X):返回向量 X X X 累加和向量。
  • (2) cumsum(A):返回一个矩阵,其第 i i i 列是 A A A 的第 i i i 列的累加和向量。
  • (3) cumsum(A,dim):当 dim 为 1 时,该函数等同于 cumsum(A);当 dim 为 2 时,返回一个矩阵,其第 i i i 行是 A A A 的第 i i i 行的累加和向量。
  • 例如,我们求 s = 1 ! + 2 ! + ⋯ + 6 ! s=1!+2!+\dots +6! s=1+2++6
  • 程序如下:
>> x=cumprod(1:6)

x =

     1     2     6    24   120   720

>> s=sum(x)

s =

   873

5. 标准差与相关系数

5.1 求标准差

  • 对于具有 n n n 个元素的数据序列 x 1 , x 2 , x 3 , … , x n x_{1},x_{2},x_{3},…,x_{n} x1x2x3xn,标准差的计算公式如下: S 1 = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) 2 S_{1}=\sqrt{\frac{1}{n-1} \sum_{i=1}^{n}(x_{i}-\bar{x})^{2}} S1=n11i=1n(xixˉ)2
  • S 2 = 1 n ∑ i = 1 n ( x i − x ˉ ) 2 S_{2}=\sqrt{\frac{1}{n} \sum_{i=1}^{n}(x_{i}-\bar{x})^{2}} S2=n1i=1n(xixˉ)2
  • 其中 x ˉ = 1 n ∑ i = 1 n x i \bar{x}=\frac{1}{n}\sum_{i=1}^{n} x_{i} xˉ=n1i=1nxi
  • MATLAB 提供了计算数据序列的标准差的函数 std
  • 对于向量 X X Xstd(X) 返回一个标准差。对于矩阵 A A Astd(A) 返回一个行向量,它的各个元素便是矩阵 A A A 各列或各行的标准差。
  • std 函数的一般调用格式如下:
    Y=std(A,flag,dim)
  • 其中,dim 取 1 或 2。当 dim=1 时,求各列元素的标准差;当 dim=2 时,则求各行元素的标准差
  • 其中,flag 取 0 或 1,当 flag=0 时,按 S 1 S_{1} S1 所列公式计算标准差;当 flag=1 时,按 S 2 S_{2} S2 所列公式计算标准差。默认取 flag=0,dim=1。
  • 方差是和标准差相关的概念,其值是标准差的平方。MATLAB 提供了 var 函数来计算方差,其使用方法与 std 函数类似。
  • 例如,对于二维矩阵 x x x,我们从不同维方向求出其标准差和方差。
  • 程序如下:
>> x=[4,5,6;1,4,8];
>> y1=std(x,0,1)  %求标准差

y1 =

    2.1213    0.7071    1.4142

>> v1=var(x,0,1)  %求方差

v1 =

    4.5000    0.5000    2.0000

>> y2=std(x,1,1)

y2 =

    1.5000    0.5000    1.0000

>> v2=var(x,1,1)

v2 =

    2.2500    0.2500    1.0000

>> y3=std(x,0,2)

y3 =

    1.0000
    3.5119

>> v3=var(x,0,2)

v3 =

    1.0000
   12.3333

>> y4=std(x,1,2)

y4 =

    0.8165
    2.8674

>> v4=var(x,1,2)

v4 =

    0.6667
    8.2222

5.2 相关系数

  • 对于两组数据序列 x i , y i ( i = 1 , 2 , … , n ) x_{i},y_{i}(i=1,2,…,n) xiyi(i=12n),可以由下式计算出两组数据的相关系数: r = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 r=\frac{\sum_{i=1}^{n}(x_{i}-\bar x)(y_{i}-\bar y)}{\sqrt{\sum_{i=1}^{n}(x_{i}-\bar x)^{2}\sum_{i=1}^{n}(y_{i}-\bar y)^{2}}} r=i=1n(xixˉ)2i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)
  • MATLAB 提供了 corrcoef 函数,可以求出数据的相关系数矩阵,函数的调用格式如下。
  • (1) corrcoef(X,Y):其中, X 、 Y X、Y XY 是向量。corrcoef(X,Y) 返回序列 X X X 和序列 Y Y Y 的相关系数,导到的结果是一个 2 × 2 2×2 2×2 矩阵,其中对角线上的元素分别表示 X X X Y Y Y 的自相关系数,非对角线上的元素分别表示 X X X Y Y Y 的相关系数和 Y Y Y X X X 的相关系数,两个是相等的。
  • (2) corrcoef(X):返回从矩阵 X X X 形成的一个相关系数矩阵,其中第 i i i 行第 j j j 列的元素代表原矩阵 X X X 中第 i i i 个列向量和第 j j j 个列向量的相关系数,即 X ( : , i ) X(:, i) X(:,i) X ( : , j ) X(:, j) X(:,j)的相关系数。
  • 例如,我们生成满足正态分布的 10000 × 5 10000×5 10000×5 随机矩阵,然后求各列元素的均值和标准差,再求这 5 5 5 列随机数据的相关系数矩阵。
  • 程序如下:
>> X=randn(10000,5);
>> M=mean(X)

M =

    0.0017   -0.0020   -0.0038   -0.0001   -0.0106

>> D=std(X)

D =

    0.9915    0.9899    0.9995    0.9862    1.0118

>> R=corrcoef(X)

R =

    1.0000    0.0060   -0.0001    0.0111    0.0005
    0.0060    1.0000   -0.0030   -0.0131   -0.0050
   -0.0001   -0.0030    1.0000   -0.0203   -0.0024
    0.0111   -0.0131   -0.0203    1.0000    0.0122
    0.0005   -0.0050   -0.0024    0.0122    1.0000

>> R=corrcoef(X(:,1),X(:,2))  %求X前两列的相关系数

R =

    1.0000    0.0060
    0.0060    1.0000

  • 求得的均值接近于 0,标准差接近于 1,由标准正态分布的随机数的性质可以看出,这个结构式正确的。此外,由于其相关系数矩阵趋于单位矩阵,故由函数 randn 产生的随机数是独立的。
  • 相关系数是反映两组数据序列之间的相互关系的指标,类似的指标还有协方差,计算公式如下: c = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) c=\frac{1}{n-1}\sum_{i=1}^{n}(x_{i}-\bar x)(y_{i}-\bar y) c=n11i=1n(xixˉ)(yiyˉ)
  • MATLAB 提供了 cov 函数来求两组数据的协方差矩阵,使用方法与 corrcoef 函数类似。例如:
>> A=[3,6,4];
>> B=[7,12,-9];
>> C1=cov(A,B)

C1 =

    2.3333    6.8333
    6.8333  120.3333

  • A,B 两个向量的协方差,将产生一个 2 × 2 2×2 2×2 矩阵,其中 C ( 1 , 1 ) C(1,1) C(1,1) 代表向量 A A A 的自协方差, C ( 1 , 2 ) C(1,2) C(1,2) 代表向量 A A A 与向量 B B B 的协方差, C ( 2 , 1 ) C(2,1) C(2,1) 代表向量 B B B 与向量 A A A 的协方差, C ( 2 , 2 ) C(2,2) C(2,2) 代表向量 B B B 的自协方差。
  • 又如:
>> A=[5,0,3,7;1,-5,7,3;4,9,8,10]

A =

     5     0     3     7
     1    -5     7     3
     4     9     8    10

>> C2=cov(A)

C2 =

    4.3333    8.8333   -3.0000    5.6667
    8.8333   50.3333    6.5000   24.1667
   -3.0000    6.5000    7.0000    1.0000
    5.6667   24.1667    1.0000   12.3333
    
  • 因为矩阵 A A A 有 4 列,所以协方差矩阵是 4 × 4 4×4 4×4 矩阵,其中 C ( i , j ) C(i,j) C(i,j) 代表向量 A ( : . i ) A(:.i) A(:.i) 与向量 A ( : , j ) A(:,j) A(:,j) 的协方差。

6. 排序

  • 对向量元素进行排序是一个经常性的操作,MATLAB 中对向量 X X X 进行排序的函数时 sort(X),函数返回一个对 X X X 中的元素按升序排列的向量。
  • sort 函数也可以对矩阵 A A A 的各列或各行重新进行排序,其调用格式如下:
    [Y,I]=sort(A,dim,mode)
  • 其中, Y Y Y 是排序后的矩阵,而 I I I 记录 Y Y Y 中的元素在 A A A 中的位置。
  • dim 指明对 A A A 的列还是行进行排序,若 dim=1,则按列排;若 dim=2,则按行排。dim 默认取 1。
  • mode 指明按升序还是按降序排序,‘ascend’ 按升序,‘descend’ 按降序。mode 默认取 ‘ascend’。
  • 例如,我们对下列矩阵做各种排序。 A = [ 1 − 8 5 4 12 6 13 7 − 13 ] A=\begin{bmatrix} 1& -8& 5\\ 4& 12& 6\\ 13&7 &-13 \end{bmatrix} A= 141381275613
  • 程序如下:
>> A=[1,-8,5;4,12,6;13,7,-13];
>> sort(A)  %对A的每列按升序排序

ans =

     1    -8   -13
     4     7     5
    13    12     6

>> sort(A,2,'descend')  %对A的每行按降序排序

ans =

     5     1    -8
    12     6     4
    13     7   -13

>> [X,I]=sort(A)  %对A的按列排序,并将每个元素所在行号送矩阵I

X =

     1    -8   -13
     4     7     5
    13    12     6


I =

     1     1     3
     2     3     1
     3     2     2

二、多项式计算

  • 在 MATLAB 中, n n n 次多项式用一个长度为 n + 1 n+1 n+1 的行向量表示,缺少的幂次项系数为 0。如果 n n n 次多项式表示为 P ( x ) = a n x n + a n − 1 x n − 1 + a n − 2 x n − 2 + ⋯ + a 1 x + a 0 P(x)=a_{n}x^{n}+a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+\dots +a_{1}x+a_{0} P(x)=anxn+an1xn1+an2xn2++a1x+a0
  • 则在 MATLAB 中, P ( x ) P(x) P(x) 表达为向量形式: [ a n , a n − 1 , a n − 2 , … , a 1 , a 0 ] [a_{n},a_{n-1},a_{n-2},\dots,a_{1},a_{0}] [anan1an2a1a0]

1. 多项式的四则运算

  • 多项式之间可以进行四则运算,其运算结果仍为多项式。

1.1 多项式的加减运算

  • MATLAB 没有提供专门进行多项式加减运算的函数。事实上,多项式的加减运算就是其所对应的系数向量的加减运算。对于次数相同的两个多项式,可直接对多项式系数向量进行加减运算。
  • 如果多项式的次数不同,则应该把低次的多项式系数不足的高次项用 0 补足,使同式中的各多项式具有相同的次数。
  • 例如计算 ( x 3 − 2 x 2 + 5 x + 3 ) + ( 6 x − 1 ) (x^{3}-2x^{2}+5x+3)+(6x-1) (x32x2+5x+3)+(6x1),对于和式的后一个多项式 6 x − 1 6x-1 6x1,它仅为 1 次多项式,而前面的是 3 次。为确保两者次数相同,应把后者的系数向量处理成 [ 0 , 0 , 6 , − 1 ] [0,0,6,-1] [0,0,6,1]
  • 程序如下:
>> a=[1,-2,5,3];
>> b=[0,0,6,-1];
>> c=a+b

c =

     1    -2    11     2

1.2 多项式乘法运算

  • 函数 conv(P1,P2) 用于求多项式 P1 和 P2 的乘积。其中,P1、P2 是两个多项式系数向量。
  • 例如,我们求多项式 x 4 + 8 x 3 − 10 x^{4}+8x^{3}-10 x4+8x310 与多项式 2 x 2 − x + 3 2x^{2}-x+3 2x2x+3 的乘积。
  • 程序如下:
>> A=[1,8,0,0,-10];
>> B=[2,-1,3];
>> C=conv(A,B)

C =

     2    15    -5    24   -20    10   -30

  • 本例的执行结果是求得一个 6 次多项式: 2 x 6 + 15 x 5 − 5 x 4 + 24 x 3 − 20 x 2 + 10 x − 30 2x^{6}+15x^{5}-5x^{4}+24x^{3}-20x^{2}+10x-30 2x6+15x55x4+24x320x2+10x30

1.3 多项式除法

  • 函数 [Q,r]=deconv(P1,P2) 用于对多项式 P1 和 P2 做除法运算。其中 Q Q Q 返回多项式 P1 除以 P2 的商式, r r r 返回 P1 除以 P2 的余式。这里, Q Q Q r r r 仍是多项式系数向量。
  • deconvconv 的逆函数,即有 P1=conv(P2,Q)+r
  • 例如,我们求多项式 x 4 + 8 x 3 − 10 x^{4}+8x^{3}-10 x4+8x310 除以多项式 2 x 2 − x + 3 2x^{2}-x+3 2x2x+3 的结果。
  • 程序如下:
>> A=[1,8,0,0,-10];
>> B=[2,-1,3];
>> [P,r]=deconv(A,B)

P =

    0.5000    4.2500    1.3750


r =

         0         0         0  -11.3750  -14.1250

  • 从上面的运行结果可知,多项式 A A A 除以多项式 B B B 获得商多项式 P P P 0.5 x 2 + 4.25 x 1.375 0.5x^{2}+4.25x1.375 0.5x2+4.25x1.375,余项多项式 r r r − 11.375 x − 14.125 -11.375x-14.125 11.375x14.125。以下则用本例来验证 deconvconv 是互逆的。
>> conv(B,P)+r

ans =

     1     8     0     0   -10

2. 多项式的导函数

  • 求多项式的导函数用 polyder 函数,其调用格式如下。
  • (1) p=polyder(P):求多项式 P P P 的导函数。
  • (2) p=polyder(P,Q):求 P ● Q P●Q PQ 的导函数。
  • (3) [p,q]=polyder(P,Q):求 P / Q P/Q P/Q 的导函数,导函数的分子存入 p p p,分母存入 q q q
  • 上述函数调用中,参数 P 、 Q P、Q PQ 是多项式的向量表示,结果 p 、 q p、q pq 也是多项式的向量表示。
  • 例如,我们求有理分式的导数。 f ( x ) = 1 x 2 + 5 f(x)=\frac{1}{x^{2}+5} f(x)=x2+51
  • 程序如下:
>> P=1;
>> Q=[1,0,5];
>> [p,q]=polyder(P,Q)

p =

    -2     0


q =

     1     0    10     0    25

  • 结果表明 f ′ ( x ) = 2 x x 4 + 10 x 2 + 25 f'(x)=\frac{2x}{x^{4}+10x^{2}+25} f(x)=x4+10x2+252x

3. 多项式的求值

  • MATLAB 提供了两种求多项式值的函数:polyvalpolyvalm,它们的输入参数均为多项式系数向量 P P P 和自变量 x x x。两者的区别在于前者是代数多项式求值,而后者是矩阵多项式求值。

3.1 代数多项式求值

  • polyval 函数用来求代数多项式的值,其调用格式如下:
    Y=polyval(P,x)
  • x x x 为一数值,则求多项式在该点的值;若 x x x 为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。
  • 例如,已知多项式 x 4 + 8 x 3 − 10 x^{4}+8x^{3}-10 x4+8x310,分别取 x = 1.2 x=1.2 x=1.2 和一个 2 × 3 2×3 2×3 矩阵为自变量,计算该多项式的值。
  • 程序如下:
>> A=[1,8,0,0,-10];  %4次多项式系数
>> x=1.2;  %取自变量为一数值
>> y1=polyval(A,x)

y1 =

    5.8976

>> x=[-1,1.2,-1.4;2,-1.8,1.6];  %给出一个矩阵x
>> y2=polyval(A,x)  %分别计算矩阵x中各元素为自变量的多项式的值

y2 =

  -17.0000    5.8976  -28.1104
   70.0000  -46.1584   29.3216

3.2 矩阵多项式求值

  • polyvalm 函数用来求矩阵多项式的值,其调用格式与 polyval 相同,但含义不同。
  • polyvalm 函数要求 x x x 为方阵,它以方阵为自变量求多项式的值。设 A A A 为方阵, P P P 代表多项式 x 3 − 5 x 2 + 8 x^{3}-5x^{2}+8 x35x2+8,那么 polyvalm(P,A) 的含义是 A ∗ A ∗ A − 5 ∗ A ∗ A + 8 e y e ( s i z e ( A ) ) A*A*A-5*A*A+8eye(size(A)) AAA5AA+8eye(size(A))
  • polyval(P,A) 的含义是 A . ∗ A . ∗ A − 5. ∗ A . ∗ A + 8 o n e s ( s i z e ( A ) ) A.*A.*A-5.*A.*A+8ones(size(A)) A.A.A5.A.A+8ones(size(A))
  • 例如,已知多项式 x 4 + 8 x 3 − 10 x^{4}+8x^{3}-10 x4+8x310 为例,我们以 2 × 2 2×2 2×2 矩阵为自变量分别用 polyvalpolyvalm 计算该多项式的值。
  • 程序如下:
>> A=[1,8,0,0,-10];
>> x=[-1,1.2;2,-1.8];
>> y1=polyval(A,x)

y1 =

  -17.0000    5.8976
   70.0000  -46.1584

>> y2=polyvalm(A,x)

y2 =

  -60.5840   50.6496
   84.4160  -94.3504

4. 多项式求根

  • n n n 次多项式具有 n n n 个根,当然这些根可能是实根,也可能含有若干对共轭复根。MATLAB 提供的 roots 函数用于求多项式的全部根,其调用格式如下:
    x=roots(P)
  • 其中, P P P 为多项式的系数向量,求得的根赋给向量 x x x,即 x ( 1 ) 、 x ( 2 ) 、 … 、 x ( n ) x(1)、x(2)、\dots 、x(n) x(1)x(2)x(n) 分别代表多项式的 n n n 个根。
  • 例如,我们求多项式 x 4 + 8 x 3 − 10 x^{4}+8x^{3}-10 x4+8x310 的根。
  • 程序如下:
>> A=[1,8,0,0,-10];
>> x=roots(A)

x =

  -8.0194 + 0.0000i
   1.0344 + 0.0000i
  -0.5075 + 0.9736i
  -0.5075 - 0.9736i

  • 若已知多项式的全部根,则可以用 ploy 函数建立起该多项式,其调用格式如下:
    P=poly(x)
  • x x x 为具有 n n n 个元素的向量,则 poly(x) 建立以 x x x 为其根的多项式,且将该多项式的系数赋给向量 P P P
  • 例如,已知: f ( x ) = 3 x 5 + 4 x 3 − 5 x 2 − 7.2 x + 5 f(x)=3x^{5}+4x^{3}-5x^{2}-7.2x+5 f(x)=3x5+4x35x27.2x+5
  • (1) 计算 f ( x ) = 0 f(x)=0 f(x)=0 的全部根。
  • (2) 由方程 f ( x ) = 0 f(x)=0 f(x)=0 的根构造一个多项式 g ( x ) g(x) g(x),并与 f ( x ) f(x) f(x) 进行对比。
  • 程序如下:
>> P=[3,0,4,-5,0,-7.2,5];
>> X=roots(P)  %求方程f(x)=0的根

X =

  -0.7669 + 0.9299i
  -0.7669 - 0.9299i
  -0.0582 + 1.3331i
  -0.0582 - 1.3331i
   1.0158 + 0.0000i
   0.6343 + 0.0000i

>> G=poly(X)  %求多项式g(x)

G =

    1.0000   -0.0000    1.3333   -1.6667    0.0000   -2.4000    1.6667

  • 这是多项式 f(x) 除以首项系数 3 的结果,两者的零点相同。

你可能感兴趣的:(MATLAB,matlab,数学建模,线性代数)