中国大学MOOC 科学计算与MATLAB语言(点击此处跳转)
5.1 数据统计分析
常用统计函数
函数 | 解释 |
---|---|
max() | 求向量或矩阵的最大元素 |
min() | 求向量或矩阵的最小元素 |
mean() | 求算术平均值 |
median() | 求中值 |
当参数为向量时,上述函数有两种调用格式:
- y=max(X):返回向量X的最大值存入y,如果X中包含复数元素,则按模取最大值。
- [y,k]=max(X):返回向量X的最大值存入y,最大值元素的序号存入k,如果X中包含复数元素,则按模取最大值。
当参数为矩阵时,函数有三种调用格式:
- max(A):返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。
- [Y,U]=max(A):返回行向量Y和U,Y向量记录A中每列的最大值,U向量记录每列最大值元素的行号。
- max(A,[],dim):dim取1或2。dim取1时,该函数的功能和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。
思考:对矩阵按行求最大元素,仅使用第一种格式,能够做到吗?
答:将矩阵A转置A'
思考:用什么方法只调用一次max函数就能求得整个矩阵的最大值?
答:将矩阵A的每一列元素堆叠起来,成为一个列向量A(:)
思考:有了平均值,为什么还要中值?
答:平均值容易受极端数据影响,此时中值更能反映数据集的水平。
常用算术函数
函数 | 解释 |
---|---|
sum() | 求和函数 |
prod() | 求积函数 |
cumsum() | 累加和函数 |
cumprod() | 累乘积函数 |
设\(U=(u_1,u_2,u_3,\cdots,u_n)\)是一个向量,V、W是与U等长的另外两个向量,并且
\[V=(\sum_{i=1}^1u_i,\sum_{i=1}^2u_i,\sum_{i=1}^3u_i,\cdots,\sum_{i=1}^nu_i) \quad W=(\prod_{i=1}^1u_i,\prod_{i=1}^2u_i,\prod_{i=1}^3u_i,\cdots,\prod_{i=1}^nu_i) \]则分别称V、W为U的累加和向量和累乘积向量。
求标准差与相关系数
标准差用于计算数据偏离平均数的距离的平均值,其计算公式为
样本标准差
总体标准差
\[S_2=\sqrt{\cfrac{1}{N}\sum_{i=1}^N(x_i-\overline{x})^2} \]MATLAB中计算标准差的函数为std(),其调用格式为:
- std(X):计算向量X的标准差。
- std(A):计算矩阵A的各列的标准差。
- std(A,flag,dim): flag取0或1,当flag=0时,按S1所列公式计算样本标准方差;当flag=1时,按S2所列公式计算总体标准方差。在默认情况下,flag=0,dim=1。
相关系数能够反映两组数据序列之间相互关系,其计算公式为
\[r=\cfrac{\sum (x_i-\overline{x})(y_i-\overline{y})}{\sqrt{\sum (x_i-\overline{x})^2\sum (y_i-\overline{y})^2}} \quad [-1,+1] \]在MATLAB中,计算相关系数的函数为corrcoef(),其调用格式为:
- corrcoef(A):返回由矩阵A所形成的一个相关系数矩阵,其中,第i行第j列的元素表示原矩阵A中第i列和第j列的相关系数。
- corrcoef(X,Y):在这里,X,Y是向量,它们与corrcoef([X,Y])的作用一样,用于求X、Y向量之间的相关系数。
排序
在MATLAB中,排序函数为sort(),其调用格式为:
- sort(X):对向量X按升序排列。
- [Y,I]=sort(A,dim,mode),其中dim指明对A的列还是行进行排序。mode指明按升序还是降序排序,若取“ascend”,则按升序;若取“descend”,则按降序,默认为升序。输出参数中,Y是排序后的矩阵,而I记录Y中的元素在A中位置。
5.2 多项式计算
多项式的表示
\[p(x)=a_nx^n+a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+\cdots+a_1x+a_0 \]\[[a_n,a_{n-1},a_{n-2},\cdots,a_1,a_0] \]多项式的四则运算
四则运算 | 函数 | 参数说明 |
---|---|---|
多项式加减 | 相应向量相加减 | 同次项才能进行加减,可高次项添0扩展至等长 |
多项式乘法 | conv(P1,P2) | P1、P2是两个多项式系数向量 |
多项式除法 | [Q,r]=deconv(P1,P2) | Q返回多项式P1除以P2的商式,r返回P1除以P2的余式 |
说明:deconv是conv的逆函数,因此P1=conv(Q,P2)+r成立。
多项式的求导
在MATLAB中,多项式求导函数为polyder(),其调用格式为:
- p=polyder(P):求多项式P的导函数。
- p=polyder(P,Q):求P×Q的导函数。
- [p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q。
思考:对于[p,q]=polyder(a,b),如果换成先求商再求导,结果一样吗?
答:不一样,两者的计算方式不同,输出也不同。
多项式的求值
- polyval(p,x):代数多项式求值,其中,p为多项式系数向量,x可以是标量、向量或矩阵。若x为标量,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求多项式的值。
- polyvalm(p,x):矩阵多项式求值,其调用格式与polyval相同,但含义不同。polyvalm函数要求x为方阵,以方阵为自变量求多项式的值。
多项式的求根
- 在MATLAB中,多项式求根函数为
roots(p)
,其中p为多项式的系数向量。 - 若已知多项式的全部根,则可以用poly函数建立起该多项式,其调用格式为
p=poly(x)
5.3 数据插值
在MATLAB中,一维插值函数为interp1(),其调用格式为:
Y1=interp1(X,Y,X1,method)
该语句将根据X、Y的值,计算函数在X1处的值。其中,X、Y是两个等长的已知向量,分别表示采样点和采样值。X1是一个向量或标量,表示要插值的点。
method参数用于指定插值方法,常用的取值有以下四种:
- linear:线性插值,默认方法。将与插值点靠近的两个数据点用直线连接,然后在直线上选取对应插值点的数据。
- nearest:最近点插值。选择最近样本点的值作为插值数据。
- pchip:分段3次埃尔米特插值。采用分段三次多项式,除满足插值条件,还需满足在若干节点处相邻段插值函数的一阶导数相等,使得曲线光滑的同时,还具有保形性。
- spline:3次样条插值。每个分段内构造一个三次多项式,使其插值函数除满足插值条件外,还要求在各节点处具有连续的一阶和二阶导数。
思考:为什么这两种插值方法都用3次多项式而不用更高次的?
答:多项式次数并非越高越好。次数越高,越容易产生震荡而偏离原函数,这种现象称为龙格(Runge)现象。
四种方法的比较
- 线性插值和最近点插值方法比较简单。其中线性插值方法的计算量与样本点n无关。n越大,误差越小。
- 3次埃尔米特插值和3次样条插值都能保证曲线的光滑性。相比较而言,3次埃尔米特插值具有保形性;而3次样条插值要求其二阶导数也连续,所以插值函数的性态更好。
MATLAB中的二维插值函数为interp2(),其调用格式为:
Z1=interp2(X,Y,Z,X1,Y1,method)
其中,X、Y是两个向量,表示两个参数的采样点,Z是采样点对应的函数值。X1、Y1是两个标量或向量,表示要插值的点。二维插值所采用的方法与一维插值基本相同,但不支持pchip方法。
MATLAB中的等高线绘制函数contour(),其调用格式为:
contour(X,Y,Z,n)
其中,Z表示距X-Y平面的高度,n指定了等高线的条数。
5.4 曲线拟合
MATLAB中的多项式拟合函数为polyfit(),其功能为求得最小二乘拟合多项式系数,其调用格式为:
- P=polyfit(X,Y,m)
- [P,S]=polyfit(X,Y,m)
- [P,S,mu]=polyfit(X,Y,m):根据样本数据X和Y,产生一个m次多项式P及其在采样点的误差数据S,mu是一个二元向量,mu(1)是mean(X),而mu(2)是std(X)。
友链
标签:数据分析,函数,插值,多项式,矩阵,matlab,向量,MATLAB From: https://www.cnblogs.com/YuukiAsuna/p/17149475.html详细版笔记请跳转爆豆的博客