數值數組及其運算.ppt_第1頁
數值數組及其運算.ppt_第2頁
數值數組及其運算.ppt_第3頁
數值數組及其運算.ppt_第4頁
數值數組及其運算.ppt_第5頁
已閱讀5頁,還剩41頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

第二章 數值數組及其運算,2.2.1 一維數組的創建 (1)逐個元素輸入法:最簡單,最通用的構造數組的方法。 x2 pi/2 sqrt(3) 3+5i (2)冒號生成法:通過“步長”設定,生成一維“行”數組的方法。 x=a:inc:b (3)定數線性采樣法:在設定的“總點數”下,均勻采樣生成一維“行”數組。 x=linspace(a,b,n) (4)定數對數采樣法:在設定的“總點數”下,經“常用對數”采樣生成一維“行”向量;生成數組的第一個元素值為 ,最后一個元素值為 x=logspace(a,b,n),2.2.2一維數組的子數組尋訪和賦值 【例2.2.2-1】子數組的尋訪(Address) rand(state,0) %把均勻分布偽隨機發生器 %置為0狀態 x=rand(1,5) %產生x的均布隨機數組 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) %對元素可以重復尋訪,使所得數組長度允許大于原數組。,【例2.2.2-2】子數組的賦值(Assign)。 x(3)=0 %把上例中第三個元素重新賦值為0 x(1 4)=1 1 把當前x數組的第一、四個元素都賦值為1,2.3 二維數組的創建 2.3.1 直接輸入法 二維數組必須有一下三個要素: 整個輸入數組必須以方括號“ ”為其首尾; 數組的行與行之間必須用分號“;”或回車enter隔離; 數組元素必須由逗號“,”或空格分隔。,【例2.3.1-1】在MATLAB環境下,用下面三條指令創建二維數組C。 a=2.7358; b=33/79; C=1,2*a+i*b,b*sqrt(a) sin(pi/4),a+5*b,3.5+i,【例2.3.1-2】復數數組的另一種輸入方式。 M_r=1,2,3;4,5,6, M_i=11,12,13;14,15,16 CN=M_r+i*M_i,【例2.3.2-1】創建和保存數組AM的 MyMatrix.m 文件。 (1)打開文件編輯調器,輸入以下內容 % MyMatrix.m Creation and preservation of matrix AM AM=101,102,103,104,105,106,107,108,109;. 201,202,203,204,205,206,207,208,209;. 301,302,303,304,305,306,307,308,309; (2)保存此文件,并且起名MyMatrix (3)以后只要在MATLAB指令窗中,運行此文件,數組AM就會自動生成于MATLAB內存中,2.4 二維數組元素的標識 2.4.1 “全下標”標識 采用“全下標”標識法,即指出是“第幾行,第幾列”的元素 例如:A(2,3)就表示二維數組A的“第二行,第三列”的元素 多維數組也同樣,2.4.2 “單下標”標識 “單下標(Linear Index)”標識就是“只用一個下標來指明元素在數組中的位置” 這種方法首先要對二維數組的所有元素進行“一維編號”,所謂“一維編號”就是:先設想把二維數組的所有列,按先左后右的次序、首尾相接排成“一維長列”。然后,自上往下對元素位置進行編號。 “單下標”與“全下標”的轉換關系:以(mn)的二維數組A為例,若“全下標”元素位置是“第r行,第c列”,那么相應的“單下標”為l=(c-1)mr。MATLAB有兩個指令可以實現以上標識方法之間的轉換: sub2ind 根據全下標換算出單下標 ind2sub 根據單下標換算出全下標,2.4.3 “邏輯1”標識 元素或是0或是1的數組是“邏輯數組(Logic Array)”。所謂“邏輯1”標識法,就是通過與矩陣同樣大小的邏輯數組中“邏輯值1”所在的位置,指示出數組中的元素位置。實際應用中,一般用于尋找大于某值的元素。 【例2.4.3-1】找出數組中所有絕對值大于3的元素。 A=zeros(2,5); A(:)=-4:5 L=abs(A)3 islogical(L) X=A(L),【例2.4.3-2】演示邏輯數組與一般雙精度數值數組的關系和區別。 (1)邏輯數組與雙精度數組的相同之處 Num=1,0,0,0,1;0,0,0,0,1; N_L=Num=L c_N=class(Num) c_L=class(L) (2)邏輯數組與雙精度數組的差別 islogical(Num) Y=A(Num),有關邏輯數組的補充說明,邏輯數組一方面具有雙精度性,另一方面又區別于一般的雙精度數組 邏輯數組產生于邏輯函數或邏輯運算,它具有“邏輯標識”能力。 從本質上說,邏輯數組是雙精度數組的子類。它繼承了雙精度類數組的全部性質,又有自己特定的屬性和能力。,2.5 二維數組的子數組尋訪和賦值 【例2.5-1】不同賦值方式示例。 A=zeros(2,4) %創建(24)的全零數組 A(:)=1:8 %全元素賦值方式 s=2 3 5; %產生單下標數組行數組 A(s) %由“單下標行數組”尋訪產生A元素組成的行數組 Sa=10 20 30 %Sa是長度為3的“列數組” A(s)=Sa %單下標方式賦值 A(:,2 3)=ones(2) %雙下標賦值方式:把A的第2、3列元素全賦為1,2.6 執行數組運算的常用函數 2.6.1 函數數組運算規則的定義: 對于(mn)數組 函數 的數組運算規則是: 2.6.2 執行數組運算的常用函數,【例2.6.2-1】演示pow2的數組運算性質。 A=1:4;5:8 pow2(A),2.7 數組運算和矩陣運算 2.7.1 數組運算和矩陣運算指令對照匯總 【例 2.7.1-1】兩種不同轉置的比較 clear; A=zeros(2,3); A(:)=1:6; A=A*(1+i) A_A=A. A_M=A,2.8 多項式的表達方式及其操作 2.8.1 多項式的表達和創建 一 多項式表達方式的約定 MATLAB約定降冪多項式: 用系數行向量 表示。 二 多項式行向量的創建方法 (1)多項式系數向量的直接輸入法 即按照約定,把多項式的各項系數依次排放在行向量的元素位置上。需要注意的是:多項式系數應以降冪排列,假如多項式中缺某冪次項,那么認為該冪次項的系數為零。 (2)利用指令:Ppoly(AR),產生多項式系數向量。 若AR是方陣,則多項式P是該方陣的特征多項式; 若 ,則AR的元素被認為是多項式P的根。,【例 2.8.1.2-1】求3階方陣A的特征多項式。 A=11 12 13;14 15 16;17 18 19; PA=poly(A) PPA=poly2str(PA,s) 【例 2.8.1.2-2】由給定根向量求多項式系數向量。 R=-0.5,-0.3+0.4*i,-0.3-0.4*i; P=poly(R) PR=real(P) PPR=poly2str(PR,x),2.8.2 多項式運算函數 【例2.8.2-1】求的 “商”及“余”多項式。 p1=conv(1,0,2,conv(1,4,1,1); p2=1 0 1 1; q,r=deconv(p1,p2); cq=商多項式為 ; cr=余多項式為 ; disp(cq,poly2str(q,s), disp(cr,poly2str(r,s),【例 2.8.2-2】兩種多項式求值指令的差別。 S=pascal(4) P=poly(S); PP=poly2str(P,s) PA=polyval(P,S) PM=polyvalm(P,S),【例 2.8.2-3】部分分式展開。 a=1,3,4,2,7,2; 分母多項式系數向量 b=3,2,5,4,6; 分子多項式系數向量 r,s,k=residue(b,a),2.9 標準數組生成函數和數組操作函數 2.9.1 標準數組生成函數 【例2.9.1-1】標準數組產生的演示。 ones(1,2) %產生長度為2的全1行數組 ones(2) %產生(22)的全1陣 randn(state,0) %把正態隨機數發生器置0 randn(2,3) %產生(23)的正態隨機陣 D=eye(3) %產生(33)的單位陣 diag(D) %取D陣的對角元素 diag(diag(D) %內diag取D的對角元,外diag利用一維數組生成對角陣 repmat(D,1,3) %在水平方向“鋪放”三個D陣,2.9.1 數組操作函數 【例 2.9.2-1】diag與reshape的使用演示。 a=-4:4 %產生一維數組 A=reshape(a,3,3) %把一維數組a重排成 的二維數組 a1=diag(A,1) %取A陣“第一上對角線”的元素 A1=diag(a1,-1) %產生以a1數組元素為“第一下對角線”元素的二維數組 【例2.9.2-2】數組轉置、對稱交換和旋轉操作后果的對照比較。 A A. %轉置 flipud(A) %上下對稱交換 fliplr(A) %左右對稱交換 rot90(A) %逆時針旋轉90度,2.10 數組構作技法綜合 【例2.10-1】數組的擴展。 (1)數組的賦值擴展法 A=reshape(1:9,3,3) %創建 數組A A(5,5)=111 %擴展數組,擴展部分除(5,5)元素為111外,其余均為0。 A(:,6)=222 %標量對子數組賦值,并擴展數組。 (2)多次擴展法 AA=A(:,1:6,1:6) %相當于指令repmat(A,1,2) (3)合并擴展法 B=ones(2,6) %創建 全1數組 AB_r=A;B %行數擴展合成 AB_c=A,B(:,1:5) %列數擴展合成,【例2.10-2】提取子數組,合成新數組。 A %重顯A數組 AB_BA=triu(A,1)+tril(A,-1) %利用操作函數,使主對角元素為全0 AB1=A(1:2,end:-1:1);B(1,:) %靈活合成,【例2.10-3】單下標尋訪和reshape指令演示。 clear %清除內存變量 A=reshape(1:16,2,8) %變一維數組成 數組 reshape(A,4,4) %變 數組為 數組 s=1 3 6 8 9 11 14 16; %定義“單下標”數組 A(s)=0 %利用“單下標”數組對A的元素重新賦值,【例2.10-4】邏輯函數的運用示例。 R=randn(3,6) %創建正態隨機陣 L=abs(R)1.5 %不等式條件運算,結果給出邏輯數組 R(L)=0 %“邏輯1”對應的元素賦0值 s=(find(R=0) %利用find獲得符合關系等式條件的元素“單下標” R(s)=111 %利用“單下標”定位賦值 ii,jj=find(R=111); %利用find獲得符合關系等式條件的元素“雙下標”,2.11 高維數組 2.11.1 高維數組的創建 【例2.11.1-1】“全下標”元素賦值方式創建高維數組演示。 A(2,2,2)=1 單元素賦值創建(222)數組 B(2,5,:)=1:3 子數賦值組創建(253)數組 【例2.11.1-2】低維數組合成高維數組。 clear, A=ones(2,3); A(:,:,2)=ones(2,3)*2; A(:,:,3)=ones(2,3)*3,【例2.11.1-3】由函數ones, zeros, rand, randn直接創建標準高維數組的示例。 rand(state,1111), rand(2,4,3) 【例2.11.1-4】借助cat, repmat, reshape等函數構作高維數組。 cat(3,ones(2,3),ones(2,3)*2,ones(2,3)*3) repmat(ones(2,3),1,1,3) reshape(1:12,2,2,3) 說明:cat(2,A,B) 得到 A,B cat(1,A,B) 得到 A;B,2.11.2 高維數組的標識 為更好的表述復雜的高維數組操作,現對若干術語和MATLAB相關指令說明如下: (1)數組的維數(Dimension)和ndims指令 “行”或“列”數組(或稱向量)是一維數組,即“維數為1 ” 。矩陣是二維數組,即“維數是2”。 指令ndims(A)可直接給出數組A的維數 (2)數組的大?。⊿ize)和size指令 不管A數組的維數是多少,size(A)可直接給出A的各維的大小,而指令length(A)可給出所有維中的最大長度。即length(A)=max(size(A),【例2.11.2-1】獲取數組A的維數、大小和長度 clear;A=reshape(1:24,2,3,4); dim_A=ndims(A) size_A=size(A) L_A=length(A),2.1 2 “非數”和“空”數組 2.12.1 非數NaN 根據IEEE規定 等運算都會產生非數(Not a Number)。該非數在MATLAB中用NaN或nan記述。 (1)根據IEEE數學規范,NaN具有以下性質: NaN參與運算所得的結果也是NaN,即具有傳遞性 非數沒有“大小”概念,因此不能比較兩個非數的大小 (2)非數的功用 真實記述 運算后的結果 避免可能因 運算而造成程序執行的中斷 在數據可視化中,用來裁剪圖形。,【例2.12.1-1】非數的產生和性質演示。 (1)非數的產生 a=0/0, b=0*log(0), c=inf-inf 0*a,sin(a) (2)非數的不可比較性 a= =nan a=nan a= =b %兩個非數不存在“等”與“不等”的概念 bc %兩個非數不能比較大小 (5)非數的屬性判斷 class(a) %數據類型歸屬 isnan(a) %該指令是唯一能正確判斷非數的指令,【例2.12.1-2】非數元素的尋訪 R=rand(2,5); R(1,5)=NaN; R(2,3)=NaN isnan(R) %對數組元素是否非數進行判斷,找出非數元素的位置標識 Linear_index=find(isnan(R) %非數的“單下標”標識 r_index,c_index=ind2sub(size(R),Linear_index) %轉換成“全下標”標識 disp(r_index c_index) disp(r_index c_index),2.12.2 “空”數組 某維長度為0或若干維長度為0的數組就是“空”數組,它是MATLAB為操作和表述需要而專門設計的一種數組。 “空”數組的功用: 在沒有“空”數組參與的運算時,計算結果中的“空”可以合理地解釋“所得結果的含義” 運用“空”數組對其他非空數組賦值,可以收縮數組的大小,但不能改變那數組的維數。,說明: 不能把“空”數組與全零數組混淆 不要把“空”數組看成“虛無”。它確實存在。利用which,who,whos,以及變量瀏覽器都可以驗證它的存在 唯一能正確判斷一個數組是否“空”的指令是isempty。 “空”數組在運算中不具備傳遞性。對運算中出現的“空”結果,解釋要謹慎。,【例2.12.2-1】關于“空”數組的算例。 (1)創建“空”數組的幾種方法 a=, b=ones(2,0), c=zeros(2,0), d=eye(2,0), e=rand(2,3,0,4) (2)”空”數組的屬性 class(a) %“空”的數據類別 isnumeric(a) %是數值數組類嗎 isempty(a) %唯一可正確判斷數組是否“空”的指令 which a %變量a是什么 ndims(a) %數組a的維數 size(a) %a數組的大小,(3)“空”數組不具備一般傳遞性 b_c1=b.*c %兩個空陣的點乘 b_c2=b*c %矩陣乘,生成矩陣為0-by-0,故“空” b_c3=b*c %矩陣乘,生成矩陣為2-by-2 (4)”空“數組的比較要謹慎 a=b %結果可解釋為“不等于” b=c %結果可合理解釋為“無法比較” cd %結果可合理解釋“無法比較” a=0 %結果可解釋為“不等于” A =0 %結果解釋為“是不等”,(5) 沒有“空”數組參與運算時,結果中的“空”有合理解釋 A=reshape(-4:5,2,5) %創建一個數值數組A L2=A10 %檢查A中大于10的元素位置 find(L2) %找出L2邏輯數組中非0元素的“單下標”標識。 (6)“空”數組用于子數組的刪除和數組大小的縮放 A(:,2,4)= %刪除A的第二、四列,【例2.11.3-4】賦“空陣”值操作。 A=reshape(1:18,2,3,3) %創建3維數組 A(:,2:3,:)= %賦“空”,使原A數組的第二、三列消失 B=A; size(A) A_1=squeeze(A) Size(A_1) %撤消“孤維”,數組由3維降為2維 size(B) %B數組與A同樣存在“孤維” B(:,1,:)= %對“孤維”賦“空”,不能降維,【例2.11.3-5】“孤維”的撤消和降維。 clear, A=ones(2,3); A(:,:,2)=ones(2,3)*2; A(:,:,3)=ones(2,3)*3 B=cat(4,A(:,:,1),A(:,:,2),A(:,:,3) %串接為4維數組 size(B) %測量數組B的大小 C=

溫馨提示

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

評論

0/150

提交評論