M文件就是将各种处理问题的各种命令融合到一个文件中,该文件以.m为扩展名。
m文件分 类 :
| m文件内容 | 说明 |
|---|---|
| 函数定义行(只存在于函数文件中) | 定义函数名称,定义输入输出变量的数量、顺序 |
| H1行 | 对程序进行总结说明的一行 |
| Help文本 | 对程序的详细说明 |
| 注释 | 具体语句的功能注释、说明 |
| 函数体 | 进行实际计算的代码 |
function [out1,out2,...] = funName(in1,in2...)
function funName(in1,in2...) %无返回值
以上是函数定义语法,且保存函数文件时,matlab会默认以函数的名字来保存。
H1行紧跟着函数定义行,用%开始。因为是Help文本的第一行,所以称为H1行;
Help文本时为调用帮助命令而建立的文本,可以是连续多行的注释文本。
通过以下两个命令都可以显示帮助文本:
help filename
lookfor filename
单行注释:%
注释块:%{…}%
函数体是函数与脚本中计算和处理数据的主体,可以包含进行计算和赋值的语句、函数调用、循环和流 控制 语句,以及注释语句、空行等。使用disp函数显示函数输出结果。
此类型的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.
% elements.Nonvector 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也包括判断语句、循环语句和分支语句等。
在编写程序时,往往需要根据一定的条件进行判断,然后选择执行不同的语句。条件判断语句一般有以下三种使用形式。
if 表达式
执行语句
end
例如判断a是否是偶数:
a = 6;
if rem(a,2) == 0
disp('a是偶数')
end
if 表达式
表达式1
else
表达式2
end
if n < 0
disp('输入需要是一个正数');
elseif rem(n,2) == 0
a = n/2;
else
b = (n+1)/2;
end
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
语法结构
for 变量=表达式
执行语句
end
例如:
for a = [2,3,4,5]
disp(a)
end
语法结构:
while 表达式
执行语句
end
在使用while循环时,一定要在执行语句中设置 表达式 的值为false的情况,以免出现死循环。
i=1;
while i < 10
x(i) = i^3;
i = i + 1;
end
continue:一般与for循环、while循环一起使用,作用是结束此次循环,即跳过本次循环体中未执行的语句,然后进行下一轮循环。
break:通常在循环体或者在判断语句中,使用break语句,可以不必等待循环的自然结束,而可以根据循环的终止条件来跳出循环。
return:使得当前这个调用的函数正常退出。首先对特定条件进行判断,然后根据需要,调用return语句终止当前正在运行的函数。
input命令用来提示用户从键盘输入数据、字符串或者表达式,并等待输入值。
user_entry = input('prompt')
pause命令用于暂时中止程序的运行。
pause:导致M文件停止,等待用户按任意键继续运行;
pause(n):在继续执行前中止执行程序n秒,n可以是任意实数;
pause on:允许后续的pause命令中止程序的运行;
pause off:将保证后续的任何pause或pause(n)语句都不中止程序的运行。
编写如下一个函数:如果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
嵌套函数简而言之,就是函数内部再包含了一个或者是多个函数。
例如,名称为 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
匿名函数可以接受多个输入并返回一个输出。它们可能只包含一个可执行语句。
基本格式:
f = @(变量列表)表达式
例如,该匿名函数接受单个输入 x,并显式返回单个输出,即大小与包含平方值的 x 相同的数组:
sqr = @(x) x.^2;
执行结果:
a = sqr(5)
a =
25
根据变量作用的工作区划分:局部变量、全局变量和永久变量。
在函数中,变量默认为局部变量;这些变量存储在该函数独立的工作区中,与其他函数的变量以及主共工作区的变量分开存储。
全局变量可以在定义该变量的全部工作区中有效。若任何一个函数需要使用去全局变量,则必须首先声明全局变量
语法格式:
global var1 ... varN
特点:
persistent var1 ... varN
nargin:在函数体内,用于获取实际输入变量个数
nargin(fun):获取fun指定函数所定义的输入变量个数
nargout:在函数体内,用于获取实际输出变量个数
nargout(fun):获取fun指定函数所定义的输出变量个数
函数句柄是一种表示函数的 MATLAB 数据类型。函数句柄的典型用法是将函数传递给另一个函数。函数句柄可以表示命名函数或匿名函数。要创建函数句柄,请使用 @ 运算符。
例如,创建用于计算表达式 x2 – y2 的匿名函数的句柄:
f = @(x,y) (x.^2 - y.^2)
例如,创建一个指向用于计算平方数的匿名函数的句柄 sqr,并使用其句柄调用该匿名函数:
sqr = @(n) n.^2;
x = sqr(3)
x =
9
| 函数名 | 功能描述 |
|---|---|
| functions | 返回函数句柄的相关信息 |
| func2str | 根据函数句柄创建一个函数名的字符串 |
| str2func | 由一个函数名的字符串创建一个函数句柄 |
| isequal | 判断两个函数句柄是否为某一相同函数的句柄 |
例如:调用func2str和str2func函数
>> fhandle = @sin;
func2str(fhandle)
ans =
'sin'
>> fh = str2func('sin')
fh =
包含以下值的 function_handle:
@sin
未完待续。。。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删