版權(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對象不需要事先申明,可以 直接引用,而且可以動態(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然后可以將旗
2、動態(tài)擴(kuò)充為數(shù)組:x(2).real = 0; % 將x擴(kuò)充為1 X2的結(jié)構(gòu)數(shù)組x(2).imag = 0;在任何需要的時(shí)候,也可以為數(shù)組動態(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ù)元素,它們
3、可以是任意數(shù)據(jù)類型,可以是向量、數(shù)組、矩陣甚至是其他結(jié)構(gòu)變量或元胞數(shù)組,而且不同字段之間其數(shù)據(jù)類型不需要相同。例如:clear x; x.real = 1 2 3 4 5; x.imag = on es(10,10);數(shù)組中不同元素的同一字段的數(shù)據(jù)類型也不要求一樣:x(2) .real = 123: x(2).imag = ran d(5,1);甚至還可以通過引用數(shù)組字段來定義結(jié)構(gòu)數(shù)據(jù)類型的某字段:x(3).real = x(1); x(3).imag = 3; x(3)ans =real: 1x1 structimag: 3下面看一個(gè)實(shí)際的例子來熟悉直接引用方式定義與顯示結(jié)構(gòu)。【例431-1
4、 溫室數(shù)據(jù)(包括溫室名、容量、溫度、濕度等)的 創(chuàng)建與顯示。(1) 直接對域賦值法產(chǎn)生結(jié)構(gòu)變量green_ =一號溫室;% 創(chuàng)建溫室名字段green_house.volume = 2000 立方米;% 創(chuàng)建溫室容量字段 gree n_house.parameter.temperature = 31.2 30.4 31.628.7 %創(chuàng)建溫室溫度字段29.7 31.1 30.9 29.6;gree n_house.parameter.humidity = 62.1 59.5 57.761.5; %創(chuàng)建溫室濕度字段62.0 61.9 59.2 57.5;(2) 顯示結(jié)構(gòu)變量的內(nèi)
5、容gree n_house %顯示結(jié)構(gòu)變量結(jié)構(gòu)gree n_house =name: 一號溫室volume: 2000 立方米parameter: 1x1 structgreen_house.parameter %用域作用符號. 顯示指定域(parameter )中內(nèi)容ans =temperature: 2x4 doublehumidity: 2x4 doublegreen_house.parameter.temperature %顯示 temperature域中的內(nèi)容ans =31.2000 30.4000 31.6000 28.700029.7000 31.1000 30.9000 29.
6、6000【例431-2】在上例的基礎(chǔ)上,創(chuàng)建結(jié)構(gòu)數(shù)組用以保存一個(gè)溫室群 的數(shù)據(jù)。green_house(2,3).name = 六號溫室;% 產(chǎn)生2 X3結(jié)構(gòu)數(shù)組 green_house %顯示結(jié)構(gòu)數(shù)組的結(jié)構(gòu)gree n_house =2x3 struct array with fields:n amevolumeparameter green_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的使用格式
7、為:s = sturct(field1,value s1,field2,values2,);該函數(shù)將生成一個(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
8、(type,big,little,color,blue,red,x,3,4)s =1x2 struct array with fields:typecolorx得到維數(shù)為1 x 2的結(jié)構(gòu)數(shù)組s,包含了 type、color和x共3個(gè)字 段。這是因?yàn)樵?struct 函數(shù)中big,little 、blue,red 和3,4 都是1X2的元胞數(shù)組,可以看到兩個(gè)數(shù)據(jù)成分分別為:s(1,1)ans =type: bigcolor: bluex: 3s(1,2)ans =type: littlecolor: redx: 4相應(yīng)的,如果將struct函數(shù)寫成下面的形式:s =struct(type,big
9、;little,color,blue;red,x,3;4)s =2x1 struct array with fields: typecolorx則會得到一個(gè)2X 1的結(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); % 創(chuàng)建2X3的元胞數(shù)組gree n_house_1=struct( name,a,volume,a,parameter,a(1,2)gree n_house_1 =2x3 struct array with fields:n amevolum
10、eparameter(2) struct預(yù)建空結(jié)構(gòu)數(shù)組方法之二gree n_house_2=struct( name,a,volume,parameter,)gree n_house_2 =2x3 struct array with fields:n amevolumeparameter(3) struct預(yù)建空結(jié)構(gòu)數(shù)組方法之三 gree n_ hopuse_3(2,3)=struct( name,volume,parameter,)gree n_hopuse_3 =2x3 struct array with fields:n amevolumeparameter(4) struct創(chuàng)建結(jié)構(gòu)數(shù)
11、組方法之四a1=六號房;a2=3200 立方米;gree n_house_4(2,3)=struct( name,a1,volume,a2,parameter,);T6二31.2,30.4,31.6,28.7;29.7,31.1,30.9,29.6;reen _house_4(2,3).parameter.temperature=T6;gree n_house_4ans =2x3 struct array with fields:n amevolumeparameter4. 3.2 結(jié)構(gòu)數(shù)組的操作MATLAB 中專門用于對結(jié)構(gòu)數(shù)組的操作的函數(shù)并不多,通過help datatypes獲取數(shù)據(jù)類型
12、列表,可以看到其中的結(jié)構(gòu)數(shù)據(jù)類型的有 關(guān)的函數(shù),主要如表431所示。表431結(jié)構(gòu)數(shù)組的操作函數(shù)函數(shù)名 功能描述 函數(shù)名功能描述deal把輸入處理成輸出field names獲取結(jié)構(gòu)的字段名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ù)field names , getfield , se
13、tfield的使用方法;二,讓讀者感受到結(jié)構(gòu)數(shù)組對應(yīng)用工具包的影 響;三,演示struct函數(shù)把對象”轉(zhuǎn)換為結(jié)構(gòu)的應(yīng)用。本例為獲得 一個(gè)演練的 結(jié)構(gòu),借助Toolbox control工具包中的tf函數(shù),先產(chǎn)生一個(gè)用傳遞函數(shù)描寫的LTI線性時(shí)不變2輸入2輸出系統(tǒng)(1) 產(chǎn)生2輸入2輸出系統(tǒng)的傳遞函數(shù)陣 對象”Stf二tf(3,2;4 1,1,1 3 2,1 1 1;1 2 2 1,1 0)Tran sfer fun cti on from in put 1 to output.3#1:sA2 + 3 s + 24 s + 1#2:sA3 + 2 sA2 + 2 s + 1Tran sfer f
14、un cti on from in put 2 to output.2#1:sA2 + 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: 2x2 cellde n: 2x2 cellVariable: sIti: 1x1 Iti(3) 獲得結(jié)構(gòu)數(shù)組SSTF的域名FN二fieldnames(SSTF) %獲得域名元胞數(shù)組FNclass(FN) %檢查FN的類別FN =numdenVariableltians =cell(4) 獲取SSTF.den(2,1) 域的內(nèi)容FC=getfi
15、eld(SSTF,den,2,1)% 相當(dāng)于FC二SSFT.de n( 2,1)FC1%與celldisp(FC)的作用大致相當(dāng)poly2str(FC1,s),% 為了把多項(xiàng)式顯示成習(xí)慣的形式FC =1x4 doubleans =1 2 2 1ans =sA3 + 2 sA2 + 2 s + 1(5) 重新設(shè)置SSTF.num(2,1) 域的內(nèi)容SSTF.num2,1% 顯示原始情況SSTF二setfield(SSTF,num,2,1,1 3 1); %注意 花括號”的使用SSTF.num2,1% 顯示被重新設(shè)置后的情況ans =0 0 4 1ans =1 3 1【例432-2 本例演示結(jié)構(gòu)數(shù)
16、組SSTF的擴(kuò)充和收縮。(本例以例432-1的運(yùn)行為基礎(chǔ)。)(1) 原結(jié)構(gòu)是一個(gè) 單結(jié)構(gòu)”size(SSTF)ans =1 1(2 )演示結(jié)構(gòu)的擴(kuò)充SSTF(2,2)=struct(tf(1,1 1)% 把 1/(s+1) 放在第 2 行第2列結(jié)構(gòu)中size(SSTF)SSTF =2x2 struct array with fields:numdenVariableItians =2 21行的結(jié)構(gòu)%取出第2顯示成習(xí)慣的表達(dá)形(3)演示結(jié)構(gòu)數(shù)組的收縮:刪除結(jié)構(gòu)數(shù)組的第SSTF(1, =%收縮成為S22 n=SSTF(1,2). nu m,S22d=SSTF(1,2).de n結(jié)構(gòu)num域和den
17、域的內(nèi)容prin tsys(S22 n1,S22d1)%式SSTF =1x2 struct array with fields: numdenVariableItiS22n =1x2 doubleS22d =1x2 double nu m/de n 二1 s + 1【例432-3】對結(jié)構(gòu)數(shù)組進(jìn)行域的增添和刪減操作。(1) 創(chuàng)建結(jié)構(gòu)數(shù)組clear,fork=1:10;departme nt(k). nu mber二No., in t2str(k);e nddepartme ntdepartme nt =1x10 struct array with fields:nu mber(2) 增添域:在數(shù)
18、組中任何一個(gè)結(jié)構(gòu)上進(jìn)行的域增添操作,其影響遍及整個(gè)結(jié)構(gòu)數(shù)組departme nt(1).teacher=40;departme nt(1).stude nt=300;departme nt(1).PC_computer=40;departme ntdepartme nt =1x10 struct array with fields:nu mberteacher stude ntPC_computer(3) 增添子域的操作只影響被操作的那個(gè)具體結(jié)構(gòu),而不是影響整 個(gè)結(jié)構(gòu)數(shù)組departme nt(2).teacher.male=35;departme nt(2).teacher.female=1
19、3;D2T=department(2).teacher% 第 2 結(jié)構(gòu) teacher 域包含兩個(gè)子域D1T二department(1).teacher% 第 1 結(jié)構(gòu) teacher 域僅是一個(gè)數(shù)D2T =male: 35female: 13D1T =40(4) 刪除子域的操作也只影響被操作的那個(gè)具體結(jié)構(gòu)departme nt(2).teacher=rmfield(departme nt(2).teacher,male);departme nt(2).teacherans = female: 13(5) 刪除域的操作是對整個(gè)結(jié)構(gòu)數(shù)組實(shí)施的departme nt二rmfield(departm
20、e nt,stude nt)%刪除一個(gè)域departme nt =1x10 struct array with fields:nu mberteacherPC_computerdepartme nt=rmfield(departme nt,teacher;PC_computer)% 刪除2個(gè)域departme nt =1x10 struct array with fields:nu mber【例432-4】數(shù)值運(yùn)算操作和函數(shù)在結(jié)構(gòu)域上的作用。n_ex = 5; % 結(jié)構(gòu)數(shù)組的長度for k = 1:n_ex,%創(chuàng)建1 X5結(jié)構(gòu)數(shù)組ex(k).f = (k-1)*n_ex + 1:5;end;e
21、x%顯示結(jié)構(gòu)數(shù)組的結(jié)構(gòu)ex =1x5 struct array with fields:%顯示結(jié)構(gòu)數(shù)組的域中內(nèi)容disp(blanks(10)結(jié)構(gòu)域中內(nèi)容)for k=1:n_ex,disp(ex(k).f),e nd結(jié)構(gòu)域中內(nèi)容I 2 3 4 56 7 8 9 10II 12 13 14 1516 17 18 19 2021 22 23 24 25class(ex(1).f)% 檢查域中內(nèi)容的類型ans =double%對各結(jié)構(gòu)域中數(shù)值數(shù)組相應(yīng)位置的數(shù)據(jù)相加求和sum_f=zeros(1,5)for k=1:n_ex,sum_f=sum_f+ex(k).f;e nd,sum_fsum_f =
22、55 60 65 70 75%對結(jié)構(gòu)數(shù)組域中各元素分別求平方根disp(blanks(20) ex.f的平方根值)for k=1: n_ex, disp(sqrt(ex(k).f),end ex.f的平方根值1.0000 1.4142 1.7321 2.0000 2.23612.4495 2.6458 2.8284 3.0000 3.16233.3166 3.4641 3.6056 3.7417 3.87304.0000 4.1231 4.2426 4.3589 4.47214.5826 4.6904 4.7958 4.8990 5.0000【例 432-5 指令 struct2cell 和
23、cell2struct的使用。(1) 創(chuàng)建帶2個(gè)域的結(jié)構(gòu)數(shù)組”for k=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)for k=1:5;fpri ntf(%s,ex(k).s bla nks(1);e ndfprintf(%sn,blanks(1),fprintf(%sn,ex.f域的內(nèi)容)for k=1:5;disp(ex(k).f);end% 顯示 ex.f 域內(nèi)容ex.s域的內(nèi)容No.1 No.2 No.3 No.4 No
24、.5 ex.f域的內(nèi)容6 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 25(3 )把ex結(jié)構(gòu)數(shù)組轉(zhuǎn)換為元胞數(shù)組C_ex二struct2cell(ex); %帶2個(gè)域的(1 X5 )結(jié)構(gòu)數(shù)組轉(zhuǎn)換為(2X 1 X 5 )元胞數(shù)組size(C_ex)fprintf(%s,C_ex1,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 1 5No.1 1 2 3 4 5(4)把元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)數(shù)組之一FS二S_char;F_n
25、um;% 用元胞數(shù)組預(yù)建域名字符串EX1二cell2struct(C_ex,FS,1)% 元胞數(shù)組向結(jié)構(gòu)數(shù)組轉(zhuǎn)換EX1 =1x5 struct array with fields:S charF numricEX1(1)%觀察新結(jié)構(gòu)EX1第一結(jié)構(gòu)的情況ans =S_char: No.1F_numric: 1 2 3 4 5(5) 把元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)數(shù)組之二EX2二cell2struct(C_ex,xx,2)EX2 =2x5 struct array with fields:xx(6) 把元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)數(shù)組之三YY 二strvcat(y1,y2,y3,y4,y5);EX3二cell2struct(C_ex,YY,3)EX3 =2x1 struc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 描寫秋景的初一作文600字5篇
- 初中物理教學(xué)心得體會
- 大學(xué)畢業(yè)求職信合集五篇
- 對創(chuàng)業(yè)的認(rèn)識和理解范文五篇
- 七年級下冊歷史知識要點(diǎn)歸納總結(jié)
- 光電技術(shù)轉(zhuǎn)讓協(xié)議書(2篇)
- 租賃經(jīng)營合同范本
- 旅游汽車租賃合同樣書
- 2025電腦購銷合同合同范本
- 2025煤炭買賣合同
- 在建工程重大安全隱患局部停工整改令(格式)
- 《落花生》-完整版課件
- 2021年貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘筆試試題及答案解析
- 安全文化培訓(xùn) (注冊安工再培訓(xùn))課件
- 色粉-MSDS物質(zhì)安全技術(shù)資料
- 骨科學(xué)研究生復(fù)試真題匯總版
- 石油化工鋼結(jié)構(gòu)工程施工及驗(yàn)收規(guī)范
- 遼海版六年級音樂上冊第8單元《3. 演唱 姐妹們上場院》教學(xué)設(shè)計(jì)
- 形勢任務(wù)教育宣講材料第一講——講上情
- 物業(yè)安全員考核實(shí)施細(xì)則
- 中國地質(zhì)大學(xué)(武漢)教育發(fā)展基金會籌備成立情況報(bào)告
評論
0/150
提交評論