(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 =78635631>>max(A)%求每列的最大值
ans =7863563>>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 =476458
上例是对两个同样大小的矩阵操作,MATLAB 还允许对一个矩阵和一个常数或单变量操作。例如:
>> x=[4,5,6;1,4,8];>> p=max(x,4.5)
p =4.50005.00006.00004.50004.50008.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 =102642>>sum(S)
ans =78>>
求矩阵和向量元素的平均值的函数是 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 行的累加和向量。
>> x=cumprod(1:6)
x =12624120720>> 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 各列或各行的标准差。
对于两组数据序列
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)的相关系数。
>> X=randn(10000,5);>> M=mean(X)
M =0.0017-0.0020-0.0038-0.0001-0.0106>> D=std(X)
D =0.99150.98990.99950.98621.0118>> R=corrcoef(X)
R =1.00000.0060-0.00010.01110.00050.00601.0000-0.0030-0.0131-0.0050-0.0001-0.00301.0000-0.0203-0.00240.0111-0.0131-0.02031.00000.01220.0005-0.0050-0.00240.01221.0000>> R=corrcoef(X(:,1),X(:,2))%求X前两列的相关系数
R =1.00000.00600.00601.0000
相关系数是反映两组数据序列之间的相互关系的指标,类似的指标还有协方差,计算公式如下:
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ˉ)
求 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 =50371-57349810>> C2=cov(A)
C2 =4.33338.8333-3.00005.66678.833350.33336.500024.1667-3.00006.50007.00001.00005.666724.16671.000012.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。
>> A=[1,-8,5;4,12,6;13,7,-13];>>sort(A)%对A的每列按升序排序
ans =1-8-1347513126>>sort(A,2,'descend')%对A的每行按降序排序
ans =51-81264137-13>>[X,I]=sort(A)%对A的按列排序,并将每个元素所在行号送矩阵I
X =1-8-1347513126
I =113231322
二、多项式计算
在 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]。
例如,我们求多项式
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 =215-524-2010-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.50004.25001.3750
r =000-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 =1800-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 =-20
q =1010025
结果表明
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 矩阵为自变量,计算该多项式的值。
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))