1.数据统计分析
1).求矩阵的最大元素和最小元素
使用max和min函数
a.向量
x=[243,456,456,243,354];
y=max(x)
[y,k]=max(x)
输出示例
y = 456
y = 456
k = 2
b.矩阵
y=max(x) 返回行向量,为该列的最大值
[y,k]=max(x) 返回行向量,y同上,k为该列最大值的行数
[y,k]=max(x,[],2) 返回列向量,y为该行的最大值,k为该行最大值的列数
x=[243,456,456,243,354;
535,453,546,567,568];
y=max(x)
[y,k]=max(x)
[y,k]=max(x,[],2)
输出示例
y = 535 456 546 567 568
y = 535 456 546 567 568
k = 2 1 2 2 2
y =
456
568
k =
2
5
2).求矩阵的平均值和中值
求平均值:mean函数
求中值:median函数
a.向量
x=[243,456,456,243,354];
y=mean(x)
z=median(x)
输出示例
y =350.4000
z =354
b.矩阵
y=mean(x) 返回行向量,为每一列的平均值
y=mean(x,2) 返回列向量,为每一行的平均值
y=mean(x(:)) 返回所有数据的平均值
y=mean(x(a: b,c: d)) 返回行向量a到b行,c到d列组成的矩阵的平均值。相当于分割后的矩阵,即t=x(a: b,c: d),y=mean(t),同第一条运算
x=[243,456,456,243,354;
535,453,546,567,568;
545,654,354,435,456;
354,354,354,234,675;
675,678,453,567,789];
y1=mean(x)
z1=median(x)
y2=mean(x,2)
z2=median(x,2)
y3=mean(x(:))
z3=median(x(3:3,:))
输出示例
y1 = 470.4000 519.0000 432.6000 409.2000 568.4000
z1 = 535 456 453 435 568
y2 =
350.4000
533.8000
488.8000
394.2000
632.4000
z2 =
354
546
456
354
675
y3 = 479.9200
z3 = 456
3).求和与求积
sum函数求和
prod函数求积
使用方法同平均值
例:
x=[243,456,456,243,354;
535,453,546,567,568;
545,654,354,435,456;
354,354,354,234,675;
675,678,453,567,789];
y1=sum(x)
z1=prod(x)
y2=sum(x,2)
z2=prod(x,2)
y3=sum(x(:))
z3=prod(x(3:5,1:2))
输出示例
y1 = 2352 2595 2163 2046 2842
z1 = 1.0e+13 *
1.6930 3.2425 1.4134 0.7952 4.8831
y2 =
1752
2669
2444
1971
3162
z2 =
1.0e+13 *
0.4347
4.2616
2.5028
0.7007
9.2745
y3 = 11998
z3 = 130227750 156967848
4).累加和与累乘积
cumsum函数求累加和
cumprod函数求累乘积
使用方法同求平均值
举例
x=[243,456,456,243,354;
535,453,546,567,568;
545,654,354,435,456;
354,354,354,234,675;
675,678,453,567,789];
y1=cumsum(x)
z1=cumprod(x)
y2=cumsum(x,2)
z2=cumprod(x,2)
y3=cumsum(x(:))
z3=cumprod(x(3:5,1:2))
输出示例
y1 =
243 456 456 243 354
778 909 1002 810 922
1323 1563 1356 1245 1378
1677 1917 1710 1479 2053
2352 2595 2163 2046 2842
z1 =
1.0e+13 *
0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000
0.0025 0.0048 0.0031 0.0014 0.0062
1.6930 3.2425 1.4134 0.7952 4.8831
y2 =
243 699 1155 1398 1752
535 988 1534 2101 2669
545 1199 1553 1988 2444
354 708 1062 1296 1971
675 1353 1806 2373 3162
z2 =
1.0e+13 *
0.0000 0.0000 0.0000 0.0012 0.4347
0.0000 0.0000 0.0000 0.0075 4.2616
0.0000 0.0000 0.0000 0.0055 2.5028
0.0000 0.0000 0.0000 0.0010 0.7007
0.0000 0.0000 0.0000 0.0118 9.2745
y3 =
243
778
1323
1677
2352
2808
3261
3915
4269
4947
5403
5949
6303
6657
7110
7353
7920
8355
8589
9156
9510
10078
10534
11209
11998
z3 =
545 654
192930 231516
130227750 156967848
5).标准差与相关系数
a.标准差
std函数求标准差
std(A,flag,dim),A为矩阵,flag=0表示求样本标准差,flag=1表示求总体标准差,dim等于1表示求每列的标准差,dim等于2表示求每行的标准差,dim为’all’表示求所有数据的标准差。
举例
x=[243,456,456,243,354;
535,453,546,567,568;
545,654,354,435,456;
354,354,354,234,675;
675,678,453,567,789];
y1=std(x,0,1)
y2=std(x,1,1)
y3=std(x,0,2)
y4=std(x,1,2)
y5=std(x,0,'all')
输出示例
y1 = 170.9234 140.5845 80.8999 164.9127 172.2129
y2 = 152.8785 125.7426 72.3591 147.5024 154.0319
y3 =
106.5190
47.3043
114.6634
165.3487
127.3570
y4 =
95.2735
42.3103
102.5581
147.8924
113.9115
y5 = 149.0168
b.相关系数
使用方法
corrcoef(A) 返回一个矩阵,第i行j列的数据表示第i列和第j列的相关系数。
corrcoef(X,Y) 相当于 corrcoef([X,Y])。
举例
x=[243,456,456,243,354;
535,453,546,567,568;
545,654,354,435,456;
354,354,354,234,675;
675,678,453,567,789];
y1=corrcoef(x)
输出示例
y1 =
1.0000 0.7477 0.1711 0.9099 0.6206
0.7477 1.0000 -0.0738 0.6204 0.1636
0.1711 -0.0738 1.0000 0.5428 -0.0019
0.9099 0.6204 0.5428 1.0000 0.4296
0.6206 0.1636 -0.0019 0.4296 1.0000
6).排序
sort函数排序
使用方法
sort(A,dim,mode)
A为矩阵,dim等于1表示按列排序,dim等于2表示按行排序,mode='ascend’表示升序,mode=‘descend表示降序’
[y,pos]=sort(A) y为排序后矩阵,pos为y中元素在A中的对应位置
举例
x=[243,456,456,243,354;
535,453,546,567,568;
545,654,354,435,456;
354,354,354,234,675;
675,678,453,567,789];
y1=sort(x,1,'ascend')
y2=sort(x,2,'ascend')
y3=sort(x,1,'descend')
[y4,pos]=sort(x,2,'descend')
y5=sort(x(:))
输出示例
y1 =
243 354 354 234 354
354 453 354 243 456
535 456 453 435 568
545 654 456 567 675
675 678 546 567 789
y2 =
243 243 354 456 456
453 535 546 567 568
354 435 456 545 654
234 354 354 354 675
453 567 675 678 789
y3 =
675 678 546 567 789
545 654 456 567 675
535 456 453 435 568
354 453 354 243 456
243 354 354 234 354
y4 =
456 456 354 243 243
568 567 546 535 453
654 545 456 435 354
675 354 354 354 234
789 678 675 567 453
pos =
2 3 5 1 4
5 4 3 1 2
2 1 5 4 3
5 1 2 3 4
5 2 1 4 3
y5 =
234
243
243
354
354
354
354
354
435
453
453
456
456
456
535
545
546
567
567
568
654
675
675
678
789
2.多项式计算
1).多项式的表示
2).多项式的四则运算
加: + f1 + f2
减: - f1 - f2
乘: conv函数 f3=conv(f1,f2)
除: deconv函数 [q,r]=deconv(f1, f2) 其中q为商,r为余数
举例
f1=[32,35,67,34,78];
f2=[34,0,45,34,0];
f3=f1+f2
f4=f1-f2
f5=conv(f1,f2)
[q,r]=deconv(f1,f2)
f6=conv(q,f2)+r
输出示例
f3 = 66 35 112 68 78
f4 = -2 35 22 0 78
f5 = 1088 1190 3718 3819 6857 3808 4666 2652 0
q = 0.9412
r = 0 35.0000 24.6471 2.0000 78.0000
f6 = 32 35 67 34 78
3).多项式的求导
polyder函数求导
f1=polyder(y) 求函数y的导函数
f2=polyder(y1,y2) 求y1*y2的导函数
[p,q]=polyder(y1,y2) 求y1/y2的导函数,其中p为分子,q为分母
对y1*y2求导相当于先求conv(y1,y2),再求导
对y1/y2求导的结果和先求deconv(y1,y2)再求导结果不同。
f1=[32,35,67,34,78];
f2=[34,0,45,34,0];
f3=polyder(f1)
f4=polyder(f1,f2)
[p,q]=polyder(f1,f2)
输出示例
f3 = 128 105 134 34
f4 = 8704 8330 22308 19095 27428 11424 9332 2652
p = -1190 -1676 1371 -8228 748 -7020 -2652
q = 1156 0 3060 2312 2025 3060 1156 0 0
4).多项式求值
a.polyval(p,x)
p为多项式,x为标量、向量或矩阵,将x中每个元素代入求多项式的值
举例
f1=[7,3,8];
x=[32,54;32,1];
y=polyval(f1,x)
输出示例
y =
7272 20582
7272 18
b.polyvalm(p,x)
其中x必须是方阵,以方阵为自变量求多项式的值。
f1=[7,3,8];
x=[32,54;32,1];
y=polyvalm(f1,x)
输出示例
y =
19368 12636
7488 12114
c.二者区别
polyval(f1,x)相当于
polyvalm(f1,x)相当于
注意*是矩阵间的运算,. *是元素间的运算。
5).多项式求根
roots函数求根
f1=[1,8,0,0,-10];
x=roots(f1)
输出示例
x =
-8.0194 + 0.0000i
1.0344 + 0.0000i
-0.5075 + 0.9736i
-0.5075 - 0.9736i
如果已知多项式的全部根,可以用poly函数求出多项式。
f1=[1,8,0,0,-10];
x=roots(f1)
f2=poly(x)
输出示例
x =
-8.0194 + 0.0000i
1.0344 + 0.0000i
-0.5075 + 0.9736i
-0.5075 - 0.9736i
f2 =
1.0000 8.0000 0.0000 0.0000 -10.0000
6).求曲线最大值
x=0:0.01:2;
y=[-38.89,126.11,-3.42];
f2=polyval(y,x);
yy=polyder(y);
ans=roots(yy)
m=polyval(y,ans)
plot(x,f2,ans,m,'rp');
hold on;
title('曲线');
xlabel('空气流量');
ylabel('加热效率');
legend('曲线','最大值');
输出示例
ans = 1.6214
m = 98.8154
3.数据插值
1).一维插值函数
interp1函数
y1=interp1(x,y,x1,method) x,y分别为已知数据,x1为所需范围,y1为插值后函数。
method为数据插值的实现方法:
a.linear
线性插值,顾名思义,将两个点用直线连接。
x=[0,3,5,7,9,11,12,13,14,15];
y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
x1=0:0.1:15;
y1=interp1(x,y,x1,'linear');
plot(x1,y1);
输出示例
b.nearest
取最近点样本的值,如果是两个点的中点,则取后一个值。
x=[0,3,5,7,9,11,12,13,14,15];
y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
x1=0:0.1:15;
y1=interp1(x,y,x1,'nearest');
plot(x1,y1);
输出示例
c.pchip
曲线光滑,具有保型性
x=[0,3,5,7,9,11,12,13,14,15];
y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
x1=0:0.1:15;
y1=interp1(x,y,x1,'pchip');
plot(x1,y1);
输出示例
d.spline
在各结点处具有连续的一阶和二阶导数,进一步提高了曲线的光滑性。
x=[0,3,5,7,9,11,12,13,14,15];
y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
x1=0:0.1:15;
y1=interp1(x,y,x1,'spline');
plot(x1,y1);
输出示例
e.对比
2).二维插值函数
interp2函数
interp2(x,y,z,x1,y1,method)
其中method不支持pchip方法。
举例
x=[20,30,40];
y=(0:5:10)';
z=[8.9,10.32,11.3;
8.7,10.8,11;
8.3,9.65,10.88];
x1=20:40;
y1=(0:10)';
z1=interp2(x,y,z,x1,y1,'spline');
surf(x1,y1,z1);
xlabel('x');
ylabel('y');
zlabel('z');
输出示例
4.曲线拟合,趋势预测
polyfit函数用来进行多项式拟合,求得最小二乘拟合多项式系数。
p=polyfit(x,y,m)
[p,s]=polyfit(x,y,m)
[p,s,mu]=polyfit(x,y,m)
根据样本数据x,y,求得m(一般取2/3)次多项式p及其采样点误差数据s,mu是一个二元向量, mu(1)=mean(x), mu(2)=std(x)
x=2000:1:2010;
y=[126743,127267,128453,129227,129988,130756,131448,132129,132802,133450,134091];
p=polyfit(x,y,2);
polyval(p,2016)
abs(138271-polyval(p,2016))/138271 % 2016年实际人数为138271,求误差值
plot(x,y,'rp',x,polyval(p,x));
输出示例
ans = 1.3707e+05
ans = 0.0087