第八節 MATLAB軟件簡介
帶有不同專業背景的實際問題含有的數據信息量一般都很大,運用數學理論但是僅僅依靠手工方法去推演、計算,問題求解就很困難甚至不可能完成。為此人們開發了若干種在數學與工程領域中很著名的通用或專用軟件,例如MAPLE,MATHEMATICA,MATLAB,R與LINGO等。這些軟件的學習與使用甚至已經成為很多理工科專業的基本要求。
MATLAB是MATrix LABoratory(矩陣實驗室)的縮寫。MATLAB是集計算、可視化和編程等功能為一身的,最流行的科學與工程計算軟件之一。本節簡要介紹MATLAB的基本使用方法。
MATLAB軟件具有以下四個方面的特點。
(1)使用簡單 MATLAB語言靈活、方便,它將編譯、連接和執行融為一體,是一種演算式語言。此外MATLAB軟件還具有完善的幫助系統,可以通過查詢到和演示示例來學習如何使用MATLAB編程解決問題。
(2)功能強大 MATLAB軟件具有強大的數值計算功能和優秀的符號計算功能。它還具有方便的繪圖和完善的圖形可視化功能;MATLAB軟件提供的各種庫函數和數十個專業性工具箱為用戶應用提供了極大的方便。
(3)編程容易、效率高 MATLAB既具有結構化的控制語句,又具有面向對象的編程特性;它允許用戶以更加數學化的形式語言編寫程序,比C語言等更接近書寫計算公式的思維方式;程序調試也非常簡單方便。
(4)擴充能力強 MATLAB軟件是一個開放的系統,除內部函數外,所有MAT-LAB函數(包括工具箱內函數)的源程序都可以修改;MATLAB也可以方便地與FORTRAN、C等語言進行接口,實現不同語言編寫的程序之間的相互調用。
在計算機上安裝好MATLAB之后,雙擊MATLAB圖標,就可以看到其界面,如圖2.7所示。

圖2.7 MATLAB主界面
一、MATLAB的命令窗口與基本運算
MATLAB既是一種語言,又是一個編程環境。MATLAB有兩個最主要的環境窗口:一個是命令窗口(MATLAB Command Window);另一個是程序編輯窗口(MATLAB Editor/Debug)。
1.命令窗口
進入MATLAB圖形界面以后,可以關閉工作空間,當前路徑等幾個位置靠左的窗口,而只保留位置靠右的命令窗口,如圖2.8所示。

圖2.8 MATLAB命令窗口
命令窗口是用戶與MATLAB進行交互的主要場所。在命令窗口菜單欄下面的空白區域可以進行程序調用、輸入和顯示結果,也可以在該區域鍵入MATLAB命令進行各種操作,或鍵入數學表達式進行計算。
【例2.17】 在命令窗口提示符“>>”后鍵入x=pi,回車,則將在命令行下面顯示如下的變量值:
x=
3.1416
如果希望得到π的前若干位小數(例如前60位),則可以鍵入vpa(pi,60)(式中vpa是MATLAB中的顯示變量精度的一個庫函數),命令窗口當即有輸出
x=
3.14159265358979323846264338327950288419716939937510582097494
再在提示符后輸入計算包含根式計算的表達式y=1/4+sqrt(8.5)并回車,將顯示
y=
3.1655
繼續輸入z=y+1-2i,回車即有
z=
4.1655-2.0000i
可見,在MATLAB中對所使用的各種變量無需先行定義或規定變量的數據類型;一般也不需要說明向量或矩陣變量的維數,所以有人稱MATLAB為演算紙式的科學計算語言。此外,MATLAB提供的數與向量和矩陣運算符可以方便地實現各種復雜的、高精度的計算。
在MATLAB的命令窗口中,如果表達式后面有分號“;”,執行結果就不在命令窗口顯示,但該結果仍然被保存在MATLAB的工作空間中;如果在表達式中不指定輸出變量,MATLAB就將結果賦給缺省變量ans(answer的縮寫)。
在命令窗口可以用方向鍵和控制鍵來編輯、修改已輸入的命令。例如“↑”可以調出上一行的命令;“↓”可以調出下一行的命令等。
在命令窗口可以執行文件管理命令、工作空間操作命令、結果顯示保存和尋找幫助等命令。讀者應該善于利用MATLAB的幫助系統去熟悉其用法。例如,如果要查找平方根函數的功能,則在命令窗口輸入
help sqrt
就可以看到關于平方根函數功能的文本解釋與函數調用的具體方法。
2.基本運算符與常用的數學函數
在MATLAB中,四則運算符分別為:“+”“-”“*”(乘)“\”(左除)和“/”(右除)。乘方或開方均可以由運算符“^”來表示;而平方根的開方運算可以調用函數sqrt來實現。
【例2.18】 在MATLAB的命令窗口進行四則運算與方冪運算。在提示符后輸入s=(1+100)/2*100,就得到自然數列的前100項和
s=
5050
輸入3/4,3\4,可得到
ans=
0.7500
ans=
1.3333
請讀者注意左除與右除運算的區別。式中左除運算符是MATLAB軟件運算符的一個特色,在矩陣運算時尤為重要。
接著在命令窗口再輸入c=12^3,c^(1/2),sqrt(c),則得到
c=
1728
ans=
41.5692
ans=
41.5692
下面的表2.1、表2.2中列出了一些特殊數學變量與基本數學函數的庫函數及其功能。
表2.1 特殊變量值

表2.2 基本數學函數

這些運算符與數學函數大家可以經常使用,直至達到能熟練運用的程度。
二、MATLAB的矩陣表示與矩陣運算
MATLAB的所有數值功能都是以矩陣為基本單元進行的(數與向量則被看成矩陣的特殊情形)。因此MATLAB對矩陣的運算功能可以說是最強大、最全面的。現在來介紹矩陣表示和矩陣計算方法等。
1.矩陣的輸入
MATLAB的矩陣輸入可以有許多種方法,對于階數較小的矩陣,可以用賦值語句直接輸入它的每個元素來構造;對于元素具有一定規律的矩陣,則可利用MATLAB語句或調用MATLAB的函數文件產生;階數較大的矩陣一般采取M文件形式來構造。
【例2.19】 用賦值語句進行矩陣輸入。
A=[1 2 3;4,5,6;7 8 0]
A=
1 2 3
4 5 6
7 8 0
B=[sin(pi/3),A(2,1);log(9),tanh(3)]
B=
0.8660 4.0000
2.1972 0.9951
其中,A(2,1)是調用矩陣A的第2行第1列的元素。
賦值語句是建立矩陣最直接的方法,在賦值過程中,矩陣元素排列在方括號內,同行的元素之間用空格或逗號“,”隔開,不同行的元素之間用分號“;”或回車鍵分隔。
矩陣元素可以是數(實數或復數),也可以是運算表達式,甚至包括其他矩陣的元素;此外,沒有任何元素的空矩陣(符號為“[ ]”)也是允許的。
對已經存在的矩陣,還可以用下標方法給它們的元素賦新的值以修改矩陣。
【例2.20】 用賦值語句修改矩陣。在建立例3的矩陣之后,對它們的元素進行修改。
A(3,4)=2
A=
1 2 3 0
4 5 6 0
7 8 0 2
這里原先的矩陣A是3階方陣,沒有第3行第4列,在執行對A(3,4)的賦值時,MATLAB自動增加矩陣A的行列數,以適應新的矩陣規模,并對未輸入的元素賦值0。
B(1,1)=-1.5
B=
-1.5000 4.0000
2.1972 0.9951
若再輸入A(3,:)=-1,則得到
A=
1 2 3 0
4 5 6 0
-1 -1 -1 -1
A(3,:)表示矩陣A的第3行;同理,A(:,2)就表示矩陣A的第2列了。
在MATLAB中,經常用冒號表達式產生行向量,其形式為
x=x0 : step : xn
其中,x0,step,xn為給定數值:x0表示向量首個元素值;xn表示向量尾元素的數值限;step表示元素的增量,當增量為1時,可以不寫出。
【例2.21】 利用冒號表達式產生行向量(行矩陣)
D=1:2:11,F=9:-2:2
D=
1 3 5 7 9 11
F=
9 7 5 3
此外,MATLAB還提供了一些庫函數來構造某些特殊的矩陣,例如函數eye產生單位矩陣,其用法為:
eye(n)——構造n階單位矩陣;eye(m,n)——構造m×n階單位矩陣;
eye(size(A))——構造與矩陣A同階的單位矩陣。
同理,函數zeros和ones分別產生全零矩陣和全一矩陣,它們的使用方法與產生單位矩陣函數eye相同。
函數diag,tril和triu分別取矩陣的對角、下三角和上三角部分等;diag也可以生成主對角類矩陣等。此外函數vander可以構造范德蒙矩陣;函數hilb可以求出指定階數的Hilbert矩陣等。函數rand能夠構造均勻分布的隨機矩陣,而函數randn則產生正態分布的隨機矩陣。
【例2.22】 利用MATLAB的庫函數來構造某些特殊的矩陣。例如,在命令窗口輸入
eye(3,4),ones(4),rand(3,5),randn(3,5),
diag(ones(4)),diag([1,2,3,4]),diag([1,2,3,4],-1)
等,請大家自己去可以觀察相應的輸出結果。
在MATLAB軟件中,矩陣或向量的維數可以不預先定義,但在解決實際問題時經常需要知道矩陣或向量的維數,為此MATLAB提供了兩個庫函數length和size,分別用來確定向量和矩陣的維數。例如,輸入size(diag([1,2,3,4],-1)),看輸出結果。
2.矩陣的基本操作
在MATLAB軟件中,通過矩陣的名稱調用整個矩陣;用下標的方法調用矩陣的某個元素或者子矩陣。
【例2.23】 設矩陣A是已知的9×9矩陣,則
A(:,2) A的第2列元素構成的列向量
A(5,:) A的第5行元素構成的行向量
A(1:3,2:7) A的前3行及第2~7列元素構成的子矩陣
A([1 3 5],[2 4]) A的第1,3,5行,第2,4列元素構成的子矩陣
A(:,1:2:7) A的第1,3,5,7列元素構成的子矩陣
如果將矩陣的某個子塊賦值為空矩陣[ ],則相當于在原矩陣中去掉了相應的矩陣子塊。
矩陣還有變維操作。實現矩陣變維的方法有兩種,用“:”和函數reshape,前者通過兩個矩陣之間的運算實現變維;后者直接對一個矩陣進行變維操作。
【例2.24】 矩陣變維操作的實例。先輸入一個行向量構成的矩陣,然后對它進行變維運算。
a=[1:12];b=reshape(a,2,6) % reshape實現矩陣的變維操作
b=
1 3 5 7 9 11
2 4 6 8 10 12
c=zeros(3,4);c(:)=a(:)
c=
1 4 7 10
2 5 8 11
3 6 9 12
注意在變維時,元素的順序是按列進行的。
矩陣變向包括矩陣的旋轉、左右翻轉和上下翻轉,分別由函數rot90、fliplr、flipud和flipdim來實現,具體使用方法可以在命令窗口自我練習,也可以查詢MATLAB的幫助文檔。
3.矩陣的基本運算
用運算符號“+”“_”“*”和左除“\”和右除“/”,同樣可以對矩陣做加、減、乘和除法運算。如果A和B都是n階矩陣,且A非奇異,則左除和右除分別表示
A\B=A-1B, B/A=BA-1
如果A不是方陣,則上面計算公式中的求逆表示廣義逆矩陣運算。利用左除運算符可以直接求解線性方程組。
對方陣也可以進行矩陣的乘冪運算,用運算符“^”表示。
對于實矩陣或向量,用符號“'”可以進行轉置;然而對于含復數元素的矩陣,則“'”將同時對復數進行共軛處理。
【例2.25】 矩陣的四則運算。
A=[101;210;-32-5];B= [122;342;523];
A\B,B/A
ans=
-2.0000 -2.0000 -4.5000
7.0000 8.0000 11.0000
3.0000 4.0000 6.5000
ans=
14.5000 -3.0000 2.5000
19.5000 -3.0000 3.5000
8.0000 0 1.0000
A*B
ans=
6 4 5
5 8 6
-22 -8 -17
A^3
ans=
14 -6 18
0 5 -6
-66 36 -94
4.矩陣的點運算
MATLAB還有一種獨特的運算規則——點運算,使用非常方便。也可以將它們看成矩陣運算的擴充。點運算的加減運算符與普通的矩陣加減運算符相同;點運算的乘、除和乘方運算符在普通的矩陣運算符前加一點“.”,即
“.*”,“.\”,“./”和“.^”
矩陣的點運算實際上就是兩個具有相同維數的矩陣對應的元素之間進行加、減、乘、除和乘方運算。矩陣的點運算特別是對兩個向量(即行矩陣或列矩陣)之間進行處理與運算時更常常用到。
【例2.26】 矩陣的點運算。利用例2.25中的矩陣A和B數據進行點運算:
A.*B
ans=
1 0 2
6 4 0
-15 4 -15
A./B
ans=
1.0000 0 0.5000
0.6667 0.2500 0
-0.6000 1.0000 -1.6667
A.^2
ans=
1 0 1
4 1 0
9 4 25
大家可以去比較A.^2與A^2的不同。
5.矩陣的基本函數
矩陣的函數運算是矩陣運算中最實用的部分,我們將常用矩陣函數及其功能列于表2.3中。
表2.3 矩陣基本函數

【例2.27】 有關矩陣函數的計算。利用例2.25、例2.26中的矩陣A的數據:
A=[1 0 1;2 1 0;-3 2 -5];B= [1 2 2;3 4 2;5 2 3];%
輸入兩個矩陣
d=det(A),r=rank(A)
%求矩陣A的行列式與秩(秩的概念可參見第三章)
d=
2
r=
3
inv(A) %求A的逆矩陣
ans=
-2.5000 1.0000 -0.5000
5.0000 -1.0000 1.0000
3.5000 -1.0000 0.5000
[V,D]=eig(A) %求A的特征值(詳見本書第五章)
V=
0.4444 -0.1853 0.2767
-0.6867 0.0701 0.9473
-0.5752 0.9802 0.1617
D=
-0.2943 0 0
0 -4.2899 0
0 0 1.5842
矩陣的正交基,矩陣的特征值與特征向量等概念,在本書后面章節中將逐漸涉及。
三、MATLAB繪圖
MATLAB提供了豐富的繪圖功能。下面介紹常用的二維、三維圖形命令。
MATLAB最常用的繪圖命令就是plot,它打開一個圖形窗口;如果已經存在一個圖形窗口,則清除當前圖形窗口的圖形,繪制新的圖形。
【例2.28】 繪制函數y=sinx在區間[0,2π]上的圖形。只需在命令窗口輸入下列命令:
x=linspace(0,2 * pi,60);
%函數linspace產生一個等分區間[0,2π]的60維的行向量
y=sin(x);
plot(x,y); % 作圖
圖形輸出略。
【例2.29】 在同一坐標系下繪制函數y=sinx和y=cosx在區間[0,2π]上的圖形,并對所作的圖形進行標注。在命令窗口輸入
x=linspace(0,2 * pi,60);
y=[sin(x);cos(x)];
plot(x,y); %作圖
grid; % 增加圖形網格
xlabel('x');ylabel('y'); %x軸、y軸標注
title('Sin and Cos Curves'); %增加圖形標題
gtext('y=sin(x)');gtext('y=cos(x)');%曲線標注
執行后的圖形見圖2.9。

圖2.9 例2.29圖
當要在同一坐標系下繪制多個函數的圖形時也可以用hold on與hold off這一組命令去實現。具體用法可以用help hold on去查閱文本幫助。
【例2.30】 作出二元函數在[-20:20;-20:20]上的圖形。輸入
[x,y]=meshgrid(-20:0.3:20); %生成二維網格
r=sqrt(x.^2+y.^2)+eps;
%eps是最小正數,防止出現零做分母的情況
z=sin(r)./r;
surf(x,y,z) %曲面作圖
shading interp; %用圖形插值法改進曲面圖的效果
執行后的圖形見圖2.10。

圖2.10 例2.30圖
如果在上面輸入的語句之后加上rotate 3D,或者作圖完成后,在圖形(Figure)窗口的菜單Tools之下選擇rotate 3D,則三維圖形可以向任意方向作旋轉。
曲面作圖除用函數命令surf外,還可以利用mesh或plot3。至于MATLAB中曲線圖形的線型,曲線與標注對象的顏色以及作圖范圍等,也可以進一步學習MATLAB的專門教材。
- 校本資源進思政課研究:興農報國的川農大實踐
- 2020年考研英語(二)高分范文100篇【命題分析+答題攻略+強化訓練】
- 客戶關系管理思政案例探索與實踐
- 國際關系學院211翻譯碩士英語[專業碩士]歷年考研真題及詳解
- 華東師范大學外語學院245二外俄語歷年考研真題及詳解
- 電視照明(第三版)
- 平狄克《微觀經濟學》(第8版)筆記和課后習題詳解
- 國際服裝商務(第2版)
- 大學生創業基礎
- 管理實驗教程(第三版)
- 2019年經濟師《經濟基礎知識(中級)》復習全書【要點精講+歷年真題詳解】
- Access數據庫與程序設計(第2版)
- 楊蔭瀏《中國古代音樂史稿》配套題庫【名校考研真題+章節題庫+模擬試題】
- 言語交際與人際溝通(第二版)
- 吳魯鄂《日本文學教程》(第二版)課后習題詳解