Matlab中的匿名函數的使用

在Matlab7.0以後的版本中,出現了一種新的函數類型–匿名函數,不但能夠完成原來版本中內聯函數(inline)的功能,還提供了其他更方便的功能。Matlab首席科學家Moler教授都推薦用匿名函數替代原來的內聯函數。我最近學習了一些有關匿名函數的內容,現在總結一下:

1,匿名函數的基本用法。

 

 handle = @(arglist)anonymous_function 

其中handle爲調用匿名函數時使用的名字。arglist爲匿名函數的輸入參數,可以是一個,也可以是多個,用逗號分隔。anonymous_function爲匿名函數的表達式。舉個例子如下:

 >> f=@(x,y)x^2+y^2; >> f(1,2) ans =      5

當然輸入的是數組也是可以的:

 >> f=@(x,y)x.^2+y.^2; %注意需要點(.)運算 >> a=1:1:10; >> b=10:-1:1; >> f(a,b) ans =    101    85    73    65    61    61    65    73    85   101

匿名函數的表達式中也可以有參數的傳遞,比如:

 >> a=1:5; >> b=5:-1:1; >> c=0.1:0.1:0.5; >> f=@(x,y)x.^2+y.^2+c; >> f(a,b) ans =    26.1000   20.2000   18.3000   20.4000   26.5000

c作爲表達式中的參數,進行了數據傳遞。上面都是單重匿名函數,也可以構造多重匿名函數,如:

 >> f=@(x,y)@(a) x^2+y^+a; >> f1=f(2,3) f1 =     @(a)x^2+y^+a >> f2=f1(4) f2 =     85

每個@後的參數從它後面開始起作用,一直到表達式的最後。

2.使用匿名函數實現符號函數的賦值運算

在老版本的Matlab中,這個功能是由inline函數完成的,現在用匿名函數完成此功能。比如:知道z=2x^3+4x+5,求z在x=3處的2階導數值。可以先用符號函數算出z的2階導數的表達式,然後通過匿名函數,把x賦予3的值,得到最後結果:

 >> syms x; %定義符號變量 >> z=2*x^3+4*x+5; %定義表達式 >> z1=diff(z,2) %求z的2階導數的表達式 z1 = 12*x >> z2=eval_r(['@(x)' vectorize(z1)]); %vectorize函數的功能是使內聯函    %數適合數組運算的法則 >> z2(3) ans =     36
發佈了48 篇原創文章 · 獲贊 81 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章