版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章MATLAB程序设计M文献概念与基本操作
MATLAB程序控制构造
MATLAB函数文献
MATLAB程序调试第1页8.1M文献8.1.1M文献分类用MATLAB语言编写程序,称为M文献。M文献能够根据调用方式不一样分为两类:命令文献(ScriptFile)和函数文献(FunctionFile)。将MATLAB命令窗口中一行一行输入命令聚集在一种文献中,这样一来要输入这一组命令时,只需输入这一文献名。这种文献称为MATLAB脚本文献,其文献扩展名为.m。第2页例8-1分别建立命令文献和函数文献,将华氏温度f转换为摄氏温度c。程序1:首先建立命令文献并以文献名f2c.m存盘。clear;%清除工作空间中变量f=input('InputFahrenheittemperature:');c=5*(f-32)/9然后在MATLAB命令窗口中输入f2c,将会执行该命令文献,执行情况为:InputFahrenheittemperature:73c=22.7778第3页程序2:首先建立函数文献f2c.m。functionc=f2c(f)c=5*(f-32)/9然后在MATLAB命令窗口调用该函数文献。clear;y=input('InputFahrenheittemperature:');x=f2c(y)输出情况为:InputFahrenheittemperature:70c=21.1111x=21.1111第4页8.1.2M文献建立与打开1.建立新M文献建立新M文献,启动MATLAB文本编辑器办法:
(1)菜单操作。从MATLAB主窗口File菜单中选择New菜单项,再选择M-file命令,屏幕上将出现MATLAB文本编辑器窗口。
(2)命令操作。在MATLAB命令窗口输入命令edit,启动MATLAB文本编辑器后,输入M文献内容并存盘。
(3)命令按钮操作。单击MATLAB主窗口工具栏上NewM-File命令按钮,启动MATLAB文本编辑器后,输入M文献内容并存盘。第5页2.打开已有M文献
(1)菜单操作。从MATLAB主窗口File菜单中选择Open命令,则屏幕出现Open对话框,在Open对话框中选中所需打开M文献。在文档窗口能够对打开M文献进行编辑修改,编辑完成后,将M文献存盘。(2)命令操作。在MATLAB命令窗口输入命令:edit文献名,则打开指定M文献。(3)命令按钮操作。单击MATLAB主窗口工具栏上OpenFile命令按钮,再从弹出对话框中选择所需打开M文献。第6页8.2程序控制构造8.2.1次序构造1.数据输入从键盘输入数据,使用input函数来进行,该函数调用格式:
A=input(提醒信息,选项);其中提醒信息为一种字符串,提醒顾客输入什么样数据。假如在input函数调用时采取's'选项,则允许顾客输入一种字符串。例如,想输入一种人姓名,可采取命令:xm=input('What''syourname?','s');第7页2.数据输出MATLAB提供命令窗口输出函数主要有disp函数,其调用格式为disp(输出项)其中输出项既能够为字符串,也能够为矩阵。A=‘hello’;disp(A)输出:hello第8页例8-2输入x,y值,并将它们值交换后输出。程序如下:
x=input('Inputxplease.');y=input('Inputyplease.');z=x;x=y;y=z;disp(x);disp(y);第9页例8-3求一元二次方程ax2+bx+c=0根。程序如下:a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);第10页3.程序暂停暂停程序执行能够使用pause函数,其调用格式为:
pause(延迟秒数)
假如省略延迟时间,直接使用pause,则将暂停程序,直到顾客按任一键后程序继续执行。若要强行中断程序运行可使用Ctrl+C命令。第11页8.2.2选择构造1.if语句在MATLAB中,if语句有3种格式。
(1)单分支if语句:
if条件语句组
end
当条件成立时,则执行语句组,执行完之后继续执行if语句后继语句,若条件不成立,则直接执行if语句后继语句。第12页(2)双分支if语句:
if条件语句组1else
语句组2end
当条件成立时,执行语句组1,不然执行语句组2,语句组1或语句组2执行后,再执行if语句后继语句。第13页例8-4计算分段函数值。程序如下:x=input('请输入x值:');ifx<=0y=(x+sqrt(pi))/exp(2);elsey=log(x+sqrt(1+x*x))/2;endY第14页
(3)多分支if语句:
if条件1
语句组1elseif条件2
语句组2……elseif条件m
语句组melse
语句组nend语句用于实现多分支选择构造。第15页例8-5输入一种字符,若为大写字母,则输出其对应小写字母;若为小写字母,则输出其对应大写字母;若为数字字符则输出其对应数值,若为其他字符则原样输出。c=input('请输入一种字符','s');ifc>='A'&c<='Z'disp(setstr(abs(c)+abs('a')-abs('A')));elseifc>='a'&c<='z'disp(setstr(abs(c)-abs('a')+abs('A')));elseifc>='0'&c<='9'disp(abs(c)-abs('0'));elsedisp(c);end第16页2.switch语句
switch语句根据体现式取值不一样分别执行不一样语句:
switch体现式
case体现式1
语句组1case体现式2
语句组2……case体现式m
语句组motherwise
语句组nend第17页当体现式值等于体现式1值时,执行语句组1,当体现式值等于体现式2值时,执行语句组2,…,当体现式值等于体现式m值时,执行语句组m,当体现式值不等于case所列体现式值时,执行语句组n。当任意一种分支语句执行完后,直接执行switch语句下一句。第18页例3-6某商场对顾客所购买商品实行打折销售,标准如下(商品价格用price来表达):
price<200没有折扣
200≤price<5003%折扣
500≤price<10005%折扣
1000≤price<25008%折扣
2500≤price<500010%折扣
5000≤price14%折扣输入所售商品价格,求其实际销售价格。第19页程序如下:price=input('请输入商品价格');switchfix(price/100)case{0,1}%价格不大于200rate=0;case{2,3,4}%价格大于等于200但不大于500rate=3/100;casenum2cell(5:9)%价格大于等于500但不大于1000rate=5/100;casenum2cell(10:24)%价格大于等于1000但不大于2500rate=8/100;casenum2cell(25:49)%价格大于等于2500但不大于5000rate=10/100;otherwise%价格大于等于5000rate=14/100;endprice=price*(1-rate)%输出商品实际销售价格第20页3.try语句语句格式为:try
语句组1catch
语句组2endtry语句先试探性执行语句组1,假如语句组1在执行过程中出现错误,则将错误信息赋给保存lasterr变量,并转去执行语句组2。第21页例8-7矩阵乘法运算要求两矩阵维数相容,不然会犯错。先求两矩阵乘积,若犯错,则自动转去求两矩阵点乘。程序如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%显示犯错原因第22页8.2.3循环构造1.for语句for语句格式为:for循环变量=体现式1:体现式2:体现式3
循环体语句
end其中体现式1值为循环变量初值,体现式2值为步长,体现式3值为循环变量终值。步长为1时,体现式2能够省略。第23页例8-8一种三位整数各位数字立方和等于该数本身则称该数为水仙花数。输出所有水仙花数。程序如下:form=100:999m1=fix(m/100);%求m百位数字m2=rem(fix(m/10),10);%求m十位数字m3=rem(m,10);%求m个位数字ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3disp(m)endend第24页例8-9已知,当n=100时,求y值。程序如下:y=0;n=100;fori=1:ny=y+1/(2*i-1);endy第25页在实际MATLAB编程中,采用循环语句会降低其执行速度,因此前面程序通常由下面程序来代替:n=100;i=1:2:2*n-1;y=sum(1./i);y第26页for语句更一般格式为:
for循环变量=矩阵体现式循环体语句
end
执行过程是依次将矩阵各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完成。第27页例8-10写出下列程序执行成果。
s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];fork=as=s+k;enddisp(s');第28页2.while语句
while语句一般格式为:
while(条件)
循环体语句
end
其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,假如不成立则跳出循环。第29页例8-11从键盘输入若干个数,当输入0时结束输入,求这些数平均值和它们之和。程序如下:sum=0;cnt=0;val=input('Enteranumber(endin0):');while(val~=0)sum=sum+val;cnt=cnt+1;val=input('Enteranumber(endin0):');endif(cnt>0)summean=sum/cntend第30页3.break语句和continue语句与循环构造有关语句尚有break语句和continue语句。它们一般与if语句配合使用。break语句用于终止循环执行。当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句下一语句。continue语句控制跳过循环体中某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下语句,继续下一次循环。第31页例8-12求[100,200]之间第一种能被21整除整数。程序如下:forn=100:200ifrem(n,21)~=0continueendbreakendn第32页4.循环嵌套假如一种循环构造循环体又包括一种循环构造,就称为循环嵌套,或称为多重循环构造。例3-13求[1,500]之间所有完数。form=1:500s=0;fork=1:m/2ifrem(m,k)==0s=s+k;endendifm==sdisp(m);endend第33页8.3函数文献8.3.1函数文献基本构造函数文献由function语句引导,其基本构造为:
function输出形参表=函数名(输入形参表)
注释说明部分函数体语句其中以function开头一行为引导行,表达该M文献是一种函数文献。函数名命名规则与变量名相同。输入形参为函数输入参数,输出形参为函数输出参数。当输出形参多于一种时,则应当用方括号括起来。第34页例8-14编写函数文献求半径为r圆面积和周长。函数文献如下:function[s,p]=fcircle(r)%CIRCLEcalculatetheareaandperimeterofacircleofradiir%r圆半径%s圆面积%p圆周长%2023年10月15日编s=pi*r*r;p=2*pi*r;第35页8.3.2函数调用函数调用一般格式是:
[输出实参表]=函数名(输入实参表)
要注意是,函数调用时各实参出现次序、个数,应与函数定义时形参次序、个数一致,不然会犯错。函数调用时,先将实参传递给对应形参,从而实现参数传递,然后再执行函数功能。第36页例8-15利用函数文献,实现直角坐标(x,y)与极坐标(ρ,θ)之间转换。函数文献tran.m:function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);
调用tran.m命令文献main1.m:x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y);rhothe第37页MATLAB中,函数能够嵌套调用,即一种函数能够调用别函数,甚至调用它本身。一种函数调用它本身称为函数递归调用。例3-16利用函数递归调用,求n!。递归调用函数文献factor.m如下:functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*n;%递归调用求(n-1)!end第38页8.3.3函数参数可调性在调用函数时,MATLAB用两个永久变量nargin和nargout分别统计调用该函数时输入实参和输出实参个数。只要在函数文献中包括这两个变量,就能够精确地懂得该函数文献被调用时输入输出参数个数,从而决定函数如何进行处理。第39页例8-17nargin使用方法示例。函数文献examp.m:functionfout=charray(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end
命令文献mydemo.m:x=[1:3];y=[1;2;3];examp(x)examp(x,y')examp(x,y,3)第40页8.3.4全局变量与局部变量全局变量:假如若干个函数(一般还包括基本工作空间)都将某个特定变量名称定义为全局变量,那么这些函数都能够使用该变量。在Matlab中,定义全局变量语句为“global”。假如这些函数中任意一种对该变量进行了赋值运算,那么在别函数中,这个赋值运算成果同样会起作用。第41页例3-18全局变量应用示例。先建立函数文献wadd.m,该函数将输入参数加权相加。functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;
在命令窗口中输入:globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)第42页3.4程序举例例8-19猜数游戏。首先由计算机产生[1,100]之间随机整数,然后由顾客猜想所产生随机数。根据顾客猜想情况给出不一样提醒,如猜想数大于产生数,则显示“High”,不大于则显示“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国塑料冷饮杯数据监测研究报告
- 2024至2030年中国可转位刀具行业投资前景及策略咨询研究报告
- 2024年中国铜材料市场调查研究报告
- 2024年中国测量管路球阀市场调查研究报告
- 2024年中国木制水瓢市场调查研究报告
- 产品研发流程的年度优化计划
- 如何进行有效的生产监控计划
- 污水处理工程建设合同三篇
- 年度工作计划与企业文化的融合
- 社区参与与学校合作措施计划
- 防雷资格证考试试题
- 劳动创造美好生活教案完整版精
- 六年级上册美术课件-8.画人物 |苏少版 (共22张PPT)
- 期中考试考前Units1-4单元复习-鲁教版(五四学制)七年级英语上册
- 最新变压器运行规程
- 元宝枫籽油加工可行性研究报告
- 大学新进人员岗位聘用申请表(管理岗位)
- 质量管理体系成熟度评价指南
- 脑肠轴与情绪行为课件
- 人教版数学三年级上册 6.3 笔算乘法(不进位)课件(9张PPT)
- 埋地管道施工方案(标准版)
评论
0/150
提交评论