这里写目录标题
- 一、数据统计分析
-
- 1. 最大值和最小值
-
- 1.1 求向量的最大值和最小值
- 1.2 求矩阵的最大值和最小值
- 1.3 两个向量或矩阵对于元素的比较
- 2. 求和与求积
- 3. 平均值和中值
- 4. 累加和与累乘积
- 5. 标准差与相关系数
-
- 6. 排序
- 二、多项式计算
-
- 1. 多项式的四则运算
-
- 1.1 多项式的加减运算
- 1.2 多项式乘法运算
- 1.3 多项式除法
- 2. 多项式的导函数
- 3. 多项式的求值
-
- 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= 1325781−566325078−235563−1
- 程序如下:
>> 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 两个向量或矩阵对于元素的比较
- 函数
max
和 min
还能对两个同型的向量或矩阵进行比较,调用格式如下。
- (1)
U=max(A,B)
: A 、 B A、B A、B 是两个同型的向量或矩阵,结果 U U U 是与 A 、 B A、B A、B 同型的向量或矩阵, U U U 的每个元素等于 A 、 B A、B A、B 对应元素的较大者。
- (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 x、y 所有同一位置上的较大元素构成的新矩阵 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 V、W 是与 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=1∑1ui,i=1∑2ui,…,i=1∑nui) 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=1∏1ui,i=1∏2ui,…,i=1∏nui)
- 称 V V V 为 U U U 的累加和向量, W W W 为 U U U 的累积乘向量。在 MATLAB 中,使用
cumsum
和 cumprod
函数能方便地求得向量和矩阵元素地累加和与累乘积向量,它们地调用格式相同,其中 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} x1,x2,x3,…,xn,标准差的计算公式如下: 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=n−11i=1∑n(xi−xˉ)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=1∑n(xi−xˉ)2
- 其中 x ˉ = 1 n ∑ i = 1 n x i \bar{x}=\frac{1}{n}\sum_{i=1}^{n} x_{i} xˉ=n1i=1∑nxi
- MATLAB 提供了计算数据序列的标准差的函数
std
。
- 对于向量 X X X,
std(X)
返回一个标准差。对于矩阵 A A A,std(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) xi,yi(i=1,2,…,n),可以由下式计算出两组数据的相关系数: 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(xi−xˉ)2∑i=1n(yi−yˉ)2 ∑i=1n(xi−xˉ)(yi−yˉ)
- MATLAB 提供了
corrcoef
函数,可以求出数据的相关系数矩阵,函数的调用格式如下。
- (1)
corrcoef(X,Y)
:其中, X 、 Y X、Y X、Y 是向量。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=n−11i=1∑n(xi−xˉ)(yi−yˉ)
- 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= 1413−812756−13
- 程序如下:
>> 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+an−1xn−1+an−2xn−2+⋯+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}] [an,an−1,an−2,…,a1,a0]。
1. 多项式的四则运算
- 多项式之间可以进行四则运算,其运算结果仍为多项式。
1.1 多项式的加减运算
- MATLAB 没有提供专门进行多项式加减运算的函数。事实上,多项式的加减运算就是其所对应的系数向量的加减运算。对于次数相同的两个多项式,可直接对多项式系数向量进行加减运算。
- 如果多项式的次数不同,则应该把低次的多项式系数不足的高次项用 0 补足,使同式中的各多项式具有相同的次数。
- 例如计算 ( x 3 − 2 x 2 + 5 x + 3 ) + ( 6 x − 1 ) (x^{3}-2x^{2}+5x+3)+(6x-1) (x3−2x2+5x+3)+(6x−1),对于和式的后一个多项式 6 x − 1 6x-1 6x−1,它仅为 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+8x3−10 与多项式 2 x 2 − x + 3 2x^{2}-x+3 2x2−x+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+15x5−5x4+24x3−20x2+10x−30。
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 仍是多项式系数向量。
deconv
是 conv
的逆函数,即有 P1=conv(P2,Q)+r
。
- 例如,我们求多项式 x 4 + 8 x 3 − 10 x^{4}+8x^{3}-10 x4+8x3−10 除以多项式 2 x 2 − x + 3 2x^{2}-x+3 2x2−x+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.375x−14.125。以下则用本例来验证
deconv
和 conv
是互逆的。
>> 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 P●Q 的导函数。
- (3)
[p,q]=polyder(P,Q)
:求 P / Q P/Q P/Q 的导函数,导函数的分子存入 p p p,分母存入 q q q。
- 上述函数调用中,参数 P 、 Q P、Q P、Q 是多项式的向量表示,结果 p 、 q p、q p、q 也是多项式的向量表示。
- 例如,我们求有理分式的导数。 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 提供了两种求多项式值的函数:
polyval
与 polyvalm
,它们的输入参数均为多项式系数向量 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+8x3−10,分别取 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 x3−5x2+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)) A∗A∗A−5∗A∗A+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.∗A−5.∗A.∗A+8ones(size(A))
- 例如,已知多项式 x 4 + 8 x 3 − 10 x^{4}+8x^{3}-10 x4+8x3−10 为例,我们以 2 × 2 2×2 2×2 矩阵为自变量分别用
polyval
和 polyvalm
计算该多项式的值。
- 程序如下:
>> 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+8x3−10 的根。
- 程序如下:
>> 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+4x3−5x2−7.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 的结果,两者的零点相同。