matlab @(x)構造匿名函數


一起來學演化計算-matlab@(x)構造匿名函數

覺得有用的話,歡迎一起討論相互學習~

我的微博我的github我的B站

參考文獻
https://www.ilovematlab.cn/thread-81614-1-1.html

@(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),由此重構了函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM