MATLAB与数学分析自控1303宋怡然2013010646摘要:数值计算的定义MATLAB中的数值计算MATLAB数值计算的使用数值计算指有效使用数字计算机求数学问题近似解的方法与过程,以及由相关理论构成的学科。数值计算主要研究如何利用计算机更好的解决各种数学问题,包括连续系统离散化和离散形方程的求解,并考虑误差、收敛性和稳定性等问题。从数学类型分,数值运算的研究领域包括数值逼近、数值微分和数值积分、数值代数、最优化方法、常微分方程数值解法、积分方程数值解法、偏微分方程数值解法、计算几何、计算概率统计等。随着计算机的广泛应用和发展,许多计算领域的问题,如计算物理、计算力学、计算化学、计算经济学等都可归结为数值计算问题。数值计算有以下重要特征:1.数值计算的结果是离散的,并且一定有误差,这是数值计算方法区别与解析法的主要特征。2.注重计算的稳定性。控制误差的增长势头,保证计算过程稳定是数值计算方法的核心任务之一。3.注重快捷的计算速度和高计算精度是数值计算的重要特征。4.注重构造性证明。5.数值计算主要是运用MATLAB这个数学软件来解决实际的问题6.数值计算主要是运用有限逼近的的思想来进行误差运算其中数值积分求定积分的近似值的数值方法。即用被积函数的有限个抽样值的离散或加权平均近似值代替定积分的值。求某函数的定积分时,在多数情况下,被积函数的原函数很难用初等函数表达出来,因此能够借助微积分学的牛顿-莱布尼兹公式计算定积分的机会是不多的。另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解。由于以上原因,数值积分的理论与方法一直是计算数学研究的基本课题。对微积分学作出杰出贡献的数学大师,如I.牛顿、L.欧拉、C.F.高斯等人也在数值积分这个领域作出了各自的贡献,并奠定了它的理论基础。MATLAB中包含众多的函数库,可以对数据进行分析处理以及数值计算。MATLAB的数值计算主要包括以下几种:1特殊矩阵2矩阵分析3矩阵分解与线性方程组求解4数据处理与多项式计算5傅立叶分析6数值微积分7常微分方程的数值求解8非线性方程的数值求解9稀疏矩阵一、特殊矩阵包括对角阵与三角阵。魔方矩阵函数magic(n),其功能是生成一个n阶魔方阵。范得蒙矩阵函数vander(V)生成以向量V为基础向量的范得蒙矩阵。希尔伯特矩阵生成希尔伯特矩阵的函数是hilb(n)。MATLAB中,有一个专门求希尔伯特矩阵的逆的函数invhilb(n),其功能是求n阶的希尔伯特矩阵的逆矩阵。托普利兹矩阵生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第1列,y为第1行的托普利兹矩阵。这里x,y均为向量,二者不必等长。友矩阵生成友矩阵的函数是:compan(P),生成多项式P的友矩阵。P是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。帕斯卡矩阵函数pascal(n)生成一个n阶的帕斯卡矩阵。二、矩阵分析矩阵结构变换。1.矩阵的转置转置运算符是单撇号(')。2.矩阵的旋转矩阵的旋转利用函数rot90(A,k),功能是将矩阵A旋转90º的k倍,当k为1时可省略。3.矩阵的左右翻转对矩阵A实施左右翻转的函数是fliplr(A)。4.矩阵的上下翻转对矩阵A实施上下翻转的函数是flipud(A)。矩阵的伪逆。MATLAB中,求一个矩阵伪逆的函数是pinv(A)。方阵的行列式。求方阵A所对应的行列式的值的函数是det(A)。矩阵的迹。MATLAB中,求矩阵的迹的函数是trace(A)。矩阵的秩。MATLAB中,求矩阵秩的函数是rank(A)。矩阵的特征值与特征向量。MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种:(1)E=eig(A)求矩阵A的全部特征值,构成向量E。(2)[V,D]=eig(A)求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。(3)[V,D]=eig(A,'nobalance')与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。三、矩阵分解与线性方程组求解实对称矩阵的QDQ分解矩阵的LU分解。MATLAB中,完成LU分解的函数是:(1)[L,U]=lu(A)将方阵A分解为交换下三角矩阵L和上三角矩阵U,使A=LU。(2)[L,U,P]=lu(A)将方阵A分解为下三角矩阵L和上三角矩阵U,使PA=LU。矩阵的QR分解。对矩阵A进行QR分解的函数是[Q,R]=qr(A),根据方阵A,求一个正交矩阵Q和一个上三角矩阵R,使A=Q*R。求线性方程组的解。在MATLAB命令窗口,输入命令:A=[2,2,-1,1;4,3,-1,2;8,5,-3,4;3,3,-2,2];b=[4,6,12,6]';[x,y]=line_solution(A,b)%调用自定义函数四、数据处理与多项式计算数据统计与分析1.求矩阵最大和最小元素(1)求向量的最大最小元素①y=max(X)返回向量X的最大元素存入y。②[y,I]=max(X)返回向量X的最大元素存入y,最大元素的序号存入I。(2)求矩阵的最大和最小元素①max(A)返回一个行向量,向量的第i个元素是A矩阵的第i列上的最大元素。②[Y,U]=max(A)返回两个行向量,Y向量记录A的每列的最大元素,U向量记录每列最大元素的行号。③max(A,[],dim)dim取1或2。dim取1时,该函数和max(A)完全相同。dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大元素。(3)两个向量或矩阵对应元素的比较①U=max(A,B)A,B是两个同型的向量或矩阵。结果U是与A,B同型的向量或矩阵,U的每个元素等于A,B对应元素的较大者。②U=max(A,n)n是一个标量。结果U是与A同型的向量或矩阵,U的每个元素等于A对应元素和n中的较大者。min函数的用法和max完全相同。2.求矩阵的平均值和中值求矩阵和向量元素的平均值的函数是mean,求中值的函数是median。它们的调用方法和max函数完全相同。3.矩阵元素求和与求积矩阵和向量求和与求积的基本函数是sum和prod,其使用方法和max类似。4.矩阵元素累加和与累乘积MATLAB中,使用cumsum和cumprod函数能方便地求得向量和矩阵元素的累加和与累乘积向量,函数的用法和sum及prod相同5.标准方差MATLAB中,提供了计算数据序列的标准方差的函数std。对于向量X,std(X)返回一个标准方差。对于矩阵A,std(A)返回一个行向量,它的各个元素便是矩阵A各列或各行的标准方差。std函数的一般调用格式为:std(A,FLAG,dim)其中dim取1或2。当dim=1时,求各列元素的标准方差;当dim=2时,则求各行元素的标准方差。FLAG取0或1。6.元素排序MATLAB中对向量X是排序函数是sort(X),函数返回一个对X中的元素按升序排列的新向量。sort函数也可以对矩阵A的各列(或行)重新排序,其调用格式为:[Y,I]=sort(A,dim)其中dim指明对A的列还是行进行排序,若dim=1,则按列排,若dim=2,则按行排。Y是排序后的矩阵,而I记录Y中的元素在A中位置。曲线拟合MATLAB中,提供了解决使用最小二乘法进行曲线拟合的函数。调用格式为:[P,S]=polyfit(X,Y,m)函数根据采样点X和采样点函数值Y,产生一个m次多项式P及其在采样点的误差向量S。其中X、Y是两个等长的向量,P是一个长度为m+1的向量。多项式计算1.多项式的建立已知一个多项式的全部根X求多项式系数的函数是poly(X),该函数返回以X为全部根的一个多项式P,当X是一个长度为m的向量时,P是一个长度为m+1的向量。2.多项式求根求多项式p(x)的根的函数是roots(P),这里,P是p(x)的系数向量,该函数返回方程p(x)=0的全部根(含重根,复根)。3.多项式求值求多项式p(x)在某点或某些点的函数值的函数是polyval(P,x)。若x为一数值,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求其多项式的值。多项式的四则运算(1)多项式的加减法(2)多项式的乘法函数conv(P1,P2)用于求多项式P1和P2的乘积。(3)多项式的除法函数[Q,r]=deconv(P1,P2)用于对多项式P1和P2作除法运算。其中Q返回多项式P1除以P2的商式,r返回P1除以P2的余式。这里,Q和r仍是多项式系数向量。deconv是conv的逆函数,即有P1=conv(P2,Q)+r。五、傅立叶分析MATLAB中,提供了对向量(或直接对矩阵的行或列)进行离散傅立叶变换的函数,其调用格式是:Y=fft(X,n,dim)(1)当X是一个向量时,返回对X的离散傅立叶变换。(2)当X是一个矩阵时,返回一个矩阵并送Y,其列(行)是对X的列(行)的离散傅立叶变换。离散傅立叶变换的逆变换MATLAB中,对向量(或直接对矩阵的行或列)进行离散傅立叶逆变换的函数的调用方法是:Y=ifft(X,n,dim)函数对X进行离散傅立叶逆变换。其中X、n、dim的意义及用法和离散傅立叶变换函数fft完全相同。六、数值微积分MATLAB中,没有直接提供求数值导数的函数,只有计算向前差分的函数。DX=diff(X)计算向量X的向前差分,DX(i)=X(i+1)-X(i),0in。DX=diff(X,n)计算X的n阶向前差分,diff(X,2)=diff(diff(X))。DX=diff(A,n,dim)计算矩阵A的n阶差分,dim=1时(缺省状态),按列计算差分,dim=2,按行计算差分。MATLAB提供了计算二重积分的函数:dblquad(f,a,b,c,d,tol,trace)该函数求f(x,y)在[a,b]×[c,d]区域上的二重积分。参数tol,trace的用法与函数quad完全相同。如果直接使用这里介绍的二重积分函数dblquad来求解本例就非常简单,命令如下:g=inline('exp(-x.^2-y.^2)');dblquad(g,0,1,0,1)%直接调用二重积分函数求解七、常微分方程的数值求解基于龙格-库塔法,MATLAB提供了求常微分方程数值解的函数,一般调用格式为:[X,Y]=ode23(f,[x0,xn],y0)[X,Y]=ode45(f,[x0,xn],y0)其中X、Y是两个向量,X对应自变量x在求解区间[x1,xn]的一组采样点,其采样密度是自适应的,无需指定;Y是与X对应的一组解,f是一个函数,[x0,xn]代表自变量的求解区间,y0=y(x0),由方程的初值给定。函数在求解区间[x0,xn]内,自动设立采样点向量X,并求出解函数y在采样点X处的样本值。八、非线性方程的数值求解1.单变量非线性方程求解MATLAB中,提供了求解单变量方程的函数fzero(f,x0,tol),该函数采用迭代法计算函数f(x)的一个零点,迭代初值为x0,当两次迭代结果小于tol时停止迭代过程。tol的缺省值是eps。注意,在调用函数fzero之前,要使用m文件建立自己要计算的函数f(x),只有定义了函数f(x)的m文件后,才能在fzero函数的参数中使用自定义函数名。2.非线性方程组求解函数fsolve调用格式为:X=fsolve(F,X0)九、稀疏矩阵矩阵存储方式1.矩阵的完全存储模式2.稀疏矩阵的存储方式稀疏存储方式的产生与转化1.将一个完全存储方式的转化为稀疏存储方式函数B=sparse(A)将矩阵A转化为稀疏存储方式的矩阵B。sparse函数还有其他一些格式:sparse(m,n)生成一个m×n的所有元素都是0的稀疏矩阵。sparse(u,v,S)u、v、S是三个等长的向量。此外,还有一些和稀疏矩阵操作有关的函数。例如[U,V,S]=find(A)返回矩阵A中非0元素的下标和元素。这里产生的U、V、S可作为sparse(u,v,s)的参数。ful