Matlab可以通過function去定義一些功能函數,這使得代碼變得簡潔和高效。但是如果遇到的是一些簡單的數學公式組成的函數表達式,繼續用function去定義函數,似乎顯得有些冗雜和多余。這時候,就可以嘗試運用匿名函數了。
匿名函數的基本格式
handle = @(arglist)anonymous_function
其中handle為調用匿名函數時使用的名字。arglist為匿名函數的輸入參數,可以是一個,也可以是多個,用逗號分隔。anonymous_function為匿名函數的表達式。
匿名函數的案例
按照基本格式,我們做一個小案例來測試。
案例場景
這里測試的是 RBF徑向基函數,他的表達式是是這樣的:
\[K_{R B F}\left(\mathbf{X}, \mathbf{X}_{i}\right)=\exp \left(-\frac{\left\|\mathbf{x}-\mathbf{x}_{i}\right\|^{2}}{r^{2}}\right) \]
其中$ \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 處的映射關系');