版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章Matlab语言基础——matlab语言程序简洁、可读性很强而且调试十分容易。是matlab重要组成部分。1.第四章Matlab语言基础§4.1MATLAB数据结构§4.2M文件简介4.2.1脚本文件4.2.2函数文件§4.3MATLAB的输入与输出语句§4.4程序结构§4.5程序的流程控制辅助语句§4.6程序文件的格式特征§4.7MATLAB搜索路径(文件管理)§4.8MATLAB程序调试技巧2.§4.2M文件简介
M文件是由MATLAB语句构成的ASCII码文件,用户可以用普通的文本编辑把一系列MATLAB语句写进一个文件里,给定文件名,确定文件的扩展名为.m,并存储3.1.用MATLAB自带的编辑器-edit2.用文本文档编辑文件M文件的编辑方法4.1.脚本文件(Scripts):也称命令文件,是由用户为解决特定的问题而编制的.m文件;2.函数文件(Function):子程序,可由用户编写,但它必须由其它m文件来调用M文件分为两种:5.脚本文件是最简单的m-文件,它没有入口和出口参数变量。可以自动执行一系列MATLAB命令等。脚本是对工作空间中的现有数据进行操作,或创建一个新数据,而且脚本所创建的任一变量在脚本运行完都保留在工作空间中以便进一步使用。4.2.1脚本文件
6.脚本文件举例%例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文件7.4.2.2函数文件函数文件的第一行包含function功能:建立一个函数,可以同MATLAB的库函数一样使用。8.1.函数M-文件的组成格式:function[输出参数列表]=函数名(形式参数列表)
函数体语句;注:函数m文件的文件名必须与其函数名相同
输出变量如果多于1个,则用方括号括起来;且用逗号隔开;当函数无输出参数时,输出参数项空缺或者用空的中括号表示function[V,D]=eig(A)语句体;9.例1:建立函数文件求圆面积function[area,volume]=circle_fun(r)%r为圆半径%area返回面积值%volume返回体积值area=pi*r^2;volume=(4/3)*pi*r^3;
2.函数文件举例10.保存为circle_fun.m函数M文件>>r=5;%输入r值>>[area,volume]=circle_fun(r)
%调用函数circle_fun11.例2:编一个绘制图示波形的函数%在文本编辑窗口输入functiony=tri(t)
%函数名tri%t为横坐标%y为纵坐标y=[abs(t)<=1].*(1-abs(t));%y=(t>=-1&t<=1).*(1-abs(t);12.调用函数tri,并画出它的波形t=-2:0.05:2;%定义自变量plot(t,tri(t));axis([-1.5,1.5,-0.5,1.5])13.(1)函数定义行(关键字function)
function[out1,out2,..]=filename(in1,in2,..)输入和输出(返回)的参数个数分别赋值给nargin和nargout两个MATLAB保留的变量(2)第一行帮助行以(%)开头,作为help指令显示的行(3)函数体说明及有关注解以(%)开头,用以说明函数的作用及有关内容如果不希望显示某段信息,可在它的前面加空行3.函数M-文件的格式:包括4部分14.(4)函数体语句函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量(global)。15.4.函数文件与脚本文件的主要区别:(3点)由定义行function起头,后跟的函数名必须与文件名相同。函数具有输入输出变量,可进行变量传递。除非用global声明,函数文件中的变量均为局部变量,不保存在工作空间中(即:程序在自己的工作空间中操作变量,与工作空间分开,无法访问)16.§4.3MATLAB的输入与输出语句x=input('请输入参数x=');2a=input('请输入矩阵a=');[1,2;3,4];s=input('Pleaseinputstrings=');‘通信051-3‘%输入字符串时注意加单引号1.提示对话输入命令(input)17.name=input('Inputyourclassnameplease:','s')%s代表字符串(string),Inputyourclassnameplease:通信06-1%此种情况,键入名字:通信06-1,不用加‘’
name=
通信18.自由格式(disp)和格式化输出(fprintf)。2.输出格式>>x=2;直接查看:>>x>>disp(x)>>‘ab’%字符向量ab>>disp(‘ab’)ab格式控制输出(fprintf命令)fprintf('x=%.0f,y=%.5f\n',pi,pi);x=3,y=3.1415919.>>temp=20;>>disp(temp),disp(‘temp表示温度')>>disp([num2str(temp)'度C'])20temp表示温度20度C1)disp直接输出文字或是一数值举例:disp显示指定变量的结果,而不显示变量名称20.指令fprintf用来控制输出数据及文字的格式,其基本格式如2)fprintf格式输出由%引导:f:小数形式输出e:指数形式输出d:1位整数位形式输出:1.234500e+00121.fprintf('Theareais%8.5f\n',area)在二个单引号间包括输出的字串Theareais,接着是输出数据的格式%8.5f,再后来是换行符号以避免下一个输出数据或是提示符号也挤在同一行,最后键入要输出的数据名area。例如
Theareais12.56637%输出值为8位数含5位小数22.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位数以下的例子各说明了不同形态的输出格式23.
§4.4程序结构与C语言类似,MATLAB程序的控制结构也有顺序结构、选择结构和循环结构三种,另外有一种试探结构其控制语句主要有if,while,for,switch四个,下面分别进行介绍。24.if-else语句switch-case语句一、条件语句(选择结构语句)25.1.if条件语句if条件式
语句组;endif条件式1
语句组1;
elseif条件式2
语句组2;
else
语句组3;end%注意elseif中间无空格26.例1:建立符号函数sign(x)x=input('x=');ifx>0sn=1;elseifx==0sn=0;elsesn=-1;endfprintf('x=%.5f,sn=%.0f\n',x,sn);27.高频
低频1209133614471663697123A770456B852789C941*0#DDTMF拨号音编解码的实现28.29.switchswith_expr分支条件(结果为数值或字符串)casecase_expr1数值(或字符串)常量表达式1<语句组1>case{数值(或字与符串)常量表达式case_expr2,数值(或字符串)常量表达式case_expr3…}<语句组2>……case数值(或字符串)常量表达式N<语句组n>otherwise<语句组n+1>End格式2.switch分支结构30.No=input('Pleaseinputyourchoice:0,1,2,3:');switchNocase0disp('returntomainmenu');case1disp('Sheisagirl');case2disp('Heisaboy');otherwisedisp('Ican''tdetermine')end例1.变量做分支条件31.例2:输入一个数,判断它是否能被5整除。n=input('输入n=');switchmod(n,5)case0fprintf('%d可被5整除',n)
otherwisefprintf('%d不能被5整除',n)end函数做分支条件32.例3:编写一个函数,将百分制的学生成绩转换为五级制的成绩(使用结构)Functionf=TranGrade(x)switchfix(x/10)
case{10,9}f=‘A’case8f=‘B’case7f=‘C’case6f=‘D’otherwisef=‘E’end函数做分支条件33.在switch语句中,switch是语句的开始,紧接着的是分支条件,分支条件可以是一个变量、函数、或者表达式。不同的case可以定义不同的运算指令,而紧接在case后面的就是此case的分支条件,之后接着一个或一串运算指令。若不符合所有的case条件,则程序就会执行otherwise下面的表达式。语句以end作为结束。
34.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结构必须注意三点:35.key=input('pleaseinputkeyvaluve,0~9or#or*:','s');fl=0;switchkeycase{'1','2','3'}fl=697;36.当开关表达式的值等于表达式1时,将执行语句段1,执行完语句段1后将转出开关体,无需像c语言那样在下一个case语句前加break语句,当需要在开关表达式满足若干个可以枚举的表达式之一时执行某一程序段,则应该把这些表达式用{}起来,中间用逗号分隔。3)MATLAB开关switch语句与c的区别:37.当前面枚举的各个表达式均不满足时,则将执行otherwise语句后面的语句段,此语句等价于c语言中的default语句。在case语句引导的各个表达式中,不要用重复的表达式,否则列在后面的开关通路将永远也不能执行程序的执行结果和各个case语句的次序无关38.for变量=表达式
……;
endwhile条件式
……;
end
for语句多用在已知循环次数的情况,而while语句则多用在不能判定循环次数的情况下只要条件式的值为1(真),就执行while与end之间的语句体,直到表达式的值为0(假)时终止该循环。二、循环语句(for语句和while语句)39.例1:编写计算s=1+2+3+…+100的MATLAB程序s=0;forn=1:100%默认步长为1s=s+n;end1.for循环语句举例40.clc,clearjiujiu=zeros(9,9);%预分配数组空间fori=1:9;forj=1:i;jiujiu(i,j)=i*j;endendjiujiu例2:设计九九乘法表41.上机作业:用两矩阵点乘,如何实现九九表42.上机作业:用两矩阵点乘,如何实现九九表clc,cleara=[1:9]';A=repmat(a,1,9);b=1:9;B=repmat(b,9,1);Jiujiu=tril(A.*B)repmat(a,m,n)提示:43.例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)注意使用提示输入与输出语句44.For循环语句的执行过程:从矩阵的第一列开始,依次将矩阵的各列之值赋值给变量,然后执行语句组中的语句,直到最后一列forx=arraycommands;
end注意:当循环变量为矩阵时45.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-746146.2.while循环结构举例例1:求1~100的偶数和x=0;sum=0;whilex<101sum=sum+x;x=x+2;endsum47.for变量=表达式
……;
endwhile条件式
……;
endclearx=
zeros(1,6);forI=1:6;
x(I)=1/I;endformatrat;I,xx=zeros(1,6);I=1;whileI<7
x(I)=1/I;I=I+1;endformatrat;I,x两循环比较结果:x=11/21/31/41/51/6I=6I=748.x=zeros(1,6);forI=1:6;x(I)=1/I;
I=100;endformatrat;I,x在循环体内重新赋值I,能否结束循环?思考49.n=1:10;x=sin(n*pi/10)forn=1:10x=sin(n*pi/10)end两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。若能用一个等效的数组方法来解给定的问题时,应避免用for循环50.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;endydata=39456716-15y=-4-7461for循环(While循环)被执行之前,应预置空间51.for循环的其它方面重要提示不能用for循环内重新赋值循环变量的方法来终止循环。若能用一个等效的矩阵来解给定的问题时,应避免用for循环。为了得到最大的速度,在for循环(While循环)被执行之前,应预先使用zeros预置空间52.continue命令中断语句:break;暂停语句:pause键盘控制语句:keyboard,常用于函数文件的调试(可随时查看变量)
§4.5程序的流程控制辅助语句53.例1:a=3;b=6;fori=1:3b=b+1ifi<2
continueenda=a+2end输出:b=7b=8a=5b=9a=7例2:a=3;b=6;fori=1:3b=b+1ifi<2
breakenda=a+2end输出:b=754.1.continue命令continue语句通常用于for或while循环体中,作用是终止一次循环的执行,与if一同使用,当if条件满足时,跳过本次循环未执行的语句,直接去执行下一次循环。2.break命令break语句也常用于for或while循环体中,与if一同使用,当if后的表达式为真时,就跳出当前的循环55.3.keyboard命令在M文件中选定的位置置入keyboard命令,以便将临时控制权交给键盘。这样做以后,函数工作区就可以进行查询,并且可以根据需要改变变量的值。
在键盘提示符下输入return命令就可以恢复函数执行,即在k>>下输入return就可以了56.%exp2_8.mclc,cleara=4;b=6;disp(‘暂停,请按任意键继续’)pause
%暂停,直到用户按任意键c=a^9+b^7;keyboard,%暂时把控制权交给键盘(在命令窗口中出现k提示符k>>),%输入return,回车后退出,继续执行下面的语句。
pause命令及keyboard举例57.pause命令举例58.§4.6程序文件的格式特征(1)用clc、clear、closeall等语句开始,清除掉工作空间中原有的变量和图形,以避免其他已执行的程序残留数据对本程序的影响。(2)前几行通常是对此程序用途的说明,特别是在运行时对用户输入数据的要求,更要叙述清楚。这些注释行必须以%号开始.(3)在自设变量名时要防止与MATLAB中的函数重名59.(4)程序中必须都用半角英文字母和符号(只有引号括住的和%号后的内容可用汉字)(5)文件名不允许用汉字,因为这个文件名,也就是MATLAB的调用命令,它不认汉字。(6)函数M文件必须以function开始(7)可运行的MATLAB程序中可调入但不能包含一个M函数文件(8)一个函数M文件被调用时,可直接调用函数名如y=myfun()而不传参数值60.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()本身不需传参数调用函数可不传参数情况一:61. 固有变量nargin、nargout的利用 调用函数可不传参数情况二:62.当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin包含输入参量个数;函数工作空间变量nargout包含输出参量个数。事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量函数输入输出参数
nargin、nargout63.例:编写一函数,要求完成两个功能,一是设置缺省输入变量值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()而不传参数值64.§4.7MATLAB搜索路径(文件管理)搜索路径:标识符(包括变量,内部函数,用户自定义函数等等)识别的顺序它按如下的顺序(优先级)与已有的记录相比较:工作空间的变量名内部固有变量名mex文件名M文件名65.例如:在MATLAB提示符下键入lust,则MATLAB按以下步骤处理.(1)首先检查lust是不是变量;(2)然后检查lust是不是内部函数;(3)检查当前目录中是否有lust.mex,lust.dll或lust.m文件(4)如果均不满足,则显示出错信息.66.如果两个名字相同,它只认优先级高的名字比如用户在工作空间中给i赋了值,那么系统就不会取内部固有变量中设定的虚数i;如果用户在程序中设立了一个与MATLAB中的函数同名的变量,则每次调用此名字时,出现的将是用户自定的变量,调不出MATLAB中的函数。所以在自设变量名时要防止与MATLAB中的函数重名67.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()时,将出现与我们所要的结果不一致的现象设有函数:68.把某些分号改为逗号,使中间结果能显示在屏幕上,作为查错的依据。在子程序中适当部位加keyboard命令。此时,系统会暂停而等待用户键入命令。这时子程序中的变量还存在于工作空间中,可以对它们进行检查。将函数文件的第一行前加%号,使它成为程序文件,进行初步调试。第一行中的输入变元,可改用input或赋值语句来输入,调好后再改回函数文件。§4.8MATLAB程序调试常用方法69.Debug程序调试-设断点
在运行含有断点的程序后,可将鼠标放在变量旁查看变量的信息在程序调试过程中很有用70.A([236541])=[987654]A=49856771.方法一:利用随机数产生函数alpha=randperm(data_length),实现交织。说明:data=[11101];data_length=5;alpha=randperm(data_length);%输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026定点帮扶工作面试题及答案
- 苏教版小学语文五年级下册课课练
- 茶叶贸易成本核算管控工作手册
- 遗产捐赠公证办理实操指南手册
- 牙科诊所卫生监督迎检手册
- Unit 2 Inspiring People(写作提升)(解析版)
- 公司年度财务报告编制工作总结工作手册
- 体检异常学生登记记录表
- 外联部部长申请书
- 解析卷-沪粤版八年级物理上册第二章声音与环境章节练习试卷(详解版)
- 中考开卷历史结业考试卷
- 《精湛技艺代代传》教学课件-2025-2026学年人美版(新教材)初中美术八年级下册
- 食材配送奖惩制度实施细则
- 2026年全国爱眼日:守护明眸 点亮未来眼健康知识进校园
- 2026广东茂名市化州市村(社区)后备干部选聘321人考试参考题库及答案解析
- 2026年台州市永宁产业投资集团有限公司公开招聘国企编制工作人员的备考题库及参考答案详解
- 铁路新职工岗前培训课件
- 舌侧矫治力学机制
- 重症急性胰腺炎超声引导下经皮置管引流专家共识(2024版)
- 某仪器仪表厂校准实验室管理制度
- 新疆中考物理5年(2021-2025)真题分类汇编:专题05 电学综合(原卷版)
评论
0/150
提交评论