第三章 MATLAB程序设计基础95219_第1页
第三章 MATLAB程序设计基础95219_第2页
第三章 MATLAB程序设计基础95219_第3页
第三章 MATLAB程序设计基础95219_第4页
第三章 MATLAB程序设计基础95219_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 MATLAB程序设计基础chapter 3: Foundation of MATLAB program design一、 数据及数据文件(Data and Data file)1. 数据类型:(Data mode) 为适应各种不同计算和处理的需求,MATLAB提供了多种数据类型,主要有:*数值数组(Numeric array)包括整形(int8,uint8,int16,uint16,int32,uint32)单精度(signal) 双精度(duble)(MATLAB最常用的变量类型)稀疏数组(sparce)按维数分有一维、二维和多维数组Int- Integrate.整形数组Uint-U

2、nsigned Integer data 无符号整形数组*字符串数组(Character array):由字符串组成的数组*单元数组(Cell array):用不同类型和大小的数组组成的数组,同一个元胞数组中各元胞的内容可以不同。*结构数组(Structure array):与单元数组类似,但其数据的组织能力更强,更富于变化。 *Java类(Java class):由JavaAPI或第三方定义的类函数。 *函数句柄(Function handle):可以在一个参数列表中传递,并使用feval运行.在工作空间浏览器中不同的数据类型有着不同的图标标识。2. 数据文件(Data file)MATLA

3、B支持的各种数据文件(Readable file formats of MATLAB)的主要类型及其存取方法如下述: (1)二进制数据文件:(Binary date file) 以.mat为扩展名。是标准的MATLAB数据文件,以二进制编码形式存储。.mat文件可以由MATLAB提供的save和load命令直接存取。(2)ASC码数据文件:(ASC code data file)扩展名为.txt, .dat等, 可以是在MATLAB环境下存储的,也可能是其他软件的计算结果,可以被MATLAB调用,也可以用文本编辑器打开进行观察与修改。 可以用save和load命令进行读入和存取。(3).图象文

4、件:(Graphics file) 扩展名为.bmp, .jpg .tif等,用于图形图象处理,可以用imread和imwrite命令进行读入和存取。(4).声音文件: (Sound file) 扩展名为.wav ,用waveread 和 wavwrite命令进行读入和存取。Readable file formats. Data formats Command ReturnsMAT- MATLAB workspace load Variables in file.CSV- Comma separated numbers csvread Double array.DAT- Formatted t

5、ext importdata Double array.DLM- Delimited text dlmread Double array.TAB- Tab separated text dlmread Double array.Spreadsheet formatsXLS - Excel worksheet xlsread Double array and cell array.WK1- Lotus 123 worksheet wk1read Double array and cell array.Scientific data formatsCDF - Common Data Format

6、cdfread Cell array of CDF recordsFITS- Flexible Image Transport System fitsread Primary or extension table dataHDF - Hierarchical Data Format hdfread HDF or HDF-EOS data setMovie formatsAVI - Movie aviread MATLAB movie.Image formatsTIFF - TIFF image imread Truecolor, grayscale or indexed image(s).PN

7、G - PNG image imread Truecolor, grayscale or indexed image.HDF - HDF image imread Truecolor or indexed image(s).BMP - BMP image imread Truecolor or indexed image.JPEG - JPEG image imread Truecolor or grayscale image.GIF - GIF image imread Indexed image.PCX - PCX image imread Indexed image.XWD - XWD

8、image imread Indexed image.CUR - Cursor image imread Indexed image.ICO - Icon image imread Indexed image.RAS - Sun raster image imread Truecolor or indexed.PBM - PBM image imread Grayscale image.PGM - PGM image imread Grayscale image.PPM - PPM image imread Truecolor image. Audio formatsAU - NeXT/Sun

9、 sound auread Sound data and sample rate.SND - NeXT/Sun sound auread Sound data and sample rate.WAV - Microsoft Wave sound wavread Sound data and sample rate.3. 数据输入向导(Import wizard)File 菜单下的工具Import Wizard用于将各种类型数据文件中的数据导入工作空间,称为数据输入向导。在 Import 对话框中输入需要导入的数据文件名后出现Import Wizard窗口,可预观测将要导入的数据、显示图象、播放

10、声音等。几种数据的导入:(1) mat数据文件( mat data file)调入途径: File-Import data-选择文件名-打开-Import Wizard -勾选需要调入的变量-finish.也可用Browse打开文件浏览器选择输入文件;Clipboard,数据从剪贴板中调入。窗口内容:左侧,变量名称、大小、类型。右侧观察前10行10列信息。Next: 显示数据输入向导窗口第二页。(2)ASC码数据文件:(ASC code data file) File-Import data-选择文件名或输入ASC数据文件名-打开-Import Wizard-选择显示数据内容 (data)或头

11、文本内容(textdata)-选择Next下一页进行导入内容选择(通过钩选决定将何变量导入工作空间)- 按Finish 完成导入操作或按Cancel终止数据的导入。(3)图象数据文件:(Graphics data file) File-Import data-选择文件名或输入图形数据文件名-打开-Import Wizard -点击show image(可在图象上拖曳放大区域)-按Finish 完成数据导入(或按Cancel终止数据导入)。(4)声音数据文件:(Sound data file) File-Import data-选择文件名或输入声音数据文件名-打开-Import Wizard -

12、点击Play Sound弹出一个显示声音数据波形的图形窗口(按Play agine按钮重新播放声音,按Done按钮关闭预观察窗口)-按Finish 完成数据导入(或按Cancel终止数据导入)。(5)剪贴板的数据:(Clipboard data) 需要导入已存放在系统剪贴板中的数据,点数据输入向导窗口中的Clipboard选项,-Next进入下一页-按Finish 完成数据导入(或按Cancel终止数据导入)。二 M文件(M-file)MATLAB 有两种工作方式:1,交互式命令操作方式(interactive mode)通过命令窗口进行交互式操作;2,M文件(M-file) 的编程工作方式(

13、programming mode)。1 M文件编程:(M-file program)可用普通文本编辑器编制 MATLAB文件,文件由纯ASC字符组成,确定文件名后加.m扩展名,称为M文件。 MATLAB提供了一个方便的编辑/调试器,功能较多,推荐使用。建立M文件的一般步骤:(normal process of M- file creating)(1) 打开文件编辑器:(Opening the file editor) 最简单的方法是在操作桌面的工具栏上选择新建文件键(New M- File)或打开已有文件键(Open File),也可以在命令窗口输入命令edit建立新文件或输入edit fil

14、ename, 打开名为filename 的M文件;(2) 编写程序内容:(Compose the program content) 编写新的文件或修改已有文件;(3) 保存文件:(save file) 文件运行前必须完成保存操作,与一般的文件编辑保存操作相同;(4) 运行文件:(running file) 在命令窗口输入文件名即可运行。如要在编辑器中直接完成运行,可在编辑器的Debug菜单下save and run选项,或按Run快捷键,最快捷的方法是直接按F5键执行运行。M文件有两种形式:命令(脚本)文件(Script File)和函数文件(Function File)2. 命令文件: (S

15、cript File) M文件中最简单的一种,是可用于自动重复执行的一组MATLAB命令和函数组合,不需输出输入参数,用M文件可以调用工作空间已有的变量或创建新的变量。运行过程中产生的变量都是全局变量。 建立一个命令文件等价于从命令窗口中顺序输入文件里的命令,程序不需要预先定义,只要依次将命令编辑在命令文件中,再将程序保存成为扩展名为.m的M文件即可。运行命令文件时,只需在命令窗口键入文件名即可。例:用三角函数计算画出花瓣图形。theta=-pi:0.01:pi; rho(1,:) =2*sin(5*theta).2; %计算四种不同rhorho(2,:)=cos(10*theta).3; r

16、ho(3,: )=sin(theta).2; rho(4,: )=5*cos(3.5*theta).3;for k = 1:4Subplot(2,2,k), polar(theta,rho(k,: )end将程序保存成名为petals的M文件,并运行。注:(1) %引导注释行,不予执行;(2) 不需要用“end”作为M文件的结束标志;(3) 若文件存放在自己的目录上,在运行文件前,应先将自己的目录设置为当前工作目录。最简单方法:在当前目录浏览器中设置。(4) 运行后存放在工作空间的变量可以用工作空间浏览器查看。3、函数文件(Function File)如果M文件的第一个可执行行以functio

17、n开始,便是函数文件,每一个函数文件定义一个函数。函数文件区别于命令文件之处在于命令文件的变量在文件执行完成后保留在工作空间中,而函数文件内定义的变量只在函数文件内起作用,文件执行完后即被清除。例:建立average函数用于计算矢量中单元的平均值。 function y = average(x) %AVERAGE Mean of vector elements.%AVERAGE(X),Where X is a vector, is the mean of vector element.%Non-vector input results in an error.m,n=size(x); if(m

18、=1) | (n=1) | (m=1& n=1) error( Input must be a vector)end y=sum(x)/length(x);将文件存盘,缺省状态下自动存储名为average.m的函数。这样只要接受一个输入参数便可计算返回一个输出参数,与其他MATLAB函数一样使用。例:用已建立的average函数文件求199的平均值。 z=1:99;average(z)函数文件的基本组成部分:(1)函数定义行:(the lines for function identification) 由function 引导,并定义函数名、输入参数和输出参数,函数定义行必须放在文件的第一个

19、可执行上。可以设多个输入输出参数, 如: function x,y,z=sphere(theta,phi,rho)也可以没有输出参数,如: function printresults(x)(1) H1行:(Lines H1) lookfor查询时使用的;(2) 帮助文本:(Help text) 建立在线查询信息;(3) 函数体: (Function body) 包含全部的用于完成计算及给输出参数赋值等工作的语句;(4) 注释:(explanatory notes) 以%起始导行尾结束部分的说明文字。可放置在程序中的任何部位。4、M函数的类型:MATLAB有4种类型M函数,匿名函数、主函数与子函

20、数、私有函数和嵌套函数。1) 匿名函数:匿名函数不要求有M文件,它只包含一个MATLAB 表达式,任意多个输入和输出。可以在MATLAB命令窗口、M函数文件或者是脚本文件中定义它,其语法是:f=(arglist)expression其中expression为此匿名函数的函数体,arglist为此函数的输入参数列表。等号右边必须以开始,符号用来构造函数句柄,函数句柄被创建后,此匿名函数就可以被调用。例: sqr=(x)x.2;调用格式为 a=sqr(x)例如a=sqr(5), 运行结果a =25可以将函数句柄sqr作为参数传递给别的函数,例如作辛普森正交数值积分: quad(sqr,0,1)就是

21、将sqr作为参数传递给了函数quad进行计算.运行结果 ans = 0.3333匿名函数可携带多个输入参数,例如:sumAxBy=(x,y)(3*x+4*y);输入参数为x,y调用这个匿名函数输入x,y 即可执行运算,例如:sumAxBy(5,7); 运行结果为43.如果匿名函数中不包含任何输入参数,后面的参数列表必须用空的括号表示,如: t=( )datestr(now), 调用此匿名函数同样也要用括号,如:t( )ans =17-Apr-2010 19:19:17否则MATLAB只识别此句柄,而不会调用此函数,如:t 运行结果 ( )datestr(now)2) 主函数与子函数MATLAB

22、允许一个M文件包含多个函数的代码,其中第一个出现的为主函数,其它函数为子函数。保存以主函数定义名为函数文件名。主函数可以在M文件外部调用,而子函数则不可以,子函数只在主函数和该M文件中的其它子函数中出现。子函数第一行是函数声明行,多个子函数的排列顺序可以任意改变,任何指令都可以通过“名字”进行调用,子函数的优先级仅次于内装函数。同一个M文件中的主函数和子函数的工作空间彼此独立,各函数间的信息可以通过输入输出变量、全局变量或者跨空间指令进行传递。例:求均值和中值function avg,med=newstats(u) %主函数n=length(u) avg=mean(u,n); %newstat

23、s使用内部函数求均值和中值med=median(u,n);function a=mean(v,n) %求均值子函数a=sum(v)/n %计算均值function m=median(v,n) %求中值子函数w=sort(v); %计算中值if rem(n,2)=1 m=w(n+1)/2)else m=(w(n/2)+w(n/2+1)/2end 将完整的函数文件存盘,缺省状态下自动存储名为newstats.m的函数,它就可以与其他MATLAB函数一样被调用,只要调用该函数,接受一个输入参数便可计算返回一个输出参数,。利用help可以获取子函数的相关帮助信息,如在命令窗口输入 help newst

24、ats/mean,就可以得到主函数newstats中mean子函数的信息。3) 私有函数私有函数是主M文件函数的一种,顾名思义就是一种不允许他人访问的函数。私有函数放在以private命名的子目录下,它只能在其父目录中可见。MATLAB先查私有函数,再寻找标准M函数,因此,私有函数可以与其他目录下的函数有相同的名字。4) 嵌套函数嵌套函数是在一个MATLAB函数体内部定义的函数。早期版本不允许定义嵌套函数。嵌套函数包含M文件的基本元素,但函数结束时必须用end表示。例:function x=nestfun(p1,p2)x1=nestfunIn(p2); function y=nestfunIn

25、(p3) y=2*p3;endx=x1+p1;end 在一个M文件中可以使用多重嵌套,内容自学。5. 局部变量与全局变量 (Local variable and Global variable) 由M文件定义的一个matlab函数内部所拥有的变量为局部变量,这些变量独立于其他函数的局部变量和工作空间中的变量。可以用来共享的变量为全局变量。 用global就可以把一个变量定义为全局变量。MATLAB中变量名是区分大小写的,习惯上常将大写字母定为全局变量。如:global A B C 全局变量的使用可以减少参数的传递,合理使用全局变量可提高程序的执行效率,但它会损伤函数的封装性,造成程序调试及维护

26、的困难,因此,不提倡使用全局变量。三 程序结构(Structure of program)8种控制程序流程(control flow statement) 的语句:for, while, if, switch, try, continue, break, return1。循环语句(Loop statement)(1) for语句:for v=表达式 通常为一个矢量, 形式为:m:s:n(初值:步长:終值) 语句体end例: n=10for i=1:nx(i)=(i+1).2;end xx = 4 9 16 25 36 49 64 81 100 121例:嵌套循环:注意与end的配对。 m=3;

27、 n=4;for i=1:m for j=1:n a(i,j)=1/(i+j-1); endendformat rata = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6 例: 运用非1步长,产生0-20 以内的偶数 for i=0:2:20 a(i/2+1)=i ;endaa =0 2 4 6 8 10 12 14 16 18 20(2)While语句:为条件循环语句。循环不确定次数,只要表达式的逻辑判断结果非零,语句体就重复执行,直到循环条件不成立为止。 While 表达式语句体end例:while循环,求解n!达到100位数的第一个n是多少。

28、 n=1;while prod(1:n)=0.90) & (grade=60) pass=1;else fail=1;end(1) ifelseifend语句if 表达式 1语句体1;elseif 表达式2语句体2;else语句体3;end例: 用色彩区分数据点的范围。n=100;x=1:n;y=randn(1,n);hold onfor i=1:n if y(i)=-1 & y(i)=1plot(x(i),y(i),xr)endendhold off (3) 分支语句:switchcaseend通过对某个变量值的比较做各种不同的执行选择。形式:switch 表达式(数字或字符串)case 数

29、字或字符串1语句体 1;case 数字或字符串2语句体 2;otherwise语句体 n;End将表达式的值与各case后的值进行比较,与哪一个case的值相同就执行哪一个case下面的语句体,如所有的case值均与之不同,则执行otherwise下面的语句体。例:检查input_num的数值.switch input_numcase -1disp(negative one); %当input_num=-1时显示case 0disp(zero); %当input_num= 0时显示case 1disp(positive one); %当input_num= 1时显示otherwisedisp(

30、other value); %当input_num等于其他值时显示end(4) 检测语句:(Detect statement)try-catch语句用于检测错误并改变流程,形式:try语句体 1catch语句体2 end先执行try下面的语句体1,如没有错误,就跳出该结构,如出错误,则执行catch语句下面的语句体2。可用lasterr函数查询错误信息,查询结果为空字符串时表示语句体1成功执行。例: 判断错误语句的用法 n=4; a=magic(3)trya_n=a(n,:), %取a的第n 行元素catcha_n=a(end, : ), %如取a的第n 行出错,则改取a的最后一行endlas

31、terr %显示出错原因a = 8 1 6 3 5 7 4 9 2a_n = 4 9 2ans = Index exceeds matrix dimensions.(5)其他流程控制语句:(Other control flow statement)(a), continue语句:用于控制for循环和while循环跳过某些执行语句。在for循环和while循环中,如果出现continue语句,则跳过循环体中所有剩余的语句,继续下一次循环。例: continue语句的用法.确定剔除空行和注释行后文件的有效行数fid=fopen(magic.m,r); %打开文件count=0; %计数器置零whi

32、le feof(fid) %判断是否到文件末尾 line=fgetl (fid); %从文件中读行 if isempty(line) | strncmp(line,%,1) %判断是否为空行或注释行 continue %如果是空行或注释行继续下一次循环 endcount=count+1; %如果不是空行或注释行计数器加1end disp(sprintf(%d lines ,count); %显示剔除后的行数25 lines(b). break语句:用于终止for循环和while循环的执行.如果遇到break语句,则退出循环体,执行循环体外的下一行语句。例:break语句的用法.fid=fope

33、n(fft.m,r); %打开文件s= ; %清空字符数组 while feof(fid) %判断是否为文件末尾 line=fgetl(fid); %从文件中读行 if isempty(line) %如果是空行 break %如果是空行退出循环 ends=strvcat(s,line); %如果不是空行,将该行写入字符数组end disp(s) %显示字符数组结果(c )return语句: 用于终止当前的命令序列,并返回到调用的函数或键盘。将return插入被调用函数的某一位置,会根据某种条件迫使被调用函数提前结束并返回调用函数。例:return语句的用法.function d=det(A)

34、%定义函数det(A) 计算矩阵A的行列式 if isempty(A) %如果矩阵是空的 d=1; return %返回调用函数else %计算过程略end四. 数据的输入与输出 (Date input and output)1数据的输入(Data input)常用方法:(a) 键盘输入:(keyboard input) 数据少时较方便,多时不益使用;(b) 用M文件产生数据:(Generate data by M-file) 使用于较多数据的输入;(c) 从ASC码文件装载数据:(Load data from ASC code file)(d) 对文本格式的数据文件可用load命令直接读入M

35、ATLAB,其内容存放在以文件名命名的变量中(e) 利用fopen, fscanf, fread及 MATLAB其他低层 I/O命令读取数据: 用于读取其他外部应用程序建立的各种特定格式的数据。2。数据的输出(data output)(a) 利用diary命令输出语句: 运行diary命令可以在当前工作目录上产生一个名为diary的日记文件,文件内容可以输出。关闭日记文件的命令为dairy off.(b) 利用Notebook获取数据:于dairy 用法相仿优点是文字质量高,版面规范,且M-book中的命令可以随时运行或修改,MATLAB工作空间中的数据随之改变。运行Notebook要求计算机

36、上装有MS-Word。NOTEBOOK Open an m-book in Microsoft Word (Windows only). NOTEBOOK, by itself, launches Microsoft Word and creates a new m-book called Document 1.NOTEBOOK(FILENAME) launches Microsoft Word and opens the m-book FILENAME.NOTEBOOK(-SETUP) runs an interactive setup function for the Notebook.

37、The user is prompted for the version of Microsoft Word and the locations of several files. NOTEBOOK(-SETUP, WORDVER, WORDLOC, TEMPLATELOC) sets up the Notebook using the specified information. WORDVER is the version of Microsoft Word (one of 97 or 2000 or 2002), WORDLOC is the directory containing w

38、inword.exe, and TEMPLATELOC is a Microsoft Word template directory. Examples: notebook notebook c:documentsmymbook.doc notebook -setup For the case in which Microsoft Word 97 (winword.exe) resides in theC:Program FilesMicrosoft Office 97Office directory, and the Microsoft Word templates reside in th

39、e C:Program FilesMicrosoft Office 97Templates directory: wordver = 97; wordloc = C:Program FilesMicrosoft Office 97Office; templateloc = C:Program FilesMicrosoft Office 97Templates; notebook(-setup, wordver, wordloc, templateloc)(c) save命令输出数据:将当前内存中的变量存到文件中去。(d) 利用fopen, fprintf, fwrite及其他底层I/O命令输出

40、特殊格式的数据:如需要在其他外部应用程序中使用MATLAB输出的特定格式的数据,使用此方法。3. Save 和load命令的使用(Using commend Load and Save)(1) save(将工作空间的变量存入磁盘)命令的常用调用方法save: 将工作空间所有的变量以二进制格式存入名为matlab.mat的缺省文件; (a) save dfile: 将工作空间所有的变量以二进制格式存入dfile.mat文件,扩展名自动产生(b) save dfile x: 只把变量x以二进制格式存入dfile.mat文件,扩展名自动产生(c) save dfile.dat x-ascii: 将变

41、量x以8位ASC码形式存入dfile.mat文件;(d) save dfile.dat x-ascii-double: 将变量x以16位ASC码形式存入dfile.mat文件;(e) save(fname, a, -ascii): fname 是一个预先定义好的包含文件名的字符串,该用法将变量a以ASC码格式存入fname定义的文件中。(2) load命令的常用方法(usual application of command load)(a) load: 把磁盘matlab.mat的内容读入内存;(b) load dfile: 将磁盘文件 dfile.mat内容读入内存;(c) load dfi

42、le.dat: 将磁盘文件 dfile.mat内容读入内存,这是一个ASC码文件,系统自动将文件名定义为变量名;(c) a=load(fname): fname是预先定义好的包含文件名的字符串,将由fname定义文件名的数据文件调入a中。附:1、命令窗口数据直接输入输出语句(Input)可利用语句中输入的字符串内容提示用户在命令窗口直接输入程序运行所需的某些参数,调用格式:R = INPUT(How many apples): 执行后出现提示字符串,输入的内容可以是MATLAB可估值的任何表达式.输出保存在变量R中。R = INPUT(What is your name,s): 执行后出现提示字符串,等待字符串输入,字符串直接输出为MATLAB字符串形式。INPUT Prompt for user input

温馨提示

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

最新文档

评论

0/150

提交评论