久聞Matlab的大名,可惜一直沒有好好學(xué)學(xué)?,F(xiàn)在正好裝了個最新的版本,就來學(xué)習(xí)一下Matlab,了解一下它的強大的功能。
程序界面
打開Matlab會看到類似的程序界面,上邊是菜單欄,包含了各種工具。左邊是文件視圖,列出了項目中的所有文件。中間是代碼和命令行窗口。右邊則是工作區(qū)窗口,每次在代碼中輸入的變量都會作為工作區(qū)變量保存在工作區(qū)中。

數(shù)據(jù)類型
Matlab中其實所有變量都是矩陣,不過如果你只指定了一個值的話,那么它其實就是一個1X1的矩陣。
矩陣和數(shù)組
數(shù)組使用方括號聲明,數(shù)組元素使用空格或者逗號分隔開。這樣的數(shù)組又叫做行矢量。
% 數(shù)組
array1 = [1,2,3,4,5]
array2 = [1 3 5 9 7]
要創(chuàng)建矩陣,使用分號分隔的多行數(shù)據(jù)。
m = [1,2,3; 4,5,6; 7,8,9]
另外還有幾個方法用于創(chuàng)建初始值為0、1、均勻隨機、正態(tài)分布隨機的矩陣,它們的參數(shù)分別是行和列的個數(shù)。
% 創(chuàng)建矩陣
m0 = zeros(3,3)
m1 = ones(3,3)
m2 = rand(3,3)
m3 = randn(3,3)
如果要轉(zhuǎn)置矩陣,使用單引號。
% 轉(zhuǎn)置矩陣
m = m'
兩個某一維度相同的矩陣可以串聯(lián),逗號分隔為水平串聯(lián),分號分隔為垂直串聯(lián)。下面[m,n]結(jié)果是3X6的矩陣,而[m;n]是6X3的矩陣。
% 水平串聯(lián)和垂直串聯(lián)
n = zeros(3,3)
[m,n]
[m;n]
矩陣與一個數(shù)運算,結(jié)果會應(yīng)用到矩陣所有元素上。如果矩陣和矩陣運算,結(jié)果遵循矩陣計算法則。如果希望將兩個矩陣對應(yīng)元素進行計算,需要使用.運算符的語法。
% 矩陣運算
a
a*3
a+a
a*a
a.*a
結(jié)果如下。
a =
1 2
3 4
ans =
3 6
9 12
ans =
2 4
6 8
ans =
7 10
15 22
ans =
1 4
9 16
索引運算
有時候可能需要對數(shù)組或矩陣中某些值進行計算,這時候可以利用索引運算進行。如果嘗試訪問矩陣中不存在的元素,會導(dǎo)致錯誤。不過如果是對不存在的元素賦值,Matlab會自動擴展矩陣,新創(chuàng)建的元素都為0.
a = [1,2,3; 4,5,6; 7,7,8]
>> a(1,1)
ans =
1
>> a(4,4)=2
a =
1 2 3 0
4 5 6 0
7 7 8 0
0 0 0 2
如果需要訪問多行或多列,使用冒號運算符。下面分別獲取了矩陣2-4行與1-3列的元素,以及第三行的所有元素。
>> a(2:4,1:3)
ans =
4 5 6
7 7 8
0 0 0
>> a(3,:)
ans =
7 7 8 0
冒號運算符還可以用于創(chuàng)建等距離矢量,語法是[起始:步長:結(jié)束],其中步長可以省略,默認是1。
m = [0:10:100]
m =
0 10 20 30 40 50 60 70 80 90 100
矩陣計算
Matlab的英文全名即Matrix Laboratory(矩陣實驗室),可見矩陣在Matlab中的重要地位。前面已經(jīng)介紹了一些矩陣的知識,下面繼續(xù)介紹一些矩陣的方法。
首先是矩陣求和,默認情況下對于矩陣執(zhí)行sum函數(shù)會得到各列的和。
m = [1,2,3; 4,5,6; 7,8,9]
m =
1 2 3
4 5 6
7 8 9
% 矩陣求和
sum(m)
ans =
12 15 18
如果希望得到各行的和,需要在sum函數(shù)上指定第二個參數(shù)。
sum(m,2)
ans =
6
15
24
如果要獲取對角線的和,可以使用diag函數(shù)先得到對角線矢量。
diag(m)
ans =
1
5
9
如果要得到反對角線,Matlab沒有提供直接方法。不過我們可以利用fliplr函數(shù)先對矩陣進行左右翻轉(zhuǎn),然后再求對角線。
diag(fliplr(m))
ans =
3
5
7
有一種特殊的矩陣叫做幻方,這種矩陣各行、各列、以及兩條對角線的和都是相同的。Matlab內(nèi)置了函數(shù)magic,可以生成指定維度的幻方。
% 幻方
disp('----------幻方------------')
m = magic(3)
disp('各行的和:')
sum(m,2)
disp('各列的和:')
sum(m)
disp('對角線的和:')
sum(diag(m))
sum(diag(fliplr(m)))
文本和字符
字符串使用單引號包括,如果字符串內(nèi)部也有單引號,使用兩個連續(xù)的單引號。
% 文本和字符
text = 'This is a ''special'' date'
text =
'This is a 'special' date'
如果要查看變量類型的話,可以使用whos命令。
% 查看變量類型
whos text
Name Size Bytes Class Attributes
text 1x24 48 char
連接字符串使用方括號將要連接的字符串括在一起。
% 連接字符串
hello = 'How are you ?'
[text, '. ', hello]
ans =
'This is a 'special' date. How are you ?'
字符和數(shù)字之間也可以互相轉(zhuǎn)換。
% 字符與數(shù)字轉(zhuǎn)換
c = '1'
n = 1
num2str(n)
str2num(c)
編程
條件語句
下面是Matlab中if語句的例子,生成一個隨機數(shù)并判斷在哪個區(qū)間中。
% 條件語句
N = 0.5
n = rand
if n < N
disp('n < .5')
elseif n < .3
disp('n <.3')
else
disp('other')
end
然后是switch語句的例子。
% switch語句
n = 3
switch(n)
case {1,2}
disp('n = 1 or 2')
case {3,4,5}
disp('n is 3,4,5')
otherwise
disp('other case')
end
循環(huán)語句
首先是for循環(huán)。
% for循環(huán)
for i = 1:5
disp(i)
end
然后是while循環(huán)。
% while循環(huán)
n = 1
while n < 10
n = n + 1
end
格式化
format函數(shù)可以控制數(shù)據(jù)如何在Matlab中顯示。
% 格式化
a = [1/3 .1111]
format short
a
format long
a
format bank
a
format short e
a
format rat
a
format hex
a
a =
0.3333 0.1111
a =
0.333333333333333 0.111100000000000
a =
0.33 0.11
a =
3.3333e-01 1.1110e-01
a =
1/3 1111/10000
a =
3fd5555555555555 3fbc710cb295e9e2
每行Matlab代碼在執(zhí)行的時候都會在命令窗口中顯示輸出,在大型程序中會導(dǎo)致代碼輸出很亂。我們可以通過在代碼后面添加分號來提示Matlab不要輸出。
% 取消輸出
longMatrix = [0:1000];
如果代碼太長,可以將代碼分成幾行來編寫,在需要分行的代碼末尾添加三個點號即可。
% 長語句
longStatement = 1+2+3+4 ...
+5+6+7+8+9
繪圖
二維圖
繪制二維圖很簡單,只要提供x和y的數(shù)值即可。下面是繪制-2π到2π的正弦圖像的例子。
% 二維圖
x = [-2*pi:pi/100:2*pi]
y = sin(x)
plot(x,y)
會彈出下圖所示的圖形窗口。

為提高可讀性還可以添加一些注釋。
% 添加注釋
xlabel('x')
ylabel('sin(x)')
title('-2π到2π間的正弦圖像')

每次調(diào)用plot函數(shù)都會重新繪圖,如果想在已有的圖表上畫新圖形,需要使用hold on命令。在調(diào)用hold off命令之前,所有圖表都會添加到已有的圖形上。plot函數(shù)的第三個參數(shù)可以指定畫圖線條的顏色和形狀,顏色使用RGB等字母指定,形狀會使用所給定的字符繪制線條。
% 圖像都畫在一張圖上
hold on
y = cos(x)
plot(x,y,'g--')

三維圖
三維圖形的繪制也是類似的,首先用meshgrid函數(shù)生成一個區(qū)域的點集,然后指定z與xy的關(guān)系。繪制三維圖有兩個函數(shù),surf函數(shù)會用顏色填充三維圖形的面。而mesh函數(shù)只會填充線條。這里為了方便顯示使用subplot函數(shù)繪制子圖,該函數(shù)前兩個參數(shù)指定子圖的行數(shù)和列數(shù),第三個參數(shù)指定要畫的子圖順序。調(diào)用該函數(shù)之后,可以調(diào)用實際繪圖函數(shù)來繪圖。
% -------------三維圖-------------
% 生成x,y點集
[x,y] = meshgrid(-10:.5:10)
% 指定函數(shù)
z = x.^2 + y
% 繪制三維圖
subplot(2,1,1)
surf(x,y,z)
title('surf繪圖')
subplot(2,1,2)
mesh(x,y,z)
title('mesh繪圖')
上面的代碼會顯示類似下面的圖像。

幫助
Matlab有比較完善的中文幫助,按F1即可打開幫助。

如果想了解某個App的功能,可以直接在命令窗口中輸入help appname來獲得相關(guān)函數(shù)信息。
>> help stats
Statistics and Machine Learning Toolbox
Version 11.2 (R2017b) 24-Jul-2017
Distributions.
Parameter estimation.
betafit - Beta parameter estimation.
binofit - Binomial parameter estimation.
distributionFitter - Distribution fitting app.
evfit - Extreme value parameter estimation.
expfit - Exponential parameter estimation.
...
如果希望了解某個函數(shù)的詳細信息,可以用doc 函數(shù)名來查閱文檔,例如doc max就會列出max函數(shù)的詳細文檔。

以上就是Matlab的一點知識了,希望可以讓沒有使用過Matlab的同學(xué)對它有一個大致了解。當(dāng)然這里列出的功能僅僅是Matlab的冰山一角。在安裝Matlab的時候我們可以看到它有非常豐富的組件,每一個組件都包含了專業(yè)領(lǐng)域大量的函數(shù)和功能,只有深入了解之后才會體會到Matlab的強大之處。有興趣的同學(xué)可以深入了解。