




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MATLAB的使用MATLAB作为线性系统的一种分析和仿真工具,是理工科大学生应该掌握的技术工具,它作为一种编程语言和可视化工具,可解决工程、科学计算和数学学科中许多问题。MATLAB建立在向量、数组和矩阵的基础上,使用方便,人机界面直观,输出结果可视化。其中,矩阵是MATLAB的核心!下面将从基本规则和操作,编程和作图以及文件的操作等等多个方面,来讲解数学建模中MATLAB的一些常用方法。一、 变量与函数变量、函数与编程所形成的m文件是MATLAB操作的基本,在介绍它们的具体使用方法之前,先给出一些必须了解的基本规则。1、 变量MATLAB和其他编程工具一样,变量是必须的基本元素,它也是以字母开头,后接字母、数字或下划线的字符序列,用法也基本一样。其具体的命名规则是:(1)变量名必须是不含空格的单个词;(2)变量名区分大小写;(3)变量名最多不超过19个字符;(4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号。特殊变量表注意,自定义的变量不能和表中变量名相同。2、数学运算符号及标点符号(1)MATLAB的每条命令后,若为逗号或无标点符号,则显示命令的结果;若命令后为分号,则禁止显示结果;(2)“%”后面所有文字为注释;(3)“.”表示续行。3、数学函数基本上,常用的数学函数在MATLAB中都有相应的命令,部分如下:4、M文件MATLAB的内部函数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件. 函数文件是文件名后缀为M的文件,这类文件的第一行必须是一特殊字符function开始,格式为: function 因变量名=函数名(自变量名)函数值的获得必须通过具体的运算实现,并赋给因变量。M文件建立方法:1. 在Matlab中,点:File-New-M-file 2. 在编辑窗口中输入程序内容 3. 点:File-Save,存盘,M文件名必须与函数名一致。Matlab的应用程序也以M文件保存。例:定义函数 f(x1,x2)=100(x2-x1)+(1-x1)1.建立M文件:fun.mfunction f=fun(x)f=100*(x(2)-x(1)2)2+(1-x(1)22. 可以直接使用函数fun.m例如:计算 f(1,2), 只需在Matlab命令窗口键入命令:x=1 2fun(x)二、数组与矩阵矩阵是MATLAB最基本的数据对象,MATLAB的大部分运算或命令都是在矩阵运算的意义下执行的。在MATLAB中,不需对矩阵的维数和类型进行说明,MATLAB会根据用户所输入的内容自动进行配置。1、数 组 数组可以看作是只有一行或一列的简单矩阵,但作为常用的计算单元,matlab也专门为其设计了一系列命令。(1)创建简单的数组x=a b c d e f 创建包含指定元素的行向量x=first:last 创建从first开始,加1计数,到last结束的行向量x=first:increment:last 创建从first开始,加increment计数,last结束的行向量x=linspace(first,last,n) 创建从first开始,到last结束,有n个元素的行向量x=logspace(first,last,n) 创建从开始,到结束,有n个元素的对数分隔行向量。(2)数组元素的访问(i)访问一个元素:x(i)表示访问数组x的第i个元素;(ii)访问一块元素:x(a :b :c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但不超过c),b可以为负数,b缺损时为1;(iii)直接使用元素编址序号:x(a b c d) 表示提取数组x的第a、b、c、d个元素构成一个新的数组 x(a) x(b) x(c) x(d)。(3)数组的方向 前面例子中的数组都是一行数列,是行方向分布的,称之为行向量。数组也可以是列向量,它的数组操作和运算与行向量是一样的,唯一的区别是结果以列形式显示。产生列向量有两种方法: 直接产生 例 c=1;2;3;4 转置产生 例 b=1 2 3 4; c=b 说明:以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素。(4)数组的运算(i)标量-数组运算 数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算。设:a=a1,a2,an, c=标量则:a+c=a1+c,a2+c,an+c a.*c=a1*c,a2*c,an*c a./c= a1/c,a2/c,an/c(右除) a.c= c/a1,c/a2,c/an (左除) a.c= a1c,a2c,anc c.a= ca1,ca2,can (ii)数组-数组运算 当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的。设:a=a1,a2,an, b=b1,b2,bn则:a+b= a1+b1,a2+b2,an+bn a.*b= a1*b1,a2*b2,an*bn a./b= a1/b1,a2/b2,an/bn a.b=b1/a1,b2/a2,bn/an a.b=a1b1,a2b2,anbn2、矩阵 通过下面的介绍,大家可以发现矩阵的相关命令和数组基本类似。(1)矩阵的建立逗号或空格用于分隔某一行的元素,分号用于区分不同的行。除了分号,在输入矩阵时,按Enter键也表示开始一新行。输入矩阵时,严格要求所有行有相同的列。例 m=1 2 3 4 ;5 6 7 8;9 10 11 12 p=1 1 1 1 2 2 2 2 3 3 3 3特殊矩阵的建立:a= 产生一个空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零;b=zeros(m,n) 产生一个m行、n列的零矩阵c=ones(m,n) 产生一个m行、n列的元素全为1的矩阵d=eye(m,n) 产生一个m行、n列的单位矩阵(2)矩阵中元素的操作(a)矩阵A的第r行:A(r,:)(b)矩阵A的第r列:A(:,r)(c)依次提取矩阵A的每一列,将A拉伸为一个列向量:A(:)(d)取矩阵A的第i1i2行、第j1j2列构成新矩阵:A(i1:i2, j1:j2)(e)以逆序提取矩阵A的第i1i2行,构成新矩阵:A(i2:-1:i1,:)(f)以逆序提取矩阵A的第j1j2列,构成新矩阵:A(:, j2:-1:j1 )(g)删除A的第i1i2行,构成新矩阵:A(i1:i2,:)= (h)删除A的第j1j2列,构成新矩阵:A(:,j1:j2)= (i)将矩阵A和B拼接成新矩阵:A B;A;B(3)矩阵的运算(i)标量-矩阵运算:同标量-数组运算;(ii)矩阵-矩阵运算: 1 元素对元素的运算,同数组-数组运算;2 矩阵运算:矩阵加法:A+B矩阵乘法:A*B方阵的行列式:det(A)方阵的逆:inv(A)方阵的特征值与特征向量:V,D=eigA。三、 MATLAB编程Matlab虽然提供了大量现成的函数供我们计算时使用,但当要真正解决一些实际问题时,这还远远不够,编程仍然是不可或缺的一步。Matlab也可以象C,FORTRAN等高级计算机语言一样,进行程序设计。下面简单介绍Matlab中一些重要的编程手段。1、关系与逻辑运算除了传统的数学运算,Matlab支持关系和逻辑运算。一个重要的应用是控制基于真/假命题的一系列Matlab命令的流程,或执行次序。(1)关系操作符 Matlab关系操作符包括所有常用的比较。能用来比较两个同样大小的矩阵,或用来比较一个矩阵和一个标量(矩阵中每一个元素都与标量相比,结果与矩阵大小一样)。(2)逻辑运算符 逻辑操作符提供了一中组合或否定关系表达式,具体如下:(3)控制流MATLAB提供三种决策或控制流结构:for循环、while循环、if-else-end结构。 这些结构经常包含大量的MATLAB命令,故经常出现在MATLAB程序中,而不是直接加在MATLAB提示符下。i、for循环:允许一组命令以固定的和预定的次数重复 for x=array commands end 在for和end语句之间的命令串commands按数组(array)中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:,n)。ii、While循环 与for循环以固定次数求一组命令相反,while循环以不定的次数求一组语句的值。while expression commands end 只要在表达式(expression)里的所有元素为真,就执行while和end语句之间的命令串commands。iii、If-Else-End结构(a)有一个选择的一般形式是: if expression commands end 如果在表达式(expression)里的所有元素为真,就执行if和end语句之间的命令串commands。先建立M文件fun1.m定义函数f(x),再在Matlab命令窗口输入fun1(2),fun1(-1)即可。(b) 有三个或更多的选择的一般形式是: if (expression1) commands1 else if (expression2) commands2 else if (expression3) commands3 else if elsecommands endendend end先建立M文件fun2.m定义函数f(x),再在Matlab命令窗口输入fun2(2),fun2(0.5), fun2(-1)即可。四、MATLAB作图强大的图形功能是Matlab的优点之一,它能方便快速的出图,给我们的工作带来了巨大的便利。1. 曲线图Matlab作图是通过描点、连线来实现的,故在画一个曲线图形之前,必须先取得该图形上的一系列的点的坐标(即横坐标和纵坐标),然后将该点集的坐标传给Matlab函数画图。命令为:PLOT(X,Y,S)其中,X,Y是向量,分别表示点集的横坐标和纵坐标,S指定曲线的颜色、线形等:y:黄色 c:蓝绿色 r:红色 m:洋红.:点 -:连线 o:圈 ::短虚线x:x-符号 -.:长短线 +:加号 -:长虚线PLOT(X,Y)画实线PLOT(X,Y1,S1,X,Y2,S2,X,Yn,Sn)将多条线画在一起例 在0,2*pi用红线画sin(x),用绿圈画cos(x)。解:x=linspace(0,2*pi,30);y=sin(x);z=cos(x);plot(x,y,r,x,z,g0)2.符号函数(显函数、隐函数和参数方程)画图(1) ezplotezplot(f(x),a,b) 表示在axb绘制显函数f=f(x)的函数图ezplot(f(x,y),xmin,xmax,ymin,ymax) 表示在区间xminxxmax和 yminyymax绘制隐函数f(x,y)=0的函数图ezplot(x(t),y(t),tmin,tmax) 表示在区间tmint cholMatrix must be positive definite命令执行时,出现错误信息,说明A为非正定矩阵。(2)迭代解法迭代解法非常适合求解大型系数矩阵的方程组。在数值分析中,迭代解法主要包括 Jacobi迭代法、Gauss-Serdel迭代法、超松弛迭代法和两步迭代法。iJacobi迭代法对于线性方程组Ax=b,如果A为非奇异方阵,即aii0(i=1,2,n),则可将A分解为A=D-L-U,其中D为对角阵,其元素为A的对角元素,L与U为A的下三角阵和上三角阵,于是Ax=b化为:x=D-1(L+U)x+D-1b与之对应的迭代公式为:x(k+1)=D-1(L+U)x(k)+D-1b这就是Jacobi迭代公式。如果序列x(k+1)收敛于x,则x必是方程Ax=b的解。Jacobi迭代法的MATLAB函数文件Jacobi.m如下:function y,n=jacobi(A,b,x0,eps)if nargin=3 eps=1.0e-6;elseif nargin=eps x0=y; y=B*x0+f; n=n+1;end例 用Jacobi迭代法求解下列线性方程组。设迭代初值为0,迭代精度为10-6。在命令中调用函数文件Jacobi.m,命令如下:A=10,-1,0;-1,10,-2;0,-2,10;b=9,7,6;x,n=jacobi(A,b,0,0,0,1.0e-6)iiGauss-Serdel迭代法在Jacobi迭代过程中,计算时,已经得到,不必再用,即原来的迭代公式Dx(k+1)=(L+U)x(k)+b可以改进为Dx(k+1)=Lx(k+1)+Ux(k)+b,于是得到:x(k+1)=(D-L)-1Ux(k)+(D-L)-1b该式即为Gauss-Serdel迭代公式。和Jacobi迭代相比,Gauss-Serdel迭代用新分量代替旧分量,精度会高些。Gauss-Serdel迭代法的MATLAB函数文件gauseidel.m如下:function y,n=gauseidel(A,b,x0,eps)if nargin=3 eps=1.0e-6;elseif nargin=eps x0=y; y=G*x0+f; n=n+1;end例 用Gauss-Serdel迭代法求解下列线性方程组。设迭代初值为0,迭代精度为10-6。在命令中调用函数文件gauseidel.m,命令如下:A=10,-1,0;-1,10,-2;0,-2,10;b=9,7,6;x,n=gauseidel(A,b,0,0,0,1.0e-6)例 分别用Jacobi迭代和Gauss-Serdel迭代法求解下列线性方程组,看是否收敛。命令如下:a=1,2,-2;1,1,1;2,2,1;b=9;7;6;x,n=jacobi(a,b,0;0;0)x,n=gauseidel(a,b,0;0;0)2、非线性方程数值求解(1) 单变量非线性方程求解 在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为: z=fzero(fname,x0,tol,trace)其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。例 求f(x)=x-10x+2=0在x0=0.5附近的根。步骤如下:(1) 建立函数文件funx.m。 function fx=funx(x) fx=x-10.x+2;(2) 调用fzero函数求根。 z=fzero(funx,0.5) z = 0.3758(2)非线性方程组的求解 对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为: X=fsolve(fun,X0,option)其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《CB-T 804-1999航海磁罗经系列》新解读
- 采购框架协议范本
- 2024年血橙提取物化妆品资金筹措计划书代可行性研究报告
- Brand KPIs for health insurance:Seguros Monterrey New York Life in Mexico-英文培训课件2025.4
- 广西壮族自治区河池市2022-2023学年高二下学期化学期末考试试题(含答案)
- 商丘物业公司管理制度
- 各项教育常规管理制度
- 初中英语八年级下册统编教案 uunit8
- 介绍抢购活动方案
- 从事营利活动方案
- MOOC 树木学-北京林业大学 中国大学慕课答案
- 2022年检验检测机构“双随机、一公开”监督检查自查自纠报告
- 喷涂碰伤不良分析报告
- 中医辨证论治高血压的诊断与治疗
- 中审众环测评题
- 故事绘本一园青菜成了精
- 中国古代文学史期末考试复习题(三)
- 【六年级上册部编版语文】课文内容填空及古诗词运用-专项练习复习(共86道附答案)
- 铁尾矿综合利用归纳
- 新生儿败血症护理查房查房
- 北京理工大学答辩模板课件
评论
0/150
提交评论