函数基础 #
一、函数定义 #
1.1 基本语法 #
matlab
function [output1, output2, ...] = function_name(input1, input2, ...)
% 函数体
end
1.2 简单函数 #
matlab
% 保存为 double_value.m
function result = double_value(x)
% DOUBLE_VALUE 返回输入值的两倍
% result = double_value(x) 返回x的两倍
result = x * 2;
end
% 调用
y = double_value(5); % y = 10
1.3 多输入参数 #
matlab
function result = add(a, b)
% ADD 两数相加
% result = add(a, b) 返回a和b的和
result = a + b;
end
% 调用
sum = add(3, 5); % sum = 8
1.4 多输出参数 #
matlab
function [sum, diff, prod] = calculate(a, b)
% CALCULATE 计算两数的和、差、积
% [sum, diff, prod] = calculate(a, b) 返回a和b的和、差、积
sum = a + b;
diff = a - b;
prod = a * b;
end
% 调用
[s, d, p] = calculate(10, 3);
% s = 13, d = 7, p = 30
% 只获取部分输出
[sum_only, ~] = calculate(10, 3); % 只获取和
1.5 无参数函数 #
matlab
function greet()
% GREET 打印问候语
disp('Hello, MATLAB!');
end
% 调用
greet();
二、函数文件 #
2.1 单函数文件 #
每个.m文件通常包含一个主函数,文件名与函数名相同:
text
my_function.m
└── function result = my_function(x)
...
end
2.2 局部函数 #
一个文件中可以有多个局部函数:
matlab
% 保存为 main_function.m
function result = main_function(x)
% 主函数
result = helper1(x) + helper2(x);
end
function r = helper1(x)
% 局部函数1(只在文件内可见)
r = x * 2;
end
function r = helper2(x)
% 局部函数2(只在文件内可见)
r = x + 10;
end
2.3 嵌套函数 #
matlab
function result = outer(x)
% 外部函数
y = x * 2;
function r = inner(z)
% 嵌套函数(可以访问外部变量)
r = z + y;
end
result = inner(x);
end
三、参数处理 #
3.1 输入参数验证 #
matlab
function result = process_data(data, scale)
% PROCESS_DATA 处理数据
% 检查参数数量
if nargin < 1
error('需要输入数据');
end
% 设置默认值
if nargin < 2
scale = 1;
end
% 检查参数类型
if ~isnumeric(data)
error('数据必须是数值类型');
end
result = data * scale;
end
3.2 nargin和nargout #
matlab
function result = flexible_function(a, b, c)
% FLEXIBLE_FUNCTION 演示参数数量检测
fprintf('输入参数数量: %d\n', nargin);
fprintf('输出参数数量: %d\n', nargout);
if nargin == 1
result = a;
elseif nargin == 2
result = a + b;
else
result = a + b + c;
end
end
3.3 可变参数 #
matlab
function result = sum_all(varargin)
% SUM_ALL 计算所有输入参数的和
result = 0;
for i = 1:nargin
result = result + varargin{i};
end
end
% 调用
total = sum_all(1, 2, 3, 4, 5); % total = 15
3.4 可变输出 #
matlab
function varargout = multi_output(n)
% MULTI_OUTPUT 返回n个输出值
for i = 1:n
varargout{i} = i^2;
end
end
% 调用
[a, b, c] = multi_output(3); % a=1, b=4, c=9
四、函数作用域 #
4.1 局部变量 #
matlab
function result = my_function(x)
% 局部变量:只在函数内可见
local_var = 10;
result = x + local_var;
end
% 在函数外部无法访问local_var
4.2 全局变量 #
matlab
% 在脚本中
global COUNTER
COUNTER = 0;
% 在函数中
function increment()
global COUNTER
COUNTER = COUNTER + 1;
fprintf('Counter: %d\n', COUNTER);
end
% 调用
increment(); % Counter: 1
increment(); % Counter: 2
4.3 持久变量 #
matlab
function count = counter()
% COUNTER 累加计数器
persistent call_count;
if isempty(call_count)
call_count = 0;
end
call_count = call_count + 1;
count = call_count;
end
% 调用
counter() % 1
counter() % 2
counter() % 3
五、函数文档 #
5.1 标准注释格式 #
matlab
function result = calculate_bmi(weight, height)
% CALCULATE_BMI 计算身体质量指数
% result = calculate_bmi(weight, height) 计算BMI值
%
% 输入参数:
% weight - 体重(千克)
% height - 身高(米)
%
% 输出参数:
% result - BMI值
%
% 示例:
% bmi = calculate_bmi(70, 1.75);
%
% BMI分类:
% < 18.5 体重过轻
% 18.5-24.9 正常
% 25-29.9 超重
% >= 30 肥胖
%
% 另见: calculate_ideal_weight
result = weight / (height^2);
end
5.2 查看帮助 #
matlab
% 查看函数帮助
help calculate_bmi
% 查看函数代码
type calculate_bmi
% 查看函数位置
which calculate_bmi
六、实用示例 #
6.1 统计函数 #
matlab
function stats = get_statistics(data)
% GET_STATISTICS 计算数据的统计信息
stats.mean = mean(data);
stats.std = std(data);
stats.min = min(data);
stats.max = max(data);
stats.median = median(data);
stats.count = length(data);
end
% 调用
data = randn(100, 1);
s = get_statistics(data);
fprintf('均值: %.4f, 标准差: %.4f\n', s.mean, s.std);
6.2 文件处理函数 #
matlab
function success = save_results(filename, data, timestamp)
% SAVE_RESULTS 保存结果到文件
if nargin < 3
timestamp = datestr(now, 'yyyy-mm-dd HH:MM:SS');
end
fid = fopen(filename, 'w');
if fid == -1
success = false;
return;
end
fprintf(fid, '结果报告\n');
fprintf(fid, '生成时间: %s\n', timestamp);
fprintf(fid, '数据点数: %d\n', length(data));
fprintf(fid, '\n数据:\n');
fprintf(fid, '%.6f\n', data);
fclose(fid);
success = true;
end
6.3 验证函数 #
matlab
function [valid, message] = validate_input(data, min_val, max_val)
% VALIDATE_INPUT 验证输入数据
if nargin < 2
min_val = -Inf;
end
if nargin < 3
max_val = Inf;
end
if isempty(data)
valid = false;
message = '数据为空';
return;
end
if ~isnumeric(data)
valid = false;
message = '数据必须是数值类型';
return;
end
if any(data < min_val) || any(data > max_val)
valid = false;
message = sprintf('数据超出范围 [%.2f, %.2f]', min_val, max_val);
return;
end
valid = true;
message = '验证通过';
end
七、最佳实践 #
7.1 函数设计原则 #
matlab
% 1. 单一职责:一个函数只做一件事
% 2. 命名清晰:函数名描述其功能
% 3. 参数合理:避免过多参数
% 4. 文档完整:包含帮助注释
% 好的例子
function distance = euclidean_distance(point1, point2)
% EUCLIDEAN_DISTANCE 计算两点间的欧几里得距离
diff = point1 - point2;
distance = sqrt(sum(diff.^2));
end
% 不好的例子
function result = calc(a, b, c, d, e, f)
% 参数太多,功能不明确
end
7.2 错误处理 #
matlab
function result = safe_divide(a, b)
% SAFE_DIVIDE 安全除法
if b == 0
error('除数不能为零');
end
result = a / b;
end
% 使用try-catch
function result = safe_operation(a, b)
try
result = a / b;
catch ME
warning('操作失败: %s', ME.message);
result = NaN;
end
end
八、总结 #
本章学习了:
- 函数定义:基本语法、多输入输出
- 函数文件:单函数、局部函数、嵌套函数
- 参数处理:nargin、nargout、varargin、varargout
- 作用域:局部变量、全局变量、持久变量
- 函数文档:标准注释格式
- 最佳实践:设计原则、错误处理
下一章将学习参数传递的详细内容。
最后更新:2026-03-27