matlab2010經典超強教程清晰_第1頁
matlab2010經典超強教程清晰_第2頁
matlab2010經典超強教程清晰_第3頁
matlab2010經典超強教程清晰_第4頁
matlab2010經典超強教程清晰_第5頁
已閱讀5頁,還剩388頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

第1 是什沒有就沒有樂趣Nachtigal,M.N.,Reddy,S.C.,Trefethen,L.N.(1990)關于迭代方法的CopperMountain會議集CopperMountainCO,1-5,1990年4 是一個可視化的計算程序,被廣泛地使用于從個人計算機到超級計算機范圍內的各種計算機上。包括命令控制、可編程,有上百個預先定義好令和函數。這些函數能通過用戶自定義函數進一步擴展。有許多強有力令。例如,能夠用一個單一令求解線性系統,有強有力的二維、三維圖形工能與其他程序一起使用。例如 的圖形功能,可以在一 的名字取自矩陣(MATrixLABoratory) 實本節中的實例恰當而簡潔地展示了MATLAB能做什么。在一些實例中給出了完整的在本書中出現的MATLAB代碼用的是一種特殊的字體以區別于書中別的文字。的輸出是斜體字,即:我們輸 令是正體;給出的輸出百分符號%在中用做注釋符號,在本書中全部都是這樣使用。采用的其他表示方法是:數量和預定義函數用斜體字,矩陣、向量和用戶自定義函數用黑體字。矩陣用大寫字母開頭命名,而向量以小寫字母開頭。細胞矩陣是如同矩陣或向量的概念,也采用黑體字,其結構和對象也是如此。在命令表中,用斜體字表示那些可選的函數參數。例如,commandparl,par2),參數par1總是需要的,而par2例 能用于計算,并以二維和三維圖形顯示各種函數。在函數中包括了所用簡短 命令計算并繪制在0≤x≤6范圍內的sin(2x)、sinx2和sin2xx=linspace(0,6);%創建一個向量x %向量y1等于x坐標上某一x的sin(2x)值。 %向量y2等于sin(x.^2),同上。 %向量y3等于(sin(x)).^2,同上。命令plot(x,y1)繪制向量y1,y1作為向量x的一個函數 plot命令的定義可參見 章。由此能夠很容易地在一個圖上繪制sin(2x)、sin(x2)和sin2x的曲線并正確地標記它們(圖1-1)圖1-1兩個變量的函數需要用三維來恰當地圖示能夠給出很好的三維圖。在圖1-2中,用用mesh繪用mesh和隱藏用contour繪圖1-2也能繪制一條參數曲線,例如x-y平面圖如圖1-3圖1-3■例 命令fzero和fmin可以用于尋找一個函數的零點和最小xexexsinx3func(見29節func.m的M文件中。這個文件由下列行組如果這個M文件被存放在當前的工 中,或在一個稱 的 中,函數就可以像預定義 函數一樣調用。例如,調用xiszero=func(0),給出的答案是xiszero用這樣定義的函數 提供了一個命令來尋找方 xex2-ex2-sinx3=0的零點。命xsolv=fzero(‘func’,3xsolv1.219如果在-1≤x≤1.5區間內繪制這個函數,確答案如圖1-4所示。圖1- 在-1≤x≤1.5區間內繪制函數xe-e-sinx3的圖當x在 mpoint=fmin(‘func’,0.5,1)mpoint0.895用于檢 中用戶自定義函數令可參見 10章和第11章■例 可以用一個簡單令行求解線性系統,系數矩 A和右側b定義如下這對應于線性系統Ax=b,如下所示還有許多矩陣控制命令。例如,例(a)中矩陣A的特征值很容易地可以由下列命令得到:矩陣EigenVectors的列是A的特征向量,EigenValues中對角線元素是特征值。由于矩 中的基本概念是矩陣?;镜木仃嚸钤诘?章描述,令將在第4、7例 如果有兩個向量x和y表示的x-y平面上的一組點,那么,可以對它們進行插值點或者擬對應x-y平面上的9個點。首先,展示以最小二乘法擬合數據的線性函數,這個可以通過中的三個簡單令來實現:p1=polyfit(x,y,1) %p1=向量等于一次多項式的系數。linc=polyval(p1,x) %linc=向量等于x點上多項式p1的值。plot(x,linc,x,y‘x,’) %繪制多項式和由‘x’標記的數據。結果見圖1-5(左圖)能以最小二乘法對一組點擬合高次多項式。對上面令行進行一點小改動就可以得到p7=polyfit(x,y,7); %p7=向量等于7次多項式的系數。 %xx=所有想要進行多項式計算的點。polc=polyval(p7,xx); %polc=向量等于點xx上多項式p7的值。plot=(xx,polc,x,y,x’)%繪制多項式和由’x’標記的數據。其結果如圖1-5(右圖)圖1- x-y平面上對一組具有9個點的數據擬合的1次和7次多項 能返回通過對這些數據內插的插入點的值,這可以有不同的方法實現。作為一個例子,將使用(a)中的一組點來給出在下列點中插入的值:圖1- piecewise線性函數插值(左)和三次樣條插值(右x?i=(11.11.21.3?7.9在圖1-6中,分別展示了分段線性插值和三次樣條插值。‘x’標記表示原始數據,點線是中間點的函數?!隼?包含了統計命令。例如,很容易地求得實驗數據的平均值和中位值以及繪制統計頻數直方圖或直方圖。圖1-7顯示了某小鎮上每個人的。上圖是統計頻數直方圖,顯示了每個的人數。個是92是1歲或127歲的兒童7人。也能看出32歲以下的人與32歲以上的人一樣多,因為這是一個中間。此外,平均年齡是35歲。這些也都在圖中標出。另外,下圖展出了小鎮上居民的。例如,如果知道要列出的是第11人,那么也就知道這個人是一個小孩。因為第11個直方塊接觸x軸。這種繪圖稱為階梯圖,即沒有內部線的直中間平小鎮中間平小鎮上每個人小鎮上的200圖1- ■例 的傅立葉變換,用0和1之間的隨機數干擾5sin(x)+2sin(5x)函數:x=linspace(0,*pi,64);干擾信號和原始信號如圖1-8(上)傅立葉變換的實際部分如圖1-8(下)所示。圖1-9(上)中刪除了高頻傅立葉變換,僅低頻向干擾信號的傅立葉變過濾信號和原始干擾干擾信號的傅立葉變過濾信號和原始圖1- 圖1-9過濾傅立葉變這個過濾的信號與原始信號一起在圖1-9(下)中展示。這個過濾的信號如期望一樣是光滑在10.5節中,作為 的一部分描述了傅立葉變換,更詳細的有關信號處理工具的信息參見附錄C。■例 可以用數字求解常微分方程。作為一個實例,展示在一個軌道上一只貓追趕一(x(ty(t))和(X(t),Y(t))表示。貓的速度向量是和貓與老鼠之間的差向量對應的。貓從(50,40)開始,這就給出了如下的微分方程系統:式中wa是貓和老鼠在t(X(t)x(t))2(X(t)x(t))2(Y(t)貓貓老圖1- 在11.2節中描述了如何使 求解一般的常微分方程問題■例 在PDE工具箱,(theFiniteElementMethod)解橢圓方程、拋物線方程和雙曲線方程。區域要分成大量的三角形子區域,對每個三角形,其解由一個簡單函數估計。所用的三角形越多,其偏差就越小。求解這個區域里的橢圓問題-u=sin(2y+/2)cos(2x+/2),如圖1-11 斯算子是,邊界條件u=0,也可由PDE工具箱所做的三角形子區域給出。這個問題的解可以用可視化等高線以二維繪制,如圖1-12所示。解解圖1- PDE工具箱采用FEM的三角形子區 圖1- PDE工具箱計算的等高線解的圖■例 是可編程的。命令序列可以在文本編輯器上寫入,然后可以調用命令窗口上的用戶定義函數或程序。文件的名字必須要有擴展名.m,這個文件就稱為M文件。這些M文件可以用相同的方法象標準函數一樣使用。階乘n!=1×2×3×?×n可以用不同的方法計算。這里,展示一個遞歸的用戶定義函functionp=factorial(%計算nn的階乘這個M文件名叫factorial.m,對這個函數的調用如下所示fourfactorial=24在world,用來模擬一個小世界內的生與死。對于一個要在出生的個人來說,他需要一些鄰居,但太多的鄰居會構成生存。類world令是在@world中的文件world.mFunctionw=world(Size,Density,nrCreate,nrSurvive)WORLD生成一個生命世界這是命令%Size給出的邊,它是方的%Densit應該是在0與1之間,定義了實與空的近似比率%nrCreate個需要生長的空單元的最近鄰居的號碼%nrSurvive個需要生存和長大的滿單元的最近鄰居的號碼屬于類的這種方法在 @world中定義但不在這里說明?,F在,人們可以通過下列命令產生一個對象w:w=world(20,0.6,[245],[36關 中的有關編程信息可參見12章例

圖1-1310年后世界w■提供了一個設計易于使用的程序的機會。程序能夠在一個控制圖上由按鈕、彈14.3節中描述。在14.4節中,演示了一個由瑞典科學家 幫

圖1-14帶圖形用戶界面應用的一 ■本書打算展示中可用令,并解釋如何使用。對于讀者,多數時候這已足夠,但對想學習內容的讀者來說,在中可以使用幫助。在系統提示符下, 5中也包含了一個強有力的HTML格式的幫助數據庫。這使得尋找一個命令更容易,依參考而得到幫助。當給出helpdesk命令時,一個瀏覽器如NetscapeNavigator如果這還不能滿足,可向MathWorks公司訂 的完整手冊,具體方法參見前言第2 啟首先描述如何啟動和如何退出,這一點很重要。然后描述如何進行分配和計算,也演示如何結果、獲得幫助和定義你自己的函數。本章的部分內容對老用戶可以跳過不讀,但是,建議快速瀏覽本章,也建議參見附錄A“初步”。 啟動和退出如果上述工作有問題,可請教系統管理員。當啟動 果matlabc.m和statup.m文件存在,則執行這些文件。在這些文件中,為滿足個人需要,用戶可以給定命令以調整,constants用于設置圖形等。在一個多用戶系統上,系統管理員rc.m文件,但你也能為自己的使用創建文件startup.m,參見例2.20(c)。要退出,鍵入quit或exit。數據丟失。參見2.8正在計算或打印時,除此之外,對一些系統有指定的菜單選擇。例如,在Windows和Macintosh系統中,在文件當編輯或執行時,下列的快捷鍵十分有用。通常因為不同的平臺使用不同的鍵, Delete,Backspace 中矩陣和矩陣介例第1行是(123),第2列 ■aijaij是指第i行、第j列的數。在(見命令集4)和細胞矩陣,在5.5當矩陣僅由一行組成時,它是一個特例,就是一個行向量。如果矩陣僅有一列,就是一個列向量。向量是矩陣的特例。向量中元素的數量是向量的長度。在中,一個變量可以通過給它分配一個值來定義,如下所示variable=expressio定義一個變量的另一個方法是輸 expression項,然 對預定義變量二維矩陣的分配可以有多種方法實現。最簡單的方法是由方括號[](參見helpparen)包圍的相‘;或回車鍵分隔。沒有結尾分號的每個命令在屏幕上顯示出其結果。若結尾帶分號,就執行計算,但計算結果并不顯示。在中使用的標點符號的一覽表可以通過輸入helppunc得到。一個變量的值可以通過輸入它的名字和按回車鍵獲得,以顯示這個變量的名和值作為回答。如果這個變量并不存在,就顯示一個錯誤信息。顯示一個變量內容的另一個方法可參見5.1.3節。variable(rowIndex,columnIndex)如果這個變量是一個向量,就只允許有一個索引。如何處理矩陣將在例2.3中討論例一個標量的指定。如果寫入x=7,則在屏幕上打印如x7如果僅寫入7,則結果變ans7 ×3維情況下一個矩陣的定義可以通過逐行給出其元素 45 45也可以在同一行上用分號來分隔行以給出所有的元A=[ 23456rowvec=[1 colvec=[2.7;3.4;顯示一個變量的值。輸入 顯示colve2.7003.400-9.200逐個元素地分配矩陣 ■三維矩陣和其他數據結構在函數自變量中依次使用行、列和頁維數次序。對于矩陣有兩個索引原理,最自然的就是矩陣索引,它給出了每個元素在每一維中的一個位置,例如,2-1給出了可視化的3×3×2的三維矩陣的不同元素的索引。另一個索引原理是線性索引方法。一些命令把整個矩陣說明為一個長列元素,例子之一是reshape(詳見命令集37)。如果所有的元素被放在一行上,那么對各元素給定的一個線性索2-2創建一個矩陣有多種方法。 圖2- 一個3×3×2矩陣的元素索 圖2- 一個3×3×2矩陣的線性索例有兩個二維矩陣A和為改變C中的一個元素,可以輸入允許在同一命令行上定義多個變量,也可以在按回車鍵之前通過輸入三個點例在一行上的幾個命令x=7;y=4. ;z=x^y;一個長令可以分成幾行書寫現在,令A是一個m×n×?×p矩陣,x是m×1矩陣(一個列向量)或是1×n矩陣(一個行向 有如下令集: 給出A的維數、m行數和n列數,即兩個標量。size(A) 果給出的自變量少,則后邊的維數加入最后一個自變量。 在數組dim中給出A的維 給出一個向量的長度,即如果x是一個行向量,nx是一個列向量,那么這個向量的長度就是m。 Alength(size(A))sub2ind(size,m,n,?)給出維數為size的一個矩陣的線性索引(m,n,?)。[m,n,?]=ind2sub 用線性索引ind對元素給出索引(m,n,?),要把(size, ,其參數size必須是一個向 例命令thesize1=size(A),式中的A與例2.2(c)thesize1 命令thesize2=size(C),式中的C是例2.3中的三維矩陣,得到thesize2 檢查圖2-2中的信息是否正確,可以使用■ 在19個字符。字母A~Z、a~z_’可以作為變量名,但第一個字符必須是一個字母。預定義函數名也可以像一個變量名那樣使用,但函數只有在變量由命令clear刪除后才能使用,所以,不主張這樣使用。是區分大小字母的,如矩陣a和A是不一樣的。命令通常是用小寫字母書寫。例如,命令abs(A)給出了A的絕對值,但ABS(A)會導致在屏幕上顯示如下錯誤信息:在變量用前,用不要指定個量的數類,也不必變量。有許多不同的數據類型,這對決定變量的大小和形式是有價值的,特別適合于混合數據類型、對于每一種數據類型,有一個名字相同的、可以把變量轉換到那種類型的函數。所用的不同的基本數據類型如下所示。 16稀疏矩陣,由一個sparse使用的內存是4+(非零元素數*16) 混合數據類型在第5章和第12在中,有許多功能可以幫助找出一個變量是否是一個特殊類型。也有一個特殊的邏輯向量,它是由命令repmat生成(見第4.1節。如果x是一個細胞矩陣,返回1;否則為0。可參見第5.5返回一個與xx1,其如果x是一個數值向量,返回1;否則為0如果x是一個字符串,返回1;否則為0??蓞⒁姷?.1節。如果x是一個結構,返回1;否則為0。可參見第12.5節。如果x是一個對象,返回1;否則為0??蓞⒁姷?2.6節。例使用repmat創建為使用濾波器,給出下面令命令repmat4.1■ 返回機器精度,定義1與最接近可代表的浮點數之間的差。eps在一些命令中用作偏差。用戶可以設定一個新的eps值,但要注意返回,即3.141592653589793,如果eps足夠小,那么用16制數來表示其精度。定義為1i和jWhoglobalwhoa*whosglobal 給出比命令相同,但僅列出全局變量,可參見第12.符串的信息可參見第5章。這里要注意的重要的一點是變表示namestr是一個變量表示namestr是一個M文件名(參見第2.9節表示namestr是一個MEX文件名(參見第15章表示namestr是一個編譯 函數表示namestr是一個預定義 函數名 的函數、M文件。如果給出兩個輸出參數,則第二個包含了一個目前在內存中的MEX文件的列表。 如果不被用戶刪除或重命名,每個被定義的變量將在整個過程中保留。要刪除變量,系統會勸告如要處理大矩陣可用命令clear。clearclear?clearclearnamename1刪除所有變量并恢復除epsname2刪除變量name1、name2、value刪除所有a 所有變量都會保存在磁盤上的一個臨時文件pack.tmp中;packfilename用文件filename 可以獲得的有關如何節省內存的信息注意中令實際上可以看作函數,把字符串看作自變量,這就意味著有這兩種描述是等價的。例如clearname與clear(’name’)得到相同的結果,whoglobal與who(‘global’)等價。其他的例題可在本書的其他幾個地方找到,例如axissre與axis(‘square’)在第13.3節中可找到。由于命令自變量可以通過使用字符串控制命令而產生,使用函數/字符串的可能性使得編程語言十分靈活,參見第5章。在中通常的慣例是書寫數字。對十進制數,使用科學記數法可以書寫十分大和十分小的數。例如3.14和1.23E-6,這里,后者代表1.23×10-6。有算術運算符的擴展集,它們 右除(正常除 3) 在第3.32/5得0.4與左除5\2是相同例a如果書寫 讀作,但表達式a/(b+c)bc如果使用左除 把它譯成bca■包含了預定義數學函數,它們可以用于算術表達式中。如果自變量是復數,那預定義數學函數在命令集9中列出。即使這些函數是為數量自變量描述的,將在第3.6節看pow2(x,f)求x的絕對值,即|x|求x的符號,如果是正的得11;零得0。求x的平方根,即x。求x的自然對數,即lnx求x以10為底的對數,即log10x。求x以2為底的對數,即log2x。求余切x,即1/(tanx),x為弧度。求反余弦,即cos-1x求反正切,即tan-1x求四象限反正切(x/y),其結果在求正割x,即1/(cosx)。求余割x,即1/(sinx)。求雙曲余切x,即1/(tanhx)。求sinh-1x=ln(x1x2)。求cosh-1x=ln(x1x2)。求雙曲正割x,即1/(coshx)。求雙曲余割x,即1/(sinhx)。求sech-1x=ln((11x2)/x)求csch-1xln((11x2)/x),]例如果鍵入sinepi=sin(pi),就得sinepi22466e-1 中有幾個命令用于數的取整。在命令集10中,x是一個浮點數或是一個帶浮點rem(x,(x,[g,c,d]= rat(x)rat(x,

求g,c,d,滿足g=xc+yd求正整數x和y的最小公倍數,也能用于決定最小公因子。由有理數t/n求x的近似值,這里的t和n是整數,相對誤差小于10-6。也可參見rats(第5.1.2節)與上相同,但相對誤差小于tol。例取整有幾種方法,命令是由有理數t/n求的近似值為了與真值比較,鍵入differ=sqrt(2)-t/ndiffer3.6440e-0由此可見,差值不大。如果在函數rat對參數tol指定一個較小的值,那么這個差值將會■1 中,大多數情況下是允許復數值表達的。加入變量i和j返回虛數單位1由于空格是分隔元素的,因此在書寫復數元素時要慎用空格。參見下面例題2.10(c)例一個較復雜的表達式向量也可以是復數complexvector=[1-i2-2i3-3icomplexvector1.0000-1.0000 3.0000 -03.0000 4■中有一些處理復數和函數令。unwrap(v,cplxpair求z的復數共扼,即z求z的相角,即z=x+iy=rei中的。對的一個向量。在一個共扼對中,負虛 ,實元素排在向的后部。如果v的一個元素在v例令復數zz=1+2iz的實部和虛部由下面求復數共扼由conjugate=conj(z)求出conjugate1.0000-2.0000z的絕對值由absz=abs(z)求出absz2.236一個復數的自變量,即復平面中的相角 arg=angle(z)求出arg1.107■也用于坐標系之間轉換的函數。這些函數既能對向量、也能對矩陣進行運算,[theta,[theta,rcart2pol(x, (theta, theta和r alpha、theta和長度rcart2sphx,y,z)笛卡爾坐標x、y和z[x,y, 在中也有更高級的預定義數學函數bessel(n,關的值和對x的0到n次計算的值。如果x=x是一個向求第1n和x可以是向量,但n必須是步長為1的遞增,范圍為[0,1000]。這個命令根據x是否是復型而調用不同的程序,但這些程序能被直接調用。輸入helpbesse可以得到bessely(n, 求與bessel有相同自變量的第2求函數,即對正g要獲得負x的定義,鍵入helpgamm求不完全g自變量x必須在0,1]間隔內,如果由三個自變量調用此函數,可以使用下 求不完全函數,類似地定義不完全 求helperfc 當相互比較不同算法時,計算一個會話期或一個部分會話期中的算術運算的次數是十分有用的。為了獲得浮點運算(flop)的近似次數,使用命令flops。顯示部分程序所占用時間的計時方法將在第12.7的計數器值是0,這是加法和減法運算時,如果是實數運算,計入1計入2個運算。乘法和除法時,如果是實數運算,計入1個運算;如果是復數運算,計入6個運算。調用初等函數時,如果自變量是實數,計入1個運算;如果是復數,計數較多,具體次數隨具體的函數而定。 例numflops=■flops一起使用,時間和日期(一啟動一個可用命令tocfix(clock)四舍五入etime(t1,t2)計算t1和t2t1和t2例寫入命timedifference=etime(t1,cl■有處理日期的內部函數。一些系列函數的使用組成了一個描述日期的整數部分和一個描述時間的小數部分。時間和日期(二datetick(axis,form)[daynrdayname]=用于在圖中的坐標軸上寫數據如果d是一個由諸如datestr返回的格式表示的序列數字或日期,則返回一個向量[yyyymmddhomise]。返回dayname以告知當天day是否星期天、星期一等。daynrday的序列數day是一個字符形式或序列數字在datestr中可以使用的不同的日期格式如表2-1所示。用2時14分作為表2-10格式ddmmmyyyy26—Apr—1格式ddmmm26—Apr—2格式3格式4格式A5格式46格式7格式8格式9格式S格式格式格式格式格式HH:MM:SS2:14:00格式格式HH:MM2:14格式QQ-YY,這里QQ表示幾刻Q2—格式例■ 中,一周是從星期天開始的,這使得星期六的星期數 7如果一個矩陣中所有的元素都是整數,那么它們將以整數格式顯示。但是,如果有一個或一個以上的元素是非整數,則所有的元素都以浮點數格式顯示。輸出格式在計算中不影響精度,總是按高精度完成計算。對大多數的計算機而 命令format用于改變輸出格式。在Windows和Macintos本中,輸出格式也能通過命formatformatdefformat將輸出格式改為由defformatshort、long、shortelongehex、 、 。也有 pact或loose,它給了一本所有例題都使用formatcompamore moremore 如果輸出多于n行,則顯示輸出n例設p=1+1/3,先定義格式,然后在屏幕上顯示formatshort得4位小format得14位小formatshort得4位小formatlong得15位小format得16進制+得+正format得format得作為一個有理本書在實例中使用了formatcompat給出大約20command 的信息通過helpdir出,這。helphelp數據庫打開一個MATLABGUI是doccommandwebURL在在幫助桌面上啟動一個帶索引頁的Web將瀏覽器指向URL,如果需要則打開一個瀏覽器。參見hel lookforHelpDesk是一個基于HTML的幫助系統。在這個系統里,通過help得到的大量信息是以超形式一起提供文獻、和。它也含有一個比由lookfor提供的更好 HelpDesk使用了JavaScript,因此,JavaScript必須是使能的。如果給出helpdesk命令,瀏覽器并不如圖2-3那樣,而是僅顯示 這可能是JaveScript并沒有生效。在UNIX中,可以通過一個名為docopt.m的M文件決定瀏覽 例命令helpsizeSIZED=SIZE(X),對于M×N的矩陣X,返回兩個元素的行向D=[M,N],其中包含了矩陣中行數和列數。對于D數組SIZE(X)返回一個1×N數組長度的向量[M,=SIZE(X)返回輸出變量中的行數和列數。[M,,3MN]=SIZE(X)返回X中頭N個數組的也可參見LENGT、NDIMS。注意,盡管不接受大寫字母給出令,但在幫助文本中用大寫字母書寫命令 HelpDesk用命令helpdesk, 器(或使用一個已經運行的瀏覽器)。圖2-3啟 HelpDesk后顯示的索引lookforsieACO 反余ACOS 反雙曲ASI 反正ASIN 反雙曲CO 余COS SI 正SIN TFFUN 調制的余弦高斯脈沖的時間域和頻率DS 離散正IDS 反離散正弦變 的一個很好的辦法是用命令demo運行一個示范程序,然后用命令help檢[str,n]=對帶IEEE1[str,n]=對帶IEEE1IBMPC和Macintosh對不帶IEEE算法的計算機,返回0,例如VAX和Cray例在Sun工作站上運行Solaris2[comp,numb]=computer■能保持屏幕上顯示的,這是由命令diary完成的,圖形輸出則是例外。有關打印或保存圖形,可參見第13.7節。diarydiarydiarydiaryfilename文件filename產生的ASCII文件以后能被編輯,且包括文檔。可是,用命令diary保存的值和結果通常為了保存各種變量和它們的內容以便能在下階段使用,應該使用命令save和load。表中的文件名filename確定了是如何說明這個文件的。所有以.mat結尾的文件是二進制文件,所有以其他形式結尾的文件,包括filename.,都是ASCII文件。savefilenamesavefilenamev1在文件filename.mat件名后以點結束filename.,或加了另外一個后綴, LB不能加后綴.mat。在文件filename.mat中保存變量v1、v2、?savesavefilenamesavefilenameload把文件filename.mat中所有變量裝入LB果filename沒有一個后綴,那么這個文件由savemat如果filename含有‘.’和后綴,例如temp.dat,那么數據就從相應的ASCII文件加載到 作為一個不帶‘.’和后綴的名為filename的矩陣,此文件可由savefilevar-ascii或直接通過使用一個例假設ASCII文件A.dat是通過一個編輯器或一個程序創建的,它含有下列數1442在中,可以通過輸入下列命令而得到一個矩陣5.8(b),也可參見第15章。在第15章中,討論了許多高級文件的處理及如何在FORTRAN和C程序中使用文件。為了代替在提示符下輸入命令的語句,可以把這些命令寫入一個文本文件,這個文本文件可用一個編輯器創建。每當用戶輸入這個文件名和它的自變量時,這些命令就由 從文件不是從端命令當件中最一命令被行,能再從終端命令。將首先在當前工作 下尋找此文件,如果它不在當前 有 在 path中,可參見命令集22。如果想行個沒有在以自動索的一個件你可使命run,參見第1章。M即,它必須有后綴.m一個M文件包含許多連續 命令,它也可以其他 M文件,可以遞歸,在的實用盤“utility-disk”上有大量的預定義M文件,例如,cond.m、demo.m、length.m和hilb.m。要了解這些文件的名稱,可以使用命令what,列出由用戶定義的和在中存放的M文件。命令dr可以代替wha命令,這個命令屬于文件命令集。whatwhatdirnam列出當前下所有的MATLABdirname或 中的所有文件。這個命令可deletefilename刪除文件filename。。typefilename 顯示文件filename的內容。如果沒有指定后綴,就讀filename.meditfile file,那么這個文件就在copyfile(file1,whichfilename的命令,就改變搜索路徑。輸入helppathpath 當一個新的搜索路徑給定時,作為路徑工作,但沒有genpath(directory 返回一個新的搜索路徑,這個路徑是由老的和在ROOT/toolbox下所有路徑一起組成。 的 addpath(dir1,dir2,?,flagrmpath從的搜索路徑中移dir這是一個修改搜索路徑的圖形工具。盡 helpathtool建議它不要在UNIXUNIX dbtypefilename 帶行號顯示文件filename的內容。如果在filename 使用后綴.mdbtypefilenamer1n行號地顯示filename中r1行到rn! 令,在 學生版(由PrenticeHall發的),返回1;否則返回0isdirdirname,返回1;否則返回0如果在MacintoshPowerPC1;否則返回0如果在UNIX如果在VMS,返回1;否則返回0,返回1;否則返回0從中運行一個VMSDCL 數據。輸入help可以獲 的信息。這個命令僅在VMS系統上應用 數據。輸入helpdos 加載一個AppleScript文件并運行它,參見了 的信息。這個命令僅在Macintosh上使用 中執行一個UNIX操作系統命令,如同!輸入helpuni個字符串是否為系統的臨 中的一個文件名。 以保存M文件是一個好的主意,在這個 例查看包含在中的文件sec.m的內容,輸入typefunctiony=sec(z% 正 SEC(X是X的元素的正割M文件中的注釋,即以%開始的行,在 信息,而不是象在這個例子中X和z。基本運算符./在第3.5節中定義。如果寫入helpse,就顯示出文件sec.mSEC正割SECX)是X的元素的這是一個函數文件的例子,一個用戶定義的函數,即是一個特殊類型 M文件。除了二類M文件外,稱之為命令文件,一個函數能有一個或幾個自變量或參數,它們用分號‘隔。在例題sec中,有一個名為z的參數。所有的參數必須由括號‘()’括起來。命令文件也稱為script文件。輸入helpscript得到的有關信息。中的函數與C中的函數或FORTRAN的子程序非常相似。函數文件有如下特函數文件的第一行必須包含字function,命令文件沒有這種要求。因此,沒有這樣第一行的M文件是命令文件。第一行必須指定函數名、輸入變量(參數)和輸出變量(參數)。輸入參數是從 工作空間到函數工作空間的變量。第一行舉例如下:functionoutput=name(input)與FORTRAN中的子程序、Pascal中的過程或C/C++中的無返回值的函數等價function=name(inputArguments) 中,一個函數M文件可以這樣調用建議函數取名如同文件名一樣。調用時所用的變量并不需要與函數文件中定義的變量有相同的名字。當輸入helpnam后,就顯示第一行之后的注釋。這與命令文件一樣使用相似的規定。 命令。當輸入文件名時(如果有自變量所有的M文件都是普通的ASCII文件,都能通過文本編輯器創建。無論何時,如當編輯文本時,一個操作系統命令要被,這時從試M文件是很方便的,參見命令集22。例假設某個矩陣經常被使用,它被創建并按第2.8節起來,然后隨時可以裝入。一個替換的方法就是在一個M文件中創建該矩陣。下面的 命令存放在文件Thematrix.m中,A=[-9-3-1 10通過輸入Thematrix,矩陣A就根據上面的那一行進行分配。通過輸入下面令就可以顯示這個矩陣的情況:假設下列函數是存放在文件average.mfunctiony=average( 本函數計算A中所有元素的平均值,其結果為一個標[m,n]=size(A);如果定義了例(a)中的矩陣,輸入下面令average_value=average(A)average_value2.666functiony=average( 本函數計算A中所有元素的平均值,其結果為一個在第6章定義了命令sum和mean,在第4.3節講述了冒號的概念A(:)的含義startup.m是一個特殊的用戶定義令文件。如果此文件放在你的工作目錄里,那么每當你啟動時,它就自動地運行。在這個文件里,你可以列出自己預先的,向你致。%我的第一個 etoMATLAB有了這樣一個定義令文件,下次啟動時就可以看到■有關M文件的信息可參見第12.3節第3 矩陣運中的大多數運算可以直接對矩陣應用。除了在 2.4節中討論的算術運算+、-學生版的用戶應該知道矩陣中的元素總數極限是16384。陣A±B,即元素aij?p±bij?p。在 中,一個m×n矩陣A和一個標量,即一個1×1矩陣s之間也能進行加和減運算。矩陣A+s得到與A相同的維數,元素為aij+s。例假設A和B定義如下命Add=A+B,Sub=-AB,■不是這種情況,就返回一個錯誤信息。只有一個例外就是這兩個矩陣之一是1×1,如一元素cij是A的第i行和B的第j列的點積。點積的定義可參見命令集23和附錄B。矩陣CA相同的行數和與B相同的列數對于方陣,也定義了積BA,但其結果通常與AB不同例假設A和B如同例3.1 令x和y命令s=x*y,M=y*x■也包含其他乘積。命令dot(x,y)得到具有相同元素數量的兩個向量x和y的點 dot(x,dot(x,dot(A,得到向量x和ydot(A,B,dim在dim數組中給出A和Bx和y,命令cross(x,y對向量x和y,向量x×ycross命令也可以應用于3×n矩陣,其結果是一個3×n矩陣,這里的第i列是A和Bcross(x,y)cross(A,

得到向量x和y得到一個3×nA和B對應列的叉積。矩cross(A,B,dim)在dimA和B的叉積。A和BsizeA,dimsize(B,dim須是3例x=(10 y=(01命令crossprod=crossx,ycrossprod scalar1=dot(x,crossprod),scalar2=dot(y,crossprod) 中,有一個完成二維矩陣卷積的函數??梢允褂肍IR濾波器(有限脈沖響應)作conv2(A,返回矩陣conv2(A,返回矩陣A和B的二維卷conv2hcol,hrow,A矩陣A與向量hcol列方式和向量hrow 得到一個卷積的特殊形式。參數formatconvn(A,convn(?,format)返回矩陣A和BKronecker張量積可以用于創建大的矩陣,它由命令kron(A,B)得到。如果A是一個矩陣,B是一個k×rm·k×r·n的矩陣。 得到A和B的Kronecker張量積例命令K=kron(A,B■ 中,有兩個矩陣除法的符號,左除\和右除/。如果A是一個非奇異方陣,那A\B和B/A對應A的逆與Binv(A)*B和B*inv(A)。可是,執行它們時是不同的,如例3.5所示。A的逆,inv(A)或A-1在第7.1節中介紹。如果A是一個方陣,那么X=A\B是矩陣方程AX=B的解A-1,這里的X具有與相同的維數。在bA是線性系統AXb的解。參見第7.如果A是一個m的×得到矩陣方程X的最小二乘解,參見第7.7節。矩陣方程XA=B的解是X=B/A,它等同于(A′\B′)′,即右除可以由左除定義。這里,撇號′表示轉置,這將在第3.4節中進行說明。例設A和B如例3.1一樣定義,命A,B,Right=B/A,LeftA如果輸入Right=B*inv(A)和Left=inv(A)*B,則設下列A和系統Ax=b的解 中寫作x=A\b,得到使用如上的A和b,檢查求解系統Ax=b的運算次數命令flops(0);x=inv(A)*b;flopans10命令flops0X=Ab;flps結果ans7因此, 中求解一個系統用左除比用逆和乘法所需的運算次數要少。命令flops的定義參見第2.5■ 中用撇′表示。在中,這種運算經如果A1行變成第1列,第2行變成第2列,依此類推,一如果矩陣A的元素aij是復數,那么所有元素也是共軛的。矩陣A′在項(i,j)上含有aji。.′,A.′conj(A′相同。如例假設A和b與例3.5(b)相同Transp=A′,Transpb=b′,■算術運算也可以元素與元素逐次進行。矩陣的維數要相同,可以是的。如果運算是由一點進行的,那么這個運算實行的是元素方式。 .并沒有列出,這個點在那種情況下具有不同的含義。這個操作符僅給出轉置,與相反,給出了共軛轉置,詳見第3.4節。例A.*BB./AB.^2A.^B2.^[1234]ans 1C.′得■在中預定義的數學標準函數(見第2.4節)是基于矩陣對元素的運算。如果f是這樣一個函數,A是帶元素aij的一個矩陣,那么f(A)ij=f(aij)。如果元素是復數,那么根據這個函數例令A、B和Cabs(A)cos(B)sin(abs(C))數組運算符和數組函數在中十分有用,用戶可以定義自己的數組函數,并把它們存放在M文件中,可參見第2.9節例函數sincos(x)=sin(x)cos(x)是一個非標 函數,可是,你可以定義自己的函functiony=sincos(x)可如下調用看到,應該為0值的y1是一個十分小的數。事實上,eps是較大的。如果用一個向量作為一個自變量來調用sincos,因為sin和cos返回向量,所以其結果是一個向量。當繪制函數圖■M文件的應用可參見第12章和第13對于二維方陣,A的p次乘方可以用A^p實現。如果p是一個正整數,那么這個冪可以由許多矩陣乘法運算定義。對于p=0,得到與A維數相同的同一個矩陣;當p<0時,如果A-1存在,象exp(A)和sqrt(A)那樣的表達式可視為數組運算(參見第3.6節),即它們是對A中也能處理方陣函數。例如A1/2(A的平方根)或eA。舉例如下funm(A,使用泰勒級數計算eAfcn)fcn指定的A的矩陣函數,參見第5.1.4fcnsin、cos等等,參見第2.4節。例如,expm(A)=funm(A,‘exp’)。[F,E=funmA,fc)算如上矩陣函數,但返回結果矩陣F和剩余近似值矩陣E例比較exp和Elementwise=exp(A),Operatorwise=expm(■有用于比較矩陣的六個關系運算符,也可以對矩陣與一個標量進行比較,即矩陣中的每個元素與標量進行比較。 不等1和0 在一個表達式中,算術運算符優先級最高,其次是關系運算符,最低級別是邏輯運算符。圓括號可以改變其順序。例對預定義變量pi的值和通過命令rat獲得的pi的近似值進行比較[t,n]=rat(pi),piapprox=t/n;formatlong,piapprox,pi,piapprox==pi假設A中的元素有大于B中對應的元素嗎即A中的項(1,3)和(3,2)的值大于B中對應項的值令A如例(b)中假設 A中的元素有大于1的嗎■在中有四種邏輯運算符 邏輯運算符的運算優先級最低。在一個表達式中,關系運算符和算術運算符的運算級別要高于邏輯運算符。xor和or之間的差別在于:表達式中至少有一個是真,那么orxor是表達式中有一運算符&和|比較兩個相同維數的矩陣,如同前一節一樣,它也能使一個標量與一個矩陣進行比較。邏輯運算符是按元素比較的。零元素表示邏輯值假,任何其他值的元素表示邏輯值真。其結果是一個包含1和0 返回一個與A和BA和B對應元素 返回一個與A和BA和B對應元素只要有一個為非零,則對應項為1;兩個矩陣均為零時,則為0。 返回一個與A和B相同維數的矩陣。在這個矩陣中,A是零時,則對xorA,B)返回一個與A和B相同維數的矩陣。在這個矩陣中,如果A和B均為零或均為非零時,則對應項為0;如果A或B是非零但不是兩者同時 返回一個x中包含非零元素的下標的向量。如果所有的元素都是零,那么返回一個空矩陣,即[]A中包含非零元素的下標向量。[u,v=findA)返回向量u和vAA素(ukvk) 返回包含A中非零元素的下標向量u和v以及一個包含對應非零元素的向量。A中元素(uk,vk)為非零并且能在bk中找到。例假設x和Aind=find(x),indcol=findA即向量x中元素1、2和4是非零值。要獲得indcolindex=find(x>0.5)index 如果輸入greaterThan=x(index),greaterThan3.0000 6.1000這就是用向量index尋找x中所有大于0.5如果僅想知道x中有多少大于0.5lengthfindx05)針ans2要獲得A中所有非零元素的索引,輸入[index1,index2]=find(■有any和all兩個函數,用于測試矩陣和向量的邏輯條件。其結果是邏輯值,或1,真或假。它們在if12.1節。如果x1;否則,返回0對A1和0的1;否則,返回0對A進行列操作,根據相應列是否所有元素都為非零值,返回帶1和如果這兩個函數之一對一個矩陣進行兩次操作,例如any(any(A))和all(all(A))則例如果all(x<=5)返回1,則實向量x中所有的元素都小于或等于5。如果返回0,則至對一個實方陣A,如果all(all(A==A′))返回1,則A是對稱如果any(any(tril(A,-1)))返回0,則方陣A是上三角陣。否則,在A中的下三角陣中至少有一個非零元素。一個等價令是all(all(A==triu(A))),如果A是上三■邏輯函數(二 返回一個維數與A相同的矩陣,在這個矩陣中,對應A AA 如果A是一個空矩陣,返回1;否則返回0isequal(A,B) A和B是相同的,即有相同的維數和相同的內容,則返。如果A1AA5第4 創建新矩在2.2節中討論了矩陣的定義和分配。但是也還有可能要建立新的矩陣,例如通過函數返回一個新的矩陣或者使用已存在的矩陣。這種矩陣的元素全部都是0。單位矩陣的對角線元素全部是1,而其他元素全部是0。建立單位矩陣使用eye命令。在矩陣乘方運算中,n階的單位矩陣就相對應于在標量運算中的數字1。建立一個n×n的1 建立一個m×n×...×p的1矩陣。 建立一個和矩陣A同樣大小的1矩陣。 建立一個n×n的0矩陣。zeros(m,n,...,p)建立一個m×n...×p的0矩陣。 建立一個和矩陣A同樣大小的0矩陣。 eye(m, 建立一個和矩陣A例矩陣中的所有元素都是隨機數,這樣的矩陣稱為隨機矩陣??梢杂胷and命令來產生在 rand+*rand 產生一個n×n的矩陣,其元素為0~1rand(m,n,...,p)產生一個m×n×...×p0~1之間均勻分布的 產生n×n的矩陣,其元素為零均值、單位方差的正態分布隨機數randn(m,n,...,p)產生一個m×n×...×p的矩陣,其元素為零均值、單位方差的正態分布隨機數。5使用一種新的隨機數發生器,可以設置幾個隨機數的。它能夠產生在閉區間[2-5,1-2-5]上所有的浮點數。理論上它能夠產生21492≌10449多個不重復的數。而發生器的狀態為s4中的隨發生器的狀態為srand(‘state’,rand(‘seed’,arg 根據arg設置正態隨 發生器,見rand例例如,隨機發生器可以給出以下的結果。這里只列出了這個狀態向 (35個元素為了避免總是從相同的隨機開始而得到相同的隨機數序列,可以使用 clock命令定義在2.5■ 中還有利用已存在的矩陣建立新矩陣令。假設矩陣A是m×n的矩陣,x是一個有n個元素的向量。用命令集35中令diag來生成一個新的矩陣。從已存在的矩陣中生成新的矩陣(一生成一個nxA第kk=0為主對角線;k<0為下第k對角線;k>0為上第k對角線。維的矩陣,該矩陣的第例命令diag_element=diag(A)給出Diag_matrix=diag(diag(A))返回命令Dmatrixx=diag(x)或者Dmatrixx=diag(x’)如果輸入superDiagElement=diag(A,2),那么輸出superDiagElement=8NewMatrix=diag(diag(A,2))返回NewMatrix 注意,該矩陣的大小由命令diag(A,2SuperDiagonalMatrix=diagdiagA))矩陣A的上第2對角線的長度為2,因此建立的矩陣大小為4×4■ 中使用命令triu和tril來建立三角矩陣。 生成一個和 對于每一個方陣A都有下列關系A=triu(A)+tril(A)-diag(diag(A))嚴格的上三角矩陣A應該使用triu(A,1)來定義;而嚴格的下三角矩陣A則用來定義。因此,對于每一個方陣A都有下列關系A=triu(A,1)+tril(A-,1)+diag(diag(A))當通過迭代的方法來求解線性方程系統(例如Gauss-Seidel,Jacobi或者SuccessiveOver例UpperTriangular=triuBLowerTriangular=tril■生成一個由矩陣A逆時針旋轉90°而得的新陣。也就是將矩A中的左上角的元素和右下角的元素交換位置,也可13.5節rot90(A,生成一個由矩陣A逆時針旋轉k×90°而得到的新陣,也序(見圖2-2)從矩陣A中取來。如果矩 A中沒有repmat(A,[mn創建一個和矩陣A有相同元素的m×n×...×p塊的矩陣repmat(x,[mn創建一個m×n×...×p的矩陣所有元素的值都為標量x使用該命令要比用命令x*ones([mn...])來創建同返回沒有空維的矩陣A通過通過二維矩陣A的行元素按照b 交換位置生成一個 i,n-lr’是‘left-right 通過二維矩陣A的列元素按照 =am-i+1,j交換位置生成一個flipdim(A,dim)生成一個在dim維矩陣A內的元素交換位置 矩陣命令flipdim(A,1)等同于命令flipud(A),命令flipdim(A,等同于命令fliplr(A)將矩陣A和B組合成一個dim維 根據向量order來改變矩陣Aipermute(A,order)進行命令permute的逆變換。命令假設有如例4.1中的矩陣OneMatrix,使用命令B=reshape(OneMatri3x,,為了在矩陣BC=zeros(3,8)創建一個零陣。然為了快速對矩陣D進行變維以便它可以響應從命令cat(3,C,B)返回的結果,可以使用使用命令permute和shiftdim對矩陣變維的結果如在中可以過加元素行列將一矩或者向進擴展。于可以自動地改變矩陣的大小,所以使用已存在的矩陣的一部分來創建一個新矩陣是很容易的,這在許多應用中都很有用。從已存在的矩陣中建立一個矩陣就和定義一個新矩陣一樣。元素用空格或逗號分隔,行用分號或回車分隔;見2.2節。在4.3節中給出了其相反過程,從大矩陣中定義子矩陣?!隼袔追N方式可以將向量x擴展成1×4。假設想要的新向量是 以下兩種方法可以對矩陣A擴展一個新行,如向量對矩陣A擴展一個新列,如y,可以這樣做Anew3=[A y]或 Anew3=[A[11;ABvert=[A;B] ABhoriz=[A對于ABvertA和B的列數;而對于ABhoriz來說,它的行數一■為了生成規則的矩陣塊可以下列的方式使用命令repmat例命令repmat10;01],33在例3.2中使用命令repmat10],15如果要創建一個所有元素都是同一個值的矩陣,可以使用命 repmat(42,[■ 中對空矩陣的定義是A=[]。有時創建一個的矩陣,但是這個矩陣中可能有幾維是空的,比如0×1×0矩陣。也可參見命令集31中令isempty。例要創建一個大小為1-2-0-0-2的矩陣,可以使用命令zeros(1,2,0,0,2),結果空的行向量和列向量用命令zeros一些函數對空矩陣操作返回一個常量,在編寫程序時這常常是有用的。在命令集38中E是 返回沒有空維的矩陣A 返回0 返回1 返回E 返回E 中可以使用冒號‘:’來代表一系列數值。有時也使用它來定義一個子矩陣。數字序列(一創建從i開始、步長為1、到k結束的數字序列,即i,i+1,i+2,...,k 則返回一個空矩陣,也就是[]。數字i和k 創建從i開始、步長為1、到k結束的數字序列,即i,i+j,i+2j,...,kj=0,則返回一個空矩陣。數字i、j和k不必是整數,該序列的最后一個數如果輸入vect=2:7或者 返回相同結果負步長:vect2=6:-1:1,結果實數:realVect=1.2:-0.8:-3.2,結果為命令realVect2=0:pi/4:pi,結果冒號可以用來定義矩陣Mat1=[2:40.1:1:2.1;冒號能夠生成函數表,比如數字序列(二 在區間[a,b]上創建一個有100個元素的向量,這100個數把整linspace(a,b,n)在區間[a,b]n個元素的向量。這個命令和冒號在區間在區間[10a,10b]上創建一個有50個元素的向量,這50[10alogspace(a,b,n)在區間[10a,10b]上創建一個有n個元素的向量,這n個數把整個區如果從矩陣C中抽取行和/或列組成矩陣D,那么D就稱為C的子陣,C中的行和列也可以稱為C的子陣。所以一個矩陣可以有許多子陣。這可以推廣到數組中去。在命令集41中列出了對二維數組操作令。要取出其中一維的最后一個元素值,可以用值end來取。例如,A是一個4×3×2的數A(end,2,1)就可以得到元素a421的值,A(end,end,end)得到元素a432的值。當用冒號來定義矩陣的子陣時,要使用在命令集41中列出的表達式。 數組A中下標為(i,j,...,k)的元素值,也可參見2.3節。返回二維矩陣A中第j列列向量。返回二維矩陣A中第i行行向量A(:,j:k)返回由二維矩陣A中的第j列,第j+1列,直到第k列列向量組成的子陣。A(i:k,:)返回由二維矩陣A中的第i行,第i+1行,直到第k行行向量組成的子陣。l) 返回由二維矩陣A中的第行到第行行向量和第j列到第l列列 返回矩陣A 將矩陣A中的每列合并成一個長的列向A(j:k) A([j1j2...]) 返回一個行向量,其中的元素為A(:)中的第j1、j2...元素。A(:,[j1j...])返回矩陣A的第j1列、第j2列等的列向量。A([i1i2...]:,)返回矩陣A的第i1行、第i2A([i1i...], 返回矩陣第i1行、第i2行等和第j1列、第j2[j1j2也可參見helpcolo例語句Submatrix=Ftable(2:4,:)輸出的結果為也就是它的每一列是從矩陣Ftable的第2到第4為了使得從一個i×j×k的立方體原點到3×3×3的立方體的中心最遠,可以使用令是A(end-2:end,en-d2:end,en-d2:end冒號表達式能夠與關系運算符一起使用,見3.8節。通過下面簡短令可以挑選出矩Selected=Ftable(Ftable(:,2)>0,:■利用冒號表達式可以寫出復合表達式,用helplis可得的信息 元素為h=1/(i+j-1)。由于它是一個條件數差的矩陣,所以將它用來作為試驗矩陣;見7.6節。 例如果輸入 就會相應地輸出B■托普利茲(oeplitz)矩陣由兩個向量來定義,一個行向量和一個列向量。對稱的托普利茲矩陣由單一向量來定義。 toeplitz(k,r)生成一個非對稱的托普利茲矩陣,將k作為第1列,將r作為第1行 toeplitz(c)用向量c例x=[123y=[987可以通過命令gallery來調用特殊矩陣庫。輸入helpgalley可用的,輸入helpprivate/famly得到特殊矩陣族的有關信息。舊版本中保留的有在下面令集44中給出了 生成一個p多項式的友矩陣,也就是它的特征多項式是p。p生成一個在數字分析中有名的n×n試驗矩陣。比如,只有和n=5n=3時是一個條件數差的矩陣;n=5galleryfamily從family族中返回一個矩陣;見表4-1 n=2k的Hadamardn能被4 返回一個由向量x定義的Hankel它的元素為h 。第1列為向量x,反三角以下的元素為0 i+j-pascal返回一個n×n的ascal矩陣,它是對稱、正定的矩陣,它的元素由ascal三角組成。它的逆矩陣的所有元素是整數。pascal(n,pascal(n,Choleskyv=xn-j,n為向量x 例m×n的魔方矩陣由1~n2的整數作為其元素,并且矩陣任一行和列的元和相等。要創建一個3×3的魔方矩陣,可以輸入magic(3),得到的結果為:■例為了能夠得到一個Householder矩陣,可以運行命令helpprivatehou這將給出指定參數的信息。下面的語句可用來創建一個Householder矩陣H。■表4- 給出循環序列矩陣,第1列作為參數給出,然后用相同的循環值建立矩 給出一個條件數差的對角三角矩 給出一個Householder 給出一個上Hessenberg矩陣的逆矩 給出一個Jordan 給出一個稀疏對角三角塊矩陣,在求解帶有有限差分 Poisson方程時要用到該矩 給出一個Vandermonde 給出一個Wilkinson矩第5 字符串和其他數據類在中可能會遇到對字符和字符串的操作。字符串能夠顯示在屏幕上,也可以用來構成一些命令,這些命令在其他令中用于求值或者被執行。細胞矩陣或者細胞數組是無類型矩陣,它們中的元素可以是任何類型。中還有大量適合于位運算的函數和一些常用的整數函數。還有可能把向量作為集合來看待。一個字符串是在一個行向量中的文本,這個行向量中的每一個元素代表一個字符。實際上,元素中存放的是字符的內部代碼,也就是ASCII碼。當在屏幕上顯示字符變量的值時,顯示出來的是文本,而不是ASCII數字。由于字符串是以向量的形式來的,所以可以通過它的下標對字符串中的任何一個元素進行。分中的字符串用單引號來定義這里的text例簡單的分配方法,如 Smit’h,在屏幕上就會有如下顯示如果剛輸入‘JohnSmit’h分配一個字符。如果(a)中變量name已存在,令name(3)=‘a’,則會給出將上例中的字符串name的元素前后互換位置,可以輸下面顯示出字符串eman關于循環for-loops語句可參考12.2節。用eman=fliplr(name)也可得到同樣的結果;見4.1一個字符串的長度 namelen=size(name),給出在字符串中用兩個單引號來表示一個單引whoscat='Joan"swhoscaJoan'sca字符串的組成可以象數字矩陣一也可參見命令集47中令strcat和strvcatnameCharlesJohnsn'irstname=name17出firstnameCharletext1=‘John’;text2=‘Joan’;couple=[text1;text2■字符串命根據指定的字符集將向量x根據指定的字符集將向量x中的整數轉換成字符。這個命令是命令abs的逆操作。在舊 中命 四位數字和指數。這個命令經常和命令 xlabel還有一些其他輸出命令一起使用;見13.3節 將數值f轉換成帶有k 將數值f轉換成由format設定格式的字符串,format 將浮點小數x轉換成含有對x的有理數strlen是每個元素的字符串長度,缺省值為13。 將字符串hstr中的十六進制數轉換成相應整數。 將整數n轉換成基數base。 將矩陣A轉換成字符串。如果給出 n值,它就代表 數點,開始的符號表示10的冪的e,還有復數虛部的i str轉換成[R1C1R2C2]量,它給出了字符串str中指定區域的開始和最后的行 sprintf(......) 返回一個矩陣,它是根據字符串formatstr從字符串 但是這個參數是可選的。這個命令和命令fscanf的作用是一樣的,區別在于前者是對一個字符串而不是對文件進行操作,見15.4節。[A,nm,E,next]=得到一個象通過命令sscanf返回的一樣的矩陣A,也 返回正確轉換的元素mn的個數以及矩陣E中的錯誤的 個數。當所有的元素都沒有時,通過數值next來例執行命令x=abs(str),將返這是字符A、B、C的ASCII如果輸入 將會給出命令為了顯示變量numstr,實際上它是一個字符串,可以輸入charnumstr4,通過命令ischar(numstr)和whos,也可知道numstr是一個字符命令numinfo=sprintf(‘Thenumbe5.2e’,float命令rational=rats(0.979796)將會給出一個包含浮點小數0.979796有理近的字符串在命令littleRat=rats(0.979796,5)中的可選數字5將嚴格限定字符串的長度為5■命令rat在本書2.4例假設矩陣A被定義為命令mat2str(A)給出假設x=4.12345,命令mat2str(A)字符串函數(一 返回沒有后續空格的字符串str ischar(s) 如果s是字符數據類型,則返回10。在舊版中該命令還可以使用,但是在將來的高版本中將會被去掉。 如果str中的第i個字符是字母,則返回1 strstr中的字i 比較串str1和串str2,如果相等返回1;否則返回0。 i findstr(str1,str2返回一個向量,它包含str1中子串str2的起始位置。strrep(str1,str2,str3)在字符串str1中含有str2的所有位置用str3來代替。strtok(str1,str2)返回在str1中含有str2str1的 字符串outstr等于strtok(str1,str2)返回值字符串 等于字符串str1 例 ’)給出name=MATLfunhihih假設字符串變量定義為那么執行命令str2mat(greet,where,party)的結果可使用命令strtok從用逗號分隔內容的字符串中抽取出信息來。字符 text定義為要注意的是此時調用該命令時會到第2個逗號處,是因為第1個逗號在開始位置,它 有兩個用于連接字符串令:strcat用于連接字符串,strvcat用于把字符串連接

將str1和str2連接成一個列向量。str1和str2有相同的字符個數,行數可以不相等,最后結果的總); 例假設A和在例5.3中定義的一樣,那么strcat去掉了所有的前置空格,如果想保有下列語句對Table來說,利用命令whos■例■顯示和輸2.3節。結果另一種顯示變量的值就是使用命令disp。使用它只顯示出變量的內容,這是有用的,特 顯示矩陣A的內容,如果A是字符串,則顯示出它的文本通過inputA.6中的例input(out,input(out,in)在屏幕上顯示出字符串out例讀入一個實數x=input('Giveanumber讀入矩陣A。input命令之后的分號用來限定輸出結A=input('GivethematrixArowbyrow:');GivethematrixArowbyrow:[ 2; 5輸入時還允許使用數學表達式和函數A=input('Pleasegivemeamatrix:Pleasegivemeamatr:ixrand(輸入命令還可帶多個[m,n]=input('GivethesizeofGivethesizeof:Asize(A)邏輯表達式的計算讀入一個字符串name=input('Whatisyourlastname?Whatisyourlastna?me'Smith'注意,在這種情況下輸入的字符串要用’’strname=input('Whatisyourlastname?','s');Whatisyourlastnam?e■還有一些其他的方式來讀入字符串,比如通過菜單; 14.3節字符串求eval(str1,str2)執行str中包含eval(str1,str2)執行str中包含 命令并返回結果 [x1,x (aa, str求值。aa字符串可以是‘caller’(在evalin調用 在x1,x2,...中。evalin(aa,str,al)工作區aa(見上)中試著對字符串str則對字符串altassigninaa, name,把值val賦給變量name,如果變量不存在,則新建。g=inline(str,arg1,arg量aa表示工作區,見命令evalin從字符串str中建立一個叫內聯的函數g內存中的函數,可以用g(val1,val2...)參數的名字可以在字符串arg1,arg2,... 將從str中找出小寫字母作為參 為了滿足元素操作,在*、/和^前加一個點‘.’,建立一個向量化的內聯函數g 等同于formula(g)命令eval使得成為一個可靈活編程的語言。比如這個命令用來調用中沒有預定義的函數,這很有用處,見12.4節。例假設要編寫一段簡單的矩陣計算的程序來輸入矩陣A和B,并且可以讓用戶來決定是為了不結束字符串,這里應該用兩個分號。在5.1.3節對命令disp和input進行了描述,命由于矩陣維數的不正確等原因,如矩陣AB相乘,可能會導致一些錯誤,所以要求矩陣的維數要一致。用第2個字符串作為命令eval的參數可以得到一個錯誤信息。通過運行下列程用命令eval來調用保存在文件catchInfo.m中的用戶自定義的函數catchInfo 中的錯誤信息,假設給出矩陣:字符串變量可以和字符串常量結合使用。比一個變量名為file=‘myfile.mat’,要想將當前的變量值保存到這個文件中,可以輸入eval[‘save’,file],這和輸入save還可以對向量函數進行求值。令str1=’b.*sin(k.*x)’。b,k,x都是向量創建一個字符串fcn='input(''Giveafunction","s")fplot(eval(fcn),[0,4])Giveafuncti 假設一個名為sinx2.m的M文件(見2.9節)包含下列代碼:有關M文件的信息可參見12.3節,如果在文本Giveafunction之后輸入sin

溫馨提示

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

評論

0/150

提交評論