Matlab编程基础a.ppt
《Matlab编程基础a.ppt》由会员分享,可在线阅读,更多相关《Matlab编程基础a.ppt(96页珍藏版)》请在三一办公上搜索。
1、MATLAB编程基础,讲述的主要内容:流程控制脚本文件函数文件子函数私有函数M文件的调试,MATLAB编程基础(续),概述流程控制脚本文件函数文件M文件调试M文件性能分析小结,4.1 概述,MATLAB的工作模式指令驱动模式通常MATLAB以指令驱动模式工作,即在MATLABM命令行窗口下用户输入单行指令时,MATLAB立即处理这条指令,并显示结果,这就是MATLAB命令行方式。命令行方式程序可读性差,而且不能存储,当处理复杂问题和大量数据时很不方便。M文件模式将MATLAB语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。程序文件不能在指令窗口下建立
2、,因为指令窗口只允许一次执行一行上的一个或几个语句。,概述(续),MATLAB通过M语言来实现完整的编写应用程序的能力 M语言 M语言是一种解释性语言,利用该语言编写的代码 仅能被MATLAB接受,被MATLAB解释、执行。M语言文件可以分为脚本文件(命令文件)和函数文件 一个M语言文件就是由若干MATLAB的命令组合在一 起构成的。M语言文件是标准的纯文本格式的文件,其文件扩 展名为.m。使用M文件可以将一组MATLAB命令组合起来,通过 一个简单的指令就可以执行这些命令。,概述(续),MATLAB提供了meditor编辑器编辑M文件 在MATLAB命令行窗口中键入指令edit,则可启动 m
3、editor编辑器 edit,概述(续),通过“File”菜单中的“New”子菜单下的“M-file”命令来启 动meditor编辑器,直接单击MATLAB用户界面工具栏上的新建按钮 来启动meditor编辑器,概述(续),M文件有两类独立的M文件 脚本(Scripts)可调用M文件 函数(Functions),MATLAB编程基础(续),4.1 概述4.2 流程控制4.3 脚本文件4.4 函数文件4.5 M文件调试4.6 M文件性能分析4.7 小结,4.2 流程控制,程序流程控制包含控制程序的基本结构和语法 结构化的程序主要有三种基本的程序结构顺序结构 指所有组成程序源代码的语句按照由上至下
4、的次序依次执行,直到程序的最后一个语句。选择结构 依照不同的判断条件进行判断,然后根据判断的结果选择某一种方法来解决某一个问题。循环结构 就是在程序中某一条语句或多条语句重复多次的运行。MATLAB语言的程序结构与其它高级语言是一致的,分为顺序结构、选择结构、循环结构,流程控制(续),4.2.1 选择结构4.2.2 循环结构4.2.3 break语句和continue语句4.2.4 提高运算性能,4.2.1 选择结构,当判断某一条件是否满足,根据判断的结果来选择不同的解决方法时,就需要使用选择结构MATLAB的条件判断可以使用if语句或者switch语句,4.2.1 选择结构,4.2.1.1
5、if语句if语句的三种基本语法结构if(关系运算表达式)MATLAB语句 endif(关系运算表达式)MATLAB语句A else MATLAB语句B endif(关系运算表达式a)MATLAB语句A elseif(关系运算表达式b)MATLAB语句B else(关系运算表达式c)end,if-elseif-else的语句结构可以嵌套使用 if(关系运算表达式a)if(关系运算表达式b)MATLAB语句A else MATLAB语句B end else if(关系运算表达式c)MATLAB语句C else MATLAB语句D end end,选择结构(续),4.2.1.2 switch语句sw
6、itch语句用于处理多分支的选择switch(表达式)case 常量表达式a:MATLAB语句A case 常量表达式b:MATLAB语句B case 常量表达式m:MATLAB语句M otherwise:MATLAB语句N end在MATLAB的switch语句中,程序仅仅执行符合条件的case分支如果需要对多个条件使用同一个case分支时,则需要使用元胞数组与之配合,4.2.2 循环结构,在MATLAB中,包含两种循环结构循环次数不确定的while循环循环次数确定的for循环,循环结构(续),1、while循环结构while语句可以实现“当”型的循环结构格式 while(表达式)MATLA
7、B语句 end特点是先判断循环条件,当循环条件成立,即表达式运算结果为“真”,再执行循环体在循环过程中一定要有能够改变关系表达式或者布尔类型变量的值,循环结构(续),2、for循环结构使用for语句循环需要预先知道循环体执行的次数格式 for index=start:increment:end MATLAB语句 endindex的取值取决于start和end的值在for循环语句中,不仅可以使用行向量进行循环迭代的处理,也可以使用矩阵作为循环次数的控制变量循环的索引值将直接使用矩阵的每一列,循环的次数为矩阵的列数,4.2.3 break语句和continue语句,break语句和continue
8、语句的基本功能当break语句使用在循环体中的时候,其作用是能够在执行循环体的时候强迫终止循环,即控制程序的流程,使其提前退出循环使用方法:break;continue语句出现在循环体中的时候,其作用是能够中断本次的循环体运行,将程序的流程跳转到判断循环条件的语句处,继续下一次的循环使用方法:continue;,4.2.4 提高运算性能,M语言和其他的高级语言不同,由于采用了解释型语言,其执行效率低于编译性语言提高运算性能向量化运算预分配存储空间MATLAB加速器,提高运算性能(续),1、向量化运算向量化运算不要使用循环结构操作矩阵的元素,应直接使用矩阵元素的索引或者矩阵运算的函数,即尽量将使
9、用while循环或者for循环的语句结构转换成等价的向量或者矩阵运算,提高运算性能(续),2、预分配存储空间进行内存变量存储空间的预分配内存预分配函数,提高运算性能(续),例4-11disp(char(10),使用内存预分配:)pre_allo=zeros(10000,1);ticfor I=1:10000 pre_allo(I)=rand(1);endtocdisp(char(10),不使用内存预分配:)ticfor J=1:10000 not_pre_allo(J)=rand(1);endtoc,提高运算性能(续),使用内存预分配MATLAB自动分配10000个连续的内存空间用于存储数据,
10、MATLAB将一次创建足够的存储空间,然后依次赋值不使用内存预分配当I=1时,MATLAB将使用一块长度为一个单元大小的内存保存第一个随机数当I=2时,MATLAB将寻找一块两单元大小的内存区,一个单元保存第一个随机数,第二个单元存放另一个随机数 当I=10000时,MATLAB寻找一块容纳10000单元的内存存放以前的9999个随机数,同时把最新的一个随机数加入进去,提高运算性能(续),3、MATLAB加速器MATLAB性能加速器能够明显改善循环结构、内建函数调用等方面的运行效率。有些M语言元素不能被MATLAB性能加速器加速,MATLAB编程基础(续),4.1 概述4.2 流程控制4.3
11、脚本文件4.4 函数文件4.5 M文件调试4.6 M文件性能分析4.7 小结,4.3 M脚本文件,包含MATLAB语言代码的文件称为 M文件,其扩展名为.m。脚本文件就是由一系列的MATLAB指令和命令组成的纯文本格式的M文件。脚本文件没有输入参数,也没有输出参数。执行脚本文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。,M脚本文件(续),脚本文件示例%注释行%M文件示例%“flower petal”%以下为代码行%计算theta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).2;rho(2,:)=cos(10*theta).3;rho(3,:)=si
12、n(theta).2;rho(4,:)=5*cos(3.5*theta).3;for k=1:4%图形输出 subplot(2,2,k)polar(theta,rho(k,:)enddisp(程序运行结束!),在脚本文件中,主要由注释行 和代码行组成 M文件的注释行需要使用%定义符注释定义符仅能影响一行代码 M文件的代码行是一些简 单的MATLAB指令或命令 命令可以完成相应的计算处理数据、绘制图形结果的操作 可以在脚本文件中调用其他的函数完成复杂的数学运算,M脚本文件(续),在MATLAB命令行中运行该脚本文件:script_examp程序运行结束!MATLAB会出现相应的图形窗体,MATL
13、AB编程基础(续),4.1 概述4.2 流程控制4.3 脚本文件4.4 函数文件4.5 M文件调试4.6 M文件性能分析4.7 小结,4.4 函数文件,M语言函数文件能够接受用户的输入参数,进行计算,并将计算结果作为函数的返回值返回给调用者在MATLAB中具有不同类型的函数文件内建函数文件系统M函数文件系统MEX函数文件用户自定义MEX函数文件用户自定义的M函数文件,函数文件(续),MATLAB的内建函数文件MATLAB自定义的函数文件称内置函数文件。调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。例如:sin.m函数 调用格式:y=sin(2*x)指令驱动模式 例:x=0:2*
14、pi/180:2*pi;y=sin(2*x);plot(x,y)M文件模式假设存储的文件名为nzhswj.m nzhswj,用户自定义的M函数文件是由用户自己利用M语言编写的文件系统M函数文件是由MATLAB提供的M语言函数文件,函数文件(续),本节介绍4.4.1 基本结构4.4.2 输入输出参数4.4.3 子函数和私有函数4.4.4 局部变量和全局变量4.4.5 函数执行规则,函数文件(续),M语言函数文件具有下面的不同部分函数定义行在线帮助注释行M语言代码,4.4.1 基本结构,函数m文件的格式:function 返回变量=函数名(输入变量)注释说明语句段 程序语句段特定规则:1)函数m文
15、件第一行必须以单词function作为引导词,必须遵循如下形式:function=()2)程序中的变量均为局部变量,不保存在工作空间中,其变量只在函数运行期间有效。,基本结构(续),001 function y=average(x)002%AVERAGE 求向量元素的均值003%语法:004%Y=average(X)005%其中,X是向量,Y为计算得到向量元素的均值006%若输入参数为非向量则出错007008%代码行009 m,n=size(x)010%判断输入参数是否为向量011 if(m=1)|(n=1)|(m=1&n=1)012%若输入参数不是向量,则出错013 error(Input
16、must be a vector)014 end015%计算向量元素的均值016 y=sum(x)/length(x),基本结构(续),函数定义行001 function y=average(x)包括关键字function 函数输出参数y 函数名称average 函数输入参数x函数名称定义要求必须以字符开头,后面可以用字符、数字和下划线的组合构成函数名称MATLAB对函数名称的长度有限定函数的M文件名称最好和函数名称保持一致,若不一致,则调用函数时需要使用文件名称而非函数名称,基本结构(续),在线帮助M函数文件的在线帮助为紧随在函数定义行的注释行002%AVERAGE 求向量元素的均值003%
17、语法:004%Y=average(X)005%其中,X是向量,Y为计算得到向量元素的均值006%若输入参数为非向量则出错,基本结构(续),若在MATLAB命令行窗口中键入指令help average 则 help average AVERAGE 求向量元素的均值 语法:Y=average(X)其中,X是向量,Y为计算得到向量元素的均值 若输入参数为非向量则出错,基本结构(续),注释行008%代码行010%判断输入参数是否为向量012%若输入参数不是向量,则出错015%计算向量元素的均值,基本结构(续),M语言代码008%代码行009 m,n=size(x)010%判断输入参数是否为向量011
18、if(m=1)|(n=1)|(m=1&n=1)012%若输入参数不是向量,则出错013 error(Input must be a vector)014 end015%计算向量元素的均值016 y=sum(x)/length(x)代码行需要完成具体的算法,实现用户的具体功能,基本结构(续),MATLAB在定义输入输出参数时不需要指出变量的类型,而是将参数默认为双精度型MATLAB在定义参数时,没有确定输入参数的维数或者尺寸M语言的函数文件不仅可以有一个输入参数和一个返回值,还可以为M语言函数文件定义多个输入参数和多个输出参数,4.4.2 输入输出参数,例4-15 多个输入输出参数的M函数fun
19、ctionavg,stdev,r=ourstats(x,tol)%OURSTATS多输入输出参数示例%该函数计算处理矩阵,得到相应的均值、标准差和矩阵的秩m,n=size(x);if m=1 m=n;end%Averageavg=sum(x)/m;%Sandad deviationstdev=sqrt(sum(x.2)/m-avg.2);%Ranks=svd(x);r=sum(stol);,输入输出参数(续),运行例4-15 A=1 2 3;4 5 6A=1 2 3 4 5 6 a,s,r=ourstats(A,0.1)a=2.5000 3.5000 4.5000s=1.5000 1.5000
20、 1.5000r=2 a,s=ourstats(A,0.1)a=2.5000 3.5000 4.5000s=1.5000 1.5000 1.5000,输入输出参数(续),a=ourstats(A,0.1)a=2.5000 3.5000 4.5000,调用该函数时,将输出参数依次写在一个向量中,若输出参数的个数与函数定义的输出参数个数不一致时,将计算得到的前几个输出参数作为返回值,若输出参数的个数等于指定的输出参数个数时,计算结果依次赋值给不同的变量。,例4-16 nargout和nargin示例function c=testarg(a,b)%TESTARG检测输入输出参数个数%该函数根据不同的
21、输入输出参数个数进行相应的操作if(nargout=1)disp(使用该函数必须指定一个输出参数!);returnendswitch nargin case 0 disp(使用该函数必须指定一个输入参数!);c=;return case 1 c=a.2;case 2 c=a+b;end,输入输出参数(续),函数nargin用来获取函数的输入参数个数函数nargout用来获取输出函数个数,运行例4-16 A=1 2 3;B=2 3 5;testarg(A,B)使用该函数必须指定一个输出参数!C=testarg使用该函数必须指定一个输入参数!C=C=testarg(A)C=1 4 9 D=test
22、arg(A,B)D=3 5 8 E=testarg(A,B,C)?Error using=testargToo many input arguments.,输入输出参数(续),MATLAB的M函数文件还可以具有个数不确定的输入、输出参数在定义M函数文件时,不指明输入、输出参数的个数,而是在程序中通过编写程序完成具体参数的确定完成该功能主要依靠varargin和varargout函数当函数的定义具有以下形式时 function y=function_name(varargin)函数function_name可以接受任意个数的输入参数 使用varargin函数接受M函数参数时,将用户输入的所有参数
23、构建成为一个元胞数组,该元胞数组中的元素为用户输入的参数当函数的定义具有以下形式时 function varargout=function_name(n)函数function_name可以输出任意个数的输出参数 使用varargout函数输出M函数参数时,需要将所有必要的输出参数传递给元胞数组,在传递参数时,还需要注意参数的顺序,输入输出参数(续),例4-17 不确定的输入参数个数function y=varargin_example(varargin)%VARARGIN_EXAMPLE不确定输入参数例子str=sprintf(输入参数的个数:=%d,length(varargin);disp
24、(str);y=0;%varargin的类型class(varargin)for i=1:length(varargin)%varargin为元胞数组 if(isnumeric(varargini)%将每个为数值数组的输入参数的第一个元素累加求和 y=y+varargini(1);endend,输入输出参数(续),运行例4-17 不确定的输入参数个数 varargin_example输入参数的个数:=0ans=cellans=0 varargin_example(a,1 2 3,3,rand(2,5)输入参数的个数:=4ans=cellans=4.6154,输入输出参数(续),class(va
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 编程 基础

链接地址:https://www.31ppt.com/p-5299171.html