網(wǎng)友答疑20:Matlab定義的function使用工作區(qū)變量a時(shí)為什么報(bào)錯(cuò)?這是一個(gè)典型問題
0.問題來源
請問up,定義了function函數(shù)之后,里面有個(gè)變量a,需要計(jì)算a*x2+x+3,現(xiàn)在Matlab的工作區(qū)中有a=2這個(gè)變量,為什么一直報(bào)錯(cuò)說a無法識別呢?有什么辦法可以解決嗎?
1.問題復(fù)現(xiàn)

2.知識普及
在Matlab中,工作區(qū)的變量,一般是在命令行窗口或者腳本文件中創(chuàng)建出來的,所以,這些變量的作用范圍,也是命令行窗口,或者腳本文件,這個(gè)工作區(qū)一般稱為:基礎(chǔ)工作區(qū);
此外,還存在一種程序代碼的組織形式,叫做函數(shù)文件,固定格式是,第一個(gè)可運(yùn)行的程序行,必須使用function關(guān)鍵字開頭,那么,函數(shù)文件中,使用的所有變量,有自己獨(dú)立的工作區(qū),叫做函數(shù)工作區(qū);
必須強(qiáng)調(diào),函數(shù)工作區(qū)和基礎(chǔ)工作區(qū)是不相通的,也就是說,兩者的變量不能相互直接使用,相互使用的方法是:參數(shù)傳遞。
3.參數(shù)傳遞
關(guān)于這個(gè)問題的變種很多,大家遇到的很多問題,實(shí)質(zhì)上都是這個(gè)問題,不論在什么平臺上被問到,我一般都會簡潔的回復(fù):參數(shù)傳遞;
問題來了,什么叫做參數(shù)傳遞?
從函數(shù)的定義說起,格式如:y=function(x),其中x稱為輸入?yún)?shù),y稱為輸出參數(shù),它們的產(chǎn)生和消亡都是在函數(shù)工作區(qū)的,不會自動逃逸到基礎(chǔ)工作區(qū);
所以,如果需要在基礎(chǔ)工作區(qū)使用它們,必須把變量傳遞出來,方法是:在命令行窗口或者腳本環(huán)境中,調(diào)用這個(gè)函數(shù)進(jìn)行運(yùn)算,生成的輸出參數(shù)就在基礎(chǔ)工作區(qū),相反,如果需要把基礎(chǔ)工作區(qū)的變量傳遞給函數(shù),那么,把變量作為函數(shù)的輸入?yún)?shù)傳遞進(jìn)去,基礎(chǔ)工作的變量就進(jìn)入函數(shù)工作區(qū)進(jìn)行運(yùn)算了;
上面講了基本原理,想必大家已經(jīng)云里霧里;
4.問題解決(舉例說明)
先說最基本的情況,定義函數(shù)y=fun(x),需要計(jì)算函數(shù)表達(dá)式y=x2+x+3,這個(gè)簡單,在命令行窗口直接調(diào)用即可:y=fun(1),結(jié)果:y=5;
進(jìn)一步,如果基礎(chǔ)工作區(qū)有變量a=2,而定義的函數(shù)y=fun(x)中,需要計(jì)算函數(shù)表達(dá)式y=a*x2+x+3,大家注意,函數(shù)表達(dá)式有一個(gè)變量a,但是,函數(shù)工作區(qū)是沒有變量a的,如果在命令行窗口直接調(diào)用:y=fun(1),必然會報(bào)錯(cuò):未定義變量a,或者變量a無法識別,云云;
這個(gè)時(shí)候,調(diào)用的方法需要變一變思路,首先更改函數(shù)定義:y=fun(x,a),把a作為一個(gè)輸入?yún)?shù),這樣做的目的是,通過建立輸入?yún)?shù)這個(gè)坑位,打通函數(shù)工作區(qū)和基礎(chǔ)工作區(qū)的一條參數(shù)傳遞的路徑,然后,在命令行窗口調(diào)用的格式做相應(yīng)變化:y=fun(1,a),這里的前提是,基礎(chǔ)工作區(qū)已經(jīng)有了變量a=2,那么,結(jié)果:y=6;

相關(guān)視頻推薦



End