第8章-计算方法的MATLAB实现(MATLAB课件).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第8章-计算方法的MATLAB实现(MATLAB课件).ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算方法 MATLAB 实现 课件
- 资源描述:
-
1、MATLAB 7.0MATLAB 7.0从入从入门到精通门到精通哈尔滨工业大学哈尔滨工业大学(威海威海)汽车工程学院汽车工程学院2023-2-112课程主要内容课程主要内容 第第1章章 MATLAB简介简介 第第2章章 数值运算数值运算 第第3章章 单元数组和结构单元数组和结构 第第4章章 字符串字符串 第第5章章 符号运算符号运算 第第6章章 MATLAB绘图基础绘图基础 第第7章章 程序设计程序设计 第第8章章 计算方法的计算方法的MATLAB实现实现 第第9章章 优化设计优化设计 第第10章章 SIMULINK仿真初探仿真初探2023-2-113第第8章章 计算方法的计算方法的MATLA
2、B实现实现 随着计算机的迅速发展与广泛运用,在众随着计算机的迅速发展与广泛运用,在众多的领域,科学计算方法的应用越来越广多的领域,科学计算方法的应用越来越广泛了,而泛了,而MATLAB在进行科学计算方面有在进行科学计算方面有着无与伦比的优势。本章介绍着无与伦比的优势。本章介绍MATLAB在在计算方法中的运用。计算方法中的运用。2023-2-1148.1 方程求根方程求根 roots见多项式求根;见多项式求根;roots(多项式系数矩阵多项式系数矩阵)fzero可求解非线性方程,它的格式为:可求解非线性方程,它的格式为:fzero(function,x0)其中其中function为求解的方程,为
3、求解的方程,x0为估计的根,为估计的根,x0可为标量或长度为可为标量或长度为2的向量,为向量时函的向量,为向量时函数的两端的值应该符号相反,此时求区间数的两端的值应该符号相反,此时求区间上的解。只能求解上的解。只能求解x0附近的一个解。即使附近的一个解。即使在某个区间内有多个解,但是区间端点符在某个区间内有多个解,但是区间端点符号相同的话仍然出错。号相同的话仍然出错。2023-2-115程序实例程序实例 fzero(x3-3*x-1,2)ans=1.8794 fzero(x3-3*x-1,1,4)ans=1.8794 fzero(x3-3*x-1,2,4)?Error using=fzero
4、The function values at the interval endpoints must differ in sign.2023-2-116程序实例程序实例 fzero(x2-3*x+2,0)ans=1.0000 fzero(x2-3*x+2,3)ans=2.0000 fzero(x2-3*x+2,0,4)?Error using=fzero The function values at the interval endpoints must differ in sign.2023-2-1178.2 线性方程组数值解法线性方程组数值解法 线性方程组的求解不仅在工程技术领域涉线性方程
5、组的求解不仅在工程技术领域涉及到,而且在其他的许多领域也经常碰到,及到,而且在其他的许多领域也经常碰到,因此这是一个应用相当广泛的课题。因此这是一个应用相当广泛的课题。关于线性方程组的数值解法一般分为两类:关于线性方程组的数值解法一般分为两类:一类是直接法,就是在没有舍入误差的情一类是直接法,就是在没有舍入误差的情况下,通过有限步四则运算求得方程组准况下,通过有限步四则运算求得方程组准确解的方法。另一类是迭代法,就是先给确解的方法。另一类是迭代法,就是先给定一个解的初始值,然后按一定的法则逐定一个解的初始值,然后按一定的法则逐步求出解的各个更准确的近似值的方法。步求出解的各个更准确的近似值的方
6、法。2023-2-1188.2.1 直接解法直接解法 关于线性方程组的直接解法有许多种,比关于线性方程组的直接解法有许多种,比如如Gauss消去法、列主元消去法、平方根法消去法、列主元消去法、平方根法等。而在等。而在MATLAB中,线性方程组的直接中,线性方程组的直接解法只需用符号解法只需用符号“/”或或“”就解决问题。还就解决问题。还可以使用逆阵函数来求解:可以使用逆阵函数来求解:x=inv(A)*B。2023-2-119程序实例程序实例 求解下列方程组求解下列方程组615318153312321321321xxxxxxxxx2023-2-1110程序实例程序实例 a=12-3 3;-18
7、3-1;1 1 1;b=15;-15;6;x1=ab x1=1.0000 2.0000 3.0000 x2=inv(a)*b x2=1 2 32023-2-11118.2.2 线性方程组求解中的变换线性方程组求解中的变换 上三角变换上三角变换 U=triu(x)返回矩阵返回矩阵x的上三角部分;的上三角部分;U=triu(x,k)返回第返回第k条对角线以上部分的元条对角线以上部分的元素。素。2023-2-1112程序实例程序实例 a=12-3 3;-18 3-1;1 1 1;triu(a)ans=12 -3 3 0 3 -1 0 0 12023-2-1113 triu(a,1)ans=0 -3
8、3 0 0 -1 0 0 0 triu(a,-1)ans=12 -3 3 -18 3 -1 0 1 1程序实例程序实例2023-2-1114 下三角变换下三角变换 U=tril(x)返回矩阵返回矩阵x的下三角部分;的下三角部分;U=tril(x,k)返回第返回第k条对角线以上下部分的条对角线以上下部分的元素。元素。2023-2-1115程序实例程序实例 a=12-3 3;-18 3-1;1 1 1;tril(a)ans=12 0 0 -18 3 0 1 1 12023-2-1116程序实例程序实例 tril(a,1)ans=12 -3 0 -18 3 -1 1 1 1 tril(a,-1)an
9、s=0 0 0 -18 0 0 1 1 02023-2-1117 对角变换对角变换 U=diag(x)返回矩阵返回矩阵x主对角线上的元素,返主对角线上的元素,返回结果是一列向量形式;回结果是一列向量形式;U=diag(x,k)返回第返回第k条对角线上的元素值。条对角线上的元素值。当当x为向量时生成矩阵。为向量时生成矩阵。2023-2-1118程序实例程序实例 a=12-3 3;-18 3-1;1 1 1;diag(a)ans=12 3 12023-2-1119程序实例程序实例 a=12-3 3;-18 3-1;1 1 1;diag(a,1)ans=-3 -1 diag(a,-1)ans=-18
10、 12023-2-11208.2.3 迭代解法迭代解法 迭代解法非常适用于求解大型稀疏系数矩阵迭代解法非常适用于求解大型稀疏系数矩阵的方程组,在线性方程组常用的迭代解法主的方程组,在线性方程组常用的迭代解法主要有要有Jacobi迭代法、迭代法、Gauss-Seidel迭代法。迭代法。2023-2-1121Jacobi迭代法迭代法2023-2-1122Jacobi.m function s=jacobi(a,b,x0,eps)%jacobi迭代法皆线性方程组迭代法皆线性方程组%a为系数矩阵,为系数矩阵,b为方程组为方程组ax=b中的右边中的右边的矩阵的矩阵b,x0为迭代初值为迭代初值 if na
11、rgin=3 eps=1.0e-6;elseif nargin=eps x0=s;s=B*x0+f;end return2023-2-1124程序实例程序实例 用上面编写的用上面编写的jacobi函数求解下列方程组函数求解下列方程组1052151023210321321321xxxxxxxxx2023-2-1125程序实例程序实例 a=10-2-1;-2 10-1;-1-2 5;b=3 15 10;x=jacobi(a,b,0 0 0,eps)x=1 2 32023-2-1126Gauss-Saidel迭代法迭代法2023-2-1127gauss.m function s=gauss(a,b,
12、x0,eps)%gauss-seidel迭代法皆线性方程组迭代法皆线性方程组%a为系数矩阵,为系数矩阵,b为方程组为方程组ax=b中的右边中的右边的矩阵的矩阵b,x0为迭代初值为迭代初值 if nargin=3 eps=1.0e-6;elseif nargin=eps x0=s;s=B*x0+f;end return2023-2-1129程序实例程序实例 用上面编写的用上面编写的gauss函数求解下列方程组函数求解下列方程组105210226210321321321xxxxxxxxx2023-2-1130程序实例程序实例 a=10-2-1;-2 2-1;-1-2 5;b=6;10;10;x=g
13、auss(a,b,0 0 0,eps)x=4 13 82023-2-11318.3 非线性方程组数值解法非线性方程组数值解法 与线性方程组的求解一样,非线性方程组与线性方程组的求解一样,非线性方程组的求解也是应用很广泛的课题。一般情况,的求解也是应用很广泛的课题。一般情况,非线性方程组的数值解法主要采用迭代法非线性方程组的数值解法主要采用迭代法来求解。比较常用的迭代法主要有不动点来求解。比较常用的迭代法主要有不动点迭代法、迭代法、Newton迭代法、拟迭代法、拟Newton迭代法迭代法等几种方法。等几种方法。2023-2-1132不动点迭代法不动点迭代法2023-2-1133staticite
14、rate.m function s=staticiterate(x,eps)%不动点迭代法解非线性方程组,不动点迭代法解非线性方程组,x为迭代为迭代初值,初值,eps为允许误差为允许误差 if nargin=1 eps=1.0e-6;elseif nargin=eps x=xx;xx=fx(x);end s=xx;return2023-2-1135程序实例程序实例 用不动点迭代法求解下面的方程组用不动点迭代法求解下面的方程组081008102122122121xxxxxxx2023-2-1136fx.mfx.m 首先编写上述非线性方程组的首先编写上述非线性方程组的M文件文件fx.m funct
15、ion y=fx(x)y(1)=0.1*(x(1)*x(1)+x(2)*x(2)+8);y(2)=0.1*(x(1)*x(2)*x(2)+x(1)+8);y=y(1)y(2);2023-2-1137程序实例程序实例 x=staticiterate(0 0)x=1.0000 1.00002023-2-1138Newton迭代法迭代法2023-2-1139newtoniterate.m function s=newtoniterate(x,eps)%newton迭代法解非线性方程组,迭代法解非线性方程组,x为迭代为迭代初值,初值,eps为允许误差为允许误差 if nargin=1 eps=1.0e
16、-6;elseif nargin=eps x=x0+x;x1=fx1(x);x2=-dfx1(x);x3=inv(x2);x0=x3*x1;end s=x0+x;return2023-2-1141程序实例程序实例 用上面编写的用上面编写的newton迭代函数求解下列迭代函数求解下列方程组方程组081008102122122121xxxxxxx2023-2-1142fx1.m和和dfx1.m 首先,编写上述非线性方程组的首先,编写上述非线性方程组的M文件文件fx1.m function y=fx1(x)y(1)=x(1)*x(1)-10*x(1)+x(2)*x(2)+8;y(2)=x(1)*x(
17、2)*x(2)-10*x(2)+x(1)+8;y=y(1)y(2);然后,编写上述非线性方程组导数的然后,编写上述非线性方程组导数的M文件文件dfx1.m function y=dfx1(x)y(1)=2*x(1)-10;y(2)=2*x(2);y(3)=x(2)*x(2)+1;y(4)=2*x(1)*x(2)-10;y=y(1)y(2);y(3)y(4);2023-2-1143程序实例程序实例 x=newtoniterate(0 0)x=1 12023-2-11448.4 插值与拟合插值与拟合 在生产实践及科学实验中,插值与拟合的在生产实践及科学实验中,插值与拟合的应用非常广泛。下面,就对如
18、何用应用非常广泛。下面,就对如何用MATLAB来处理插值与拟合作一介绍。来处理插值与拟合作一介绍。2023-2-11458.4.1 一维插值一维插值 yi=interp1(x,y,xi)返回在插值向量返回在插值向量xi处的函处的函数向量数向量yi,它是根据向量,它是根据向量x和和y插值而来。如插值而来。如y是矩阵,则对是矩阵,则对y每一列进行插值,如每一列进行插值,如xi中元中元素不在素不在x内,返回内,返回NaN。yi=interp1(y,xi)省略省略x,表示,表示x=1:N,此时,此时N为向量为向量y的长度或为矩阵的长度或为矩阵y的行数。的行数。yi=interp1(x,y,xi,met
19、hod)表示用表示用method指指定的插值方法进行插值。定的插值方法进行插值。2023-2-1146 Method可取如下的值:可取如下的值:nearest最近插值最近插值 linear线性插值线性插值 spline三次样条插值三次样条插值 cubic三次插值三次插值 Method默认值为线性插值,上述插值要求默认值为线性插值,上述插值要求向量向量x单调。单调。2023-2-1147程序实例程序实例 x=1 2 4 6 8 9 10 13 15 16;y=5 7 8 10 13 14 15 17 19 20;x1=1.2 2.1 3;y1=interp1(x,y,x1)y1=5.4000 7
20、.0500 7.50002023-2-1148程序实例程序实例 x=1 2 4 6 8 9 10 13 15 16;y=5 7 8 10 13 14 15 17 19 20;x1=1.2 2.1 3;y1=interp1(x,y,x1,linear)y1=5.4000 7.0500 7.50002023-2-1149程序实例程序实例 x=1 2 4 6 8 9 10 13 15 16;y=5 7 8 10 13 14 15 17 19 20;x1=1.2 2.1 3;y1=interp1(x,y,x1,nearest)y1=5 7 82023-2-1150程序实例程序实例 x=1 2 4 6
21、8 9 10 13 15 16;y=5 7 8 10 13 14 15 17 19 20;x1=1.2 2.1 3;y1=interp1(x,y,x1,spline)y1=5.5520 7.1114 7.67852023-2-1151程序实例程序实例 x=1 2 4 6 8 9 10 13 15 16;y=5 7 8 10 13 14 15 17 19 20;x1=1.2 2.1 3;y1=interp1(x,y,x1,cubic)y1=5.5006 7.0814 7.54762023-2-1152程序实例程序实例 x=linspace(0,2*pi,100);y=sin(x);x0=lins
22、pace(0,2*pi,6);y0=sin(x0);x1=0.62 1.9 3.2 4.34 5.55;y1=interp1(x0,y0,x1);plot(x,y,x0,y0,ro,x1,y1,+)title(默认插值默认插值)2023-2-11532023-2-1154程序结果程序结果 y1 y1=0.4692 0.7651 -0.0546 -0.7526 -0.5549 y10=sin(x1)y10=0.5810 0.9463 -0.0584 -0.9315 -0.6692 deltay1=y1-y10 deltay1=-0.1118 -0.1812 0.0037 0.1789 0.114
23、32023-2-1155程序实例程序实例 x=linspace(0,2*pi,100);y=sin(x);x0=linspace(0,2*pi,6);y0=sin(x0);x1=0.62 1.9 3.2 4.34 5.55;y1=interp1(x0,y0,x1,linear);plot(x,y,x0,y0,ro,x1,y1,+)title(linear插值插值)2023-2-11562023-2-1157程序结果程序结果 y1 y1=0.4692 0.7651 -0.0546 -0.7526 -0.5549 y10=sin(x1)y10=0.5810 0.9463 -0.0584 -0.93
24、15 -0.6692 deltay1=y1-y10 deltay1=-0.1118 -0.1812 0.0037 0.1789 0.11432023-2-1158程序实例程序实例 x=linspace(0,2*pi,100);y=sin(x);x0=linspace(0,2*pi,6);y0=sin(x0);x1=0.62 1.9 3.2 4.34 5.55;y1=interp1(x0,y0,x1,nearest);plot(x,y,x0,y0,ro,x1,y1,+)title(nearest插值插值)2023-2-11592023-2-1160程序结果程序结果 y1 y1=0 0.5878
25、-0.5878 -0.5878 -0.9511 y10=sin(x1)y10=0.5810 0.9463 -0.0584 -0.9315 -0.6692 deltay1=y1-y10 deltay1=-0.5810 -0.3585 -0.5294 0.3437 -0.28182023-2-1161程序实例程序实例 x=linspace(0,2*pi,100);y=sin(x);x0=linspace(0,2*pi,6);y0=sin(x0);x1=0.62 1.9 3.2 4.34 5.55;y1=interp1(x0,y0,x1,spline);plot(x,y,x0,y0,ro,x1,y1
展开阅读全文