第四章Matlab语言程序设计基础2.ppt

上传人:wj 文档编号:11670584 上传时间:2023-06-02 格式:PPT 页数:79 大小:261.50KB
下载 相关 举报
第四章Matlab语言程序设计基础2.ppt_第1页
第1页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第2页
第2页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第3页
第3页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第4页
第4页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第5页
第5页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第6页
第6页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第7页
第7页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第8页
第8页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第9页
第9页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第10页
第10页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第11页
第11页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第12页
第12页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第13页
第13页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第14页
第14页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第15页
第15页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第16页
第16页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第17页
第17页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第18页
第18页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第19页
第19页 / 共79页
第四章Matlab语言程序设计基础2.ppt_第20页
第20页 / 共79页
亲,该文档总共79页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第四章Matlab语言程序设计基础2.ppt

《第四章Matlab语言程序设计基础2.ppt》由会员分享,可在线阅读,更多相关《第四章Matlab语言程序设计基础2.ppt(79页珍藏版)》请在冰点文库上搜索。

第四章Matlab语言程序设计基础2.ppt

第四章Matlab语言基础,matlab语言程序简洁、可读性很强而且调试十分容易。

是matlab重要组成部分。

第四章Matlab语言基础,4.1MATLAB数据结构4.2M文件简介4.2.1脚本文件4.2.2函数文件4.3MATLAB的输入与输出语句4.4程序结构4.5程序的流程控制辅助语句4.6程序文件的格式特征4.7MATLAB搜索路径(文件管理)4.8MATLAB程序调试技巧,4.2M文件简介,M文件是由MATLAB语句构成的ASCII码文件,用户可以用普通的文本编辑把一系列MATLAB语句写进一个文件里,给定文件名,确定文件的扩展名为.m,并存储,1.用MATLAB自带的编辑器edit2.用文本文档编辑文件,M文件的编辑方法,1.脚本文件(Scripts):

也称命令文件,是由用户为解决特定的问题而编制的.m文件;2.函数文件(Function):

子程序,可由用户编写,但它必须由其它m文件来调用,M文件分为两种:

脚本文件是最简单的m-文件,它没有入口和出口参数变量。

可以自动执行一系列MATLAB命令等。

脚本是对工作空间中的现有数据进行操作,或创建一个新数据,而且脚本所创建的任一变量在脚本运行完都保留在工作空间中以便进一步使用。

4.2.1脚本文件,脚本文件举例,%例1:

tex1.m-计算一个球的体积r=input(radius:

);area=pi*r2;volume=(4/3)*pi*r3;fprintf(Thevolumeofasphereis%12.5fn,volume),写好上述程序后即可在指令视窗下键入tex1,即可执行已建立的tex1.m文件,4.2.2函数文件,函数文件的第一行包含function功能:

建立一个函数,可以同MATLAB的库函数一样使用。

1.函数M-文件的组成格式:

function输出参数列表=函数名(形式参数列表)函数体语句;,注:

函数m文件的文件名必须与其函数名相同,输出变量如果多于1个,则用方括号括起来;且用逗号隔开;当函数无输出参数时,输出参数项空缺或者用空的中括号表示,functionV,D=eig(A)语句体;,例1:

建立函数文件求圆面积,functionarea,volume=circle_fun(r)r为圆半径%area返回面积值volume返回体积值area=pi*r2;volume=(4/3)*pi*r3;,2.函数文件举例,保存为circle_fun.m函数M文件,r=5;%输入r值area,volume=circle_fun(r)调用函数circle_fun,例2:

编一个绘制图示波形的函数,在文本编辑窗口输入functiony=tri(t)%函数名tri%t为横坐标y为纵坐标y=abs(t)=-1,调用函数tri,并画出它的波形,t=-2:

0.05:

2;%定义自变量plot(t,tri(t);axis(-1.5,1.5,-0.5,1.5),

(1)函数定义行(关键字function)functionout1,out2,.=filename(in1,in2,.)输入和输出(返回)的参数个数分别赋值给nargin和nargout两个MATLAB保留的变量

(2)第一行帮助行以(%)开头,作为help指令显示的行(3)函数体说明及有关注解以(%)开头,用以说明函数的作用及有关内容如果不希望显示某段信息,可在它的前面加空行,3.函数M-文件的格式:

包括4部分,(4)函数体语句函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。

如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量(global)。

4.函数文件与脚本文件的主要区别:

(3点)由定义行function起头,后跟的函数名必须与文件名相同。

函数具有输入输出变量,可进行变量传递。

除非用global声明,函数文件中的变量均为局部变量,不保存在工作空间中(即:

程序在自己的工作空间中操作变量,与工作空间分开,无法访问),4.3MATLAB的输入与输出语句,x=input(请输入参数x=);2a=input(请输入矩阵a=);1,2;3,4;s=input(Pleaseinputstrings=);通信051-3%输入字符串时注意加单引号,1.提示对话输入命令(input),name=input(Inputyourclassnameplease:

s)%s代表字符串(string),Inputyourclassnameplease:

通信06-1%此种情况,键入名字:

通信06-1,不用加name=通信,自由格式(disp)和格式化输出(fprintf)。

2.输出格式,x=2;直接查看:

xdisp(x),ab%字符向量abdisp(ab)ab,temp=20;disp(temp),disp(temp表示温度)disp(num2str(temp)度C),20temp表示温度20度C,1)disp直接输出文字或是一数值,举例:

disp显示指定变量的结果,而不显示变量名称,指令fprintf用来控制输出数据及文字的格式,其基本格式如,2)fprintf格式输出,由%引导:

f:

小数形式输出e:

指数形式输出d:

1位整数位形式输出:

1.234500e+001,fprintf(Theareais%8.5fn,area)在二个单引号间包括输出的字串Theareais,接着是输出数据的格式%8.5f,再后来是换行符号以避免下一个输出数据或是提示符号也挤在同一行,最后键入要输出的数据名area。

例如Theareais12.56637%输出值为8位数含5位小数,f_form:

12345,fprintf(e_form:

%12.5en,12345.2)%输出值为指数格式的12位数,含5位小数,e_form:

1.23452e+004,fprintf(e_form:

%dn,12345.2),e_form:

1.234520e+004,fprintf(f_form:

%12.0fn,12345.2)%输出值为整数格式的12位数,以下的例子各说明了不同形态的输出格式,4.4程序结构,与C语言类似,MATLAB程序的控制结构也有顺序结构、选择结构和循环结构三种,另外有一种试探结构其控制语句主要有if,while,for,switch四个,下面分别进行介绍。

if-else语句switch-case语句,一、条件语句(选择结构语句),1.if条件语句,if条件式语句组;end,if条件式1语句组1;elseif条件式2语句组2;else语句组3;end,%注意elseif中间无空格,例1:

建立符号函数sign(x)x=input(x=);ifx0sn=1;elseifx=0sn=0;elsesn=-1;endfprintf(x=%.5f,sn=%.0fn,x,sn);,DTMF拨号音编解码的实现,switchswith_expr分支条件(结果为数值或字符串)casecase_expr1数值(或字符串)常量表达式1case数值(或字与符串)常量表达式case_expr2,数值(或字符串)常量表达式case_expr3case数值(或字符串)常量表达式NotherwiseEnd,格式,2.switch分支结构,No=input(Pleaseinputyourchoice:

0,1,2,3:

);switchNocase0disp(returntomainmenu);case1disp(Sheisagirl);case2disp(Heisaboy);otherwisedisp(Icantdetermine)end,例1.,变量做分支条件,例2:

输入一个数,判断它是否能被5整除。

n=input(输入n);switchmod(n,5)case0fprintf(%d可被5整除,n)otherwisefprintf(%d不能被5整除,n)end,函数做分支条件,例3:

编写一个函数,将百分制的学生成绩转换为五级制的成绩(使用结构),Functionf=TranGrade(x)switchfix(x/10)case10,9f=Acase8f=Bcase7f=C,case6f=Dotherwisef=Eend,函数做分支条件,在switch语句中,switch是语句的开始,紧接着的是分支条件,分支条件可以是一个变量、函数、或者表达式。

不同的case可以定义不同的运算指令,而紧接在case后面的就是此case的分支条件,之后接着一个或一串运算指令。

若不符合所有的case条件,则程序就会执行otherwise下面的表达式。

语句以end作为结束。

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结构必须注意三点:

key=input(pleaseinputkeyvaluve,09or#or*:

s);fl=0;switchkeycase1,2,3fl=697;,当开关表达式的值等于表达式1时,将执行语句段1,执行完语句段1后将转出开关体,无需像c语言那样在下一个case语句前加break语句,当需要在开关表达式满足若干个可以枚举的表达式之一时执行某一程序段,则应该把这些表达式用起来,中间用逗号分隔。

3)MATLAB开关switch语句与c的区别:

当前面枚举的各个表达式均不满足时,则将执行otherwise语句后面的语句段,此语句等价于c语言中的default语句。

在case语句引导的各个表达式中,不要用重复的表达式,否则列在后面的开关通路将永远也不能执行程序的执行结果和各个case语句的次序无关,for变量=表达式;end,while条件式;end,for语句多用在已知循环次数的情况,而while语句则多用在不能判定循环次数的情况下,只要条件式的值为1(真),就执行while与end之间的语句体,直到表达式的值为0(假)时终止该循环。

二、循环语句(for语句和while语句),例1:

编写计算s=1+2+3+100的MATLAB程序,s=0;forn=1:

100默认步长为1s=s+n;end,1.for循环语句举例,jiujiu=10000000024000000036900000048121600000510152025000061218243036000714212835424900816243240485664091827364554637281,clc,clearjiujiu=zeros(9,9);预分配数组空间fori=1:

9;forj=1:

i;jiujiu(i,j)=i*j;endendjiujiu,例2:

设计九九乘法表,A=111111111222222222333333333444444444555555555666666666777777777888888888999999999,B=123456789123456789123456789123456789123456789123456789123456789123456789123456789,上机作业:

用两矩阵点乘,如何实现九九表,上机作业:

用两矩阵点乘,如何实现九九表,clc,cleara=1:

9;A=repmat(a,1,9);b=1:

9;B=repmat(b,9,1);Jiujiu=tril(A.*B),jiujiu=10000000024000000036900000048121600000510152025000061218243036000714212835424900816243240485664091827364554637281,repmat(a,m,n),提示:

例3:

求奇数和:

s=1+3+5+(2n-1)n=input(请输入n=);s=0;fori=1:

2:

n%步长为2s=s+i;fprintf(i=%d,s=%dn,i,s);%disp(i=,num2str(i),blanks(6),s=,num2str(s)ends%disp(s),注意使用提示输入与输出语句,For循环语句的执行过程:

从矩阵的第一列开始,依次将矩阵的各列之值赋值给变量,然后执行语句组中的语句,直到最后一列,forx=arraycommands;end,注意:

当循环变量为矩阵时,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-7461,2.while循环结构举例,例1:

求1100的偶数和,x=0;sum=0;whilex101sum=sum+x;x=x+2;endsum,for变量=表达式;end,while条件式;end,clearx=zeros(1,6);forI=1:

6;x(I)=1/I;endformatrat;I,x,x=zeros(1,6);I=1;whileI7x(I)=1/I;I=I+1;endformatrat;I,x,两循环比较,结果:

x=11/21/31/41/51/6,I=6,I=7,x=zeros(1,6);forI=1:

6;x(I)=1/I;I=100;endformatrat;I,x,n=1:

10;x=sin(n*pi/10),forn=1:

10x=sin(n*pi/10)end,两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。

若能用一个等效的数组方法来解给定的问题时,应避免用for循环,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;endy,data=39456716-15,y=-4-7461,for循环(While循环)被执行之前,应预置空间,for循环的其它方面重要提示,不能用for循环内重新赋值循环变量的方法来终止循环。

若能用一个等效的矩阵来解给定的问题时,应避免用for循环。

为了得到最大的速度,在for循环(While循环)被执行之前,应预先使用zeros预置空间,continue命令中断语句:

break;暂停语句:

pause键盘控制语句:

keyboard,常用于函数文件的调试(可随时查看变量),4.5程序的流程控制辅助语句,例1:

a=3;b=6;fori=1:

3b=b+1ifi2continueenda=a+2end,输出:

b=7b=8a=5b=9a=7,例2:

a=3;b=6;fori=1:

3b=b+1ifi2breakenda=a+2end,输出:

b=7,1.continue命令,continue语句通常用于for或while循环体中,作用是终止一次循环的执行,与if一同使用,当if条件满足时,跳过本次循环未执行的语句,直接去执行下一次循环。

2.break命令,break语句也常用于for或while循环体中,与if一同使用,当if后的表达式为真时,就跳出当前的循环,3.keyboard命令,在M文件中选定的位置置入keyboard命令,以便将临时控制权交给键盘。

这样做以后,函数工作区就可以进行查询,并且可以根据需要改变变量的值。

在键盘提示符下输入return命令就可以恢复函数执行,即在k下输入return就可以了,%exp2_8.mclc,cleara=4;b=6;disp(暂停,请按任意键继续)pause%暂停,直到用户按任意键c=a9+b7;keyboard,%暂时把控制权交给键盘(在命令窗口中出现k提示符k),%输入return,回车后退出,继续执行下面的语句。

pause命令及keyboard举例,pause命令举例,4.6程序文件的格式特征,

(1)用clc、clear、closeall等语句开始,清除掉工作空间中原有的变量和图形,以避免其他已执行的程序残留数据对本程序的影响。

(2)前几行通常是对此程序用途的说明,特别是在运行时对用户输入数据的要求,更要叙述清楚。

这些注释行必须以%号开始.,(3)在自设变量名时要防止与MATLAB中的函数重名,(4)程序中必须都用半角英文字母和符号(只有引号括住的和%号后的内容可用汉字)(5)文件名不允许用汉字,因为这个文件名,也就是MATLAB的调用命令,它不认汉字。

(6)函数M文件必须以function开始(7)可运行的MATLAB程序中可调入但不能包含一个M函数文件(8)一个函数M文件被调用时,可直接调用函数名如y=myfun()而不传参数值,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()本身不需传参数,调用函数可不传参数情况一:

固有变量nargin、nargout的利用,调用函数可不传参数情况二:

当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。

函数工作空间变量nargin包含输入参量个数;函数工作空间变量nargout包含输出参量个数。

事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量,函数输入输出参数nargin、nargout,例:

编写一函数,要求完成两个功能,一是设置缺省输入变量值a=2,b=3;二是返回x和y的值,其中x是第一个形参的平方,y是两个形参的和,functionx,y=myfun(a,b)ifnargin1a=2;b=3;endifnargin2,b=3;endx=a.2;y=a+b;,一个函数M文件被调用时,可直接调用函数名如y=myfun()而不传参数值,4.7MATLAB搜索路径(文件管理),搜索路径:

标识符(包括变量,内部函数,用户自定义函数等等)识别的顺序它按如下的顺序(优先级)与已有的记录相比较:

工作空间的变量名内部固有变量名mex文件名M文件名,例如:

在MATLAB提示符下键入lust,则MATLAB按以下步骤处理.

(1)首先检查lust是不是变量;

(2)然后检查lust是不是内部函数;(3)检查当前目录中是否有lust.mex,lust.dll或lust.m文件(4)如果均不满足,则显示出错信息.,如果两个名字相同,它只认优先级高的名字比如用户在工作空间中给i赋了值,那么系统就不会取内部固有变量中设定的虚数i;如果用户在程序中设立了一个与MATLAB中的函数同名的变量,则每次调用此名字时,出现的将是用户自定的变量,调不出MATLAB中的函数。

所以在自设变量名时要防止与MATLAB中的函数重名,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()时,将出现与我们所要的结果不一致的现象,设有函数:

把某些分号改为逗号,使中间结果能显示在屏幕上,作为查错的依据。

在子程序中适当部位加keyboard命令。

此时,系统会暂停而等待用户键入命令。

这时子程序中的变量还存在于工作空间中,可以对它们进行检查。

将函数文件的第一行前加%号,使它成为程序文件,进行初步调试。

第一行中的输入变元,可改用input或赋值语句来输入,调好后再改回函数文件。

4.8MATLAB程序调试常用方法,Debug程序调试设断点,在运行含有断点的程序后,可将鼠标放在变量旁查看变量的信息,在程序调试过程中很有用,A(236541)=987654,A=498567,方法一:

利用随机数产生函数alpha=randperm(data_length),实现交织。

说明:

data11101;data_length5;alpha=randperm(data_length);%输出alpha为随机生成的5个数,若alpha53124,可认为是索引号,实验3.2,data_inter=data(alpha);%随机交织后的输出帧为data_inter=11110,即data的第5位是data_inter的%第1位,依次类推。

方法二:

仿照方法一,编写函数alpha2=lincol_inter(data_length),%使之产生按行读入,按列读出的序号;再利用%data_inter=data(alpha2)完成一帧数据的交织。

Data_in=randint(1,Len_B);%产生等概分布的0,1随机序列alpha=randperm(size(Data_in,2);InterCode=Data_in(alpha);%输出交织后的编码序列,1.发送端的随机交织,2.接收端的随机解交织,functionData_derandperm=derandperm(Data_in,alpha)%alpha为发送端产生的交织序列号Data_derandperm(alpha)=Data_in;%输出交织后的编码序列,4.试编写一函数,使之具有如下功能:

将随机产生的二进制序列按每2位(00:

0,01:

1,10:

2,11:

3)、3位或4位二进制位与十进制相对应的关系转变成相应十进制数序列。

functionNumTrans=fun_bin2dec(Xframe,COdelen)%Xframe随机产生的二进制序列%COdelen表示码长2、3、4等%NumTrans返回转变后的十进制序列Xlen=length(Xframe);%二进制信号序列长度NumTrans=zeros(1,Xlen/COdelen);%生成一行向量放转变成十进制的数,MapCode=0+0jawgn_info=awgn(MapCode,SNRdb(am),measured)BaseSignal_filter=filter(Multipath,1,awgn_

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2