MATlab--建模篇
⽂章⽬录
1 数据统计分析
1. 求矩阵的最⼤元素和最⼩元素
max():求向量或矩阵的最⼤元素。
min():求向量或矩阵的最⼩元素。
(1)y=max(X):返回向量X的最⼤值存⼊y,如果X中包含复数元素,则按模取最⼤值。
(2)[y,k]=max(X):返回向量X的最⼤值存⼊y,最⼤值元素的序号存⼊k,如果X中包含复数元素,则按模取最⼤值。
矩阵
(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⾏上 的最⼤值
在MATLAB中,求平均值和中值的函数分别为:
mean():求算术平均值。
median():求中值
3. 求和与求积
4. 累加和与累乘积
sum():求和函数。
prod():求积函数。
cumsum():累加和函数。
cumprod():累乘积函数。
(1)std(X):计算向量X的标准差。
(2)std(A):计算矩阵A的各列的标准差。
(3)std(A,flag,dim): flag取0或1,当flag=0时,按S1所列公式计算样本标准⽅差;当flag=1时,按S2所列公式计算总体标准⽅差。在默
认情况下,flag=0,dim=1。
排序
排序函数为sort(),其调⽤格式为:
(1)sort(X):对向量X按升序排列。
(2)[Y,I]=sort(A,dim,mode),
其中dim指明对A的列还是⾏进⾏排序。
mode指明按升序还是降序排序,
若取“ascend”,则按升序;
若取“descend”,
则按降序,默认为升序。
输出参数中,Y是排序后的矩阵,⽽I记录Y中的元素在A中位置
相关系数能够反映两组数据序列之间相互关系,其计算公式为
corrcoef(),其调⽤格式为:
(1)corrcoef(A):返回由矩阵A所形成的⼀个相关系数矩阵,其中,第i⾏第j
列的元素表⽰原矩阵A中第i列和第j列的相关系数。
(2)corrcoef(X,Y):在这⾥,X,Y是向量,它们与corrcoef([X,Y])的作⽤⼀
样,⽤于求X、Y向量之间的相关系数。
2 多项式计算
p(x)表⽰为向量形式:
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
多项式系数向量包含0次项系数,所以其长度为多项式最⾼次数加1。
3. 多项式的求导
在MATLAB中,多项式求导函数为polyder(),其调⽤格式为:
(1)p=polyder ( P):求多项式P的导函数。
(2)p=polyder(P,Q):求P×Q的导函数。
(3)[p,q]=polyder(P,Q):求P/Q的导函数,导函数的分⼦存⼊p,分母存⼊q
4. 多项式的求值
polyval(p,x):代数多项式求值,其中,p为多项式系数向量,x可以
是标量、向量或矩阵。若x为标量,则求多项式在该点的值;若x为向
量或矩阵,则对向量或矩阵中的每个元素求多项式的值。
polyvalm(p,x):矩阵多项式求值,其调⽤格式与polyval相同,但含
义不同。polyvalm函数要求x为⽅阵,以⽅阵为⾃变量求多项式的值
5. 多项式的求根
在MATLAB中,多项式求根函数为roots ( p ),其中p为多项式的系数向量。
3 数据插值
从数学上来说,数据插值是⼀种函数逼近的⽅法。
在MATLAB中,⼀维插值函数为interp1(),其调⽤格式为:
Y1=interp1(X,Y,X1,method)
该语句将根据X、Y的值,计算函数在X1处的值。其中,X、Y是两个等长的已知向量,分别表⽰采样点和采样值。X1是⼀个向量或标量,表⽰要-插值的点
>> 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)
matlab求导
method参数⽤于指定插值⽅法,常⽤的取值有以下四种:
(1)linear:线性插值,默认⽅法。将与插值点靠近的两个数据点⽤直线连接,然后在直线上选取对应插值点的数据。
(2)nearest:最近点插值。选择最近样本点的值作为插值数据。
(3)pchip:分段3次埃尔⽶特插值。采⽤分段三次多项式,除满⾜插值条 件,还需满⾜在若⼲节点处相邻段插值函数的⼀阶导数相等,使得曲线光 滑的同时,还具有保形性。
(4)spline:3次样条插值。每个分段内构造⼀个三次多项式,使其插值 函数除满⾜插值条件外,还要求在各节点处具有连续的⼀阶和⼆阶导数。
MATLAB中的⼆维插值函数为interp2(),其调⽤格式为:
Z1=interp2(X,Y,Z,X1,Y1,method)
其中,X、Y是两个向量,表⽰两个参数的采样点,Z是采样点对应的函数值。X1、Y1是两个标量或向量,表⽰要插值的点。
>> 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)
4 数据插值应⽤举例
存在的问题是,d2是v的函数,但是函数关系未知,⽅程不可解。
下⾯考虑数据插值⽅法,以表格中的数据为样本,进⾏数据插值,计算出与120m的停车视距所对应的速度指标。
编程思路:
第⼀步:建⽴速度和停车视距向量。
第⼆步:以1为单位,对采样区间内所有速度进⾏插值,计算出相应的停车视距。
第三步:求出停车视距120所对应的速度。
第四步:绘图展⽰。
v=20:10:150;
vs=v.*(1000/3600);
d1=10.*vs;
d2=[3.15,7.08,12.59,19.68,28.34,38.57,50.4,63.75,
78.71,95.22,113.29,132.93,154.12,176.87];
d3=10;
d=d1+d2+d3;
vi=20:1:150;
di=interp1(v,d,vi,'spline');  ##拟合曲线
如何根据停车视距120到对应的速度?
第⼀步:令代表停车视距的向量di减去120,再取绝对值,得到⼀个新的向量x。
第⼆步:将x按升序排列,并记录最⼩元素的序号,该序号即为停车视距120所对 应的速度数据在向量vi中的序号。
第三步:根据序号取得速度数据
x=abs(di-120);
[y,i]=sort(x);
vi(i(1))
plot(vi,di,vi(i(1)),di(i(1)),'rp')