第五章-MATLAB程序设计PPT课件_第1页
第五章-MATLAB程序设计PPT课件_第2页
第五章-MATLAB程序设计PPT课件_第3页
第五章-MATLAB程序设计PPT课件_第4页
第五章-MATLAB程序设计PPT课件_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

第五章MATLAB程序设计 5 1M文件介绍5 2程序控制结构及语句5 3变量作用域5 4文件操作5 5面向对象的程序设计5 6程序设计辅助函数5 7Matlab编译5 8程序调试5 9程序设计优化5 10应用程序接口 5 1M文件介绍 Matlab的文件类型一般可以分为两种 分别为 mat文件和 m文件 mat数据文件是matlab以标准二进制格式保存的数据文件 可将工作空间中有用的数据变量保存下来 其生成和调用是由函数save和load完成的 m文件起因于用户灵活使用Matlab 充分使用Matlab的科技资源 另外 命令行方式程序可读性差 对于复杂的问题 需要编写成易存储的程序文件 由此产生了 m文件 其编辑可以使用多种编辑器 通常可以把 m文件简称为M文件 5 1 1M文件的创建与编辑 1 建立新的M文件 1 菜单操作 MATLAB命令窗口的File菜单 New菜单项 M file命令 2 命令操作 在MATLAB命令窗口输入命令edit 3 命令按钮操作 单击MATLAB命令窗口工具栏上的 新建 命令按钮 4 使用DOS状态的edit编辑器编辑 5 使用windows系统的notbook 记事本进行创建 6 使用word进行创建 2 M文件的编辑在使用上述方式创建好M文件后可以通过上面的各类编辑器进行编辑 之后将M文件进行保存 文件保存的目录一般默认为用户当前设置的工作目录注意 所创建编辑的m文件必须纳入matlab搜索路径后 才能在matlab命令窗口运行 5 1 2M文件的分类 m文件的语法类似于c语言 但又有其自身特点 它只是一个简单的ASCII码文本文件 执行程序时逐行解释运行程序 matlab是解释性的编程语言 m文件有两类 独立的m文件 称命令文件 可调用m文件 称函数文件 1 命令文件 简单的m文件命令文件实际上是一串指令的集合 与在命令窗口逐行执行文件中的所有指令 其结果是一样的 没有输入输出参数 命令式M文件在运行过程中可以调用MATLAB工作域内所有的数据 而且 所产生的所有变量均为全局变量 直到用户执行clear命令清除 另外需注意的是 标点符号要运用恰当 注意程序的书写风格 保持程序的可读性 2 matlab内置函数文件matlab自定义的函数文件称内置函数文件调用内置函数的方法 使用函数名并给出相应的入口 出口参数即可 例如 sin m函数 用typesin查不到 调用格式 y sin 2 x 实际应用中 x 0 2 pi 180 2 pi y sin 2 x plot x y 又如sqrt x 求x的平方根abs x 求x的绝对值det a 求行列式的值等等 matlab拥有大量的内置数学函数 供我们在数值运算和符号运算中调用 3 函数m文件 需要输入变量 返回输出变量matlab用户可以根据需要编辑自己的m文件 它们可以像库函数一样方便的调用 从而极大地扩展了matlab的能力 对于某一类特殊问题 如创建了许多m函数文件 则可形成新的工具箱 这种用matlab语言创建定义新的matlab函数的功能 正体现了matlab语言强大的扩展功能 函数m文件的格式 function返回变量 函数名 输入变量 注释说明语句段程序语句段特定规则 函数m文件第一行必须以单词function作为引导词 必须遵循如下形式 function m文件的文件名必须是 m 程序中的变量均为局部变量 不保存在工作空间中 其变量只在函数运行期间有效 函数被调用时按函数名 输入变量 格式执行函数执行完后 只保留返回结果 不保留中间过程 例如 functionCustomVar01 SimpleFunction a b SimpleFunction用于显示两个数进行四则运算后的结果 使用help语句时应该能将此句注释显示出来 而使用 lookfor语句时应不能显示c a b 对参数a b进行加运算d a b 对参数a b进行减运算e a b 对参数a b进行乘运算f a b eps 对参数a b进行除运算CustomVar01 c d e f 将四项基本运算的结果放到一向量中去并显示 调用此函数 则有SimpleFunction 2 3 ans 5 0000 1 00006 00000 6667 使用help语句获得帮助helpSimpleFunctionSimpleFunction用于显示两个数进行四则运算后的结果使用help语句时应该能将此句注释显示出来 而使用lookfor语句时应不能显示使用lookfor语句查询关键字lookfor四则运算SimpleFunction m SimpleFunction用于显示两个数进行四则运算后的结果注 为了利用MATLAB的关键字搜索功能 应该在M文件的第一行注释中 尽可能多的包含函数的特征信息 4 系统文件 s函数用于描述系统运动的专用函数 是特殊的m文件 s函数有3类 由simulink结构图自动创建 可用c语言程序设计mex文件直接定义 用函数m文件编写s函数一旦创建 即可在框图中使用 也可在文件中调用 s函数的调用格式 sys x0 sfunction t x u flag 其中sys系统状态x0状态初值sfunction用户定义的系统t当前时刻x当前状态值u当前输入值flag标志量s函数与函数m文件类似 只是输入输出变量是限定的 例5 1 2 1建立一个命令文件将变量a b的值互换 然后运行该命令文件 首先建立命令文件并以文件名exch m存盘 clear a 1 10 b 11 12 13 14 15 16 17 18 c a a b b c ab然后在MATLAB的命令窗口中输入exch 将会执行该命令文件 例5 1 2 2建立一个函数文件将变量a b的值互换 然后在命令窗口调用该函数文件 首先建立函数文件fexch m function a b fexch a b c a a b b c 然后在MATLAB的命令窗口调用该函数文件 clear x 1 10 y 11 12 13 14 15 16 17 18 x y fexch x y 5 2程序控制结构及语句 matlab语言的程序结构与其它高级语言是一致的 分为顺序结构 分支结构 循环结构 1 顺序结构 依次顺序执行程序的各条语句 2 分支结构 根据一定条件来执行的各条语句 有些资料中也称其为选择结构 主要是因为其语句往往是一些选择判断性的语句 3 循环结构 被重复执行的一组语句 循环是计算机解决问题的主要手段 5 2 1常见程序控制流语句 input函数调用格式为 A input 提示信息 选项 其中提示信息为一个字符串 用于提示用户输入什么样的数据 如果在input函数调用时采用 s 选项 则允许用户输入一个字符串 例如 想输入一个人的姓名 可采用命令 xm input What syourname nHowareyou nHowoldareyou s disp函数调用格式为disp 输出项 其中输出项既可以为字符串 也可以为矩阵 注意 用disp函数显示矩阵时将不显示矩阵的名字 而且其格式更紧密 且不留任何没有意义的空行 例5 2 1 1求一元二次方程ax2 bx c 0的根 程序如下 a input a b input b c input c d b b 4 a c e sqrt d x b e 2 a b e 2 a disp x1 num2str x 1 x2 num2str x 2 pause函数其调用格式为 pause 延迟秒数 如果省略延迟时间 直接使用pause 则将暂停程序 直到用户按任一键后程序继续执行 若要强行中止程序的运行可使用Ctrl C命令 pause暂停程序 等待回应 pause n 等待n秒后继续执行 pauseon显示并执行pause命令 pauseoff显示但不执行pause命令 keyboard 与input类似 功能更强keyboard调用键盘与调用m文件一样 当keyboard在m文件中出现时 它停止文件的执行并控制键盘 用于修改程序 重新返回原m文件时使用return语句 break 中断break中断for while循环语句的执行 在嵌套循环结构中 break进从最里层循环推出 menu 产生一个拥护可选择输入的菜单格式 k menu 标题 菜单1 菜单2 菜单3 echo指令 用来控制m文件在执行过程中是否显示echoon 打开所有命令文件的显示方式echooff 关闭所有命令文件的显示方式echo 在以上两者间切换echo对于命令文件函数文件有所不同 命令文件用法简单 函数对所有命令起作用 函数文件用法较复杂 具体请help查询 echofileon 打开file函数文件的显示方式echofileoff 关闭file函数文件的显示方式echofile 切换file函数文件的显示方式echoonall 打开所有函数文件的显示方式echooffall 关闭所有函数文件的显示方式 5 2 2分支结构 5 2 2 1if语句在MATLAB中 if语句有3种格式 1 单分支if语句语句格式为 if条件语句组end当条件成立时 则执行语句组 执行完之后继续执行if语句的后继语句 若条件不成立 则直接执行if语句的后继语句 2 双分支if语句语句格式为 if条件语句组1else语句组2end当条件成立时 执行语句组1 否则执行语句组2 语句组1或语句组2执行后 再执行if语句的后继语句 条件语句组 语句组1 语句组2 是 否 例5 2 2 1 1计算分段函数值 程序如下 x input 请输入x的值 ifx 10y cos x 1 sqrt x x 1 elsey x sqrt x sqrt x endy 3 多分支if语句语句格式为 if条件1语句组1elseif条件2语句组2 elseif条件n语句组nelse语句组n 1end 条件1 语句组1 条件2 是 语句组2 是 否 条件n 语句组n 语句组n 1 否 否 是 例5 2 2 1 2输入一个字符 若为大写字母 则输出其后继字符 若为小写字母 则输出其前导字符 若为数字字符则输出其对应的数值 若为其他字符则原样输出 程序如下 c input 请输入一个字符 s ifc A end 5 2 2 2switch语句其语句格式为 switch表达式case表达式1语句组1case表达式2语句组2 case表达式m语句组motherwise语句组m 1end 注意 无需像C语言那样在下一个case语句前加break语句 当需要在开关表达式满足若干个表达式之一时 用单元结构来表示 otherwise等价于C语言的default语句 程序的执行结果与case语句的次序无关 例5 2 2 2 1某商场对顾客所购买的商品实行打折销售 已知打折标准 求所售商品的实际销售价格 程序如下 price input 请输入商品价格 switchfix price 100 case 0 1 rate 0 case 2 3 4 rate 3 100 casenum2cell 5 9 rate 5 100 casenum2cell 10 24 rate 8 100 casenum2cell 25 49 rate 10 100 otherwiserate 14 100 endprice price 1 rate 5 2 2 3try语句语句格式为 try语句组1catch语句组2endtry语句先试探性执行语句组1 如果语句组1在执行过程中出现错误 则将错误信息赋给保留的lasterr变量 并转去执行语句组2 这种试探性执行语句是其他高级语言所没有的 例5 2 2 3 1矩阵乘法运算要求两矩阵的维数相容 否则会出错 先求两矩阵的乘积 若出错 则自动转去求两矩阵的点乘 程序如下 A 1 2 3 4 5 6 B 7 8 9 10 11 12 tryC A B catchC A B endClasterr 显示出错原因 5 2 3循环结构 5 2 3 1for语句语句格式为 for循环变量 表达式1 表达式2 表达式3循环体语句end首先计算三个表达式的值 再将表达式1的值赋给循环变量 如果此时循环变量的值介于表达式1和表达式3的值之间 则执行循环体语句 否则结束循环的执行 执行完一次循环之后 循环变量自增一个表达式2的值 然后再判断循环变量的值是否介于表达式1和表达式3之间 如果满足仍然执行循环体 直至不满足为止 这时将结束for语句的执行 而继续执行for语句后面的语句 注意 for语句一定要有end结束标志 循环语句中要用 防止中间结果的输出 书写时采用锯齿结构以增加可读性 例5 2 3 1 1已知y的表达式 当n 100时 求y的值 程序如下 y 0 n 100 fori 1 ny y 1 i i endy在实际MATLAB编程中 为提高程序的执行速度 常用向量运算来代替循环操作 n 100 i 1 n f 1 i 2 y sum f 注意 for语句一定要有end结束标志 循环语句中要用 防止中间结果的输出 书写时采用锯齿结构以增加可读性 例5 2 3 1 1已知y的表达式 程序如下 y 0 n 100 fori 1 ny y 1 i i endy 当n 100时 求y的值 例5 2 3 1 2求定积分 程序如下 a 0 b 3 pi n 1000 h b a n x a h b f exp 0 5 x sin x pi 6 fori 1 ns i f i f i 1 h 2 ends sum s 事实上 MATLAB提供了有关数值积分的标准函数 实际应用中可直接调用这些函数求数值积分 for语句更一般的格式 for循环变量 矩阵表达式循环体语句end执行过程是依次将矩阵的各整列元素赋给循环变量 然后执行循环体语句 直至各列元素处理完毕 实际上 表达式1 表达式2 表达式3 是一个仅为一行的矩阵 行向量 因而列向量是单个数据 例5 2 3 1 3已知5个学生4门功课的成绩 求每名学生的总成绩 程序如下 s 0 a 65 76 56 78 98 83 74 85 76 67 78 79 98 58 42 73 67 89 76 87 fork as s k enddisp s 5 2 3 2while语句while语句的一般格式为 while 条件 循环体语句end其执行过程为 若条件成立 则执行循环体语句 执行后再判断条件是否成立 如果不成立则跳出循环 条件为真 循环体语句 是 否 结束循环 y 0 i 1 while1f 1 i i y y f ifi 100break endi i 1 endy与循环结构相关的有一个break语句 当在循环体内执行到该语句时 程序将跳出循环 该语句一般与if语句配合使用 例5 2 3 2 1已知y的表达式 当n 100时 求y的值 5 2 3 3循环的嵌套如果一个循环结构的循环体又包括一个循环结构 就称为循环的嵌套 或称为多重循环结构 可以按照嵌套层数 分别叫做二重循环 三重循环等 处于内部的循环叫作内循环 处于外部的循环叫作外循环 在设计多重循环时 要特别注意内 外循环之间的关系 以及各语句放置的位置 不要搞错 例5 2 3 3 1用筛选法求某自然数范围内的全部素数 程序如下 m input m p 2 m fori 2 sqrt m n find rem p i 0endp 5 3变量作用域 函数内部定义的变量均为局部变量 如果需要使用全局变量 则应当使用命令global定义 并且在任何使用该全局变量的函数中都应加以定义 定义全局变量时 变量之间必须用空格分隔 不能以逗号分隔 例5 3 1先建立函数文件wadd m 该函数将输入的参数加权相加 functionf wadd x y globalALPHABETAf ALPHA x BETA y 在命令窗口中输入 globalALPHABETAALPHA 1 BETA 2 s wadd 3 4 5 4文件操作 5 4 1文件的打开与关闭1 打开文件fopen函数的调用格式为 文件句柄 fopen 文件名 打开方式 如果句柄的值大于0 说明文件打开成功 打开方式 r 只读w 只写a 追加r 可读又可写 2 关闭文件调用格式为 fclose 文件句柄 成功 则返回0 否则返回 1 如果想关闭matlab运行中打开的所有文件 可以用fclose all 命令 5 4 2二进制文件读写操作1 读二进制文件fread函数可以读取二进制文件的数据 并将数据存入矩阵 其调用格式为 A COUNT fread Fid size precision 2 写二进制文件fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中 其调用格式为 COUNT fwrite Fid A precision 5 4 3文本文件读写操作1 读文本文件fscanf函数可以读取文本文件的内容 并按指定格式存入矩阵 其调用格式为 A COUNT fscanf Fid format size 2 写文本文件fprintf函数可以将数据按指定格式写入到文本文件中 其调用格式为 COUNT fprintf Fid format A 5 4 4数据文件定位fseek函数用于定位文件位置指针 其调用格式为 status fseek Fid offset origin ftell函数返回文件指针的当前位置 其调用格式为 position ftell Fid 例5 4 1分析下列程序执行后 four position和three三个变量的值 a 1 5 Fid fopen fdat bin w 以写方式打开文件fdat binfwrite Fid a int16 将a的元素以双字节整型写入文件fdat binstatus fclose Fid Fid fopen fdat bin r 以读数据方式打开文件fdat binstatus fseek Fid 6 bof 将文件指针从开始位置向尾部移动6个字节four fread Fid 1 int16 读取第4个数据 并移动指针到下一个数据position ftell Fid ftell的返回值为8status fseek Fid 4 cof 将文件指针从当前位置往前移动4个字节three fread Fid 1 int16 读取第3个数据status fclose Fid 5 5面向对象程序设计 类和对象的构造类的概念是结构体的拓展 类中可以包含变量形成员 也可以包含与这些变量相关联的函数或运算 对象是类的一个实例 首先定义一个适当的名字 以这个名字建立一个子目录 目录名为该名称前加 符号 编写一个引导函数 函数名与类同名 例5 5 1 定义一个多项式类如果不给出输入变量 则建立一个空多项式 如果输入变量a为多项式类 则直接把它传送给输出变量p 如果a为向量 则将此向量变换成行向量 再构造一个多项式对象 functionp polynom a ifnargin 0p c p class p polynom elseifisa a polynom p a elsep c a p class p polynom end 类的显示在此目录下重新建立display 函数 函数自动按照多项式显示的格式构造字符串 并显示出来 各种运算的建立加法运算 对plus 函数进行重载定义 减法运算 对minus 函数进行重载定义 乘法运算 对mtimes 函数进行重载定义 乘方运算 对mpower 函数进行重载定义 5 6程序设计辅助函数 容错函数error 错误信息 触发函数error时 中断程序的运行 显示错误信息 warning用法类似 但不会中断程序 时间控制函数日期表达形式 dd mmm yyyymm dd yymm dd12 Oct 200310 12 0310 12时间表达形式 HH MM SSHH MM SSPMcputime的调用 t cputime 程序段 t cputime t 显示该程序段运行所占用的CPU时间 tic toc的调用方法tic 程序段 toc 显示运行该程序段所需的时间 etime time2 time1 计算两时刻的时间差 5 7MATLAB编译 matlab编译的原因 1 提高运算速度2 隐藏特定算法3 可产生独立的m文件matlab编译函数 mccMCC options fun fun2 mexfile1 mlibfile1 5 8程序调试 语法错误发生在程序代码的解释过程中 一般有函数参数输入类型有误或矩阵运算阶数不符等情况 比如 A 1 9

温馨提示

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

评论

0/150

提交评论