MATLAB 函数
什么是函数
函数是一起执行任务的一组语句。在MATLAB中,函数在单独的文件中定义。文件的名称和函数的名称应该相同。
函数在它们自己的工作区(也称为本地工作区)中对变量进行操作,工作区与我们通过MATLAB命令提示符访问的工作区(称为基本工作区)是分开的。
函数可以接受多个输入参数,也可以返回多个输出参数。
函数语句的语法
function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)
举例
下面的mymax函数应该写入一个名为mymax.m的文件中。它接受5个数字作为参数,并返回数字的最大值。
创建一个函数文件,命名为mymax.m,并在其中键入以下代码 :
function max = mymax(n1, n2, n3, n4, n5)
%该函数接受5个数字作为参数,并返回数字的最大值
max = n1;
if(n2 > max)
max = n2;
end
if(n3 > max)
max = n3;
end
if(n4 > max)
max = n4;
end
if(n5 > max)
max = n5;
end
函数的第一行以function这个关键词开始。它给出了函数的名称和参数的顺序。在我们的示例中,mymax函数有五个输入参数和一个输出参数。
紧跟在function语句之后的注释行提供了帮助文本。这些行是在你输入以下命令 时会显示出来:
help mymax
MATLAB将执行上述语句并返回以下结果 :
该函数接受5个数字作为参数,并返回数字的最大值
调用函数的方式:
mymax(34, 78, 89, 23, 11) %括号内为接受的五个数据
%结果:
ans = 89
匿名函数
匿名函数类似于传统编程语言中的内联函数,在一个MATLAB语句中定义。它由一个单独的MATLAB表达式和任意数量的输入和输出参数组成。
可以直接在MATLAB命令行或函数或脚本中定义匿名函数。
通过这种方式可以创建简单的函数,而不必为它们创建文件。
从表达式创建匿名函数的语法:
f = @(arglist)expression
在下面的例子中,我们编写一个 叫power 匿名函数,它将接受两个数字作为输入,并返回第一个数字的第二个数字的幂。
power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)
结果:
result1 = 343
result2 = 7
result3 = 1.0000e-10
result4 = 9.5459
主函数和子函数
除了匿名函数之外的任何函数都必须在文件中定义。每个函数文件都包含一个必需的主函数, 主函数 首先出现,以及在主函数之后由它使用的任意数量的子函数 。
主函数可以从定义它们的文件外部(从命令行或其他函数)调用,但子函数不能从命令行或函数文件外部的其他函数调用。
子函数只对主函数和定义它们的函数文件中的其他子函数可见。
举例
写一个叫 quadratic的函数来计算二次方程的根。这个函数有三个输入,二次系数,线性系数和常数项。最红会返回根。
二次函数文件 quadratic.m将包含二次主函数和计算判别式的子函数盘。
创建一个 quadratic.m 文件。并在其中键入以下代码
function [x1,x2] = quadratic(a,b,c)
% 该函数返回二次方程的根
% 需要三个输入数据:x2和x的系数以及常数项
% 最后函数会返回方程的根
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % 二次方程结束
function dis = disc(a,b,c)
% 计算判别式的函数
dis = sqrt(b^2 - 4*a*c);
end % 子函数结束
quadratic(2,4,-4)
%结果:
ans = 0.7321
嵌套函数
可以在一个函数的体中定义函数,这些函数称为嵌套函数。嵌套函数包含任何其他函数的任何或所有组成。
嵌套函数在另一个函数的范围内定义,它们共享对包含函数的工作区的访问。
嵌套函数语法
function x = A(p1, p2)
...
B(p2)
function y = B(p3)
...
end
...
end
实例
对前面的例子重写二次函数,然而,这次disc()函数将是一个嵌套函数.
创建名为quadratic2.m的文件。并在其中键入以下代码 :
function [x1,x2] = quadratic2(a,b,c)
function disc % 嵌套函数
d = sqrt(b^2 - 4*a*c);
end % 函数disc结束
disc;
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % quadratic2函数结束
调用函数:
quadratic2(2,4,-4) %调用
%结果:
ans = 0.73205
私有函数
私有函数是只对有限的一组其他函数可见的主函数。如果不想公开函数的实现,可以将其创建为私有函数。
私有函数位于具有特殊名称Private的子文件夹中。它们只对父文件夹中的函数可见。
实例
还是重新写上面的二次函数。不过此时,disc()函数的判别式计算变成私有函数。
在工作目录中创建一个名为private的子文件夹。将下面代码写入里面的disc.m文件中。
function dis = disc(a,b,c)
% 计算判别式的函数
dis = sqrt(b^2 - 4*a*c);
end % 子函数结束
在工作目录中创建一个 quadratic3.m 文件并输入以下代码 :
function [x1,x2] = quadratic3(a,b,c)
% 该函数返回一个二次方程的根
% 接受3个输入参数,分别是x2和x的系数以及常数项
% 返回函数的根
d = disc(a,b,c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end % quadratic3结束
调用函数:
quadratic3(2,4,-4)
%结果:
ans = 0.73205
全局变量
全局变量可以由多个函数共享。如果要实现共享,需要在所有函数中将变量声明为全局变量。
如果希望从基本工作区访问该变量,则在命令行声明该变量。
全局声明必须在变量在函数中实际使用之前进行。在全局变量名中使用大写字母是一种很好的做法,可以将它们与其他变量区分开来。
实例
创建一个名为average.m的函数文件 :
function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end
创建一个脚本文件,并在其中键入以下代码 :
global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)
运行:
av = 35.500
评论已关闭,相关问题请到社区本站新建的社区讨论
对给您造成的不便表示抱歉!