《計(jì)算機(jī)輔助分析》-MATLAB基礎(chǔ)與編程入門(mén)_第1頁(yè)
《計(jì)算機(jī)輔助分析》-MATLAB基礎(chǔ)與編程入門(mén)_第2頁(yè)
《計(jì)算機(jī)輔助分析》-MATLAB基礎(chǔ)與編程入門(mén)_第3頁(yè)
《計(jì)算機(jī)輔助分析》-MATLAB基礎(chǔ)與編程入門(mén)_第4頁(yè)
《計(jì)算機(jī)輔助分析》-MATLAB基礎(chǔ)與編程入門(mén)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《計(jì)算機(jī)輔助分析》-MATLAB基礎(chǔ)與編程入門(mén)實(shí)驗(yàn)指導(dǎo)書(shū)電子與電氣工程系

MATLAB實(shí)驗(yàn)一:矩陣的使用一.實(shí)驗(yàn)?zāi)康?掌握矩陣和數(shù)組的表示方法;2學(xué)會(huì)矩陣最常用的計(jì)算方法,能夠一般方程組的解。3掌握數(shù)組排序的規(guī)則4了解稀疏矩陣和多維數(shù)組二.實(shí)驗(yàn)類(lèi)型驗(yàn)證型三.實(shí)驗(yàn)內(nèi)容:1設(shè)置matlab的工作環(huán)境,將工作目錄設(shè)置為d:\work,添加搜索目錄d:\example課本P47練習(xí)32在matlab的命令窗口里完成如下計(jì)算,其中t的值分別取-1,0,1,表達(dá)式如下:3自行產(chǎn)生一個(gè)5行5列的數(shù)組,得到最中間的三行三列矩陣。(矩陣索引)4用magic產(chǎn)生一個(gè)5*5的矩陣,將這個(gè)矩陣的第二行與第三行互換位置5求方程組的根x1+4x2-3x3=22x1+5x2-x3=11key:[4;2;1]x1+6x2+x3=126已知:一個(gè)多項(xiàng)式的系數(shù)向量是p=[1-6-72-27],求這個(gè)多項(xiàng)式的根。7已經(jīng)兩個(gè)多項(xiàng)式的系數(shù)分別是:[1234]和[14916],請(qǐng)求這兩個(gè)多項(xiàng)式的乘積,及商和余數(shù)。8給定一個(gè)多項(xiàng)式的根是[-5-3+4i-3-4i],求原來(lái)的多項(xiàng)式9A157;625]用什么函數(shù),保證第一列排序的時(shí)候,其他列跟著變化。最后的結(jié)果是:[157;234;625]10利用fzero求這個(gè)方程x2sin(x)+cos(x)=0的一個(gè)根.11補(bǔ)充題:電路分析 電路分析常常涉及到對(duì)方程組的求解,這些方程常常是利用描述電流進(jìn)入和離開(kāi)節(jié)點(diǎn)的電流方程,或者描述電路中網(wǎng)絡(luò)回路上的電壓的電壓方程得出的。下圖描述了3個(gè)回路電壓的方程方程式如下:假設(shè)5個(gè)電阻值為已知,2個(gè)電壓值也為已知,求3個(gè)電流值。(這題同解方程不是一樣的嘛)12補(bǔ)充題:儀器可靠性(解釋?zhuān)?如果知道了單個(gè)組件的可靠性,那么各個(gè)組件特定組合的可靠性就可以用兩種方法來(lái)確定。第一,可以用概率論和統(tǒng)計(jì)學(xué)的理論知識(shí)與結(jié)果來(lái)計(jì)算分析可靠性;第二,也可以開(kāi)發(fā)一個(gè)計(jì)算機(jī)模擬系統(tǒng)對(duì)可靠性進(jìn)行估計(jì)。本題假定單個(gè)組件的可靠性是0.8,使用隨機(jī)值對(duì)整個(gè)系統(tǒng)的可靠性進(jìn)行模擬。四.實(shí)驗(yàn)步驟:1.仔細(xì)閱讀Matlab幫助文件中有關(guān)以上函數(shù)的使用說(shuō)明,能充分理解其使用方法并能運(yùn)用它們完成實(shí)驗(yàn)內(nèi)容。2建立工作目錄和搜索目錄見(jiàn)教材第一章相關(guān)內(nèi)容。參閱《matlab7.0從入門(mén)到精通》P7P17查看matlab7.0的搜索路徑選擇matlab主窗口中的“File—SetPath”菜單,或者在命令窗口輸入editpath,進(jìn)入“設(shè)置搜索路徑”對(duì)話(huà)框。Addfolder即可在命令窗口輸入path,則會(huì)出現(xiàn)路徑名稱(chēng)。3e是表示用exp表達(dá),圓周率用pi來(lái)表示。4訪問(wèn)矩陣?yán)锏脑?,用()?nèi)加上標(biāo)記來(lái)表達(dá),如果標(biāo)記是用逗號(hào)隔開(kāi)的兩個(gè)數(shù),那么訪問(wèn)的將是一個(gè)元素,如果標(biāo)記是用逗號(hào)隔開(kāi)的兩個(gè)矩陣,將訪問(wèn)得到一個(gè)子矩陣。5交換矩陣兩行的位置,原理和上面相同,關(guān)鍵就是要找到一個(gè)表達(dá)新順序的向量。6.根據(jù)AX=B可以得到方程組的解X。X可以用矩陣左除的方法,也可以用逆陣的方法。關(guān)鍵要搞清楚誰(shuí)寫(xiě)在前,誰(shuí)先在后,用什么樣的符號(hào)。其中逆陣函數(shù)的寫(xiě)法是inv()。7.先建立一個(gè)向量,將多項(xiàng)式的系數(shù)放到向量里去,然后再調(diào)用相應(yīng)的求根函數(shù),即可求出結(jié)果。參閱《精通Matlab7》P257多項(xiàng)式的根一個(gè)多項(xiàng)式是用多項(xiàng)式的系數(shù)行向量表示的,向量中的系數(shù)按照其所對(duì)應(yīng)的自變量的階次的降序進(jìn)行排列。例如,多項(xiàng)式在matlab中將用下面的行向量表示:p=[1-12025116]注意,上面的多項(xiàng)式中自變量的二次方不存在,則需要在系數(shù)向量中的相應(yīng)元素位置上輸入0,來(lái)告訴matlab該階次的自變量不存在。當(dāng)利用系數(shù)行向量表示多項(xiàng)式后,利用函數(shù)roots求多項(xiàng)式的根。本例中輸入r=roots(p)則r=11.74732.7028-1.2251+1.4672i-1.2251-1.4672i如果知道一個(gè)多項(xiàng)式的根,能不能構(gòu)建相應(yīng)的多項(xiàng)式呢?可以函數(shù)為poly本例:pp=poly(r)則pp=1-12-1.7764e-01425116pp(abs(pp)<1e-12)=0%changesmallelementtozero!pp=1-120251168.建立兩個(gè)向量分別是A和B,將系數(shù)保存進(jìn)去,調(diào)用相應(yīng)的多項(xiàng)式乘積函數(shù)conv,多項(xiàng)式相除函數(shù)deconv進(jìn)行運(yùn)算,要注意相除的時(shí)候的輸出參數(shù),其中一個(gè)參數(shù)是商,一個(gè)參數(shù)是余數(shù)。另外,提示,得到了多項(xiàng)式的系數(shù)之后,可以使用disp(poly2sym(p))函數(shù)來(lái)得到相應(yīng)的多項(xiàng)式。多項(xiàng)式的乘法實(shí)際上就是多項(xiàng)式系數(shù)向量之間的卷積運(yùn)算,運(yùn)用函數(shù)conv例如,我們要求兩個(gè)多項(xiàng)式和的乘積,可以采用下面的代碼結(jié)果c=162050758464即兩個(gè)多項(xiàng)式乘積的結(jié)果為多項(xiàng)式的加法如果是兩個(gè)多項(xiàng)式向量長(zhǎng)度相等,則多項(xiàng)式加法就是將兩個(gè)多項(xiàng)式向量直接相加例如在上例中d=a+b則d=261220具體結(jié)果當(dāng)兩個(gè)多項(xiàng)式的階次不同時(shí),其系數(shù)向量的長(zhǎng)度也不同,這時(shí)需要先將低階多項(xiàng)式的系數(shù)向量前邊補(bǔ)0以便使它和高階多項(xiàng)式具有相同的長(zhǎng)度,然后在執(zhí)行加法運(yùn)算。如上例e=c+[000d]e=162052819684多項(xiàng)式除法運(yùn)用函數(shù)deconv例如執(zhí)行多項(xiàng)式c除以多項(xiàng)式b[q,r]=deconv(c,b)Q是用來(lái)存儲(chǔ)相除后的商,r是余數(shù)9本題是多項(xiàng)式求根的還原,根據(jù)給定的根還原出原來(lái)的多項(xiàng)式。建立好根向量之后,可以調(diào)用poly函數(shù)來(lái)得到原多項(xiàng)式的系數(shù)。10對(duì)一個(gè)數(shù)組的第一列排序,可以得出第一列元素的順序和第一列原來(lái)元素在列中的序號(hào),這個(gè)序號(hào)向量是非常重要的,以它作為索引數(shù)組,可以得到最后所要求的排序效果。因此,第一步要建立好原來(lái)的數(shù)組,然后選擇用[B,IX]=sort(...)這種方法對(duì)第一列進(jìn)行排序,然后根據(jù)IX作為索引得到最后結(jié)果,可docsort查詢(xún)幫助,明確sort函數(shù)返回的兩個(gè)值的含義。數(shù)值的排序函數(shù)sort>>x=randperm(8)%newdatax=51374268>>xs=sort(x)%sortascendingbydefaultxs=12345678>>xs=sort(x,'ascend')%sortascendingxs=12345678>>[xs,idx]=sort(x)%returnsortindexaswellxs=12345678idx=26351748>>xs=sort(x,'descend')xs=87654321如果要排序的數(shù)組是一個(gè)二維數(shù)組,則sort函數(shù)只對(duì)改數(shù)組的列進(jìn)行排序,注意是沒(méi)列都會(huì)排的。>>A=[randperm(6);randperm(6);randperm(6);randperm(6)]A=326514453621254613214356>>{As,idx]=sort(A)???{As,idx]=sort(A)|Error:Unbalancedormisusedparenthesesorbrackets.>>[As,idx]=sort(A)As=213311224513354624456656idx=342412413133124221231344如果只關(guān)心一列的排序問(wèn)題,>>[tmp,idx]=sort(A(:,4))%sort4_thcolumnonlytmp=3566idx=4123>>As=A(idx.:)???As=A(idx.:)|Error:UnexpectedMATLABoperator.>>As=A(idx,:)%rearrangerowsinallcolumnsusingindexAs=214356326514453621254613>>As=sort(A,2)%按行排序As=123456123456123456123456>>As=sort(A,1)%同sort(A)As=213311224513354624456656>>本題解法>>A=[234;157;625]A=234157625>>[tmp,idx]=sort(A(:,1))tmp=126idx=213>>As=A(idx.:)???As=A(idx.:)|Error:UnexpectedMATLABoperator.>>As=A(idx,:)As=157234625降序就在后面加descend如[sdata,index]=sort(A,’descend’)sort(A,2,’descend’)11.如果求根的方程式不為多項(xiàng)式的形態(tài)就不能用roots函數(shù)。而這類(lèi)的方程式多半是非線性方程式,其函數(shù)形態(tài)變化很大。對(duì)于解這類(lèi)方程式的根,可以用fzero函數(shù),它其實(shí)是用來(lái)找一函數(shù)f(x)的x值代入時(shí),會(huì)使該函數(shù)值為零(f(x)=0);而這也就是根的特性,因此我們可以用fzero求根。求任一方程式的根有三步驟:(1)先定義方程式。要注意必須將方程式安排成f(x)=0的形態(tài),例如一方程式為sin(x)+x=3,則該方程式應(yīng)表示為f(x)=sin(x)+x-3??梢訫-file函式定義方程式。(2)代入適當(dāng)范圍的x,y(x)值,將該函數(shù)的分布圖畫(huà)出,藉以了解該方程式的「長(zhǎng)相。(3)由圖中決定y(x)在何處附近(x0)與x軸相交,以fzero的語(yǔ)法fzero('function',x0)即可求出在x0附近的根,其中function是先前已定義的函數(shù)名稱(chēng)。如果從函數(shù)分布圖看出根不只一個(gè),則須再代入另一個(gè)在根附近的x0,再求出下一個(gè)根。非線性方程數(shù)值求解函數(shù)fzeroz=fzero(‘fname’,x0,tol,trace)其中fname是待求根的函數(shù)文件名,x0為搜索的起點(diǎn),一個(gè)函數(shù)可能有多個(gè)根,但fzero函數(shù)只給出離X0最近的那個(gè)根,tol控制結(jié)果的相對(duì)精度,缺省時(shí)取eps,trace指定迭代信息是否在運(yùn)算時(shí)顯示,1為顯示,0為不顯示,缺省時(shí)為0例子求在x0=0.5附近的根>>z=fzero('x-10.^x+2',0.5)z=0.375812.提示先將方程組整理成以電流為未知數(shù)的三元一次方程組,帶入事先設(shè)定好的5個(gè)電阻和2個(gè)電壓值。得到AX=B的形式,然后通過(guò)左除或者求逆的方法得到方程組的解,也即是電流的值。13.首先,需要模擬單個(gè)組件的性能,如果一個(gè)組件的可靠性為0.8,那么它將在80%的時(shí)間內(nèi)正常工作,要模擬這個(gè)性能,可生成0-1之間的一個(gè)隨機(jī)值。如果值在0-0.8之間,就可假設(shè)這個(gè)組件是正常工作的,否則假設(shè)它失效。為了模擬3個(gè)組件的串行設(shè)計(jì),我們生成3個(gè)0-1之間的隨機(jī)數(shù),如果所有3個(gè)數(shù)都小于或者等于0.8,那么這次試驗(yàn)中該設(shè)計(jì)正常工作。3個(gè)一組,我們生成1000組數(shù)據(jù)來(lái)測(cè)試。a=rand(3,1000)pos=a<=0.8sum1=sum(pos)pos2=sum1==3sum(pos2)494/1000519 要估算組件可靠性為0.8的并行設(shè)計(jì)的可靠性,我們?cè)俅紊?個(gè)0-1之間的隨機(jī)浮點(diǎn)數(shù),如果3個(gè)數(shù)字中的任何一個(gè)小于或者等于0.8,那么此次試驗(yàn)中該設(shè)計(jì)正常工作。a=rand(3,1000)pos=a<=0.8sum1=sum(pos)pos2=sum1>=1sum(pos2)995/1000992五.實(shí)驗(yàn)報(bào)告要求:1實(shí)驗(yàn)報(bào)告要在實(shí)驗(yàn)時(shí)交上給老師審閱,無(wú)報(bào)告或者報(bào)告不者推遲本次實(shí)驗(yàn)。2報(bào)告內(nèi)容分實(shí)驗(yàn)前,實(shí)驗(yàn)中,實(shí)驗(yàn)后。實(shí)驗(yàn)前報(bào)告撰寫(xiě)內(nèi)容是:實(shí)驗(yàn)題目和實(shí)驗(yàn)解答。實(shí)驗(yàn)中撰寫(xiě)內(nèi)容是修改錯(cuò)誤,進(jìn)行注解,得到結(jié)果。實(shí)驗(yàn)后,寫(xiě)出實(shí)驗(yàn)總結(jié)。格式如下:[實(shí)驗(yàn)調(diào)試][實(shí)驗(yàn)結(jié)果][實(shí)驗(yàn)調(diào)試][實(shí)驗(yàn)結(jié)果][實(shí)驗(yàn)過(guò)程]1已知:A=[234;157;625]用什么函數(shù),保證第一列排序的時(shí)候,其他列跟著變化。最后的結(jié)果是:B=[157;234;625]解答:………[實(shí)驗(yàn)調(diào)試][實(shí)驗(yàn)結(jié)果][實(shí)驗(yàn)調(diào)試][實(shí)驗(yàn)結(jié)果]其中t的值分別取-1,0,1,表達(dá)式如下:解答:………[實(shí)驗(yàn)總結(jié)][實(shí)驗(yàn)自評(píng)]

MATLAB實(shí)驗(yàn)二:元胞和結(jié)構(gòu)定義一.實(shí)驗(yàn)?zāi)康?較熟練地掌握矩陣元素的訪問(wèn)2進(jìn)一步掌握矩陣中的關(guān)系運(yùn)算的特點(diǎn)及索引地使用,分辨出元胞數(shù)組與結(jié)構(gòu)數(shù)組之區(qū)別,靈活地控制調(diào)用結(jié)構(gòu)體數(shù)組里元素。二.實(shí)驗(yàn)類(lèi)型設(shè)計(jì)型三.實(shí)驗(yàn)內(nèi)容:1自行產(chǎn)生一個(gè)5行5列的數(shù)組,用兩種方法得到最中間的三行三行矩陣。2根據(jù)a=reshape(-4:4,3,3)做一個(gè)矩陣,然后(1)取出所有大于0的元素構(gòu)成一個(gè)向量(可推廣到從一個(gè)矩陣?yán)锖Y選出符合條件的元素組成一個(gè)向量)(2)將原矩陣中大于0的元素正常顯示,而小于等于0的元素全部用0來(lái)表示(可推廣到將原矩陣中不符合條件的全用0來(lái)表示,符合條件的值不變)。3建立如下一個(gè)元胞數(shù)組,現(xiàn)在要求計(jì)算第一個(gè)元胞第4行第2列加上第二個(gè)元胞+第三個(gè)元胞里的第二個(gè)元素+最后一個(gè)元胞的第二個(gè)元素。a={pascal(4),'hello';17.3500,7:2:100}4建立一個(gè)結(jié)構(gòu)體的數(shù)組,包括3個(gè)人,字段有姓名,年齡,分?jǐn)?shù),其中分?jǐn)?shù)由隨機(jī)函數(shù)產(chǎn)生一個(gè)3行10列的數(shù)據(jù)表示了有10門(mén)課程,每門(mén)課程有三個(gè)階段的分?jǐn)?shù)。問(wèn)題是:?jiǎn)栴}1,如何找到第2個(gè)人的分?jǐn)?shù)并顯示出來(lái)問(wèn)題2,如何找到第2個(gè)人的每門(mén)課程3個(gè)階段的平均分?jǐn)?shù)并顯示出來(lái)問(wèn)題3,全班同學(xué)的10門(mén)課程的每門(mén)課程的平均分如何計(jì)算出來(lái)?要求放到一個(gè)數(shù)組里。問(wèn)題4,找到這個(gè)班所有同學(xué)的姓名放到一個(gè)元胞數(shù)組里5給定一個(gè)圖像文件,格式是jpg,通過(guò)inportdata引入這個(gè)文件,查看引入后數(shù)據(jù)保存是一個(gè)數(shù)組,是100*100*3的一個(gè)數(shù)組,這是一個(gè)三維的數(shù)組,表明有100*100個(gè)點(diǎn),每個(gè)點(diǎn)有RGB三個(gè)方面決定的?,F(xiàn)在,要求將這些點(diǎn)的中間部分30個(gè)象素寬度的正方型用黑點(diǎn)表示。(圖片是否保存在任何地方都可以調(diào)用啊,還是只能保存在work里面)6手動(dòng)構(gòu)造一個(gè)長(zhǎng)寬頁(yè)是1000*1000*3的圖像,每個(gè)圖像的點(diǎn)有三個(gè)0-255之間的隨機(jī)值構(gòu)成。然后使用image函數(shù)顯示這個(gè)圖像,再用imwrite函數(shù)保存這個(gè)圖像,使這個(gè)圖像用圖片瀏覽器也能夠查看。7將一個(gè)矩陣轉(zhuǎn)化成結(jié)構(gòu)體:有三個(gè)一維向量分別表示若干個(gè)點(diǎn)(5個(gè)點(diǎn))的RGB值,如R=255*rand(1,5),G=255*rand(1,5),B=255*rand(1,5)。將這三個(gè)一維向量組成一個(gè)5*3矩陣(5表示5個(gè)點(diǎn),3表示每個(gè)點(diǎn)有三個(gè)色值)。然后將這個(gè)表示若干點(diǎn)色值的矩陣轉(zhuǎn)化成元胞數(shù)組,最后將元胞數(shù)組轉(zhuǎn)成包含R,G,B三個(gè)屬性的結(jié)構(gòu)體。四.實(shí)驗(yàn)步驟:1.仔細(xì)閱讀Matlab幫助文件中有關(guān)以上函數(shù)的使用說(shuō)明,能充分理解其使用方法并能運(yùn)用它們完成實(shí)驗(yàn)內(nèi)容。2.先建立一個(gè)5*5的矩陣,然后可以通過(guò)使用索引訪問(wèn)矩陣元素的多種方法中的訪問(wèn)由指定的向量I,和向量J來(lái)指定。本題還可以通過(guò)空數(shù)組的方式來(lái)得到,空數(shù)組產(chǎn)生的主要目的就是為了刪除空間,我們可以先將這個(gè)5*5矩陣的第1,5行設(shè)置為空,再將第1,5列設(shè)置為空即可。3首先建立一個(gè)矩陣,然后用關(guān)系運(yùn)算符找出大于0的索引矩陣,根據(jù)這個(gè)索引就可以得到滿(mǎn)足條件的矩陣了,第二個(gè)問(wèn)題,是需要使用兩個(gè)數(shù)組的點(diǎn)積運(yùn)算。參閱課本P101—P102例3-13和例3-14>>a=reshape(-4:4,3,3)a=-4-12-303-214>>b=zeros(3)b=000000000>>a>bans=001001011>>pos=a>bpos=001001011>>A=a(pos)A=1234>>A=zeros(3)A=000000000>>A=a(pos)A=1234>>A=conv(a,pos)???Errorusing==>convAandBmustbevectors.>>A=a.*posA=0020030144.元組數(shù)組的設(shè)置可以由多種方式,但總體來(lái)說(shuō),還是一個(gè)數(shù)組(矩陣,可看作是廣義矩陣),元組數(shù)組里的元素我們稱(chēng)為元胞,要想訪問(wèn)元胞里的元素,我們必須使用{},而不是(),元素里的部分內(nèi)容的訪問(wèn)需要用到()。因此,本題先建立元胞數(shù)組,再訪問(wèn)元胞元素里的分量,加起來(lái)即可。>>a={pascal(4),'hello';17.3500,7:2:100}a=[4x4double]'hello'[17.3500][1x47double]>>a1=a{1,1}(4,2)a1=4>>a2=a{2}a2=17.3500>>a3={3}(2)???a3={3}(2)|Error:Unbalancedormisusedparenthesesorbrackets.>>a3=a{3}(2)a3=e>>a4=a{4}(2)a4=9>>b=a1+a2+a3+a4b=131.35005.結(jié)構(gòu)體數(shù)組的建立方法有兩種,第一種是通過(guò)struct關(guān)鍵字來(lái)引導(dǎo)的建立方法,這種方法相當(dāng)于初始化賦值數(shù)據(jù),數(shù)據(jù)必須被{}包著,很象元胞元素;第二種是直接給某一個(gè)結(jié)構(gòu)體賦值,實(shí)際上是給它的某個(gè)屬性賦值,賦值的數(shù)據(jù)就是一般的數(shù)據(jù)格式。本題首先建立結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體里有三個(gè)字段,可以先建立student(1)的各個(gè)字段,然后再建立student(2),依次類(lèi)推。(問(wèn),這些字段是我自己定義的嗎?)另外,在建立分?jǐn)?shù)字段的時(shí)候用到了rand函數(shù),用這個(gè)函數(shù)建立3行10列的矩陣,表示10門(mén)課程,每門(mén)課程有三次成績(jī)。問(wèn)題1要得到某個(gè)人的成績(jī),需要用()的方式訪問(wèn)數(shù)組里某個(gè)人,然后再用“.”來(lái)操作其成員數(shù)據(jù)。問(wèn)題2求每個(gè)人的平均分,需要用到mean函數(shù)。問(wèn)題3要得到全班所有人(實(shí)際給出3個(gè)人),每個(gè)人10門(mén)平均分,有兩種方法:方法一,可以借助問(wèn)題2的方法先求出第1個(gè)人的平均分,再求第2人的平均分,再求第3個(gè)人的平均分,然后用[a1;a2;a3]將平均分組合起來(lái)變成一個(gè)平均分矩陣,最后再求一次平均分即得到結(jié)果。方法二,就應(yīng)該預(yù)先建立一個(gè)3*10的矩陣meanss,這個(gè)矩陣預(yù)先都放0,注意矩陣的賦值方式:meanss(3,10)=0。然后,用循環(huán)的方式將求出來(lái)的第i個(gè)人的平均分交給矩陣meanss相應(yīng)的第i行。問(wèn)題4,要將姓名放在一個(gè)矩陣?yán)?,有兩種方法。第一種方法可以使用strvcat這個(gè)函數(shù)來(lái)將不同長(zhǎng)度的字符串接合在一起,如names=strvcat(names,student(1).name)就接合了第一個(gè)人的姓名,用這種方法可以接合多個(gè)字符串,如果編程解決的話(huà),只要使用循環(huán)即可完成任務(wù)。第二種方法,保存不同長(zhǎng)度字符串使用元胞數(shù)組是非常方便的,因?yàn)椴煌脑亟Y(jié)構(gòu)、長(zhǎng)度等一切皆可不同。首先定義一個(gè)空元胞,例如names=cell(1),然后從結(jié)構(gòu)體里取出姓名依次放入元胞元素中去即可,格式如names{1}=第1個(gè)學(xué)生的姓名。若是編程來(lái)解決這個(gè)問(wèn)題,思路也是一樣的,只不過(guò),需要使用循環(huán)。>>student=struct{'name',{'A','B','C'},'age',{'12','13','11'},'score',rand(3,10)}???Undefinedvariable"struct"orclass"struct".>>student=struct('name',{'A','B','C'},'age',{'12','13','11'},'score',rand(3,10))student=1x3structarraywithfields:nameagescore>>student(2).nameans=B>>student(2).scoreans=Columns1through50.01530.93180.84620.67210.68130.74680.46600.52520.83810.37950.44510.41860.20260.01960.8318Columns6through100.50280.30460.68220.15090.86000.70950.18970.30280.69790.85370.42890.19340.54170.37840.5936>>student(2).ageans=13>>a2=mean(student(2).score)a2=Columns1through50.40240.60550.52470.51000.6309Columns6through100.54710.22920.50890.40900.7691>>a1=mean(student(1).score)a1=Columns1through50.40240.60550.52470.51000.6309Columns6through100.54710.22920.50890.40900.7691>>student(1).scoreans=Columns1through50.01530.93180.84620.67210.68130.74680.46600.52520.83810.37950.44510.41860.20260.01960.8318Columns6through100.50280.30460.68220.15090.86000.70950.18970.30280.69790.85370.42890.19340.54170.37840.5936>>a3=mean(student(3).score)a3=Columns1through50.40240.60550.52470.51000.6309Columns6through100.54710.22920.50890.40900.7691>>A=[a1;a2;a3]A=Columns1through50.40240.60550.52470.51000.63090.40240.60550.52470.51000.63090.40240.60550.52470.51000.6309Columns6through100.54710.22920.50890.40900.76910.54710.22920.50890.40900.76910.54710.22920.50890.40900.7691>>asum=mean(A)asum=Columns1through50.40240.60550.52470.51000.6309Columns6through100.54710.22920.50890.40900.7691>>B=[student(1).name,student(2).name,student(3).name]B=ABC6.一個(gè)圖像的引入是通過(guò)importdata來(lái)引入的,引入后發(fā)現(xiàn)是一個(gè)三維數(shù)組,其中每一頁(yè)上是紅、綠、蘭的顏色,根據(jù)要求,我們需要將這三頁(yè)中間區(qū)域全部改成黑色,黑色就是0,0,0的組合,我們只要找到相應(yīng)的行、列區(qū)域,將頁(yè)用“:”表示,全部設(shè)為0即可。7.本題的關(guān)鍵是如何設(shè)置這個(gè)1000*1000*3的三維數(shù)組,用隨機(jī)函數(shù)很容易生成,但要將隨機(jī)值改成0-255之間的整數(shù)才可以,可以用a=uint8(255*rand(10,10,3))這種方法來(lái)產(chǎn)生,顯示其內(nèi)容用image(a),因?yàn)檫@是顏色的范圍數(shù)據(jù)。將三維數(shù)組保存成圖像文件,我們使用imwrite函數(shù),比如說(shuō)imwrite(a,'t1.jpg','jpg')就可以保存三維數(shù)組a到t1.jpg這個(gè)圖像文件中。8.在所有的數(shù)據(jù)類(lèi)型中,只有元胞數(shù)組和結(jié)構(gòu)體類(lèi)型最相似,因?yàn)樗鼈兌伎梢员硎静幌喔傻臄?shù)據(jù),因此基于這點(diǎn),系統(tǒng)提供了元胞數(shù)組和結(jié)構(gòu)體相互轉(zhuǎn)化的函數(shù)。本題要求將一個(gè)一般的矩陣轉(zhuǎn)成結(jié)構(gòu)體,思路是:一般矩陣元胞數(shù)組結(jié)構(gòu)體。而元胞轉(zhuǎn)結(jié)構(gòu)體要滿(mǎn)足一定的格式要求,這個(gè)格式如下: 字段名1(如R) 字段名2(如G) 字段名3(如B) 233 123 45243 88 185…根據(jù)給定的題目條件,有3個(gè)RGB的向量,R=255*rand(1,5)G=255*rand(1,5)B=255*rand(1,5)這三個(gè)向量是行向量。我們首先要把這3個(gè)向量整合成上表的模樣一般矩陣,以便于轉(zhuǎn)化得到的元胞滿(mǎn)足向結(jié)構(gòu)體轉(zhuǎn)化的條件。一般矩陣元胞數(shù)組轉(zhuǎn)化需要使用函數(shù)num2cell元胞數(shù)組結(jié)構(gòu)體轉(zhuǎn)化需要cell2struct,使用這個(gè)函數(shù),必須先定義一個(gè)字段名元胞fields={'red','green','blue'},這個(gè)元胞fields作為cell2struct函數(shù)的參數(shù)引入,以便于能夠分清楚,各列數(shù)據(jù)屬于哪個(gè)字段。>>R=255*rand(1,5)R=126.6209229.4411209.5154164.4521208.5835>>G=255*rand(1,5)G=168.358087.202573.880187.0044136.1901>>B=255*rand(1,5)B=185.413978.8690213.8165144.858594.4555>>A=[R;G;B]A=126.6209229.4411209.5154164.4521208.5835168.358087.202573.880187.0044136.1901185.413978.8690213.8165144.858594.4555>>A=[RGB]A=Columns1through5126.6209229.4411209.5154164.4521208.5835Columns6through10168.358087.202573.880187.0044136.1901Columns11through15185.413978.8690213.8165144.858594.4555>>A=[R;G;B]'A=126.6209168.3580185.4139229.441187.202578.8690209.515473.8801213.8165164.452187.0044144.8585208.5835136.190194.4555>>B=num2cell(A)B=[126.6209][168.3580][185.4139][229.4411][87.2025][78.8690][209.5154][73.8801][213.8165][164.4521][87.0044][144.8585][208.5835][136.1901][94.4555]>>fields={'red','green','blue'}fields='red''green''blue'>>C={fields,cell2struct(B)}???Errorusing==>cell2structNotenoughinputarguments.>>C=cell2struct(B)???Errorusing==>cell2structNotenoughinputarguments.>>C=struct('red',B(:,1),'green',B(:,2),'blue',B(:,3))C=5x1structarraywithfields:redgreenblue>>比對(duì)P126例3-341*2structarraywithfields可知這個(gè)結(jié)果是錯(cuò)誤的結(jié)果顯示應(yīng)該為1*5structarraywithfields元胞和結(jié)構(gòu)體元胞——我們將其比作小區(qū)墻上一排排的郵箱來(lái)說(shuō)明。這些郵箱的集合構(gòu)成了一個(gè)元胞,其中每一個(gè)郵箱就是這個(gè)元胞中的一個(gè)單元。每個(gè)郵箱中存放的物品不一樣,這相當(dāng)于每一個(gè)單元中所包含的數(shù)據(jù)類(lèi)型或者數(shù)組維數(shù)是不同的。例如一個(gè)字符串或者一個(gè)多維數(shù)組等。每個(gè)郵箱都是用一個(gè)數(shù)字(如001)來(lái)標(biāo)識(shí)其地址的,同樣,元胞中的每一個(gè)單元也是用一個(gè)數(shù)字來(lái)索引的。當(dāng)我們向一個(gè)郵箱發(fā)送郵件時(shí),需要明確指明該郵箱的號(hào)碼,同樣,當(dāng)用戶(hù)將數(shù)據(jù)加入到元胞中或者從元胞中提取數(shù)據(jù),也需要明確標(biāo)識(shí)出該單元的索引號(hào)。結(jié)構(gòu)體與元胞十分相似。唯一不同的地方在于結(jié)構(gòu)體中的數(shù)據(jù)存儲(chǔ)不是由數(shù)字來(lái)標(biāo)識(shí)的,而是由名稱(chēng)來(lái)標(biāo)識(shí)的。仍用郵箱比方,郵箱的集合就是結(jié)構(gòu)體,每個(gè)郵箱相當(dāng)于結(jié)構(gòu)體中的一個(gè)結(jié)構(gòu)元素,只不過(guò)這時(shí)候郵箱是用其所有者的名字(如張三)標(biāo)識(shí)的,而不是數(shù)字代碼,當(dāng)我們向一個(gè)郵箱發(fā)送郵件時(shí),需要明確指出接收郵件的郵箱名字(如張三),同樣,當(dāng)用戶(hù)將數(shù)據(jù)添加到一個(gè)特殊的結(jié)構(gòu)元素中,或從一個(gè)結(jié)構(gòu)元素中提取數(shù)據(jù)時(shí),也需要標(biāo)識(shí)出該結(jié)構(gòu)元素的名稱(chēng)。參見(jiàn)P123表3-13元胞結(jié)構(gòu)體創(chuàng)建使用運(yùn)算符{},將不同類(lèi)型和尺寸的數(shù)據(jù)組合在一起P115直接給字段賦具體數(shù)值,用“.”Cell使用創(chuàng)建空元胞數(shù)組P116StructP126使用的是()訪問(wèn)A(1,2)A{1,2}A{1,2}(4)P118P127操作函數(shù)Cellfuncelldisp錯(cuò)誤的為什么>>R=255*rand(1,5)R=179.1987139.3756113.4445177.1146158.4341>>G=255*rand(1,5)G=202.6794243.9951133.2605224.436344.1038>>B=255*rand(1,5)B=249.835569.219164.3440223.3142188.0130>>A=[R;G;B]A=179.1987139.3756113.4445177.1146158.4341202.6794243.9951133.2605224.436344.1038249.835569.219164.3440223.3142188.0130>>C=num2cell(A)C=[179.1987][139.3756][113.4445][177.1146][158.4341][202.6794][243.9951][133.2605][224.4363][44.1038][249.8355][69.2191][64.3440][223.3142][188.0130]>>D=cell2struct(C)???Errorusing==>cell2structNotenoughinputarguments.>>D=cell2struct('red',{C(1,:)},'green',{C(2,:)},'blue',{C(3,:)})???Errorusing==>cell2structToomanyinputarguments.>>D=cell2struct('red',C(1,:),'green',C(2,:),'blue',C(3,:))???Errorusing==>cell2structToomanyinputarguments.>>helpcell2structCELL2STRUCTConvertcellarraytostructurearray.S=CELL2STRUCT(C,FIELDS,DIM)convertsthecellarrayCintothestructureSbyfoldingthedimensionDIMofCintofieldsofS.SIZE(C,DIM)mustmatchthenumberoffieldnamesinFIELDS.FIELDScanbeacharacterarrayoracellarrayofstrings.Example:c={'tree',37.4,'birch'};f={'category','height','name'};s=cell2struct(c,f,2);Seealsostruct2cell,fieldnames.ReferencepageinHelpbrowserdoccell2struct>>fields={'red','green','blue'}fields='red''green''blue'>>D=cell2struct(fields,C)???Errorusing==>cell2structNumberoffieldnamesmustmatchnumberoffieldsinnewstructure.>>C=C'C=[179.1987][202.6794][249.8355][139.3756][243.9951][69.2191][113.4445][133.2605][64.3440][177.1146][224.4363][223.3142][158.4341][44.1038][188.0130]>>D=cell2struct(fields,C)???Errorusing==>cell2structNumberoffieldnamesmustmatchnumberoffieldsinnewstructure.>>C=C'C=[179.1987][139.3756][113.4445][177.1146][158.4341][202.6794][243.9951][133.2605][224.4363][44.1038][249.8355][69.2191][64.3440][223.3142][188.0130]>>D=cell2struct(C,fields,5)???Errorusing==>cell2structNumberoffieldnamesmustmatchnumberoffieldsinnewstructure.>>c={'tree',37.4,'birch'};f={'category','height','name'};s=cell2struct(c,f,2);>>c={'tree',37.4,'birch'};f={'category','height','name'};s=cell2struct(c,f,2)s=category:'tree'height:37.4000name:'birch'>>D=cell2struct(C,fields,3)???Errorusing==>cell2structNumberoffieldnamesmustmatchnumberoffieldsinnewstructure.>>D=cell2struct(C,fields,(3,6))???D=cell2struct(C,fields,(3,6))|Error:Expressionorstatementisincorrect--possiblyunbalanced(,{,or[.>>CC=[179.1987][139.3756][113.4445][177.1146][158.4341][202.6794][243.9951][133.2605][224.4363][44.1038][249.8355][69.2191][64.3440][223.3142][188.0130]>>fieldsfields='red''green''blue'>>D=cell2struct(C,fields,3)???Errorusing==>cell2structNumberoffieldnamesmustmatchnumberoffieldsinnewstructure.>>C=C'C=[179.1987][202.6794][249.8355][139.3756][243.9951][69.2191][113.4445][133.2605][64.3440][177.1146][224.4363][223.3142][158.4341][44.1038][188.0130]>>D=cell2struct(C,fields,3)???Errorusing==>cell2structNumberoffieldnamesmustmatchnumberoffieldsinnewstructure.>>C=C'C=[179.1987][139.3756][113.4445][177.1146][158.4341][202.6794][243.9951][133.2605][224.4363][44.1038][249.8355][69.2191][64.3440][223.3142][188.0130]>>D=cell2struct(C,fields,5)???Errorusing==>cell2structNumberoffieldnamesmustmatchnumberoffieldsinnewstructure.>>五.實(shí)驗(yàn)報(bào)告要求:1實(shí)驗(yàn)報(bào)告要在實(shí)驗(yàn)時(shí)交上給老師審閱,無(wú)報(bào)告或者報(bào)告不者推遲本次實(shí)驗(yàn)。2報(bào)告內(nèi)容分實(shí)驗(yàn)前,實(shí)驗(yàn)中,實(shí)驗(yàn)后。實(shí)驗(yàn)前報(bào)告撰寫(xiě)內(nèi)容是:實(shí)驗(yàn)題目和實(shí)驗(yàn)解答。實(shí)驗(yàn)中撰寫(xiě)內(nèi)容是修改錯(cuò)誤,進(jìn)行注解,得到結(jié)果。實(shí)驗(yàn)后,寫(xiě)出實(shí)驗(yàn)總結(jié)。具體格式見(jiàn)第一次實(shí)驗(yàn)要求。

MATLAB實(shí)驗(yàn)三:M文件編寫(xiě)一.實(shí)驗(yàn)?zāi)康?掌握MATLAB中M文件編寫(xiě)的一般特點(diǎn)2掌握輸入與輸出參數(shù)的格式,對(duì)M文件的編譯有基本的認(rèn)識(shí)3對(duì)MATLAB與外部程序的接口方式有初步的了解二.實(shí)驗(yàn)類(lèi)型設(shè)計(jì)型三.實(shí)驗(yàn)內(nèi)容:1給定一個(gè)矩陣a=123456編寫(xiě)一個(gè)M函數(shù),要求輸入是a,輸出有三個(gè):平均數(shù),標(biāo)準(zhǔn)差,秩。程序運(yùn)行后分析其性能指標(biāo)(主要從時(shí)間上分析)2編寫(xiě)一個(gè)M函數(shù),將一個(gè)給定圖片文件里的白色全部換成另一種顏色,比如說(shuō):將白色轉(zhuǎn)成黑色。3,4,5課本上有例子嗎?在什么地方?3要求編寫(xiě)一個(gè)M函數(shù)文件,完成求三角函數(shù),x變化范圍從-pi到pi,求出相應(yīng)的y的值,并畫(huà)出圖,然后使用編譯器生成EXE,脫離MATLAB環(huán)境運(yùn)行。4要求編寫(xiě)一個(gè)MEX文件,完成將兩個(gè)矩陣的求和運(yùn)算。5在matlab里編寫(xiě)一個(gè)最簡(jiǎn)單的M函數(shù),使用任何一種方法,將這個(gè)函數(shù)導(dǎo)出成dll文件,并在vc環(huán)境下使用dll文件里的函數(shù)。四.實(shí)驗(yàn)步驟:1.仔細(xì)閱讀Matlab幫助文件中有關(guān)以上函數(shù)的使用說(shuō)明,能充分理解其使用方法并能運(yùn)用它們完成實(shí)驗(yàn)內(nèi)容。2.首先輸入edit進(jìn)入M文件編輯界面,然后輸入函數(shù),注意函數(shù)定義的格式。編寫(xiě)函數(shù)的時(shí)候,要求根據(jù)數(shù)學(xué)公式來(lái)求平均數(shù),標(biāo)準(zhǔn)差。平均數(shù)的求法是求出列的總和后再除以列的長(zhǎng)度;標(biāo)準(zhǔn)差(每列數(shù)據(jù)的標(biāo)準(zhǔn)差)是數(shù)的平方的平均數(shù)-均值的平方,得到的結(jié)果再來(lái)一個(gè)算術(shù)平方根。即公式如下:。最后是程序分析,我們需要啟動(dòng)性能分析窗體,在runthiscode:里輸入需要在命令窗口里輸入的內(nèi)容,要注意輸入?yún)?shù)和輸出參數(shù)。程序:C:\\work\test>>x=[123;456]x=123456>>[avg,stdev,r]=test(x)avg=2.50003.50004.5000stdev=1.50001.50001.5000r=9.50800.7729其他的超鏈接點(diǎn)開(kāi)也這樣,奇怪吧~2.可以用隨機(jī)函數(shù)rand產(chǎn)生一個(gè)三維數(shù)組img來(lái)表示一幅圖片,比如說(shuō)10*10*3的大小,長(zhǎng)寬各是10個(gè)象素點(diǎn),接著,改變某幾個(gè)點(diǎn)為白色(白色要求rgb都是0),然后用imwrite(img,'t1.jpg','jpg')保存這個(gè)圖片,通過(guò)image(img)來(lái)查看圖片,這樣素材就有了。下面編寫(xiě)程序來(lái)改變其中的白色部分,將白色改為黑色,即這個(gè)點(diǎn)的三個(gè)指標(biāo)全部是255。3.這個(gè)題目是實(shí)驗(yàn)編譯器的使用。首先進(jìn)入編輯界面,然后輸入函數(shù)。其中x就是一個(gè)行向量,根據(jù)x可以方便地得到相應(yīng)的y向量,使用plot函數(shù)即可以完成第一個(gè)任務(wù)。第二個(gè)任務(wù)是將這個(gè)函數(shù)文件編譯,需要用到編譯器mcc。第一步確定mcc是否安裝,一般默認(rèn)情況下是安裝好的,如果沒(méi)有安裝,請(qǐng)找到安裝目錄下的MCRInstaller.exe,運(yùn)行它安裝;第二步進(jìn)行編譯器的設(shè)置,mex-setup和mbuild–setup的配置。根據(jù)提示進(jìn)行選擇使用VC編譯器;第三步,對(duì)剛才的M文件進(jìn)行編譯,方法是通過(guò)參數(shù)m進(jìn)行設(shè)置生成可執(zhí)行文件和相應(yīng)的一些文件,在M文件所有的目錄找到EXE文件,運(yùn)行后看效果。參閱《matlab7.0從入門(mén)到精通》P500不管是想生成獨(dú)立的外部可執(zhí)行程序,或者是想創(chuàng)建一個(gè)C共享庫(kù)以及軟件組件,只要源碼是m文件,那么都可以借助編譯命令mcc來(lái)實(shí)現(xiàn)?;靖袷絤cc–mmyfun1、M文件3、包含繪圖命令的M文件M文件functionyychxux=-pi:pi;y=sin(x);plot(x,y);命令窗口:>>yychxu>>mcc-myychxuSelectacompiler:[1]LccCversion2.4.1[0]NoneCompiler:1Trytoupdateoptionsfile:C:\Users\ThinkPad\ApplicationData\MathWorks\MATLAB\R14SP3\compopts.batFromtemplate:C:\MATLAB71\BIN\WIN32\\..\win32\mbuildopts\lcccompp.batDone...-->""C:\MATLAB71\bin\win32\mwregsvr""C:\MATLAB71\bin\win32\mwcomutil.dll""Error:DllRegisterServerinC:\MATLAB71\bin\win32\mwcomutil.dllfailedUndefinedsubroutine&mexsetup::expirecalledatC:\MATLAB71/bin/mexsetup.pmline752.>>mcc-myychxu.m在…\work里找到應(yīng)用程序即可4.這個(gè)題目是實(shí)驗(yàn)外部編寫(xiě)程序擴(kuò)展matlab的功能函數(shù)。編寫(xiě)MEX文件一般可以直接在matlab里編寫(xiě),也可以在vc里編寫(xiě),如果程序比較小,可以直接在matlab里寫(xiě),在vc里寫(xiě)要設(shè)置好環(huán)境。(1)先寫(xiě)c程序。寫(xiě)c程序,有兩點(diǎn)注意:第一點(diǎn),必須包括頭文件mex.h,第二點(diǎn)就是寫(xiě)mexFunction函數(shù),其格式如下void

mexFunction(int

nlhs,

mxArray

*plhs[],

int

nrhs,

const

mxArray

*prhs[])nlhs:輸出參數(shù)數(shù)目;plhs:指向輸出參數(shù)的指針數(shù)組

nrhs:輸入?yún)?shù)數(shù)目;prhs:指向輸入?yún)?shù)的指針數(shù)組比如看這樣的例子,將一個(gè)矩陣的所有元素加上10,變成一個(gè)新矩陣,程序代碼:#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*inData;double*outData;inti,j;intM,N;inData=mxGetPr(prhs[0]);M=mxGetM(prhs[0]);N=mxGetN(prhs[0]);plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);//動(dòng)態(tài)創(chuàng)建空間給輸出矩陣(結(jié)構(gòu)體指針)outData=mxGetPr(plhs[0]);//outData是矩陣的數(shù)據(jù)指針(數(shù)據(jù)指針)for(i=0;i<M;i++)for(j=0;j<N;j++)outData[j*M+i]=inData[j*M+i]+10;}//一定要注意,這個(gè)文件要保存成c文件,如保存成mextest.c(2)編譯生成mex文件mexmextest.c,查看目錄生成dll文件(3)在matlab里使用剛才編寫(xiě)好的mex文件>>a=magic(3)>>b=mextest(a)第十五章應(yīng)用程序接口Mex從字面上是matlab和executable兩個(gè)單詞縮寫(xiě),一般mex文件使用C語(yǔ)言或者Fortran語(yǔ)言進(jìn)行開(kāi)發(fā),通過(guò)適當(dāng)?shù)木幾g后,生成的目標(biāo)文件能夠被M語(yǔ)言解釋器調(diào)用執(zhí)行,這種文件在MicrosoftWindows下使用后綴.dll5.這個(gè)題目是實(shí)驗(yàn)vc與matlab的聯(lián)合編程,實(shí)際上就是將matlab的強(qiáng)大功能導(dǎo)出去,方法有5種:第一種是引擎技術(shù),第二種是直接使用matlab提供的一些數(shù)學(xué)庫(kù)函數(shù),第三種是使用編譯器生成的c代碼或者dll動(dòng)態(tài)庫(kù),第四種是使用com技術(shù),第五種是使用matcom??梢匀我膺x擇一種方法。比如說(shuō),使用vc來(lái)調(diào)用matcom.(1)打開(kāi)matcom,文件名是huatu.m,編寫(xiě)M文件如下:functionhuatu(m,n)x=m:0.1:n;y=sin(x);plot(x,y);(2)運(yùn)行這個(gè)文件,在matcom的目錄debug會(huì)生成多個(gè)文件,其中.h.cpp這兩個(gè)文件是我們需要的。 huatu(-10,10)(3)打開(kāi)vc,建立一個(gè)對(duì)話(huà)框項(xiàng)目matcomexample,將生成的huatu.h、huatu.cpp(默認(rèn)位置為安裝目錄:\matcom45\samples\Debug)和matlib.h、v4501v.lib(默認(rèn)位置為安裝目錄:\matcom45\lib)四個(gè)文件拷貝到建立的工程matcomexample目錄下。(4)將第四步拷貝的四個(gè)文件加入到VC工程中:工程->添加工程->文件,選擇剛才拷貝到matcomexample目錄下的四個(gè)文件。(5)為工程建立界面:添加一個(gè)Button按扭控件;添加二個(gè)Editbox控件,用于添加數(shù)據(jù);添加一個(gè)Statictext控件用于顯示圖形,將顯示圖形的Statictext的ID設(shè)置為ID_PIC。其他所有控件屬性保持默認(rèn)。在此文件上方添加兩個(gè)頭文件#include"matlib.h"#include"huatu.h",一定要注意順序,matlib.h要在前,huatu.h在后,因?yàn)閔uatu.h要用到matlib.h里的聲明。(6)按Ctrl+W為控件添加變量。如下所示: (7)程序代碼如下:voidCMatcomtestDlg::OnButton1(){ //TODO:Addyourcontrolnotificationhandlercodehere doublea1,a2; Mmp1,p2; UpdateData(TRUE); initM(MATCOM_VERSION); a1=m_edit1; a2=m_edit2; CWnd*p=NULL; p=(CWnd*)GetDlgItem(ID_PIC); Mmplothandle=winaxes(p->m_hWnd); huatu(a1,a2); UpdateData(FALSE); exitM(); }(8)進(jìn)行下列設(shè)置:工程->設(shè)置->C/C++選擇precompiledheaders選擇第一或第二項(xiàng):自動(dòng)選擇預(yù)補(bǔ)償頁(yè)眉(9)程序運(yùn)行結(jié)果:五.實(shí)驗(yàn)報(bào)告要求:1實(shí)驗(yàn)報(bào)告要在實(shí)驗(yàn)時(shí)交上給老師審閱,無(wú)報(bào)告或者報(bào)告不者推遲本次實(shí)驗(yàn)。2報(bào)告內(nèi)容分實(shí)驗(yàn)前,實(shí)驗(yàn)中,實(shí)驗(yàn)后。實(shí)驗(yàn)前報(bào)告撰寫(xiě)內(nèi)容是:實(shí)驗(yàn)題目和實(shí)驗(yàn)解答。實(shí)驗(yàn)中撰寫(xiě)內(nèi)容是修改錯(cuò)誤,進(jìn)行注解,得到結(jié)果。實(shí)驗(yàn)后,寫(xiě)出實(shí)驗(yàn)總結(jié)。具體格式見(jiàn)第一次實(shí)驗(yàn)要求。

MATLAB實(shí)驗(yàn)四:文件的輸入與輸出一.實(shí)驗(yàn)?zāi)康?較熟練掌握文本文件、MAT文件的讀寫(xiě)方法2對(duì)二進(jìn)制文件的讀寫(xiě)有一定的了解,對(duì)于一些特殊的文件格式,比如圖像文件,聲音文件等會(huì)使用通用和專(zhuān)項(xiàng)的函數(shù)進(jìn)行簡(jiǎn)單的操作二.實(shí)驗(yàn)類(lèi)型設(shè)計(jì)型三.實(shí)驗(yàn)內(nèi)容:1定義一個(gè)2*2的元胞數(shù)組,放入相應(yīng)的數(shù)據(jù),然后保存到MAT文件中,清除內(nèi)存后,然后再調(diào)入內(nèi)存。查看數(shù)據(jù)是否改變。(不會(huì)改變?。?實(shí)驗(yàn)用圖像:pic.jpg.(注意,此圖片是灰度圖片,本題是針對(duì)灰度圖片的處理)使用imread函數(shù)將圖像讀入Matlab。根據(jù)產(chǎn)生灰度變換函數(shù)T1,使得:0.3r r<0.35d= 0.105+2.6333(r–0.35) 0.35≤r≤0.65 1+0.3(r–1) r>0.65 用T1對(duì)原圖像pic.jpg進(jìn)行處理,查看結(jié)果。并打印出來(lái)。3自己查閱資料找出中國(guó)近10年人口數(shù),制成txt文件,格式如下:199011.3456199112.3566…然后將數(shù)據(jù)引入到內(nèi)存,并繪制出相應(yīng)的人口變化曲線圖。4使用通用讀函數(shù)importdata讀入一個(gè)聲音文件hello.wav,將所有的數(shù)據(jù)反序排列后,播放聲音,聽(tīng)效果,最后,將數(shù)據(jù)保存成另外的的聲音文件名helloRev.wav。四.實(shí)驗(yàn)步驟:1.仔細(xì)閱讀Matlab幫助文件中有關(guān)以上函數(shù)的使用說(shuō)明,能充分理解其使用方法并能運(yùn)用它們完成實(shí)驗(yàn)內(nèi)容。2.可以先cell建立一個(gè)空元胞數(shù)組2*2,然后給相應(yīng)元素賦值,注意賦值的時(shí)候,有兩點(diǎn)注意:第一元胞元素的表示方法是用()來(lái)表示的,這點(diǎn)很正常,因?yàn)楸举|(zhì)上元胞數(shù)組是一個(gè)數(shù)組,第二賦值的一方必須用{}包起來(lái)表示一個(gè)元胞,而不能直接把矩陣或者向量或者字符串賦值過(guò)去。當(dāng)然,也可以一次性地生成一個(gè)2*2的元胞數(shù)組。保存成MAT文件就用一般的SAVA,調(diào)入的時(shí)候用LOAD即可。>>a=cell(2,2)a=[][][][]>>a(1)={'hello'}a='hello'[][][]>>a(2)={zeros(2,2)}a='hello'[][2x2double][]>>a(3)={17}a='hello'[17][2x2double][]3.先使用imread讀出圖片數(shù)據(jù)到變量sourImg,然后再用im2double轉(zhuǎn)換成雙精度數(shù)據(jù),得到新的變量r(因?yàn)樘幚頃r(shí)候按雙精度來(lái)處理,實(shí)際上得到的數(shù)就是原來(lái)的數(shù)除以255得到的小數(shù))。接著對(duì)這個(gè)r,使用給定的分段函數(shù)來(lái)處理得到要顯示的新圖像desIm

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論