資源描述:
《函數(shù)句柄和匿名函數(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、下面代碼創(chuàng)建一個(gè)內(nèi)聯(lián)函數(shù)i1_humps:?訂_humps=inline('1./((x?3).A2+0.01)+1./((x?.9).A2+0.04)?6Tx‘)i1_humps=Inlinefunction:i1_humps(x)=1./((x-3).A2+0.01)+1./((x-.9).A2+0.04)-6上例中,函數(shù)inline從一個(gè)字符串創(chuàng)建一個(gè)函數(shù),并以x為輸入變量。要在一個(gè)函數(shù)屮調(diào)用內(nèi)聯(lián)函數(shù),只要將該內(nèi)聯(lián)函數(shù)的名字作為輸入?yún)?shù)傳遞給函數(shù)即可。例如,耍將quad(Fun,low,h
2、igh)中的Fun換為上面的內(nèi)聯(lián)韓式i1_humps,只要按下面的方式調(diào)用即叭quad(i1_humps,low,high)o要驗(yàn)證一個(gè)山字符串表示的函數(shù)或一個(gè)內(nèi)聯(lián)函數(shù),可以使用feval函數(shù)。下而的代碼驗(yàn)證了正弦函數(shù)和前面創(chuàng)建的i1_humps函數(shù)?y=fevalCsin',pi*(0:4)/4)y=00.70711.00000.70710.0000?z=feval(i1_humps,[1-01])-5.13785.176516除了字符串函數(shù)和內(nèi)聯(lián)函數(shù)外,還山一種函數(shù)類型:匿名函數(shù),并用函數(shù)句
3、柄表示它。在應(yīng)用中并不鼓勵(lì)用戶使用前兩種方法,而是耍盡量使用匿名韓式句柄來引用函數(shù)。卜?面代碼給出了一個(gè)匿名函數(shù)的例了:af_humps=@(x)1./((x-3).A2+0.01)+1./((x-.9).A2+0.04)-6;其中,@符號(hào)意味這等號(hào)左邊是一個(gè)函數(shù)句柄。@后面的(x)定義了函數(shù)的輸入?yún)?shù),最后一部分是函數(shù)表達(dá)式。我們同樣可以利用feval函數(shù)來驗(yàn)證匿名函數(shù),例如,可以使用下而代碼驗(yàn)證af_humps:?z=feval(af_humps,[-101])-5.13785.176516
4、.0000其實(shí),用八根本沒有必要利用feval函數(shù)來驗(yàn)證匿名函數(shù),因?yàn)槟涿瘮?shù)可以使用自己的函數(shù)句柄直接進(jìn)行驗(yàn)證,例如,上面的例子可以簡寫為:?z=af_humps([-101])-5.13785.176516.0000匿名函數(shù)在定義過程中口J以調(diào)用任何Matlab函數(shù)(包括用戶自定義的函數(shù)),也口J以使用當(dāng)時(shí)MatlabI作區(qū)屮存在的任何變量。例如,下例屮的匿名函數(shù)af_humpsab在定義時(shí)就是用了Matlab工作區(qū)中的變量a和b:?a=-.3;b=-.9;?af_humpsab=@(x)1
5、./((x+a).A2+0.01)+1./((x+b).A2+0.04)-6;?af_humpsab([-101])ans=-5.13785.176516.0000我們看到:af_humpsab在定義時(shí)引用了簽名定義的變量a和b°應(yīng)當(dāng)注意,當(dāng)a或b的值變化吋,匿名函數(shù)并不改變,這是因?yàn)楹瘮?shù)句柄值捕捉它創(chuàng)建時(shí)刻的變雖的值,并不隨變量的變化而變化。?a=0;%changingthevalueofadoesnotchangthefunction.?af_humpsab([-101])%evaluate
6、again,getthesameresultsans=-5.13785.176516.0000我們也可以針對(duì)一個(gè)內(nèi)置函數(shù)或一個(gè)M文件函數(shù)創(chuàng)建匿名函數(shù)旬柄。下面函數(shù)分別給予M文件兩數(shù)humps和Matlab內(nèi)置兩數(shù)cos創(chuàng)建了兩個(gè)文件句柄:?fh_Mfile=@humps%functionhandleforM-filefunctionfh_Mfile=@humps?fh_Mfile(1)%evaluatehumps(1)ans=16?fh_builtin=@cosfh_builtin=@cos?f
7、h_builtin(pi)ans=-1由上面可知,要?jiǎng)?chuàng)建一個(gè)內(nèi)置函數(shù)或一個(gè)M文件函數(shù)的句柄也很容易,只要在等號(hào)右邊使川@符號(hào),并在該符號(hào)后緊跟內(nèi)置函數(shù)名或M文件函數(shù)名即可。我們述可以利用單元數(shù)組同時(shí)創(chuàng)建多個(gè)內(nèi)置函數(shù)和M文件函數(shù)的句柄,驗(yàn)證這些函數(shù)時(shí),只要引用該函數(shù)所在單元即可。例如,下面的代碼將上面兩個(gè)獨(dú)立獨(dú)立創(chuàng)建的句柄利用一個(gè)單元數(shù)組than創(chuàng)建在一起:?than={@humps@cos}than=@humps@cos?fhan{1}(1)%evaluatehumps(1)ans=16?fha
8、n{2}(pi)%evaluatecos(pi)ans=-1Matlab還&門提供了一些函數(shù)來處理和應(yīng)用句柄。例如,函數(shù)functions將返冋一個(gè)句柄的詳細(xì)信息,如下例所示:?functions(fh_Mfile)ans=function:'humps1type:'simple'file:‘D:anzhuangnjanjianMATLABR2008atoolboxmatlabdemoshumps.rrr?functions(fh_builtin)ans=function:"cos