5.1 数据统计分析
求最大元素与最小元素:
- max():求向量或矩阵的最大元素。
- min():求向量或矩阵的最小元素。
1、当参数为向量时,上述函数有两种调用格式:
(1)y=max(X):返回向量 X 的最大值存入 y,如果 X 中包含复数元素, 则按模取最大值。
(2)[y,k]=max(X):返回向量 X 的最大值存入 y,最大值元素的序号存入 k,如果 X 中包含复数元素,则按模取最大值。
例:求向量 x 的最大元素,其中x=[-43,72,9,16,23,47]。
>> x=[-43,72,9,16,23,47];
>> y=max(x)
y=
72
>> [y,k]=max(x)
y=
72
k=
2
2、当参数为矩阵时,函数有三种调用格式:
(1)max(A):返回一个行向量,向量的第 i 个元素是矩阵 A 的第 i 列上的最 大值。
(2)[Y,U]=max(A):返回行向量 Y 和 U ,Y 向量记录A中每列的最大值,U 向量记录每列最大值元素的行号。
(3)max(A,[],dim):dim 取1或2。dim 取1时,该函数的功能和 max(A) 完全相同;dim取2时,该函数返回一个列向量,其第 i 个元素是 A 矩阵的第 i 行上的最大值。
例:求矩阵A的每行及每列的最大元素,并求整个矩阵的最大元素。
A = [ 13 − 56 78 25 63 − 235 78 25 563 1 0 − 1 ] A= \left[ \begin{matrix} 13 & -56 & 78 \\ 25 & 63 & -235 \\ 78 & 25 & 563 \\ 1 & 0 & -1 \end{matrix} \right] A= 1325781−566325078−235563−1
>> A=[13,-56,78;25,63,-235;78,25,563;1,0,-1];
>> max(A)
ans =
78 63 563
>> max(A,[],2)
ans =
78
63
563
1
>> max(max(A))
ans =
563
求矩阵的平均值和中值:
- mean():求算术平均值。
- median():求中值。
例:找出数据中的平均值和中值 X=[1200,800,1500,1000,5000]
>> x=[1200,800,1500,1000,5000];
>> mean(x)
ans =
1900
>> median(x)
ans =
1200
求和与求积:
- sum():求和函数。
- prod():求积函数。
例:求向量X=[1,2,3,4,5,6,7,8,9,10]的和与积。
>> X=[1,2,3,4,5,6,7,8,9,10];
>> y=sum(X)
y =
55
>> y=prod(X)
y =
3628800
累加和与累乘积:
- cumsum():累加和函数。
- cumprod():累乘积函数。
例:求向量X=[1,2,3,4,5,6,7,8,9,10]的累加和与累乘积。
>> X=[1,2,3,4,5,6,7,8,9,10];
>> y=cumsum(X)
y =
1 3 6 10 15 21 28 36 45 55
>> y=cumprod(X)
y =
1 2 6 24 120 720 5040 40320 362880 3628800
标准差与相关系数:
标准差:用于计算数据偏离平均数的距离的平均值。
- std(X):计算向量X的标准差。
- std(A):计算矩阵A的各列的标准差。
相关系数:数能够反映两组数据序列之间相互关系。
- corrcoef(A):返回由矩阵A所形成的一个相关系数矩阵,其中,第 i 行第 j 列的元素表示原矩阵 A 中第 i 列和第 j 列的相关系数。
- corrcoef(X,Y):在这里,X , Y 是向量,它们与 corrcoef([X,Y]) 的作用一 样,用于求X、Y向量之间的相关系数。
排序:
- sort(X):对向量X按升序排列。
- [Y,I]=sort(A,dim,mode),其中 dim 指明对 A 的列还是行进行排序。mode 指明按升序还是降序排序,若取“ascend”,则按升序;若取“descend”, 则按降序,默认为升序。输出参数中,Y是排序后的矩阵,而 I 记录 Y 中的元素在 A 中位置。
例:对下列矩阵做各种排序。
A = [ 1 − 8 5 4 12 6 13 7 − 13 ] A= \left[ \begin{matrix} 1 & -8 & 5 \\ 4 & 12 & 6 \\ 13 & 7 & -13 \end{matrix} \right] A= 1413−812756−13
>> A=[1,-8,5;4,12,6;13,7,-13];
>> sort(A)
ans =
1 -8 -13
4 7 5
13 12 6
>> sort(A,2,'descend')
ans =
5 1 -8
12 6 4
13 7 -13
>> [X,I]=sort(A)
X =
1 -8 -13
4 7 5
13 12 6
I =
1 1 3
2 3 1
3 2 2
5.2 多项式计算
多项式的表示:
在MATLAB中,n 次多项式用一个长度为 n+1 的行向量表示。如有 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_nx^n+a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+\dots+a_1x+a_0 p(x)=anxn+an−1xn−1+an−2xn−2+⋯+a1x+a0
则在MATLAB中,p(x)表示为向量形式:[an,an-1,an-2,…,a1,a0]注意:
(1)多项式系数向量的顺序是从高到低。
(2)多项式系数向量包含0次项系数,所以其长度为多项式最高次数加1。
(3)如果有的项没有,系数向量相应位置应用0补足。
多项式的四则运算:
多项式的加减运算:多项式的加减运算非常简单,即相应向量相加减。
多项式乘法:
- conv(P1,P2):多项式相乘,其中,P1、P2是两个多项式系数向量。
多项式除法:
- [Q,r]=deconv(P1,P2):多项式相除,其中Q返回多项式 P1 除以 P2 的商式,r 返回 P1 除以 P2 的余式。这里,Q 和 r 仍是多项式系数向量。deconv 是 conv 的逆函数,因此有下式成立(P1=conv(Q,P2)+r)。
例: 设 f(x)=3x5-5x4-7x2+5x+6,g(x)=3x2+5x-3 求 f(x)+g(x),f(x)-g(x),f(x)xg(x),f(x)/g(x)
>> f=[3,-5,0,-7,5,6];
>> g=[3,5,-3];
>> g1=[0,0,0,g];
>> f+g1
ans =
3 -5 0 -4 10 3
>> f-g1
ans =
3 -5 0 -10 0 9
>> conv(f,g)
ans =
9 0 -34 -6 -20 64 15 -18
>> [Q,r]=deconv(f,g)
Q =
1.0000 -3.3333 6.5556 -16.5926
r =
0 0 0 0 107.6296 -43.7778
>> conv(g,Q)+r
ans =
3.0000 -5.0000 0 -7.0000 5.0000 6.0000
多项式的求导:
- p=polyder§:求多项式 P 的导函数。
- p=polyder(P,Q):求 P×Q 的导函数。
- [p,q]=polyder(P,Q):求 P/Q 的导函数,导函数的分子存入 p,分母存入 q。
例:已知两个多项式
a ( x ) = 3 x 3 + x 2 − 6 b ( x ) = x + 2 a(x)=3x^3+x^2-6\\ b(x)=x+2 a(x)=3x3+x2−6b(x)=x+2
计算两个多项式的乘积的导函数、商的导函数。
>> a=[3 1 0 -6];
>> b=[1 2];
>> polyder(a)
ans =
9 2 0
>> c=polyder(a,b)
c =
12 21 4 -6
>> [p,q]=polyder(a,b)
p =
6 19 4 6
q =
1 4 4
多项式的求值:
- polyval(p,x):代数多项式求值,其中,p 为多项式系数向量,x 可以是标量、向量或矩阵。若 x 为标量,则求多项式在该点的值;若 x 为向量或矩阵,则对向量或矩阵中的每个元素求多项式的值。
- polyvalm(p,x):矩阵多项式求值,其调用格式与 polyval 相同,但含义不同。polyvalm 函数要求 x 为方阵,以方阵为自变量求多项式的值
例: 以多项式 x4+8x3-10 为例,取一个 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
多项式的求根:
- roots§:多项式求根函数,其中p为多项式的系数向量。
- poly(x):若已知多项式的全部根,则可以用 poly 函数建立起该多项式。
例:求多项式 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
>> p=poly(x)
p =
1.0000 8.0000 0.0000 0.0000 -10.0000
5.3 数据插值与曲线拟合
数据插值的实现:
- Y1=interp1(X,Y,X1,method):一维插值函数。该语句将根据 X、Y 的值,计算函数在 X1 处的值。其中,X、Y 是两个等长的已知向量,分别表示采样点和采样值。X1 是一个向量或标量,表示要插值的点。method 参数用于指定插值方法,常取值:‘spline’
- Z1=interp2(X,Y,Z,X1,Y1,method):二维插值函数。其中,X、Y 是两个向量,表示两个参数的采样点,Z 是采样点对应的函数值。X1、Y1 是两个标量或向量,表示要插值的点。
数据插值的应用实例:
在某粮情自动测控系统中,根据粮温、粮湿计算平衡点湿度,与大气湿度进行比较,再根据通风模拟情况决定是否自动进行通风。已测得平衡点湿度与粮温、粮湿关系的部分数据如下表,请推算相应范围内温度每变化1度、湿度每变化1个点的平衡点湿度。
(t(第一列):粮温,w(第一行):粮湿,b:平衡点湿度)b=f(w,t)
20 30 40 50 60 70 80 90 0 8.9 10.32 11.3 12.5 13.9 15.3 17.8 21.3 5 8.7 10.8 11 12.1 13.2 14.8 16.55 20.8 10 8.3 9.65 10.88 12 13.2 14.6 16.4 20.5 15 8.1 9.4 10.7 11.9 13.1 14.5 16.2 20.3 20 8.1 9.2 10.8 12 13.2 14.8 16.9 20.9
>> x=20:10:90;
>> y=(0:5:20)';
>> z=[8.9,10.32,11.3,12.5,13.9,15.3,17.8,21.3;
8.7,10.8,11,12.1,13.2,14.8,16.55,20.8;
8.3,9.65,10.88,12,13.2,14.6,16.4,20.5;
8.1,9.4,10.7,11.9,13.1,14.5,16.2,20.3;
8.1,9.2,10.8,12,13.2,14.8,16.9,20.9];
>> xi=20:90;
>> yi=(0:20)';
>> zi=interp2(x,y,z,xi,yi,'spline');
>> surf(xi,yi,zi)
曲线拟合的功能:
1、估算数据
2、预测趋势
3、总结规律
曲线拟合的实现:
- P=polyfit(X,Y,m)
- [P,S]=polyfit(X,Y,m):根据样本数据 X 和 Y,产生一个 m 次多项式 P 及其在采样点误差数据 S
曲线拟合的应用实例:
人口增长是当今世界上都关注的问题,对人口增长趋势进行预测是各国普遍的做法。已知某国1790年到2010年间历次人口普查数据如下表所示,请预测该国2020年的人口数。
年份 1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 人口 3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 63.0 76.0 年份 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 2010 人口 92.0 105.7 122.8 131.7 150.7 179.3 203.2 226.5 248.7 281.4 308.7
>> x=1790:10:2010;
y=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,63.0,76.0,92.0,105.7,122.8,131.7,150.7,179.3,203.2,226.5,248.7,281.4,308.7];
>> plot(x,y,'*');
>> p=polyfit(x,y,3);
>> polyval(p,2020)
ans =
339.7869
>> plot(x,y,'*',x,polyval(p,x));