第3章單元數(shù)組和結(jié)構(gòu)_第1頁
第3章單元數(shù)組和結(jié)構(gòu)_第2頁
第3章單元數(shù)組和結(jié)構(gòu)_第3頁
第3章單元數(shù)組和結(jié)構(gòu)_第4頁
第3章單元數(shù)組和結(jié)構(gòu)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

MATLAB7.0從入門到精通哈爾濱工業(yè)大學(xué)(威海)汽車工程學(xué)院2/4/20231課程主要內(nèi)容第1章MATLAB簡(jiǎn)介第2章數(shù)值運(yùn)算第3章單元數(shù)組和結(jié)構(gòu)第4章字符串第5章符號(hào)運(yùn)算第6章MATLAB繪圖基礎(chǔ)第7章程序設(shè)計(jì)第8章計(jì)算方法的MATLAB實(shí)現(xiàn)第9章優(yōu)化設(shè)計(jì)第10章SIMULINK仿真初探2/4/20232第3章單元數(shù)組和結(jié)構(gòu)在前面章節(jié)已經(jīng)介紹了幾種MATLAB7.0常用的數(shù)據(jù)類型。本章將介紹兩種特殊的數(shù)據(jù)類型,即單元數(shù)組和結(jié)構(gòu)體數(shù)組,這兩種數(shù)據(jù)類型的特點(diǎn)是允許用戶將不同但是相關(guān)的數(shù)據(jù)類型集成到一個(gè)單一的變量。這樣,因?yàn)橄嚓P(guān)的數(shù)據(jù)可以通過一個(gè)單元數(shù)組或是結(jié)構(gòu)體的數(shù)組進(jìn)行組織和訪問,數(shù)據(jù)的管理就變得相對(duì)要容易一些。2/4/202333.1單元數(shù)組單元數(shù)組就是每一個(gè)元素為一個(gè)單元的數(shù)組。每個(gè)單元可以包含任意數(shù)據(jù)類型的MATLAB7.0數(shù)組。例如,單元數(shù)組的一個(gè)單元可以是一個(gè)實(shí)數(shù)矩陣,或是一個(gè)字符串?dāng)?shù)組,也可以是一個(gè)復(fù)向量數(shù)組。2/4/202343.1.1單元數(shù)組的生成直接生成單元數(shù)組:用類似矩陣的記號(hào)將給復(fù)雜的數(shù)據(jù)結(jié)構(gòu)納入一個(gè)變量之下。和矩陣中的圓括號(hào)表示下標(biāo)類似,單元數(shù)組由大括號(hào)表示下標(biāo)。包括左標(biāo)志法和右標(biāo)志法。左標(biāo)志法:左標(biāo)志法就是把單元標(biāo)志{}放在左邊。右標(biāo)志法:右標(biāo)志法就是把單元標(biāo)志{}放在右邊。2/4/20235左標(biāo)志法>>c{1,1}='abc';>>c{1,2}=eye(2);>>c{2,1}=[12;34];>>c{2,2}=[12];>>cc='abc'[2x2double][2x2double][1x2double]2/4/20236右標(biāo)志法>>c(1,1)={'abc'};>>c(1,2)={eye(2)};>>c(2,1)={[12;34]};>>c(2,2)={[12]};>>cc='abc'[2x2double][2x2double][1x2double]2/4/20237上面的單元數(shù)組也可由下面的方法直接得到:>>c={'abc',eye(2);[12;34],[12]}c='abc'[2x2double][2x2double][1x2double]2/4/20238使用cell函數(shù)生成單元數(shù)組:cell(n)生成一個(gè)n*n階的置空單元數(shù)組;cell(m,n)或cell([m,n])生成一個(gè)m*n階的置空單元數(shù)組;cell(m,n,p,…)或cell([m,n,p,…])生成一個(gè)m*n*p…階的置空單元數(shù)組;cell(size(a))生成與a同形式的單元型置空矩陣。2/4/20239cell函數(shù)生成單元數(shù)組>>a=cell(2)a=[][][][]2/4/202310>>a{1,1}=[12;22]a=[2x2double][][][]2/4/202311>>a{1,2}=['MATLAB7.0']a=[2x2double]'MATLAB7.0'[][]2/4/202312>>a{2,1}=['peking']a=[2x2double]'MATLAB7.0''peking'[]2/4/202313>>a{2,2}=[12]a=[2x2double]'MATLAB7.0''peking'[1x2double]2/4/2023143.1.2單元數(shù)組顯示單元數(shù)組的顯示有以下幾種方式 一是直接在命令窗口中輸入單元數(shù)組的名字;二是使用函數(shù)celldisp(c)來輸出。想得到單元數(shù)組中某一個(gè)單元的值時(shí),可以采用c(m,n)或c{m,n}的格式輸出。但是它們得到的結(jié)果表示形式是不同的。函數(shù)celldisp(c)更適用于具有大量數(shù)據(jù)的單元數(shù)組的顯示。c{m,n}和celldisp(c)顯示的結(jié)果形式相同。celldisp(a,’name’)在窗口中顯示的單元型變量的內(nèi)容的名稱為name。2/4/202315程序?qū)嵗?gt;>c={'abc',eye(2);[12;34],[12]};>>cc='abc'[2x2double][2x2double][1x2double]2/4/202316>>celldisp(c)c{1,1}=abcc{2,1}=1234c{1,2}=1001c{2,2}=122/4/202317>>c={'abc',eye(2);[12;34],[12]};>>c(1,2)ans=[2x2double]>>c{1,2}ans=10012/4/202318>>a={[12],[123];[23],[234]};>>celldisp(a,'hh')hh{1,1}=12hh{2,1}=23hh{1,2}=123hh{2,2}=2342/4/2023193.1.3單元數(shù)組繪圖h=cellplot(c)返回一個(gè)向量,這個(gè)向量綜合體現(xiàn)了表面、線和句柄。h=cellplot(c,’legend’)返回一個(gè)向量,這個(gè)向量綜合體現(xiàn)了表面、線和句柄,并有圖形注釋。2/4/202320程序?qū)嵗?gt;>a={[12;22],'MATLAB7.0';'peking',[12]};>>h=cellplot(a)h=152.0029153.0024154.0024155.0024156.0024157.0024158.00242/4/2023212/4/202322程序?qū)嵗?gt;>a={[12;22],'MATLAB7.0';'peking',[12]};>>h=cellplot(a,'legend')h=152.0035153.0026154.0026155.0026156.0026157.0026158.00262/4/2023232/4/2023243.1.4單元數(shù)組合并與變形使用c=[a,b]或c=[a;b]將兩個(gè)單元數(shù)組集成一個(gè)更大的數(shù)組。使用c(n,:)=[]刪除單元數(shù)組的第n行。reshape(x,m,n)和reshape(x,[m,n])將單元數(shù)組x的所有元素分配到一個(gè)m*n的單元數(shù)組,但單元數(shù)組元素不是m*n時(shí),返回錯(cuò)誤信息。行列數(shù)不相等的話,仍是按列優(yōu)先的原則。2/4/202325單元數(shù)組合并實(shí)例>>a={[12],'as'};>>b={[25],'AD'};>>c=[a,b]c=[1x2double]'as'[1x2double]'AD'>>d=[a;b]d=[1x2double]'as'[1x2double]'AD'2/4/202326單元數(shù)組刪除實(shí)例>>d={[12],'as';[25],'AD'};>>d(1,:)=[]d=[1x2double]'AD'2/4/202327單元數(shù)組變形實(shí)例>>d={[12],'as';[25],'AD'};>>c=reshape(d,1,4)c=[1x2double][1x2double]'as''AD'2/4/2023283.2結(jié)構(gòu)型變量結(jié)構(gòu)體是根據(jù)屬性名組織起來的不同類型數(shù)據(jù)的集合。結(jié)構(gòu)體和單元數(shù)組的共同之處在于它們都提供了一種分級(jí)存儲(chǔ)機(jī)制來存儲(chǔ)不同類型的數(shù)據(jù),不同之處是組織數(shù)據(jù)的方式不一樣。結(jié)構(gòu)體數(shù)組里的數(shù)據(jù)是通過屬性名來引用的,而在單元數(shù)組里,數(shù)據(jù)是通過單元數(shù)組下標(biāo)引用來操作的。2/4/2023293.2.1結(jié)構(gòu)型變量的生成直接輸入法:采用直接輸入法時(shí),在給結(jié)構(gòu)體成員元素直接賦值的同時(shí)定義該元素的名稱,并使用點(diǎn)兒將結(jié)構(gòu)型變量和成員元素名連接。2/4/202330程序?qū)嵗?gt;>student.test=[995696876769877692];>>='HuangLiang';>>student.weight=67;>>student.height=1.68;>>student.num=034093;>>student.add='Schoolofcivilengneering.Tsinghuauniversity';>>student.tel=;2/4/202331結(jié)構(gòu)體顯示輸入結(jié)構(gòu)體名稱student實(shí)現(xiàn)結(jié)構(gòu)體顯示:>>studentstudent=test:[995696876769877692]name:'HuangLiang'weight:67height:1.6800num:34093add:'Schoolofcivilengneering.Tsinghuauniversity'tel:2/4/202332增加結(jié)構(gòu)體變量可以通過以下形式語句添加新的結(jié)構(gòu)變量(另外的學(xué)生數(shù)據(jù))。>>student(2).test=[996588787698759659];>>%系統(tǒng)將默認(rèn)之前的student為student(1)>>student(2).name='WeiHuan';>>student(2).weight=50;>>student(2).height=1.58;>>student(2).num=034999;>>student(2).add='SchoolofPsychology.Chongqinguniversity';>>student(2).tel='02361701456';2/4/202333此時(shí),輸入student將只得到該結(jié)構(gòu)的成員變量名而不顯示內(nèi)容>>studentstudent=1x2structarraywithfields:testnameweightheightnumaddtel2/4/202334可以繼續(xù)在窗口中輸入student(1)或student(2)來查詢其具體內(nèi)容。>>student(2)ans=test:[996588787698759659]name:'WeiHuan'weight:50height:1.5800num:34999add:'SchoolofPsychology.Chongqinguniversity'tel:'02361701456'2/4/202335使用struct函數(shù)生成結(jié)構(gòu)變量Struct_array=struct(‘field’,v1,’field2’,v2,…),其中,field為各成員變量名,v1等為對(duì)應(yīng)的各成員變量的內(nèi)容,但是必須配對(duì)出現(xiàn)。2/4/202336程序?qū)嵗?gt;>student=struct('test',[996588787698759659],'name','WeiHuan','weight',50,'height',1.5800)student=test:[996588787698759659]name:'WeiHuan'weight:50height:1.58002/4/202337失敗的生成實(shí)例student=struct('test',[996588787698759659],'name','WeiHuan','weight',50,'height')???Errorusing==>structFieldandvalueinputargumentsmustcomeinpairs.2/4/202338添加結(jié)構(gòu)體變量>>student=struct('fen',86,'gao',176)student=fen:86gao:176>>student(2)=struct('fen',90,'gao',170)student=1x2structarraywithfields:fengao2/4/2023393.2.2結(jié)構(gòu)體變量的操作在結(jié)構(gòu)體變量中添加成員變量>>student(1).gender='Male';>>student(1).age=25;>>student(2).gender='Female';>>student(2).age=21;2/4/202340在結(jié)構(gòu)體變量中刪除成員變量s=rmfield(s,’field’)從m*n階的結(jié)構(gòu)體變量s中刪除指定的成員變量field。但該函數(shù)仍保留原有結(jié)構(gòu)形式。s=rmfield(s,fields)當(dāng)fields是單元型變量時(shí),將一次性刪除多個(gè)成員變量。2/4/202341程序?qū)嵗?gt;>s=rmfield(student,'name')s=test:[995696876769877692]weight:67height:1.6800num:34093add:'Schoolofcivilengneering.Tsinghuauniversity'tel:2/4/202342>>s=rmfield(student,{'weight','test'})s=name:'HuangLiang'height:1.6800num:34093add:'Schoolofcivilengneering.Tsinghuauniversity'tel:2/4/202343在結(jié)構(gòu)體變量中調(diào)用成員變量結(jié)構(gòu)變量中的任何信息,可以通過“結(jié)構(gòu)體名稱+成員變量名”的格式進(jìn)行取出。例如:student(1).test從結(jié)構(gòu)體變量中獲取某個(gè)成員變量時(shí),可以直接輸入變量名+成員名稱,也可以采用循環(huán)語句的方式。例如:student.test2/4/202344程序?qū)嵗?gt;>ans=HuangLiangans=WeiHuan>>fori=1:length(student)disp(student(i).name);endHuangLiangWeiHuan2/4/202345函數(shù)法取值和賦值getfield函數(shù)取得當(dāng)前存儲(chǔ)在某個(gè)成員變量中的值。表達(dá)式f=getfield(s,’field’)返回指定成員變量的內(nèi)容,與表達(dá)式f=s.field等價(jià)。setfield函數(shù)給某個(gè)成員變量插入新的值。表達(dá)式s=setfield(s,‘field’,v)將成員變量field的值設(shè)置為v與表達(dá)式s.field=v等價(jià)。2/4/202346程序?qū)嵗?gt;>c=getfield(student,'name')c=WeiHuan>>c=setfield(student,'name','Tom')c=test:[996588787698759659]name:'Tom'weight:

溫馨提示

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

評(píng)論

0/150

提交評(píng)論