MATLAB教程五:数据分析与多项式计算

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= 13257815663250782355631

>> 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= 141381275613

>> 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+an1xn1+an2xn2++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+x26b(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)

2030405060708090
08.910.3211.312.513.915.317.821.3
58.710.81112.113.214.816.5520.8
108.39.6510.881213.214.616.420.5
158.19.410.711.913.114.516.220.3
208.19.210.81213.214.816.920.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年的人口数。

年份179018001810182018301840185018601870188018901900
人口3.95.37.29.612.917.123.231.438.650.263.076.0
年份19101920193019401950196019701980199020002010
人口92.0105.7122.8131.7150.7179.3203.2226.5248.7281.4308.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));

在这里插入图片描述

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值