实验三_M_文件及_MATLAB_程序设计与调试
matlab实验指导2019-11-12

实验1 熟悉软件环境和基本的操作一、实验目的熟悉MATLAB运行环境和了解基本操作。
二、实验内容MATLAB的启动、操作界面组成1.熟悉MATLAB图形界面打开MATLAB,单击命令窗口菜单栏中的各个下拉菜单按钮,试使用各个按钮引出的选项;把光标移动到工具栏中各个图标上(不要按下),查看它们与菜单选项的对应情况。
2.熟悉MATLAB的基本命令。
在命令窗口中分别键入以下内容,以建立若干变量:A=[1 2;3 4;5 6]B=[7,8,9;10,11,12]C=[5 6 7;1 8 3];D=B+C问题1:如何输入一个矩阵变量的行元素和列元素?问题2:观察每行命令后是否加“;”,对显示执行结果有什么区别?键入以下命令或执行操作,查看效果,并体会命令功能:(1)工作空间管理。
whowhosclear A(2)路径编辑。
试用菜单File/Set Path将D盘根目录及其下的所有子目录和文件夹包含进来,设为搜索路径。
问题3:当前路径是什么?问题4:搜索路径是什么意思?(3)联机帮助help pausehelpwin(4)窗口清理。
先画出正弦函数在0-2π之间的图形,再用以下各种窗口清理命令,看每项命令都清除了什么。
figureplot(sin(0:0.1:6.28))claclfclose注意:figure为打开一幅图形图像窗口close为关闭当前图形图像窗口,而close all为关闭所有已打开的图形图像窗口。
(5)MATLAB基本矩阵操作演示playshow intro(6)MATLAB图形绘制演示playshow buckydem(7)MATLAB数学功能演示(快速傅氏变换)playshow fftdemo(8)MATLAB三维造型演示(茶壶演)playshow teapotdemo3.打开MATLAB命令窗口,键入demos,观看演示程序。
三、思考题1.将pi分别用15位数字格式、分数格式、十六进制格式、5位数字的科学计数法显示。
【matlab】MATLAB程序调试方法和过程

【matlab】MATLAB程序调试⽅法和过程3.8 MATLAB程序的调试和优化在MATLAB的程序调试过程中,不仅要求程序能够满⾜设计者的设计需求,⽽且还要求程序调试能够优化程序的性能,这样使得程序调试有时⽐程序设计更为复杂。
MATLAB提供了强⼤的程序调试功能,合理的运⽤MATLAB提供的程序调试⼯具尤其重要。
本节从MATLAB程序调试的⽅法和过程开始介绍,先让⽤户懂得合理运⽤MATLAB的程序调试功能,再总结MATLAB程序优化的⽅法,从⽽达到实现提⾼程序性能的⽬的。
3.8.1 MATLAB程序调试⽅法和过程(1)MATLAB是⼀种解释和执⾏同时进⾏的语⾔,这使得程序的调试变得相对便利,尤其是MATLAB具有良好的所见即所得特性。
在MATLAB程序调试过程中,可运⽤的除了⼀系列调试函数外,MATLAB还提供了专门的调试器,即M⽂件编译器,通过该M⽂件编译器和调试函数的共同使⽤,⽤户能够完成⼤部分的程序调试⼯作。
1.调试的基本任务程序调试(Debug)的基本任务就是要找到并去除程序中的错误。
程序的错误⼤致可以分为如下三类。
语法错误:由于程序员疏忽、输⼊不正确等原因⽽造成的代码违背程序语⾔规则的错误。
运⾏错误:由于对所求解问题的理解差异,导致程序流程出错或对程序本⾝的特性认识有误⽽造成的程序执⾏结果错误的情况。
异常:程序执⾏过程中由于不满⾜条件⽽造成的程序执⾏错误。
语法错误是初学者最常犯的错误,例如,变量或函数名拼写错误、缺少引号或括号等。
这类错误对于熟练掌握MATLAB的⽤户来说很容易避免,并且当MATLAB运⾏发现这些错误时会⽴即标识出这些错误,并向⽤户说明错误的类型以及在M⽂件中的位置,下⾯⽤⼀个例⼦来说明,在debug.m⽂件中输⼊如下内容:11 A=[123,456,789]; %定义矩阵A22 B=[1234,5678,9101112,13141516]; %定义矩阵B33 C=A*B %C为矩阵A和B相乘运⾏时则会出现如下错误:1. Error using ==> mtimes2. Inner matrix dimensions must agree.在上述矩阵四则运算的例⼦中,矩阵A和矩阵B的维数不满⾜运算前置条件,即两个矩阵的维数不同不能进⾏运算。
MATLAB程序设计与应用(刘卫国编)课后实验答案

实验一 MATLAB 运算基础1. 先求以下表达式的值,然后显示MATLAB 工作空间的利用情形并保留全数变量。
(1) 0122sin851z e=+(2) 21ln(2z x =+,其中2120.455i x +⎡⎤=⎢⎥-⎣⎦ (3) 0.30.330.3sin(0.3)ln , 3.0, 2.9,,2.9,3.022a a e e a z a a --+=++=-- (4) 2242011122123t t z t t t t t ⎧≤<⎪=-≤<⎨⎪-+≤<⎩,其中t =0:: 解:2. 已知:1234413134787,2033657327A B --⎡⎤⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎣⎦求以下表达式的值:(1) A+6*B 和A-B+I (其中I 为单位矩阵)(2) A*B 和A.*B(3) A^3和A.^3(4) A/B 及B\A(5) [A,B]和[A([1,3],:);B^2]解:运算结果:3. 设有矩阵A 和B1234530166789101769,111213141502341617181920970212223242541311A B ⎡⎤⎡⎤⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎢⎥==-⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ (1) 求它们的乘积C 。
(2) 将矩阵C的右下角3×2子矩阵赋给D。
(3) 查看MATLAB工作空间的利用情形。
解:. 运算结果:4. 完成以下操作:(1) 求[100,999]之间能被21整除的数的个数。
(2) 成立一个字符串向量,删除其中的大写字母。
解:(1) 结果:(2). 成立一个字符串向量例如:ch='ABC123d4e56Fg9';那么要求结果是:实验二 MATLAB 矩阵分析与处置1. 设有分块矩阵33322322E R A O S ⨯⨯⨯⨯⎡⎤=⎢⎥⎣⎦,其中E 、R 、O 、S 别离为单位矩阵、随机矩阵、零矩阵和对角阵,试通过数值计算验证22E R RS A O S +⎡⎤=⎢⎥⎣⎦。
MATLAB实验报告

v1.0 可编辑可修改实验一 MATLAB 环境的熟悉与基本运算一、实验目的及要求1.熟悉MATLAB 的开发环境; 2.掌握MATLAB 的一些常用命令;3.掌握矩阵、变量、表达式的输入方法及各种基本运算。
二、实验内容1.熟悉MATLAB 的开发环境: ① MATLAB 的各种窗口:命令窗口、命令历史窗口、工作空间窗口、当前路径窗口。
②路径的设置:建立自己的文件夹,加入到MATLAB 路径中,并保存。
设置当前路径,以方便文件管理。
2.学习使用clc 、clear ,了解其功能和作用。
3.矩阵运算:已知:A=[1 2;3 4]; B=[5 5;7 8]; 求:A*B 、A.*B ,并比较结果。
4.使用冒号选出指定元素:已知:A=[1 2 3;4 5 6;7 8 9]; 求:A 中第3列前2个元素;A 中所有列第2,3行的元素; 5.在MATLAB 的命令窗口计算: 1) )2sin(π2) 5.4)4.05589(÷⨯+ 6.关系及逻辑运算1)已知:a=[5:1:15]; b=[1 2 8 8 7 10 12 11 13 14 15],求: y=a==b ,并分析结果 2)已知:X=[0 1;1 0]; Y=[0 0;1 0],求: x&y+x>y ,并分析结果 7.文件操作1)将0到1000的所有整数,写入到D 盘下的文件 2)读入D 盘下的文件,并赋给变量num8.符号运算1)对表达式f=x 3-1 进行因式分解2)对表达式f=(2x 2*(x+3)-10)*t ,分别将自变量x 和t 的同类项合并 3)求3(1)xdz z +⎰三、实验报告要求完成实验内容的3、4、5、6、7、8,写出相应的程序、结果实验二 MATLAB 语言的程序设计一、实验目的1、熟悉 MATLAB 程序编辑与设计环境2、掌握各种编程语句语法规则及程序设计方法3、函数文件的编写和设计4、了解和熟悉变量传递和赋值二、实验内容1.编写程序,计算1+3+5+7+…+(2n+1)的值(用input 语句输入n 值)。
matlab实验内容

2017年-matlab实验内容2017年文化素质课 MATLAB实验实验一、MATLAB基本操与运算基础【实验目的】(1)熟悉MATLAB基本环境,掌握MATLAB变量的使用(2)掌握MATLAB数组的创建(3)掌握MATLAB数组和矩阵的运算【实验内容及步骤】熟悉建立数组的方法:逐个元素输入法、冒号法、特殊方法(使用函数linspace建立)1、有关向量、矩阵或数组的一些运算(1)设A=15;B=20;求C=A+B与c=a+b?(2)设A=[1 2 3;4 5 6;7 8 9],B=[9 8 7;6 5 4;3 2 1];求A*B与A.*B?(3)设a=10,b=20;求i=a/b=?与j=a\b= ?(4)设a=[1 -2 3;4 5 -4;5 -6 7](5)在MATLAB命令行窗口运行A=[1,2;3,4]+i*[5,6;7,8];看结果如何?如果改成运行A=[1,2;3,4]+i[5,6;7,8],结果又如何?(6)请写出完成下列计算的指令:a=[1 2 3;3 4 2;5 2 3],求a^2=?,a.^2=?(7)有一段指令如下,请思考并说明运行结果及其原因clearX=[1 2;8 9;3 6];X( : ) %转化为列向量(8)写出下列指令的运行结果>> A = [ 1 2 3 ]; B = [ 4 5 6 ];>> C = 3.^A>> D = A.^B2、设有矩阵A和B,A=[1 2 3 4 5;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20;21 2223 24 25],B=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11]1)求它们的乘积C2)将矩阵C的右下角3x2子矩阵赋给D3、完成下列操作1)求[100,999]之间能被61整除的数及其个数(提示:先利用冒号表达式,再利用find和length 函数。
M文件及程序调试

3. 函数参数的可调性 在调用函数时,MATLAB用两个永久 变量nargin和nargout分别记录调用该 函数时的输入实参和输出实参的个数。 只要在函数文件中包含这两个变量, 就可以准确地知道该函数文件被调用 时的输入输出参数个数,从而决定函 数如何进行处理。
例: nargin用法示例。 函数文件examp.m: 主程序文件mydemo.m: function fout=examp (a,b,c) x=[1:3]; if nargin==1 y=[1;2;3]; fout=a; examp(x) elseif nargin==2 examp(x,y') fout=a+b; examp(x,y,3) elseif nargin==3 fout=(a*b*c)/2; end
内存变量的存储与下载
利用MAT文件可以把当前MATLAB工作 空间中的一些有用变量长久地保留下来, 扩展名是.mat。MAT文件的生成和装入由 save和load命令来完成。常用格式为:
save 文件名 [变量名表] loa表中的变量个数不限, 只要内存或文件中存在即可,变量名之间 以空格分隔。当变量名表省略时,保存或 装入全部变量。
程序2:
首先建立函数文件exch.m: function [a,b]=exch(a,b) c=a;a=b;b=c; 然后在MATLAB的命令窗口调用该函数 文件: clear; x=1:10; y=[11,12,13,14;15,16,17,18]; [x,y]=exch(x,y)
2.6.2 M文件的建立与打开
与WORD的交互操作 在图形窗中截取图形时,应先用鼠标 拖动的方法将图形窗调到需要的大小,然 后利用菜单中的[Edit]项,在[Copy Options] 子项中选[Metafile]模式,再选菜单中[Copy Figure]或[Copy],图就放到剪贴板上去了。 然后可把图形贴向Word的任何文本文件并 在其中做进一步的编辑修改。
实验三 MATLAB矩阵分析与处理、m文件
实验三、MATLAB 矩阵分析与处理、函数文件一、 实验目的1.掌握生成特殊矩阵的方法。
2.掌握矩阵分析的方法。
3.用矩阵求逆法解线性方程组。
4.理解函数文件的概念。
5.掌握定义和调用MATLAB 函数的方法。
二、 实验内容及结果1.设有分块矩阵⎥⎦⎤⎢⎣⎡=⨯⨯⨯⨯22322333EA S O R ,其中E 、R 、O 、S 分别为单位矩阵、随机矩阵、零矩阵和对角阵,试通过数值计算验证⎥⎦⎤⎢⎣⎡+=22S O RS R E A 。
程序:E=eye(3); %建立单位矩阵 R=rand(3,2); %建立随机矩阵 O=zeros(2,3); %建立零矩阵 S=diag([1,2]); %建立对角阵 A=[E,R;O,S]; X1=A*AX2=[E,R+R*S;O,S*S] 结果:X1和X2结果相等,即可证明原式成立。
2.产生5阶希尔伯特矩阵H和5阶帕斯卡矩阵P,且求其行列式的值Hh和Hp以及它们的条件数Th和Tp,判断哪个矩阵性能更好。
为什么?程序:format ratH=hilb(5) %建立希尔伯特矩阵P=pascal(5) %建立帕斯卡矩阵Hh=det(H) %求行列式的值Hp=det(P)Th=cond(H) %求条件数Tp=cond(P)结果:P矩阵的条件数比矩阵H的条件数更接近于1,因此,矩阵P的性能要好于矩阵H。
3.建立一个5×5矩阵,求它的行列式值、迹、秩和范数。
程序:a=rand(5)b=det(a) %求行列式的值c=trace(a) %求迹d=rank(a) %求秩e1=norm(a,1) %求1-范数e2=norm(a) %求2-范数einf=norm(a,inf) %求 -范数结果:4.已知⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=5881252018629A 求A 的特征值及其特征向量,并分析其数学意义。
程序:A=[-29,6,18;20,5,12;-8,8,5];[V,D]=eig(A) %求特征值和特征向量 结果:求得的三个特征值为-25.3169,-10.5182和16.8351,各特征值对应的特征向量为V 的各列构成的向量。
matlab实验
实验一 MATLAB基本操作一、实验目的1、了解MATLAB应用程序环境2、掌握MATLAB语言程序的书写格式和MATLAB语言程序的结构。
3、掌握在MATLAB应用环境下编写程序4、掌握MATALB调试过程,帮助文件5、掌握MATLAB语言上机步骤,了解运行一个MATLAB程序的方法。
6、本实验可在学习完教材第一章后进行。
二、主要仪器及耗材PC电脑,MATLAB6.5软件三、实验内容和步骤1、MATLAB语言上机步骤:(1)、进入系统在C盘或其他盘上找到MATLAB或MATLAB6.5,然后双击其图标打开文件夹。
然后进行编辑源程序->编译->连接->执行程序->显示结果(2)、常用命令编辑切换(F6),编译(F9),运行(CTRL+F9),显示结果(ALT+F5)其它常用命令见“附录一”。
2、有下面的MATLAB程序。
(1)数值计算功能:如,求方程 3x4+7x3 +9x2-23=0的全部根p=[3,7,9,0,-23]; %建立多项式系数向量x=roots(p) %求根(2)绘图功能:如,绘制正弦曲线和余弦曲线x=[0:0.5:360]*pi/180;plot(x,sin(x),x,cos(x));(3)仿真功能:如,请调试上述程序。
3、熟悉MATLAB环境下的编辑命令,具体见附录一。
三、实验步骤1、静态地检查上述程序,改正程序中的错误。
2、在编辑状态下照原样键入上述程序。
3、编译并运行上述程序,记下所给出的出错信息。
4、按照事先静态检查后所改正的情况,进行纠错。
5、再编译执行纠错后的程序。
如还有错误,再编辑改正,直到不出现语法错误为止。
四、实验注意事项1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因。
2、总结MATLAB程序的结构和书写规则。
五、思考题1、matlab到底有多少功能?2、MATLAB的搜索路径3、掌握使用MATLAB帮助文件实验二 MATLAB 矩阵及其运算一、 实验目的1、了解矩阵的操作,包括矩阵的建立、矩阵的拆分、矩阵分析等2、了解MATLAB 运算,包括算术运算、关系运算、逻辑运算等3、掌握字符串的操作,了解结构数据和单元数据。
matlab实验报告
matlab实验报告实验1 熟悉matlab 的开发环境及矩阵操作⼀、实验的教学⽬标通过本次实验使学⽣熟悉MATLAB7.0的开发环境,熟悉MA TLAB ⼯作界⾯的多个常⽤窗⼝包括命令窗⼝、历史命令窗⼝、当前⼯作⽬录窗⼝、⼯作空间浏览器窗⼝等。
掌握建⽴表达式书写规则及常⽤函数的使⽤,建⽴矩阵的⼏种⽅法。
⼆、实验环境计算机、MATLAB7.0集成环境三、实验内容1、熟悉命令窗⼝的使⽤,⼯作空间窗⼝的使⽤,⼯作⽬录、搜索路径的设置。
命令历史记录窗⼝的使⽤,帮助系统的使⽤。
2、在当前命令窗⼝中输⼊以下命令:x=0:2:10 y=sqrt(x),并理解其含义。
3、求下列表达式的值(1)w=)1034245.01(26-?+?(2)x=ac b e abc cb a ++-+++)tan(22ππ,其中a=3.5,b=5,c=-9.8 四、实验总结1、熟悉了命令窗⼝的使⽤,⼯作空间窗⼝的使⽤。
2、了解了⼯作⽬录、搜索路径的设置⽅法。
---5317383399351542实验2 MATLAB 基本运算⼀、实验的教学⽬标通过本次实验使学⽣掌握向量和矩阵的创建⽅法;掌握矩阵和数组的算术运算、逻辑运算和关系运算;掌握字符数组的创建和运算;了解创建元胞数组和结构体的⽅法。
⼆、实验环境计算机、MATLAB7.0集成环境三、实验内容1、要求在闭区间]2,0[π上产⽣具有10个等距采样点的⼀维数组。
试⽤两种不同的指令实现。
(提⽰:冒号⽣成法,定点⽣成法)2、由指令rng('default'),A=rand(3,5)⽣成⼆维数组A ,试求该数组中所有⼤于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。
(提⽰:find 和sub2ind )3、创建3阶魔⽅矩阵a 和3阶对⾓阵b ,c=a(1:3,1:3)(1)计算矩阵a,b 和c 的⾏列式、逆矩阵并进⾏最⼤值的统计。
(2)⽐较矩阵和数组的算术运算:b 和c 的*、/、^和.*、./、.^。
MATLAB的M文件
MATLAB的M⽂件M⽂件可分为脚本M⽂件(简称脚本⽂件)和函数M⽂件(简称函数⽂件)两⼤类,其特点和适⽤领域均不同。
脚本⽂件脚本⽂件是由MATLAB语句构成的⽂本⽂件,以.m为扩展名。
运⾏命令⽂件的效果等价于从MATLAB命令窗⼝中按顺序逐条输⼊并运⾏⽂件中的指令,类似于DOS下的批处理⽂件。
脚本⽂件运⾏过程所产⽣的变量保留在MATLAB的⼯作空间中,脚本⽂件也可以访问MATLAB当前⼯作空间的变量,其他脚本⽂件和函数可以共享这些变量。
因此,脚本⽂件常⽤于主程序的设计。
例题编写脚本⽂件,对数a、b、c进⾏排序,并按从⼤到⼩的顺序输出。
% compareABC.ma = input("Enter a:");b = input("Enter b:");c = input("Enter c:");sort([a,b,c],'descend')1. 选择好⼯作⽬录2. 新建⼀个脚本⽂件命名为compareABC.m3. 在脚本⽂件中编写代码4. 点击运⾏按钮5. 在命令⾏窗⼝作输⼊输出6. 查看⼯作区的变量情况函数⽂件**函数⽂件是M⽂件的另⼀种类型,它也是由MATLAB语句构成的⽂本⽂件,并以.m为扩展名。
MATLAB的函数⽂件必须以关键字function语句引导,其基本结构如下:function [返回参数1,返回参数2,....] = 函数名(输⼊参数1,输⼊参数2,...)% 注释说明语句段,由%引导输⼊、返回变量格式的检测语句函数体语句函数⽂件具有如下特点。
(1)函数名由读者⾃定义,与变量的命名规则相同。
(2)保存的⽂件名必须与定义的函数名⼀致。
(3)读者可通过返回参数及输⼊参数来实现函数参数的传递,但返回参数和输⼊参数并不是必须的。
返回参数如果多于1个,则应该⽤中括号“[]”将它们括起来;输⼊参数列表必须⽤⼩括号“()”括起来,即使只有⼀个输⼊参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三M 文件及MATLAB 程序设计与调试一、实验目的全面掌握在MA TLAB 下进行程序设计的有关问题,具体涉及到M 脚本文件和M 函数文件的编写、全局和局部变量的使用、流程控制结构、提高程序执行效率的设计技术、程序调试等问题。
二、实验内容1、关于M 脚本文件和M 函数文件MATLAB 的M 文件有两类:脚本文件和函数文件。
(1)脚本文件——将原本要在MATLAB 的指令窗口中直接输入的语句,放在一个以.m 为后缀的,称为脚本文件中。
有了脚本文件,可直接在MATLAB 中输入脚本文件名(不含后缀)。
MATLAB 会打开这一脚本文件,并依次执行脚本文件中的每一条语句,这与在MATLAB 中直接输入语句的结果完全一致。
(2)函数文件——它的第一行必须是函数定义行。
M 函数文件由5 部分构成:◆函数定义行◆H1 行◆函数帮助文本◆函数体◆注释注意:在函数文件中,除了函数定义行之外,其它部分都是可以省略的。
但作为一个函数,为了提高函数的可用性,应加上H1 行和函数帮助文本,为了提高函数的可读性,应加上适当的注释。
例如:function y = mean(x)% MEAN Average or mean value.% For vectors, MEAN(X) is the mean value of the elements in X.% For matrices, MEAN(X) is a row vector containing the mean value of each column.[m,n]=size(x);if m==1% Determine whether x is a vectorm=n;endy = sum(x)/m;①函数定义行:function y = mean(x)function 为函数定义的关键字,mean 为函数名,y 为输出变量,x 为输入变量当函数具有多个输出变量时,则以方括号括起;当函数具有多个输入变量时,则直接用圆括号括起。
例如:function [x,y,z]=sphere(theta, phi, rho)。
当函数不含输出变量时,则直接略去输出部分或采用空方括号表示,例如:function printresults(x) 或function [ ]=printresults(x)所有在函数中使用和生成的变量都为局部变量(除非利用global 语句定义),这些变量值只能通过输入和输出变量进行传递。
因此,在调用函数时应通过输入变量将参数传递给函数;函数调用返回时也应通过输出变量将运算结果传递给函数调用者;其它在函数中产生的变量在返回时被全部清除。
②H1 行:描述了函数的“功能”信息(很重要!)函数文件中第二行一般是注释行,这一行称为H1 行,实际上它是帮助文本中的第一行。
H1 行不仅可以由help funtion-name 命令显示,而且,lookfor 命令只在H1 行内搜索,③函数帮助文本:用来比较详细地说明这一函数的用法以%开头,输入时help funtion-name 命令,可显示出H1 行和函数帮助文本。
④函数体:完成指定功能的语句实体可采用任何可用的MATLAB 命令,包括MA TLAB 提供的函数和用户自己设计的M 函数。
⑤注释●备注:⏹函数定义名和保存文件名必须一致。
两者不一致时,MATLAB 将忽视文件首行的函数定义名,而以保存文件名为准;⏹函数文件的名字必须以字母开头,后面可以是字母、下划线以及数字的任意组合,但不得超过63 个字符;⏹建议在编写H1 行时,采用英文表达。
这样处理是为了以后关键词检索方便。
成了基本工作空间中的变量,这会带来几个问题:●基本工作空间中与脚本文件中同名的变量会引起冲突●使基本工作空间中变量数急剧增加,造成内存紧张●编程时要细心考虑各个脚本文件所用到的变量这些问题在函数文件中不复存在,MATLAB 通过实参与形参一一对应的方式来实现函数的调用,这极大地方便了程序设计。
举例:分别编写出求取平均值与标准差的脚本文件stat1.m 和函数文件stat 2.m。
stat1.m %脚本文件%求阵列x 的平均值和标准差[m,n]=size(x);if m==1m=n;ends1=sum(x);s2=sum(x.^2);mean1=s1/m;stdev=sqrt(s2/m-mean1 ^2);stat2.m %函数文件function [mean1,stdev]=stat2(x)%STA T2函数文件%求阵列x 的平均值和标准差[m,n]=size(x);if m==1m=n;ends1=sum(x);s2=sum(x.^2);mean1=s1/m;stdev=sqrt(s2/m-mean1 ^2);在命令窗口依次输入如下命令:clearx=rand(4,4)+2;stat1 %执行stat1.m 后,观察基本空间中的变量情况。
whos %可见:脚本文件所产生的所有变量都返回了工作空间Name Size Bytes Classm 1x1 8 double arraymean1 1x4 32 double arrayn 1x1 8 double arrays1 1x4 32 double arrays2 1x4 32 double arraystdev 1x4 32 double arrayx 4x4 128 double arrayGrand total is 34 elements using 272 bytesdisp([mean1;stdev]) %观察计算结果2.7891 2.3084 2.2860 2.30830.2192 0.3196 0.1852 0.2699在命令窗口顺序输入如下命令:clear m n s1 s2 mean1 stdev[m1,std1]=stat2(x); %执行stat2.m 后,观察基本基本空间中的变量情况whos %只增加了由函数返回的结果Name Size Bytes Classm1 1x4 32 double arraystd1 1x4 32 double arrayx 4x4 128 double arrayGrand total is 24 elements using 192 bytesdisp([m1;std1]) %观察计算结果,和stat1.m 一致2.7891 2.3084 2.2860 2.30830.2192 0.3196 0.1852 0.2699★备注:1)运行脚本文件,产生的所有变量都驻留在MA TLAB 基本工作空间(Base workspace),只要不使用clear 且不关闭指令窗口,这些变量将一直保存着。
(基本工作空间随MATLAB 的启动而产生,只有关闭MATLAB 时,该基本空间才被删除。
)2)运行函数文件,MATLAB 就会专门开辟一个临时工作空间,称为函数工作空间(Function workspace),所有中间变量都存放在函数工作空间中,当执行完最后一条指令或遇到return 时,就结束该函数文件的运行,同时该临时函数工作空间及其所有中间变量就立即被清除。
(函数工作空间随具体M 函数文件的被调用而产生,随调用结束而删除。
函数工作空间是相对基本工作空间对立的、临时的。
在MA TLAB 这个运行期间,可以产生任意多个临时函数工作空间,而基本工作空间。
)3)如果在函数文件中,调用了某脚本文件,那么该脚本文件运行所产生的所有变量都放在该函数工作空间中,而不是放在基本工作空间中。
2、函数的变量:局部变量和全局变量,输入变量和输出变量(1)局部变量(Local variable):函数工作空间内部的中间变量,产生于函数的运行过程中,其影响范围仅限于该函数本身。
(2)全局变量(Global variabl):被不同函数工作空间和基本工作空间共享的变量希望共享全局变量的函数空间或基本空间必须逐个用global 对具体变量加以专门定义。
如果某函数的运行使全局变量的内容发生变化,那么其他空间中的同名变量也随之变化,除非与全局变量联系的所有工作空间都被删除,否则全局变量依然存在。
●备注:⏹对全局变量的定义必须在被使用之前,建议把对全局变量的定义放在函数体的首行位置⏹为了提高M 文件的可读性,建议选用大写字符命名全局变量⏹实际编程中,并不提倡使用全局变量(因它损害了函数的封装性)(3)输入和输出变量数:nargin、nargout(可获取函数实际输入/输出变量数)在MATLAB 函数中,引用的输入/输出函数的数目可少于编写的变量数目,但这时在函数设计中必须进行适当处理。
举例:编写一个测试函数testarg1.m,要求:当输入为一个变量时,计算出这一变量的平方,当输入为两个变量时,求出这两个变量的乘积。
可编写函数文件:testarg1.mfunction c=testarg1(a,b)if (nargin==1)c=a.^2;elseif(nargin==2)c=a*b;end在命令窗口输入如下指令调用:>>x=[2 4], y=[5 6 7;2 4 9]t1=testarg1(x), t2=testarg1(x,y)t1 =4 16t2 =18 28 503、子函数从 5.x 版开始,MATLAB 允许一个M 函数文件包含多个函数的代码。
第一个出现的函数——主函数(Primary function),其函数名与文件名相同。
其他出现的函数——子函数(Subfunction)有如下性质:●每个子函数的第一行是自己的函数定义行●在M 函数内,主函数的位置不可改变,但子函数的排列次序可以随意改变●子函数只能被处于同一文件的主函数或其他子函数调用●M 函数文件中任何指令通过“名字”对函数调用时,子函数的优先级仅次于内部函数。
●同一文件的主函数、子函数的工作空间都是彼此独立的。
●help、lookfor 等帮助指令都不能提供关于子函数的任何帮助信息4、MATLAB 程序流程控制(1)for 循环结构:完成指定次重复的循环语法形式:for x = array(commands)end说明:x——循环变量,依次取数组array 的各列commands——循环体,重复执行的次数由数组array的列数决定【例】一个简单的for 循环示例。
>>for i=1:10; %i 依次取1,2,…10,.x(i)=i; %对每个i 值,重复执行由该指令构成的循环end;>>x %要求显示运行后数组x 的值。
x =1 2 3 4 5 6 7 8 9 10说明:●循环不会因为在循环体内对循环变量重新设置而中断●for 后面的表达式中的数组可以为任何合法的MATLAB 数组●循环结构可以嵌套使用●为了得到高效代码,在循环指令之前应尽量对数组进行预定义(预分配)(2)while 循环结构:完成不定次重复的循环语法形式:while expression(commands)end碰到while 语句时,首先检测expression 的值,为逻辑真(非0),则执行循环体(组命令);执行完毕,继续检测expression的值,为真就再执行循环体;……直到expression 为假,结束循环。