Bootstrap

003 MATLAB基础计算

01 方程组的求解

多项式及其运算

多项式在MATLAB中以向量形式存储。
即n次多项式用一个长度为n+1的系数向量来表示,且按降幂,缺少的幂次对应的向量元素为0。 多项式的运算主要包括多项式的四则运算、求导、求值和求根运算

多项式的四则运算:

>> p1=[2 0 -6 1];
>> p2=[1 -1];

加减运算       p=polyadd(p1,p2)
                     p =      2     0    -5     0        ,适用于任意阶次间多项式相加
乘法运算       p=conv(p1,p2)
                     p =      2    -2    -6     7    -1        ,p=conv(p1,p2) 
除法运算       [p,r]=deconv(p1,p2)
                      p =      2     2    -4 r =      0     0     0    -3      
                ,[p,r]=deconv(p1,p2),其中k是商,r是余数。

多项式求导:

利用函数polyder来实现,语法格式:
 poly(p):返回多项式p的导数。  
poly(p1,p2):返回多项式p1*p2的导数。
[q,d]=poly(p1,p2):返回多项式p1/p2的导数,q是分子,d是分母。

多项式求值:

y=polyval(p,x):按数组运算规则计算多项式值。
y=polyvalm(p,X):按矩阵运算规则计算多项式值,且X只能是方阵

多项式求根:

>> p=[1 2 -5 0 4];
>> r=roots(p)

当多项式的根已知时,可以利用函数poly(r)来构建多项式的系数。
>> poly(r)
 ans =     1.0000    2.0000   -5.0000    0.0000    4.0000

02 线性方程组的求解:

可直接通过矩阵相除得到

>> A=[1 1 1;2 3 -1;-1 2 4];
>> B=[1;3;2];
>> x=A\B

03 非线性方程组的求根:

x=fzero(fun,x0)
建立函数文件方式:

%建立函数文件fun1.m。
function f=fun1(x)
f=x^2+2*x-exp(x)+5;
%以M函数文件的函数句柄输入方程

>> x=fzero(@fun1,1)                      
x =
    2.9929
以匿名函数方式输入方程方式:

%以匿名函数方式输入方程

>> x=fzero(@(x)x^2+2*x-exp(x)+5,1)        

x =     2.9929

%以字符串方式输入方程

>> x=fzero('x^2+2*x-exp(x)+5',1)            
x =     2.9929
以字符串方式输入方程:
>> x=fzero('x^2+2*x-exp(x)+5',1)            
x =     2.9929

非线性方程组求解:

x=fsolve(fun,x0)
求解时还可以在指令中加入options:
x=fsolve(fun,x0,options)
其中options通过调用optimset函数来设定最大优化代数、优化精度、中间结果的显示等等。
例如'Display'选项决定显示优化的中间结果的方式,其调用格式为:
options=optimset('Display','off'或'iter'或'final')
其中'off'表示不显示,'iter'表示每步都显示,'final'表示仅显示最终结果。

fun也可以以M函数文件的函数句柄、匿名函数或字符串方式输入

04 插值和拟合

由离散点数据来确定函数的方法

测量值是准确的,没有误差,一般用插值

测量值与真实值有误差,一般用曲线拟合

1 函数插值

作用:函数插值是根据给定的有限个样本点,产生另外的估计点以达到数据更为平滑的效果

一维插值函数的调用格式为:
yi=interp1(x,y,xi, 'method')

method是内插方法,可选择:
最近项插值'nearest'、线性插值'linear'、样条插值'spline'或立方插值'cubic',默认为线性插值。

其中的插值方式也可直接这么用:

s = spline(x,y,xq)

返回与查询点xq对应的插值向量s。s的值由x和y的三次样条插值确定。

>> x=0:10;y=sin(x)+cos(x);
>> xi=0:0.1:10;
>> y1=interp1(x,y,xi);
>> y2=interp1(x,y,xi,'nearest');
>> y3=interp1(x,y,xi,'spline');
>> y4=interp1(x,y,xi,'cubic');
plot(xi,y1,xi,y2,'-s',xi,y3,'-.',xi,y4,'-*')

  ‘nearest’为直角转折; ‘linear’是分段线性变化; 'spline'和 'cubic'形成的曲线很平滑

二维数据插值:
Z1=interp2(X,Y,Z,X1,Y1,'method')

其中X,Y是两个向量,分别描述两个参数的采样点,Z是与参数采样点对应的函数值,X1,Y1是两个向量或标量,描述欲插值的点。Z1是根据相应的插值方法得到的插值结果。 method的取值与一维插值函数相同

其中X1,Y1的取值范围不能超出X,Y的给定范围,否则,会给出“NaN”错误

>>x=0:2.5:10;
>>h=[0:30:60]';
>>T=[95,14,0,0,0;88,48,32,12,6;67,64,54,48,41];
>>xi=[0:0.5:10];
>>hi=[0:10:60]';
>>temps=interp2(x,h,T,xi,hi,'cubic');
>>mesh(xi,hi,temps)

 其中mesh是三维网格图绘制

2 曲线拟合 

作用:曲线拟合就是寻找一个函数(或曲线),使该函数(或曲线)在某种准则下与样本点数据最为接近,但并不要求拟合曲线通过全部已知的样本点

p=polyfit(x,y,n)

函数ployfit使用的准则是最小二乘准则:测得m个离散点,构造一个n(n<m)次多项式:p(x)=a1x^n+a2x^n-1+...+anx+an+1,使得在各个已知数据点处,(p(xi)-yi)^2之和达到最小。 

其中,x和y是已知样本点数据,n是拟合多项式的阶次,p为返回的拟合多项式的系数。

>> x=0:10;y=sin(x)+cos(x);
>> p1=polyfit(x,y,1),p2=polyfit(x,y,2),p3=polyfit(x,y,3),p4=polyfit(x,y,4);
>> x1=-1:0.1:11;
>> y1=polyval(p1,x1);
>> y2=polyval(p2,x1);
>> y3=polyval(p3,x1);
>> y4=polyval(p4,x1);
>>plot(x1,y1,'-*',x1,y2,'--',x1,y3,'-.',x1,y4)

05 常用于数据统计与分析的函数

1. 求矩阵最大元素和最小元素

(1)求最大值和最小值

y=max(X)
y=min(X)
  • 当X为向量时:

返回向量X的最大(小)值存入y,如果X中包含复数元素,则按模取最大(小)值

  • 当X为矩阵时:

返回一个行向量,返回每列的最大元素

[y,I]=max(X)
[y,I]=min(X)
  • 当X为向量时:

返回向量X的最大值(小)存入y,最大(小)值的序号存入I,如果X中包含复数元素,则按模取最大(小)值

  • 当X为矩阵时:

返回每列的最大元素和对应行号

max(A,[],dim)

dim取1时,该函数和max(A)完全相同;dim取2时,该函数返回一个列向量

 2. 求矩阵的平均值和中值

(1)求平均值和中值

mean(X)
  • 当X为向量时:

返回向量X的算术平均值。

  • 当X为矩阵时:

返回一个行向量,各列的平均值

mean(A,dim):当dim为1时,该函数等同于mean(A)。当dim为2时,各行的平均值
median(X)
  • 当X为向量时:

返回向量X的中值。(数据序列为偶数个,则取中间两项的平均值)

  • 当X为矩阵时:

返回一个行向量,各列的中值

median(A,dim):当dim为1时,该函数等同于median(A);当dim为2时,各行的中值

3. 矩阵元素求和与求积

 sum(X)
  • 当X为向量时:

返回向量X各元素的和

  • 当X为矩阵时:

返回一个行向量,各列之和

sum(A,dim):当dim为1时,该函数等同于sum(A);当dim为2时,返回一个列向量,各行之和
 prod(X)
  •  当X为向量时:

返回向量X各元素的乘积

  • 当X为矩阵时:

返回一个行向量,各列之积

prod(A,dim):当dim为1时,该函数等同于prod(A);当dim为2时,返回一个列向量,各行之积

 4.求标准方差

对于向量X:
std(X)
对于矩阵A: 
   Y=std(A,flag,dim)

其中当dim=1时,求各列元素的标准方差(返回行向量);
       当dim=2时,则求各行元素的标准方差(返回列向量)。

当flag=0时,按σ1所列公式计算标准差,
当flag=1时,按σ2所列公式计算标准差。
                省略时flag=0,dim=1

5.相关系数

 X,Y是向量:
 corrcoef(X,Y)
X是矩阵:
corrcoef(X)

返回从矩阵X形成的一个相关系数矩阵。它把矩阵X的每列作为一个变量,然后求它们的相关系数(各列两两之间,依次求相关系数)。

6.  排序 

对向量X:
sort(X)

函数返回一个对X中的元素按升序排列的新向量

 [Y,I]=sort(A,dim,mode)

其中若dim=1,则按列排;
       若dim=2,则按行排。

mode默认‘ascend’,若取‘descend’,则按降序。
Y是排序后的矩阵,而I记录Y中的元素在A中原来的位置。

;