Matlab入门-M语言

  • 格式:ppt
  • 大小:802.50 KB
  • 文档页数:34

下载文档原格式

  / 34
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

全局变量
定义语句 global A;
全局变量A允许不同的函数空间以及基本空间共享,但需要专 门定义,否则被当为局部变量;允许在多个函数中对同名变量 定义全局变量,所有的函数都可对其存取和修改。因此,定义 全局变量是函数间传递信息的一种手段。 除非与全局变量关联的所有工作空间都被删除,否则全局变量 依然存在; 对全局变量的定义必须在该变量被使用之前,并建议把全局变 量的定义放在函数的首行位置。
【例】 nargin用法示例
函数文件charray.m:
function fout=charray(a,b,c) if nargin==1 fout=a; elseif nargin==2 fout=a+b; elseif nargin==3 fout=(a*b*c)/2; end 命令文件exp.m: x=[1:3];y=[1;2;3]; charray (x) charray (x,y') charray (x,y,3) 执行后的输出是: ans = 1 2 3 ans = 2 4 6 ans = 21
MATLAB语句A
case 常量表达式b:
case 常量表达式m:
MATLAB语句B
MATLAB语句M
otherwise:
end
MATLAB语句N
switch语句实例
var = input('Input a Number:'); switch var case 1 disp(‘the input is 1') case {2,3,4} disp(‘the input is 2 or 3 or 4') case 5 disp(‘the input is 5') otherwise disp('something else') end
假如在函数文件中调用了一段脚本文件,那该脚本文件运行产
生的所有变量都存放于该函数的临时空间内,而不是存放在基 本空间。
注意函数文件的放置位置,一般自己的函数文件放在当前目录
;如对一个专题有了足够多的函数,可以生成一个工具箱,放 在一个固定的目录下,并在MATLAB中加入这个目录路径。
使用函数可以加快计算速度。MATLAB首次执行一个函数时,
在命令窗口中输入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2) 输出为: s= 5 注意:两个变量间 为空格
(二)变量的检测和传递
1、输入输出的检测 MATLAB函数的输入输出数目都可以变化,通过这个特性 ,可以实现一些自定义的功能。 nargin (Number of arguments input):输入变量数; nargout: 输出变量数; nargin(‘fun’): 获取指定函数的标称输入变量数; nargout(‘fun’): 获取指定函数的标称输出变量数; inputname(n): 给出第n个输入变量的实际调用变量名。 函数调用中可以使用少于规定的输入输出参数数目,但是不 能更多。nargin、nargout 和 inputname本身都是函数,而不 是变量,用户不能使用赋值语句改变他们的值。 目的:与程序流程控制指令配合,对于不同数目的输入输出 变量,函数可完成不同的任务;
MATLAB有两种工作方式
M文件
交互式的命令行工作方式:用于简单情形 M文件的程序工作方式:用于复杂、重复多的情形 包括: 脚本文件(没有输入参数,也不返回输出参数) 函数文件(可以输入参数,也可返回输出参数) M文件的建立、编辑、保存和运行 建立:File/new/M-file或在命令窗口edit,可打开M文件窗口 编辑和保存:M文件窗口中完成,扩展名.m 运行:M文件窗口中debug/run或F5即可 ,完后即普通命令
捕捉语句实例
矩阵乘法运算要求两矩阵的维数相容,否则会出错。先 求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。 程序如下:
A=[1,2,3;4,5,6]; B=[7,8,9;10,11,12]; try C=A*B; catch C=A.*B; end C lasterr %显示出错原因并退出
第三节
Matlab将忽略函数申明的名字而以保存文件名为准;
函数命名的规则与变量命名规则同,须以字母开头,其后
可以是字母、数字和下划线的组合;
建议编写H1行时,尽量采用英语,为以后的关键词检索
方便。
5、函数的特点
函数文件犹如一个黑箱,从外界只能看到其输入输出,内部的
处理藏而不见;
函数的输入输出变量的数量无限制,也可以没有输入和输出;
在命令文件 main.m 中调用函数文 件factor.m: for i=1:10 fac(i)=factor(i); end fac
程序运行结果是: fac = Columns 1 through 6 1 2 6 24 120 720 Columns 7 through 10 504 40320 362880 3628800
四、子函数和私有函数
1、子函数
Matlab中允许1个文件中包含多个函数的代码; 第一个出现的函数成为主函数,其他函数为子函数;
保存时所用函数文件名应与主函数同名;
外部程序只能调用主函数。
2、子函数的性质 每个子函数的第一行是申明行; 主函数的位置只能在最上面,但子函数的排列位置可以任 意改变; 子函数只能被处于同一文件的主函数和其他子函数调用; 同一文件的主函数、子函数的工作空间都是彼此独立的。 Help,lookfor等帮助指令都找不到子函数的任何帮助信息
它将打开的文件编译为存储器内部形式,加速了执行速度。普 通的m文件不被编译,在每次编译时,文件将逐行解释执行。
【实例】 利用函数的递归调用,求n!

function f=factor(n) if n<=1 f=1; else f=factor(n-1)*n; end return; %返回
为提高函数文件的可读性,建议用大写字符命名全局变量;
因全局变量损害了函数的封装特性,建议尽量不用。
【例】 全局变量应用示例
先建立函数文件wadd.m, 该函数将输入的参数加权相 加。 function f=wadd(x,y) %add two variable global ALPHA BETA f=ALPHA*x+BETA*y;
3、函数文件的一般结构 函数申明行(函数文件首行) H1行 在线文件帮助区 版权区 函数体
4、函数文件的几点说明
仅从运算的角度,函数申明行和函数体是必需的;
从结构上看,M脚本文件仅比M函数文件少一个“函数申
明行”,其余部分的结构和作用都一样;
函数定义名和保存文件名应尽量一致。如不一样,
6、错误捕捉语句(试探语句)
try 语句段 1 catch 语句段 2 end
本语句结构先试探性的执行try 和catch之间的语句,如果在此执 行的过程中遇到了错误,则把错 误信息赋值给lasterr变量,并放 弃执行这段语句,转而执行catch 和end之间的语句。 为程序员提供一种更为灵活的 编程方法。
一、脚本文件
M脚本文件(script file)特点:
是一串按用户意图排列成的Matlab指令集; 运行后所产生的变量都驻留在Matlab的基本工作空间。只要
用户不使用clear指令加以清除,且matlab命令窗不关闭;
如果想运行脚本文件,只需在Matlab窗口下输入脚本文件名
,按回车即可。
第一节
一、基本规则概要 1、变量和常量
M语言规则
字母开头,后跟字母数字或下划线; 大小写敏感。 2、注释(%后) 3、语句的分隔:分号、续行符
4、矩阵
标量、向量、数组(二维、三维、多维) 5、元素的访问
x(k)、a1(i,j)、c(end)、xyz(i,:)、y4z(:,j)
二、运算
点运算有:
.*
3、私有函数 位于名为private子目录的函数,他只能被上一层目录的函数
7、常用的警示指令
(1)error(‘message’) 显示出错信息,终止程序
(2)lasterr 显示matlab自动判断的最新出错原因并终止程序; (3)warning(‘message’) 显示警告信息,程序继续执行; (4)lastwarn 显示matlab自动给出的最新警告程序继续运行
二、函数文件
函数文件是另一种形式的M文件,每一个函数文件都定义一个 函数。事实上,MATLAB提供的标准函数和命令大部分都是由 函数文件定义的。 把一个比较大的任务分解为多个比较小的任务,它们之间通 过调用实现参数传递。 1、函数的定义 函数文件由function语句引导,其格式为: [out1,out2,…]=function(in1,in2,…) 2、函数文件的规则 (1)函数名称和文件名必须相同; (2)一个函数可以嵌套,也可以调用其它的函数,甚至调用 自己(也就是递归调用)。
for语句实例
例: 使用for语句求解
sum = 0; for i = 1:1000 sum = sum+i; end
五、其它流程控制命令 1、break 退出当前的循环结构运行
2、continue 用于结束本次for 或 while 循环,与break命令不同的是,该 命令只结束本次循环而继续下一次循环
3、input 提示用户从键盘输入数值、字符串和元胞数组,并接受该输入 如: a=input(‘input a number’) %输入一个数值 b=input(‘input a string’,‘s’) %输入一个字符串
break语句实例 i = 0; j = 0; k = 0; for i = 1:2 for j = 1:2 for k = 1:2 if (k == 2) disp('退出循环'); break; end str = sprintf('I = %d , J = %d , K = %d',i,j,k); %Write formatted data to string disp(str); end end end disp('程序运行结束');
三、参数传递
(一)参数传递有两种方式:
1、形参与实参间的传递(形实结合) 在MATLAB中,参数具有自己的专有工作空间。函数中的 参数和命令行参数不在一个空间中,它们的唯一联系为函数的 输入输出变量。输入参数在函数中是可读的,但任何改动不会 传递回上一级空间。
2、全局变量 使用global命令可以将变量说明为全局的,则在函数、命令 行等都可以共享这些变量。
./ .^ .\
第二节
M语言的流程控制
具体包括:
if语句、switch语句
while语句、for语句 break语句
一、if语句
if end (关系运算表达式) MATLAB语句 if (关系运算表达式a) MATLAB语句A elseif (关系运算表达式b) if (关系运算表达式) MATLAB语句A else MATLAB语句B end MATLAB语句B
三、while语句
while (表达式)
MATLAB语句
end
while语句实例
例: 使用while语句求解 i = 1; sum = 0; while ( i <= 1000 ) sum = sum+i; i = i+1; end
四、for语句
for index = start:step:end MATLAB语句 end
Matlab允许使用比申明变量少的输入输出变量,实现对函数
的调用;
函数运行时,Matlab为它开辟临时工作空间,所有变量均存
放其中。执行完最后一条指令或者遇到return指令时,输出函 数输出值,并清掉临时空间的所有中间变量;即函数空间相对 基本空间而言是独立的、临时的。可以产生任意多个临时函数 空间;
else (关系运算表达式c)
… end MATLAB语句C
if语句实例 clear all I=1; J=2; if I == J A(I,J) = 2; elseif abs(I-J) == 1 A(I,J) = 1; else A(I,J) = 0; end
二、swenku.baidu.comitch语句
switch (表达式) case 常量表达式a: