数据分析与多项式计算


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.二者区别

f1=7x2+3x+8f1=7*x^2+3*x+8

polyval(f1,x)相当于

7x.x+3x+8ones(size(x))7*x.*x+3*x+8*ones(size(x))

polyvalm(f1,x)相当于

7xx+3x+8eye(size(x))7*x*x+3*x+8*eye(size(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);

输出示例

数据插值linear

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

输出示例

数据插值nearest

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

输出示例

数据插值pchip

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

输出示例

数据插值spline

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

曲线拟合-人口


文章作者: 易安
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 易安 !
评论
  目录