第3章 基本编程_第1页
第3章 基本编程_第2页
第3章 基本编程_第3页
第3章 基本编程_第4页
第3章 基本编程_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、 第3章 基本编程教学目标l熟悉熟悉 MATLAB 的编程环境的编程环境l掌握掌握 MATLAB 的变量类型的变量类型l掌握掌握 MATLAB 中的流程控制语句中的流程控制语句l了解了解 MATLAB 中的错误处理中的错误处理l了解了解 MATLAB 程序调试方法程序调试方法l了解了解 MATLAB 代码优化方法代码优化方法教学内容lM文本文件介绍文本文件介绍 l函数流程控制函数流程控制 l函数变量函数变量 lMATLAB 编程错误处理编程错误处理 l调试程序调试程序 l优化程序优化程序 M文本文件介绍l选择HOME | New | Script选项进入文本编辑器界面建立新的M文件M文本文件介

2、绍(1)在软件操作界面选择HOME|Open(2)在命令窗口中输入edit+文件名lMATLAB中有大量的函数,包括: 内建函数(C语言编写) 自带函数(M文件)编辑已有的M文件M文件的分类函数functions脚本script 函数式M文件和脚本式M文件都是以.m作为扩展名的文本文件,在文本编辑器中创建文件。二者在语法和使用上略有区别。脚本l脚本式 M文件可包含MATLAB的各种命令,类似DOS系统中的批处理文件l脚本文件的运行:(1)EDITOR|RUN(2)在命令窗口中直接键入该M文件的文件名(3)运行脚本文件时,需要将脚本所在的目录设置为当前工作目录。脚本例:建立例:建立一个脚本一个脚

3、本M文件将变量文件将变量a, b的值互换,然后运行的值互换,然后运行该脚本文件该脚本文件。(1)首先建立脚本文件并以exch.m存盘clear;a=1:10;b=11 12 13 14;15 16 17 18;c=a;a=b;b=c;ab脚本(2)然后在MATLAB的命令窗口中输入exch,将会执行该命令文件,输出为:a = 11 12 13 14 15 16 17 18b = 1 2 3 4 5 6 7 8 9 10函数l函数式函数式M文件文件 function 返回变量列表=函数名(输入变量列表) 注释说明语句段 函数体第一行为function语句; function后定义函数名和输入输出

4、参数,函数被调用时按此格式执行;文件名必须与函数名一一对应;函数执行完后,只保留返回结果,不保留中间过程;函数例例 :建立:建立一个函数一个函数M文件将变量文件将变量a, b的值互换,然后在的值互换,然后在命令窗口调用该函数文件命令窗口调用该函数文件。(1)建立函数文件并以fexch.m存盘 functiona,b=fexch(a,b) c=a;a=b;b=c;函数输出结果:x = 11 12 13 14 15 16 17 18y = 1 2 3 4 5 6 7 8 9 10在MATLAB的命令窗口中调用该函数文件:clear;x=1:10;y=11 12 13 14;15 16 17 18;

5、 %输入参数,也就是给函数fexch(a,b)中的形参a,b赋具体值x,y=fexch(x,y) %调用函数fexch()函数与脚本函数函数l既有输入参数,又有输出参数l函数中的变量(除特殊声明外)都是局部变量l函数名必须与文件名相同l函数被调用时,MATLAB会为它开辟临时工作空间,当执行完函数或return命令时结束函数的运行,返回输出值,同时清空临时工作空间。脚本脚本l不用输入参数,也没有输出参数l脚本中的变量都是全局变量l文件名任意指定l在函数中调用脚本文件,等价于在函数中将脚本文件的内容粘贴在调用的位置。变量类型MATLAB中的特殊变量中的特殊变量变量类型nargin的用法的用法lf

6、unctiona,b,c=example(x1,x2,x3,x4)la=0;b=0;lif(nargin=1)lc=x1;lelseif (nargin=2)l c=3;lelseif(nargin2)l c=5;lendnargout的用法的用法lfunctiona,b,n=fexch(a,b)lif(nargout=3)l n=5;l c=a;a=b;b=c;lend变量作用域l函数内部定义的变量均为局部变量,如果需要使用全局变量,则应当使用命令global定义,并且在任何使用该全局变量的函数中都应加以定义。l定义全局变量时,变量之间必须用空格分隔,不能以逗号分隔。程序控制结构l顺序结构顺

7、序结构 l循环结构循环结构 l选择结构选择结构l其他流程控制函数其他流程控制函数 顺序结构l顺序结构程序在编译时,按照程序的物理位置顺序执行,这种程序容易编制,但是结构单一,能够实现的功能有限。 x=12;y=6;z=18;sum=x+y+z;sub=x-y-z 将以上程序以文件名sequence.m保存并在命令窗口中输入sequence,并按Enter键确认,输出结果:sum=36sun=-12循环结构lfor 语句语句 for 循环变量 = 表达式1:表达式2:表达式3 执行代码块 end 以表达式1的值为起点,表达式2的值为步长,表达式3的值为终点。 for 语句一定要有end结束标志;

8、 循环语句中要用“;”防止中间结果的输出; 书写时采用锯齿结构以增加可读性;循环结构例 已知当n=100时,求y的值。程序如下:程序如下:y=0;n=100;for i=1:n y=y+1/i/i;endy运行结果如下:运行结果如下:y = 1.6350循环结构l求求mysum=0; for i=1:1:100 mysum=mysum+i; end; mysum循环结构lwhile 语句语句 将相同的代码块执行多次,但是次数并不预先指定,当 while 的条件表达式为真时,执行代码块,直到条件表达式为假。while 语句结构:while 条件表达式 执行代码块end 循环结构mysum=0;i

9、=1; while (i=100) mysum=mysum+i; i=i+1; end mysum 例:求循环结构function output=function3(p,n)num=1;result1=1;tmp1=1;result2=1;tmp2=1;while numA(3)&A(1)+A(3)A(2)&A(2)+A(3)A(1) p=( A(1)+A(2)+A(3)/2; s=sqrt(p*(p-A(1)*(p-A(2)*(p-A(3); disp(s); else disp(不能构成一个三角形。) end运行结果如下:请输入三角形的三条边:6 8 10 24选择结构l当

10、判断包含多个选择时,可以采用当判断包含多个选择时,可以采用elseif 语句,结构为:语句,结构为:if 表达式1 执行代码块1elseif 表达式2 执行代码块2elseif .else 执行代码块endl其中可以包含任意多个其中可以包含任意多个 elseif 语句。语句。 2022年5月10日第35页选择结构l例:输入一个字符,若为大写字母则输出其后继字符,例:输入一个字符,若为大写字母则输出其后继字符,若为小写字母则输出其前导字符,若为数字字符则输若为小写字母则输出其前导字符,若为数字字符则输出其对应的数值,若为其他字符则原样输出出其对应的数值,若为其他字符则原样输出。c=input(请

11、输入一个字符请输入一个字符,s);if c=A&c=a&c=0&c=9 disp(abs(c)-abs(0);else disp(c);end选择结构lswitch-case-otherwiseswitch 表达式 case 值1 执行代码块1; case 值2 执行代码块2; . case 值n 执行代码块n; otherwise 执行代码块end选择结构例:某商场对顾客所购买的商品实行打折销售,标准如下例:某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用(商品价格用price来表示):来表示): price500 没有折扣没有折扣 500 price100

12、0 5折扣折扣 1000 price2500 8折扣折扣 2500 price5000 10折扣折扣 5000 price 14折扣折扣求所销售商品的实际销售价格。求所销售商品的实际销售价格。选择结构price=input(请输入商品价格请输入商品价格:);pricec=fix(price/500)switch c case 0 rate=0; case 1 rate=5/100; case 2 rate=8/100; case 3 rate=8/100; case 4 rate=8/100;case 5 rate=10/100; case 6 rate=10/100; case 7 rate

13、=10/100; case 8 rate=10/100; case 9 rate=10/100; otherwise rate=14/100;endprice=price*(1-rate)其他流程控制函数 continue:continue 语句通常用在循环控制中,用于结束当次循环,继续执行下一次循环,但是不结束当前循环。一般 continue 语句与 if 语句相结合,当满足一定的条件时,执行 continue 语句。break:用于循环控制,中断当前循环。 break 用于跳出当前循环,不再执行该循环的任何操作。return:结束该程序的执行,返回到调用函数或者键盘其他流程控制函数l中断命

14、令中断命令 break例:鸡兔同笼,头有36,脚共100,求鸡兔各多少?i=1;while i if rem(100-i*2,4)=0&(i+(100-i*2)/4)=36 break; end i=i+1;endchicken=irabit=(100-2*i)/4其他流程控制函数lcontinue语句语句function output=function5(x,n)num=1;while num=n x_tmp=rand(1)*x; if x_tmp0.8*x continue; else output(num)=x_tmp; num=num+1; end end其他流程控制函数ltr

15、ycatchend语句语句 trycatch 语句可以包容程序运行中的错误,并返回错误类型try 运行代码块1catch 运行代码块2endlasterr 首先执行语句段1,如果在执行过程中出现错误,则将错误信息赋给lasterr变量,并放弃该段语句,转而执行语句段2中的语句。人机交互语句l echo语句 echo on 打开命令式文件的回应命令; echo off 关闭回应命令; echo file on 使file文件的命令在执行中被显示; echo file off 关闭file文件的命令执行中的回应; echo on all 显示所有执行文件的执行过程; echo off all 关闭

16、所有执行文件的回应显示;人机交互语句l用户输入提示命令用户输入提示命令 input 用来提示用户从键盘输入数据、字符串用来提示用户从键盘输入数据、字符串或表达式,并接收输入值。或表达式,并接收输入值。r=input(How many apples:)How many apples:2r = 2人机交互语句l keyboard 暂停执行程序并等待键盘输入状态,处理完毕后,键入return并回车,程序将继续运行,通常用来对程序调试及在程序中修改变量。l pause pause暂停程序,等待回应; pause(n)等待n秒后继续执行; pause on 显示并执行pause命令; pause off

17、 显示但不执行pause命令。 程序调试l语法错误 发生在程序代码的解释过程中,一般有函数参数输入类型有误或矩阵运算阶数不符等情况。l执行错误 发生在程序运行过程中,出现溢出或死循环等引起,错误与程序有关,较难发现。程序调试l直接调试法直接调试法 l利用调试工具利用调试工具l采用命令行调试程序 l采用调试界面调试程序 直接调试法(1)通过分析后,将可能出错的语句后面的分号(;)删除,将结果显示在命令窗口中,与预期值进行比较;(2)利用函数 disp 显示中间变量的值;(3)在程序中的适当位置添加 keyboard 指令。当 MATLAB 执行至此处时将暂停,等待用户反应。(4)在调试一个单独的函数时,可以将函数改写为脚本文件,此时可以直接对输入参数赋值,然后以脚本方式运行该 M 文件,这样可以保存中间变量,在运行完成后,可以查看中间变量

温馨提示

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

最新文档

评论

0/150

提交评论