第二講數值數組及其運算_第1頁
第二講數值數組及其運算_第2頁
第二講數值數組及其運算_第3頁
第二講數值數組及其運算_第4頁
第二講數值數組及其運算_第5頁
已閱讀5頁,還剩76頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第二講 數值數組及其運算數值數組和數組運算始終是MATLAB的核心1第二講 數值數組及其運算2.1 引言2.2 一維數組的創建和尋訪2.3 二維數組的創建2.4 二維數組元素的標識2.5 二維數組的子數組尋訪和賦值2.6 執行數組運算的常用函數2第二講 數值數組及其運算2.7 數組運算和矩陣運算2.8 標準數組生成函數和數組操作函數2.9 數組構作技法綜合2.10 高維數組2.11 “非數”和“空”數組2.12 關系操作和邏輯操作32.1 引言數組:由一組實數或復數排成的長方陣列(Array)一維的“行”或“列”二維的“矩形”三維的“若干矩形的堆疊”更高的任意維42.1 引言數組運算:無論對數

2、組施加什么運算(包括函數),總認為是對數組中每個元素平等的實施同樣的操作設計數組和數組運算的目的:使程序簡單、易讀;更接近數學公式提高程序向量化程度,提高計算效率,節省系統開銷52.1 引言繪制函數 在0 x1時的曲線x=0:0.1:1 %定義自變量的采樣點取值數組y=x.*exp(-x)%利用數組運算計算各自變量采樣點上的函數值plot(x,y),xlabel(x),ylabel(y),title(y=x*exp(-x) %繪圖第一句定義自變量數組:0為起點,每隔0.1取一個點,直到1。得到111的數組第二句中,指數函數exp(-x)對x每個元素求值,結果也是111的數組數組乘是兩個數組對應

3、元素相乘,得到y也是111的數組連續函數必須在相應區間上采樣才能進行數值計算62.1 引言72.2 一維數組的創建和尋訪1. 一維數組的創建逐個元素輸入x=2 pi/2 sqrt(3) 3+5i冒號生成格式 x=a:inc:ba是第一個元素,inc是步長(缺省為1)若(b-a)是inc的整數倍,則生成數組最后一個元素等于b,否則小于b inc可取正數或負數。取正:ab82.2 一維數組的創建和尋訪線性采樣格式 x=linspace(a,b,n)a,b是第一個和最后一個元素,n是采樣點數生成1n的數組等價于x=a:(b-a)/(n-1):b運用MATLAB函數生成法如rand,zeros,one

4、s等以上均為行數組,列數組轉置即可92.2 一維數組的創建和尋訪2.一維數組子數組的尋訪和賦值子數組的尋訪(Address)rand(state,0)%把均勻分布偽隨機發生器置為0狀態x=rand(1,5) %產生15的均布隨機數組x(3) %尋訪數組x的第三個元素x(1 2 5)%尋訪數組x的第一、二、五個元素組成的子數組x(1:3) %尋訪前三個元素組成的子數組x(3:end)%尋訪除前2個元素外的全部其他元素。end是最后一個元素的下標x(3:-1:1) %由前三個元素倒排構成的子數組x(find(x0.5) %由大于0.5的元素構成的子數組x(1 2 3 4 4 3 2 1)%對元素可

5、以重復尋訪,使所得數組長度允許大于原數組102.2 一維數組的創建和尋訪子數組的賦值(Assign)x(3) = 0 %第三個元素賦值為0 x(1 4)=1 1 %第一、四個元素都賦值為1保證被賦值的子數組長度與送入的數組長度相同112.3 二維數組的創建二維數組與矩陣二維數組是由實數或復數排列成矩形構成的從數據結構上看,矩陣和二維數組沒有區別當二維數組帶有線性變換含義時,就是矩陣122.3 二維數組的創建1.直接輸入法二維數組三要素:整個數組必須以“”為首尾數組行與行之間必須用“;”或回車隔離數組元素必須用“,”或空格分隔132.3 二維數組的創建在MATLAB環境下,用下面三條指令創建二維

6、數組Ca=2.7358; b=33/79;%這兩條指令分別給變量 a ,b 賦值C=1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i %創建二維數組CC = 1.0000 5.4716 + 0.4177i 0.6909 0.7071 4.8244 3.5000 + 1.0000i “;”在“”內,是數組行分隔符“;”作為指令結束符,不顯示執行結果142.3 二維數組的創建復數數組的另一種輸入方式M_r=1,2,3;4,5,6,M_i=11,12,13;14,15,16CN=M_r+i*M_i %由實部、虛部數組構成復數數組M_r = 1 2 3 4 5 6M_

7、i = 11 12 13 14 15 16CN = 1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i 4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i “,”在“”內,是數組元素分隔符“,”作為指令結束符,顯示執行結果152.3 二維數組的創建2.數組編輯器創建單擊工作空間中的“新建”圖標3.利用M文件創建和保存數組對于經常需要調用的數組,尤其是比較大而復雜的數組,值得為它專門建立一個M文件4.利用MATLAB函數創建162.4 二維數組元素的標識1.“全下標”標識經典教科書的標識法即指出是

8、“第幾行,第幾列”的元素優點:幾何概念清楚,引述簡單。(最常用)“全下標”由兩個下標組成:行下標,列下標。例如:A(2,5)172.4 二維數組元素的標識2.“單下標”標識就是用一個下標來指明元素在數組中的位置對二維數組元素進行“一維編號”把二維數組所有列,按先左后右的次序,首尾相接排成“一維長列”,然后自上往下編號“單下標”與“全下標”轉換關系:以(mn)的二維數組A為例,全下標元素位置是“第r行,第c列”,改為單下標表示為a=(c-1)m+r。MATLAB有兩個指令可實現此轉換:sub2ind 據全下標算出單下標ind2sub 據單下標算出全下標182.4 二維數組元素的標識3.“邏輯1”

9、標識常用問題:尋找數組中大于某值的元素找出數組 中所有絕對值大于3的元素A=zeros(2,5); %預生成一個25全零數組A(:)=-4:5 %運用“全元素”賦值法獲得AL=abs(A)3 %產生與A同維的“0-1”邏輯值數組islogical(L) %判斷L是否邏輯值數組X=A(L) %把L中邏輯值1對應的A元素取出192.4 二維數組元素的標識A = -4 -2 0 2 4 -3 -1 1 3 5L = 1 0 0 0 1 0 0 0 0 1ans = 1X = -4 4 5 L的元素是0或1,它是“邏輯數組”,是一種特殊的數據類型。“邏輯1”標識法:通過與A同樣大小的邏輯數組L中“1”

10、的位置指示A中元素的位置202.5 二維數組的子數組尋訪和賦值A(r,c)A的r行c列元素A(r,:)A的r行全部元素A(:,c)A的c列全部元素A(:)A的“單下標全元素”尋訪A(s)“單下標”尋訪。生成“s指定的”一維數組。s是行數組(或列數組),則A(s)就是長度相同的行數組(或列數組)。 A(L)“邏輯1”尋訪 。由與A同樣大小的“邏輯數組”L中的“1”元素選出A的對應元素。21A(r,c)=Sa“雙下標”方式賦值。Sa的“行寬、列長”必須與A(r,c)的“行寬、列長”相同。A(:)=D(:)全元素賦值。結果:保持A的“行寬、列長”不變。條件:A、D兩個數組的元素數相等。A(s)=Sa

11、“單下標”部分元素賦值。結果:保持A的“行寬、列長”不變。條件:s單下標數組長度必須與一維數組Sa的長度相等,但s、Sa不一定同是“行數組”或“列數組”。2.5 二維數組的子數組尋訪和賦值22A=zeros(2,4) %創建24的全零數組A = 0 0 0 0 0 0 0 0 A(:)=1:8 %全元素賦值方式A = 1 3 5 7 2 4 6 8 s=2 3 5; %產生單下標數組行數組A(s) %由“單下標行數組”尋訪產生A元素組成的行數組Sa=10 20 30 %Sa是長度為3的“列數組”(行數組也可以)A(s)=Sa %單下標方式賦值 2.5 二維數組的子數組尋訪和賦值23ans =

12、2 3 5Sa = 10 20 30A = 1 20 30 7 10 4 6 8 A(:,2 3)=ones(2) %雙下標賦值方式:把A的第2、3列元素全賦為1A = 1 1 1 7 10 1 1 8 2.5 二維數組的子數組尋訪和賦值242.6 執行數組運算的常用函數數組加、減、乘、除、冪函數的數組運算規則:函數f(.)對數組的運算相當于對數組的每一個元素作相同的函數運算大部分常用函數都執行數組運算三角、指數、復數、取整求余、坐標變換252.7 數組運算和矩陣運算矩陣運算有明確、嚴格的數學規則數組運算是MATLAB定義的規則目的:數據管理方便、操作簡單、指令形式自然、執行計算有效缺乏嚴謹的

13、數學推理,本身仍在完善影響隨MATLAB而擴大262.7 數組運算和矩陣運算運算指令對照A. 非共軛轉置 A 共軛轉置A.n各元素n次冪An方陣的n次冪A.*B對應元素相乘A*B矩陣相乘A./BA元素除以B元素A/BA右除BB.A同上BAA左除Bexp(A) 對各元素求冪expm(A)矩陣指數log(A) 對各元素求對數logm(A)矩陣對數sqrt(A) 對各元素求方根sqrtm(A)矩陣平方根272.7 數組運算和矩陣運算A=s標量賦給A的每個元素(s和A同大小)A#B對應元素關系運算(=,=,=,=)AB對應元素邏輯運算(&,|,)關系運算和邏輯運算僅對數組進行。282.7 數組運算和矩

14、陣運算兩種不同轉置的比較clear;A=zeros(2,3);A(:)=1:6; %全元素賦值法A=A*(1+i) %運用標量與數組乘產生復數矩陣A_A=A. %數組轉置,即非共軛轉置A_M=A %矩陣轉置,即共軛轉置A = 1.0000 + 1.0000i 3.0000 + 3.0000i 5.0000 + 5.0000i 2.0000 + 2.0000i 4.0000 + 4.0000i 6.0000 + 6.0000iA_A = 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i 5.0000 + 5.0

15、000i 6.0000 + 6.0000iA_M = 1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i 4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i29兩種不同乘的比較clear;A=1,2;3,4B=2,3;4,5C_A=A.*BC_M=A*BA =1 2 3 4B =2 3 4 5C =2 6 12 20D =10 13 22 292.7 數組運算和矩陣運算302.7 數組運算和矩陣運算兩種不同求平方根的比較clear;B=4,9;16,25B_A=sqrt(B)B_M=sqrtm(

16、B)B = 4 9 16 25B_A = 2 3 4 5B_M = 0.9421 + 0.9969i 1.5572 - 0.3393i 2.7683 - 0.6032i 4.5756 + 0.2053i312.8 標準數組生成函數和數組操作函數1.標準數組生成函數diag產生對角形數組eye產生單位數組magic產生魔方數組 (以上三類數組不適用于高維,只適用于二維以下)ones產生全1數組rand產生均勻分布隨機數組randn 產生正態分布隨機數組zeros產生全0數組322.8 標準數組生成函數和數組操作函數標準數組產生的演示ones(1,2) %產生長度為2的全1行數組ans = 1 1

17、 randn(state,0)%把正態隨機數發生器置0A=randn(2,3)%產生23的正態隨機陣A = -0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909 B=eye(3) %產生33的單位陣B = 1 0 0 0 1 0 0 0 1332.8 標準數組生成函數和數組操作函數C=diag(A) %取A陣的對角元C = -0.4326 0.2877D=diag(C) %內diag取A的對角元,外diag利用一維數組生成對角陣D = -0.4326 0 0 0.2877342.8 標準數組生成函數和數組操作函數2.數組操作函數(P115表3.23)rot9

18、0把數組逆時針旋轉90度diag 提取對角元素,或生成對角陣flipud上下交換fliplr左右交換repmat按指定的行數列數鋪放模塊數組reshape改變行數列數,元素數不變以上指令只適用于二維數組352.8 標準數組生成函數和數組操作函數reshape的使用演示a=-4:4A=reshape(a,3,3) %把一維數組a重排成33的二維數組a = -4 -3 -2 -1 0 1 2 3 4A = -4 -1 2 -3 0 3 -2 1 4 36diag的使用演示b=diag(A) %取A元素對角陣生成數組bB=diag(b) %根據b數組生成B對角矩陣b = -4 0 4B = -4 0

19、 0 0 0 0 0 0 42.8 標準數組生成函數和數組操作函數A = -4 -1 2 -3 0 3 -2 1 437repmat使用演示B1=repmat(B,2,2)B1 = -4 0 0 -4 0 0 0 0 0 0 0 0 0 0 4 0 0 4 -4 0 0 -4 0 0 0 0 0 0 0 0 0 0 4 0 0 42.8 標準數組生成函數和數組操作函數382.8 標準數組生成函數和數組操作函數flipud和fliplr使用演示flipud(A) %上下對稱交換 ans = -2 1 4 -3 0 3 -4 -1 2 fliplr(A) %左右對稱交換 ans = 2 -1 -4

20、 3 0 -3 4 1 -2A = -4 -1 2 -3 0 3 -2 1 4392.9 數組構作技法綜合1.數組的擴展賦值擴展法A=reshape(1:9,3,3)%創建33數組AA = 1 4 7 2 5 8 3 6 9 402.9 數組構作技法綜合A(5,5)=111%擴展為55數組。擴展部分除(5,5)元素為111外,其余均為0A = 1 4 7 0 0 2 5 8 0 0 3 6 9 0 0 0 0 0 0 0 0 0 0 0 111412.9 數組構作技法綜合A(:,6)=222 %標量對子數組賦值,擴展為56數組 A = 1 4 7 0 0 222 2 5 8 0 0 222 3

21、 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 422.9 數組構作技法綜合多次尋訪擴展法AA=A(:,1:6,1:6)%相當于指令repmat(A,1,2)AA = 1 4 7 0 0 222 1 4 7 0 0 222 2 5 8 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 0 0 0 0 111 222 指令repmat 中,A為模塊數組,1表示行方向上鋪一塊,2表示列方向上鋪兩塊。A = 1 4 7 0 0

22、 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222432.9 數組構作技法綜合合成擴展法B=ones(2,6)%創建26全1數組B = 1 1 1 1 1 1 1 1 1 1 1 1 442.9 數組構作技法綜合AB_r=A;B%行數擴展合成AB_r = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 1 1 1 1 1 1 1 1 1 1 1 1 452.9 數組構作技法綜合AB_c=A,B(:,1:5)%列數擴展合成AB_

23、c = 1 4 7 0 0 222 1 1 2 5 8 0 0 222 1 1 3 6 9 0 0 222 1 1 0 0 0 0 0 222 1 1 0 0 0 0 111 222 1 1 462.9 數組構作技法綜合2.單下標尋訪和reshape指令演示clear %清除內存變量A=reshape(1:16,2,8)%變一維數組成28數組A = 1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16 472.9 數組構作技法綜合reshape(A,4,4) %變28數組為44數組ans = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 164

24、82.9 數組構作技法綜合s=1 3 6 8 9 11 14 16;%定義“單下標”數組A(s)=0 %利用“單下標”數組對A的元素重新賦值A = 0 0 5 7 0 0 13 15 2 4 0 0 10 12 0 0 492.9 數組構作技法綜合3.邏輯函數的運用演示randn(state,1),R=randn(3,6) %創建正態隨機陣R = 0.8644 0.8735 -1.1027 0.1684 -0.5523 -0.6149 0.0942 -0.4380 0.3962 -1.9654 -0.8197 -0.2546 -0.8519 -0.4297 -0.9649 -0.7443 1.

25、1091 -0.2698 L=abs(R)1.5 %不等式條件運算,結果給出邏輯數組L = 0 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 50R(L)=0%“邏輯1”對應的元素賦0值R = 0.8644 0.8735 -1.1027 0 -0.5523 -0.6149 0 0 0 0 -0.8197 0 -0.8519 0 -0.9649 -0.7443 1.1091 0 2.9 數組構作技法綜合512.9 數組構作技法綜合s=(find(R=0) %利用find獲得符合關系等式條件的元素“單下標”一維行數組s = 2 5 6 8 10 11 17 18 R(s)=1

26、11 %利用“單下標”定位賦值R = 0.8644 0.8735 -1.1027 111.0000 -0.5523 -0.6149 111.0000 111.0000 111.0000 111.0000 -0.8197 111.0000 -0.8519 111.0000 -0.9649 -0.7443 1.1091 111.0000 522.9 數組構作技法綜合ii,jj=find(R0);%利用find獲得符合關系等式條件的元素“雙下標”disp(ii),disp(jj) 3 1 3 3 1 2 1 1 3 3 4 5 5 6 結果第一行表示元素行數,第二行表示元素列數。532.10 高維數

27、組三維數組行(Row),列(Column),頁(Page)行(一維),矩形面(二維)長方體(三維)高維數組542.10 高維數組1.高維數組的創建常用的四種創建方法:直接“全下標”賦值由若干同樣大小的低維數組組合由函數ones,zeros,rand,randn創建由repmat,reshape等函數構造552.10 高維數組“全下標”賦值法A(2,2,2)=1%單元素賦值創建222數組B(2,5,:)=1:3%子數組賦值創建253數組562.10 高維數組由函數ones,zeros,rand,randn創建rand(state,1111),rand(2,4,3) %產生均勻分布隨機數組572.

28、10 高維數組reshape(1:12,2,2,3)reshape的第一個輸入量是待重組的數組,后面的輸入量是要生成數組的各維大小生成數組總元素數必須與待重組數組總元素數要相等元素放置順序遵循單下標規則582.10 高維數組2.高維數組的標識數組的維數(dimension)行(列)數組/向量,維數為1矩陣的維數為2指令ndims(A)可直接給出數組A的維數592.10 高維數組數組的大小(Size)指令size(A)給出A各維的大小:行數、列數指令length(A)給出所有維中的最大長度clear;A=reshape(1:24,2,3,4);dim_A=ndims(A)%測量A的維數size_

29、A=size(A)%測量A的大小L_A=length(A)%求A的長度32 3 44602.11 “非數”和“空”數組1.非數NaNIEEE規定0/0,0都會產生非數NaN的性質:傳遞性, NaN參與運算所得結果也是NaN沒有“大小”概念,不能比較兩個非數的大小612.11 “非數”和“空”數組非數的產生a=0/0,b=0*log(0),c=inf-inf非數的傳遞性0*a,sin(a)非數的屬性判斷class(a) %數據類型歸屬isnan(a) %該指令唯一能正確判斷非數的指令622.11 “非數”和“空”數組非數元素的尋訪rand(state,0)R=rand(2,5);R(1,5)=N

30、aN;R(2,3)=NaN %產生一個均勻分布隨機數組,其中元素(1,5)和元素(2,3)為非數元素R= 0.9501 0.6068 0.8913 0.4565 NaN 0.2311 0.4860 NaN 0.0185 0.4447LR=isnan(R) %對數組元素是否非數進行判斷 %找出非數元素的位置標識LR = 0 0 0 0 1 0 0 1 0 0632.11 “非數”和“空”數組si=find(LR)%非數的“單下標”si = 6 9ri,ci=ind2sub(size(R),si) %轉換成“全下標”標識rj,cj=find(LR) %直接確定全下標disp(非數在二維數組R中的位

31、置)disp(單下標時的第,int2str(si(1),和第, int2str(si(2),個元素) %輸出“全下標”標識64ri = 2 1ci = 3 5rj = 2 1cj = 3 5非數在二維數組R中的位置單下標時的第6和第9個元素2.11 “非數”和“空”數組652.11 “非數”和“空”數組2.“空”數組是MATLAB為操作和表述需要專門設計的某維或若干維長度為0的數組662.11 “非數”和“空”數組注意:“空”數組不同于全零數組“空”數組不是“虛無”,存在于工作空間判斷是否“空”:isempty不具備傳遞性,得“空”結果要謹慎解釋672.11 “非數”和“空”數組創建“空”數組的幾種

溫馨提示

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

評論

0/150

提交評論