MATLAB函数把一段可复用的逻辑打包成独立单元,接收输入、算出结果再返回。同一套求最大值的 if,不必每处重写一遍。
函数文件的基本结构
函数通常写在独立的 .m 文件里,文件名必须和函数名一致。新建 mymax.m:
function maxval = mymax(n1, n2, n3, n4, n5)
% 计算五个数的最大值
maxval = n1;
if n2 > maxval, maxval = n2; end
if n3 > maxval, maxval = n3; end
if n4 > maxval, maxval = n4; end
if n5 > maxval, maxval = n5; end
end- 以
function开头声明。 maxval是输出,n1到n5是输入。- function 行下面的注释是帮助文本,命令行输入
help mymax会显示出来。 - 用
end收尾。
调用:
mymax(34, 78, 89, 23, 11)ans = 89多输入多输出
函数可以一次返回多个结果。下面是解一元二次方程的 quadratic.m:
function [x1, x2] = quadratic(a, b, c)
d = sqrt(b^2 - 4*a*c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end调用时用方括号接收多个输出:
[r1, r2] = quadratic(2, 4, -4)r1 = 0.7321
r2 = -2.7321子函数
一个 .m 文件里,第一个函数是主函数,外部可以调用。后面还可以跟若干子函数,只能被本文件里的函数使用:
function [x1, x2] = quadratic2(a, b, c)
d = disc(a, b, c);
x1 = (-b + d) / (2*a);
x2 = (-b - d) / (2*a);
end
function d = disc(a, b, c) % 子函数:算判别式
d = sqrt(b^2 - 4*a*c);
end独立的工作区
函数内部的变量只活在自己的局部工作区,外部访问不到,函数结束后也会消失。若要跨函数共享数据,可以用 global 声明全局变量,但尽量少用,可读性会变差。
延伸思考
脚本没有输入输出边界,直接读写命令行工作区。函数有局部空间,输入输出写在声明里。一段逻辑换了数据还想再用,就适合收成函数。