Matlab可以通过function去定义一些功能函数,这使得代码变得简洁和高效。但是如果遇到的是一些简单的数学公式组成的函数表达式,继续用function去定义函数,似乎显得有些冗杂和多余。这时候,就可以尝试运用匿名函数了。
匿名函数的基本格式
handle = @(arglist)anonymous_function
其中handle为调用匿名函数时使用的名字。arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。anonymous_function为匿名函数的表达式。
匿名函数的案例
按照基本格式,我们做一个小案例来测试。
案例场景
这里测试的是 RBF径向基函数,他的表达式是是这样的:
其中$ \mathbf{X}$ 是样本点,\(\mathbf{X}_{i}\) 是测试点,\(r\) 是核参数。
设样本点为0,测试点为-5到5,核参数分别取0.2、0.5、1.0、2.0。对比四种情况下的曲线变化规律。
案例代码
clc,clear,close all;
% 定义匿名函数
K_RBF = @(x,xi,r) exp(-(x-xi).^2./(r.^2));
% 设置变量取值范围
xi = -5:0.01:5;
x = zeros(size(xi));
r = [0.2;0.5;1.0;2.0]*ones(size(xi));
% 画图基础设置
curveType = {\'r-\',\'b--\',\'r-.\',\'b-.\'};
r_legend = {\'r=0.2\',\'r=0.5\',\'r=1.0\',\'r=2.0\'};
% 画取不同的 r 值下的函数
for i = 1:length(curveType)
plot(xi,K_RBF(xi,x,r(i,:)),curveType{i},\'linewidth\',2);
hold on
end
% 设置图像参数
set(gca,\'fontsize\',24),set(gcf,\'outerposition\',get(0,\'screensize\'));
legend(r_legend),xlabel(\'x_i\'),ylabel(\'核函数值K(x,x_i)\');
title(\'RBF核函数在测试点 x=0 处的映射关系\');
% 保存图像
print(gcf,\'-djpeg\',\'-r300\',\'RBF核函数在测试点 x=0 处的映射关系\');
请发表评论