第四章Matlab语言程序设计基础_第1页
第四章Matlab语言程序设计基础_第2页
第四章Matlab语言程序设计基础_第3页
第四章Matlab语言程序设计基础_第4页
第四章Matlab语言程序设计基础_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

第四章Matlab语言基础 matlab语言程序简洁 可读性很强而且调试十分容易 是matlab重要组成部分 第四章Matlab语言基础 4 1MATLAB数据结构 4 2M文件简介4 2 1脚本文件4 2 2函数文件 4 3MATLAB的输入与输出语句 4 4程序结构 4 5程序的流程控制辅助语句 4 6程序文件的格式特征 4 7MATLAB搜索路径 文件管理 4 8MATLAB程序调试技巧 4 2M文件简介 M文件是由MATLAB语句构成的ASCII码文件 用户可以用普通的文本编辑把一系列MATLAB语句写进一个文件里 给定文件名 确定文件的扩展名为 m 并存储 1 用MATLAB自带的编辑器 edit2 用文本文档编辑文件 M文件的编辑方法 1 脚本文件 Scripts 也称命令文件 是由用户为解决特定的问题而编制的 m文件 2 函数文件 Function 子程序 可由用户编写 但它必须由其它m文件来调用 M文件分为两种 脚本文件是最简单的m 文件 它没有入口和出口参数变量 可以自动执行一系列MATLAB命令等 脚本是对工作空间中的现有数据进行操作 或创建一个新数据 而且脚本所创建的任一变量在脚本运行完都保留在工作空间中以便进一步使用 4 2 1脚本文件 脚本文件举例 例1 tex1 m 计算一个球的体积r input radius area pi r 2 volume 4 3 pi r 3 fprintf Thevolumeofasphereis 12 5f n volume 写好上述程序后即可在指令视窗下键入tex1 即可执行已建立的tex1 m文件 4 2 2函数文件 函数文件的第一行包含function功能 建立一个函数 可以同MATLAB的库函数一样使用 1 函数M 文件的组成格式 function 输出参数列表 函数名 形式参数列表 函数体语句 注 函数m文件的文件名必须与其函数名相同 输出变量如果多于1个 则用方括号括起来 且用逗号隔开 当函数无输出参数时 输出参数项空缺或者用空的中括号表示 function V D eig A 语句体 例1 建立函数文件求圆面积 function area volume circle fun r r为圆半径 area返回面积值 volume返回体积值area pi r 2 volume 4 3 pi r 3 2 函数文件举例 保存为circle fun m函数M文件 r 5 输入r值 area volume circle fun r 调用函数circle fun 例2 编一个绘制图示波形的函数 在文本编辑窗口输入functiony tri t 函数名tri t为横坐标 y为纵坐标y abs t 1 调用函数tri 并画出它的波形 t 2 0 05 2 定义自变量plot t tri t axis 1 5 1 5 0 5 1 5 1 函数定义行 关键字function function out1 out2 in1 in2 输入和输出 返回 的参数个数分别赋值给nargin和nargout两个MATLAB保留的变量 2 第一行帮助行以 开头 作为help指令显示的行 3 函数体说明及有关注解以 开头 用以说明函数的作用及有关内容如果不希望显示某段信息 可在它的前面加空行 3 函数M 文件的格式 包括4部分 4 函数体语句函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量 即在该函数返回之后 这些变量会自动在MATLAB的工作空间中清除掉 如果希望这些中间变量成为在整个程序中都起作用的变量 则可以将它们设置为全局变量 global 4 函数文件与脚本文件的主要区别 3点 由定义行function起头 后跟的函数名必须与文件名相同 函数具有输入输出变量 可进行变量传递 除非用global声明 函数文件中的变量均为局部变量 不保存在工作空间中 即 程序在自己的工作空间中操作变量 与工作空间分开 无法访问 4 3MATLAB的输入与输出语句 x input 请输入参数x 2a input 请输入矩阵a 1 2 3 4 s input Pleaseinputstrings 通信051 3 输入字符串时注意加单引号 1 提示对话输入命令 input name input Inputyourclassnameplease s s代表字符串 string Inputyourclassnameplease 通信06 1 此种情况 键入名字 通信06 1 不用加 name 通信 自由格式 disp 和格式化输出 fprintf 2 输出格式 x 2 直接查看 x disp x ab 字符向量ab disp ab ab temp 20 disp temp disp temp表示温度 disp num2str temp 度C 20temp表示温度20度C 1 disp直接输出文字或是一数值 举例 disp显示指定变量的结果 而不显示变量名称 指令fprintf用来控制输出数据及文字的格式 其基本格式如 2 fprintf格式输出 由 引导 f 小数形式输出e 指数形式输出d 1位整数位形式输出 1 234500e 001 fprintf Theareais 8 5f n area 在二个单引号间包括输出的字串Theareais 接着是输出数据的格式 8 5f 再后来是换行符号以避免下一个输出数据或是提示符号也挤在同一行 最后键入要输出的数据名area 例如Theareais12 56637 输出值为8位数含5位小数 f form 12345 fprintf e form 12 5e n 12345 2 输出值为指数格式的12位数 含5位小数 e form 1 23452e 004 fprintf e form d n 12345 2 e form 1 234520e 004 fprintf f form 12 0f n 12345 2 输出值为整数格式的12位数 以下的例子各说明了不同形态的输出格式 4 4程序结构 与C语言类似 MATLAB程序的控制结构也有顺序结构 选择结构和循环结构三种 另外有一种试探结构其控制语句主要有if while for switch四个 下面分别进行介绍 if else语句switch case语句 一 条件语句 选择结构语句 1 if条件语句 if条件式语句组 end if条件式1语句组1 elseif条件式2语句组2 else语句组3 end 注意elseif中间无空格 例1 建立符号函数sign x x input x ifx 0sn 1 elseifx 0sn 0 elsesn 1 endfprintf x 5f sn 0f n x sn DTMF拨号音编解码的实现 switchswith expr分支条件 结果为数值或字符串 casecase expr1数值 或字符串 常量表达式1case 数值 或字与符串 常量表达式case expr2 数值 或字符串 常量表达式case expr3 case数值 或字符串 常量表达式NotherwiseEnd 格式 2 switch分支结构 No input Pleaseinputyourchoice 0 1 2 3 switchNocase0disp returntomainmenu case1disp Sheisagirl case2disp Heisaboy otherwisedisp Ican tdetermine end 例1 变量做分支条件 例2 输入一个数 判断它是否能被5整除 n input 输入n switchmod n 5 case0fprintf d可被5整除 n otherwisefprintf d不能被5整除 n end 函数做分支条件 例3 编写一个函数 将百分制的学生成绩转换为五级制的成绩 使用结构 Functionf TranGrade x switchfix x 10 case 10 9 f A case8f B case7f C case6f D otherwisef E end 函数做分支条件 在switch语句中 switch是语句的开始 紧接着的是分支条件 分支条件可以是一个变量 函数 或者表达式 不同的case可以定义不同的运算指令 而紧接在case后面的就是此case的分支条件 之后接着一个或一串运算指令 若不符合所有的case条件 则程序就会执行otherwise下面的表达式 语句以end作为结束 1 switch expr的结果必须是一个数值或者是一个字符串 如果是一个数值 标量 switch expr case exprN就被每一个case语句检测 如果是一个字符串 就用strcmp switch expr case exprN 进行检测 2 在一个case语句后 可以拥有多个常量表达式其执行过程为首先计算选择表达式swith expr的值 然后与各个case语句中的常量比较 然后选择第一个与之匹配的case语句组执行 执行完毕后立即退出switch语句组 若没有与选择表达式值相匹配的case语句 则执行othwise后的语句组 并退出switch语句组 只执行第一个检验成功 符合条件的case语句 而跳过其他case运算 使用switch结构必须注意三点 key input pleaseinputkeyvaluve 0 9or or s fl 0 switchkeycase 1 2 3 fl 697 当开关表达式的值等于表达式1时 将执行语句段1 执行完语句段1后将转出开关体 无需像c语言那样在下一个case语句前加break语句 当需要在开关表达式满足若干个可以枚举的表达式之一时执行某一程序段 则应该把这些表达式用 起来 中间用逗号分隔 3 MATLAB开关switch语句与c的区别 当前面枚举的各个表达式均不满足时 则将执行otherwise语句后面的语句段 此语句等价于c语言中的default语句 在case语句引导的各个表达式中 不要用重复的表达式 否则列在后面的开关通路将永远也不能执行程序的执行结果和各个case语句的次序无关 for变量 表达式 end while条件式 end for语句多用在已知循环次数的情况 而while语句则多用在不能判定循环次数的情况下 只要条件式的值为1 真 就执行while与end之间的语句体 直到表达式的值为0 假 时终止该循环 二 循环语句 for语句和while语句 例1 编写计算s 1 2 3 100的MATLAB程序 s 0 forn 1 100 默认步长为1s s n end 1 for循环语句举例 jiujiu 10000000024000000036900000048121600000510152025000061218243036000714212835424900816243240485664091827364554637281 clc clearjiujiu zeros 9 9 预分配数组空间fori 1 9 forj 1 i jiujiu i j i j endendjiujiu 例2 设计九九乘法表 A 111111111222222222333333333444444444555555555666666666777777777888888888999999999 B 123456789123456789123456789123456789123456789123456789123456789123456789123456789 上机作业 用两矩阵点乘 如何实现九九表 上机作业 用两矩阵点乘 如何实现九九表 clc cleara 1 9 A repmat a 1 9 b 1 9 B repmat b 9 1 Jiujiu tril A B jiujiu 10000000024000000036900000048121600000510152025000061218243036000714212835424900816243240485664091827364554637281 repmat a m n 提示 例3 求奇数和 s 1 3 5 2n 1 n input 请输入n s 0 fori 1 2 n 步长为2s s i fprintf i d s d n i s disp i num2str i blanks 6 s num2str s ends disp s 注意使用提示输入与输出语句 For循环语句的执行过程 从矩阵的第一列开始 依次将矩阵的各列之值赋值给变量 然后执行语句组中的语句 直到最后一列 forx arraycommands end 注意 当循环变量为矩阵时 clc cleardata 39456 716 15 y zeros 1 4 k 1 forn data 循环变量为一矩阵 每执行一次循环n得到data的一列2个值y k n 1 n 2 k k 1 endy 例4 求data的差分 按列求差 y 4 7461 2 while循环结构举例 例1 求1 100的偶数和 x 0 sum 0 whilex 101sum sum x x x 2 endsum for变量 表达式 end while条件式 end clearx zeros 1 6 forI 1 6 x I 1 I endformatrat I x x zeros 1 6 I 1 whileI 7x I 1 I I I 1 endformatrat I x 两循环比较 结果 x 11 21 31 41 51 6 I 6 I 7 x zeros 1 6 forI 1 6 x I 1 I I 100 endformatrat I x n 1 10 x sin n pi 10 forn 1 10 x sin n pi 10 end 两种方法得出同样的结果 而后者执行更快 更直观 要求较少的输入 若能用一个等效的数组方法来解给定的问题时 应避免用for循环 data 39456 716 15 y zeros 1 4 k 1 forn data 每执行一次循环n得到data的1列2个值y k n 1 n 2 k k 1 endy data 39456716 15 y 4 7461 for循环 While循环 被执行之前 应预置空间 for循环的其它方面重要提示 不能用for循环内重新赋值循环变量的方法来终止循环 若能用一个等效的矩阵来解给定的问题时 应避免用for循环 为了得到最大的速度 在for循环 While循环 被执行之前 应预先使用zeros预置空间 continue命令中断语句 break 暂停语句 pause键盘控制语句 keyboard 常用于函数文件的调试 可随时查看变量 4 5程序的流程控制辅助语句 例1 a 3 b 6 fori 1 3b b 1ifi 2continueenda a 2end 输出 b 7b 8a 5b 9a 7 例2 a 3 b 6 fori 1 3b b 1ifi 2breakenda a 2end 输出 b 7 1 continue命令 continue语句通常用于for或while循环体中 作用是终止一次循环的执行 与if一同使用 当if条件满足时 跳过本次循环未执行的语句 直接去执行下一次循环 2 break命令 break语句也常用于for或while循环体中 与if一同使用 当if后的表达式为真时 就跳出当前的循环 3 keyboard命令 在M文件中选定的位置置入keyboard命令 以便将临时控制权交给键盘 这样做以后 函数工作区就可以进行查询 并且可以根据需要改变变量的值 在键盘提示符下输入return命令就可以恢复函数执行 即在k 下输入return就可以了 exp2 8 mclc cleara 4 b 6 disp 暂停 请按任意键继续 pause 暂停 直到用户按任意键c a 9 b 7 keyboard 暂时把控制权交给键盘 在命令窗口中出现k提示符k 输入return 回车后退出 继续执行下面的语句 pause命令及keyboard举例 pause命令举例 4 6程序文件的格式特征 1 用clc clear closeall等语句开始 清除掉工作空间中原有的变量和图形 以避免其他已执行的程序残留数据对本程序的影响 2 前几行通常是对此程序用途的说明 特别是在运行时对用户输入数据的要求 更要叙述清楚 这些注释行必须以 号开始 3 在自设变量名时要防止与MATLAB中的函数重名 4 程序中必须都用半角英文字母和符号 只有引号括住的和 号后的内容可用汉字 5 文件名不允许用汉字 因为这个文件名 也就是MATLAB的调用命令 它不认汉字 6 函数M文件必须以function开始 7 可运行的MATLAB程序中可调入但不能包含一个M函数文件 8 一个函数M文件被调用时 可直接调用函数名如y myfun 而不传参数值 functionBase info Base B randn 3 3 Base in 9 8 7 6 5 4 3 2 1 Base info Base in B 一个函数M文件被调用时 可直接调用函数名如Base info Base Base info Base 本身不需传参数 调用函数可不传参数情况一 固有变量nargin nargout的利用 调用函数可不传参数情况二 当调用一个函数时 所用的输入和输出的参量的数目 在函数内是规定好的 函数工作空间变量nargin包含输入参量个数 函数工作空间变量nargout包含输出参量个数 事实上 这些变量常用来设置缺省输入变量 并决定用户所希望的输出变量 函数输入输出参数nargin nargout 例 编写一函数 要求完成两个功能 一是设置缺省输入变量值a 2 b 3 二是返回x和y的值 其中x是第一个形参的平方 y是两个形参的和 function x y myfun a b ifnargin 1a 2 b 3 endifnargin 2 b 3 endx a 2 y a b 一个函数M文件被调用时 可直接调用函数名如y myfun 而不传参数值 4 7MATLAB搜索路径 文件管理 搜索路径 标识符 包括变量 内部函数 用户自定义函数等等 识别的顺序它按如下的顺序 优先级 与已有的记录相比较 工作空间的变量名内部固有变量名mex文件名M文件名 例如 在MATLAB提示符下键入lust 则MATLAB按以下步骤处理 1 首先检查lust是不是变量 2 然后检查lust是不是内部函数 3 检查当前目录中是否有lust mex lust dll或lust m文件 4 如果均不满足 则显示出错信息 如果两个名字相同 它只认优先级高的名字比如用户在工作空间中给i赋了值 那么系统就不会取内部固有变量中设定的虚数i 如果用户在程序中设立了一个与MATLAB中的函数同名的变量 则每次调用此名字时 出现的将是用户自定的变量 调不出MATLAB中的函数 所以在自设变量名时要防止与MATLAB中的函数重名 functionBase info Base B randn 3 3 Base in 9 8 7 6 5 4 3 2 1 Base info Base in B 又设变量 Base 9 8 7 6 5 4 3 2 1 调用函数Base info Base 时 将出现与我们所要的结果不一致的现象 设有函数 把某些分号改为逗号 使中间结果能显示在屏幕上 作为查错的依据 在子程序中适当部位加keyboard命令 此时 系统会暂停而等待用户键入命令 这时子程序中的变量还存在于工作空间中 可以对它们进行检查 将函数文件的第一行前加 号 使它成为程序文件 进行初步调试 第一行中的输入变元 可改用input或赋值语句来输入 调好后再改回函数文件 4 8MATLAB程序调试常用方法 Debug程序调试 设断点 在运行含有断点的程序后 可将鼠标放在变量旁查看变量的信息 在程序调试过程中很有用 A 236541 987654 A 498567 方法一 利用随机数产生函数alpha randperm data length 实现交织 说明 data 11101 data length 5 alpha randperm data length 输出alpha为随机生成的5个数 若alpha 53124 可认为是索引号 实验3 2 data inter data alpha 随机交织后的输出帧为da

温馨提示

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

评论

0/150

提交评论