这里写目录标题
一、数据统计分析
- 在实际应用中,经常需要对各种数据进行统计处理,以便为科学决策提供依据。这些统计处理包括求数据序列的最大值和最小值、和与积、平均值和中值、累加和与累乘积、标准差和相关系数、排序等,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 的结果,两者的零点相同。