1. 程式人生 > 其它 >個人學習筆記_matlab基礎教程

個人學習筆記_matlab基礎教程

MATLAB 基礎教程筆記

本筆記基於視訊:

https://www.bilibili.com/video/BV13D4y1Q7RS?p=9&share_source=copy_web

0零基礎入門matlab教程基礎版,聽懂人話就能學會!畢業設計/研究生/神經網路工具箱/機器學習/數學建模matlab

由於基本是自用的學習筆記, 可能有部分內容難以閱讀, 如有錯誤望指正

matlab基礎入門是非常不錯的

基本知識

安裝MATLAB時, 安裝的版本意思為年份 + a/b, a 表明此版本是上半年發行的, 同理, b表示下半年

左側是專案檔案顯示, 一開始開啟MATLAB的時候, 程式中間只有一個命令列視窗

但是如果僅僅使用命令列, 就比較難看(並且非常非常不好使, 老師一點都沒教, 平常上課的時候也是直接用命令列做演示, 我怎麼感覺他有一種等到最後看笑話的感覺)

新使用的最好是指令碼檔案型別, 點選主頁->新建->指令碼

之後在裡邊編輯程式碼進行執行就行

變數規則

  1. 變數名區分大小寫

  2. 變數名稱長度不超過63位

  3. 變數名以字母開頭, 可以由字母、數字和下劃線組成, 但不能使用標點

  4. 變數名應當簡潔明瞭, 通過變數名可以直觀的看出變數所表示的物理意義

MATLAB資料型別

清空所有環境變數及其命令

clear all 清空工作區中的所有變數

clc 清空命令列區域所有內容

變數名中不能使用標點(還有人使用標點? 錘死)

資料型別

  1. 數字

  2. 字元與字串

字串用單引號表示

s = ‘a’
abs(s)

輸出結果為97, 表示ASCII碼

char(97)

表示輸出ASCII碼為97的字元

num2str(65)

C語言裡的常用函數了(或者是C++?老久沒用了)

將數字轉換為字串

length(str)

​ 依然是常用函式, 獲取字串長度

  1. 矩陣

矩陣定義:

A = [1 2 3; 4 5 6; 7 8 9]

​ 表示建立一個三行三列的矩陣

B = A’

​ 表示B矩陣是A矩陣的轉置矩陣

C = A(:)

​ 表示將A矩陣按列拉伸(這個可以理解為按列讀取以後塞到C中, 在C中表現的形式是1列, 注意是列而不是行)

​ 打個比方, 比如有一個矩陣表示如下:

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

​ 上面這個矩陣, 經過這個函式就會變成:

[1]
[4]
[7]
[2]
[5]
[8]
[3]
[6]
[9]

並不是橫著排列的,而是豎著的,

按照一列一列讀取變成單列矩陣,

使用過畫素操作圖片進行測試時會比較明顯的發現,

遍歷並清除一半的畫素(每個色域矩陣都這樣處理),

最終得到的是隻剩下右半邊影象的圖片,

原理便是因為這個轉化為列;

D = inv(A)

表示求冪操作, 從數學角度來看, 需要輸入的資料是一個方陣才能解決

E = zeros(10,5,3)

表示建立一個全零矩陣

其中引數代表:

  1. 第一個引數10 表示矩陣有10行

  2. 第二個引數5 表示矩陣有5列

  3. 第三個引數3 表示這個矩陣是”三維”的,多少微就代表這個矩陣組中有多少個矩陣

同樣, 使用函式ones可以建立全一矩陣

MATLAB中的矩陣隨機函式;

rand、randi和randn的區別

  1. rand生成均勻分佈的偽隨機數. 分佈在(0~1)之間

主要使用語法:

rand(m,n) 生成m行n列的均勻分佈的偽隨機數,

rand(m,n,’double’) 生成指定精度的均勻分佈的偽隨機數, 引數可以是single;

rand(RandStream, m, n) 利用指定的RandStrean(隨機種子)生成偽隨機數

  1. randn生成標準正態分佈的偽隨機數(均值為0, 方差為1)

主要使用語法與第一個相同

  1. randi生成均勻分佈的偽隨機數

主要使用語法:

randi(iMax) 在開區間(0,iMax) 生成均勻分佈的偽隨機整數

randi(iMax, m, n) 在開區間(0, iMax)生成m行n列隨機內容矩陣

randi([iMin,iMax], m, n) 在開區間(iMin, iMax)生成m行n列隨機矩陣

元胞陣列

這是一種資料型別, 是陣列的一種, 內部元素可以屬於不同的資料型別

就和Python中的元組一樣, 可以隨便塞變數進去

元胞陣列

A = cell (1 , 6)

此程式碼生成一個元胞陣列, 其中引數表示行數列數

表示生成1行六列的元胞陣列

在以上句子上, 銜接以下程式碼:

A{2} = eye(3)

eye表示生成一個3*3單位矩陣, 然後賦值到元胞陣列的第二個位置

在MATLAB中, 下標索引是從1開始的, 而不是其他程式語言一樣的從0開始

A{5} = magic(5)

magic表示生成一個幻方, 幻方的意思就是一個完整的像數獨一樣的序列

在巨集觀輸出顯示時, 不會顯示元胞陣列中的矩陣的具體資訊, 只會說明一下這東西是矩陣,多大, 類似的資訊

結構體

相當於python語言中的字典

使用程式碼為:

books = struct(‘name’, {{‘Machine Learning’, ‘Data Mining’}}, ‘price’,[30 40])

books.name 	%獲取屬性

books.name      	%1

books.name(1)     	%2

books.name{1}           %3

其中這三句的區別在於:

  1. 獲取name這個屬性, 如果name是一個數組, 也輸出陣列中的內容

  2. 獲取name這個屬性的(在已經確認這個屬性是一個數組的情況下), 那麼獲取到的是一個cell型別的資料

  3. 獲取到的是一個字串型別的資料

MATLAB 矩陣操作

矩陣的定義與構造

A = [1 2 3 4 5 6 7 8]

若有多行, 使用分號進行間隔

B = 1:2:9

其中, 1表示開始的數值, 9表示結束的數值, 中間的值表示遞增的值, 不能夠預設

C = repmat(B,3,1)

其中1表示,在行內進行重複,

3表示在列內進行重複

或者更好的理解方式是: 對於函式使用: repmat(B,3,3)建立一個矩陣

這個矩陣的內容為:

[B B B]
[B B B]
[B B B]

然後再把B中的內容替換進去

D = ones(2,4)

​ 表示生成一個2行4列的全1矩陣

矩陣的四則運算

比如說有如下兩個矩陣

A = [1 2 3 4; 5 6 7 8]
B = [1 1 2 2; 3 3 1 1]

A + B:表示對應項相加

A – B: 表示對應項相減

A * B’: 矩陣乘法, 行數與列數相同才能進行轉置

A .* B: 表示兩個矩陣對應項相乘

A / B: 表示A乘以B的逆矩陣(inv(B))

A ./ B: 表示對應項相除

矩陣的下標
A = magic(5)
B = A(2,3)

表示取出第2行第3列的資料

C = A(3,:)

冒號表示取出全部

這裡表示取出第三行所有資料

D = A(:,4)

表示取出第4列內容

[m,n] = find(A > 20)

表示找出A矩陣中大於20的東西, 然後就將其索引值找出來

那麼最後通過mn取到的對應位置資料就能夠找到我們需要的資料

MATLAB 邏輯與流程控制

判斷結構

if……end

if 條件表示式

	……語句體……

end

if…else…end

if表示式

	語句體1

else

	語句體2

end

switch … case … end

switch 表示式(數值或者字串)

	case 數值或者字串1

		語句體1;

	………

	otherwise

		語句體

end

迴圈結構

for迴圈結構

for 迴圈變數 = 初值:步長:終值

	執行語句1

	……

	執行語句n

end

while 迴圈

while 條件表示式

	執行語句1

	……

	執行語句n

end

MATLAB繪圖

二維平面繪製

figure 表示新建立一個幕布

plot(x,y) 在x,y位置繪製一個點

​ 其實這裡的x,y表示的都是陣列, 所以這裡的繪製就是繪製多個線條

title(字串) 表示這個圖表的名稱

xlabel 表示x軸資訊(在座標軸位置顯示標籤), 也就是X軸的標題

ylabel 表示y軸資訊(在座標軸位置顯示標籤), 也就是Y軸的標題

xlim([x1 x2]) 表示將顯示的影象中x的範圍限制在x1到x2內

plotyy(x,y1,x,y2) plotyy函式表示繪製的影象, 在X相同的情況下, 繪製多個y值, 也就是說, x座標是公用的, 但是這個函式實際上不推薦使用, 因為這個函式本身存在相容性問題, 並且 plot(x1,y1,x2,y2)也能夠繪製相同的線條

一般簡單繪製自定義點或者線條的格式如下:

plot(x, y, ‘自定義圖形引數字元’)

其中所使用的引數字元如下:

自定義圖形顏色:

顏色 字元 顏色 字元
r 粉紅 m
g c
b w
y k

線型選項

線型 符號
實線 -
虛線 --
冒號線 :
點畫線 -.

資料標記點選項引數

符號 點型別 符號 點型別
. ^ 上三角
+ 十字號 v 下三角
o 圓圈 < 左三角
* 星號 > 右三角
x 叉號 p 五角星
s 正方形 h 六角星(太陽)
d 菱形

除了在建立影象時直接使用引數

線上條繪製之後, 依然可以修改線條的格式

此使用方式參照

https://blog.csdn.net/shulianghan/article/details/115826548

【MATLAB】基本繪圖 ( 修改物件屬性 | 修改座標軸屬性 | 修改座標軸範圍 | 修改文字大小 | 修改刻度 | 修改線屬性 )

採用修改控制代碼屬性的方式

使用物件儲存plot函式以及更多函式生成的控制代碼值

然後使用

set(控制代碼值, ’對應屬性名(字串)’, 屬性將要修改成的資料)

三維立體繪圖

使用函式:

plat3(x, y, z)

使用基本和二維相同

zlabel('z軸座標名')

hold on: 當前軸及影象保持不重新整理, 並繼續接受此後繪製的影象, 多圖共存

hold off: 當前軸及影象不在具備保持的性質, 新圖出現時, 取消原圖

​ 兩者區別就是, 前者畫出來的多副圖可以共存, 也就是疊加存在

​ 後者在原先的幕布上畫圖時, 會將原先繪製的內容清除, 也就是替換圖片

grid on: 開啟網格線

grid off: 隱藏網格線

axis square: 將三維影象的顯示模式修改一下, 看起來不那麼扁