![2021的程序設(shè)計和調(diào)試推薦資料_第1頁](http://file4.renrendoc.com/view/a6e8ae248c2a20b10e980744bc915144/a6e8ae248c2a20b10e980744bc9151441.gif)
![2021的程序設(shè)計和調(diào)試推薦資料_第2頁](http://file4.renrendoc.com/view/a6e8ae248c2a20b10e980744bc915144/a6e8ae248c2a20b10e980744bc9151442.gif)
![2021的程序設(shè)計和調(diào)試推薦資料_第3頁](http://file4.renrendoc.com/view/a6e8ae248c2a20b10e980744bc915144/a6e8ae248c2a20b10e980744bc9151443.gif)
![2021的程序設(shè)計和調(diào)試推薦資料_第4頁](http://file4.renrendoc.com/view/a6e8ae248c2a20b10e980744bc915144/a6e8ae248c2a20b10e980744bc9151444.gif)
![2021的程序設(shè)計和調(diào)試推薦資料_第5頁](http://file4.renrendoc.com/view/a6e8ae248c2a20b10e980744bc915144/a6e8ae248c2a20b10e980744bc9151445.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章的程序設(shè)計(chénɡxùshèjì)和調(diào)試第一頁,共62頁。4.3腳本文件和函數(shù)文件4.3.1M腳本文件(一)腳本文件的特點:它只是一串按用戶意圖排列而成的(包括控制(kòngzhì)流向指令在內(nèi)的)MATLAB指令集合腳本文件運行后,所產(chǎn)生的所有變量都駐留在MATLAB基本工作空間(BaseWorkspace)中。只要用戶不使用clear指令加以清除,且MATLAB指令窗不關(guān)閉,這些變量將一直保存在基本工作空間中。基本空間將隨MATLAB的啟動而產(chǎn)生;只有關(guān)閉MATLAB時,該基本工作空間才被刪除。第二頁,共62頁。(二)M腳本文件的編寫和運行(1)編寫M腳本文件的步驟點擊MATLAB指令窗工具條上的NewFile圖標,就可打開MATLAB文件編輯調(diào)試器MATLABEditor/Debugger,其窗口名為untitled,用戶即可在空白窗口中編寫程序。編輯完程序,點擊編輯調(diào)試器工具條上的保存圖標,在彈出的Windows標準(biāozhǔn)風格的“保存為”對話框中,選擇保存文件夾,鍵入新編文件的文件名,點【保存】鍵,就完成了文件的保存。(2)運行文件使剛剛保存的文件所在的目錄成為當前目錄,或讓該目錄處在MATLAB的搜索路徑上。直接在命令窗口鍵入運行文件的文件名或在編輯器窗口中直接點擊工具條上的運行按鈕都可運行該M文件。第三頁,共62頁。4.3.2M函數(shù)文件(一)M函數(shù)文件的特點從形式上看,與腳本(jiǎoběn)文件不同,函數(shù)文件的第一行總是一“function”引導的“函數(shù)申明行(FunctionDeclarationline)”。該行還羅列出函數(shù)與外界的聯(lián)系的全部“標稱”輸入輸出宗量。但對“輸入輸出宗量”的標稱數(shù)目并沒有限制,既可以完全沒有輸入輸出宗量,也可以時任意數(shù)目。MATLAB允許使用比“標稱數(shù)目”較少的輸入輸出宗量,實現(xiàn)對函數(shù)的調(diào)用。第四頁,共62頁。從運行上看,與腳本文件不同,每當函數(shù)文件運行,MATLAB就會專門為它開辟一個臨時工作空間(Contextworkspace)。該空間稱之為函數(shù)工作空間(Functionworkspace)。所有中間變量都存放在函數(shù)工作空間中。當執(zhí)行完文件最后一條指令時,或遇到return指令,就結(jié)束該函數(shù)文件的運行,同時該臨時函數(shù)空間及其所有的中間變量就立即被清除。函數(shù)空間隨具體M函數(shù)文件的被調(diào)用而產(chǎn)生,隨調(diào)用的結(jié)束而刪除。函數(shù)空間是相對基本空間獨立(dúlì)的、臨時的。在MATLAB整個運行期間,可以產(chǎn)生任意多個臨時函數(shù)空間。假如在函數(shù)文件中,發(fā)生對某腳本文件的調(diào)用,那么該腳本文件運行產(chǎn)生的所有變量都存放于那函數(shù)空間之中,而不是存放在基本空間。第五頁,共62頁。第四十九頁,共62頁。a(i),casetest2標志編寫及修改M文件的作者和日期;構(gòu)成字符串的CEM,可以是MATLAB任何合法的指令、表達式、語句或M文件名。5try-catch結(jié)構(gòu)對于第二種調(diào)用格式,不管鍵入什么,總以字符串形式賦給變量v。MATLAB將使用最先找到的那個cow。腳本文件運行后,所產(chǎn)生的所有變量都駐留在MATLAB基本工作空間(BaseWorkspace)中。x=randn(1,100);1輸入輸出宗量檢測(jiǎncè)函數(shù)第一種調(diào)用格式的執(zhí)行機理內(nèi)聯(lián)函數(shù)(hánshù)的創(chuàng)建表達式有時(yǒushí)由多個邏輯表達式組成,MATLAB將盡可能少的檢測子表達式的值。inputname(n)y=eval(‘CEM1’,‘CEM1’)4.3.3局部變量和全局變量(1)局部(Local)變量存在于函數(shù)空間內(nèi)部(nèibù)的中間變量,產(chǎn)生于該函數(shù)的運行過程中,其影響范圍僅限于該函數(shù)本身。(2)全局(Global)變量通過global指令,MATLAB也允許幾個不同的函數(shù)空間以及基本工作空間共享同一個變量。這種被共享的變量稱為全局變量。每個希望共享全局變量的函數(shù)或MATLAB基本工作空間,必須逐個用global對其具體變量加以專門定義。沒采用global定義的函數(shù)或基本工作空間,將無權(quán)享用全局變量。第六頁,共62頁。補充說明:如果某個函數(shù)的運作使全局變量的內(nèi)容發(fā)生了變化,那么其它函數(shù)空間以及基本工作空間中的同名變量也隨之變化。除非與全局變量聯(lián)系的所有工作空間都被刪除,否則全局變量依然存在(cúnzài)。對全局變量的定義必須在該變量被使用之前進行。建議把全局變量的定義放在函數(shù)體的首行位置。雖然MATLAB對全局變量的名字并沒有任何特別的限制,但是為了提高M文件的可讀性,建議使用大寫字符命名全局變量。第七頁,共62頁。4.3.4M文件的一般結(jié)構(gòu)典型M函數(shù)文件的結(jié)構(gòu)如下:函數(shù)申明行(Functiondeclarationline):位于函數(shù)文件的首行,以MATLAB關(guān)鍵字function開頭,函數(shù)名以及函數(shù)的輸入輸出宗量都在這一行被定義。H1行(Thefirsthelptextline);緊隨函數(shù)聲明行之后以%號開頭的第一注釋行。按MATLAB自身(zìshēn)文件的規(guī)則,H1行包含:大寫字體的函數(shù)文件名和運用關(guān)鍵詞簡要描述的函數(shù)功能。該H1行供lookfor關(guān)鍵詞查詢和help在線幫助使用第八頁,共62頁。在線幫助文本(Helptext)區(qū):H1行及其之后的連續(xù)的以%開頭的所有注釋行構(gòu)成整個在線幫助文本。它通常包括:函數(shù)輸入(shūrù)輸出宗量的含義;調(diào)用格式說明。編寫和修改記錄:它與在線幫助文本區(qū)相隔一個“空”行;也以%開頭;標志編寫及修改M文件的作者和日期;版本記錄。它用作軟件檔案管理。函數(shù)體(Functionbody):為清晰起見,它與前面的注釋以“空”行相隔。這部分內(nèi)容由實現(xiàn)M函數(shù)功能的MATLAB指令組成。它接收輸入(shūrù)宗量,進行程序流控制,得到輸出宗量。其中為閱讀、理解方便,也配置適當?shù)目招泻妥⑨?。若僅從運算的角度看,唯“函數(shù)申明行”和“函數(shù)體”兩部分是構(gòu)成M函數(shù)文件所必不可少的。第九頁,共62頁。4.3.6子函數(shù)和私用函數(shù)1.子函數(shù)MATLAB允許一個M函數(shù)文件包含多個函數(shù)的代碼。其中第一個出現(xiàn)的那個函數(shù)稱為主函數(shù)(Primaryfunction),該文件中的其他函數(shù)則稱為子函數(shù)(Subfunction)。保存時所用(suǒyònɡ)函數(shù)名與主函數(shù)定義名相同。外部程序只能對主函數(shù)進行調(diào)用。第十頁,共62頁。子函數(shù)的性質(zhì):每個子函數(shù)的第1行是其自己的函數(shù)申明行。在M函數(shù)文件內(nèi),主函數(shù)的位置不可改變,但子函數(shù)的排列次序可以任意改變。子函數(shù)智能被處于同一文件的主函數(shù)或其它其函數(shù)調(diào)用。在M函數(shù)文件中,任何指令通過“名字”對函數(shù)進行(jìnxíng)調(diào)用時,子函數(shù)的優(yōu)先級僅次于內(nèi)裝函數(shù)。同一文件的主函數(shù)、子函數(shù)的工作空間都是彼此獨立的。各函數(shù)間的信息,或通過輸入輸出變量傳遞,或通過全局變量傳遞,或通過跨空間指令傳遞。help,lookfor等幫助指令都不能提供關(guān)于子函數(shù)的任何幫助信息。第十一頁,共62頁。2.私用函數(shù)所謂私用函數(shù),是指位于private目錄上的M文件函數(shù)。它有如下性質(zhì):私用函數(shù)的構(gòu)造與普通M函數(shù)完全相同。私用函數(shù)只能被private直接父目錄上的M文件所調(diào)用,而不能被其它目錄上的任何M文件或MATLAB指令窗中的命令所調(diào)用。M文件中,任何指令通過“名字”對函數(shù)進行(jìnxíng)調(diào)用時,私用函數(shù)的優(yōu)先級雖低于內(nèi)裝函數(shù)和子函數(shù),但高于其它任何目錄上的函數(shù)。help,lookfor等指令都不能提供關(guān)于私用函數(shù)的任何幫助信息。第十二頁,共62頁。4.3.7MATLAB的搜索過程假設(shè)MATLAB在一個文件中碰到指令cow時,它將按以下步驟逐步進行檢索:(1)檢查cow是否一個變量名;如果不是,執(zhí)行下一步;(2)檢查cow是不是內(nèi)建函數(shù)(hánshù)(Built-inFunction);假如不是,執(zhí)行下一步;(3)檢查cow是不是cow所在的M文件中的一個子函數(shù)(hánshù);假如不是,再往下執(zhí)行(4)檢查cow是不是cow所在的M文件中的一個私用函數(shù)(hánshù)(先找,然后是);假如不是,再往下執(zhí)行;第十三頁,共62頁。(5)檢查cow是不是當前目錄上的文件(先找,然后是);假如不是,再往下執(zhí)行;(6)檢查搜索(sōusuǒ)路徑上是否有cow存在(先找,然后是)。MATLAB將使用最先找到的那個cow。如果一直找不到cow,MATLAB就給出錯誤提示信息。第十四頁,共62頁。4.4MATLAB控制流4.4.1for循環(huán)結(jié)構(gòu)for循環(huán)結(jié)構(gòu)的語法(yǔfǎ)形式:forx=array(commands)end說明:循環(huán)體的執(zhí)行次數(shù)由for指令后面的數(shù)組array的列數(shù)決定。在for后面的表達式中的數(shù)組可以偽任何合法的MATLAB數(shù)組。循環(huán)結(jié)構(gòu)可以嵌套使用。為了得到高效代碼,應(yīng)盡量提高代碼的向量化程度,而避免使用循環(huán)結(jié)構(gòu)。為了得到高效代碼,在循環(huán)指令之前應(yīng)盡量對數(shù)組進行預定義。第十五頁,共62頁?!纠?.3.1-1】一個(yīɡè)簡單的for循環(huán)示例。fori=1:10;x(i)=i;end;x第十六頁,共62頁。4.4.2while循環(huán)結(jié)構(gòu)while循環(huán)結(jié)構(gòu)的語法形式為:whileexpression(commands)End說明:在while和end之間的“組命令”被稱為(chēnɡwéi)循環(huán)體。當MATLAB碰到while指令時,首先檢測expression的值,如其值為邏輯真(非0),則執(zhí)行組命令。當組命令執(zhí)行完畢,繼續(xù)檢測表達式的值,若表達式值仍為真,循環(huán)執(zhí)行組命令;而一旦表達式值為假時,結(jié)束循環(huán)。第十七頁,共62頁。【例7.3.2-1】Fibonacci數(shù)組的元素滿足Fibonacci規(guī)則(guīzé):,;且。現(xiàn)要求該數(shù)組中第一個大于10000的元素。a(1)=1;a(2)=1;i=2;whilea(i)<=10000 a(i+1)=a(i-1)+a(i); i=i+1;end;ia(i)第十八頁,共62頁。4.4.3if-else-end分支結(jié)構(gòu)指令(zhǐlìng)形式1:ifexpression(commands)end指令(zhǐlìng)形式2:ifexpression(commands1)else(commands2)end指令(zhǐlìng)形式3:ifexpression1(commands1)elseif(expression2)(commands2)……else(commandsk)end第十九頁,共62頁。說明:表達式有時(yǒushí)由多個邏輯表達式組成,MATLAB將盡可能少的檢測子表達式的值。例如,表達式為(子表達式1|表達式2),當MATLAB檢測到子表達式1的值為真時,它就認為表達式值為真,而不再對表達式2進行檢測。又如表達式1&表達式2)當MATLAB檢測到子表達式1的值為假時,它就認為表達式值為假的,從而跳過該結(jié)構(gòu)。if指令判決和break指令的配合使用,可以強制終止for循環(huán)或while循環(huán)。第二十頁,共62頁?!纠?.3.3-2】用for循環(huán)(xúnhuán)指令來尋求Fibonacc數(shù)組中第一個大于10000的元素。n=100;a=ones(1,n);fori=3:na(i)=a(i-1)+a(i-2);ifa(i)>=10000a(i),break;end;endi第二十一頁,共62頁。4.4.4switch-case結(jié)構(gòu)(jiégòu)語法結(jié)構(gòu)(jiégòu):switchexcasetest1(commands1)casetest2……casetestk(commandsk)otherwise(commands)end第二十二頁,共62頁。說明:switch指令后面的表達式應(yīng)為一個標量或者(huòzhě)為一個字符串。對于標量形式的表達式,比較這樣進行:表達式==檢測值i。而對于字符串,MATLAB將調(diào)用函數(shù)strcmp來實現(xiàn)比較:strcmp(表達式,檢測值i)。case指令后面的檢測值不僅可以為一個標量值或一個字符串,還可以為一個元胞數(shù)組。如果一個檢測值是一個元胞數(shù)組,MATLAB將把表達式的值和該元胞數(shù)組中的所有元素進行比較,如果元胞數(shù)組中的某個元素和表達式的值相等,MATLAB認為此次比較結(jié)果為真,從而執(zhí)行與該檢測值相應(yīng)的一組命令。第二十三頁,共62頁。【例7.3.4-1】學生的成績管理,用來演示switch結(jié)構(gòu)(jiégòu)的應(yīng)用。clear;fori=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];Name={'Jack','Marry','Peter','Rose','Tom'};Mark={72,83,56,94,100};Rank=cell(1,5);S=struct('Name',Name,'Marks',Mark,'Rank',Rank);fori=1:5switchS(i).Markscase100S(i).Rank='滿分';caseaS(i).Rank='優(yōu)秀';caseb S(i).Rank='良好';casec S(i).Rank='及格';otherwise S(i).Rank='不及格';endenddisp(['學生姓名','得分','等級']);disp('')fori=1:5;disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);end;第二十四頁,共62頁。4.4.5try-catch結(jié)構(gòu)語法結(jié)構(gòu):try(commands1)catch(commands2)end說明:只有當MATLAB在執(zhí)行組命令1時出現(xiàn)了錯誤后,組命令2才會被執(zhí)行。可調(diào)用lasterr函數(shù)查詢出錯原因。如果函數(shù)lasterr的運行結(jié)果為一個(yīɡè)空串,則表明組命令1被成功執(zhí)行了。當執(zhí)行組命令2時又出錯,MATLAB將終止該結(jié)構(gòu)第二十五頁,共62頁?!纠?.3.5-1】try-catch結(jié)構(gòu)應(yīng)用(yìngyòng)實例:對魔方陣的行進行援引,當“行下標”超出魔方陣的最大行數(shù)時,將改向?qū)ψ詈笠恍械脑?,并顯示“出錯”警告。clear,N=4;A=magic(3);tryA_N=A(N,:)catchA_end=A(end,:)endlasterr第二十六頁,共62頁。4.4.6控制程序流的其它常用指令指令在被調(diào)函數(shù)中插入了return指令,可以強制MATLAB結(jié)束執(zhí)行該函數(shù)并把控制轉(zhuǎn)出。和keyboard(1)input常用格式:v=input(‘message’)%將用戶鍵入的內(nèi)容賦給變量(biànliàng)vv=input(‘message’,’s’)%將用戶鍵入的內(nèi)容作為字符串賦給變量(biànliàng)v第二十七頁,共62頁。說明:指令中’message’是將顯示在屏幕上的字符串,這是必不可少的。對于第一種調(diào)用格式,用戶可以輸入(shūrù)數(shù)值、字符串元胞數(shù)組等各種形式的數(shù)據(jù)。對于第二種調(diào)用格式,不管鍵入什么,總以字符串形式賦給變量v。(2)keyboard當程序遇到keyboard時,MATLAB將“控制權(quán)”交給鍵盤,用戶可以從鍵盤輸入(shūrù)各種合法的MATLAB指令,只有當用戶使用return指令結(jié)束輸入(shūrù)后,“控制權(quán)”才交還給程序。第二十八頁,共62頁。指令pause%暫停執(zhí)行文件,等待用戶鍵入任意鍵繼續(xù)pause(n)%在繼續(xù)執(zhí)行之前,暫停n秒指令break指令導致包含有該指令的while、for指令的終止,不必等待循環(huán)的自然(zìrán)結(jié)束。第二十九頁,共62頁。和warning指令error(‘message’)%顯示出錯信息message,終止程序。errortrap%錯誤發(fā)生后,程序繼續(xù)(jìxù)執(zhí)行與否分雙位開關(guān)。lasterr%顯示MATLAB自動判斷的最新出錯原因,并終止程序。warning(‘message’)%顯示警告信息message,程序繼續(xù)(jìxù)執(zhí)行。lastwarn%顯示MATLAB自動給出的最新警告,程序繼續(xù)(jìxù)運行。第三十頁,共62頁。變量的檢測(jiǎncè)傳遞和限權(quán)使用函數(shù)4.5.1輸入輸出宗量檢測(jiǎncè)函數(shù)nargin%在函數(shù)體內(nèi)用于獲取實際輸入宗量;nargout%在函數(shù)體內(nèi)用于獲取實際輸出宗量;nargin(‘fun’)%獲取’fun’指定函數(shù)的標稱輸入宗量數(shù);nargout(‘fun’)%獲取’fun’指定函數(shù)的標稱輸出宗量數(shù);inputname(n)%在函數(shù)體內(nèi)使用,給出第n各輸入宗量的實際調(diào)用變量名第三十一頁,共62頁。4.5.2“變長度”輸入輸出宗量varargin%“變長度”輸入宗量列表varargout%“變長度”輸出宗量列表說明:編寫M函數(shù)文件時,函數(shù)申明行中的“變長度”宗量必須被放置在“普通”宗量之后在編寫M函數(shù)文件時,varargin的長度隨分配(fēnpèi)到的輸入變量數(shù)而變;第三十二頁,共62頁。varargin,varargout的工作機理varargin本身是個元胞數(shù)組;M函數(shù)文件被調(diào)用時,函數(shù)輸入(shūrù)變量的分配原則是:首先,輸入(shūrù)變量依先后次序逐個對應(yīng)分配給M函數(shù)文件輸入(shūrù)宗量列表中那些被明確定義的“普通”輸入(shūrù)宗量;然后,把剩余的輸入(shūrù)變量一次逐個分配到varargin元胞數(shù)組的元胞中。因此varargin元胞數(shù)組的長度取決于分配到的輸入(shūrù)變量數(shù)。所謂“變長度”,就是指:varargin的長度隨分配到的輸入(shūrù)變量數(shù)而變。第三十三頁,共62頁。【例7.5.2-1】變長度(chángdù)宗量使用示例。[exm07052_1.m]functionvarargout=exm07052_1(r,varargin)vin=length(varargin);Nin=vin+1; error(nargchk(1,Nin,nargin)) ifnargout>6 error('Toomanyoutputarguments')endt=0:pi/20:2*pi;x=r*exp(i*t);s=pi*r*r;第三十四頁,共62頁。ifnargout==0switchNincase1plot(x,'b')case2r2=varargin{1}; x2=r2*exp(i*t);plot(x,'b');holdon;plot(x2,'b');holdoffotherwiser2=varargin{1}; x2=r2*exp(i*t);plot(x,varargin{2:end});holdon plot(x2,varargin{2:end});holdoff end;axis('square')第三十五頁,共62頁。elsevarargout{1}=real(x);varargout{2}=imag(x); varargout{5}=pi*r*r;varargout{6}=[]; ifNin>1r2=varargin{1}; x2=r2*exp(i*t);varargout{3}=real(x2);varargout{4}=imag(x2);varargout{6}=pi*(r^2-r2^2); end;end第三十六頁,共62頁。r1=1;r2=3;[x1,y1,x2,y2,s1,s2]=exm07052_1(r1);[x1,y1,x2,y2]=exm07052_1(r1,r2);[x1,y1,x2,y2,s1,s2]=exm07052_1(r1,r2);r1=1;r2=0.6;subplot(1,3,1),exm07052_1(r1,r2),subplot(1,3,2),exm07052_1(r1,r2,'Marker','o')subplot(1,3,3),exm07052_1(r1,r2,'LineWidth',5,'Color',[10.40])
第三十七頁,共62頁。4.5.3跨空間變量傳遞1.跨空間計算串表達式的值evalin(‘workspace’,’expression’)%跨空間計算串表達式值evalin(‘workspace’,’expression1’,’expression2’)%跨空間計算替代串表達式值說明:‘workspace’可取兩個值:‘base’和‘caller’。第一種調(diào)用格式的執(zhí)行機理當‘workspace’取‘base’時,表示計算eval(‘expression’)時,將從基本工作(gōngzuò)空間中獲得變量值第三十八頁,共62頁。當‘workspace’取‘caller’時,表示計算eval(‘expression’)時,將從主調(diào)函數(shù)工作空間獲得變量值。主調(diào)函數(shù)是相對被調(diào)函數(shù)而言的。這里(zhèlǐ)被調(diào)函數(shù)是指evalin所在的函數(shù)。第二種調(diào)用格式的執(zhí)行機理是:先從所在函數(shù)空間獲取變量值,用eval(‘expression1’)計算原串表達式;如若該計算失敗,則再從‘workspace’指定的(基本或主調(diào)函數(shù))工作空間獲取變量值,再通過eval(‘expression2’)計算替代串表達式。第三十九頁,共62頁?!纠?1】本例演示:(A)編寫繪制正多邊形或圓的程序。(B)子函數(shù)與(母)函數(shù)的關(guān)系。(C)各種(ɡèzhǒnɡ)不同的工作空間。(D)evalin運行機理與eval的異同。(1)[exm070531_1.m]functiony1=exm070531_1(a,s)t=(0:a)/a*2*pi;y1=subevalinzzy(4,s);%------------subfunction-------------functiony2=subevalinzzy(a,s)t=(0:a)/a*2*pi;ss='a*exp(i*t)';switchscase{'base','caller'}y2=evalin(s,ss);case'self'y2=eval(ss);end第四十頁,共62頁。(2)clear,a=30;t=(0:a)/a*2*pi;sss={'base','caller','self'};fork=1:3 y0=exm070531_1(8,sss{k}); subplot(1,3,k) plot(real(y0),imag(y0),'r','LineWidth',3),axissquareimageend
第四十一頁,共62頁。2.跨空間賦值assignin(‘workspace’,’VN’,X)%跨空間向VN變量(biànliàng)賦值【例-1】assignin運作機理示范。[EXM070532_1.M]functiony=exm070532_1(x)y=sqrt(x);t=x^2;assignin('base','yy',t)clear;x=4;y=exm070532_1(x);disp([blanks(5),'x',blanks(5),'y',blanks(4),'yy']disp([x,y,yy])第四十二頁,共62頁。4.6串演算函數(shù)4.6.1evaly=eval(‘CEM’)%執(zhí)行CEM指定(zhǐdìng)的計算y=eval(‘CEM1’,‘CEM1’)%執(zhí)行CEM1指定(zhǐdìng)的計算,如果出錯,就執(zhí)行CEM2[y1,y2,…]=eval(‘CEM’)%執(zhí)行對CEM代表的函數(shù)文件調(diào)用,并輸出計算結(jié)果第四十三頁,共62頁。說明:Eval指令的輸入宗量必須是字符串構(gòu)成字符串的CEM,可以是MATLAB任何合法的指令、表達式、語句或M文件名。第3種格式(géshi)中的CEM只能是(包含輸入宗量在內(nèi)的)M函數(shù)文件名。第四十四頁,共62頁。【例7.6.1-1】計算(jìsuàn)“表達式”串,產(chǎn)生向量值。clear,t=pi;cem='[t/2,t*2,sin(t)]';y=eval(cem)第四十五頁,共62頁?!纠?.6.1-2】計算(jìsuàn)“語句”串,創(chuàng)建變量。clear,t=pi;eval('theta=t/2,y=sin(theta)');who第四十六頁,共62頁?!纠?.6.1-3】計算(jìsuàn)“替代”串。A=ones(2,1);B=ones(1,3);c=eval('B*A','A*B'),errmessage=lasterr第四十七頁,共62頁?!纠?.6.1-4】計算(jìsuàn)“合成”串。CEM={'cos','sin','tan'};fork=1:3 theta=pi*k/12; y(1,k)=eval([CEM{1},'(',num2str(theta),')']);endy第四十八頁,共62頁。4.6.2feval[y1,y2,…]=feval(‘FN’,arg1,arg2,…)%用參量arg1,arg2等執(zhí)行函數(shù)指定的計算說明:‘FN’只能是函數(shù)名在既可以(kěyǐ)使用eval,又可以(kěyǐ)使用feval的情況下,feval運行效率更高。第四十九頁,共62頁?!纠?.6.2-1】feval和eval運行區(qū)別(qūbié)之一:feval的FN絕對不能是表達式。x=pi/4;Ve=eval('1+sin(x)')Vf=feval('1+sin(x)',x)第五十頁,共62頁?!纠?.6.2-2】feval和eval調(diào)用區(qū)別:feval的FN只接受函數(shù)(hánshù)名。本例兩種方法以后者為好。A=rand(2,2);[ue,de,ve]=eval('svd(A)');disp('Resultsbyeval');disp([ue,de,ve]);disp(blanks(1))[uf,df,vf]=feval('svd',A);disp('Resultsbyfeval');disp([uf,df,vf])第五十一頁,共62頁。4.6.3內(nèi)聯(lián)函數(shù)(hánshù)1.內(nèi)聯(lián)函數(shù)(hánshù)的創(chuàng)建inline(‘CE’)%把串表達式轉(zhuǎn)化為輸入宗量自動生成的內(nèi)聯(lián)函數(shù)(hánshù)inline(‘CE’,arg1,arg2,…)%把串表達式轉(zhuǎn)化為arg1,arg2等指定輸入宗量的內(nèi)聯(lián)函數(shù)(hánshù)inline(‘CE’,n)%把串表達式轉(zhuǎn)化為x,P1,P2,…Pn等指定輸入宗量的內(nèi)聯(lián)函數(shù)(hánshù)第五十二頁,共62頁。說明:‘CE’是字符串;CE必須不包含賦值號“=”的表達(biǎodá)式。第1種調(diào)用格式將自動地對CE進行辨識,把CE中由字母/數(shù)字組成的連續(xù)字符認做變量,除“預定義變量名(如i,j,pi)”和“常用函數(shù)名(如sin,svd)”以外的由字母/數(shù)字組成的連續(xù)字符將被認做變量。但注意:若連續(xù)字符后緊接“左圓括號”,那么將不被當作輸入宗量。如x(1),就不會認做輸入宗量處理。第2中調(diào)用格式是創(chuàng)建內(nèi)聯(lián)函數(shù)最穩(wěn)妥、可靠途徑。輸入宗量字符可表達(biǎodá)得更自如。第三種調(diào)用格式最簡練,但對輸入輸出宗量的字符限制嚴格。輸入宗量字符只能是x,P1,…Pn等。注意:P是大寫字母。第五十三頁,共62頁。2.涉及內(nèi)聯(lián)函數(shù)性質(zhì)的指令(zhǐlìng)class(inline_fun)%給出內(nèi)聯(lián)函數(shù)的類型char(inline_fun)%給出內(nèi)聯(lián)函數(shù)計算公式argnames(inline_fun)%給出內(nèi)聯(lián)函數(shù)的輸入宗量vectorize(inline_fun)%使內(nèi)聯(lián)函數(shù)適用“數(shù)組運算”規(guī)則第五十四頁,共62頁。【例-1】演示:內(nèi)聯(lián)函數(shù)的第一種創(chuàng)建格式;使內(nèi)聯(lián)函數(shù)適于“數(shù)組運算(yùnsuàn)”。clear,F1=inline('si
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 脊椎動物-五爬行綱課件
- 2025年安徽省職教高考《職業(yè)適應(yīng)性測試》考前沖刺模擬試題庫(附答案)
- 《JavaWeb應(yīng)用開發(fā)》考試復習題庫(含答案)
- 打鼾的科學原理課件
- 2025年朔州陶瓷職業(yè)技術(shù)學院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年新疆建設(shè)職業(yè)技術(shù)學院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 《鋼鐵生產(chǎn)流程詳解》課件
- 滬教版(上海)七年級地理第一學期中國區(qū)域篇(上)2.5《廣西壯族自治區(qū)》聽課評課記錄
- 10kV配電站房項目建設(shè)的進度控制與風險管理
- 茅臺的陰陽合同
- 2025年個人土地承包合同樣本(2篇)
- (完整版)高考英語詞匯3500詞(精校版)
- 網(wǎng)絡(luò)貨運行業(yè)研究報告
- 人教版七年級英語上冊單元重難點易錯題Unit 2 單元話題完形填空練習(含答案)
- 2024-2025年突發(fā)緊急事故(急救護理學)基礎(chǔ)知識考試題庫與答案
- 左心耳封堵術(shù)護理
- 2024年部編版八年級語文上冊電子課本(高清版)
- 合唱課程課件教學課件
- 2024-2025學年廣東省大灣區(qū)40校高二上學期聯(lián)考英語試題(含解析)
- 旅拍店兩人合作協(xié)議書范文
- 2024-2030年電炒鍋項目融資商業(yè)計劃書
評論
0/150
提交評論