版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、matlab中使用結(jié)構(gòu)體結(jié)構(gòu)(struct)數(shù)組要在MALTAB中實(shí)現(xiàn)比較復(fù)雜的編程,就不能不用struct類型。而且在MATLAB中實(shí)現(xiàn)struct比C中更為方便。4.3.1結(jié)構(gòu)數(shù)組的創(chuàng)建MATLAB提供了兩種定義結(jié)構(gòu)的方式:直接應(yīng)用和使用struct函數(shù)。1.使用直接引用方式定義結(jié)構(gòu)與建立數(shù)值型數(shù)組一樣,建立新struct對象不需要事先申明,可以直接引用,而且可以動(dòng)態(tài)擴(kuò)充。比如建立一個(gè)復(fù)數(shù)變量X:x.real=0;%創(chuàng)建字段名為real,并為該字段賦值為0x.imag=0%為x創(chuàng)建一個(gè)新的字段imag,并為該字段賦值為0x=real:0imag:0然后可以將旗動(dòng)態(tài)擴(kuò)充為數(shù)組:x(2).re
2、al=0;%將x擴(kuò)充為1x2的結(jié)構(gòu)數(shù)組x(2)imag=0;在任何需要的時(shí)候,也可以為數(shù)組動(dòng)態(tài)擴(kuò)充字段,如增加字段scale:x(1).scale=0;這樣,所有x都增加了一個(gè)scale字段,而x(1)之外的其他變量的scale字段為空:x(1)%查看結(jié)構(gòu)數(shù)組的第一個(gè)元素的各個(gè)字段的內(nèi)容ans=real:0imag:0scale:0x(2)%查看結(jié)構(gòu)數(shù)組的第二個(gè)元素的各個(gè)字段的內(nèi)容,注意沒有賦值的字段為空ans=real:0imag:0scale:應(yīng)該注意的是,x的real、imag、scale字段不一定是單個(gè)數(shù)據(jù)元素,它們可以是任意數(shù)據(jù)類型,可以是向量、數(shù)組、矩陣甚至是其他結(jié)構(gòu)變量或元胞數(shù)組
3、,而且不同字段之間其數(shù)據(jù)類型不需要相同。例如:clearx;x.real=12345;x.imag=ones(10,10);數(shù)組中不同元素的同一字段的數(shù)據(jù)類型也不要求一樣:x(2).real='123'x(2).imag=rand(5,1);甚至還可以通過引用數(shù)組字段來定義結(jié)構(gòu)數(shù)據(jù)類型的某字段:x(3).real=x(1);x(3)imag=3;x(3)ans=real:1x1structimag:3下面看一個(gè)實(shí)際的例子來熟悉直接引用方式定義與顯示結(jié)構(gòu)?!纠?31-1】溫室數(shù)據(jù)(包括溫室名、容量、溫度、濕度等)的創(chuàng)建與顯示。(1) 直接對域賦值法產(chǎn)生結(jié)構(gòu)變量green_hous
4、ename='一號溫室';%創(chuàng)建溫室名字段green_house.volume='2000立方米';%創(chuàng)建溫室容量字段green_house.parameter.temperature=31.230.431.628.7 %創(chuàng)建溫室溫度字段29.7 31.130.929.6;green_house.parameter.humidity=62.159.557.761.5;%創(chuàng)建溫室濕度字段62.061.959.257.5;(2) 顯示結(jié)構(gòu)變量的內(nèi)容green_house%顯示結(jié)構(gòu)變量結(jié)構(gòu)green_house=name:'一號溫室'volume:
5、39;2000立方米'parameter:1x1structgreen_house.parameter%用域作用符號.顯示指定域(parameter)中內(nèi)容ans=temperature:2x4doublehumidity:2x4doublegreen_house.parameter.temperature%顯示temperature域中的內(nèi)容ans=31.200030.400031.600028.700029.700031.100030.900029.6000【例431-2】在上例的基礎(chǔ)上,創(chuàng)建結(jié)構(gòu)數(shù)組用以保存一個(gè)溫室群的數(shù)據(jù)。green_house(2,3)name='六號
6、溫室';產(chǎn)生2x3結(jié)構(gòu)數(shù)組green_house%顯示結(jié)構(gòu)數(shù)組的結(jié)構(gòu)green_house=2x3structarraywithfields:namevolumeparametergreen_house(2,3)%顯示結(jié)構(gòu)數(shù)組元素的結(jié)構(gòu)ans=name:'六號溫室'volume:parameter:2.使用struct函數(shù)創(chuàng)建結(jié)構(gòu)使用struct函數(shù)也可以創(chuàng)建結(jié)構(gòu),該函數(shù)產(chǎn)生或吧其他形式的數(shù)據(jù)轉(zhuǎn)換為結(jié)構(gòu)數(shù)組。struct的使用格式為:s=sturCt('field1',values1,'field2',values2,.);該函數(shù)將生成一
7、個(gè)具有指定字段名和相應(yīng)數(shù)據(jù)的結(jié)構(gòu)數(shù)組,其包含的數(shù)據(jù)valuesl、valuese2等必須為具有相同維數(shù)的數(shù)據(jù),數(shù)據(jù)的存放位置域其他結(jié)構(gòu)位置一一對應(yīng)的。對于struct的賦值用到了元胞數(shù)組。數(shù)組valuesl、values2等可以是元胞數(shù)組、標(biāo)量元胞單元或者單個(gè)數(shù)值。每個(gè)values的數(shù)據(jù)被賦值給相應(yīng)的field字段。當(dāng)valuesx為元胞數(shù)組的時(shí)候,生成的結(jié)構(gòu)數(shù)組的維數(shù)與元胞數(shù)組的維數(shù)相同。而在數(shù)據(jù)中不包含元胞的時(shí)候,得到的結(jié)構(gòu)數(shù)組的維數(shù)是1x1的。例如:s=struct('type','big','little','color'
8、,'blue','red','x',3,4)s=1x2structarraywithfields:typecolorx得到維數(shù)為1x2的結(jié)構(gòu)數(shù)組s,包含了type、color和x共3個(gè)字段。這是因?yàn)樵趕truct函數(shù)中'big','little'、'blue','red'和3,4都是1x2的元胞數(shù)組,可以看到兩個(gè)數(shù)據(jù)成分分別為:s(1,1)ans=type:'big'color:'blue'x:3s(1,2)ans=type:'little
9、39;color:'red'x:4相應(yīng)的,如果將struct函數(shù)寫成下面的形式:s=struct('type','big''little','color','blue''red','x',3;4)s=2x1structarraywithfields:typecolorx則會(huì)得到一個(gè)2x1的結(jié)構(gòu)數(shù)組。下面給出利用struct構(gòu)建結(jié)構(gòu)數(shù)組的具體實(shí)例?!纠?31-3】利用函數(shù)struct,建立溫室群的數(shù)據(jù)庫。(1) struct預(yù)建立空結(jié)構(gòu)數(shù)組方法之一a=cell(2,3)
10、;%創(chuàng)建2x3的元胞數(shù)組green_house_1=struct('name',a,'volume',a,'parameter',a(1,2)green_house_1=2x3structarraywithfields:namevolumeparameter(2) struct預(yù)建空結(jié)構(gòu)數(shù)組方法之二green_house_2=struct('name',a,'volume','parameter',)green_house_2=2x3structarraywithfields:namevolumep
11、arameter(3) struct預(yù)建空結(jié)構(gòu)數(shù)組方法之三green_hopuse_3(2,3)=struct('name','volume','parameter',)green_hopuse_3=2x3structarraywithfields:namevolumeparameter(4) struct創(chuàng)建結(jié)構(gòu)數(shù)組方法之四a1='六號房'a2='3200立方米'green_house_4(2,3)=struct('name',a1,'volume',a2,'paramet
12、er',);T6=312,304,316,287;297,311,309,296;green_house_4(2,3).parameter.temperature=T6;green_house_4ans=2x3structarraywithfields:namevolumeparameter4.3.2結(jié)構(gòu)數(shù)組的操作MATLAB中專門用于對結(jié)構(gòu)數(shù)組的操作的函數(shù)并不多,通過helpdatatypes獲取數(shù)據(jù)類型列表,可以看到其中的結(jié)構(gòu)數(shù)據(jù)類型的有關(guān)的函數(shù),主要如表4.3.1所示。表4.3.1結(jié)構(gòu)數(shù)組的操作函數(shù)函數(shù)名功能描述函數(shù)名功能描述deal把輸入處理成輸出fieldnames獲取結(jié)構(gòu)的
13、字段名getfield獲取結(jié)構(gòu)中指定字段的值rmfield刪除結(jié)構(gòu)的字段(不是字段內(nèi)容)setfield設(shè)置結(jié)構(gòu)數(shù)組中指定的字段的值struct創(chuàng)建結(jié)構(gòu)數(shù)組struct2cell結(jié)構(gòu)數(shù)組轉(zhuǎn)化成元胞數(shù)組isfield判斷是否存在該字段isstruct判斷某變量是否是結(jié)構(gòu)類型下面舉一些具體的例子說明如果對結(jié)構(gòu)數(shù)組加以操作?!纠?32-1】本例目的:一,演示函數(shù)fieldnames,getfield,setfield的使用方法;二,讓讀者感受到結(jié)構(gòu)數(shù)組對應(yīng)用工具包的影響;三,演示struct函數(shù)把''對象”轉(zhuǎn)換為結(jié)構(gòu)的應(yīng)用。本例為獲得一個(gè)演練的結(jié)構(gòu),借助Toolboxcontrol工
14、具包中的tf函數(shù),先產(chǎn)生一個(gè)用傳遞函數(shù)描寫的LTI線性時(shí)不變2輸入2輸出系統(tǒng)。(1) 產(chǎn)生2輸入2輸出系統(tǒng)的傳遞函數(shù)陣''對象”Stf=tf(3,2;41,1,132,111;1221,10)Transferfunctionfrominput1tooutput3#1:s人2+3s+24 s+1#2:s人3+2s人2+2s+1Transferfunctionfrominput2tooutput2#1:s人2+s+11#2:-s(2) 為本例演示,把上述的LTI對象Stf轉(zhuǎn)換為結(jié)構(gòu)SSTF=struct(Stf)%把對象轉(zhuǎn)換成結(jié)構(gòu),并顯示結(jié)構(gòu)的組成SSTF=num:2x2celld
15、en:2x2cellVariable:'s'Iti:1x1Iti(3) 獲得結(jié)構(gòu)數(shù)組SSTF的域名FN=fieIdnames(SSTF)%獲得域名元胞數(shù)組FNclass(FN)%檢查FN的類別FN='num''den''Variable''lti'ans=cell(4) 獲取SSTFden(2,1)域的內(nèi)容FC=getfield(SSTF,'den',2,1)%相當(dāng)于FC=SSFT.den(2,1)FC1%與celldisp(FC)的作用大致相當(dāng)poly2str(FC1,'s'),%
16、為了把多項(xiàng)式顯示成習(xí)慣的形式FC=1x4doubleans=1221ans=s人3+2s人2+2s+1(5)重新設(shè)置SSTFnum(2,1)域的內(nèi)容SSTFnum2,1%顯示原始情況SSTF=setfield(SSTF,'num',2,1,131);%注意''花括號”的使用SSTFnum2,1%顯示被重新設(shè)置后的情況ans=0041ans=131【例432-2】本例演示結(jié)構(gòu)數(shù)組SSTF的擴(kuò)充和收縮。(本例以例432-1的運(yùn)行為基礎(chǔ)。)(1) 原結(jié)構(gòu)是一個(gè)''單結(jié)構(gòu)”size(SSTF)ans=11(2) 演示結(jié)構(gòu)的擴(kuò)充SSTF(2,2)=stru
17、ct(tf(1,11)%把1/(s+1)放在第2行第2列結(jié)構(gòu)中size(SSTF)SSTF=2x2structarraywithfields:numdenVariableItians=22(3) 演示結(jié)構(gòu)數(shù)組的收縮:刪除結(jié)構(gòu)數(shù)組的第1行SSTF(1,=%收縮成為的結(jié)構(gòu)S22n=SSTF(1,2).num,S22d=SSTF(1,2)den%取出第2結(jié)構(gòu)num域和den域的內(nèi)容printsys(S22n1,S22d1)%顯示成習(xí)慣的表達(dá)形式SSTF=1x2structarraywithfields:numdenVariableltiS22n=1x2doubleS22d=1x2doublenum/
18、den=1s+1【例432-3】對結(jié)構(gòu)數(shù)組進(jìn)行域的增添和刪減操作。(1) 創(chuàng)建結(jié)構(gòu)數(shù)組clear,fork=1:10;department(k).number='No.',int2str(k);enddepartmentdepartment=1x10structarraywithfields:number(2) 增添域:在數(shù)組中任何一個(gè)結(jié)構(gòu)上進(jìn)行的域增添操作,其影響遍及整個(gè)結(jié)構(gòu)數(shù)組department(1)teacher=4O;department(1).student=300;department(1)PC_computer=40;departmentdepartment=1
19、x10structarraywithfields:numberteacherstudentPC_computer(3) 增添子域的操作只影響被操作的那個(gè)具體結(jié)構(gòu),而不是影響整個(gè)結(jié)構(gòu)數(shù)組department(2).teacher.male=35;department(2)teacher.female=13;D2T=department(2)teacher%第2結(jié)構(gòu)teacher域包含兩個(gè)子域D1T=department.teacher%第1結(jié)構(gòu)teacher域僅是一個(gè)數(shù)D2T=male:35female:13D1T=40(4) 刪除子域的操作也只影響被操作的那個(gè)具體結(jié)構(gòu)department(2)
20、.teacher=rmfield(department(2)teacher,'male');department(2)teacherans=female:13(5) 刪除域的操作是對整個(gè)結(jié)構(gòu)數(shù)組實(shí)施的department=rmfield(department,'student')%刪除一個(gè)域department=1x10structarraywithfields:numberteacherPC_computerdepartment=rmfield(department,'teacher''PC_computer')%刪除2個(gè)域de
21、partment=1x10structarraywithfields:number【例432-4】數(shù)值運(yùn)算操作和函數(shù)在結(jié)構(gòu)域上的作用。n_ex=5;%結(jié)構(gòu)數(shù)組的長度fork=1:n_ex,%創(chuàng)建1x5結(jié)構(gòu)數(shù)組ex(k)f=(k-1)*n_ex+1:5;end;ex%顯示結(jié)構(gòu)數(shù)組的結(jié)構(gòu)ex=1x5structarraywithfields:%顯示結(jié)構(gòu)數(shù)組的域中內(nèi)容disp(blanks(10)'結(jié)構(gòu)域中內(nèi)容')fork=1:n_ex,disp(ex(k).f),end結(jié)構(gòu)域中內(nèi)容I 2345678910II 1213141516171819202122232425class(ex
22、(1)f)%檢查域中內(nèi)容的類型ans=double%對各結(jié)構(gòu)域中數(shù)值數(shù)組相應(yīng)位置的數(shù)據(jù)相加求和sum_f=zeros(1,5)fork=1:n_ex,sum_f=sum_f+ex(k)f;end,sum_fsum_f=5560657075%對結(jié)構(gòu)數(shù)組域中各元素分別求平方根disp(blanks(20)'ex.f的平方根值')fork=1:n_ex,disp(sqrt(ex(k).f),endex.f的平方根值1.00001.41421.73212.0000223612.44952.6458282843.000031623331663.46413605637417387304.0
23、0004.12314.2426435894.47214.58264.690447958489905.0000【例432-5】指令struct2cell和cell2struct的使用。(1) 創(chuàng)建''帶2個(gè)域的結(jié)構(gòu)數(shù)組”fork=1:5,ex(k).s='No.'int2str(k);ex(k)f=(k-1)*5+1:5;end(2) 顯示結(jié)構(gòu)數(shù)組的內(nèi)容fprintf('%sn','ex.s域的內(nèi)容');fprintf('%s',blanks(4)fork=1:5;fprintf('%s',ex(k)
24、.sblanks(1);endfprintf('%sn',blanks(1),fprintf('%sn','exf域的內(nèi)容')fork=1:5;disp(ex(k)f);end%顯示ex.f域內(nèi)容ex.s域的內(nèi)容No1No2No3No4No.5ex.f域的內(nèi)容1 2345678910111213141516171819202122232425(3) 把ex結(jié)構(gòu)數(shù)組轉(zhuǎn)換為元胞數(shù)組C_ex=struct2cell(ex);%帶2個(gè)域的(1x5)結(jié)構(gòu)數(shù)組轉(zhuǎn)換為(2x1x5)元胞數(shù)組size(C_ex)fprintf('%s',C_ex1
25、,1,1,blanks(3)%顯示C_ex第1頁第1行第1列內(nèi)容fprintf('%5g',C_ex2,1,1)%顯示C_ex第2頁第1行第1列內(nèi)容ans=2 15No112345(4) 把元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)數(shù)組之一FS='S_char''F_num'%用元胞數(shù)組預(yù)建域名字符串EX1=cell2struct(C_ex,FS,1)%元胞數(shù)組向結(jié)構(gòu)數(shù)組轉(zhuǎn)換EX1=1x5structarraywithfields:S_charF_numricEX1(1)%觀察新結(jié)構(gòu)EX1第一結(jié)構(gòu)的情況ans=S_char:'No.1'F_numric:12345(5) 把元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)數(shù)組之二EX2=cell2struct(C_ex,'xx',2)EX2=2x5structarraywithfields:xx(6) 把元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)數(shù)組之三YY=strvcat('y1','y2','y3','y4','y5');EX3=cell2struct(C_ex,YY,3)EX3=2x1structarraywithfields:y1y2y
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度儲(chǔ)能電站專用蓄電池銷售及技術(shù)支持協(xié)議2篇
- 二零二五年度個(gè)人二手房交易全程代辦服務(wù)合同
- 二零二五年度專業(yè)汽車租賃服務(wù)合同范本(十高端版)2篇
- 二零二五版信報(bào)箱工程材料環(huán)保認(rèn)證協(xié)議3篇
- 2025版物流園區(qū)運(yùn)營管理長期合同范本2篇
- 二零二五年度個(gè)人股權(quán)質(zhì)押借款合同范本正規(guī)范本4篇
- 二零二五年度房地產(chǎn)抵押擔(dān)保合同標(biāo)準(zhǔn)范本3篇
- 二零二五年度個(gè)人與環(huán)保項(xiàng)目借款合同模板3篇
- 二零二五年度個(gè)人房屋抵押短期借款協(xié)議書(限城市住宅)
- 二零二五年度城市土地登記代理服務(wù)合同書2篇
- 《職業(yè)培訓(xùn)師教程》課件
- (康德一診)重慶市2025屆高三高三第一次聯(lián)合診斷檢測 英語試卷(含答案詳解)
- 2025年福建泉州文旅集團(tuán)招聘24人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 建筑行業(yè)砂石物資運(yùn)輸方案
- 文化沖突與民族認(rèn)同建構(gòu)-洞察分析
- 《疥瘡的防治及治療》課件
- 2024年高中一年級數(shù)學(xué)考試題及答案
- 危險(xiǎn)化學(xué)品企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化課件
- 巨鹿二中骨干教師個(gè)人工作業(yè)績材料
- 《美的歷程》導(dǎo)讀課件
- 心電圖 (史上最完美)課件
評論
0/150
提交評論