题目
编写程序,演示匿名函数(Anonymous Functions)的语法构造:定义单变量函数 $f(x) = x^2 - 4x + 3$;定义双变量函数 $g(x, y) = \sqrt{x^2 + y^2}$;并演示将一维向量传给匿名函数进行向量化求值。
输入格式:无需外部输入。
输出格式:输出单点与数组代入匿名函数后的结果。
数据范围与约定:函数句柄与匿名函数。
思路与算法
1. 匿名函数语法f = @(arg1, arg2, ...) expression;。@ 是函数句柄操作符。
2. 匿名函数的点运算
在编写匿名函数表达式时,必须把所有乘除幂运算符写成点运算,例如 @(x) x.^2 - 4.*x + 3,这样该匿名函数不仅能处理单个数字,还能同时接受向量乃至矩阵批量计算。
3. 闭包捕获
匿名函数会在定义瞬间捕获当时工作区中的外部变量值(按值快照,后期修改外部变量不影响已创建的句柄)。
完整程序
% Octave / MATLAB 第66题:匿名函数定义与应用
% 1. 单变量匿名函数 (使用点运算保证支持向量)
f = @(x) x.^2 - 4.*x + 3;
% 2. 双变量欧几里得距离函数
dist = @(x, y) sqrt(x.^2 + y.^2);
% 单点测试
val_f1 = f(5);
val_d1 = dist(3, 4);
% 向量化批量计算测试
vec_x = [0, 1, 2, 3, 4];
val_f_vec = f(vec_x);
fprintf("f(5) = %.2f\n", val_f1);
fprintf("dist(3, 4) = %.2f\n", val_d1);
fprintf("输入向量: %s\n", mat2str(vec_x));
fprintf("向量批量代入 f(x): %s\n", mat2str(val_f_vec));运行示例
输出:
f(5) = 8.00
dist(3, 4) = 5.00
输入向量: [0 1 2 3 4]
向量批量代入 f(x): [3 0 -1 0 3]