M文件程序设计基础
实验三_M_文件及_MATLAB_程序设计与调试

实验三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 为输入变量当函数具有多个输出变量时,则以方括号括起;当函数具有多个输入变量时,则直接用圆括号括起。
MATLAB-程序设计基础

函数变量
nargin 函数输入变量的个数
例:编制函数test1实现如下功能:如果只提供一个输入变量, 则求该输入变量的模,如果有两个输入变量则求它们的和。 function c=test1(a,bseif (nargin==2) c=a+b; end
例1(见前例): mysum=0; v=1:100; for i=v;mysum=mysum+i;end mysum 例2: x=[]; for i='Hello', x=[i x]; end, x
while循环 while 逻辑变量 循环体语句组 end
例(见前例): mysum=0;i=1; while (i<=100) mysum=mysum+i; i=i+1; end mysum
变量作用域
函数内部定义的变量均为局部变量,如果需 要使用全局变量,则应当使用命令global定义, 并且在任何使用该全局变量的函数中都应加 以定义。 定义全局变量时,变量之间必须用空格分隔, 不能以逗号分隔。
function [num1,num2,num3]=test3(varargin) global firstlevel secondlevel ?global firstlevel secondlevel num1=0;num2=0;num3=0; ?firstlevel=85; list=zeros(nargin); ?secondlevel=75; ?[a,b,c]=test3([90,89,60],[79,89,60],[99,98,100]) for i=1:nargin list(i)=sum(varargin{i}(:)); a= list(i)=list(i)/length(varargin{i}); 1 if list(i)>firstlevel num1=num1+1; elseif list(i)>secondlevel b= num2=num2+1; 2 else num3=num3+1; end c= end
MATLAB-程序设计-M文件建立

1、先建立函数M文件fun2.m来定义函数f(x) function f=fun2(x) 1 else if x<=0
f=x^3 else
f=2*x end end
2、再在MATLAB命令窗口输入fun2(2),fun2(0.5), fun2(-1)即可.
MATLAB入门
程序设计
M文件
MATLAB的内部函数是有限的,有时为了研究 某一个函数的各种性态,需要为MATLAB定义新函 数,为此必须编写函数文件. 函数文件是文件名后 缀为M的文件,这类文件的第一行必须是一特殊字 符function开始,格式为:
function 因变量名=函数名(自变量名) 函数值的获得必须通过具体的运算实现,并赋 给因变量.
2x x 1
1、编写函数M文件 function f=fun1(x) if x>1
f=x^2+1 end if x<=1
f=2*x end
2、在MATLAB命令窗口输入fun1(2),fun1(-1)即可.
2) 有两个选择的一般形式是: if (expression1) {commands1} else {commands2} end
例: 设银行年利率为11.25%.将10000元钱存入银行, 问多长时间会连本带利翻一番?
money=10000; years=0; while money<20000
years=years+1; money=money*(1+11.25/100); end years money
运行结果:
years =7 money = 2.1091e+004
3. if-else-end结构
(1)有一个选择的一般形式是: if (expression) {commands} end
m文件程序设计

m⽂件程序设计⼀、实验⽬的1. 通过练习理解matlab编程⽅法;2. 掌握分⽀结构程序设计思路;3. 掌握循环结构程序设计思路。
⼆、实验环境1. 计算机2. matlab7.x三、实验说明1. 熟悉matlab7.x运⾏环境,正确操作,认真观察;2. 实验学时:2学时;3. 学会使⽤help;4. 编写程序前先写出程序的流程图框架;5. ⾃主编写调试程序直到正确为⽌,必要时参考相关资料,;6. 保存整理实验结果,提交实验报告。
四、实验内容1. 输⼊⼀个百分制成绩,要求输出成绩等级为:A、B、C、D、E,其中90-100为A;80-89为B;70-79为C;60-69为D;60以下为E1)⽤if或switch语句实现;2)输⼊百分制成绩后要判断成绩的合理性,对不合理的成绩要输出出错信息提⽰,⽐如:输⼊成绩不能⼤于100。
3)程序保存名为sy3加上本⼈学号2.某公司员⼯的⼯资计算⽅法如下:(1)⼯作时数超过120⼩时者,超过部分加发15%;(2)⼯作时数低于60⼩时者,扣发700元;(3)其余按每⼩时84元计发。
编程按输⼊的⼯号和该员⼯的⼯时数,计算应发⼯资。
3. 根据求的近似值。
当n分别取100、1000、10000时,结果是多少?要求:分别⽤循环结构和向量运算(使⽤sum函数)来实现。
五、实验程序及结果1、程序:m=input('请输⼊⼀个数值:');n=floor(m/10);switch ncase 9disp('A');case 8disp('B');case 7disp('C');case 6disp('D');case {1,2,3,4,5}disp('E');otherwisedisp('输⼊错误!');end2、程序:x=input('请输⼊⼯号:');y=input('请输⼊⼯作时:');if y>120a=84*120+(y-120)*84*0.15;disp(['本⽉⼯资为:',num2str(a)]); elseif y<60b=84*y-700;disp(['本⽉⼯资为:',num2str(b)]); elsec=84*y;disp(['本⽉⼯资为:',num2str(c)]); end3、程序:y=0;n=input('输⼊⼀个数:');for i=1:ny=y+1/i/i;enda=sqrt(6*y);disp(['圆周率近似值为:',num2str(a)]);。
3-第1章-MATLAB基础-M文件(3)

有调用关系的函数在同一文件
调用函数应放在被调用函数上方。 被调用函数次序无限制。范例func4.m
function out=func4(x) Recip=func3(x) ; out=sum(recip); %定义子函数 function output=func3(input) Output=1./input >>func4([1,2,3]) ans= 1.8333
第2行为函数的实现 规范函数的运算过程,并指定输出变量的值。
调用函数
调用函数funcavg1,可输入 >>vec=[1 2 3]; >>ave=funcavg1(vec) ave= 2
函数的输入和输出
一个函数可以有多个输入和输出 funcavg2.m可接受两个输入并产生两个输出。
function [avg1,avg2]=funcavg2(vec1,vec2); avg1=sum(vec1)/length(vec1); avg2=sum(vec2)/length(vec2);
funcavg2.m的调用 >>[a,b]=funcavg2([1,2,3],[4,5,6]) a= 2 b= 6
•说明:nargin和nargout是库函数,可以检查任何函数M文件 的输入和输出参数个数。 >>nargin(‘funcavg2’); ans= 2
范例
>>[a,b]=funcavg3([1,2,3],[4,5,6,7]) a= 2 b= 6 >>c=funcavg3([1 3 5 7 9]) c= 5
MATLAB 程序设计-M文件 鲁 坚
jianlu@ 深圳大学 数学与计算科学学院
M文件和程序设计

程序控制指令
➢while循环 while expression
commands end 【说明】 先判断表达式expression的值,如果其值为真,则执行 commands循环体; 执行完循环体后,继续判断表达式expression的值,直到表达式expression 的值为假,结束循环。while循环通常用在循环次数未知的情况下,而且要 在循环体修改循环表达式的值,否则容易造成死循环。
程序控制指令
➢keyboard
从键盘读入多个Matlab指令,直到用户输入return指令才返回。
➢yesinput
v=yesinput('Prompt', default, posible)
【说明】
Prompt是显示在屏幕上的提示信息;default是缺省值,即如果没有键
盘输入时变量v赋值为default;posible是变量v可能接受的值。
令文件和函数文件
五、有关工作空间
1. 工作空间 有了函数文件后,工组空间会变得复杂起来。Matlab将工作空间分成2类:
>> s=Addn(3) s=
6 >> help Addn 计算 1+2+…+n 输入变量:n 累加数值 输出变量:f 计算结果
令文件和函数文件
四、函数的输入变量和输出变量
1. 输入变量和输出变量的检测
n = nargin
用于函数内,返回实际输入变量的个数
n = nargin('fun')
获取fun函数的声明的输入变量个数
warning('message')
显示警告信息message,程序继续运行
lastwarn
基础篇-第5章-M文件

简单地说,M文件就是用户把要实现的命令写在一个以 .m作为文件扩展名 的文件中,然后由MATLAB系统进行解释,运行出结果,实际上M文件是一个 命令集,因此,MATLAB具有强大的可开发性与可扩展性。MATLAB中的许多 函数本身都是由M文件扩展而成的,而用户也可以利用M文件来生成和扩充 自己的函数库。
函数定义行(只存在于函数文 件)
H1行 Help文本 M文件内容
注释
函数体
具体语句的功能注释、说明
进行实际计算的代码
1. 函数定义行 函数定义行被用来定义函数名称,定义输人输出变量的数量、顺序。注意脚本式M文 件没有此行。完整的函数定义语句为: function [outl,out2,out3...]=funName(in1,in2, in3...) 其中输入变量用圆括号,变量间用英文逗号‚,‛分隔。输出变量用方括号,无输出可 用空括号[],或无括号和等号。无输出的函数定义行可以为: function funName(inl,in2,in3...) 在函数定义行中,函数的名字所能够允许的最大长度为63字符,个别操作系统有所不 同,用户可自行使用namelengthmax函数查询系统允许的最长文件名。另外函数文件 保存时,MATLAB会默认以函数的名字来保存,请不要更改此名称,否则调用所定义 的函数时会发生错误,不过脚本文件并不受此约束。funName的命名规则与变量命名 规则相同,不能是MATLAB系统自带的关键词,不能使用数字开头,也不能包含非法 字符。 2. H1行 H1行紧跟着函数定义行。因为它是Help文本的第一行,所以叫它H1行。用百分号(%) 开始。MATLAB可以通过命令把M文件上的帮助信息显示在命令窗口。因此,建议写M 文件时建立帮助文本,把函数的功能、调用函数的参数等描述出来,以供自己和别人 查看,方便函数的使用。 H1行是函数功能的概括性描述,在命令窗口提示输人命令可以显示H1行文本:
第二讲MATLAB的程序设计和M文件

第二讲MATLAB的程序设计和M文件在MATLAB中,程序设计主要是通过编写和运行M文件来实现。
M文件是MATLAB的主要代码文件,用于实现不同功能的程序,可以包含变量定义、算法实现、函数调用和图形绘制等。
下面将介绍MATLAB的程序设计和M文件的基本知识。
MATLAB的程序设计主要包括如下几个方面:1.变量和数据类型:在M文件中,可以使用不同的变量类型存储数据,如整型、浮点型、字符型等。
不同的变量类型在MATLAB中有不同的表示方法和功能。
2.运算和表达式:在M文件中,可以使用常见的数学运算符(如加减乘除、指数等)进行计算。
同时,也可以使用逻辑运算符(如与、或、非等)进行逻辑运算。
3. 条件语句:在M文件中,可以使用条件语句实现根据不同的条件执行不同的操作。
MATLAB中的条件语句主要有if语句和switch语句,通过判断条件的真假来决定执行路径。
4. 循环语句:在M文件中,可以使用循环语句实现对一段代码的重复执行。
MATLAB中的循环语句主要有for循环、while循环和do-while循环。
5.函数的定义和调用:在M文件中,可以通过定义函数来实现特定功能的封装。
函数可以包含输入参数和输出参数,通过参数的传递来实现数据的交互和函数的调用。
1.M文件的命名和保存:M文件的命名应该具有描述性,以体现文件中代码的功能。
M文件的保存格式是以.m为文件扩展名。
2.M文件的结构:在M文件中,一般会包含变量定义、函数定义和主程序等部分。
变量定义部分用于声明和初始化变量,函数定义部分用于定义自定义函数,而主程序部分用于调用函数和执行主要功能。
3.代码注释:为了提高代码的可读性和可维护性,需要在M文件中添加注释。
注释可以用于解释代码的目的和思路,以及描述变量、函数和算法等的作用和实现方法。
4.代码风格:为了代码的一致性和可读性,需要遵循一定的代码风格规范。
例如,可以在操作符周围留有空格,使用一致的缩进和命名规则,避免使用不必要的缩写等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x=fact(n);
函数返回值只有一个时,不用方括号。但返回值有
多个时,需要用方括号。
MATLAB程序设计
第5章M文件程序设计基础基础
如,用函数调用的方法求一组随机数中的最大值和最小值。
创建求最大值和最小值的函数文件funmm.m。
function [max,min]=funmm(x,n) a=x(1);b=x(1); %最大值和最小值的参考值为a和b。 for i=1:n if x(i)>a a=x(i); elseif x(i)<b b=x(i); end end
命令窗口
当前工作区间
MATLAB程序设计
第5章M文件程序设计基础基础
M文件编辑器窗口
MATLAB程序设计
第5章M文件程序设计基础基础
例: 在编辑窗创建一个M文件并保存到exm1.m中。 n=0:20; stems1(1,:)=sin(2*pi/21*n); stems1(2,:)=cos(2*pi/21*n); stems1(3,:)=exp(-0.2*n); for i=1:3 stem=stems1(i,:); plot(n,stem); pause end
●分隔一行内的命令或语句并显示运行结果
如,在命令窗输入: >> a=[1 2;3 4],b=a.^2 运行结果:
a= 1 3
b= 1 9
MATLAB程序设计
2 4
4 16
第5章M文件程序设计基础基础
5. 花括号
{}
花括号用于单元数组的创建和索引。 如,在命令窗输入:
>>a={[2 4 7;3 9 6;1 8 5], 'Li Ming',2+3i,1:2:10} 运行结果:
15. 单引号
''
单引号用于创建字符数组。
MATLAB程序设计
第5章M文件程序设计基础基础
16. 空格符
空格符用于分隔以下几种元素:
●分隔矩阵的行元素; ●分隔函数的输入参量;
17. 斜杠与反斜杠
/ \
斜杠与反斜杠用于分隔表示路径的字符。在Windows 系统的路径表示中,斜杠与反斜杠的作用是相同的;
可由exm1.m生成exm1.p。
MATLAB程序设计
第5章M文件程序设计基础基础
如果同时存在exm1.m和exm1.p两个文件,MATLAB 优先运行exm1.p文件。P代码文件的运行速度要比M 文件快,在运行运算量巨大程序时尤为显著。另外, P代码文件能够隐藏程序的算法,这是M文件所不能 实现的。
MATLAB程序设计
第5章M文件程序设计基础基础
9. 点圆括号
.( )
点圆括号常用于指定动态结构的字段名。
10. 叹号
!
叹号用于执行需要在MATLAB中执行的系统命令。
11. 圆括号
()
圆括号常用于数组的索引或用于指定函数的输入参数。
MATLAB程序设计
第5章M文件程序设计基础基础
12. 百分号
@
“猴头”可以作为一般函数或匿名函数句柄的运算符, 也可以作为MATLAB类路径的标志符。
如:
MATLAB程序设计
sqr=@(x)x.^2
第5章M文件程序设计基础基础
3. 冒号
:
冒号是产生数值序列的运算符,常用于数组的创建和
索引。 如: 产生数值序列。
在命令窗输入: >> a=10:-2:1 运行结果: >> a = 10
f=prod(1:n);
MATLAB程序设计
第5章M文件程序设计基础基础
在命令窗输入:
>>fact(5) 运行结果:
ans =
120 或者再编写一个M文件调用函数文件来计算阶乘。 程序如下:
n=5; x=fact(n);
MATLAB程序设计
第5章M文件程序设计基础基础
例: 第4章中求解微分方程的例子。 函数文件: function duc=odefun2(t,uc) %描述二阶微分方程的函数。
四.关键字和特殊值 1.关键字 MATLAB定义的关键字,定义变量时不能与之同名。 通过iskeyword命令可以查看MATLAB中定义的所有 关键字。 在命令窗输入: >> iskeyword >> ans =
MATLAB程序设计
'break' 'case' 'catch'
第5章M文件程序设计基础基础
反之如要将注释变为程序,选择菜单Text>Uncomment。
MATLAB程序设计
第5章M文件程序设计基础基础
或者选中要加注释的内容,右击鼠标选择Comment,
将注释变为程序,则选中要转变的语句,右击鼠标选择 Uncomment即可。 14. 分号 ;
分号用于创建数组、抑制MATLAB输出或分隔一行内的 内的命令或语句。
进行说明。
MATLAB程序设计
第5章M文件程序设计基础基础
3.持续变量
持续变量只能在M文件函数内声明和使用,由关键字 persistent来定义。只有声明了该变量的函数才可以对 其进行访问。即使MATLAB调用其它函数,持续变量 仍将保留于内存中。
MATLAB程序设计
第5章M文件程序设计基础基础
MATLAB程序设计
第5章M文件程序设计基础基础
三. 变量类型
变量名 必须以字母开头,其后可以是字母、数字 或下划线。 变量名的大小写是有区别的,且不能与函数名或MATLAB 中的关键字重名。 MATLAB变量类型: 局部变量、 全局变量、 持续变量。
MATLAB程序设计
第5章M文件程序设计基础基础
%
百分号主要用于注释一行程序,有时也用于分类符的 转换,如sprintf('%s=%d',name,value)。 13. 百分扩号 %{%}
百分扩号用于注释一段程序,以%{开头,%}结束。 注释一段程序的另一种方法是利用菜单(或鼠标右击)实现:
选中要加注释的内容,选择菜单Text>Comment,
a= [3x3 double] 'Li Ming' [2.0000 + 3.0000i] [1x5 double]
MATLAB程序设计
第5章M文件程序设计基础基础
6. 单点号
.
单点号可用于结构的字段定义或对象方法的分类符。 7. 双点号 ..
双点号用于表示上一级目录。 8. 省略号 …
省略号是MATLAB中的续行符,当一行语句过长时 可以在其后加省略号并在下一行续行书写。 如,在命令窗输入:
MATLAB程序设计
第5章M文件程序设计基础基础
●MATLAB函数文件通常由一些部分组成: ◆函数定义行; ◆H1行:帮助文本的第一行; ◆帮助文本; ◆注释; ◆函数体;
MATLAB程序设计
第5章M文件程序设计基础基础
例: 计算n的阶乘的函数文件。
函数的返 回值 定义函数 的关键字
函数名
参数
function f=fact(n) %Compute a factorial value.
1.局部变量 局部变量存在于函数之中,它只在所在的函数内有效,
并且与MATLAB工作区间相互独立。
除了全局变量和持续变量,一个函数内定义的变量在 调用另一个函数时不会在内存中保留,也不会覆盖
MATLAB工作区间内的变量。
MATLAB程序设计
第5章M文件程序设计基础基础
2.全局变量
全局变量需要用关键字global进行说明。 需要在函数内和调用函数的脚本文件内用关键字global
MATLAB程序设计
第5章M文件程序设计基础基础
第5章 M文件程序设计基础
MATLAB程序设计
第5章M文件程序设计基础基础
5.1 5.2
M文件介绍 程序流程控制
5.3 5.4
数据输入输出 程序调试与优化
MATLAB程序设计
第5章M文件程序设计基础基础
MATLAB是基于矩阵数据结构的高级程序语言。 用户可通过编写M文件实现高级的程序设计, M文件的扩展名为.m,包括脚本文件和函数文件。 M文件的语法风格与C语言类似。
duc=zeros(2,1); %初始化变量duc duc(1)=uc(2); duc(2)=5-2*uc(2)-5*uc(1);
MATLAB程序设计
第5章M文件程序设计基础基础
二. P代码文件 对于函数或脚本文件,MATLAB可以对其进行预解析, 由M文件创建对应的P代码文件。 使用命令pcode可创建P代码文件。 如由命令pcode exm1
在UNIX系统中,只能用斜杠来表示路径。 另外在算术运算符中,/ 和 \ 分别表示矩阵右除和左除。
MATLAB程序设计
第5章M文件程序设计基础基础
18. 方扩号
[]
方扩号有以下几种用途:
●创建数组; ●串接数组; ●函数的声明和调用;
如,计算阶乘的函数声明和调用: function f=fact(n)
ans eps intmax intmin realmax realmin pi i,j inf NaN computer version
MATLAB程序设计
第5章M文件程序设计基础基础
五. 符号参考 1. 星号 *
星号通常用在文件操作中,作为文件名或路径名的 通配符,可以代表一个或多个字符。
2. “猴头”
MATLAB程序设计
第5章M文件程序设计基础基础
max=a;min=b; 创建程序文件如下: n=10; x=randn(1,n); [max,min]=funmm(x,n); 运行程序后,可查看结果 (在命令窗或工作区)。 在命令窗输入: >> x