《MATLAB讲义第四章汇总课件.ppt》由会员分享,可在线阅读,更多相关《MATLAB讲义第四章汇总课件.ppt(59页珍藏版)》请在三一办公上搜索。
1、,第4章 MATLAB 的数学运算,MATLAB 2006a 简明教程 清华大学出版社,教学目标教学重点教学内容,10/9/2022,1,第4章 MATLAB 的数学运算 MATLAB 2006,教学目标,掌握向量和矩阵的运算掌握线性代数的基本函数和使用掌握稀疏矩阵的操作掌握多项式运算及插值掌握函数操作,10/9/2022,2,教学目标掌握向量和矩阵的运算10/9/20222,教学内容,向量、矩阵及其运算 矩阵和线性代数 稀疏型矩阵 多项式与插值 函数运算 微分方程,10/9/2022,3,教学内容向量、矩阵及其运算 10/9/20223,向量、矩阵及其运算,向量的点乘、叉乘和混合积矩阵的基本
2、运算 特殊矩阵生成 向量和矩阵的范数,10/9/2022,4,向量、矩阵及其运算向量的点乘、叉乘和混合积10/9/2022,向量的点乘、叉乘和混合积,向量的点乘 向量的点乘又称为内积,是两个向量的模和两个向量之间的夹角余弦三者的乘积。MATLAB 中,实现点乘的函数是dot。dot 函数的用法为 dot(x1,x2),其中 x1 和 x2 的维数必须相同。向量的叉乘 向量乘法除点乘之外还有叉乘。两个向量叉积的几何意义是指以两个向量模的乘积为模,方向和两个向量构成右手坐标系的向量。向量的叉乘不可交换。在 MATLAB 中函数 cross 用于实现向量的叉乘。向量的混合积 向量的混合积的几何意义是
3、:它的绝对值表示以三个向量为楞的平行六面体的体积,符号由右手法则确定。上面介绍了向量的点乘和叉乘,向量的混合积由点乘和叉乘逐步实现。,10/9/2022,5,向量的点乘、叉乘和混合积向量的点乘 10/9/20225,矩阵的基本运算,矩阵与常数之间的四则运算矩阵与常数的运算与数组运算相同矩阵和矩阵之间的四则运算矩阵和矩阵之间的加减运算与数组运算相同设 A 是一个 mn 矩阵,B 是一个 pq 矩阵,当 np 时,两个矩阵可以相乘,乘积为 mq 矩阵。矩阵乘法不可逆。在 MATLAB 中,矩阵乘法由“*”实现。矩阵除法在实际中主要用于求解线性方程组矩阵转置符号“”实现矩阵的转置操作。对于实数矩阵,
4、“”表示矩阵转置,对于复数矩阵,“”实现共轭转置。对于复数矩阵,如果想要实现非共轭转置,可以使用符号“.”。矩阵乘方,10/9/2022,6,矩阵的基本运算 矩阵与常数之间的四则运算10/9/20226,特殊矩阵生成 (1/2),10/9/2022,7,特殊矩阵生成 (1/2)函数功能生成空白矩阵zeros生,特殊矩阵生成 (2/2),1对角矩阵的生成对角矩阵指除对角线以外其他元素为 0 的矩阵。函数 diag 可以生成对角矩阵。该函数的用法为:A=diag(V,K),其中 V 是一个向量,K 是一个整数。该函数返回一个矩阵,矩阵的第 K 个对角线为 V。K 在默认情况下为 0,表示矩阵的主对
5、角线,K 大于 0 时表示主对角线的上方,小于 0 时为主对角线的下方。V=diag(A,K),其中A时一个矩阵。K 与上面的语句相同。该语句返回矩阵 A 第 K 个对角线上的元素组成的矩阵。2魔术矩阵的生成魔术矩阵是一种经常遇到的矩阵,除了二阶方阵之外,魔术矩阵的每一行、每一列以及每条主对角线的元素之和都相同。在 MATLAB 中,magic 函数用于生成魔术矩阵。其调用方法为 magic(N),其中 N 为正整数,并且 N2.,10/9/2022,8,特殊矩阵生成 (2/2)1对角矩阵的生成10/9/2022,向量和矩阵的范数,向量的范数定义为 ,其中,最常用的值为 1、2 和无穷大。矩阵
6、 的范数定义为 ,其中,最常用的值为 1、2 和无穷大。向量和矩阵的范数可以通过函数 norm 求解。该函数的调用格式为 n = norm(A,p),其中 p 用于指定范数的类型。p 可以为所有大于 1 的常数,最常用的为 1、2、inf 和 fro,fro 为求解矩阵 A 的 Frobenius 范数。当 p 省略时,默认值为 2。,10/9/2022,9,向量和矩阵的范数 向量的范数定义为 ,其中,最常用的值为 1,矩阵和线性代数,线性方程组逆矩阵和行列式 矩阵分解 矩阵指数函数和幂函数 矩阵特征值 矩阵奇异值分解,10/9/2022,10,矩阵和线性代数 线性方程组10/9/202210
7、,线性方程组(1/2),利用矩阵求逆的方法求解方程组 我们首先求系数矩阵的逆,然后利用矩阵的逆求解方程组的解。 利用矩阵的左除符号“”或者右除符号“/”求解方程组,10/9/2022,11,线性方程组(1/2)利用矩阵求逆的方法求解方程组 10/9/,线性方程组(2/2),利用左除符号和右除符号求解线性方程组,避免了矩阵求逆操作,因此系数矩阵 不必为方阵。如果系数矩阵 的维数为 ,则有三种情况: ,此时方程组为超定方程组,MATLAB 将给出最小二乘解; ,此时方程组为方阵系统,MATLAB 给出精确解; ,此时方程组为欠约束方程组,MATLAB 将给出一组基解,该解中包含最多 个非零元素。在
8、采用除法符号(包括左除和右除)求解线性方程组时,MATLAB 采用 因式分解法求解方程组。尽管 MATLAB 提供了两种方法,一般更倾向于采用第二种方法,该方法用到较少的浮点数运算,执行速度较快,另外,由于采用 分解法,得出的结果要精确的多。,10/9/2022,12,线性方程组(2/2)利用左除符号和右除符号求解线性方程组,避,逆矩阵和行列式,矩阵行列式 在 MATLAB 中,矩阵的行列式用函数 det 求解。调用格式为 det(A),其中 A 为方阵。矩阵求逆 对于非奇异方阵,如果存在方阵,满足 并且 ,则称为矩阵的逆,记为,在 MATLAB 中,用 inv(A) 来实现矩阵逆的求解。,1
9、0/9/2022,13,逆矩阵和行列式 矩阵行列式 10/9/202213,矩阵分解,Cholesky 分解LU 分解 QR 分解(正交分解),10/9/2022,14,矩阵分解 Cholesky 分解10/9/202214,Cholesky 分解,Cholesky 分解将对称矩阵表示为一个三角矩阵与其转置的乘积的形式,即,其中为对称矩阵,为上三角矩阵。并非所有的对称矩阵都能进行 Cholesky 分解,只有正定矩阵能够进行 Cholesky 分解,如 Pascal 矩阵。在 MATLAB 中 Cholesky 分解由函数 chol 实现,该函数对输入矩阵进行 Cholesky分解,返回其对应
10、的三角矩阵。 Cholesky 分解同样适用于复数矩阵。如果复数矩阵满足,其中表示矩阵的共轭转置。如果矩阵存在 Cholesky 分解则称其为 Hermitian 正定。,10/9/2022,15,Cholesky 分解 Cholesky 分解将对称矩阵表示,LU 分解,矩阵的 LU 分解将一个方阵表示为一个下三角置换矩阵和一个上三角矩阵乘积的形式。如,其中为下三角置换矩阵,为上三角矩阵。MATLAB 中 LU 分解可以通过函数 lu 实现。通过矩阵的 LU 分解,可以实现线性方程组的快速求解。另外矩阵的 LU 分解可用于矩阵快速求逆和求行列式,有 det(A) = det(L)*det(U)
11、 和 inv(A) = inv(U)*inv(L)。,10/9/2022,16,LU 分解 矩阵的 LU 分解将一个方阵表示为一个下三角置换,QR 分解(正交分解)(1/2),如果矩阵 满足 ,则为正交矩阵。正交矩阵为实矩阵,其每列为单位向量,并且各列互相正交。正交矩阵最简单的例子为二维旋转矩阵:对于复数矩阵,对应的概念为酉矩阵。在数值计算中正交矩阵有着重要的应用,因为正交矩阵具有长度不变性、角度不变性,并且不会扩大误差。矩阵的正交分解将矩阵表示为正交矩阵(或酉矩阵)和上三角矩阵的乘积。如 或 ,其中 为正交矩阵或酉矩阵, 为上三角矩阵, 为置换矩阵。正交分解有四种形式,包括完全分解、简化分解
12、、带置换矩阵的分解和不带置换矩阵的分解。,10/9/2022,17,QR 分解(正交分解)(1/2)如果矩阵 满足,QR 分解(正交分解)(2/2),完全分解过约束线性系统的系数矩阵函数超过列数,为一个矩阵并且,记为,则完全正交分解产生一个的正交矩阵和一个的上三角矩阵,满足。MATLAB 中矩阵的完全分解由函数 qr 实现。简化分解矩阵的简化正交分解可以节省存储空间和运算时间。正交分解可以通过在 qr 函数中设置第二个参数为 0 实现。与 LU 分解不同,QR 分解不需要对矩阵进行旋转或者置换,如上面的两个例子。但是如果对矩阵进行置换可以避免由于矩阵奇异造成的误差。选择置换后,在分解的每一步,
13、选择剩下列中范数最大的一列作为分解的基。这样得到的结果中,R 的对角线元素按照降序排列。包含置换的正交分解可以通过增加 qr 函数的输出参数得到。,10/9/2022,18,QR 分解(正交分解)(2/2) 完全分解10/9/2022,矩阵指数函数和幂函数,矩阵的正整数幂 如果 A 为方阵,p 为正整数,则 Ap 表示 p 个 A 相乘。矩阵的负数幂与分数幂如果 A 为非奇异方阵,则 A(-p) 等价于 inv(A)p。MATLAB 中,允许对矩阵进行分数幂运算,运算结果依赖于矩阵特征值的分布情况。矩阵指数运算 expm 用于实现矩阵的指数运算。线性系统 的解可以表示为 ,其中的矩阵指数运算可
14、以通过expm 完成。,10/9/2022,19,矩阵指数函数和幂函数 矩阵的正整数幂 10/9/202219,矩阵特征值,矩阵的特征值和特征值分解在线性代数中一直扮演着重要的角色。在 MATLAB 中,函数eig 实现矩阵的特征值计算和特征值分解。例 4-23 利用函数 eig 实现矩阵的特征值计算利用例 2-22 中的矩阵 A。在命令窗口中输入: A =0,-6,-1;6,2,-16;-5,20,-10;A = 0 -6 -1 6 2 -16 -5 20 -10 lambda = eig(A)lambda = -3.0710 -2.4645 +17.6008i -2.4645 -17.60
15、08i上例实现对矩阵特征值的计算,如果在调用 eig 函数时,设置输出参数的个数为2,则实现对矩阵的特征值分解。,10/9/2022,20,矩阵特征值 矩阵的特征值和特征值分解在线性代数中一直扮演着重,矩阵奇异值分解,对于矩阵 ,如果存在数 和向量 、 ,满足和 ,则称 为 的奇异值, 、 为 的奇异向量。如果将矩阵的奇异值写为对角矩阵的格式,记为(不足的部分记为0);以奇异向量为列并扩充为正交矩阵 和 ,则有 和 。 和 为正交矩阵,则得到 ,即为矩阵 的奇异值分解。在 MATLAB 中,函数svd 实现矩阵的奇异值分解。与矩阵的 QR 分解相似,奇异值分解也可以有简化分解。方法与 QR 分
16、解相同,即在输入参数中以 0 标志。如在命令窗口中继续输入:,10/9/2022,21,矩阵奇异值分解 对于矩阵 ,如果存在数 和向量,稀疏型矩阵 (1/2),在很多实际应用中,用户往往会遇到只有少数非 0 元素的矩阵,我们称这些矩阵为稀疏矩阵。如果对稀疏矩阵中的全部元素进行存储和计算则会导致时间和空间上的极大浪费。因此,为了更有效的存储和处理稀疏矩阵,MATLAB 中采用了一些优化技术:MATLAB 中只存储稀疏矩阵中的非 0 元素,并用行索引和列索引表明每个非 0 元素在原矩阵中的位置;同样,MATLAB 中采用了一些专门的算法来处理稀疏矩阵,以避免对 0 元素的运算,并且最大限度地减少中
17、间结果中的非 0 元素。,10/9/2022,22,稀疏型矩阵 (1/2)在很多实际应用中,用户往往会遇到只有少,稀疏型矩阵(2/2),稀疏型矩阵的生成 稀疏矩阵与满矩阵的相互转化 稀疏矩阵的操作,10/9/2022,23,稀疏型矩阵(2/2)稀疏型矩阵的生成 10/9/202223,稀疏型矩阵的生成(1/3),MATLAB 不会自动生成稀疏矩阵,因此,当用户判定一个矩阵为稀疏矩阵时,利用相关函数生成稀疏矩阵。MATLAB 中用于生成稀疏矩阵的函数如表 4-2 所示。,10/9/2022,24,稀疏型矩阵的生成(1/3)MATLAB 不会自动生成稀疏矩阵,稀疏型矩阵的生成(2/3),speye
18、 函数 speye 函数的调用格式为:S = speye(m,n);S = speye(n),分别用于生成 阶主对角线元素为一的稀疏矩阵和 阶单位稀疏矩阵。,10/9/2022,25,稀疏型矩阵的生成(2/3)speye 函数 10/9/202,稀疏型矩阵的生成(3/3),sprand 和 sprandn 函数 这两个函数的调用格式完全相同。两个函数的唯一区别为 sprand 函数生成的稀疏矩阵元素服从均匀分布,而sprandn 函数生成的稀疏矩阵元素服从正态分布。下面以 sprand 函数为例介绍这两个函数的应用。sprand 函数的调用格式有:R = sprand(S),生成与稀疏矩阵 S
19、 结构完全相同的稀疏矩阵,矩阵元素服从均匀分布;R = sprand(m,n,density),生成 阶稀疏矩阵,矩阵非 0 元素个数大约为density*m*n。R = sprand(m,n,density,rc),与上面的命令类似。如果 rc 为数值,则生成的矩阵条件数的倒数接近 rc;如果 rc 为一个长度不大于 min(m,n) 的一维向量,则生成的矩阵以 rc 的元素为奇异值,其他奇异值为 0。注意,不能用命令 sprand(n) 生成 n 阶稀疏矩阵。,10/9/2022,26,稀疏型矩阵的生成(3/3)sprand 和 sprandn,稀疏矩阵与满矩阵的相互转化,MATLAB 提
20、供了一些函数用于在稀疏矩阵和满矩阵之间进行转换,这些函数如表 4-3 所示。,10/9/2022,27,稀疏矩阵与满矩阵的相互转化 MATLAB 提供了一些函数用于,sparse 函数,sparse 函数的调用格式如下:S = sparse(A),该命令将矩阵 转化为稀疏矩阵。S = sparse(i,j,s,m,n,nzmax),该命令生成一个阶稀疏矩阵,其中、分别为该矩阵非0元的横坐标向量、纵坐标向量和值,、有相同的长度。该矩阵的非0元数目不超过nzmax。S = sparse(i,j,s,m,n),该命令与上面一条命令功能类似,生成的稀疏矩阵的非0元个数由的长度确定。S = sparse
21、(i,j,s),该命令生成的稀疏矩阵维数为。S = sparse(m,n),该命令生成一个初始稀疏矩阵,矩阵的全部元素为0。,10/9/2022,28,sparse 函数sparse 函数的调用格式如下:10/9,full 函数和find 函数,full 函数 full 函数的应用比较简单,其调用格式为 X=full(S),该命令将稀疏矩阵 S 转换为满矩阵。find 函数 find 既适用于满矩阵,也适用于稀疏矩阵。该函数在应用于稀疏矩阵时用于查找稀疏矩阵中的非 0 元素。该函数可以返回非 0 元素的位置、行列向量和元素值。,10/9/2022,29,full 函数和find 函数 full
22、 函数 10/9/2,常用的稀疏矩阵操作函数,MATLAB 中的大部分数学函数可以用于稀疏矩阵,功能和调用格式和应用于满矩阵时相同。另外,MATLAB 还提供了一些函数专门应用于稀疏矩阵。常用的稀疏矩阵操作函数如表所示。,10/9/2022,30,常用的稀疏矩阵操作函数MATLAB 中的大部分数学函数可以用,多项式与插值,多项式在数学中有着极为重要的作用,同时多项式的运算也是工程和应用中经常遇到的问题。MATLAB 提供了一些专门用于处理多项式的函数,用户可以应用这些函数对多项式进行操作。MATLAB 中对多项式的操作包括多项式求根、多项式的四则运算及多项式的微积分。,10/9/2022,31
23、,多项式与插值 多项式在数学中有着极为重要,多项式的表示,在 MATLAB 中多项式用一个行向量表示,向量中的元素为该多项式的系数,按照降序排列。如多项式 可以表示为向量 p=9 7 4 3。用户可以创建向量的方式创建多项式,再将其显示为多项式,,10/9/2022,32,多项式的表示在 MATLAB 中多项式用一个行向量表示,向量,多项式的四则运算,由于多项式是利用向量来表示,多项式的四则运算可以转化为向量的运算。多项式的加减为对应项系数的加减,因此可以通过向量的加减来实现。但是在向量的加减中两个向量需要有相同的长度,因此在进行多项式加减时,需要将短的向量前面补 0。多项式的乘法实际上是多项
24、式系数向量之间的卷积运算,可以通过 MATLAB 中的卷积函数 conv 来完成。多项式的除法为乘法的逆运算,可以通过反卷积函数 deconv 来实现。,10/9/2022,33,多项式的四则运算由于多项式是利用向量来表示,多项式的四则运算,多项式的其他运算,除多项式的四则运算外,MATLAB 还提供了多项式的一些其他运算。这些运算及其对应的函数如表所示。,10/9/2022,34,多项式的其他运算除多项式的四则运算外,MATLAB 还提供了,多项式的运算函数(1/2),roots 函数和 poly 函数 这两个函数为功能互逆的两个函数。roots 函数用于求解多项式的根。该函数的输入参数为多
25、项式的系数组成的行向量,返回值为由多项式的根组成的列向量。poly 函数用于生成根为制定数值的多项式。polyval 函数polyval 函数用于多项式求值。对于给定的多项式,利用该函数可以计算该多项式在任意点的值。,10/9/2022,35,多项式的运算函数(1/2)roots 函数和 poly 函数,多项式的运算函数(2/2),olyder 函数函数 polyder 用于多项式求导。该函数可以用于求解一个多项式的导数、两个多项式乘积的导数和两个多项式商的导数。该函数的用法为:q = polyder(p) 该命令计算多项式 p 的导数。c = polyder(a,b) 该命令实现多项式 a、
26、b 的积的导数。q,d = polyder(a,b) 该命令实现多项式a、b 的商的导数,q/d 为最后的结果。,10/9/2022,36,多项式的运算函数(2/2)polyder 函数 10/9/,多项式拟合,曲线拟合是工程中经常要用到的技术之一。MATLAB 提供了曲线拟合工具箱满足用户要求,另外,还提供了多项式拟合函数。函数 polyfit 给出在最小二乘意义下最佳拟合系数。该函数的调用格式为: p = polyfit(x,y,n)其中x、y分别为待拟合数据的 x 坐标和 y 坐标,n 用于指定返回多项式的次数。,10/9/2022,37,多项式拟合 曲线拟合是工程中经常要用到的技术之一
27、。MATLA,数据插值,根据已知数据推断未知数据,则需要使用数据插值的概念。MATLAB 提供了对数组的任意一维进行插值的工具,这些工具大多需要用到多维数组的操作。本节将对数据插值做简单的介绍,主要介绍一维插值。MATLAB 中一维插值主要有:多项式插值快速傅立叶变换(FFT)插值。,10/9/2022,38,数据插值根据已知数据推断未知数据,则需要使用数据插值的概念。,一维插值,一维插值在曲线拟合和数据分析中具有重要的地位。在 MATLAB 中,一维插值由函数 interp1 实现。该函数的调用格式为 yi = interp1(x,y,xi,method)x、y:采用数据的 x 坐标和 y
28、坐标xi :待插值的位置method:采用的插值方法该语句返回函数在点 xi 处的插值结果。该语句中的参数 method 可以选择的内容如表所示。,10/9/2022,39,一维插值一维插值在曲线拟合和数据分析中具有重要的地位。在 M,函数运算,函数的表示数学函数图象的绘制函数极值函数求解数值积分含参数函数的使用,10/9/2022,40,函数运算函数的表示 10/9/202240,函数的表示,MATLAB 中提供了两种函数表示的方法:利用 M 文件将函数定义为 MALTAB 函数将函数定义为 MALTAB 函数,当需要调用该函数时,需要通过符号“”获取函数句柄,利用函数句柄实现对函数的操作。
29、匿名函数方法直接创建函数,如语句: fh = (x)1./(x-0.3).2 + 0.01) + 1./(x-0.9).2 + 0.04)-6;,10/9/2022,41,函数的表示MATLAB 中提供了两种函数表示的方法: 10,数学函数图象的绘制,函数图象具有直观的特性,可以通过函数图象查看出一个函数的总体特征。MATLAB 提供了绘制函数图象的函数 fplot,方便用户绘制函数的图象。下面介绍该函数的用法。该函数的调用格式如下:fplot(fun,limits),y = f(x)fplot(fun,limits,LineSpec)fplot(fun,limits,tol)fplot(fu
30、n,limits,tol,LineSpec)fplot(fun,limits,n) fun 可以为 MATLAB 函数的 M 文件名,可以是包含变量 x 的字符串,该字符串可以传递给函数 eval,还可以是函数句柄。参数 limits用于指定绘制图象的范围。limits 是一个向量,用于指定 x 轴的范围,格式为 xmin xmax。limits 也可以同时指定 y 轴的范围,格式为 xmin xmax ymin ymax。,10/9/2022,42,数学函数图象的绘制 函数图象具有直观的特性,可以通过函数图象,函数极值,一元函数的极小值fminbnd 求得函数在给定区间内的局部极小值。该函数
31、的调用格式为x = fminbnd(fun,x1,x2,options)fun 为函数句柄x1 和 x2 分别用于指定区间的左右边界options 用于指定程序的其他参数,其元素取值如表所示。,10/9/2022,43,函数极值 一元函数的极小值 名称描述Display控制结果的,多元函数的极小值,MATLAB 提供了函数 fminsearch 用于计算多元函数的极小值。fminsearch 函数内部应用了 Nelder-Mead 单一搜索算法,通过调整 x 的各个元素的值来寻找f(x)的极小值。该算法虽然对于平滑函数搜索效率没有其他算法高,但它不需要梯度信息,从而扩展了其应用范围。因此,该算
32、法特别适用于不太平滑、难以计算梯度信息或梯度信息价值不大的函数。 用于求解函数极小值的函数还有 fminbnd。fminbnd 函数的用法与fminsearch 函数的用法基本相同,不同之处在于:fminbnd 函数的输入参数为寻找最小值的区间,并且只能用于求解一元函数的极值,fminsearch 函数的输入参数为初始值。,10/9/2022,44,多元函数的极小值MATLAB 提供了函数 fminsearc,函数求解,可以使用函数 fzero() 来求一元函数的零点。寻找一元函数零点时,可以指定一个初始点,或者指定一个区间。当指定一个初始点时,此函数在初始点附近寻找一个使函数值变号的区间,如
33、果没有找到这样的区间,则函数返回 NaN。该函数的调用格式为:x = fzero(fun,x0),x = fzero(fun,x1,x2):寻找 x0 附近或者区间 x1,x2 内 fun 的零点,返回该点的 x 坐标;x = fzero(fun,x0,options),x = fzero(fun, x1,x2,options):通过 options 设置参数;x,fval = fzero(.):返回零点的同时返回该点的函数值;x,fval,exitflag = fzero(.):返回零点、该点的函数值及程序退出的标志;x,fval,exitflag,output = fzero(.):返回零
34、点、该点的函数值、程序退出的标志及选定的输出结果。,10/9/2022,45,函数求解 可以使用函数 fzero() 来求一元函数的零点,数值积分,MATLAB 中提供了用于积分的函数,包括:一元函数的自适应数值积分一元函数的矢量积分二重积分和三重积分这些函数如表所示。,10/9/2022,46,数值积分 MATLAB 中提供了用于积分的函数,包括:函数功,一元函数的积分,MATLAB 中一元函数的积分可以用两个函数来实现:quad 和 quadl。函数 quad 采用低阶的自适应递归 Simpson 方法,函数 quadl 采用高阶自适应 Lobatto 方法,该函数是 quad8 函数的替
35、代。函数 quad 的调用格式如下:q = quad(fun,a,b),采用递归自适应方法计算函数 fun 在区间 上的积分,其精确度为 1e-6。q = quad(fun,a,b,tol),指定允许误差,指定的误差 tol 需大于 1e-6。该命令运行更快,但是得到的结果精确度降低。q = quad(fun,a,b,tol,trace),跟踪迭代过程,输出 fcnt a b-a Q 的值,分别为计算函数值的次数、当前积分区间的左边界、步长和该区间内的积分值。q,fcnt = quadl(fun,a,b,.),输出函数值的同时输出计算函数值的次数。,10/9/2022,47,一元函数的积分MA
36、TLAB 中一元函数的积分可以用两个函数来,一元函数的矢量积分,矢量积分相当于多个一元函数积分。当被积函数中含有参数,需要对该参数的不同值计算该函数的积分时,可以使用一元函数的矢量积分。矢量积分返回一个向量,每个元素的值为一个一元函数的积分值。quadv 函数与 quad 和 quadl 函数相似,可以设置积分参数和结果输出。,10/9/2022,48,一元函数的矢量积分矢量积分相当于多个一元函数积分。当被积函数,二重积分和三重积分,MATLAB 中二重积分和三重积分分别由函数 dblquad() 和函数 triplequad() 来实现。首先介绍函数 dblquad(),该函数的基本格式如下
37、:q = dblquad(fun,xmin,xmax,ymin,ymax),函数的参数分别为函数句柄、两个自变量的积分限,返回积分结果。q = dblquad(fun,xmin,xmax,ymin,ymax,tol),指定积分结果的精度。q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method),指定结果精度和积分方法,method 的取值可以是 quadl,也可以是用户自定义的积分函数句柄,该函数的调用格式必须与 quad 的调用格式相同。triplequad() 函数的调用格式和 dblquad() 基本相同,在调用 triplequad() 函数时,需
38、要六个参数指定积分限。,10/9/2022,49,二重积分和三重积分MATLAB 中二重积分和三重积分分别由函,含参数函数的使用,在很多情况下,需要进行运算的函数中包含参数。在 MATLAB 中使用含参函数的方式有两种:嵌套函数匿名函数。,10/9/2022,50,含参数函数的使用 在很多情况下,需要进行运算的函数中包含参数,用嵌套函数提供函数参数,使用含参函数的一个方法是编写一个 M 文件,该文件以函数参数作为输入,然后调用函数的函数来处理含参函数,最后把含参函数以嵌套函数的方式包含在 M 文件中。,10/9/2022,51,用嵌套函数提供函数参数使用含参函数的一个方法是编写一个 M,用匿名
39、函数提供函数参数,使用含参函数还可以通过匿名函数来实现,函数的参数在使用之前必须先赋值。具体步骤为:首先创建一个含参函数,保存为 M 文件。函数的输入为自变量 x 和函数参数;在调用函数的函数前对参数赋值;用含参函数创建匿名函数;把匿名函数的句柄传递给函数的函数进行计算。,10/9/2022,52,用匿名函数提供函数参数 使用含参函数还可以通过匿名函数来实现,微分方程,MATLAB 能够求解的微分方程类型包括:常微分方程初值问题常微分方程边值问题时滞微分方程初值问题偏微分方程,10/9/2022,53,微分方程 MATLAB 能够求解的微分方程类型包括:10/9,常微分方程初值问题,MATLA
40、B 可以求解的常微分方程包括下面三种类型:显式常微分方程线性隐式常微分方程, ,其中 为矩阵全隐式常微分方程,10/9/2022,54,常微分方程初值问题 MATLAB 可以求解的常微分方程包括下,显式常微分方程,MATLAB 可以求解刚性方程和非刚性方程。求解微分方程的命令格式为:t,y = solver(odefun,tspan,y0,options)odefun:待求解方程的句柄tspan:为积分区间y0:为一个向量,包括问题的初始条件Options:用于指定求解算法。对于刚性方程和非刚性方程,可以选择的算法不同。对于非刚性方程,可以选择的算法如下:ode45:基于显式 Runge-Ku
41、tta(4,5) 规则求解,10/9/2022,55,显式常微分方程 MATLAB 可以求解刚性方程和非刚性方程。,对于非刚性方程,可以选择的算法如下:ode45:基于显式 Runge-Kutta(4,5) 规则求解ode23:基于显式 Runge-Kutta(2,3) 规则求解 ode113: 利用变阶 Adams-Bashforth-Moulton 算法求解,10/9/2022,56,对于非刚性方程,可以选择的算法如下:10/9/202256,刚性方程的求解方法如下 :ode15s:基于数值积分公式的变阶求解算法ode23s:采用二阶改进 Rosenbrock 公式的算法ode23t:采用
42、自由内插的梯形规则ode23tb:采用 TR-BDF2 算法,该算法为隐式 Runge-Kutta 公式,包含两个部分,第一个部分为梯形规则,第二个部分为二阶后向差分。,10/9/2022,57,刚性方程的求解方法如下 :10/9/202257,完全隐式常微分方程,完全隐式常微分方程的形式为: 。函数 ode15i 用于求解完全隐式常微分方程。用法为:t,y = ode15i(odefun,tspan,y0,yp0,options)Odefun:为待求解方程Tspan:用于指定积分区间y0 和 yp0: 分别用于指定初值 和 ,这两个初值必须一致,即满足 。Options:可选参数,用于指定积
43、分方法。该函数输出在离散节点处的近似值。,10/9/2022,58,完全隐式常微分方程 完全隐式常微分方程的形式为:,常微分方程边值问题,bvp4c 函数用于求解常微分方程边值问题,该函数点调用格式为:sol = bvp4c(odefun,bcfun,solinit)sol = bvp4c(odefun,bcfun,solinit,options)Odefun:待求解的函数句柄bcfun:函数边值条件的函数句柄solinit:一个结构体,为该方程解的初始估计值。options:可选参数,用于指定积分算法,该参数为一个结构体,可以通过函数 bvpset 创建。,10/9/2022,59,常微分方程边值问题 bvp4c 函数用于求解常微分方程边值问,