《MATLAB 第3章 MATLAB程序设计基础.pdf》由会员分享,可在线阅读,更多相关《MATLAB 第3章 MATLAB程序设计基础.pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章 MATLABMATLAB程序设计基础程序设计基础一,一, 数据及数据文件数据及数据文件1. 1. 数据类型:数据类型: 字符数组、数值数组、单元数组、结构数组JavaJava 类和函数句柄等(表 31) 。在工作空间浏览器中不同的数据类型有着不同的图标标识(图 32。2. 2. 数据文件数据文件MATLAB 支持的各种数据文件及其调用方法和返回值见(表 32)(1 1)二进制数据文件)二进制数据文件: :以.mat 为扩展名。是标准的 MATLAB数据文件。.mat.mat 文件可以由 MATLAB提供的 savesave 和 loadload 命令直接存取。(2 2)ASCAS
2、C码数据文件码数据文件 : :扩展名为 .txt,txt, .dat.dat 等, 可以是MATLAB 环境下存储,也可能是其他软件的计算结果,可以被 MATLAB调用, 也可以用文本编辑器打开进行观察与修改。可以用 savesave 和 loadload 命令进行读入和存取。(3).(3).图象文件图象文件: :扩展名为. .bmp, .jpg .tibmp, .jpg .tif f 等,用于图形图象处理,可以用 imreadimread 和 imwriteimwrite 命令进行读入和存取。(4).(4).声音文件声音文件: :扩展名为.wav ,用 wavereadwaveread 和
3、wavwritewavwrite 命令进行读入和存取。3. 3. 数据输入向导数据输入向导FileFile 菜单下的工具 ImportImport WizardWizard 用于将各种类型数据文件中的数据导入工作空间,称为数据输入向导。在 ImportImport对话框中输入需要导入的数据文件名后出现ImportImport WizardWizard窗口,可预观测将要导入的数据、显示图象、播放声音等。几种数据的导入:几种数据的导入:(1 1)mmatat 数据文件数据文件调入途径: File输入文件名,也可用 BrowseBrowse 打开文件浏览器选择输入文件;ClipboardClipbo
4、ard,数据从剪贴板中调入。窗口内容:左侧,变量名称、大小、类型。右侧观察前 10 行10 列信息。NextNext: 显示数据输入向导窗口第二页。(2 2)ASCASC码数据文件:码数据文件:输入 ASCASC数据文件名-选择显示数据内容 (datedate)或头文本内容(textdatetextdate)-选择 Next 下一页进行导入内容选择 (通过钩选决定将何变量导入工作空间) - 按FinishFinish完成导入操作或按 CancelCancel 终止数据的导入。(3 3)图象数据文件:图象数据文件: 输入图形数据文件名-点击 show imageshow image (可在图象上
5、拖曳放大区域)-按 Finish 完成数据导入(或按 CancelCancel终止数据导入。(4 4) 。声音数据文件:。声音数据文件:输入声音数据文件名-点击 PlayPlay SoundSound 弹出一个显示声音数据波形的图形窗口 (按Play agineagine按钮重新播放声音,按 DoneDone 按钮关闭预观察窗口)-按 FinishFinish 完成数据导入(或按CancelCancel 终止数据导入。(5 5)剪贴板的数据:)剪贴板的数据:需要导入已存放在系统剪贴板中的数据,点数据输入向导窗口中的 ClipboardClipboard 选项,-Next 进入下一页-按 Fin
6、ishFinish完成数据导入(或按 CancelCancel 终止数据导入。二二 MM 文件文件MATLABMATLAB 的两种工作方式:1,交互式命令操作方式通过命令窗口进行交互式操作;2,M 文件的编程工作方式。1 1MM 文件编程:文件编程:可用普通文本编辑器编制 MATLAB 文件,文件由纯 ASCASC字符组成,确定文件名后加.m 扩展名,称为 MM 文件。运行 MM 文件时,只需在命令窗口键入文件名即可。MATLABMATLAB提供了一个方便的编辑/调试器,功能较多,推荐使用。建立建立 MM 文件的一般步骤:文件的一般步骤:(1)打打开文件编辑器:开文件编辑器:最简单的方法是在操
7、作桌面的工具栏上选择新建文件键(New M- FileNew M- File)或打开已有文件键(Open FileOpen File),也可以在命令窗口输入命令 edit 建立新文件或输入 editedit filename,filename,打开名为 filenamefilename 的 M 文件;(2 2)编编写程序内容:写程序内容:编写新的文件或修改已有文件;(3 3)保保存文件:存文件:文件运行前必须完成保存操作,与一般的文件编辑保存操作相同;(4 4)运运行文件:行文件:在命令窗口输入文件名即可运行。如要在编辑器中直接完成运行, 可在编辑器的DebugDebug菜单下save and
8、 runsave and run选项,或按 RunRun 快捷键,最快捷的方法是直接按 F5F5 键执行运行。MM 文件有两种形式: 命令文件 (Script FileScript File) 和函数文件(Function FileFunction File)2 2。命令文件。命令文件: : M 文件中最简单的一种,不需输出输入参数,用M 文件可以控制工作空间的所有数据。 运行过程中产生的变量都是全局变量。运行一个命令文件等价于从命令窗口中顺序运行文件里的命令,程序不需要预先定义,只要依次将命令编辑在命令文件中即可。例:用三角函数计算画出花瓣图形。theta=-pi:0.01:pi;theta
9、=-pi:0.01:pi;rho(1,:) =2*sin(5*theta).2;rho(1,:) =2*sin(5*theta).2;rho(2,:)=cos(10*theta).3;rho(2,:)=cos(10*theta).3;rho(3,: )=sin(theta).2;rho(3,: )=sin(theta).2;rho(4,: )=5*cos(3.5*theta).3;rho(4,: )=5*cos(3.5*theta).3;forfork = 1:4k = 1:4Subplot(2,2,k),polar(theta,rho(k,: )Subplot(2,2,k),polar(th
10、eta,rho(k,: )endend将程序保存成名为 petals 的 M 文件,并运行。注:注:(1) %引导注释行,不予执行;(2) 不需要用“end”最为 M 文件的结束标志;(3) 若文件存放在自己的目录上, 在运行文件前, 应先将自己的目录设置为当前工作目录。 最简单方法: 在当前目录浏览器中设置。(4) 运行后存放在工作空间的变量可以用工作空间浏览器查看。3 3。函数文件。函数文件如果 M 文件的第一个可执行行以 functionfunction 开始,便是函数文件,每一个函数文件定义一个函数。 函数文件区别于命令文件之处在于命令文件的变量在文件执行完成后保留在工作空间中, 而函
11、数文件内定义的变量只在函数文件内起作用,文件执行完后即被清除。例:建立 averageaverage 函数用于计算矢量中单元的平均值。functionfunctiony = average(x)y = average(x)%A%AVERAGE Mean of vector elements.VERAGE Mean of vector elements.%A%AVERAGE(X),Where X is a vector, is the mean of vector element.VERAGE(X),Where X is a vector, is the mean of vector eleme
12、nt.%Non-vector input results in an error.%Non-vector input results in an error.m,n=size(x);m,n=size(x);if(m=1) | (n=1) | (m=1& n=1)if(m=1) | (n=1) | (m=1& n=1)error( Input must be a vector)error( Input must be a vector)endendy=sum(x)/length(x);y=sum(x)/length(x);将文件存盘,缺省状态下自动存储名为 average.maverage.m
13、的函数。这样只要接受一个输入参数便可计算返回一个输出参数,与其他 MATLAB函数一样使用。例:用已建立的 averageaverage 函数文件求 199 的平均值。z=1:99;z=1:99;average(z)average(z)函数文件的基本组成部分:(1 1)函数定义行)函数定义行:由functionfunction 引导,并定义函数名、输入参数和输出参数,函数定义行必须放在文件的第一个可执行行上。可以设多个输入输出参数,如:functionx,y,z=sphere(theta,phi,rho)functionx,y,z=sphere(theta,phi,rho)也可以没有输出参数,
14、如:functionfunctionprintresults(x)printresults(x)(2)H H1 1 行:行: 帮助文本的第一行, 是供 lookforlookfor 查询时使用的;(3)帮帮助文本:助文本: 主要时为自己的函数文件建立在线查询信息;(4)函函数体:数体:包含全部的用于完成计算及给输出参数赋值等工作的语句;(5)注注释:释:以%起始导行尾结束部分的说明文字。可放置在程序中的任何部位。2 2局部变量与全局变量局部变量与全局变量用 globalglobal 就可以把一个变量定义为全局变量.MATLAB 中变量名是区分大小写的,习惯上常将大写字母定为全局变量。如:glo
15、bal A B Cglobal A B C三三 程序结构程序结构8 8 种控制程序流程的语句:for, while, if, switch, try, continue, break,for, while, if, switch, try, continue, break,returnreturn1 1。循环语句。循环语句(1 1) forfor 语句语句: :forforv=v=表达式表达式通常为一个矢量通常为一个矢量 形式为:形式为: m:s:nm:s:n语句体语句体endend例:例:n=10n=10for i=1:nfor i=1:nx(i)=(i+1).2;x(i)=(i+1).2;
16、endendx xx =4916253649例:嵌套循环:注意与例:嵌套循环:注意与 endend 的配对。的配对。m=3;m=3;n=4;n=4;for i=1:mfor i=1:mfor j=1:nfor j=1:na(i,j)=1/(i+j-1);a(i,j)=1/(i+j-1);endendendendformatformat(形式)(形式)ratrat(分数表示)(分数表示)a aa =648112110011/21/31/41/21/31/41/51/31/41/51/6例:例: 运用非 1 步长,产生 0-20 以内的偶数forfori=0:2:20i=0:2:20a(i/2+1
17、)=i ;a(i/2+1)=i ;endenda aa =02468101214161820(2 2) WhileWhile 语句:语句:为条件循环语句。循环不确定次数,只要表达式的结果非零,语句体就重复执行,直到循环条件不成立为止。WhileWhile 表达式表达式语句体语句体endend例:while 循环,求解 n!达到 100 位数的第一个 n 是多少。n=1;n=1;while prod(1:n)1e100while prod(1:n)=0.90) & (grade=60)(attendance=0.90) & (grade=60)pass=1;pass=1;elseelsefail
18、=1;fail=1;endend(1 1)i if felseifelseifendend 语句语句if if表达式表达式 1 1语句体语句体 1 1;elseifelseif表达式表达式 2 2语句体语句体 2;2;elseelse语句体语句体 3;3;endend例: 用色彩区分数据点的范围。n=100;n=100;x=1:n;x=1:n;y=randn(1,n);y=randn(1,n);hold onhold onfor i=1:nfor i=1:nif ify(i)-1y(i)=-1y(i)=-1&y(i)=1y(i)=1y(i)=1plot(x(i),y(i),xr)plot(x(
19、i),y(i),xr)endendendendhold offhold off(3)(3) 分支语句:分支语句:switchswitchcasecaseendend通过对某个变量值的比较做各种不同的执行选择。形式:switchswitch 表达式(数字或字符串)表达式(数字或字符串)casecase数字或字符串数字或字符串 1 1语句体语句体 1 1;casecase数字或字符串数字或字符串 2 2语句体语句体 2 2;otherwiseotherwise语句体语句体 n n;endend例:检查 input_num 的数值.switchswitchinput_numinput_numcase
20、case-1-1disp(negative one);disp(negative one);%当当 input_num=-1input_num=-1 时显示时显示casecase0 0disp(zero);disp(zero);%当当 input_num= 0input_num= 0 时显示时显示casecase1 1disp(positive one);disp(positive one);%当当 input_num= 1input_num= 1 时显示时显示otherwiseotherwisedisp(other value);disp(other value);%当当 input_num
21、input_num 等于其他值时显示等于其他值时显示endend(4)(4) 检测语句:检测语句:用于检测错误并改变流程用于检测错误并改变流程,形式:,形式:?加深?加深了解了解trytry语句体语句体 1 1catchcatch语句体语句体 2 2endend例:例: 判断错误语句的用法判断错误语句的用法n=4;n=4;a=magic(3)a=magic(3)trytrya_n1=a(n,:),a_n1=a(n,:),catchcatcha_n2=a(end, : ),a_n2=a(end, : ),endendlasterrlasterra =a =8 81 16 63 35 57 74
22、49 92 2a_n =a_n =4 49 92 2ans =ans =Index exceeds matrix dimensions.Index exceeds matrix dimensions.(5)(5)其他流程控制语句:其他流程控制语句:(a), continue(a), continue语句:语句: 用于控制for循环和while循环跳过某些执行语句。例:例: continuecontinue 语句的用法.fid=fopen(magic.m,r);fid=fopen(magic.m,r);%打开文件打开文件count=0;count=0;%计数器置零计数器置零while feof(
23、fid)while feof(fid)%判断是否到文件末尾判断是否到文件末尾line=fgetl (fid);line=fgetl (fid);if ifisempty(line) | strncmp(line,%,1)isempty(line) | strncmp(line,%,1)%判断是否为空行或注释行判断是否为空行或注释行continuecontinue%如果是空行或注释行继续下一次循环如果是空行或注释行继续下一次循环endendcount=count+1;count=count+1;%如果不是空行或注释行计数器加如果不是空行或注释行计数器加 1 1endenddisp(sprintf
24、(%d lines ,count);disp(sprintf(%d lines ,count);%显示行数显示行数(b). break(b). break 语句:语句:用于终止 for 循环和 while 循环的执行.例:例:breakbreak 语句的用法语句的用法. .fid=fopen(fft.m,r);fid=fopen(fft.m,r);%打开文件打开文件s= ;s= ;%清空字符数组清空字符数组while feof(fid)while feof(fid)%判断是否为文件末尾判断是否为文件末尾line=fgetl(fid);line=fgetl(fid);%从文件中读行从文件中读行i
25、f ifisempty(line)isempty(line)%如果是空行如果是空行breakbreak%如果是空行退出循环如果是空行退出循环endends=strvcat(s,line);s=strvcat(s,line);%如果不是空行,丛向连接字符数组如果不是空行,丛向连接字符数组endenddisp(s)disp(s)%显示字符数组结果显示字符数组结果(c c )returnreturn 语句:语句: 用于终止当前的命令序列,并返回到调用的用于终止当前的命令序列,并返回到调用的函数或键盘。函数或键盘。例:例:returnreturn 语句的用法语句的用法. .functionfuncti
26、ond=det(A)d=det(A)%定义函数定义函数% det(A)% det(A) 计算矩阵计算矩阵 A A 的行列式的行列式if ifisempty(A)isempty(A)%如果矩阵是空的如果矩阵是空的d=1;d=1;returnreturn%返回调用函数返回调用函数elseelse%计算过程略计算过程略endend四四. . 数据的输入与输出数据的输入与输出1 1数据的输入数据的输入常用方法:常用方法:(a a)键键盘输入:盘输入:数据少时较方便,多时不益使用;(b b)用用 MM 文件产生数据:文件产生数据:使用于较多数据的输入;(c c)从从 ASCASC码文件装载数据:码文件装
27、载数据:对文本格式的数据文件可用loadload 命令直接读入 MATLABMATLAB,器内容存放在以文件名命名的变量中(d d)利利用用 fopen, fscanf, freadfopen, fscanf, fread 及及 MATLABMATLAB其他低层其他低层 I/OI/O 命命令读取数据:令读取数据:用于读取其他外部应用程序建立的各种特定格式的数据。2 2。数据的输出。数据的输出(a) 利用利用 diarydiary 命令输出语句命令输出语句: : 运行 diarydiary 命令可以在当前工作目录上产生一个名为 diarydiary 的日记文件, 文件内容可以输出。关闭日记文件的
28、命令为 dairy off.dairy off.(b) 利用利用 NotebookNotebook 获取数据:获取数据:于 dairydairy 用法相仿优点是文字质量高,版面规范, 且 M-bookM-book 中的命令可以随时运行或修改,MATLAB 工作空间中的数据随之改变。运行 NotebookNotebook 要求计算机上装有 MS-WordMS-Word。(c) savesave 命令输出数据:命令输出数据:将当前内存中的变量存到文件中去。(d) 利用利用 fopen, fprintf, fwritefopen, fprintf, fwrite 及其他底层及其他底层 I/OI/O
29、命令输出特命令输出特殊格式的数据:殊格式的数据: 如需要在其他外部应用程序中使用MATLAB输出的特定格式的数据,使用此方法。3 3SaveSave 和和 loadload 命令的使用命令的使用(1)(1) savesave (将工作空间的变量存入磁盘)(将工作空间的变量存入磁盘)命令的常用调用方命令的常用调用方法法(a a)s save:ave: 将工作空间所有的变量以二进制格式将工作空间所有的变量以二进制格式存入名为存入名为 matlab.matmatlab.mat 的缺省文件;的缺省文件;(b b)s saveave dfile:dfile: 将工作空间所有的变量以二进制将工作空间所有的
30、变量以二进制格式存入格式存入 dfile.matdfile.mat 文件文件, ,扩展名自动产生扩展名自动产生(c c)savesave dfiledfile x:x: 只把变量只把变量 x x 以二进制格式存入以二进制格式存入dfile.matdfile.mat 文件文件, ,扩展名自动产生扩展名自动产生(d d)s save dfile.dat x-ascii:ave dfile.dat x-ascii: 将变量将变量 x x 以以 8 8 位位 ASCASC码形式存入码形式存入 dfile.matdfile.mat 文件;文件;(e e)savesave dfile.datdfile.d
31、at x-ascii-double:x-ascii-double: 将变量将变量 x x 以以 1616位位 ASCASC码形式存入码形式存入 dfile.matdfile.mat 文件;文件;(f f) save(fname,save(fname, a,a, - -ascii):ascii): fnamefname 是一个预先是一个预先定义好的包含文件名的字符串,定义好的包含文件名的字符串, 该用法将变量该用法将变量a a 以以 ASCASC码格式存入码格式存入 fnamefname 定义的文件中。定义的文件中。(2 2) loadload 命令的常用方法命令的常用方法(a a)l load
32、oad: 把磁盘把磁盘 matlab.matmatlab.mat 的内容读入内存;的内容读入内存;(b b)l load dfileoad dfile:将磁盘文件 dfile.mat 内容读入内存;内容读入内存;(c c)load dfile.dat:load dfile.dat: 将磁盘文件 dfile.mat 内容读入内存内容读入内存, ,这是这是一个一个 ASCASC码文件,系统自动将文件名定义为变量名;码文件,系统自动将文件名定义为变量名;(d d)a a=load(fname):=load(fname): fnamefname 是预先定义好的包含文件名的字是预先定义好的包含文件名的字符串,将由符串,将由 fnamefname 定义文件名的数据文件调入定义文件名的数据文件调入 a a 中。中。