文章目录
- 一、M文件
- 1.1m文件的基本内容
- 1.1.1函数定义行
- 1.1.2 H1行和Help文本
- 1.1.3 注释
- 1.1.4函数体
- 1.2 函数式M文件
- 二、流程控制
- 2.1if语句
- 2.1.1 if...end
- 2.1.2 if...else..end
- 2.1.3 if...elseif...else...end
- 2.2 switch语句
- 2.3 循环语句
- 2.3.1 for循环
- 2.3.2 while循环
- 2.4 continue、break、return语句
- 2.5 常用的人机交互命令
- 2.5.1输入提示命令Input
- 2.5.2 pause命令
- 三、函数
- 3.1普通函数
- 3.2 嵌套函数
- 3.3 匿名函数
- 四、函数的变量
- 4.1变量类型
- 4.1.1局部变量
- 4.1.2全局变量
- 4.1.3永久变量
- 4.2变量的传递
- 五、函数句柄
- 5.1函数句柄的创建
- 5.2 操作函数句柄的常用函数
在matlab中,用户可以直接在命令行中输入命令,以一种交互式的方式来编写程序。此方法适合命令行比较简单,输入比较方便,同时处理问题较少的情况。但需要处理复杂且任意出错的问题时,可以采用 M文件的形式进行编程。
一、M文件
M文件就是将各种处理问题的各种命令融合到一个文件中,该文件以.m为扩展名。
m文件分类:
- 脚本文件:不需要输入参数,也不需要输出参数,按照指定的顺序执行命令序列,将变量保存在基本Base工作区中。
- 函数文件:需要接受其他数据为输入参数,并且返回结果,将变量保存在自己单独的工作区中。
1.1m文件的基本内容
m文件内容 | 说明 |
---|---|
函数定义行(只存在于函数文件中) | 定义函数名称,定义输入输出变量的数量、顺序 |
H1行 | 对程序进行总结说明的一行 |
Help文本 | 对程序的详细说明 |
注释 | 具体语句的功能注释、说明 |
函数体 | 进行实际计算的代码 |
1.1.1函数定义行
function [out1,out2,...] = funName(in1,in2...)
function funName(in1,in2...) %无返回值
以上是函数定义语法,且保存函数文件时,matlab会默认以函数的名字来保存。
1.1.2 H1行和Help文本
H1行紧跟着函数定义行,用%开始。因为是Help文本的第一行,所以称为H1行;
Help文本时为调用帮助命令而建立的文本,可以是连续多行的注释文本。
通过以下两个命令都可以显示帮助文本:
help filename
lookfor filename
1.1.3 注释
单行注释:%
注释块:%{…}%
1.1.4函数体
函数体是函数与脚本中计算和处理数据的主体,可以包含进行计算和赋值的语句、函数调用、循环和流控制语句,以及注释语句、空行等。使用disp函数显示函数输出结果。
1.2 函数式M文件
此类型的M文件一般需要输入变量,并且有返回结果;也可以不带变量,,第一行是从function关键词开始。默认情况下,函数式M文件中的变量都是局部变量,仅在函数运行期间有效,函数运行结束后,这些变量将从工作区中清除。
average.m
function y = average(x)
% average mean of vector elements.
% average(x),where x is a vector, is the mean vector.
% input results in an error.
[m,n] = size(x);
if (~((m == 1) || (n == 1)) || (m == 1 && n == 1))
error('Input must be a vector')
end
y = sum(x)/length(x); %计算平均值
二、流程控制
Matlab的基本程序结构为顺序结构,即代码的执行顺序从上到下。同时matlab也包括判断语句、循环语句和分支语句等。
2.1if语句
在编写程序时,往往需要根据一定的条件进行判断,然后选择执行不同的语句。条件判断语句一般有以下三种使用形式。
2.1.1 if…end
if 表达式
执行语句
end
例如判断a是否是偶数:
a = 6;
if rem(a,2) == 0
disp('a是偶数')
end
2.1.2 if…else…end
if 表达式
表达式1
else
表达式2
end
2.1.3 if…elseif…else…end
if n < 0
disp('输入需要是一个正数');
elseif rem(n,2) == 0
a = n/2;
else
b = (n+1)/2;
end
2.2 switch语句
switch语句中如果某一个case中的条件语句为true,则其他的case语句将不会再继续执行,程序将直接跳至switch语句结尾。
switch var
case 1
disp('1')
case {2,3 4}
disp('2 or 3 or 4')
case 5
disp('5')
otherwise
disp('something else')
end
2.3 循环语句
2.3.1 for循环
语法结构
for 变量=表达式
执行语句
end
例如:
for a = [2,3,4,5]
disp(a)
end
2.3.2 while循环
语法结构:
while 表达式
执行语句
end
在使用while循环时,一定要在执行语句中设置表达式的值为false的情况,以免出现死循环。
i=1;
while i < 10
x(i) = i^3;
i = i + 1;
end
2.4 continue、break、return语句
continue:一般与for循环、while循环一起使用,作用是结束此次循环,即跳过本次循环体中未执行的语句,然后进行下一轮循环。
break:通常在循环体或者在判断语句中,使用break语句,可以不必等待循环的自然结束,而可以根据循环的终止条件来跳出循环。
return:使得当前这个调用的函数正常退出。首先对特定条件进行判断,然后根据需要,调用return语句终止当前正在运行的函数。
2.5 常用的人机交互命令
2.5.1输入提示命令Input
input命令用来提示用户从键盘输入数据、字符串或者表达式,并等待输入值。
user_entry = input('prompt')
2.5.2 pause命令
pause命令用于暂时中止程序的运行。
pause:导致M文件停止,等待用户按任意键继续运行;
pause(n):在继续执行前中止执行程序n秒,n可以是任意实数;
pause on:允许后续的pause命令中止程序的运行;
pause off:将保证后续的任何pause或pause(n)语句都不中止程序的运行。
三、函数
3.1普通函数
编写如下一个函数:如果x>0,那么y=2x;如果x=0,则y=0;其他情况y=-x;
function y = f(x)
if x > 0
y = 2*x;
elseif x == 0
y = 0;
else
y = -x;
end
end
执行测试结果:
>> f(2)
ans =
4
>> f(-1)
ans =
1
3.2 嵌套函数
嵌套函数简而言之,就是函数内部再包含了一个或者是多个函数。
例如,名称为 parent 的函数包含名称为 nestedfx 的嵌套函数:
function parent
disp('This is the parent function')
nestedfx
function nestedfx
disp('This is the nested function')
end
end
嵌套函数的调用:
- 该嵌套函数的直接上一层函数
- 同一母函数下的同级嵌套函数
- 任意低级别的函数
嵌套函数可以访问和修改它们所在的函数工作区中的变量。这意味着嵌套函数及包含它的函数都可以修改同一变量,不必将该变量作为参数传递。
function parent
x = 5;
z = nestfun;
function y = nestfun
y = x + 1;
end
z
end
输出结果:
>> f
z =
6
3.3 匿名函数
匿名函数可以接受多个输入并返回一个输出。它们可能只包含一个可执行语句。
基本格式:
f = @(变量列表)表达式
例如,该匿名函数接受单个输入 x,并显式返回单个输出,即大小与包含平方值的 x 相同的数组:
sqr = @(x) x.^2;
执行结果:
a = sqr(5)
a =
25
四、函数的变量
4.1变量类型
根据变量作用的工作区划分:局部变量、全局变量和永久变量。
4.1.1局部变量
在函数中,变量默认为局部变量;这些变量存储在该函数独立的工作区中,与其他函数的变量以及主共工作区的变量分开存储。
4.1.2全局变量
全局变量可以在定义该变量的全部工作区中有效。若任何一个函数需要使用去全局变量,则必须首先声明全局变量
语法格式:
global var1 ... varN
4.1.3永久变量
特点:
- 只能在函数文件内部定义
- 只有该变量从属的函数能够访问该变量
- 当函数运行结束时,该变量的值保留在内存中,因此再次调用该函数时,可以再次利用这些变量。
persistent var1 ... varN
4.2变量的传递
nargin:在函数体内,用于获取实际输入变量个数
nargin(fun):获取fun指定函数所定义的输入变量个数
nargout:在函数体内,用于获取实际输出变量个数
nargout(fun):获取fun指定函数所定义的输出变量个数
五、函数句柄
5.1函数句柄的创建
函数句柄是一种表示函数的 MATLAB 数据类型。函数句柄的典型用法是将函数传递给另一个函数。函数句柄可以表示命名函数或匿名函数。要创建函数句柄,请使用 @ 运算符。
例如,创建用于计算表达式 x2 – y2 的匿名函数的句柄:
f = @(x,y) (x.^2 - y.^2)
例如,创建一个指向用于计算平方数的匿名函数的句柄 sqr,并使用其句柄调用该匿名函数:
sqr = @(n) n.^2;
x = sqr(3)
x =
9
5.2 操作函数句柄的常用函数
函数名 | 功能描述 |
---|---|
functions | 返回函数句柄的相关信息 |
func2str | 根据函数句柄创建一个函数名的字符串 |
str2func | 由一个函数名的字符串创建一个函数句柄 |
isequal | 判断两个函数句柄是否为某一相同函数的句柄 |
例如:调用func2str和str2func函数
>> fhandle = @sin;
func2str(fhandle)
ans =
'sin'
>> fh = str2func('sin')
fh =
包含以下值的 function_handle:
@sin
未完待续。。。