一起來學演化計算-matlab@(x)構造匿名函數
覺得有用的話,歡迎一起討論相互學習~
@(x)處理匿名函數
- 匿名函數為您提供了創建簡單函數的快速方法,而無需每次都創建M文件。您可以使用語法
- fhandle = @(arglist)body 構造一個匿名函數和該函數的句柄,其中body定義函數的主體,arglist是您可以傳遞給函數的參數列表。
示例
- 給定一個例子,有一個方法類函數 Rastrigin.m
function obj = Rastrigin(var,M,opt)
%Rastrigin function
% - var: design variable vector 決策變量向量
% - M: rotation matrix 旋轉矩陣
% - opt: shift vector 偏移向量
dim = length(var);
var = (M*(var-opt)')'; % 將決策空間變量減去偏移量后乘以旋轉矩陣
obj = 10*dim; % 由於每個維度都要加上10的數值,所以這里直接由把這一項提取出來
for i=1:dim
obj=obj+(var(i)^2 - 10*(cos(2*pi*var(i))));
end
end
- 但是在主函數中,我們將Rastrigin函數作為一個 每次只需改變變量x的函數,而並不需要每次都改變M和opt 並且成為一個結構體的一個函數成分。
- 為了不重新重構一個只有x變量的函數Rastrigin,我們根據原有的函數創建一個只有變量x的匿名函數
% Rastrigin function definition
n=40;
Tasks(1).dims=n;
M=orth(randn(n,n)); % 將隨機向量求標准正交基
Tasks(1).fnc=@(x)Rastrigin(x,M); % x作為決策變量,M作為旋轉矩陣,沒有偏移向量
- @(x)表示匿名函數的變量只有x,匿名函數的函數體部分則是Rastrigin(x,M),由此重構了函數