(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))