第5讲Matlab程序设计.ppt
《第5讲Matlab程序设计.ppt》由会员分享,可在线阅读,更多相关《第5讲Matlab程序设计.ppt(81页珍藏版)》请在课桌文档上搜索。
1、第五讲 Matlab程序设计,课程提纲,引子 M文件介绍 控制语句 函数变量及变量作用域 程序设计的辅助函数 程序设计的优化 程序调试 信息接口 小结,page2,引子华氏温度和摄氏温度的转换,Problem:设计一个MATLAB 程序,读取一个华氏温度的输入,输出摄氏温度。,Solution:,Step 1:清晰地陈述出你要解决的问题;“将华氏温度转换为摄氏温度并输出”,Step 2:确定程序的输入变量和输出变量;“输入变量:华氏温度;输出变量:摄氏温度”,Step 3:设计程序伪代码;%读取华氏温度:input T(F)%温度转换:%输出摄氏温度:print T(C),page3,Step
2、 4:将伪代码转换为Matlab程序语句,%Script file:temp_conversion.m%Purpose:%To convert an input temperature from degrees Fahrenheit to%an output temperature in Celsius.%Record of revisions:%Date Programmer Description of change%=%21/10/13 Y.Y.Guo Original code%Define variables:%temp_f-Temperature in degrees Fahren
3、heit%temp_k-Temperature in Celsius%Prompt the user for the input temperature.temp_f=input(Enter the temperature in degrees Fahrenheit:);%Convert to Celsius.temp_k=(5/9)*(temp_f-32);%Write out the result.fprintf(%6.2f degrees Fahrenheit=%6.2f Celsius.n,temp_f,temp_k);,“程序信息”,“名字”,“用途”,“修改记录”,“变量定义”,“
4、读取华氏温度”,“温度转换”,“输出摄氏温度”,page4,Step 5:调试程序,run(C:Program FilesMATLABR2010abintemp_conversion.m)Enter the temperature in degrees Fahrenheit:120120.00 degrees Fahrenheit=48.89 Celsius.Enter the temperature in degrees Fahrenheit:100100.00 degrees Fahrenheit=37.78 Celsius.,Matlab初学者总是期望,拿到问题就能写出漂亮的代码与完美无
5、误的程序,而实际上这是不可能的!,Matlab程序设计中,写代码只是简单的一半,另一半则是问题的分析与伪代码的设计!,Matlab的变量、语句与语法只是血肉般的简单存在,在任何一种语言中都能找到,而一个良好的编程习惯则是灵魂般的永恒存在!,page5,M文件介绍,Matlab是一种高级计算机语言,因而也能够编制一种以.m为扩展名的文本文件,简称M文件。,Matlab是一种解释性语言,命令在运行时被翻译为机器语言被执行,M文件就是命令的集合。,M文件是纯文本(ASCII码)文件,因而便于进行编写和修改。扩展名必须为.m。,M文件分类:,命令式(Script):命令行的简单叠加 函数式(Funct
6、ion):参数传递和函数调用,page6,M文件建立与编辑,M文件建立:,Matlab窗口中菜单项File-Open 单击图标,打开一个M文件 找到M文件,直接双击打开,M文件编辑:,Matlab窗口中菜单项File-New-Script/Function 单击图标,新建一个M文件,page7,命令式文件(Script),命令式文件的运行相当于在命令窗口(Command Window)中逐行输入并运行命令。需注意一下几点:标点符号的运用要恰当好处,每行命令结束时用分号隔开,以免程序运行时数据输出造成不便;建立良好的书写风格,保持程序的可读性,比如程序的层次感,注释行的书写;注释行以符号%开头,
7、在程序运行中不被执行,只起解释说明作用;不需要用end语句作为命令式文件的结束标志;运行此文件时,将其目录设置为当前目录。,page8,实例1:建立一命令式M文件绘制Matlab的LOGO图,%Script file:logotu.m%Purpose:%This file is to create the Logo of%Matlab softwareload logosurf(L,R),colormap(M)n=size(L,1)axis offaxis(1 n 1 n-.2.8)view(-37.5,30)title(Life is too short to spend writing D
8、O loops.),page9,函数式文件(Function),函数式文件可以实现计算中的参数传递。函数式的标志是第1行为function语句。,函数式可以有返回值,也可有无返回值;函数式文件名与函数名应一一对应;函数式中的变量仅在函数内部起作用,为局部变量;养成良好的注释习惯,方便自己,方便他人。,function outarg1,outarg2,.=fname(inarg1,inarg2,.)%H1 comment line%Other comment lines.(Executable code).(return),help命令运行后将显示M文件注释语句中的第一个连续块,被空行隔离的其它
9、注释语句,将被忽略;lookfor显示第一个注释行内容,为了便于被搜索,第一行注释尽可能包含特征信息。,page10,实例2:建立求一个向量元素平均值的函数,function y=average(x)%AVERAGE 求向量元素的平均值%语法%y=average(x)%其中,x是向量,y为计算得到向量元素的均值%若输入参数为非向量时则出错%代码行m,n=size(x);%判断输入参数是否为向量if(m=1)|(n=1)|(m=1,x=1:10;y=average(x)y=5.5000 x=2 4 6 8 10;y=average(x)y=6,page11,控制语句,顺序语句 选择语句 分支语句
10、 循环语句 人机交互语句,page12,顺序语句,Matlab程序的命令语句按固定的顺序一个接一个的执行,这样的程序称为顺序语句。,%Script file:logotu.m%Purpose:%This file is to create the Logo of%Matlab softwareload logosurf(L,R),colormap(M)n=size(L,1)axis offaxis(1 n 1 n-.2.8)view(-37.5,30)title(Life is too short to spend writing DO loops.),顺序语句只能实现简单的功能,而在解决实际
11、问题时往往会面临选择执行特定命令及重复性执行特定命令的情形,因而需要学习选择语句及循环语句。,page13,选择语句,选择语句可以使MATLAB 选择性执行指定区域内的代码(称之为语句块blocks),而跳过其他区域的代码。,if control_expr_1Statements(block 1)elseif control_expr_2Statements(block 2)elseif control_expr_3Statements(block 3)elseStatements(block 4)end,判断表达式control_expr紧跟在if或elseif后面;若判断表达式的结果为1,
12、则执行其后的命令语句块(block),若结果为0,则跳过其后的命令语句块;某一命令语句块被执行后,程序跳至end语句后一可执行语句;elseif语句可有任意个,else语句最多只有一个。,page14,实例3:输入三角形三边长,求面积,%Script file:triarea.m%This program is to calculate the area of a triangularA=input(请输入三角形的三条边(数组形式):);if A(1)+A(2)A(3)else disp(不能构成一个三角形。)end,run(C:Program FilesMATLABR2010abintria
13、rea.m)请输入三角形的三条边(数组形式):3 4 5 6 run(C:Program FilesMATLABR2010abintriarea.m)请输入三角形的三条边(数组形式):1 2 3不能构成一个三角形。,三角形面积海伦公式:,其中:,page15,实例4:求一元二次方程的根,Step 1:清晰地陈述出你要解决的问题;“求一个一元二次方程的根”,Step 2:确定程序的输入变量和输出变量;“输入变量:方程系数a,b,c;输出变量:两根x1,x2”,Step 3:设计程序伪代码;,%输入方程系数 input a,b,c%求根过程:%求根公式,伪代码整体框架:输入方程系数;求根过程;输出
14、求根结果。,page16,Step 3:设计程序伪代码-续,%if%else if%else(对应)%end%输出结果 print x1,x2,Tips:伪代码的设计由上而下,先分析总体框架,再局部细化;伪代码不是真实的Matlab代码,其书写类似于数学表达式;伪代码只需在草稿纸上书写,力求简洁、整齐、清晰。,page17,Step 4:将伪代码转换为Matlab程序语句,%Script file:calc_roots.m%Purpose:%This program solves for the roots of a quadratic equation%of the form a*x2+b*
15、x+c=0.It calculates the answers%regardless of the type of roots that the equation possesses.%Record of revisions:%Date Programmer Description of change%=%21/10/13 Y.Y.Guo Original code%Define variables:%a-Coefficient of x2 term of equation%b-Coefficient of x term of equation%c-Constant term of equat
16、ion%discriminant-Discriminant of the equation%imag_part-Imag part of equation(for complex roots)%real_part-Real part of equation(for complex roots)%x1-First solution of equation(for real roots)%x2-Second solution of equation(for real roots),“名字”,“用途”,“修改记录”,“变量定义”,“程序信息”,Tips:一般而言,变量的定义可以在后续程序编写过程中进
17、行,每出现一个新的变量时,则在程序段前面进行定义;若为物理变量,则最好将其单位列出。,page18,Step 4:将伪代码转换为Matlab程序语句-续,%Prompt the user for the coefficients of the equationdisp(This program solves for the roots of a quadratic);disp(equation of the form A*X2+B*X+C=0.);a=input(Enter the coefficient A:);b=input(Enter the coefficient B:);c=inpu
18、t(Enter the coefficient C:);%Calculate discriminantdiscriminant=b2-4*a*c;%Solve for the roots,depending on the value of the discriminant.if discriminant 0%there are two real roots,so.x1=(-b+sqrt(discriminant)/(2*a);x2=(-b-sqrt(discriminant)/(2*a);disp(This equation has two real roots:);fprintf(x1=%f
19、n,x1);fprintf(x2=%fn,x2);elseif discriminant=0%there is one repeated root,so.x1=(-b)/(2*a);disp(This equation has two identical real roots:);fprintf(x1=x2=%fn,x1);,“输入方程系数”,“计算方程判别式”,“方程有两不等 实根的情况”,“方程有两相等 实根的情况”,page19,Step 4:将伪代码转换为Matlab程序语句-续,else%there are complex roots,so.real_part=(-b)/(2*a);
20、imag_part=sqrt(abs(discriminant)/(2*a);disp(This equation has complex roots:);fprintf(x1=%f+i%f n,real_part,imag_part);fprintf(x1+%f-i%f n,real_part,imag_part);end,“方程有两共轭复根的情况”,Step 5:调试程序,run(C:Program FilesMATLABR2010abincalc_roots.m)This program solves for the roots of a quadratic equation of th
21、e form A*X2+B*X+C=0.Enter the coefficient A:1Enter the coefficient B:4Enter the coefficient C:3This equation has two real roots:x1=-1.000000 x2=-3.000000,page20,Step 5:调试程序-续,run(C:Program FilesMATLABR2010abincalc_roots.m)This program solves for the roots of a quadratic equation of the form A*X2+B*X
22、+C=0.Enter the coefficient A:1Enter the coefficient B:2Enter the coefficient C:1This equation has two identical real roots:x1=x2=-1.000000,run(C:Program FilesMATLABR2010abincalc_roots.m)This program solves for the roots of a quadratic equation of the form A*X2+B*X+C=0.Enter the coefficient A:1Enter
23、the coefficient B:1Enter the coefficient C:1This equation has complex roots:x1=-0.500000+i 0.866025 x1=-0.500000-i 0.866025,page21,分支语句,switch(switch_expr)case case_expr_1,Statements(block 1)case case_expr_2,Statements(block 2)otherwise,Statements(block 3)end,分支语句是一种特殊的选择语句,可以实现多种情况下的开关控制。,switch_ex
24、pr 可以是数字、字符串或者逻辑变量;当case_expr表达式与switch_expr相符时,其后的命令语句块(block)将被执行,不符时,其后的命令语句块将被跳过;当某一命令语句块被执行后,程序跳至end语句后一可执行语句。,page22,实例5:分支语句的简单应用,num=input(请输入一个数:);switch numcase-1disp(I am a teacher.);case 0disp(I am a student.);case 1disp(You are a teacher.);otherwisedisp(You are a student.);end,page23,循环
25、语句,实际问题中,需要反复执行某些语句,这时就需要用到循环语句。,在循环语句中,一组被重复执行的语句称为循环体,每循环一次,都必须做出判断,是继续循环执行还是终止执行跳出循环,这个判断的依据称为循环的终止条件。,循环语句分类:,for循环:循环前循环次数已知;while循环:循环前循环次数未知。,page24,循环语句之“for循环”,for循环以指定的数目重复地执行特定的语句块。,for index=expr1:expr2:expr3 statement 1 statement nend,expr1为循环变量index的初始值,expr2为index的步长,expr3为index的终值;当步
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 程序设计

链接地址:https://www.desk33.com/p-259591.html