日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

浅析MATLAB中的内联函数、匿名函数和函数函数

發(fā)布時(shí)間:2023/12/2 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅析MATLAB中的内联函数、匿名函数和函数函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)聯(lián)函數(shù)

???????內(nèi)聯(lián)(inline)函數(shù)是MATLAB 7以前經(jīng)常使用的一種構(gòu)造函數(shù)對(duì)象的方法。在命令窗口、程序或函數(shù)中創(chuàng)建局部函數(shù)時(shí),通過(guò)使用inline構(gòu)造函數(shù),而不用將其儲(chǔ)存為一個(gè)M文件,同時(shí)又可以像使用一般函數(shù)那樣調(diào)用它。

MATLAB中的內(nèi)聯(lián)函數(shù)借鑒了C語(yǔ)言中的內(nèi)聯(lián)函數(shù),在C語(yǔ)言中,內(nèi)聯(lián)函數(shù)是通過(guò)編譯器控制來(lái)實(shí)現(xiàn)的,它只在需要用到的時(shí)候,內(nèi)聯(lián)函數(shù)像宏一樣的展開(kāi),所以取消了函數(shù)的參數(shù)壓棧,減少了調(diào)用的時(shí)間和空間開(kāi)銷(xiāo)。在MATLAB中也有類(lèi)似的性質(zhì)。由于內(nèi)聯(lián)函數(shù)是儲(chǔ)存于內(nèi)存中而不是在M文件中,省去了文件訪問(wèn)的時(shí)間,加快了程序的運(yùn)行效率。

雖然內(nèi)聯(lián)函數(shù)有M文件不具備的一些優(yōu)勢(shì),但是由于內(nèi)聯(lián)函數(shù)的使用,也會(huì)受到一些制約。首先,不能在內(nèi)聯(lián)函數(shù)中調(diào)用另一個(gè)inline函數(shù);另外,只能由一個(gè)MATLAB表達(dá)式組成,并且只能返回一個(gè)變量。

創(chuàng)建一個(gè)內(nèi)聯(lián)函數(shù)非常簡(jiǎn)單,就是使用inline方法,例如:

>> f=inline('t^2-3*t-4')

f =

?????Inline function:

?????f(t) = t^2-3*t-4

MATLAB會(huì)通過(guò)檢查字符串來(lái)推斷自變量,例如上面的函數(shù)中t就是自變量,如果沒(méi)有找到,將會(huì)使用x作為缺省的自變量,例如常數(shù)函數(shù):

>> g=inline('3')

g =

?????Inline function:

?????g(x) = 3

另外,對(duì)于inline也支持多元函數(shù):

>> h=inline('x+y')

h =

?????Inline function:

?????h(x,y) = x+y

這種創(chuàng)建方法等價(jià)于以下方法:

>> h=inline('x+y','x','y')

這種方式顯式地指定了參數(shù)列表。

使用內(nèi)聯(lián)函數(shù)也很簡(jiǎn)單,如同手寫(xiě)一般,以f(t) = t^2-3*t-4為例,分別計(jì)算在t=2t=4時(shí)的函數(shù)值:

>> f(2)

ans =

????-6

>> f(4)

ans =

?????0

對(duì)于多元函數(shù)類(lèi)似。

匿名函數(shù)

???????匿名函數(shù)(anonymous function)是MATLAB 7.0版提出的一種全新的函數(shù)描述形式,和內(nèi)聯(lián)函數(shù)類(lèi)似,可以讓用戶編寫(xiě)簡(jiǎn)單的函數(shù)而不需要?jiǎng)?chuàng)建M文件,因此,匿名函數(shù)具有inline函數(shù)的所有優(yōu)點(diǎn),并且效率比inline函數(shù)高,同時(shí)還具有一些獨(dú)有的特點(diǎn)。

???????事實(shí)上匿名函數(shù)很像C語(yǔ)言中的宏,這個(gè)從匿名函數(shù)的構(gòu)造就能夠看得出來(lái),但是它比宏的功能更加強(qiáng)大,就是可以支持變量替換,這將在后面的示例中有所體現(xiàn)。

定義一個(gè)匿名函數(shù)很簡(jiǎn)單,語(yǔ)法是fhandle=@(arglist) expression

其中fhandle就是調(diào)用該函數(shù)的函數(shù)句柄(function handle),相當(dāng)于C語(yǔ)言中的函數(shù)指針,arglist是參數(shù)列表,多個(gè)參數(shù)使用逗號(hào)分隔,Expression則是該函數(shù)的表達(dá)式,例如定義xy的平方和函數(shù):

>> f=@(x,y) x*x+y*y

f =

????@(x,y)x*x+y*y

一旦定義了匿名函數(shù),使用方式和inline函數(shù)類(lèi)似,例如計(jì)算f(3,4)

>> f(3,4)

ans =

????25

前面提到,匿名函數(shù)可以使用工作空間的變量,例如創(chuàng)建函數(shù)f(x,y)=x^2+y^3

>> p=2;

>> q=3;

>> f=@(x,y) x^p+y^q

f =

????@(x,y)x^p+y^q

計(jì)算f(2,3)

>> f(2,3)

ans =

????31

如果修改p或者q的值,例如將q改為2

q =

?????2

>> f(2,3)

ans =

????31

計(jì)算結(jié)果并沒(méi)有改變,這是因?yàn)?#xff0c;該函數(shù)句柄保存的是函數(shù)在創(chuàng)建時(shí)的快照,而不是動(dòng)態(tài)的訪問(wèn)其中的變量,如果希望獲取新值,需要重新創(chuàng)建一次該函數(shù),完整的方法應(yīng)該是這樣的:

>> q=2;

>> f=@(x,y) x^p+y^q

f =

????@(x,y)x^p+y^q

>> f(2,3)

ans =

????13

匿名函數(shù)會(huì)讓前面的內(nèi)聯(lián)函數(shù)逐步退出MATLAB的舞臺(tái),事實(shí)上在設(shè)計(jì)這種類(lèi)型的函數(shù)時(shí)就帶有這一目的,但是為了保持程序的向下兼容,使用內(nèi)聯(lián)函數(shù)無(wú)疑將帶來(lái)更好的兼容性。

函數(shù)函數(shù)

???????函數(shù)函數(shù)(function function)是對(duì)傳入的其他函數(shù)進(jìn)行操作的函數(shù),傳入的函數(shù)作為函數(shù)函數(shù)的輸入?yún)?shù),傳入到函數(shù)函數(shù)中的函數(shù)稱為傳遞函數(shù)(Passed function),事實(shí)上MATLAB中就有許多這樣的函數(shù),例如求解常微分方程的函數(shù)ode23ode45ode113等都是函數(shù)函數(shù),他們的第一個(gè)參數(shù)都是傳遞函數(shù)。另外一個(gè)常見(jiàn)的函數(shù)函數(shù)是fplot,用于繪制所提供函數(shù)的圖形,語(yǔ)法為fplot(fun,lims)

例如繪制x取值范圍為[-π,π]f=sin(x)的圖形:

>> fplot(@sin,[-pi,pi])

???????圖形如下:

?和前面兩種函數(shù)不同,函數(shù)函數(shù)是比較復(fù)雜的函數(shù)了,因此必須要保存在M文件中,例如可以編寫(xiě)一個(gè)計(jì)算某個(gè)傳遞函數(shù)在給定區(qū)間上最大值、最小值和平均值的函數(shù)函數(shù):

function [maxy,miny,aver]=fstatic(func,a,b,n)

????x=linspace(a,b,n);

????y=func(x);

????maxy=max(y);

????miny=min(y);

????aver=mean(y);

end

保存為M文件后,例如統(tǒng)計(jì)正弦函數(shù)在[-π,π]上的最大值、最小值和平均值:

>> fstatic(@sin,-pi,pi,100)

ans =

????0.9999

>> [max min aver]=fstatic(@sin,-pi,pi,1000)

max =

????1.0000

min =

???-1.0000

aver =

?-5.9291e-018


總結(jié)

以上是生活随笔為你收集整理的浅析MATLAB中的内联函数、匿名函数和函数函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。