Matlab入门-M语言
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
end
x=[1:3];y=[1;2;3]; charray (x) charray (x,y') charray (x,y,3)
执行后的输出是: ans = 123
ans =
246 ans =
21
第29页,共34页。
四、子函数和私有函数
1、子函数 ✓ Matlab中允许1个文件中包含多个函数的代码;
第15页,共34页。
捕捉语句实例
矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩 阵的乘积,若出错,则自动转去求两矩阵的点乘。
程序如下:
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
%显示出错原因并退出
else A(I,J) = 0;
end
第5页,共34页。
二、switch语句
switch (表达式)
case 常量表达式a: MATLAB语句A case 常量表达式b: MATLAB语句B
case 常量表达式m: MATLAB语句M
otherwise:
MATLAB语句N
end
第6页,共34页。
switch语句实例
第17页,共34页。
一、脚本文件
M脚本文件(script file)特点: ➢ 是一串按用户意图排列成的Matlab指令集; ➢ 运行后所产生的变量都驻留在Matlab的基本工作空间。只要用户不使用
clear指令加以清除,且matlab命令窗不关闭; ➢ 如果想运行脚本文件,只需在Matlab窗口下输入脚本文件名,按
function f=wadd(x,y)
%add two variable global ALPHA BETA f=ALPHA*x+BETA*y;
在命令窗口中输入: global ALPHA BETA ALPHA=1;
BETA=2; s=wadd(1,2)
输出为:
s=
5
注意:两个变量间为 空格
第27页,共34页。
end
第9页,共34页。
四、for语句
for index = start:step:end
MATLAB语句 end
第10页,共34页。
for语句实例
例: 使用for语句求解 sum = 0; for i = 1:1000 sum = sum+i; end
第11页,共34页。
五、其它流程控制命令
✓ 第一个出现的函数成为主函数,其他函数为子函数; ✓ 保存时所用函数文件名应与主函数同名;
第12页,共34页。
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);
[out1,out2,…]=function(in1,in2,…)
2、函数文件的规则 (1)函数名称和文件名必须相同; (2)一个函数可以嵌套,也可以调用其它的函数,甚至调用自己
(也就是递归调用)。
第19页,共34页。
3、函数文件的一般结构 函数申明行(函数文件首行)
H1行 在线文件帮助区 版权区 函数体
if (关系运算表达式a) MATLAB语句A
elseif (关系运算表达式b) MATLAB语句B
else (关系运算表达式c) … MATLAB语句C
end
第4页,共34页。
if语句实例
clear all
I=1; J=2;
if I == J
A(I,J) = 2;
elseif abs(I-J) == 1 A(I,J) = 1;
二、运算
点运算有: .*
./ .\
.^
第2页,共34页。
第二节 M语言的流程控制
具体包括:
if语句、switch语句 while语句、for语句
break语句
第3页,共34页。
一、if语句
if (关系运算表达式) MATLAB语句
end
if (关系运算表达式) MATLAB语句A
else
MATLAB语句B end
(二)变量的检测和传递
1、输入输出的检测 MATLAB函数的输入输出数目都可以变化,通过这个特性,可
以实现一些自定义的功能。
✓ nargin (Number of arguments input):输入变量数; ✓ nargout: 输出变量数; ✓ nargin(‘fun’): 获取指定函数的标称输入变量数; ✓ nargout(‘fun’): 获取指定函数的标称输出变量数;
第28页,共34页。
【例】 nargin用法示例
函数文件charray.m:
命令文件exp.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;
✓ inputname(n): 给出第n个输入变量的实际调用变量名。
函数调用中可以使用少于规定的输入输出参数数目,但是不能更 多。nargin、nargout 和 inputname本身都是函数,而不是变量,用 户不能使用赋值语句改变他们的值。
目的:与程序流程控制指令配合,对于不同数目的输入输出变量,函数 可完成不同的任务;
第23页,共34页。
【实例】 利用函数的递归调用,求n!
function f=factor(n)
if n<=1
f=1;
else
f=factor(n-1)*n;
end
return;
%返回
在 命 令 文 件 main.m 中 调 用 函 数 文 件 factor.m:
for i=1:10
第20页,共34页。
4、函数文件的几点说明
➢ 仅从运算的角度,函数申明行和函数体是必需的;
➢ 从结构上看,M脚本文件仅比M函数文件少一个“函数申明行”
,其余部分的结构和作用都一样;
➢ 函数定义名和保存文件名应尽量一致。如不一样,Matlab将忽 略函数申明的名字而以保存文件名为准;
➢ 函数命名的规则与变量命名规则同,须以字母开头,其后可以是 字母、数字和下划线的组合;
除非与全局变量关联的所有工作空间都被删除,否则全局变量依然存 在;
对全局变量的定义必须在该变量被使用之前,并建议把全局变量 的定义放在函数的首行位置。
为提高函数文件的可读性,建议用大写字符命名全局变量;
因全局变量损害了函数的封装特性,建议尽量不用。
第26页,共34页。
【例】 全局变量应用示例
先建立函数文件wadd.m,该函 数将输入的参数加权相加。
为程序员提供一种更为灵活的编程方 法。
第14页,共34页。
7、常用的警示指令
(1)error(‘message’) 显示出错信息,终止程序
(2)lasterr 显示matlab自动判断的最新出错原因并终止程序;
(3)warning(‘message’) 显示警告信息,程序继续执行;
(4)lastwarn 显示matlab自动给出的最新警告程序继续运行
回车即可。
第18页,共34页。
二、函数文件
函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。
事实上,MATLAB提供的标准函数和命令大部分都是由函数文件定义的。 把一个比较大的任务分解为多个比较小的任务,它们之间通过调用实现参
数传递。
1、函数的定义 函数文件由function语句引导,其格式为:
1、break
退出当前的循环结构运行
2、continue 用于结束本次for 或 while 循环,与break命令不同的是,该命令只
结束本次循环而继续下一次循环
3、input
提示用户从键盘输入数值、字符串和元胞数组,并接受该输入
如: a=input(‘input a number’) %输入一个数值 b=input(‘input a string’,‘s’) %输入一个字符串
第16页,共34页。
第三节 M文件
✓MATLAB有两种工作方式
交互式的命令行工作方式:用于简单情形
M文件的程序工作方式:用于复杂、重复多的情形 包括: 脚本文件(没有输入参数,也不返回输出参数)
函数文件(可以输入参数,也可返回输出参数) ✓M文件的建立、编辑、保存和运行
建立:File/new/M-file或在命令窗口edit,可打开M文件窗口 编辑和保存:M文件窗口中完成,扩展名.m 运行:M文件窗口中debug/run或F5即可 ,完后即普通命令
➢ 建议编写H1行时,尽量采用英语,为以后的关键词检索方便。
第21页,共34页。
5、函数的特点
✓ 函数文件犹如一个黑箱,从外界只能看到其输入输出,内部的处理藏而不 见;
✓ 函数的输入输出变量的数量无限制,也可以没有输入和输出; ✓ Matlab允许使用比申明变量少的输入输出变量,实现对函数的调
用; ✓ 函数运行时,Matlab为它开辟临时工作空间,所有变量均存放其
第一节 M语言规则
一、基本规则概要 1、变量和常量 字母开头,后跟字母数字或下划线; 大小写敏感。 2、注释(%后) 3、语句的分隔:分号、续行符
4、矩阵 标量、向量、数组(二维、三维、多维)
5、元素的访问 x(k)、a1(i,j)、c(end)、xyz(i,:)、y4z(:,j)
第1页,共34页。
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
第24页,共34页。
三、参数传递
(一)参数传递有两种方式:
1、形参与实参间的传递(形实结合) 在MATLAB中,参数具有自己的专有工作空间。函数中的参数和命令
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'到return指令时,输出函数输出值,
并清掉临时空间的所有中间变量;即函数空间相对基本空间而言是独立的 、临时的。可以产生任意多个临时函数空间;
第22页,共34页。
✓ 假如在函数文件中调用了一段脚本文件,那该脚本文件运行产生 的所有变量都存放于该函数的临时空间内,而不是存放在基本空 间。
%Write formatted data to string disp(str);
end end end disp('程序运行结束');
第13页,共34页。
6、错误捕捉语句(试探语句)
try 语句段 1
catch
语句段 2
end
本语句结构先试探性的执行try和 catch之间的语句,如果在此执行的 过程中遇到了错误,则把错误信息 赋值给lasterr变量,并放弃执行这段 语句,转而执行catch和end之间的语 句。
disp('something else') end
第7页,共34页。
三、while语句
while (表达式) MATLAB语句
end
第8页,共34页。
while语句实例
例: 使用while语句求解 i = 1;
sum = 0;
while ( i <= 1000 ) sum = sum+i;
i = i+1;
行参数不在一个空间中,它们的唯一联系为函数的输入输出变量。输入参数 在函数中是可读的,但任何改动不会传递回上一级空间。
2、全局变量
使用global命令可以将变量说明为全局的,则在函数、命令行等都可以
共享这些变量。
第25页,共34页。
定义语句
全局变量
global A;
全局变量A允许不同的函数空间以及基本空间共享,但需要专门定义, 否则被当为局部变量;允许在多个函数中对同名变量定义全局变量, 所有的函数都可对其存取和修改。因此,定义全局变量是函数间传递 信息的一种手段。
✓ 注意函数文件的放置位置,一般自己的函数文件放在当前目录;如对一个 专题有了足够多的函数,可以生成一个工具箱,放在一个固定的目录下,
并在MATLAB中加入这个目录路径。 ✓ 使用函数可以加快计算速度。MATLAB首次执行一个函数时,它将
打开的文件编译为存储器内部形式,加速了执行速度。普通的m 文件不被编译,在每次编译时,文件将逐行解释执行。
x=[1:3];y=[1;2;3]; charray (x) charray (x,y') charray (x,y,3)
执行后的输出是: ans = 123
ans =
246 ans =
21
第29页,共34页。
四、子函数和私有函数
1、子函数 ✓ Matlab中允许1个文件中包含多个函数的代码;
第15页,共34页。
捕捉语句实例
矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩 阵的乘积,若出错,则自动转去求两矩阵的点乘。
程序如下:
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
%显示出错原因并退出
else A(I,J) = 0;
end
第5页,共34页。
二、switch语句
switch (表达式)
case 常量表达式a: MATLAB语句A case 常量表达式b: MATLAB语句B
case 常量表达式m: MATLAB语句M
otherwise:
MATLAB语句N
end
第6页,共34页。
switch语句实例
第17页,共34页。
一、脚本文件
M脚本文件(script file)特点: ➢ 是一串按用户意图排列成的Matlab指令集; ➢ 运行后所产生的变量都驻留在Matlab的基本工作空间。只要用户不使用
clear指令加以清除,且matlab命令窗不关闭; ➢ 如果想运行脚本文件,只需在Matlab窗口下输入脚本文件名,按
function f=wadd(x,y)
%add two variable global ALPHA BETA f=ALPHA*x+BETA*y;
在命令窗口中输入: global ALPHA BETA ALPHA=1;
BETA=2; s=wadd(1,2)
输出为:
s=
5
注意:两个变量间为 空格
第27页,共34页。
end
第9页,共34页。
四、for语句
for index = start:step:end
MATLAB语句 end
第10页,共34页。
for语句实例
例: 使用for语句求解 sum = 0; for i = 1:1000 sum = sum+i; end
第11页,共34页。
五、其它流程控制命令
✓ 第一个出现的函数成为主函数,其他函数为子函数; ✓ 保存时所用函数文件名应与主函数同名;
第12页,共34页。
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);
[out1,out2,…]=function(in1,in2,…)
2、函数文件的规则 (1)函数名称和文件名必须相同; (2)一个函数可以嵌套,也可以调用其它的函数,甚至调用自己
(也就是递归调用)。
第19页,共34页。
3、函数文件的一般结构 函数申明行(函数文件首行)
H1行 在线文件帮助区 版权区 函数体
if (关系运算表达式a) MATLAB语句A
elseif (关系运算表达式b) MATLAB语句B
else (关系运算表达式c) … MATLAB语句C
end
第4页,共34页。
if语句实例
clear all
I=1; J=2;
if I == J
A(I,J) = 2;
elseif abs(I-J) == 1 A(I,J) = 1;
二、运算
点运算有: .*
./ .\
.^
第2页,共34页。
第二节 M语言的流程控制
具体包括:
if语句、switch语句 while语句、for语句
break语句
第3页,共34页。
一、if语句
if (关系运算表达式) MATLAB语句
end
if (关系运算表达式) MATLAB语句A
else
MATLAB语句B end
(二)变量的检测和传递
1、输入输出的检测 MATLAB函数的输入输出数目都可以变化,通过这个特性,可
以实现一些自定义的功能。
✓ nargin (Number of arguments input):输入变量数; ✓ nargout: 输出变量数; ✓ nargin(‘fun’): 获取指定函数的标称输入变量数; ✓ nargout(‘fun’): 获取指定函数的标称输出变量数;
第28页,共34页。
【例】 nargin用法示例
函数文件charray.m:
命令文件exp.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;
✓ inputname(n): 给出第n个输入变量的实际调用变量名。
函数调用中可以使用少于规定的输入输出参数数目,但是不能更 多。nargin、nargout 和 inputname本身都是函数,而不是变量,用 户不能使用赋值语句改变他们的值。
目的:与程序流程控制指令配合,对于不同数目的输入输出变量,函数 可完成不同的任务;
第23页,共34页。
【实例】 利用函数的递归调用,求n!
function f=factor(n)
if n<=1
f=1;
else
f=factor(n-1)*n;
end
return;
%返回
在 命 令 文 件 main.m 中 调 用 函 数 文 件 factor.m:
for i=1:10
第20页,共34页。
4、函数文件的几点说明
➢ 仅从运算的角度,函数申明行和函数体是必需的;
➢ 从结构上看,M脚本文件仅比M函数文件少一个“函数申明行”
,其余部分的结构和作用都一样;
➢ 函数定义名和保存文件名应尽量一致。如不一样,Matlab将忽 略函数申明的名字而以保存文件名为准;
➢ 函数命名的规则与变量命名规则同,须以字母开头,其后可以是 字母、数字和下划线的组合;
除非与全局变量关联的所有工作空间都被删除,否则全局变量依然存 在;
对全局变量的定义必须在该变量被使用之前,并建议把全局变量 的定义放在函数的首行位置。
为提高函数文件的可读性,建议用大写字符命名全局变量;
因全局变量损害了函数的封装特性,建议尽量不用。
第26页,共34页。
【例】 全局变量应用示例
先建立函数文件wadd.m,该函 数将输入的参数加权相加。
为程序员提供一种更为灵活的编程方 法。
第14页,共34页。
7、常用的警示指令
(1)error(‘message’) 显示出错信息,终止程序
(2)lasterr 显示matlab自动判断的最新出错原因并终止程序;
(3)warning(‘message’) 显示警告信息,程序继续执行;
(4)lastwarn 显示matlab自动给出的最新警告程序继续运行
回车即可。
第18页,共34页。
二、函数文件
函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。
事实上,MATLAB提供的标准函数和命令大部分都是由函数文件定义的。 把一个比较大的任务分解为多个比较小的任务,它们之间通过调用实现参
数传递。
1、函数的定义 函数文件由function语句引导,其格式为:
1、break
退出当前的循环结构运行
2、continue 用于结束本次for 或 while 循环,与break命令不同的是,该命令只
结束本次循环而继续下一次循环
3、input
提示用户从键盘输入数值、字符串和元胞数组,并接受该输入
如: a=input(‘input a number’) %输入一个数值 b=input(‘input a string’,‘s’) %输入一个字符串
第16页,共34页。
第三节 M文件
✓MATLAB有两种工作方式
交互式的命令行工作方式:用于简单情形
M文件的程序工作方式:用于复杂、重复多的情形 包括: 脚本文件(没有输入参数,也不返回输出参数)
函数文件(可以输入参数,也可返回输出参数) ✓M文件的建立、编辑、保存和运行
建立:File/new/M-file或在命令窗口edit,可打开M文件窗口 编辑和保存:M文件窗口中完成,扩展名.m 运行:M文件窗口中debug/run或F5即可 ,完后即普通命令
➢ 建议编写H1行时,尽量采用英语,为以后的关键词检索方便。
第21页,共34页。
5、函数的特点
✓ 函数文件犹如一个黑箱,从外界只能看到其输入输出,内部的处理藏而不 见;
✓ 函数的输入输出变量的数量无限制,也可以没有输入和输出; ✓ Matlab允许使用比申明变量少的输入输出变量,实现对函数的调
用; ✓ 函数运行时,Matlab为它开辟临时工作空间,所有变量均存放其
第一节 M语言规则
一、基本规则概要 1、变量和常量 字母开头,后跟字母数字或下划线; 大小写敏感。 2、注释(%后) 3、语句的分隔:分号、续行符
4、矩阵 标量、向量、数组(二维、三维、多维)
5、元素的访问 x(k)、a1(i,j)、c(end)、xyz(i,:)、y4z(:,j)
第1页,共34页。
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
第24页,共34页。
三、参数传递
(一)参数传递有两种方式:
1、形参与实参间的传递(形实结合) 在MATLAB中,参数具有自己的专有工作空间。函数中的参数和命令
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'到return指令时,输出函数输出值,
并清掉临时空间的所有中间变量;即函数空间相对基本空间而言是独立的 、临时的。可以产生任意多个临时函数空间;
第22页,共34页。
✓ 假如在函数文件中调用了一段脚本文件,那该脚本文件运行产生 的所有变量都存放于该函数的临时空间内,而不是存放在基本空 间。
%Write formatted data to string disp(str);
end end end disp('程序运行结束');
第13页,共34页。
6、错误捕捉语句(试探语句)
try 语句段 1
catch
语句段 2
end
本语句结构先试探性的执行try和 catch之间的语句,如果在此执行的 过程中遇到了错误,则把错误信息 赋值给lasterr变量,并放弃执行这段 语句,转而执行catch和end之间的语 句。
disp('something else') end
第7页,共34页。
三、while语句
while (表达式) MATLAB语句
end
第8页,共34页。
while语句实例
例: 使用while语句求解 i = 1;
sum = 0;
while ( i <= 1000 ) sum = sum+i;
i = i+1;
行参数不在一个空间中,它们的唯一联系为函数的输入输出变量。输入参数 在函数中是可读的,但任何改动不会传递回上一级空间。
2、全局变量
使用global命令可以将变量说明为全局的,则在函数、命令行等都可以
共享这些变量。
第25页,共34页。
定义语句
全局变量
global A;
全局变量A允许不同的函数空间以及基本空间共享,但需要专门定义, 否则被当为局部变量;允许在多个函数中对同名变量定义全局变量, 所有的函数都可对其存取和修改。因此,定义全局变量是函数间传递 信息的一种手段。
✓ 注意函数文件的放置位置,一般自己的函数文件放在当前目录;如对一个 专题有了足够多的函数,可以生成一个工具箱,放在一个固定的目录下,
并在MATLAB中加入这个目录路径。 ✓ 使用函数可以加快计算速度。MATLAB首次执行一个函数时,它将
打开的文件编译为存储器内部形式,加速了执行速度。普通的m 文件不被编译,在每次编译时,文件将逐行解释执行。