MATLAB2016程序设计基础_第1页
MATLAB2016程序设计基础_第2页
MATLAB2016程序设计基础_第3页
MATLAB2016程序设计基础_第4页
MATLAB2016程序设计基础_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章MATLAB根底1MATLAB开发环境MATLAB语言的变量运算符语句MATLAB中的M文件等。2主要内容MATLAB开发环境的主界面,主要包括:工具栏命令窗口〔CommandWindow〕工作空间窗口(Workspace)命令历史窗口〔CommandHistory〕当前路径窗口〔CurrentDirectory〕等32.1MATLAB的程序界面MATLAB2023a程序界面上半局部是一个工具栏,包括主页、绘图和应用程序三个选项卡(tab),其中主页选项卡又分为文件、变量、代码、SIMULINK、环境和资源几个区(section),每个区中有假设干个命令。通过工具栏右上角的按钮或最小化或恢复工具栏。下半局部包括当前文件夹窗口〔CurrentFolder〕、命令行窗口〔CommandWindow〕和工作区窗口(Workspace),42.1MATLAB的程序界面2.1.1命令行窗口1、命令行窗口的功能命令行窗口是用户与MATLAB编译器进行通信的工作环境,采用交互式设计方式。“>>〞为提示符,表示MATLAB编译器正等待用户输入命令52.1MATLAB的程序界面例如,要创立一个变量,并赋值3.14>>x=3.14>>sin(x)注意:ans是answer的缩写,MATLAB中的默认结果变量,当没有指定存储数据的变量时,就默认使用ans来保存数据。>>x=4.56;注意:分号“;〞的作用是让MATLAB系统只完成该命令要求的计算任务,不显示计算结果。62.1MATLAB的程序界面用↑或↓可以调出以前输入的命令。如:>>sn(x)假设想删除一个还没执行的命令,可以直接按ESC键72.1MATLAB的程序界面

8键功能键功能↑重调前一行End移动到行尾↓重调下一行ESC清除一行←左移一个字符Backspace删除光标左侧一个字符→右移一个字符PageUp向前翻页Ctrl+←左移一个字PageDown向后翻页Ctrl+→右移一个字Ctrl+Home光标移到命令窗口首Home移动到行首Ctrl+End光标移到命令窗口尾2.1MATLAB的程序界面

2、数值的显示格式在命令行窗口显示数值结果时,如果是整数,显示整数;如果是实数,默认显示小数点后四位有效数字。用format命令来指定改变数值的显示格式,但不影响计算与存储。formatstyle设置命令行窗口数据的输出格式为styleformat

设置命令行窗口数据的输出格式为默认格式。92.1MATLAB的程序界面

102.1MATLAB的程序界面

2.1.2工作区窗口工作区窗口是MATLAB的变量管理中心,每次启动MATLAB,都会自动建立一个工作区,运行MATLAB的程序或命令时产生的变量被参加到工作区中,除非用特殊的命令删除某变量,否那么该变量在关闭MATLAB之前一直保存在工作区,工作区在MATLAB运行期间一直存在,关闭MATLAB后,工作区才会自动消除。112.1MATLAB的程序界面

MATLAB提供了一些命令随时查看工作区中的变量名及变量的值.who或whos显示当前工作区中的所有变量。who只显示变量名,whos给出变量的大小、数据类型等信息。class(变量名)显示工作空间中指定变量的数据类型。size〔变量名〕显示当前工作区中指定变量的尺寸。length(变量名)显示当前工作区中最大维数中的长度。122.1MATLAB的程序界面

disp(变量名)显示当前工作区中指定变量。clear去除工作区中的所有变量clearvar1var2var3…去除指定的工作区变量例2-1首先定义三个变量x,y,z并分别赋值,然后查看工作区中的变量名、类型及值,最后去除变量z。>>x=123;y=3.14159;z=100;>>who>>whos>>disp(x)132.1MATLAB的程序界面

当前文件夹窗口当前文件夹(CurrentFolder)窗口显示了MATLAB在对文件操作〔保存、翻开等〕时默认的工作目录,显示的文件信息包括文件名称、文件类型、修改日期、内容描述等。该窗口相当于是一个资源管理器。在当前文件夹窗口中的某一文件上单击鼠标右键,会弹出上下文菜单,可通过此菜单实现对文件的翻开、运行、重命名、复制、删除等操作142.1MATLAB的程序界面2.1.4命令历史记录窗口

命令历史记录窗口(CommandHistory)记录了所有执行过的命令及执行时间,用户可以用鼠标双击在该窗口中的某一历史命令来重新执行该命令,也可以用鼠标右击某一历史命令,利用弹出的上下文菜单,进行复制、删除、执行命令152.1MATLAB的程序界面在MATLAB命令窗口中输入demo后按回车键,MATLAB按以下顺序开始搜索:〔1〕在工作区中检查demo是不是变量,如果是,返回该变量值;否那么转入(2)。〔2〕检查demo是不是内部函数,如果是,执行该内部函数;否那么转入(3)。〔3〕在当前文件夹中检查是否有名为demo.m的文件,如果有,执行该文件;否那么转入(4)。〔4〕在搜索路径中查找是否有名为demo.m的文件,如果有,执行该文件;否那么给出出错信息。162.2搜索路径可以通过在命令窗口中输入path命令查看当前搜索路径。用户还可以使用path命令临时添加新的搜索路径。如:>>path〔’D:\mypath’,path〕;通过“主页〞选项卡上“环境〞区中的“设置路径〞命令,翻开“设置路径〞对话框,进行设置。注意:MATLAB命令中所涉及的文件假设既不存当前文件夹下,也不在MATLAB的搜索路径中,那么在文件名的前面必须加上路径。172.2搜索路径MATLAB有以下几种方法获得帮助:帮助命令帮助窗口HelpDesk在线帮助页或直接链接到MathWorks公司(对于已联网的用户)。182.3帮助系统1、帮助命令help和lookfor〔1〕help命令用法是:help:显示help主题一览表。help函数名:显示相应函数的有关帮助信息。help帮助主题:获取指定主题的帮助信息。例2-2显示函数sin的帮助信息>>helpsin192.3帮助系统〔2〕lookfor虽然help可以随时提供帮助,但必须知道准确的函数名称。当不能确定函数名称时,help就无能为力了。lookfor命令,它可提供通过完整或局部的关键词,搜索出一组与之相关的命令。一般情况下,该命令仅搜索各个文件帮助文本的第一行。>>lookforsi202.3帮助系统2、帮助窗口在MATLAB命令窗口中有二种方法进入帮助窗口:〔1〕单击菜单条上的问号按钮。〔2〕选取帮助菜单里的“Help〞项。212.3帮助系统2.4.1

数据与数据类型2.4.2

数据文件2.4.3运算符2.4.4根本数学函数2.4.5

M文件程序控制语句222.4数据与数据类型2.4.1常量232.4数据与数据类型常量名常量值常量名常量值i,j虚数单位,定义为

realmindouble型数据的最小的正浮点数,2.2251e-308pi圆周率realmaxdouble型数据的最大的浮点数,1.7977e+308eps浮点数的相对误差intmax32位二进制数表示的最大正整数,2147483647NaN表示不定值,即0/0intmin32位二进制数表示的最小负整数,-2147483648Inf无穷大,如1/0flintmaxdouble型数据的最大连续整数常量是指在计算过程中不变的量,如123,3.14159,1.3e-8,‘China’,true,都是一些常量。除此之外,MATLAB中有一些预定义的常量注1:上述表中的名称不要做为变量名使用。根据MATLAB的规那么,当在命令行窗口中的命令中出现一个标识符时,工作区中的变量名会优先被搜索到。因此,如果表中的名称被当作变量名使用,那么名称所定义的常量值会失效。如:>>eps=1 假设要恢复eps原来的值,用clear命令将变量eps去除即可。242.4数据与数据类型注2:上述表中有的名称也可以用函数的形式使用,详细使用方法请参阅MATLAB的Help。例如,假设要获得single类型数据的最大浮点数,可使用下面命令:>>realmax('single')252.4数据与数据类型2.4.2变量变量是用来存储数据的。不需要对所使用的变量进行事先声明,也不需要指定变量的类型。每个变量都要有一个名字,给变量命名必须遵循如下规那么: (1)变量名区分大小写字母,因此a与A是两个不同的变量; (2)变量名以字母开头,变量名中可以包含字母、数字和下划线,但不能使用标点; (3)变量名最多包含63个字符,之后的字符将被忽略; (4)不能用MATLAB关键字如if,end等作变量名;262.4数据与数据类型注1:任何变量均被视为一个矩阵〔数组〕,单一的数被看作1×1矩阵。如:>>x=123;如果要给变量赋值为一个数组,那么输入格式要求如下:(1)数组的元素必须在方括号[]中;(2)数组的同行元素之间用空格或逗号“,〞分隔;(3)数组的行与行之间用分号“;〞或回车符分隔;272.4数据与数据类型28例2-3创立变量并赋值为数组。在命令行窗口依次输入下面命令:>>x=[123456789]>>y=[1,2,3;4,5,6;7,8,9]注2:在赋值过程中,如果变量已存在,MATLAB将使用新值代替旧值,并以新的变量类型代替旧的变量类型。2.4数据与数据类型2.4.3数据类型为了适应多种运算的需要,MATLAB提供了多种数据类型,这些数据类型最大的特点是每一种类型都以数组为根底,从数组中派生出来292.4数据与数据类型1、逻辑型〔BOOLEAN〕:表示“真〞、“假〞的数据,“真〞、“假〞可以用true或flase表示,但输出时用1和0来表示。例如,定义变量f并赋值为真: >>f=true2、字符和字符串〔Text〕:这种数据就是我们通常所说的文本,在MATLAB中每个字符占2个字节,不管是字符还是字符串都用单引号括起来。如: >>c1='A' >>c2='China';

302.4数据与数据类型313、数值型〔Numeric〕:数值型数据就是我们通常所说的数字,根据数值是否有小数分为Floating-Point〔浮点型或实型〕和Interge〔整型〕。浮点型:根据数据的有效位数又分为Single-Precision〔单精度〕和Double-Precision〔双精度〕两种:单精度数据在内存中占4个字节,其正数的范围约为1.17549×10-38~3.40282×1038,有效数字为6~7位;双精度数据在内存中占8个字节,其正数的范围约为2.22507×10-308~1.79769×10308,有效数字为15~16位。一个数值型数据在没有特殊声明的情况下,默认为双精度型。2.4数据与数据类型整数型:又分为4个有符号的和4个无符号的整数。int8:占1Byte,数据范围-128~127int16:占2Byte,数据范围-32768~32767int32:占4Byte,数据范围-231~231-1int64:占8Byte,数据范围-263~263-1uint8:占1Byte,数据范围0~255uint16:占2Byte,数据范围0~65535uint32:占4Byte,数据范围0~232-1uint64:占8Byte,数据范围0~264-1322.4数据与数据类型33复数:一个复数实际上是由两局部组成:实部和虚部。复数的数据类型是由实部和虚部的类型决定的 设c=a+bi(1)假设a和b有一个为single型,那么另一个可以是single或double型,c为single型;;(2)假设a和b中有一个整型,那么另一个要么是同类型的整型,要么是double,那么c是同类型的整型;生成一个复数有两种方法: >>c=complex(1,2)或>>c=1+2i%只能用于情况〔1〕2.4数据与数据类型344、结构体〔STRUCT〕:是指由不同数据类型的数据组成的一个数据集合,其中的每个元素称为一个数据域,数据域的数据类型和大小可以是任意的。每个数据域通过数据域的名字来进行访问。如把一个学生的信息存储到一个结构体变量student中: >>student=struct('num',1000','name','LiMing','age',20)对结构体数据的访问可用圆点来完成,如读取student变量中的姓名: >>2.4数据与数据类型5、单元数组〔CELL〕:是由不同数据类型的数据组成的一个数据集合,其中每个元素称为一个单元,单元的数据类型和大小可以是任意的,每个单元通过下标来进行访问。用{}创立单元数组 >>Mycell={1,3,6,'China',rand(3),{4,3.14,'text'}}对单元数组的访问有两种方式:〔1〕用圆括号(),其结果仍然是单元数组,如: >>Mycell(1:4)〔2〕用花括号{},其结果是单元中的数据,如: >>Mycell{4}352.4数据与数据类型6、表〔Table〕:是由假设干行和列组成的二维表格,每一列有一个名字。表中同一列中的数据必须是同类型的,但不同列的数据类型可以不同。例2-4创立一个学生表,有5个学生,每个学生有学号、姓名、性别、年龄、入学成绩等信息,具体操作如下:>>num=[1000;1001;1002;1003;1004];>>name={'李丽';'张浩';'刘路';'王斌';'杨阳'};>>sex={'女';'男';'女';'男';'男'};>>age=[18;17;19;18;19];>>score=[592;588;620;601;599];>>F=table(num,name,sex,age,score)362.4数据与数据类型对表中的数据访问的方式有三种:(1)用圆括号,其下标可以用数字,也可以用名称,结果还是表,如: >>F(1:2,:)或: >>F(1:2,{'num','name','sex','age','score'})(2)用花括号,其下标可以用数字,也可以用名称,但结果是表中的数据。假设下标有多个,那么组成向量,这时要求数据类型要相同。如: >>F{1:5,'score'}(3)用圆点,其结果是表中的数据,如: >>F.score也可以只提取某几行,如: >>F.name(1:2)372.4数据与数据类型6、函数句柄〔FunctionHandle〕:是在MATLAB中用来提供间接调用函数的数据类型。函数句柄可以转递给其他函数,也可以存储,利用函数句柄在函数的正常范围之外调用该函数。创立函数句柄用符号@加函数名如定义一变量保存sin的函数句柄: >>h=@sin; %定义sin函数的句柄 >>h(pi/6); %利用函数句柄计算sin(π/6)382.4数据与数据类型392.4.4数据类型的转换(1)数值数据之间的转换B=single(A)将A的数据类型转换为单精度实数。 >>x=single(123);那么变量x为单精度实数类型。B=double(A)将A的数据类型转换为双精度实数。B=int8(A)将A的数据类型转换为8位有符号整数。 >>i=int8(123);那么变量i为8位整数类型。2.4数据与数据类型40(2)字符串转换为数值d=base2dec('string',base)把base进制表示的数值字符串string转换为十进制数。 >>n=base2dec('213',8);n的值为139d=bin2dec('string')把二进制表示的数值字符串转换为十进制数d=hex2dec('hex_value')把十六进制表示的数值字符串转换为十进制数d=str2double('string')把字符串转换为双精度实数,字符串中可以包含数字、一个逗号〔千位分隔符〕、一个小数点、一个+或-号〔在最左边〕、一个字母e表示10的幂、一个字母i表示虚数单位。 >>a=str2double('123.45e7') >>b=str2double('123+45i') >>c=str2double('3.14159') >>d=str2double('1,200.34')2.4数据与数据类型41(3)数值转换为字符串S=char(X) 把非负整数X转换为ASCII码为X的字符。 >>c=char(65);c的值为’A’。str=dec2base(d,base)把非负整数d转换为base进制数的字符串,2≤base≤36。str=dec2bin(d) 把非负整数d转换为二进制数的字符串。str=dec2hex(d) 把非负整数d转换为十六进制数的字符串。str=int2str(N) 把整数N转换为字符串。str=num2str(A) 把数值A转换为字符串,假设A是浮点数,转换后的字符串依赖于A的数据范围。2.4数据与数据类型(4)数值转换为表T=array2table(A)把数值数组A转换为表T。如: >>A=[135;638;846] >>T=array2table(A)(5)表转换为数值A=table2array(T)把表转换为数值数组。如: >>B=table2array(T)(6)结构体转换为表T=struct2table(S)把结构体转换为表。如: >>T=struct2table(student)422.4数据与数据类型2.4.2数据文件1.数据文件的类型MATLAB使用的数据文件大致有如下几种:MATLAB标准数据文件:扩展名为.mat。文本文件:扩展名可以为任意,常见的是.txt。电子表格文件:扩展名为.xls或.xlsx。图像文件:扩展名为.bmp,.jpg,.tif,.gif等。声音文件:扩展名为.wav等。视频文件:扩展名为.mov,.mpg,.mp4,.avi等。432.4数据与数据类型2.数据的导入与导出数据的导入是将以文件形式保存的数据从外存装入内存的工作空间中,以便进行数据处理;数据导出是将工作空间中的数据从内存保存到外存的文件中,以便长期保存。数据导入的最简单方法是主页选项卡上变量区中的导入数据命令。442.4数据与数据类型MATLAB提供了假设函数来完成数据的导入。(1)MATLAB标准数据文件和文本文件数据的导入与导出save(filename):所有变量以二进制格式存入名为filename.mat文件,假设省略filename那么默认文件名为matlab.mat。save(filename,variables):将当前工作空间中variabler所列的变量存入filename.mat文件,variables有多个变量时用逗号分隔。save(filename,-ascii):将当前工作空间中的变量以8位文本格式存入filename.mat文件。save(filename,-append):添加数据到已有filename.mat文件中,假设filename为二进制文件那么用工作空间中新的值替换文件中已有的变量的值,假设为文本文件那么将数据添加到文件末尾。例2-5数据导出的练习452.4数据与数据类型将数据文件中的数据装入内存工作区中可以用load命令来实现。具体格式如下:load(filename):把数据文件filename.mat的数据装入内存的工作空间中。假设省略filenamem那么把当前文件夹中的数据文件matlab.mat〔缺省的文件名〕的数据装入内存。load(filename,varibles):把数据文件filename.mat中varibles所列的变量装入内存中。load(filename,-ascii):把数据文件filename的内容读入内存,这是一个ASCII码文件,系统自动将文件名〔filename〕定义为变量名。例2-6数据导入的练习注意:上述两个函数也可以使用命令形式调用:462.4数据与数据类型例2-7定义三个变量a=1,b=2,c=3,全部存入文件mydata中,再把b、c存入另一个文件中;清空工作空间后,检查工作空间,再调入变量a,再检查工作空间。>>a=1;b=2;c=3;>>savemydata>>savemydata1bc>>clear%清空工作空间>>whos%检查工作空间,已没有任何变量>>loadmydataa>>whos472.4数据与数据类型(2)电子表格文件数据的导入与导出[num,txt,raw]=xlsread(filename,sheet,range)其中,filename是电子表格的文件名,sheet是工作表的名称或编号,range是工作表中单元格的范围。从工作表中读取的数值数据存入数值数组num中,读取的文本数据存入单元数组txt中,文本和数值数据存入单元数组raw中。例2-8电子表格文件myExample.xlsx中的工作表1包含下面内容:FirstSecondThird12345x7891)读取工作表1中的全部数值数据: >>A=xlsread('myExample.xlsx')2)只读取工作表1中的局部数据: >>subsetA=xlsread('myExample.xlsx',1,'B2:C3')3)读取工作表1中的所有数据: >>[ndata,text,alldata]=xlsread('myExample.xlsx')482.4数据与数据类型xlswrite(filename,A,sheet,range)

其中,A是一个数值或文本数组,其它同xlswrite函数。例2-9将例2-8中变量A中的数据保存到一个名为textdata.xlsx的文件中。 >>xlswrite('textdata.xlsx',A)492.4数据与数据类型(3)图像文件数据的导入与导出A=imread(filename,fmt)其中,filename是图像文件名,fmt是图像文件格式〔文件的扩展名〕,读取的数据存入变量A中。例2-10读取图像文件ngc6543a.jpg,并显示在屏幕上。 >>imdata=imread('ngc6543a.jpg'); >>imshow(imdata)注:imshow函数的作用是显示图像,详细格式请读者查阅help。imwrite(A,filename,fmt)其中,A是图像数据,其他参数与imread函数中的相同。502.4数据与数据类型(4)声音文件〔.wav〕数据的导入与导出[y,Fs,nbits,opts]=wavread(filename)该函数可返回4个值,声音采样的数据存入变量y中,声音采样的频率存入Fs中,单位是Hz,每个采样数据所占用的字节数存入nbits中,声音文件中的其他信息存入opts中,不同的声音文件其信息是不同的。wavwrite(y,Fs,filename)512.4数据与数据类型52例2-11将handel.mat文件中的数据保存为声音格式的文件,并播放。 >>loadhandel.mat >>hfile='handel.wav'; >>wavwrite(y,Fs,hfile) >>clearyFs >>[y,Fs,nbits,readinfo]=wavread(hfile); >>sound(y,Fs);注:函数sound的作用是播放声音。2.4数据与数据类型53(5)视频文件数据的导入与导出 MATLAB提供了2个函数VideoReader的VideoWriter来实现视频文件的导入与导出,详细使用方法本书不再陈述,请读者查阅有关书籍。2.4数据与数据类型2.5.1算术运算符MATLAB的算术运算可以分为两类:数组运算和矩阵运算。数组运算是对应元素之间的运算,运算符有:+(加)、-(减)、.*(乘)、./(右除)、.\(左除)、+(正)、-(负)、.^(乘方)。矩阵运算是按照矩阵的运算规那么进行,运算符有:*(矩阵乘)、/(矩阵右除)、\(矩阵左除)、.’(转置)、’(共轭转置)、^(矩阵乘方)542.5运算符关系运算符MATLAB提供了6种关系运算符 <小于<=小于等于>大于>=大于等于==等于~=不等于用于比较两个同维矩阵的对应位置元素,结果为同维的0-1矩阵,1表示比较结果为真,0表示比较结果为假。其中一个操作为标量时,表示该标量与矩阵的每个元素进行关系运算,结果为与操作数矩阵同维的0-1矩阵。552.5运算符2.5.3逻辑运算符MATLAB提供了3种逻辑运算符,即与&(AND),或|(OR),非~(NOT)两个具有短路特点的逻辑运算符分别是&&(与)和||(或),这两个运算符的运算量,只能是标量。参加运算的运算量非零表示真,0表示假,运算结果为1或0。562.5运算符2.5.4特殊操作符1.冒号“:〞冒号“:〞用于生成向量,具体格式:i:j如果i<j,那么生成行向量[i,i+1,i+2,i+3,…,j];如果i>j,那么x为空向量。i:k:j如果k>0且i<j或k<0且i>j,那么生成行向量[i,i+k,i+2k,i+3k,…,m],m与j的差的绝对值小于等于k的绝对值。如果k>0且i>j或k<0且i<j,那么x为空向量。注意:利用冒号生成向量时,j不一定是向量的元素。572.5运算符MATLAB中还提供了一个创立向量的函数linspace,调用格式如下:V=linspace(a,b,n)表示创立一个行向量V,V是一个包含n个元素的等差数列,它的第一个元素是a,最后一个元素是b。不指定n时,n的值默认是100,n<2时返回b。此函数和冒号创立等差数列不同的是,i:k:j创立的数组中,j可能取不到。582.5运算符类似Matlab中还有创立等比数列的函数logspace,调用格式如下:V=logspace(a,b,n)表示创立一个行向量V,V是一个包含n个元素的等比数列,它的第一个元素是10a,最后一个元素是10b。不指定n时,n的值默认是50,n<2时,返回10b。 >>a=linspace(1,10,10) >>b=linspace(1,9,5)592.5运算符2.百分号“%〞百分号“%〞在编程时引导注释行。该操作符后的内容被作为注释内容,程序执行时被忽略。如果要注释多行可用%{和%},但要注意这两个符号要单独占一行。3.换行连接符“…〞如果一个命令语句非常长,一行容纳不下,可以分几行来写。在行末加上换行连接符“…〞再回车即可在下一行接着写该语句。注意:如果换行连接符前面是数字,直接使用换行连接符会出错,有两种解决方法:再加一个点,即四个点“….〞;先空一格然后再输入换行连接符。602.5运算符

运算符的优先级当一个代数式子中有多个运算符时,要根据运算符的优先级来决定运算顺序,优先级相同的运算符按自左向右的顺序进行计算,下面按优先级由高到低的顺序列出:(1) 圆括号()(2) 转置(.'),乘方(.^),共轭转置('),矩阵乘方(^)(3) 正(+),负(-),逻辑非(~)(4) 乘(.*),右除(./),左除(.\),矩阵乘(*),矩阵右除(/),矩阵左除(\)(5) 加(+),减(-)(6) 冒号(:)(7) 小于(<),小于等于(<=),大于(>),大于等于(>=),相等(==),不相等(~=)(8) 逻辑与(&)(9) 逻辑或(|)(10) 短路逻辑与(&&)(11) 短路逻辑或(||)612.5运算符三角函数1.正弦函数Y=sin(X)计算参量X〔可以是向量、矩阵,元素可以是复数〕中每一个角度分量的正弦值Y,所有分量的角度单位为弧度。Y=sind(X)与sin函数的作用相同,但所有输入参数分量的角度单位为度。注意:sin(pi)并不是零,浮点数的计算是有误差的。2.余弦函数Y=cos(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个角度分量的余弦值Y,所有分量的角度单位为弧度。Y=cosd(X)与cos函数的作用相同,但所有输入参数分量的角度单位为度。622.6根本数学函数3.正切函数Y=tan(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个角度分量的正切值Y,所有分量的角度单位为弧度。Y=tand(X)与tan函数相同,但所有输入参数分量的角度单位为度。4.余切函数Y=cot(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个角度分量的余切值Y,所有分量的角度单位为弧度。Y=cotd(X)与cot函数相同,但所有输入参数分量的角度单位为度。5.正割函数Y=sec(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个角度分量的正割值Y,所有分量的角度单位为弧度。Y=secd(X)与sec函数相同,但所有输入参数分量的角度单位为度。632.6根本数学函数6.余割函数Y=csc(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个角度分量的余割值Y,所有分量的角度单位为弧度。Y=cscd(X)与csc函数相同,但所有输入参数分量的角度单位为度。7.反正弦函数Y=asin(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个分量的反正弦函数值Y,角度单位为弧度。Y=asind(X)与asin函数相同,但输出参数的角度单位为度。8.反余弦函数Y=acos(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个分量的反余弦函数值Y,角度单位为弧度。Y=acosd(X)与acos函数相同,但输出参数的角度单位为度。642.6根本数学函数659.反正切函数Y=atan(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个分量的反正切函数值Y,角度单位为弧度。Y=atand(X)与atan函数相同,但输出参数的角度单位为度。10.反余切函数Y=acot(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个分量的反余切函数值Y,角度单位为弧度。Y=acotd(X)与acot函数相同,但输出参数的角度单位为度。11.反正割函数Y=asec(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个分量的反正割函数值Y,角度单位为弧度。Y=asecd(X)与asec函数相同,但输出参数的角度单位为度。2.6根本数学函数6612.反余割函数Y=acsc(X)计算参数X〔可以是向量、矩阵,元素可以是复数〕中每一个分量的反余割函数值Y,角度单位为弧度。Y=acscd(X)与acsc函数相同,但输出参数的角度单位为度。2.6.2取整和求余函数1.取整函数Y=

fix(X) 朝零方向取整。如: >>x=[5.647,3.14;-5.647,-3.14] >>fix(x)Y=ceil(X) 求大于等于X的最小整数。Y=floor(X) 求小于等于X的最大整数。Y=round(X) 四舍五入后取整。2.6根本数学函数2.求余数r=

mod(a,b)计算a除以b后的余数,等价于

r=a-b.*floor(a./b)r=rem(a,b)计算a除以b后的余数,等价于r=a-b.*fix(a./b)说明:mod与rem两个函数都可以求两个数的余数,但计算方法有所不同:mod函数的计算结果不是0就是符号与b相同的余数,而rem函数的计算结果不是0就是符号与a相同的余数;两个函数另外的不同是当b为0时,mod(a,0)函数的结果是a,而rem(a,0)函数的结果是NaN。672.6根本数学函数

682.6根本数学函数694.算术平方根函数B=sqrt(X)

计算X的算术平方根。5.有关复数的函数X=real(Z)

计算复数Z的实部。Y=imag(Z)

计算复数Z的虚部。P=angle(Z)

计算复数Z的辐角2.6根本数学函数M文件是由MATLAB命令或函数构成的文本文件,以m为扩展名,故称为M文件。在M文件的语句中可以调用其他的的M文件,也可以递归地调用自身。M文件名不能有汉字,不能是纯数字,不能与MATLAB中预定义的函数或命令名相同。M文件有两种形式,即命令文件(Script)和函数文件(Function)。702.7M文件2.7.1命令文件命令文件是一个包含一系列MATLAB语句〔指令〕的文本文件,执行命令文件时,MATLAB自动按顺序执行命令文件中的语句,不需要输入参数,也没有输出参数。命令文件中定义的变量保存在工作区中,命令文件中的语句可以访问MATLAB工作区中的所有变量,命令文件运行后,所产生的所有变量都驻留在MATLAB工作区〔workspace〕中,只要用户不使用去除指令〔clear〕,MATLAB程序不关闭,这些变量将一直保存在根本工作区中。712.7M文件1.命令文件的建立命令文件可以用任何文本编辑器生成,这里我们利用MATAB自带的编辑器建立命令文件,步骤如下:1) 翻开编辑器〔MATLABEditor〕:选择主页选项卡上文件区中的新建脚本命令或主页选项卡上文件区中的新建->脚本命令;2) 输入程序:在“Editor〞窗口输入MATLAB程序;3) 保存程序:选择编辑器选项卡上的保存命令,出现一个对话框,在文件名框中键入一个文件名〔如example.m),单击“保存〞按钮.M文件的命名规那么和变量的命名规那么相同。722.7M文件2.命令文件的运行方法1:单击编辑器上的运行按钮方法2:在命令行窗口输入文件名后回车〔注:这种方法必须保证命令文件在当前文件夹下或在搜索路径中,或文件名前加上路径,否那么计算机无法执行〕732.7M文件例2-12利用MATLAB的M文件编辑器,建立一个命令M文件。上机操作步骤:1)选择主页选项卡上文件区中的新建脚本命令,翻开M文件编辑器,2)在编辑窗口中输入下面程序: %文件名为example x=4;y=6;z=2; items=x+y+z3)选择编辑器选项卡上的“保存〞命令,在弹出的对话框中选择文件的保存位置,输入文件名example后单击“保存〞。4)在命令行窗口中输入文件名example并回车 >>example742.7M文件2.7.2函数M文件函数文件是以function语句为引导的M文件,可以接受输入参数和返回输出参数.在缺省情况下,函数文件的内部变量是临时的局部变量,不会出现在工作区中。函数运行结束后,这些局部变量被释放,不再占用内存空间。它们能够像库函数一样被别的M文件方便地调用,从而可扩展MATLAB的功能。如果对于一类特殊的问题,建立起许多函数文件,就能形成工具箱。752.7M文件函数定义的格式 function[输出参数]=函数名(输入参数)%H1行%帮助文本

函数体语句%注释函数定义行函数文件的第一行用关键字function开始。后面是输出参数,输出参数是函数中的变量,用于指定函数的返回值。假设函数没有返回值,那么输出参数可以省略;假设输出参数有多个,要用逗号或空格分隔。等号后面是函数名,命名规那么与变量的命名规那么相同。函数名后面圆括号内是输入参数,输入参数是用于接收调用函数时传递过来的数据。假设没有传递数据,那么输入参数可以省略,假设有多个输入参数时要用逗号分隔。762.7M文件H1行H1行是帮助文本的第一行,它紧跟在定义行之后,以“%〞开始,该行通常包含函数的名称以及这个函数功能的简要描述,在当前文件夹浏览或在MATLAB的命令行窗口中使用lookfor命令查找相关的函数时,将显示H1行。帮助文本帮助文本是H1行与函数体之间的帮助内容,也是以“%〞开始,用于详细介绍函数的功能和用法以及其他说明。在命令行窗口用help函数名命令时,将显示帮助文本。函数体函数体是函数的主体局部,函数体中包括该函数的全部程序代码,在函数体中包含了对输入参数进行运算并将运算结果赋值给输出参数的MATLAB语句。可以包括流程控制、输入输出、计算、赋值、注释、图形功能以及对其他函数和命令文件的调用。772.7M文件

注释除了函数文件开始局部的帮助文本外,可以在函数文件的任何位置添加注释语句,注释语句可以在一行的开始,也可以跟在一条可执行语句的后面(同一行中),不管在什么地方,注释语句必须以“%〞开始,MATLAB在执行M文件时将每一行中“%〞后面的内容全部作为注释,不予以执行。782.7M文件792.7M文件803.函数的调用函数语法:函数M文件的运行和命令M文件不同,调用函数时需要给函数传递数据和接收函数的运算结果,调用函数的格式如下: [变量列表]=函数名(实际参数)变量列表是用于接收函数返回值的变量,有多个时要用逗号或空格分隔。实际参数是传递给函数的数据,可以是常量、变量或表达式,如果实际参数中包含变量,那么需事先给变量赋值。调用时,计算时机把实际参数的值依次传递给函数定义行中的输入参数。命令语法:如果你不需要从函数获得任何数据,并且函数的输入数据是字符串,那么函数的调用格式可以采用下面格式: 函数名字符串1字符串2…字符串之间用空格分隔,而不是逗号,界定字符串的单引号可以省略,除非字符串本身包含空格。2.7M文件81>>disp('China') %函数语法格式>>dispChina %命令语法格式>>dispThisisaText%字符串包含空格错误使用disp输入参数太多。>>disp‘ThisisaText’注:如果你要给函数传递一个变量的值,那么只能采用函数语法调用函数。如: >>A=123; >>disp(A)%输出变量A的值 >>dispA%输出字符A2.7M文件例2-13编写一函数文件计算两个数的和 functions=fun1(x,y) s=x+y; end注:输出变量只有一个时,输出变量可以不用[]括起来。在MATLAB的命令行窗口或别的M文件里,就可用以下命令调用: s=fun1(5,3)说明:调用函数fun1时,要保证文件fun1.m所在的文件夹为当前文件夹或在MATLAB的搜索路径中。822.7M文件例2-14编写一文件,输入圆的半径,输出圆的周长和圆的面积 function[L,S]=fun2(r) L=2*pi*r; S=pi*r*r;在命令行窗口中可用以下命令调用: >>[C,area]=fun2(5)832.7M文件844.函数的输入输出参数定义函数时。以function开始的首行定义了输入参数和输出参数。主要用于调用函数时给函数传递数据或从函数获得计算结果。在函数体中可以通过nargin和nargout获得调用该函数时实际参数和输出参数的个数,进而判断输入、输出参数的数量是否符合函数定义的要求,从而防止因输入输出参数不符而导致程序出错。2.7M文件例2-15编写一求和函数,要求输入二个参数,但调用时假设只输入一个参数,那么输出该参数的2倍,假设没有参数那么输出0。程序如下:functionc=addme(a,b) ifnargin==2 c=a+b; elseifnargin==1 c=a+a; else c=0;end在命令行窗口调用该函数时有下面三种调用格式:>>addme(2,3) %第一种,有两个输入参数>>addme(2) %第二种,有一个输入参数>>addme %第三种,没有输入参数852.7M文件MATLAB还可以利用varargin和varargout实现可变参数的函数设计,这两个变量是单元数组,分别保存着输入和输出参数。例2-16编写一求和函数,可输入任意多个数,输出其和。

functions=addmu(varargin)%varargin是一个1*N的单元数组

s=0;

fori=1:nargin

s=s+varargin{i};

end在命令行窗口输入:>>addmu(2,3)>>addmu(1,2,3,4,5,7,8)862.7M文件5.函数的类型在MATLAB中,根据函数的建立方式和作用,可以把函数分为五种:主函数、局部函数、嵌套函数、私有函数和匿名函数。(1)主函数(themainfunction):在程序文件中,可以定义假设干个函数,其中文件中的第一个函数称为主函数,它可以在命令行窗口中调用,也可以在其他程序文件中调用。(2)局部函数(localfunctions):与主函数在同一个文件,且定义在主函数后面的函数称为局部函数,局部函数只能被被定义在同一个文件中的函数所调用。872.7M文件例2-17定义一个函数计算x^2+2x functionb=myfunction(x) %主函数 b=squareMe(x)+doubleMe(x); end functiony=squareMe(x) %局部函数 y=x.^2; end functiony=doubleMe(x) %局部函数

y=x.*2; end在命令行窗口调用主函数: >>myfunction(3)882.7M文件(3)嵌套函数(NestedFunctions):定义在一个函数内部的函数称为嵌套函数,包含嵌套函数的函数称为父函数,任何一个函数都可以作为父函数。例2-18父函数与嵌套函数的实例 functiony=main1 disp('Thisistheparentfunction') x=5; nestfun1

functionnestfun1

disp('Thisisthenestedfunction')

x=x+1;

end y=x; end在命令行窗口中调用函数main1: >>main1892.7M文件嵌套函数的调用规那么可以通过下面结构说明: functionA(x,y) %主函数 B(x,y) %函数A可以调用B或D,但不能调用C或E D(y) functionB(x,y) %嵌套在函数A中 C(x) %函数B可以调用C和D D(y) functionC(x)%嵌套在函数B中 D(x) %函数C可以调用B或D,但不能调用E end end functionD(x) %嵌套在函数A中 E(x) %函数D可以调用B或E functionE(x)%嵌套在函数D中 disp(x) end end end902.7M文件(4)私有函数(privatefunctions):保存在private文件夹下的函数,主要用于限制函数的使用范围。建立方法如下:在MATLAB的搜索路径中的某个文件夹下建立一个新的文件夹,名为private,但不要把该文件夹添加到搜索路径中。在private文件夹下建立一个函数文件,不妨取名为subfun.m。 functionsubfun %Anexampleofaprivatefunction. disp('这是一个私有函数.') end在private文件夹的父文件夹中建立函数文件,调用subfun函数functionfun1subfunend(4) 改变当前文件夹为任意文件夹,调用fun1函数 >>fun1912.7M文件(5)匿名函数(anonymousfunction):匿名函数不是一个M文件,而是一个句柄变量,匿名函数也有输入参数和输出参数,但只包含一个执行语句。如: >>sqr=@(x)x.^2+2;%定义匿名函数 >>a=sqr(3)922.7M文件2.7.3局部变量和全局变量在函数文件中定义的变量,保存在函数自己的工作空间中,每个函数都有自己的工作空间,其它函数是不能访问的,这些变量称为局部变量。如果要实现局部变量在几个函数和工作区中共享,可以使用以下方法:1.通过数据传递这是最有效、最平安的一种方法,在一个函数中通过实际参数,将该函数中局部变量的值传递给另一个函数。如例2-17,在myfunction函数中将局部变量x的值传递给squareMe函数的局部变量x和doubleMe函数的局部变量x。932.7M文件2.定义嵌套函数对于嵌套函数及其父函数中定义的局部变量,在嵌套函数中可以使用父函数中定义的变量,反之,在父函数中也可以使用嵌套函数内定义的变量。这样可以实现在父函数与嵌套函数之间实现数据共享。如例2-18,在main1中定义的局部变量x,在nestfun1函数中可以直接使用。3.定义持续性局部变量(PersistentVariables)如果在函数内将一个变量声明为持续性的(persistent),那么当函数调用结束时,其值保存在内存中,下次调用该函数时仍然有效。持续性局部变量与C语言中的静态型局部变量类似。942.7M文件

95(2)然后建立下面命令文件%文件名为ex2_14clearallsum=0;n=input('输入一个正整数');fori=1:nsum=sum+factorial(i);enddisp(sum)(3)在命令行窗口输入下面命令:

>>ex2_142.7M文件4.定义全局变量(GlobalVariables)用关键字global声明的变量称为全局变量,全局变量可以在不同的函数或工作区中所共享。如果需要在几个函数中和工作区都能访问同一个全局变量,必须在每个函数和MATLAB工作区内都声明该变量是全局的。实际编程中,为了防止出现不可预见的情况,应尽量防止使用全局变量。962.7M文件例如:首先建立两个函数文件如下:functionsetGlobalx(val)globalxx=val;endfunctionr=getGlobalxglobalxr=x;end97在命令行窗口中输入下面命令:>>setGlobalx(1138)>>r=getGlobalxr=1138从结果可以看出,全局变量x可以在函数setGlobalx中使用,也可以在函数getGlobalx中使用。在命令行窗口中输出x的值会出错:>>x未定义函数或变量'x'。>>globalx>>x2.7M文件2.7.4程序的调试1.设置断点,这是单步调试重要的第一步,通过设置断点,使程序在断点处停止执行,从而可以检查各个局部变量的值。2.运行程序到断点,单击编译器选项卡中的“运行〞命令,使程序执行到断点处停止,有一个绿色箭头指向断点处,表示下一步将执行的是哪条语句。这时命令行窗口中的提示符变为“K>>〞,表示目前是程序调试状态,这时,用户可以查看变量的值、给变量赋值等各种操作3.执行绿色箭头所指向的语句,单击编辑器选项卡上的“步进〞命令,这时计算机将执行箭头所指向的语句行,并将箭头下移一行。重复执行该操作,在执行程序的过程中,观察变量的变化,从而找出错误所在。4.退出调试模式,单击编辑器选项卡上的“退出调试〞命令。982.7M文件MATLAB中除了按正常顺序执行程序中的命令和函数以外,还提供了8种控制程序流程的语句,这些语句包括for、while、if、switch、try、continue、break、return等。992.8程序控制语句2.8.1选择控制语句:1.条件语句包含if-end语句、if-else-end语句、if-elseif-end语句等(1)if-end语句if表达式语句end执行过程:首先计算表达式的值,假设表达式的值为真〔非零值〕,那么执行语句;假设表达式的值为假〔零值〕那么不执行语句。1002.8程序控制语句

(2)if-else-end语句if表达式语句1else语句2end执行过程:首先计算表达式的值,假设表达式的值为真〔非零值〕,那么执行语句1;假设表达式的值为假〔零值〕那么执行语句2。1012.8程序控制语句〔3〕if-elseif-end语句if表达式1语句1elseif表达式2语句2……end执行过程:首先计算表达式1的值,假设表达式1的值为真(非零值),那么执行语句1;假设表达式1的值为假,那么计算表达式2的值,假设表达式2的值为真(非零值),那么执行语句2。假设表达式2的值为假那么不执行语句2。注意:表达式通常使用关系操作符、逻辑操作符、逻辑函数等。1022.8程序控制语句

103

2.8程序控制语句2、分支语句switch表达式〔标量或字符串〕case常量表达式语句体1case{常量表达式1,常量表达式2,…} 语句体2 …otherwise语句体n;end1042.8程序控制语句

例2-21设计一程序,输入一个数,然后判断它能否被5整除。%文件名为ex2_21clearn=input('inputanumbern=');switchmod(n,5)%mod表示取余数 case0fprintf('%d是5的倍数\n',n); otherwisefprintf('%d不是5的倍数\n',n);end1052.8程序控制语句注意:1.input是数据输入函数,该函数的调用格式为:A=input(‘提示信息’)其中提示信息为一个字符串,用于提示用户输入什么样的数据。A=input(‘提示信息’,’s’)如果在input函数调用时采用's'选项,那么允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令: xm=input('What''syo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论