,单击此处编辑母版标题样式,单击此处编辑母版文本样式,MATLAB,语言及应用,MATLAB,语言及应用,MATLAB,语言及应用,MATLAB,语言及应用,MATLAB,语言及应用,MATLAB,语言及应用,MATLAB,语言及应用,MATLAB,语言及应用,单击此处编辑母版标题样式,单击此处编辑母版文本样式,单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,*,第五章 数值计算,主要内容,5.1,线性代数,5.2,函数分析,5.3,数据拟合,5.4,插值和样条,5.5,常微分方程的数值解,5.1,线性代数,一、LU分解,1.LU分解,一个矩阵可以分解为一个上三角矩阵和一个下三角矩阵的乘积,称之为LU分解。LU分解是用高斯主元消去法实现的,通常要对主元位置进展交换,主元交换的方法是将被分解矩阵左乘一个由01构成的行交换阵。,【调用格式】,L,U,P=lu(X)对矩阵X进展LU分解,并进展主元交换,L,U=lu(X)对矩阵X进展LU分解,无主元交换,【说明】,X为被分解的矩阵,L为主对角元素为1的下三角矩,阵,U为上三角矩阵,P为行交换矩阵。,5.1,线性代数,2.行列式和求逆,矩阵的行列式和求逆可以通过LU分解的方法求解,Matlab供给了相关函数。,【调用格式】,d=det(X)求矩阵X的行列式,Y=inv(X)求矩阵X的逆矩阵,例,5.1,线性代数,二、特征值和特征向量,对于求解矩阵的特征值和特征向量,Matlab供给了eig函数。,【调用格式】,D=eig(A)计算矩阵A的特征值,d为特征值构成的向量,V,D=eig(A)计算矩阵A的特征值对角阵D和特征向量矩阵V,V,D=eig(A,”nobalance”)当矩阵A中有与截断误差近似的数值,用本指令,例,三、奇异值分解,1.矩阵的奇异值分解,任意矩阵A可进展奇异值分解,即存在酉矩阵U和V,使下面等式成立,其中 称为矩阵的奇异值。,5.1,线性代数,【,调用格式,】,s=svd(A),求矩阵,A,的奇异值,,s,为由奇异值,构成的向量,U,S,V=svd(A),矩阵,A,的奇异值分解,5.1,线性代数,2.矩阵构造特征的奇异值描述,矩阵的奇异值可以描述矩阵的构造特征。有关矩阵构造特征的MATLAB,函数有如下几种。,r=rank(A,tol)在指定容差tol下,求矩阵A的秩。tol可以省略。,Z=null(A)求矩阵A的零空间。,V=orth(A)求矩阵A的值空间。,n=norm(A)求矩阵A的2范数。,n=norm(A,p)求矩阵A的各种范数。,c=cond(X,p)求矩阵A的条件数,p可以省略。,theta=subspace(A,B)求A和B矩阵所张子空间的夹角。,B=pinv(A,tol)在指定容差tol下,求矩阵A的,广义逆,tol可以省略。,5.1,线性代数,四、线性方程组的解,形如 的线性方程组中,独立方程的个数等于独立未知参数的个数称为恰定方程;,独立方程的个数大于独立未知参数的个数称为超定方程;,独立方程的个数小于独立未知参数的个数称为欠定方程。,针对不同状况,可以承受以下3种方法求解:,1.左除运算符法,对于一般的非奇异矩阵A,可以求得唯一数值解。欠定,方程和超定方程,可以获得最小二乘解。,x=Ab,5.1,线性代数,2.广义逆法,假设用左除运算符求解的时候消逝提示矩阵A为非奇异的警告或者解中消逝Nan,则可以承受广义逆法。,x=pinv(A)*b,3.符号计算法,可以求得方程组的符号解,对于欠定方程可以求得具有自由变量的解。,5.1,线性代数,例,5.1.3,求以下,3,个方程组的解,I,:,II,:,III,:,5.2,函数分析,一、函数的零点,1.多项式的根,通过roots函数来求取多项式全部的根。,【调用格式】,r=roots(p)多项式求根函数,求取多项式的全部根,【说明】,p为多项式的系数行向量,r为多项式全部根构成的列向量,5.2,函数分析,2.,一元函数零点,【,调用格式,】,x,fval,exitflag,output=fzero(fun,x0,options),完整调用格式,x=fzero(fun,x0),一元函数零点的最简调用格式,【说明】,fzero只能求得x0四周的单个零点,不能求取函数的全部零点。,输入变量fun表示一元函数,可以是字符串、内联函数或者函数句柄。,输入变量x0为零点的初始猜测值自变量值。假设x0为标量,则求距离x0最近的那个零点;假设x0=a,b,要求fun(a)和fun(b)异号,此时求自变量在a,b区间内的零点。,5.2,函数分析,输入变量options为优化迭代选项,是一个构造体。,输出变量x为零点处的自变量值,输出变量fval为,零点处的函数值。,输出变量exitflag表示函数中止计算的条件。,假设exitflag0表示找到零点后退出。,例,5.2.1,求函数,在,区间内的所有零点。,3.多元函数的零点,多元函数的准确零点可以用fsolve函数求取,但是必需供给零点的大致位置才能进展数值搜寻。,5.2,函数分析,【调用格式】,x,fval,exitflag,output=fsolve(fun,x0,options)完整格式,x=fsolve(fun,x0)多元非线性方程求解的最简格式,【说明】,fun表示自变量为向量的函数,可以是字符串、,内联函数、函数句柄。,输入变量x0为零点的初始猜测向量自变量值。,输出变量x为零点处的自变量值,输出变量fval为零,点处的函数值。,例,5.2.2,求方程组,在,附近的解。,5.2,函数分析,二、函数的极值点,Matlab供给了3个求极值点的函数,其输入输出参数的定义和,fsolve函数根本一样。,1.求一元函数fun在自变量x1,x2区间的最小值,x,fval,exitflag,output=fminbnd(fun,x1,x2,options),2.用单纯形法求多元函数fun在自变量向量x0四周的微小值点,x,fval,exitflag,output=fminsearch(fun,x0,options),3.用拟牛顿法求多元函数fun在自变量向量x0四周的微小值点,x,fval,exitflag,output=fminunc(fun,x0,options),例,5.2.3,求二元函数,在,附近的极小值。,5.2,函数分析,三、数值微分,数值导数和微分是基于差分定义的,对原始数据的采样间隔依靠很大,假设原始数据含有噪声,则数值导数结果没有什么价值,因此尽量避开求数值导数。Matlab中用diff函数求相邻数据间的数值差分。,【调用格式】,DX=diff(X)求X相邻元素的一阶差分,即后一个元素减去当前元素,DX=diff(X,n)求X相邻元素的n阶差分,DX=diff(X,n,dim)在dim指定的维上,求X,相邻元素的n阶差分,5.2,函数分析,【说明】,假设X是向量,差分是相邻元素相减;假设X是矩阵,差分是相邻 行,间对应元素相减。,差分数据DX元素的个数要比被操作数X少一个。,DX只是差分数据,假设相邻数据点之间的步长为DH,则DX./DH为,导数数据。,例,5.2.4,绘制函数,的导函数在,区间的曲线。,5.2,函数分析,四、数值积分,数值积分分为开型积分和闭型积分,二者的区分在于是否计算积分区间端点处的函数值。Matlab供给的数值积分函数有些适用于开型积分和闭型积分,有些只能用于闭型积分。积分计算可以承受本节介绍的相关函数,也可以承受样条积分法,还可以承受符号积分方法。,1.一元函数的数值积分,求一元函数数值积分的函数有很多,每个函数承受不同的数值算法,各有优缺点,精度和运算速度也不尽一样。,本节只介绍最常用的数值积分函数quadl。,【调用格式】,q=quadl(fun,a,b,tol,trace),承受递推自适应Lobatto法计算一元函数的积分,5.2,函数分析,【说明】,fun为被积函数,可以用字符串、内联函数和函数M文件的函数 句柄表示,且被积函数表达式要依据数组运算规章来编写。通常积分变量承受字母x。,a和b为积分变量的积分上下限,为常数数值。,tol为确定误差,是一个标量,可以省略。,trace为跟踪标志,当trace为非零值时,随积分进程会,逐点画出被积函数。,返回值q为数值积分的结果。,例,5.2.5,求积分,形如,的闭型二重数值积分的函数为,dblquad,【,调用格式,】,q=dblquad(fun,x1,x2,y1,y2,tol,method),2.,二重数值积分,【说明】,fun为被积函数,可以用字符串、内联函数和函数M文件的函数句柄,表示。积分变量用x,y表示,x为内重积分变量,y为外重积分变量。,x2和x1是变量x的积分上下限,y2和y1是变量y的积分上下限。,method表示选用的积分算法,可以省略,确是算法的,是quad,还可以选则quadl或者用户自定义的积分,算法M函数文件的函数句柄。,本函数无法计算内重积分上下限为函数表达式的状况。,5.2,函数分析,求形如 的闭型三重数值积分的函数为,triplequad,。,【,调用格式,】,q=triplequad(fun,x1,x2,y1,y2,z1,z2,tol,method),3.,三重数值积分,【,说明,】,fun,为被积函数 ,可以用字符串、内联函数和函数,M,文件的函数句,柄表示。积分变量用,x,,,y,,,z,表示,从内到外积分变量依次为,x,,,y,,,z,。,x2,和,x1,是变量,x,的积分上下限,,y2,和,y1,是变量,y,的积分,上下限,,z2,和,z1,是变量,z,的积分上下限。,其他事项同函数,dblquad,。,5.2,函数分析,例,5.2.6,计算定积分,5.3,数据拟合,某些离散的原始数据,建立一个曲线方程,让它以最正确的方式反映原始数据的变化趋势,尽量避开消逝局部的波动,这种方法称为拟合。不要求拟合曲线经过全部的原始数据。最正确方式通常是指用拟合得到的数学模型计算出来的计算数据和原始数据之间的误差的平方和最小,这种方式称为最小二乘。通常是曲线方程的形式数学模型的构造,依据原始数据来计算曲线方程的参数数学模型的参数。本节介绍Matlab中如何实现最小二乘拟合。,5.3,数据拟合,一、多项式拟合,多项式拟合是用一个n阶多项式模型去拟合原始数据的方法,需要计算的模型参数包括多项式的阶次和多项式的系数。Matlab供给了polyfit函数实现多项式拟合。,【调用格式】,p=polyfit(x,y,n),依据给定的数据(x,y),计算n阶拟合多项式的系数向量p,ye=polyval(p,x),计算自变量为x时多项式p的值估量值,5.3,数据拟合,【,说明,】,多项式拟合一般不要超过,5,阶,否则计算误差变大。,拟合多项式只在原始数据范围内可以保证精度,超出范围使用,拟合多项式无法保证预报的精度。,例:五个数据点:,1,5.5,2,43,3,128,4,290,5,498,,试画出这五个点拟合的三次曲线。,二、最小二乘拟合,1.线性最小二乘拟合,对于线性数学模型的参数估量,可以用形如Y=Ax+b的一阶多项式拟合来估量参数。某些非线性模型经过变量替换也可以转换为线性模型,也可以承受线性估量方法。,【调用格式】,a=lsqlin(Fun,a0,lb,ub,options,p1,p2,.),a=lsqnonlin(Fun,a0),5.3,数据拟合,例:对于非线性数学模型 ,其中a和b为模型参数,,承受变量替换将其转换为线性数学模型。,解:对数学模型取自然对数有,令,则有的线性数学模型,5.3,数据拟合,函数的功能是求取向量的值,使向量函数 满足,输入参数Fun是被解函数,Fun是向量函数,其自变,量a是向量。Fun可以用字符串、内联函数或者函数,M文件的函数句柄表示。,2.非线性最小二乘估量,可以使用MATLAB供给的lsqnonlin函数实现非线性最小二乘估量。,【调用格式】,a,resnorm,residual,exitfl