此帖是根據期末考試復習重點補充完成,
由於使用word編輯引用圖片和鏈接略有不便,
所以開此貼供復習及學習使用。侵刪
復習要點
第一章
Matlab的基本概念,名稱的來源,基本功能,幫助的使用方法
1.基本概念和名稱來源:MATLAB [1] 是美國MathWorks公司出品的商業數學軟件,
用於算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境,主要包括MATLAB和Simulink兩大部分。
MATLAB是matrix&laboratory兩個詞的組合,意為矩陣工廠(矩陣實驗室)
2.基本功能:
2.1數值計算和符號計算功能
MATLAB以矩陣作為數據操作的基本單位,還提供了十分豐富的數值計算函數。
2.2繪圖功能,matlab提供了兩個層次的繪圖操作。一種是對圖形句柄,進行底層繪圖操作。另一種是建立在低層繪圖操作之上的高層繪圖操作。
2.3編程語言
MATLAB具有程序結構控制、函數調用、數據結構、輸入輸出、面向對象等程序語言特征,而且簡單易學、編程效率高
2.4MATLAB工具箱
MATLAB包含兩部分內容:基本部分和各種可選的工具箱。
MATLAB工具箱分為兩大類:功能性工具箱和學科性工具箱。
3.幫助的使用方法
3.1 幫助命令
MATLAB幫助命令包括help命令和lookfor命令。
3.1.1 help命令
在MATLAB 命令窗口中直接輸入help命令將會顯示當前幫助系統中所包含的所有項目,即搜索路徑中所有的目錄名稱。同樣,可以通過help加函數名來顯示該函數的幫助說明。
3.1.2 lookfor命令
help命令只搜索出那些關鍵字完全匹配的結果,lookfor命令對搜索范圍內的M文件進行關鍵字搜索,條件比較寬松。
lookfor命令只對M文件的第一行進行關鍵字搜索。若在lookfor命令加上-all選項,則可對M文件進行全文搜索。
3.2 幫助窗口
進入幫助窗口可以通過以下3種方法:
3.2.1 單擊MATLAB主窗口工具欄中的Help按鈕。
3.2.2 在命令窗口中輸入helpwin、helpdesk或doc。
3.2.3 選擇Help菜單中的“MATLAB Help”選項。
第二章
1.變量的命名規則(也是函數和文件的命名規則)
2.預定義變量:pi,ans,lasterr等等
Pi 圓周率π
Ans 最新計算結果的默認變量名
3.內存變量的管理:who,whos
直接在command window里面打whos這個命令。就會把workspace里面所有變量的 Name(變量名), Size(維數), Bytes(占用字節數), Class(類別),都列出來。 具體看附圖。
圖轉:https://www.cnblogs.com/ky027wh-sx/p/5956588.html
4.內存變量的保存和恢復:
4.1變量保存
用save可以保存變量。
save data1 表示保存工作空間所有的變量到data1.mat中
save data2 m 表將工作空間的m變量保存到data2.mat中,如果工作空間沒有m會報錯。
save data3 m n p v 表示將工作空間中的 m n p v 四個變量保存到data3.mat中,如果工作空間沒有這四個變量中的一個也會報錯。
4.2變量恢復
Load data3.mat 讀取環境變量,恢復變量。
5.矩陣的建立方法,定界符[ ],分隔符:空格或者逗號分隔同一行元素,分號分或回車隔不同行
Eg:
或
Eg:
6.利用已有矩陣建立大矩陣
6.1橫向拼接
6.2縱向拼接
7.冒號表達式和linspace函數
8.矩陣元素的引用:單元素,多元素(要使用冒號表達式,本質是用矩陣做下標)
Matlab中數組元素引用有三種方法
1
.下標法(subscripts)
2
.索引法(index)
3
.布爾法(Boolean)
A=
8
1
6
3
5
7
4
9
2
大家對下標估計比較熟悉,由於在C語言中接觸過,但是我這里需要強調的是,Matlab的下標是可以多行多列同時引用的,而像C語言等一次只能引用一個,比如
A(
2
:
3
,
3
:-
1
:
1
)表示引用數組中的
2
~
3
行,
3
~
1
列對應的元素
A(:,end)表示引用最后一列元素,“:”表示所有列或行,“end”表示最后一列或列,“end-n”表示倒數第n行或列
A(
1
,end-
1
)表示引用第
1
行倒數第
2
個元素
A([
2
1
3
3
],[
1
1
2
2
1
])表示引用按兩個向量引用指定的元素,即A中的第
2
,
1
,
3
,
3
行和第
1
,
1
,
2
,
2
,
1
列對應的元素
>>A=magic(
3
)
A =
8
1
6
3
5
7
4
9
2
>>A(
2
:
3
,
3
:-
1
:
1
)
ans =
7
5
3
2
9
4
>>A(:,end)
ans =
6
7
2
>>A(
1
,end-
1
)
ans =
1
>>A([
2
1
3
3
],[
1
1
2
2
1
])
ans =
3
3
5
5
3
8
8
1
1
8
4
4
9
9
4
4
4
9
9
4
 A(index):index可以是任意的數組,index的元素必須是正整數,且不大於numel(A),返回的是一個尺寸與index一樣的數組
下標和索引之間可以通過ind2sub和sub2ind函數相互轉換,具體可以看幫助,很簡單
[I,J] = ind2sub(siz,IND)
IND = sub2ind(siz,I,J)
還有使用A(:)就可以將數組A轉換為列向量
A(8):表示引用A的第8個元素
B=A([1 10 5 2 2 1 3]):表示依次引用A的第1,10,5,2,2,1,3個元素,返回與index尺寸相同的數組,也就是說size(B)=size(index)
A([2 5 9;1 1 1;8 5 6]):返回的時侯是一個3*3的矩陣
>>A=magic(
5
)%括號中為索引值
A =
17
(
1
)
24
(
6
)
1
(
11
)
8
(
16
)
15
(
21
)
23
(
2
)
5
(
7
)
7
(
12
)
14
(
17
)
16
(
22
)
4
(
3
)
6
(
8
)
13
(
13
)
20
(
18
)
22
(
23
)
10
(
4
)
12
(
9
)
19
(
14
)
21
(
19
)
3
(
24
)
11
(
5
)
18
(
10
)
25
(
15
)
2
(
20
)
9
(
25
)
>>A(
8
)
ans =
6
>>A([
1
10
5
2
2
1
3
])
ans =
17
18
11
23
23
17
4
>>A([
2
5
9
;
1
1
1
;
8
5
6
])
ans =
23
11
12
17
17
17
6
11
24
8.3布爾法引用
A(X):X是一個有0和1組成布爾型數據,且size(A)=size(X),對應位置為1則留下該數據,0則去掉,最后按A中的存儲順序,返回一個列向量
假如說A是3*3的數組
A(logical([1 0 0;0 1 0;0 0 1])):表示引用了數組A的對角線元素,注意必須使用logical將0/1數組轉換為布爾型
>>A=magic(
3
)%生成一個
3
*
3
的數組
A=
8
1
6
3
5
7
4
9
2
>>x=logical([
1
1
0
;
0
1
1
;
1
0
1
])%將
double
轉化為
boolean
型數據
x =
1
1
0
0
1
1
1
0
1
>>A(x)%引用對應位置為
1
的數據,返回列向量
ans =
8
4
1
5
7
2
>>x=A>
5
%是有了比較語句,返回布爾型數據,對應位置數據大於
5
的為
1
,否則為
0
x =
1
0
1
0
0
1
0
1
0
>>A(x)%返回大於A中大於
5
的元素,其實該命令可以一次性執行A(A>
5
)或者find(A>
5
),前者返回具體元素,后者返回大於
5
的數據的索引值
ans =
8
9
6
7
>>A(A>
5
)%一次性執行上面的命令
ans =
8
9
6
7
>>indx=find(A>
5
)%查找A中對於
5
的元素,返回它們的索引(index)值,此時我們可以通過A(index)返回具體的元素
index =
1
6
7
8
參考 https://blog.csdn.net/love_wanling/article/details/77103708
9.矩陣的運算:
矩陣運算可參考ppt,或通過檢索查找(以下為筆者舉出的兩例,但不僅限):
https://jingyan.baidu.com/article/3c343ff7c867a50d36796360.html
https://jingyan.baidu.com/article/6766299799a99654d51b84a8.html
+-.*./ 同維矩陣對應元素比較
*/矩陣維數必須相容 注意左除和右除,誰在斜線下方誰求逆
1/1
10.運算優先級
優先級從高到低:
1. 圓括號()
2. 轉置(.')、共軛轉置(’)、乘方(.^)、矩陣乘方(^)
3. 一元加法(+)、一元減法(-)、取反(~)
4. 乘法(.*)、矩陣乘法(*)、右除(./)、 左除(.\)、 矩陣右除(/)、矩陣 左除(\)
5. 加法(+)、減法(-)、邏輯非(~)
6. 冒號運算符(:)
7. 小於、小於等於、大於、大於等於、等於、不等於
8. 逐邏輯運算與(&)
9. 逐邏輯運算或(|)
10. "避繞式"邏輯與(&&)
11. "避繞式"邏輯與(||)
11.常用函數length,sum,find
11.1size
獲取數組的行數和列數
11.2length
數組長度,即行數和列數中的較大值,相當於max(size(a))
11.3numel
返回元素總數
11.4 sum
a=sum(x);%列求和
a=sum(x,2);%行求和
a=sum(x(:));%矩陣求和
11.5 find
11.5.1 b=find(a),a是一個矩陣,查詢非零元素的位置,如果X是一個行向量,則返回一個行向量,
否則,返回一個列向量。如果X全是零元素或者是空數組,
則返回一個空數組,例子如下所示,也可以用b=find(a>2),這句的意思是在a中找到比較2大的元素
11.5.2:
b=find(a,2),找出a中最先出現的2個不為零的數,a是你所要找的矩陣,2參數是指數量所下圖
11.5.3 c=find(a,2,'last') 這句的意思是從最后一個非零元素起,找2個不為零的元素
其他等find函數用法,本貼不再介紹。具體可以參考https://jingyan.baidu.com/article/3c343ff71444890d3679635d.html
12. 4個取整函數的區別要會使用
12.1 Fix() (向零方向取整)
12.2 Round()(四舍五入,向最大的方向取整)
12.3 Floor() (向負無窮小取整)
12.4 Ceil (向正無窮大取整)
13. 關系運算和運算符,注意和c語言的區別(不等於~=而非!=),另外,MATLAB中關系或邏輯運算的參與方有矩陣時,表現為矩陣中對應元素比較或者矩陣中每個元素與標量比較,其運算結果為矩陣
邏輯運算的的運算符,注意和c語言的區別(取反為~),當矩陣參與到邏輯運算時,只有矩陣元素全為一才為真
第三章
3.1特殊矩陣:zeros,ones,eye,rand,randn,注意怎樣生成任意區間的均勻分布和指定均值和方差的正態分布,小心正態分布的方差是個平方值,在公式中使用時要開方才能作為參數。
3.1 通用的特殊矩陣常用的產生通用特殊矩陣的函數有:
zeros:產生全0矩陣(零矩陣)。
ones:產生全1矩陣(幺矩陣)。
eye:產生單位矩陣。
rand:產生0~1間均勻分布的隨機矩陣。
randn:產生均值為0,方差為1的標准正態分布隨機矩陣。
例3.1.1 分別建立×3、3×2和與矩陣A同樣大小的零矩陣。
(1) 建立一個3×3零矩陣。
zeros(3)
(2) 建立一個3×2零矩陣。
zeros(3,2)
(3) 設A為2×3矩陣,則可以用zeros(size(A))建立一個與矩陣A同樣大小零矩陣。
A=[1 2 3;4 5 6]; %產生一個2×3階矩陣A
zeros(size(A)) %產生一個與矩陣A同樣大小的零矩陣
例3.1.2 建立隨機矩陣:
(1) 在區間[20,50]內均勻分布的5階隨機矩陣。
(2) 均值為0.6、方差為0.1的5階正態分布隨機矩陣。
命令如下:
x=20+(50-20)*rand(5)
y=0.6+sqrt(0.1)*randn(5)
此外,常用的函數還有reshape(A,m,n),它在矩陣總元素保持不變的前提下,將矩陣A重新排成m×n的二維矩陣。
3.2 專門矩陣:幻方陣,范德蒙陣,希爾伯特陣,伴隨陣,帕斯卡陣等
3.2.1 魔方矩陣
魔方矩陣有一個有趣的性質,其每行、每列及兩條對角線上的元素和都相等。對於n階魔方陣,其元素由1,2,3,…,n2共n2個整數組成。MATLAB提供了求魔方矩陣的函數magic(n),其功能是生成一個n階魔方陣。
例3.2.1 將101~125等25個數填入一個5行5列的表格中,使其每行每列及對角線的和均為565。
M=100+magic(5)
3.2.2 范得蒙矩陣
范得蒙(Vandermonde)矩陣最后一列全為1,倒數第二列為一個指定的向量,其他各列是其后列與倒數第二列的點乘積。可以用一個指定向量生成一個范得蒙矩陣。在MATLAB中,函數vander(V)生成以向量V為基礎向量的范得蒙矩陣。例如,A=vander([1;2;3;5])即可得到上述范得蒙矩陣。
3.2.3 希爾伯特矩陣
在MATLAB中,生成希爾伯特矩陣的函數是hilb(n)。
使用一般方法求逆會因為原始數據的微小擾動而產生不可靠的計算結果。MATLAB中,有一個專門求希爾伯特矩陣的逆的函數invhilb(n),其功能是求n階的希爾伯特矩陣的逆矩陣。
例3.2.3 求4階希爾伯特矩陣及其逆矩陣。
命令如下:
format rat %以有理形式輸出
H=hilb(4)
H=invhilb(4)
3.2.4 托普利茲矩陣
托普利茲(Toeplitz)矩陣除第一行第一列外,其他每個元素都與左上角的元素相同。生成托普利茲矩陣的函數是toeplitz(x,y),它生成一個以x為第一列,y為第一行的托普利茲矩陣。這里x, y均為向量,兩者不必等長。toeplitz(x)用向量x生成一個對稱的托普利茲矩陣。
3.2.4例
T=toeplitz(1:6)
3.2.5伴隨矩陣
MATLAB生成伴隨矩陣的函數是compan(p),其中p是一個多項式的系數向量,高次冪系數排在前,低次冪排在后。例如,為了求多項式的x3-7x+6的伴隨矩陣,可使用命令:
p=[1,0,-7,6];
compan(p)
3.2.6帕斯卡矩陣
我們知道,二次項(x+y)n展開后的系數隨n的增大組成一個三角形表,稱為楊輝三角形。由楊輝三角形表組成的矩陣稱為帕斯卡(Pascal)矩陣。
函數pascal(n)生成一個n階帕斯卡矩陣。
例3.2.6 求(x+y)5的展開式。
在MATLAB命令窗口,輸入命令:
pascal(6)
矩陣次對角線上的元素1,5,10,10,5,1即為展開式的系數。
3.3三角陣的生成和從已知矩陣中提取三角陣和對角陣
1.對角陣
只有對角線上有非0元素的矩陣稱為對角矩陣,對角線上的元素相等的對角矩陣稱為數量矩陣,對角線上的元素都為1的對角矩陣稱為單位矩陣。
(1) 提取矩陣的對角線元素
設A為m×n矩陣,diag(A)函數用於提取矩陣A主對角線元素,產生一個具有min(m,n)個元素的列向量。
diag(A)函數還有一種形式diag(A,k),其功能是提取第k條對角線的元素。
(2) 構造對角矩陣
設V為具有m個元素的向量,diag(V)將產生一個m×m對角矩陣,其主對角線元素即為向量V的元素。
diag(V)函數也有另一種形式diag(V,k),其功能是產生一個n×n(n=m+|k|)對角陣,其第k條對角線的元素即為向量V的元素。
2.三角陣
三角陣又進一步分為上三角陣和下三角陣,所謂上三角陣,即矩陣的對角線以下的元素全為0的一種矩陣,而下三角陣則是對角線以上的元素全為0的一種矩陣。
(1) 上三角矩陣
求矩陣A的上三角陣的MATLAB函數是triu(A)。
triu(A)函數也有另一種形式triu(A,k),其功能是求矩陣A的第k條對角線以上的元素。例如,提取矩陣A的第2條對角線以上的元素,形成新的矩陣B。
(2) 下三角矩陣
在MATLAB中,提取矩陣A的下三角矩陣的函數是tril(A)和tril(A,k),其用法與提取上三角矩陣的函數triu(A)和triu(A,k)完全相同。
3.4矩陣的旋轉,轉置是旋轉的特例
1.矩陣的轉置
轉置運算符是單撇號(’)。
2.矩陣的旋轉
利用函數rot90(A,k)將矩陣A旋轉90º的k倍,當k為1時可省略。
3.矩陣的左右翻轉
對矩陣實施左右翻轉是將原矩陣的第一列和最后一列調換,第二列和倒數第二列調換,…,
依次類推。MATLAB對矩陣A實施左右翻轉的函數是fliplr(A)。
4.矩陣的上下翻轉
MATLAB對矩陣A實施上下翻轉的函數是flipud(A)。
3.5矩陣求逆及其應用(解方程組)
3.5.1 矩陣的逆與偽逆
對於一個方陣A,如果存在一個與其同階的方陣B,使得:
A·B=B·A=I (I為單位矩陣)
則稱B為A的逆矩陣,當然,A也是B的逆矩陣。
求一個矩陣的逆是一件非常煩瑣的工作,容易出錯,但在MATLAB中,求一個矩陣的逆非常容易。求方陣A的逆矩陣可調用函數inv(A)。
在線性方程組Ax=b兩邊各左乘A-1,有
A-1Ax=A-1b
由於A-1A=I,故得
x=A-1b
例 用求逆矩陣的方法解線性方程組。
命令如下:
A=[1,2,3;1,4,9;1,8,27];
b=[5,-2,6]';
x=inv(A)*b
也可以運用左除運算符“\”求解線性代數方程組
3.6 矩陣的秩與跡
1.矩陣的秩
矩陣線性無關的行數與列數稱為矩陣的秩。在MATLAB中,求矩陣秩的函數是rank(A)。
2.矩陣的跡
矩陣的跡等於矩陣的對角線元素之和,也等於矩陣的特征值之和。在MATLAB中,求矩陣的跡的函數是trace(A)。
3.7矩陣的特征值和特征向量及其應用(求解高階方程)
在MATLAB中,計算矩陣A的特征值和特征向量的函數是eig(A),常用的調用格式有3種:
(1) E=eig(A):求矩陣A的全部特征值,構成向量E。
第四章
4.1M文件的分類和區別
用MATLAB語言編寫的程序,稱為M文件。
M文件可以根據調用方式的不同分為兩類:
命令文件(Script File)和函數文件(Function File)。
例4.1 建立一個命令文件將變量a,b的值互換,然后運行該命令文件。
程序1:
首先建立命令文件並以文件名exch.m存盤:
clear;
a=1:10;
b=[11,12,13,14;15,16,17,18];
c=a;a=b;b=c;
a
b
然后在MATLAB的命令窗口中輸入exch,將會執行該命令文件。
程序2:
首先建立函數文件fexch.m:
function [a,b]=exch(a,b)
c=a;a=b;b=c;
然后在MATLAB的命令窗口調用該函數文件:
clear;
x=1:10;
y=[11,12,13,14;15,16,17,18];
[x,y]=fexch(x,y)
4.2輸入輸出語句
如果在input函數調用時采用's'選項,則允許用戶輸入一個字符串。例如,想輸入一個人的姓名,可采用命令:
xm=input('What''s your name?','s');
MATLAB提供的命令窗口輸出函數主要有disp函數,其調用格式為
disp(輸出項)
4.3控制不輸出和注釋
注釋%%
4.4選擇結構:單分支,多分支,注意end的使用,switch中case語句里面如果使用多個數做一個條件應將其寫成{n1,n2,n3……,n5}的形式,如果用冒號表達式生產n1~n5,需要用num2cell進行轉換,不能用case {n1:n5}的形式,應該是:case num2cell(n1:n5)
4.4.1if語句
在MATLAB中,if語句有3種格式。
(1) 單分支if語句:
if 條件
語句組
end
(2) 雙分支if語句:
if 條件
語句組1
else
語句組2
end
當條件成立時,執行語句組1,否則執行語句組2,語句組1或語句組2執行后,再執行if語句的后繼語句。
例如:x=input('請輸入x的值:');
if x==10
y=cos(x+1)+sqrt(x*x+1);
else
y=x*sqrt(x+sqrt(x));
end
y
注意條件的邊界
商品打折,百分五分轉換
分段函數的兩種構造:一種利用邏輯表達式和點運算構造,一種利用矩陣增長實現
Try catch條件語句的應用
循環結構,注意for常用冒號表達式做循環條件控制
For循環和向量點運算的區別和聯系
While循環和break continue語句
函數的定義
形參實參怎樣傳遞數據,怎樣返回值,怎樣返回多個值,輸入參數的數量和輸出參數的數量nargin,nargout
全局變量的使用
第五章
基本繪圖plot(x,y)
用plot繪制多個圖
矩陣繪圖
用多條plot語句繪圖,要使用hold on使多個圖同時出現在畫面上
Plotyy,在同一坐標繪制雙圖,其優勢,顏色,線性,坐標軸,
繪圖選項,圖注和坐標控制
Loglog,bar,stem,stairs
所有的實驗