在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
Matlab中 的 x 處理匿名函式
x 處理匿名函式 匿名函式 提供了建立簡單函式的快速方法,無需每次都建立.m檔案。可以使用以下語法構造乙個匿名函式和該函式的控制代碼 fhandle arglist body 其中,fhandle為函式控制代碼,是定義控制代碼的運算子,代表此函式為匿名函式,body定義函式的主體,arglist是傳...
MATLAB匿名函式
fhandle arglist expr其中,expr是具體的函式表示式,arglist是指定的函式自變數。具體請見下面示例 f x x.2 fx f 1 10 fx 1 4 9 16 25 36 49 64 81 100 g x,y x.2 y.2 gxy g 1 10,2 11 gxy 5 13...
matlab匿名函式
匿名函式 匿名函式 什麼是匿名函式?匿名函式是不儲存在程式檔案中 但與資料型別是 function handle 的變數相關的函式。匿名函式可以接受輸入並返回輸出,就像標準函式一樣。但是,它們可能只包含乙個可執行語句。例如,建立用於計算平方數的匿名函式的控制代碼 sqr x x.2 變數 sqr 是...