個人學習筆記_matlab基礎教程
MATLAB 基礎教程筆記
本筆記基於視訊:
https://www.bilibili.com/video/BV13D4y1Q7RS?p=9&share_source=copy_web
0零基礎入門matlab教程基礎版,聽懂人話就能學會!畢業設計/研究生/神經網路工具箱/機器學習/數學建模matlab
由於基本是自用的學習筆記, 可能有部分內容難以閱讀, 如有錯誤望指正
matlab基礎入門是非常不錯的
基本知識
安裝MATLAB時, 安裝的版本意思為年份 + a/b, a 表明此版本是上半年發行的, 同理, b表示下半年
左側是專案檔案顯示, 一開始開啟MATLAB的時候, 程式中間只有一個命令列視窗
但是如果僅僅使用命令列, 就比較難看(並且非常非常不好使, 老師一點都沒教, 平常上課的時候也是直接用命令列做演示, 我怎麼感覺他有一種等到最後看笑話的感覺)
新使用的最好是指令碼檔案型別, 點選主頁->新建->指令碼
之後在裡邊編輯程式碼進行執行就行
變數規則
-
變數名區分大小寫
-
變數名稱長度不超過63位
-
變數名以字母開頭, 可以由字母、數字和下劃線組成, 但不能使用標點
-
變數名應當簡潔明瞭, 通過變數名可以直觀的看出變數所表示的物理意義
MATLAB資料型別
清空所有環境變數及其命令
clear all 清空工作區中的所有變數
clc 清空命令列區域所有內容
變數名中不能使用標點(還有人使用標點? 錘死)
資料型別
-
數字
-
字元與字串
字串用單引號表示
s = ‘a’
abs(s)
輸出結果為97, 表示ASCII碼
char(97)
表示輸出ASCII碼為97的字元
num2str(65)
C語言裡的常用函數了(或者是C++?老久沒用了)
將數字轉換為字串
length(str)
依然是常用函式, 獲取字串長度
- 矩陣
矩陣定義:
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)
表示建立一個全零矩陣
其中引數代表:
-
第一個引數10 表示矩陣有10行
-
第二個引數5 表示矩陣有5列
-
第三個引數3 表示這個矩陣是”三維”的,多少微就代表這個矩陣組中有多少個矩陣
同樣, 使用函式ones可以建立全一矩陣
MATLAB中的矩陣隨機函式;
rand、randi和randn的區別
- rand生成均勻分佈的偽隨機數. 分佈在(0~1)之間
主要使用語法:
rand(m,n)
生成m行n列的均勻分佈的偽隨機數,
rand(m,n,’double’)
生成指定精度的均勻分佈的偽隨機數, 引數可以是single;
rand(RandStream, m, n)
利用指定的RandStrean(隨機種子)生成偽隨機數
- randn生成標準正態分佈的偽隨機數(均值為0, 方差為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
其中這三句的區別在於:
-
獲取name這個屬性, 如果name是一個數組, 也輸出陣列中的內容
-
獲取name這個屬性的(在已經確認這個屬性是一個數組的情況下), 那麼獲取到的是一個cell型別的資料
-
獲取到的是一個字串型別的資料
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
: 將三維影象的顯示模式修改一下, 看起來不那麼扁