统计函数
sum(A)求和
如果A是向量,sum(A)计算每个元素之和
如果A是矩阵,sum(A)计算每列元素之和,(即把每列看成一个向量,然会返回一个行向量,结果为每列元素之和)
如果A是多维数组,sum(A,dim)把指定的维度对应位置求和,即dim=1时对列求和,dim=2时对列求和,以次类推
B = sum(..., 'double')和B = sum(..., dim,'double')这个用于指定计算精度,强制使返回类型为双精度
B = sum(..., 'native')和B = sum(..., dim,'native')这个用于指定计算精度,强制使返回类型精度与右边一致
上面如果不指定精度'double'或者'natvie',如果A是整数类型,默认返回双精度,如果A是单精度类型或者双精度类型,默认返回单精度或者双精度
例 1+2+...+100
clear
clc
A=1:100;
sum(A)
结果
ans =
5050
例
clear
clc
A=magic(3)
sum(A)
sum(sum(A))
结果
A =
8 1 6
3 5 7
4 9 2
ans =
15 15 15
ans =
45
例
clear
clc
A=magic(4)
sum(A,1)
sum(A,2)
结果
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
ans =
34 34 34 34
ans =
34
34
34
34
例 多维向量
clear
clc
A(:,:,1)=[1 0 2 5;4 1 8 7;3 2 6 3];
A(:,:,2)=[3 5 4 1;2 6 2 1;4 2 3 0];
A
sum(A,1)
sum(A,2)
sum(A,3)
结果
A(:,:,2) =
3 5 4 1
2 6 2 1
4 2 3 0
ans(:,:,1) =
8 3 16 15
ans(:,:,2) =
9 13 9 2
ans(:,:,1) =
8
20
14
ans(:,:,2) =
13
11
9
ans =
4 5 6 6
6 7 10 8
7 4 9 3
例 精度
clear
clc
A=int8(1:20)
B=sum(A) %A是整数类型,不指定精度时,默认返回双精度,结果正确
C=sum(A,'native') %因为A是8位整数类型,精度设置为native,所以结果精度为int8(8位整数类型),int8的整数范围为-128~127,超过范围则截断,所以结果为127
class(B) %查看B的数据类型
class(C) %查看C的数据类型
结果
A =
Columns 1 through 16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Columns 17 through 20
17 18 19 20
B =
210
C =
127
ans =
double
ans =
int8
mean(A) 求平均值,参数与sum 差不多,但是mean不能指定精度
如果A是向量,mean(A)计算A所有元素的平均值
如果A是矩阵,mean(A)计算每列元素的平均值,(即把每列看成一个向量,然会返回一个行向量,结果为每列元素的平均值)
如果A是多维数组,sum(A,dim)把指定的维度对应位置求的平均值,即dim=1时对列求的平均值,dim=2时对列求的平均值,以次类推
例
clear
clc
%对向量求平均
A=1:100;
mean(A)
%对矩阵求平均
B=magic(4)
mean(B)
%对多维向量求平均
C(:,:,1)=[3 5 8 6;3 7 9 4;3 4 12 14];
C(:,:,2)=[2 7 4 3;6 3 10 4;10 7 9 4];
C
mean(C,1)
mean(C,2)
mean(C,3)
结果
ans =
8.5000 8.5000 8.5000 8.5000
C(:,:,1) =
3 5 8 6
3 7 9 4
3 4 12 14
C(:,:,2) =
2 7 4 3
6 3 10 4
10 7 9 4
ans(:,:,1) =
3.0000 5.3333 9.6667 8.0000
ans(:,:,2) =
6.0000 5.6667 7.6667 3.6667
ans(:,:,1) =
5.5000
5.7500
8.2500
ans(:,:,2) =
4.0000
5.7500
7.5000
ans =
2.5000 6.0000 6.0000 4.5000
4.5000 5.0000 9.5000 4.0000
6.5000 5.5000 10.5000 9.0000
median 求中位数 min 求最小值 max 求最大值
prod 连乘积 sort 排序
这几个使用的参数和方法基本与mean求平均数一致
sort默认按升序排列,不过它也可以通过参数指定按升序还是降序排列
sort(X,DIM,MODE),DIM不指定默认是1,MODE取值为'ascend'时,按升序排列(默认),MODE取值为'descend'时,按降序排列
例
clear
clc
A=[11 6 9 1 1 8 12 14 2 9];
sort(A,'ascend')
sort(A,'descend')
结果
ans =
1 1 2 6 8 9 9 11 12 14
ans =
14 12 11 9 9 8 6 2 1 1
降序的另一种做法是 逆序输出
clear
clc
A=[11 6 9 1 1 8 12 14 2 9];
B=sort(A)
C=B(end:-1:1)
结果
B =
1 1 2 6 8 9 9 11 12 14
C =
14 12 11 9 9 8 6 2 1 1
离差和相关
var(X) 求X的方差
std(X) 求X的标准差
range(X) 求X的极差
cov(X) 求X的协方差阵
cov(X,Y) 求X、Y两个矩阵的协方差
corrcoef(X) 求X的自相关阵
corrcoef(X,Y) 求X、Y的互相关系数,结果为方阵
corr2(X,Y) 求X、Y的相关系数
例
clear
clc
A=randn(5,5) %生成5×5的标准正态分布(均值为0,方差为1)的随机数矩阵
B=var(A) %求A的方差
B2=var(A(:)) %求A所有数的方差
C=std(A) %求A的标准差
C2=std(A(:)) %求A所有数的标准差
D=range(A) %求A的极差
E=cov(A) %求A的协方差阵
F=corrcoef(A) %求A的自相关阵
结果
A =
1.6035 -0.1559 -1.2507 0.0125 0.9337
1.2347 0.2761 -0.9480 -3.0292 0.3503
-0.2296 -0.2612 -0.7411 -0.4570 -0.0290
-1.5062 0.4434 -0.5078 1.2424 0.1825
-0.4446 0.3919 -0.3206 -1.0667 -1.5651
B =
1.6320 0.1056 0.1332 2.4728 0.8687
B2 =
1.0286
C =
1.2775 0.3250 0.3650 1.5725 0.9320
C2 =
1.0142
D =
3.1096 0.7046 0.9301 4.2716 2.4988
E =
1.6320 -0.1957 -0.4006 -1.1446 0.5936
-0.1957 0.1056 0.0748 -0.0320 -0.1390
-0.4006 0.0748 0.1332 0.1051 -0.2914
-1.1446 -0.0320 0.1051 2.4728 0.1939
0.5936 -0.1390 -0.2914 0.1939 0.8687
F =
1.0000 -0.4713 -0.8592 -0.5698 0.4985
-0.4713 1.0000 0.6307 -0.0626 -0.4589
-0.8592 0.6307 1.0000 0.1830 -0.8564
-0.5698 -0.0626 0.1830 1.0000 0.1323
0.4985 -0.4589 -0.8564 0.1323 1.0000
多项式计算
定义多项式
P=[a1 a2 ... an an+1]
Y = P(1)*X^N + P(2)*X^(N-1) + ... + P(N)*X + P(N+1)
即
Y = a1*X^N + a2*X^(N-1) + ... + an*X + an+1
poly 求特征多项式
poly(A) 当A是一个N*N矩阵式,poly(A)命令求出A的特征多项式,det(lambda*eye(size(A))-A)
poly(V) 当V是向量时,命令poly(V)生成以V为根的多项式
root 求多项式的根
root(p)
例
clear
clc
A=[1 2 3;4 5 6;7 8 0];
p=poly(A) %求特征多项式|λE-A|
r=roots(p) %根据上面的特征多项式,求特征值
结果
p =
1.0000 -6.0000 -72.0000 -27.0000
r =
12.1229
-5.7345
-0.3884
手算过程
例
clear
clc
A=[1 2 3];
p=poly(A)
结果
p =
1 -6 11 -6
手算过程
帮助文档所给的求特征多项式|λE-A|的算法
n = length(A)
z = eig(A); %求矩阵A的全部特征值,构成向量z
c = zeros(n+1,1); c(1) = 1;
for j = 1:n
c(2:j+1) = c(2:j+1)-z(j)*c(1:j);
end
polyval 多项式求值
polyval(P,X) P为多项式,X可为向量或矩阵,为向量时,结果为向量,为m×n矩阵时,对每一个元素求值,结果仍然为m×n矩阵
例 p(x) = 3x^2+2x+1 at x = 5,7, and 9:
clear
clc
p=[3 2 1];
polyval(p,[5 7 9])
结果
ans =
86 162 262
例 p(x) = 4x^2+4x+1 at x = [2 3 4;5 6 7]:
clear
clc
p=[4 4 1];
polyval(p,[2 3 4;5 6 7])
结果
ans =
25 49 81
121 169 225
conv 多项式乘法
conv(P1,P2) 多项式P1和多项式P2相乘
deconv 多项式除法
[Q,R]=deconv(P1,P2) 多项式P1和多项式P2相除,Q为商,R为余数
polyder 多项式求导
polyder(P) 多项式P的导函数
polyder(P1,P2) 多项式P1和多项式P2相乘后求导,相当于polyder(conv(P1,P2))
[Q,D]=polyder(P1,P2) 多项式分式P1/P2(即P1为分子,P2为分母)求导,结果仍为分式Q/D(即Q为分子,D为分母)
例 u=x^3+2x^2+3x+4,v=10x^2+20x+30,求c=u*v,c/u
clear
clc
u=[1 2 3 4];
v=[10 20 30];
c=conv(u,v)
[q,r]=deconv(c,u)
结果
c =
10 40 100 160 170 120
q =
10 20 30
r =
0 0 0 0 0 0
例 a=3x^2+6x+9,b=x^2+2x,求a*b的导数
clear
clc
a=[3 6 9];
b=[1 2 0];
k=polyder(a,b)
结果
k =
12 36 42 18
函数极值与零点
fminbnd 求极值
X = fminbnd(FUN,x1,x2) 对函数值FUN求极小值,x1,x2表示区间, x1 < X < x2
如果要求极大值可以先取导数
例
clear
clc
X1 = fminbnd(@cos,3,4)
X2 = fminbnd(@(x) sin(x)+3,2,5)
f = @(x,c) (x-c).^2;
c = 1.5;
X3 = fminbnd(@(x) f(x,c),0,1)
结果
X1 =
3.1416
X2 =
4.7124
X3 =
0.9999
fzero 求零点
X = fzero(FUN,X0) 求函数FUN的零点,X0为初值,FUN函数可以使用@
例
clear
clc
X1 = fzero(@sin,3) % 函数为sin x,初值为3
X2 = fzero(@(x) sin(3*x),2) % 函数为sin 3x,初值为2
f = @(x,c) cos(c.*x); % 定义带参数的函数
c = 2; % 设置参数的值
X3 = fzero(@(x) f(x,c),0.1)
X4 = fzero ('x.^3-2.^x+1',-1) % 函数为x^3-2^x+1,初值为-1
结果
X1 =
3.1416
X2 =
2.0944
X3 =
0.7854
X4 =
-0.7368