MATLAB數(shù)據(jù)類型及運算2014_第1頁
MATLAB數(shù)據(jù)類型及運算2014_第2頁
MATLAB數(shù)據(jù)類型及運算2014_第3頁
MATLAB數(shù)據(jù)類型及運算2014_第4頁
MATLAB數(shù)據(jù)類型及運算2014_第5頁
已閱讀5頁,還剩160頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

MATLAB數(shù)據(jù)類型及運算MATLAB的保留常量常量取值ans結果的缺省變量名i,j虛數(shù)單位,定義為i=j=pi圓周率,3.1415926eps機器零閾值,當和1相加就產生一個比1大的數(shù)。eps=2.2204x10-16realmax最大正浮點數(shù),realmax=1.7977x10308realmin最小正浮點數(shù),realmin=2.2251x10-308Inf(inf)無窮大,包含正無窮和負無窮,如1/0NaN(nan)不定值,包含0/0和∞/∞MATLAB的保留常量常量取值nargin函數(shù)輸入?yún)?shù)個數(shù)nargout函數(shù)輸出參數(shù)個數(shù)lasterr存放最新的錯誤信息lastwarn存放最新的警告信息例:最小復數(shù)單位的使用。>>x=ix=0+1.0000i>>i=1i=1>>y=i+jy=1.0000+1.0000i>>clear>>z=i+jz=0+2.0000i7+5i7+5*iMATLAB語言中的變量(1)變量不需要事先聲明,也不需要指定維數(shù),MATLAB在遇到新的變量名時,會自動建立變量并分配內存;(2)給變量賦值時,如果變量不存在,會創(chuàng)建它;如果變量存在,會更新它的值;(3)賦值時,右邊的表達式必須有一個值(即使值為空)。MATLAB語言中的變量MATLAB語言的變量命名規(guī)則是:(1)變量名必須是不含空格的單個詞;(2)變量名必須以字母打頭,之后可以是任意字母、數(shù)字或下劃線,變量名中不允許使用標點符號(3)變量名可任意長,但使用前N個字符。N與硬件有關,由函數(shù)namelengthmax返回,一般N=63;(4)變量名區(qū)分大小寫;(5)不能使用函數(shù)名和系統(tǒng)保留字;如要察看變量a的值,只需要在命令窗口中輸入變量的名稱即可:>>a任何MATLAB的語句的執(zhí)行結果都可以在屏幕上顯示,同時賦值給指定的變量,沒有指定變量時,賦值給一個特殊的變量ans,數(shù)據(jù)的顯示格式由format命令控制。format只是影響結果的顯示,不影響其計算與存儲;MATLAB總是以雙字長浮點數(shù)(雙精度)來執(zhí)行所有的運算。>>Abc_1=10Abc_1=10>>a=[123];>>aa=123>>abc_1???Undefinedfunctionorvariable'abc_1'.>>Abc_1Abc_1=10例:計算表達式的值,并顯示計算結果。

在MATLAB命令窗口輸入命令:>>x=1+2i;>>y=3-sqrt(17);>>z=(cos(abs(x+y))-sin(78*pi/180))/(x+abs(y))z=-0.3488+0.3286iMATLAB中每一個數(shù)據(jù)元素都是雙精度表示和存儲的。如果輸出矩陣的每個元素都是純整數(shù),MATLAB就用不加小數(shù)點的純整數(shù)格式顯示結果。只要矩陣中有一個元素不是純整數(shù),MATLAB就按當前的輸出格式顯示計算結果。數(shù)據(jù)輸出時可用format命令設置或改變輸出格式,format命令的格式為:

format格式符格式符決定數(shù)據(jù)的輸出格式。指令含義舉例說明formatshort輸出小數(shù)點后4位有效數(shù)字,最多不超過7位;對于大于1000的實數(shù),用5位有效數(shù)字的科學計數(shù)形式顯示314.159被顯示為314.1590;3141.59被顯示為3.1416e+003formatlong15位有效數(shù)字數(shù)字表示3.14159265358979formatshorte5位有效數(shù)字的科學記數(shù)表示3.1416e+00formatlonge15位有效數(shù)字的科學記數(shù)表示3.14159265358979e+00formatshortg從formatshort和formatshorte中自動選擇最佳輸出方式3.1416formatlongg從formatlong和formatlonge中自動選擇最佳輸出方式3.14159265358979formatrat近似有理數(shù)表示355/113指令含義舉例說明formathex十六進制表示4009211h54442d18format+正數(shù)、負數(shù)、零分別用+、-、空格表示+formatbank(金融)元、角、分表示3.14formatcompact顯示變量之間沒有空行formatloose在顯示變量之間有空行默認的顯示格式是short該表中實現(xiàn)的所有格式設置僅在MATLAB的當前執(zhí)行過程中有效。>>x=[4/31.2345e-6]x=1.33330.0000>>formatshort>>xx=1.33330.0000>>formatshorte>>xx=1.3333e+0001.2345e-006>>formatlong>>xx=1.3333333333333330.000001234500000>>formatlonge>>xx=1.333333333333333e+0001.234500000000000e-006>>formatbank>>xx=1.330.00>>formathex>>xx=3ff55555555555553eb4b6231abfd271>>format+>>xx=++矩陣矩陣是Matlab的基本處理對象,Matlab的大部分運算或命令都是在矩陣運算的定義下執(zhí)行的。生成矩陣時無須對矩陣的維數(shù)和類型進行說明,Matlab會根據(jù)用戶輸入的內容自動進行設置。矩陣中的元素可以采用具體數(shù)值或表達式,可以通過下標對元素進行訪問、輸入或修改。矩陣的創(chuàng)建直接輸入利用已建好的矩陣建立更大的矩陣利用MATLAB內部函數(shù)利用M文件建立矩陣外部數(shù)據(jù)文件裝載對于較大矩陣的輸入,可采用變量編輯器。

矩陣的建立

1、直接輸入法

從鍵盤直接輸入矩陣的元素。矩陣元素可以是實數(shù),復數(shù),也可以是表達式。但表達式中不可包含未知的變量,MATLAB用表達式的值為該位置的矩陣元素賦值。當矩陣中沒有任何元素時,該矩陣被稱作“空陣”(EmptyMatrix)。具體方法如下:(1)全部矩陣元素必須用方括號([])括起來,按矩陣行的順序輸入各元素。(2)同一行的各元素之間用空格或逗號分隔。不同行的元素之間用分號或回車符分隔。(3)矩陣元素可為運算表達式,若不想獲得中間結果,可以用“;”結束。例如,在CommandWindow窗口中輸入如下形式:

A=[2345;1357;0369]

或A=[234513570369]

結果為:

A=234513570369直接輸入復數(shù)矩陣:兩種方式:

B=[123;456]+i*[123;456]或B=[1+i2+2i3+3i;4+4i5+5i6+6i]

結果為:

B=1.0000+1.0000i2.0000+2.0000i3.0000+3.0000i4.0000+4.0000i5.0000+5.0000i6.0000+6.0000i

矩陣的建立

>>y=[2,4,5368]>>y=245368>>a=1;b=2;c=3;>>x=[5bc;a*ba+cc/b]>>x=5.00002.00003.00002.00004.00001.5000>>z=[2pi/2;sqrt(3)3+5i]>>z=2.00001.57081.73213.0000+5.0000i在命令窗口中輸入矩陣的建立多維矩陣的創(chuàng)建>>a=[123;456;789]a=123456789>>a(:,:,2)=[001;010;100]a(:,:,1)=123456789a(:,:,2)=00101010022由向量構成矩陣向量是組成矩陣的基本元素之一。向量元素需要用方括號括起來。元素之間用空格和逗號分隔生成行向量,用分號隔開生成列向量??梢园研邢蛄靠闯?n階矩陣,把列向量看成n1

階矩陣。向量的構造方法:直接輸入向量利用冒號生成向量利用linspace/logspace生成向量矩陣的建立例:在命令窗口輸入:>>a=[0123456789]或>>a=[0,1,2,3,4,5,6,7,8,9]按“Enter”鍵確認后,在命令窗口中顯示a=0123456789冒號表達式在MATLAB中,冒號是一個重要的運算符,利用它可以產生行向量。(1)“初值:終值”方式。創(chuàng)建以初值開始以終值結束且間隔為1的行向量。例:在命令窗口輸入:>>a=1:5按“Enter”鍵確認后,在命令窗口中顯示a=12345(2)“初值:間隔:終值”方式。創(chuàng)建以初值開始以終值結束且以給定間隔為增量的行向量。例:在命令窗口輸入:>>a=0:5:30按“Enter”鍵確認后,在命令窗口中顯示a=

051015202530>>v1=0:0.2:piv1=Columns1through900.20000.40000.60000.80001.00001.20001.40001.6000Columns10through161.80002.00002.20002.40002.60002.80003.0000>>

v2=0:-0.1:pi%步距為負,不能生成向量,得出空矩陣v2=Emptymatrix:1-by-0>>v3=0:piv3=0123>>v4=pi:-1:0%逆序排列構成新向量v4=3.14162.14161.14160.1416>>v5=[0:0.4:pi,pi]v5=00.40000.80001.20001.60002.00002.40002.80003.1416(3)利用linspace創(chuàng)立。在命令窗口輸入“a=linspace(初值,終值,n)”,則會創(chuàng)建以初值開始以終值結束且共有n個元素的行向量a。缺省n為100。顯然,linspace(a,b,n)與a:(b-a)/(n-1):b等價。例:在命令窗口輸入:>>a=linspace(1,10,10)按“Enter”鍵確認后,在命令窗口中顯示a=12345678910(4)利用logspace創(chuàng)立。在命令窗口輸入“a=logspace(n1,n2,n)”,則會創(chuàng)建以10n1值開始以10n2值結束且共用n個對數(shù)分割量的行向量a。缺省n為50。例:在命令窗口輸入:>>a=logspace(1,3,3)按“Enter”鍵確認后,在命令窗口中顯示a=101001000>>b=logspace(0,2,4)b=

1.00004.641621.5443100.0000>>x=0:0.5:2

x=00.50001.00001.50002.0000>>y=linspace(0,2,7)y=

00.33330.66671.00001.33331.66672.0000>>z=[-1x3]z=-1.000000.50001.00001.50002.00003.0000>>u=[y;z]u=00.33330.66671.00001.33331.66672.0000-1.000000.50001.00001.50002.00003.0000利用已建好的矩陣建立更大的矩陣大矩陣可由已建好的小矩陣拼接而成。例如:>>A=[1,2,3;4,5,6;7,8,9];>>B=[11,12,13;14,15,16;17,18,19];>>C=[A,B;B,A]C=123111213456141516789171819111213123141516456171819789矩陣的建立2、利用MATLAB函數(shù)建立數(shù)值矩陣MATLAB提供了許多生成和操作矩陣的函數(shù),可以利用它們建立矩陣。例:利用reshape函數(shù)建立數(shù)值矩陣>>a=1:9;>>b=reshape(a,3,3)b=147258369%生成空陣>>K=[]

K=

[]利用diag函數(shù)建立對角矩陣>>A=rand(4,4)%產生4x4的“0-1”分布的矩陣AA=0.81470.63240.95750.95720.90580.09750.96490.48540.12700.27850.15760.80030.91340.54690.97060.1419>>B=diag(A)%利用矩陣A的主對角線的元素建立矩陣BB=0.81470.09750.15760.1419>>C=diag(B)%利用矩陣B中元素構建對角矩陣CC=0.814700000.097500000.157600000.14193利用M文件建立矩陣對于比較大且比較復雜的矩陣,可以為它專門建立一個M文件。例:在M文件窗口中輸入

A=[2345;1357;0369]

如果文件test.m保存在MATLAB搜索路徑中,在MATLAB命令窗口中輸入test就可產生矩陣A,可供以后使用。

矩陣的建立

運行test文件結果如下:>>testA=23451357036936利用M文件產生矩陣A=[1,2,3,4,56,7,8,9,1011,12,13,14,1516,17,18,19,2021,22,23,24,25]4利用外部數(shù)據(jù)文件裝入到指定矩陣:(1)通過MATLAB提供的文件輸入、輸出函數(shù)來實現(xiàn)。例:將圖像penquan.jpg讀入到矩陣中,在CommandWindow窗口輸入如下語句:

>>I=imread('penquan.jpg');>>whosNameSizeBytesClassAttributesI1944x2592x315116544uint8

矩陣的建立(2)通過load命令,將外部數(shù)據(jù)文件中的內容調入到工作空間中創(chuàng)建矩陣,外部文件的擴展名為.dat。例如:>>loadtest.dat>>test從外部數(shù)據(jù)文件調入矩陣用load命令輸入用Import菜單輸入矩陣的尋址與賦值全下標方式指出某一元素在第幾行第幾列。單下標方式只用一個下標來指明元素在數(shù)組中的位置。要對二維數(shù)組的所有元素進行“一維編號”。矩陣元素

(1)MATLAB允許對一個矩陣的單個元素進行賦值和操作。通過下標引用矩陣的元素,例如

A(3,2)=200

只改變該元素的值,不影響其他元素的值。42矩陣元素的修改>>A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]

A=

12345678910111213141516>>A(1,1)ans=1>>A(2,3)ans=7>>A(1,1)=0;A(2,2)=A(1,2)+A(2,1);A(4,4)=cos(0);>>AA=

0234577891011121314151矩陣元素

如果給出的行下標或列下標大于原來矩陣的行數(shù)和列數(shù),則MATLAB將自動擴展原來的矩陣,并將擴展后未賦值的矩陣元素置為0。 >>A=[1,2,3;4,5,6]; >>A(4,6)=100 A= 123000 456000 000000 00000100矩陣元素

(2)采用矩陣元素的序號來引用矩陣元素。矩陣元素的序號就是相應元素在內存中的排列順序。在MATLAB中,矩陣元素按列存儲,先第一列,再第二列,依次類推。例如

A=[1,2,3;4,5,6];

A(3)

ans=

2

顯然,序號(Index)與下標(Subscript)是一一對應的,以m×n矩陣A為例,矩陣元素A(i,j)的序號為(j-1)*m+i。矩陣元素的引用>>rand('state',0)>>x=rand(1,5)x=0.95010.23110.60680.48600.8913>>x(3)ans=0.6068>>x([125])%位置坐標中間可以用逗號分隔ans=0.95010.23110.8913>>x(1:3)ans=0.95010.23110.6068矩陣元素的引用>>rand('state',0)>>x=rand(1,5)%生成均勻分布的隨機矩陣x=0.95010.23110.60680.48600.8913>>x(3:end)ans=0.60680.48600.8913>>x(3:-1:1)ans=0.60680.23110.9501>>x(find(x>0.5))ans=0.95010.60680.8913>>a=[123;456]a=123456>>a(2,2)ans=5>>a(1,3)=0a=120456>>b=a(4)b=5如果矩陣中只有部分元素需要改動,則可以通過對矩陣的賦值來完成。>>rand('state',0)>>x=rand(1,5)x=0.95010.23110.60680.48600.8913>>x(3)=0x=0.95010.231100.48600.8913>>x([14])=[11]x=1.00000.231101.00000.8913A(i,j):提取A矩陣第i行,第j列的元素(從1開始計數(shù))A(:,j):表示取A矩陣第j列的全部元素A(i,:):表示取A矩陣第i行的全部元素A(i:i+m,:):表示提取A矩陣第i~i+m行的全部元素;A(:,k:k+m):表示提取A矩陣第k~k+m列的全部元素;A(i:i+m,k:k+m)表示取A矩陣第i~i+m行內,并在第k~k+m列中的所有元素。A(m1:m2,n1:n2):提取第m1行到第m2行內,并在第n1列到第n2列中的所有元素(提取子塊);A(k):提取矩陣A按列存儲的第k個元素。例如,對于4x4矩陣A,A(8)是指矩陣A中的元素A(4,2);A(:):得到一個長列矢量,該矢量的元素將矩陣的列按先左后右的順序排成一維長列,再對元素位置編號;可利用一般向量和end運算符來表示矩陣下標,從而獲得子矩陣。end表示某一維的末尾元素下標。矩陣的拆分50矩陣的引用選出矩陣指定行、列及元素(創(chuàng)建子矩陣);

>>b=a(1:2,2:3)b=2356使矩陣中所有元素變?yōu)橐涣小?/p>

>>c=b(:)c=2536例:>>A=[1,2,3,4;3,4,5,6;5,6,7,8;7,8,9,0]A=1234345656787890>>B1=A(1:2:end,:)%提取全部奇數(shù)行、所有列。B1=12345678子矩陣提取

%提取3,2,1行、2,3,4列構成子矩陣。

>>B2=A([3,2,1],[2,3,4])A=B2=1234678345645656782347890%將A矩陣左右翻轉,即最后一列排在最前面。>>B3=A(:,end:-1:1)B3=4321654387650987矩陣下標如果在提取矩陣值時,行或列的值大于矩陣的大小,則出錯;例:對于矩陣A,給出結果。>>A=[246;357;189]A=246357189A(2,:)A(:,3)A(1:2,2:3)A(2:3,1:3)A(:)>>A(2,:)ans=357>>A(:,3)ans=679>>A(1:2,2:3)ans=4657>>A(2:3,1:3)ans=357189>>A(:)ans=231458679矩陣元素的刪除利用空矩陣刪除矩陣的元素空矩陣是指無任何元素的矩陣。在MATLAB中,定義[]為空矩陣。給變量X賦空矩陣的語句為X=[]。注意:X=[]與clearX不同,clear是將X從工作空間中刪除,而空矩陣則存在于工作空間中,只是維數(shù)為0。消除子塊:如果將矩陣的子塊賦值為空矩陣[],則相當于消除了相應的矩陣子塊。如果刪除了矩陣中的單個元素,矩陣將不再是矩陣。A(1,2)=[]將給出出錯信息。使用單下標可以刪除矩陣單個元素,剩下的元素排成一個行向量。例:>>A=[2345;1357;0369]A=234513570369>>A([12],[12])=[]???Subscriptedassignmentdimensionmismatch.>>A([12],:)=[]A=0369>>A=[2345;1357;0369]A=234513570369>>A(:,[12])=[]A=455769>>A=[2345;1357;0369]A=234513570369>>A(1,2)=[]???Subscriptedassignmentdimensionmismatch.字符串字符串中的每一個字符(含空格符)以其ASCII形式存放。所有字符串都用單引號括起來。>>s='matlab'一個字符串被視為一個行向量,字符串中的每個字符(包括空格)都是字符串變量(矩陣或向量)中的一個元素。字符串中的字符以ASCII碼形式儲存并區(qū)分大小,用函數(shù)abs可以看到字符的ASCII碼。在Matlab中,字符串和字符矩陣基本上是等價的。>>s=['matlab']等價于>>s='matlab'創(chuàng)建字符串MATLAB中所有字符串使用單引號界定后輸入或賦值。例如:>>a='matlab'a=matlab字符串的每個字符(含空格)都是相應矩陣的一個元素>>size(a)ans=16%一行六列創(chuàng)建字符串字符變量可以通過中括號合并成更大的字符串>>a='MAT'a=MAT>>b=[a,'LAB']b=MATLAB從字符串中提取小字符串>>c=b(2:5)c=ATLA直接輸入建立二維字符串數(shù)組>>str=['one';'two';'three']???Errorusing==>vertcatCATargumentsdimensionsarenotconsistent.直接輸入方法中每一行的字符數(shù)必須一致>>str=['one';'two';'six']str=onetwosix利用‘str2mat’函數(shù)建立二維字符串數(shù)組>>str=str2mat('one','two','three')str=onetwothree例:建立一個字符串向量,然后對該向量做如下處理:

(1)取第1~5個字符組成的子字符串。

(2)將字符串倒過來重新排列。

(3)將字符串中的小寫字母變成相應的大寫字母,其余字符不變。

(4)統(tǒng)計字符串中小寫字母的個數(shù)。>>ch='ABc123d4e56Fg9';>>subch=ch(1:5)%取子字符串subch=ABc12>>revch=ch(end:-1:1)%將字符串倒排revch=9gF65e4d321cBA>>k=find(ch>='a'&ch<='z')%找小寫字母的位置k=37913>>ch(k)=ch(k)-('A'-'a')%將小寫字母變成相應的大寫字母ch=ABC123D4E56FG9>>length(k)%統(tǒng)計小寫字母的個數(shù)ans=4類型轉換int2str四舍五入為整數(shù)轉換為字符串num2str將數(shù)字轉換為字符串mat2str將矩陣的數(shù)據(jù)轉換為字符串str2num將字符串轉變?yōu)閿?shù)字‘num2str’和‘str2num’函數(shù)的用法實例。>>a=['12';'34']a=1234>>b=str2num(a)b=1234>>c=str2num('1+2i')c=1.0000+2.0000i>>d=str2num('1+2i')

%注意空格d=1.00000+2.0000i‘num2str’和‘str2num’函數(shù)的用法實例。>>e=num2str(rand(3,3),6)%可指定有效數(shù)字位數(shù)e=0.8147240.9133760.2784980.9057920.6323590.5468820.1269870.09754040.957507>>whosNameSizeBytesClassAttributesa2x312charb2x232doublec1x116doublecomplexd1x232doublecomplexe3x34204char

字符串函數(shù)eval(string)作為一個MATLAB命令求字符串的值blanks(n)返回一個n個空格的字符串deblank去掉字符串中后拖的空格feval求由字符串給定的函數(shù)值findstr從一個字符串內找出字符串isletter字母存在時返回真值isspace空格字符存在時返回真值isstr輸入是一個字符串,返回真值lasterr返回上一個所產生MATLAB錯誤的字符串strcmp字符串相同,返回真值strrep用一個字符串替換另一個字符串strtok在一個字符串里找出第一個標記字符串比較>>str1='matlab'str1=matlab>>str2='matrix'str2=matrix>>strcmp(str1,str2)ans=0>>strncmp(str1,str2,2)%比較兩個字符串的前兩個字符ans=1>>A=str1==str2%應用‘==’比較字符串A=111000>>B=str1~=str2B=000111字符串分類>>str='MATLAB'str=MATLAB>>isletter(str)%判斷字符串中字符是否是字母ans=10101010101>>isspace(str))%判斷字符串中字符是否是空白字符ans=01010101010查找與替換>>str1='Iamastudent'str1=Iamastudent>>strrep(str1,'s','S')ans=IamaStudent查找與替換>>str1='Iamastudent'str1=Iamastudent>>str2='student';>>str3='teacher';>>str4=strrep(str1,str2,str3)str4=Iamateacher查找與替換>>str1='Iamastudent'str1=Iamastudent>>str2='student';>>position=findstr(str1,str2)%找出str2處于str1的位置position=8結構數(shù)組結構是包含一組記錄的數(shù)據(jù)類型,而記錄則是存儲在相應的字段中。結構的元素可以是不同的數(shù)據(jù)類型,它能將一組具有不同屬性的數(shù)據(jù)納入到一個統(tǒng)一的變量名下進行管理。結構數(shù)組的引用通過屬性名來實現(xiàn)。結構數(shù)組的創(chuàng)建有兩種方法:語句直接創(chuàng)建和由struct函數(shù)創(chuàng)建。結構型變量的生成直接輸入法:采用直接輸入法時,在給結構體成員元素直接賦值的同時定義該元素的名稱,并使用點兒將結構型變量和成員元素名連接。創(chuàng)建結構數(shù)組>>='henry';>>employee.sex='male';>>employee.age='25';>>employee.number='123456789';>>employeeemployee=name:'henry'sex:'male'age:'25'number:'123456789'可以通過以下形式語句添加新的結構變量(另外的學生數(shù)據(jù))。系統(tǒng)將默認之前的employee為employee(1)>>employee(2).name='lee';>>employee(2).sex='female';>>employee(2).age='23';>>employee(2).number='987654321';>>employee(2)ans=name:'lee'sex:'female'age:'23'number:'987654321'此時,輸入employee將只得到該結構的成員變量名而不顯示內容>>employeeemployee=1x2structarraywithfields:namesexagenumber創(chuàng)建結構數(shù)組使用struct函數(shù)創(chuàng)建結構數(shù)組:根據(jù)指定的字段及其相應的值創(chuàng)建結構體數(shù)組。格式:str-array=struct(‘field’,val1,’field’,val2…);>>student=struct('name','henry','age',25,'grade',uint16(1))student=name:'henry'age:25grade:1>>whosNameSizeBytesClassAttributesstudent1x1392struct

>>student=struct('name',{'richard','jacson'},'age',{23,24},'grade',{2,3})student=1x2structarraywithfields:nameagegrade>>whosNameSizeBytesClassAttributesstudent1x2610struct>>student=struct('name',{},'age',{},'grade',{})student=0x0structarraywithfields:nameagegrade>>whosNameSizeBytesClassAttributesstudent0x0192struct>>student=repmat(struct('name','henry','age',25,'grade',1),1,3)student=1x3structarraywithfields:nameagegrade>>student(3)ans=name:'henry'age:25grade:1結構數(shù)組中的數(shù)據(jù)獲取>>clear>>a(2)=struct('tag','openbutton','name','open','color','red');>>a(3)=struct('tag','exitbutton','name','exit','color','green');>>x=a(2).tag%利用“.”獲取結構數(shù)組中的數(shù)據(jù)x=openbutton>>y=a(3).colory=green結構數(shù)組的數(shù)據(jù)獲取和設置>>a(2)=struct('tag','openbutton','name','open','color','red');>>a(3)=struct('tag','exitbutton','name','exit','color','green');%通過getfield函數(shù)獲得結構數(shù)組中的數(shù)據(jù)>>z=getfield(a,{2},'name')z=open%通過setfield函數(shù)設置結構數(shù)組中的數(shù)據(jù)>>a=setfield(a,{2},'color','black');>>a(2).colorans=black結構數(shù)組操作添加結構數(shù)組中的結構域要給結構矩陣a增加一個成員x4,可給a中任意一個元素增加成員x4:a(1).x4=‘410075’;但其他成員均為空矩陣,可以使用賦值語句給它賦確定的值。>>clear>>a(2)=struct('tag','openbutton','name','open','color','red');>>a(2).position=[2552552550];%添加結構域>>a(2)ans=tag:'openbutton'name:'open'color:'red'position:[2552552550]結構數(shù)組操作刪除結構數(shù)組中的結構域>>clear>>a(2)=struct('tag','openbutton','name','open','color','red');%調用rmfield函數(shù)刪除結構數(shù)組中的結構域color>>a=rmfield(a,'color')a=1x2structarraywithfields:tagname結構數(shù)組操作結構數(shù)組運算>>student(1)=struct('NO',06129,'name','john','score',[869176;859483])student=NO:6129name:'john'score:[2x3double]%調用mean函數(shù)計算結構數(shù)組student的平均分數(shù)>>aver=mean(student(1).score)aver=85.500092.500079.5000元胞數(shù)組元胞數(shù)組可看作一種無所不包的特殊矩陣。元胞數(shù)組的每一個元素稱為一個cell,每個cell自己本身又是一個數(shù)組。元胞數(shù)組中可以存放各種不同類型數(shù)據(jù),各元胞的內容和維數(shù)可以不相同。訪問元胞數(shù)組的元素可以使用單下標或全下標方式元胞數(shù)組的創(chuàng)建使用“{}”。元胞數(shù)組占用的內存空間和元胞數(shù)組的內容相關,不同元胞數(shù)組占用內存空間不同。結構體是根據(jù)屬性名組織起來的不同類型數(shù)據(jù)的集合。結構體和單元數(shù)組的共同之處在于它們都提供了一種分級存儲機制來存儲不同類型的數(shù)據(jù),不同之處是組織數(shù)據(jù)的方式不一樣。結構體數(shù)組里的數(shù)據(jù)是通過屬性名來引用的,而在單元數(shù)組里,數(shù)據(jù)是通過單元數(shù)組下標引用來操作的。創(chuàng)建元胞數(shù)組由語句直接生成>>A={'test',[12;34],{'Good','Thanks'},rand(3)}A='test'[2x2double]{1x2cell}[3x3double]>>whosNameSizeBytesClassAttributesA1x4492cell

在顯示元胞數(shù)組內容時,對于內容較多的元胞,顯示的內容為元胞的數(shù)據(jù)類型和尺寸。>>a={'matlab',20;ones(2,3),1:10}a='matlab'[20][2x3double][1x10double]>>b=[{'matlab'},{20};{ones(2,3)},{1:10}]b='matlab'[20][2x3double][1x10double]>>isequal(a,b)ans=1創(chuàng)建元胞數(shù)組由各元胞創(chuàng)建>>B{1,1}=[123;456;789];>>B{1,2}='kitty';>>B{2,1}=3+7i;>>B{2,2}=eye(3);>>BB=[3x3double]'kitty'[3.0000+7.0000i][3x3double]>>whosNameSizeBytesClassAttributesA1x4492cellB2x2410cell

>>c={10}c=[10]>>c(1,2)={2}c=[10][2]>>c(2,2)={5}c=[10][2][][5]MATLAB能夠自動擴展數(shù)組的尺寸,沒有被明確賦值的元素作為空元胞數(shù)組存在。創(chuàng)建元胞數(shù)組cell函數(shù)創(chuàng)建元胞數(shù)組>>a=cell(1)a={[]}>>b=cell(1,2)b=[][]>>c=cell(3,3)c=[][][][][][][][][]創(chuàng)建元胞數(shù)組cell函數(shù)創(chuàng)建元胞數(shù)組>>d=cell(2,2,2)d(:,:,1)=[][][][]d(:,:,2)=[][][][]>>whosNameSizeBytesClassAttributesA1x4492cellB2x2410cella1x14cellans1x11logicalb1x28cellc3x336celld2x2x232cell

元胞數(shù)組中的數(shù)據(jù)獲得要顯示單元數(shù)組可以直接在命令窗口中輸入單元數(shù)組的名字,也可以使用函數(shù)celldisp(c)來輸出;想得到單元數(shù)組中某一個單元的值時,可以采用c(m,n)或c{m,n}的格式輸出。但是它們得到的結果表示形式是不同的。大括號用于表示元胞的內容,小括號表示指定的元胞。分別用它們賦值產生的數(shù)據(jù)類型也不同。要訪問指定元胞中的具體元素,可以在元胞數(shù)組內容下標的后面加上指定數(shù)組元素的下標。如a{1,2}(1,2)表示元胞a{1,2}的元素(1,2)?!皗}”和“()”直接相連,并且兩種括號不能寫混。元胞數(shù)組中的數(shù)據(jù)獲得>>a={20,'matlab';ones(2,3),1:3}a=[20]'matlab'[2x3double][1x3double]>>str=a{1,2}%a{1,2}表示對應元胞的內容str=matlab>>class(str)%查看變量str的數(shù)據(jù)類型,為字符型ans=char>>str2=a(1,2)%返回元胞數(shù)組,a(1,2)表示元胞數(shù)組中的一個元胞str2='matlab'>>class(str2)%查看變量str2的數(shù)據(jù)類型,為元胞ans=cell元胞數(shù)組中的數(shù)據(jù)獲得元胞中具體元素的訪問:>>a={20,'matlab';rand(2,3),1:3}a=[20]'matlab'[2x3double][1x3double]>>a{2,1}(2,2)ans=0.9572>>a{2,1}(2,3)ans=0.8003>>a{1,2}(2,3)???Indexexceedsmatrixdimensions.%a{1,2}為‘matlab’,無元素(2,3),故出錯>>a{1,2}(2)ans=a>>a{2,2}(2)ans=2元胞數(shù)組中的數(shù)據(jù)獲得使用元胞的下標創(chuàng)建新的元胞數(shù)組>>a=[{1},{2},{3};{4},{5},{6};{7},{8},{9}]a=[1][2][3][4][5][6][7][8][9]>>b=a(2:3,2:3)b=[5][6][8][9]>>c=a(1:3,2:3)c=[2][3][5][6][8][9]元胞數(shù)組顯示使用celldisp函數(shù)顯示元胞數(shù)組內容。函數(shù)celldisp()更適用于具有大量數(shù)據(jù)的單元數(shù)組的顯示。>>celldisp(a)a{1,1}=20a{2,1}=111111a{1,2}=matlaba{2,2}=123a{1,3}=3.0000-7.0000ia{2,3}=0c{m,n}和celldisp(c)顯示的結果形式相同。元胞數(shù)組顯示通過cellplot函數(shù)以圖形的方式顯示元胞數(shù)組內容h=cellplot(c)返回一個向量,這個向量綜合體現(xiàn)了表面、線和句柄。h=cellplot(c,’legend’)返回一個向量,這個向量綜合體現(xiàn)了表面、線和句柄,并有圖形注釋。>>cellplot(a,'legend')元胞數(shù)組和數(shù)值數(shù)組之間的轉換數(shù)值數(shù)組轉換成元胞數(shù)組>>A=magic(3);>>C=num2cell(A,2)%2代表“直行被切割”,1代表“橫列被切割”

C=[1x3double][1x3double][1x3double]>>celldisp(C)C{1}=816C{2}=357C{3}=492元胞數(shù)組和數(shù)值數(shù)組之間的轉換元胞數(shù)組轉換成數(shù)值數(shù)組>>C={[1][234];[5;9][678;101112]}C=[1][1x3double][2x1double][2x3double]>>C(1,1)ans=[1]>>C(2,1)ans=[2x1double]>>M=cell2mat(C)M=123456789101112元胞數(shù)組的刪除要刪除元胞數(shù)組中的行或列,可以用冒號表示單元數(shù)組中的行或列,對其賦空矩陣。刪除后的單元數(shù)組的行或列減一。刪除元胞數(shù)組中元胞的表達式不能用大括號。刪除元胞數(shù)組的一個單元時,可認為元胞的編號是按列計數(shù)的。指定的元胞被刪除后,單元數(shù)組變?yōu)樾惺噶康男问?。元胞?shù)組的刪除>>a={20,'matlab';ones(2,3),1:3}a=[20]'matlab'[2x3double][1x3double]>>a(1,:)=[]a=[2x3double][1x3double]>>a(1,2)=[]???Anullassignmentcanhaveonlyonenon-colonindex.元胞數(shù)組的刪除>>a={20,'matlab';ones(2,3),1:3};>>a{1}=[]a=[]'matlab'[2x3double][1x3double]>>a(1)=[]a=[2x3double]'matlab'[1x3double]>>a(2)=[]a=[2x3double][1x3double]元胞數(shù)組的刪除>>a={20,'matlab';ones(2,3),1:3}a=[20]'matlab'[2x3double][1x3double]>>a(1:2)=[]a='matlab'[1x3double]

1.基本算術運算

MATLAB的基本算術運算有:+(加)、-(減)、*(乘)、/(右除)、\(左除)、^(乘方)。

注意,運算是在矩陣意義下進行的,單個數(shù)據(jù)的算術運算只是一種特例。

MATLAB運算矩陣加減法

C=A+BD=A-B相加減的兩矩陣必須有相同的行和列,兩矩陣對應元素相加減;如果A與B的維數(shù)不相同,則MATLAB將給出錯誤信息,提示用戶兩個矩陣的維數(shù)不匹配。允許參與運算的兩矩陣之一是標量,標量與矩陣的所有元素分別進行加減操作。

>>a=[1,2;3,4];b=[9,8;7,6];c=a+bc=10101010

矩陣的加減運算>>A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16];>>B=[1,sqrt(25),9,132,6,107*23+sin(pi),7,11,154,abs(-8),12,16];>>C=A+B

C=

27121771217221217222717222732>>D=A-BD=0-3-6-930-3-6630-39630>>E=A+3

E=

45678910111213141516171819矩陣乘法若A為n×m矩陣,B為m×r矩陣,則C=A*B為n×r矩陣。各個元素為MATLAB表示

C=A*B對于矩陣乘運算,A矩陣的列數(shù)必須等于B矩陣的行數(shù);標量可與任何矩陣相乘。>>A=[1,2,3;4,5,6;7,8,9];>>B=[-1,0,1;1,-1,0;0,1,1];>>C1=A*BC1=11411101116>>C2=B*AC2=666-3-3-3111315>>A=[1,2,3;4,5,6];>>B=A*A???Errorusing==>mtimesInnermatrixdimensionsmustagree.矩陣除法矩陣左除\:AX=B,求XMATLAB求解:X=A\B若A為非奇異方陣,則X=A-1B,即inv(A)*B最小二乘解(若A不是方陣)矩陣右除/:XA=B,求XMATLAB求解:X=B/A若A為非奇異方陣,則X=BA-1,即B*inv(A)最小二乘解(若A不是方陣)矩陣除法對于含有標量的運算,兩種除法運算的結果相同,如3/4和4\3有相同的值,都等于0.75。又如,設a=[10.5,25],則a/5=5\a=[2.10005.0000]。對于矩陣來說,左除和右除表示兩種不同的除數(shù)矩陣和被除數(shù)矩陣的關系。對于矩陣運算,一般A\B≠B/A。>>A=[1,2,3;4,2,6;7,4,9];>>B=[4,3,2;7,5,1;12,7,92];>>C1=A\BC1=0.5000-0.500044.50001.00000.000046.00000.50001.1667-44.8333>>C2=B/AC2=-0.1667-3.33332.5000-0.8333-7.66675.500012.833363.6667-36.5000

矩陣乘法>>C=A*BC=307011015070174278382110278446614150382614846>>D=A*3D=36912151821242730333639424548矩陣除法左除A\B=inv(A)*B>>A=[8,1,6;3,5,7;4,9,2]A=

816

357

492>>B=[1,1,1;1,2,3;1,3,6]

B=

111123136>>A\Bans=0.06670.05000.09720.06670.30000.63890.06670.0500-0.0694>>C=inv(A)C=

0.1472-0.14440.0639-0.06110.02220.1056-0.01940.1889-0.1028>>C*B

ans=

0.06670.05000.09720.06670.30000.63890.06670.0500-0.0694右除A/B=A*inv(B)>>A/Bans=

27-3112

12

溫馨提示

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

評論

0/150

提交評論