Matlab

2018-02-24 15:18 更新

X分鐘速成Y

其中 Y=Matlab

MATLAB 是 MATrix LABoratory (矩陣實(shí)驗(yàn)室)的縮寫(xiě),它是一種功能強(qiáng)大的數(shù)值計(jì)算語(yǔ)言,在工程和數(shù)學(xué)領(lǐng)域中應(yīng)用廣泛。

如果您有任何需要反饋或交流的內(nèi)容,請(qǐng)聯(lián)系本教程作者@the_ozzinator、osvaldo.t.mendoza@gmail.com。

% 以百分號(hào)作為注釋符

%{
多行注釋
可以
這樣
表示
%}

% 指令可以隨意跨行,但需要在跨行處用 '...' 標(biāo)明:
 a = 1 + 2 + ...
 + 4

% 可以在MATLAB中直接向操作系統(tǒng)發(fā)出指令
!ping google.com

who  % 顯示內(nèi)存中的所有變量
whos  % 顯示內(nèi)存中的所有變量以及它們的類(lèi)型
clear  % 清除內(nèi)存中的所有變量
clear('A')  % 清除指定的變量
openvar('A')  % 在變量編輯器中編輯指定變量

clc  % 清除命令窗口中顯示的所有指令
diary  % 將命令窗口中的內(nèi)容寫(xiě)入本地文件
ctrl-c  % 終止當(dāng)前計(jì)算

edit('myfunction.m')  % 在編輯器中打開(kāi)指定函數(shù)或腳本
type('myfunction.m')  % 在命令窗口中打印指定函數(shù)或腳本的源碼

profile on  % 打開(kāi) profile 代碼分析工具
profile of  % 關(guān)閉 profile 代碼分析工具
profile viewer  % 查看 profile 代碼分析工具的分析結(jié)果

help command    % 在命令窗口中顯示指定命令的幫助文檔
doc command     % 在幫助窗口中顯示指定命令的幫助文檔
lookfor command  % 在所有 MATLAB 內(nèi)置函數(shù)的頭部注釋塊的第一行中搜索指定命令
lookfor command -all  % 在所有 MATLAB 內(nèi)置函數(shù)的整個(gè)頭部注釋塊中搜索指定命令

% 輸出格式
format short    % 浮點(diǎn)數(shù)保留 4 位小數(shù)
format long     % 浮點(diǎn)數(shù)保留 15 位小數(shù)
format bank     % 金融格式,浮點(diǎn)數(shù)只保留 2 位小數(shù)
fprintf('text') % 在命令窗口中顯示 "text"
disp('text')    % 在命令窗口中顯示 "text"

% 變量與表達(dá)式
myVariable = 4  % 命令窗口中將新創(chuàng)建的變量
myVariable = 4; % 加上分號(hào)可使命令窗口中不顯示當(dāng)前語(yǔ)句執(zhí)行結(jié)果
4 + 6       % ans = 10 
8 * myVariable  % ans = 32 
2 ^ 3       % ans = 8 
a = 2; b = 3; 
c = exp(a)*sin(pi/2) % c = 7.3891

% 調(diào)用函數(shù)有兩種方式:
% 標(biāo)準(zhǔn)函數(shù)語(yǔ)法:
load('myFile.mat', 'y') % 參數(shù)放在括號(hào)內(nèi),以英文逗號(hào)分隔
% 指令語(yǔ)法:
load myFile.mat y   % 不加括號(hào),以空格分隔參數(shù)
% 注意在指令語(yǔ)法中參數(shù)不需要加引號(hào):在這種語(yǔ)法下,所有輸入?yún)?shù)都只能是文本文字,
% 不能是變量的具體值,同樣也不能是輸出變量
[V,D] = eig(A);  % 這條函數(shù)調(diào)用無(wú)法轉(zhuǎn)換成等價(jià)的指令語(yǔ)法
[~,D] = eig(A);  % 如果結(jié)果中只需要 D 而不需要 V 則可以這樣寫(xiě)

% 邏輯運(yùn)算
1 > 5  % 假,ans = 0
10 >= 10  % 真,ans = 1
3 ~= 4  % 不等于 -> ans = 1
3 == 3  % 等于 -> ans = 1
3 > 1 && 4 > 1  % 與 -> ans = 1
3 > 1 || 4 > 1  % 或 -> ans = 1
~1  % 非 -> ans = 0

% 邏輯運(yùn)算可直接應(yīng)用于矩陣,運(yùn)算結(jié)果也是矩陣
A > 5
% 對(duì)矩陣中每個(gè)元素做邏輯運(yùn)算,若為真,則在運(yùn)算結(jié)果的矩陣中對(duì)應(yīng)位置的元素就是 1
A( A > 5 )
% 如此返回的向量,其元素就是 A 矩陣中所有邏輯運(yùn)算為真的元素

% 字符串
a = 'MyString'
length(a)  % ans = 8
a(2)  % ans = y
[a,a]  % ans = MyStringMyString
b = '字符串'  % MATLAB目前已經(jīng)可以支持包括中文在內(nèi)的多種文字
length(b)  % ans = 3
b(2)  % ans = 符
[b,b]  % ans = 字符串字符串

% 元組(cell 數(shù)組)
a = {'one', 'two', 'three'} 
a(1)  % ans = 'one' - 返回一個(gè)元組
char(a(1))  % ans = one - 返回一個(gè)字符串

% 結(jié)構(gòu)體
A.b = {'one','two'};
A.c = [1 2];
A.d.e = false;

% 向量
x = [4 32 53 7 1] 
x(2)  % ans = 32,MATLAB中向量的下標(biāo)索引從1開(kāi)始,不是0
x(2:3)  % ans = 32 53
x(2:end)  % ans = 32 53 7 1

x = [4; 32; 53; 7; 1]  % 列向量

x = [1:10]  % x = 1 2 3 4 5 6 7 8 9 10

% 矩陣
A = [1 2 3; 4 5 6; 7 8 9] 
% 以分號(hào)分隔不同的行,以空格或逗號(hào)分隔同一行中的不同元素
% A =

%     1     2     3
%     4     5     6
%     7     8     9

A(2,3) % ans = 6,A(row, column)
A(6) % ans = 8 
% (隱式地將 A 的三列首尾相接組成一個(gè)列向量,然后取其下標(biāo)為 6 的元素)

A(2,3) = 42  % 將第 2 行第 3 列的元素設(shè)為 42
% A =

%     1     2     3
%     4     5     42
%     7     8     9

A(2:3,2:3)  % 取原矩陣中的一塊作為新矩陣
%ans =

%     5     42
%     8     9

A(:,1)  % 第 1 列的所有元素
%ans =

%     1
%     4
%     7

A(1,:)  % 第 1 行的所有元素
%ans =

%     1     2     3

[A ; A]  % 將兩個(gè)矩陣上下相接構(gòu)成新矩陣
%ans =

%     1     2     3
%     4     5    42
%     7     8     9
%     1     2     3
%     4     5    42
%     7     8     9

% 等價(jià)于 
vertcat(A, A);

[A , A]  % 將兩個(gè)矩陣左右相接構(gòu)成新矩陣

%ans =

%     1     2     3     1     2     3
%     4     5    42     4     5    42
%     7     8     9     7     8     9

% 等價(jià)于
horzcat(A, A);

A(:, [3 1 2])  % 重新排布原矩陣的各列
%ans =

%     3     1     2
%    42     4     5
%     9     7     8

size(A)  % 返回矩陣的行數(shù)和列數(shù),ans = 3 3

A(1, :) =[]  % 刪除矩陣的第 1 行
A(:, 1) =[]  % 刪除矩陣的第 1 列

transpose(A)  % 矩陣轉(zhuǎn)置,等價(jià)于 A'
ctranspose(A)  % 矩陣的共軛轉(zhuǎn)置(對(duì)矩陣中的每個(gè)元素取共軛復(fù)數(shù))

% 元素運(yùn)算 vs. 矩陣運(yùn)算
% 單獨(dú)運(yùn)算符就是對(duì)矩陣整體進(jìn)行矩陣運(yùn)算
% 在運(yùn)算符加上英文句點(diǎn)就是對(duì)矩陣中的元素進(jìn)行元素計(jì)算
% 示例如下:
A * B  % 矩陣乘法,要求 A 的列數(shù)等于 B 的行數(shù)
A .* B  % 元素乘法,要求 A 和 B 形狀一致(A 的行數(shù)等于 B 的行數(shù), A 的列數(shù)等于 B 的列數(shù))
% 元素乘法的結(jié)果是與 A 和 B 形狀一致的矩陣,其每個(gè)元素等于 A 對(duì)應(yīng)位置的元素乘 B 對(duì)應(yīng)位置的元素

% 以下函數(shù)中,函數(shù)名以 m 結(jié)尾的執(zhí)行矩陣運(yùn)算,其余執(zhí)行元素運(yùn)算: 
exp(A)  % 對(duì)矩陣中每個(gè)元素做指數(shù)運(yùn)算
expm(A)  % 對(duì)矩陣整體做指數(shù)運(yùn)算
sqrt(A)  % 對(duì)矩陣中每個(gè)元素做開(kāi)方運(yùn)算
sqrtm(A)  % 對(duì)矩陣整體做開(kāi)放運(yùn)算(即試圖求出一個(gè)矩陣,該矩陣與自身的乘積等于 A 矩陣)

% 繪圖
x = 0:.10:2*pi;  % 生成一向量,其元素從 0 開(kāi)始,以 0.1 的間隔一直遞增到 2*pi(pi 就是圓周率)
y = sin(x);
plot(x,y)
xlabel('x axis')
ylabel('y axis')
title('Plot of y = sin(x)')
axis([0 2*pi -1 1])  % x 軸范圍是從 0 到 2*pi,y 軸范圍是從 -1 到 1

plot(x,y1,'-',x,y2,'--',x,y3,':')  % 在同一張圖中繪制多條曲線
legend('Line 1 label', 'Line 2 label')  % 為圖片加注圖例
% 圖例數(shù)量應(yīng)當(dāng)小于或等于實(shí)際繪制的曲線數(shù)目,從 plot 繪制的第一條曲線開(kāi)始對(duì)應(yīng)

% 在同一張圖上繪制多條曲線的另一種方法:
% 使用 hold on,令系統(tǒng)保留前次繪圖結(jié)果并在其上直接疊加新的曲線,
% 如果沒(méi)有 hold on,則每個(gè) plot 都會(huì)首先清除之前的繪圖結(jié)果再進(jìn)行繪制。
% 在 hold on 和 hold off 中可以放置任意多的 plot 指令,
% 它們和 hold on 前最后一個(gè) plot 指令的結(jié)果都將顯示在同一張圖中。
plot(x, y1)
hold on
plot(x, y2)
plot(x, y3)
plot(x, y4)
hold off

loglog(x, y)  % 對(duì)數(shù)—對(duì)數(shù)繪圖
semilogx(x, y)  % 半對(duì)數(shù)(x 軸對(duì)數(shù))繪圖
semilogy(x, y)  % 半對(duì)數(shù)(y 軸對(duì)數(shù))繪圖

fplot (@(x) x^2, [2,5])  % 繪制函數(shù) x^2 在 [2, 5] 區(qū)間的曲線

grid on  % 在繪制的圖中顯示網(wǎng)格,使用 grid off 可取消網(wǎng)格顯示
axis square  % 將當(dāng)前坐標(biāo)系設(shè)定為正方形(保證在圖形顯示上各軸等長(zhǎng))
axis equal  % 將當(dāng)前坐標(biāo)系設(shè)定為相等(保證在實(shí)際數(shù)值上各軸等長(zhǎng))

scatter(x, y);  % 散點(diǎn)圖
hist(x);  % 直方圖

z = sin(x);
plot3(x,y,z);  % 繪制三維曲線

pcolor(A)  % 偽彩色圖(熱圖)
contour(A)  % 等高線圖
mesh(A)  % 網(wǎng)格曲面圖

h = figure  % 創(chuàng)建新的圖片對(duì)象并返回其句柄 h
figure(h)  % 將句柄 h 對(duì)應(yīng)的圖片作為當(dāng)前圖片
close(h)  % 關(guān)閉句柄 h 對(duì)應(yīng)的圖片
close all  % 關(guān)閉 MATLAB 中所用打開(kāi)的圖片
close  % 關(guān)閉當(dāng)前圖片

shg  % 顯示圖形窗口
clf clear  % 清除圖形窗口中的圖像,并重置圖像屬性

% 圖像屬性可以通過(guò)圖像句柄進(jìn)行設(shè)定
% 在創(chuàng)建圖像時(shí)可以保存圖像句柄以便于設(shè)置
% 也可以用 gcf 函數(shù)返回當(dāng)前圖像的句柄 
h = plot(x, y);  % 在創(chuàng)建圖像時(shí)顯式地保存圖像句柄
set(h, 'Color', 'r')
% 顏色代碼:'y' 黃色,'m' 洋紅色,'c' 青色,'r' 紅色,'g' 綠色,'b' 藍(lán)色,'w' 白色,'k' 黑色
set(h, 'Color', [0.5, 0.5, 0.4])
% 也可以使用 RGB 值指定顏色
set(h, 'LineStyle', '--')
% 線型代碼:'--' 實(shí)線,'---' 虛線,':' 點(diǎn)線,'-.' 點(diǎn)劃線,'none' 不劃線
get(h, 'LineStyle')
% 獲取當(dāng)前句柄的線型

% 用 gca 函數(shù)返回當(dāng)前圖像的坐標(biāo)軸句柄
set(gca, 'XDir', 'reverse');  % 令 x 軸反向

% 用 subplot 指令創(chuàng)建平鋪排列的多張子圖
subplot(2,3,1);  % 選擇 2 x 3 排列的子圖中的第 1 張圖
plot(x1); title('First Plot')  % 在選中的圖中繪圖
subplot(2,3,2);  % 選擇 2 x 3 排列的子圖中的第 2 張圖
plot(x2); title('Second Plot')  % 在選中的圖中繪圖

% 要調(diào)用函數(shù)或腳本,必須保證它們?cè)谀愕漠?dāng)前工作目錄中
path  % 顯示當(dāng)前工作目錄
addpath /path/to/dir  % 將指定路徑加入到當(dāng)前工作目錄中
rmpath /path/to/dir  % 將指定路徑從當(dāng)前工作目錄中刪除
cd /path/to/move/into  % 以制定路徑作為當(dāng)前工作目錄

% 變量可保存到 .mat 格式的本地文件
save('myFileName.mat')  % 保存當(dāng)前工作空間中的所有變量 
load('myFileName.mat')  % 將指定文件中的變量載入到當(dāng)前工作空間 

% .m 腳本文件
% 腳本文件是一個(gè)包含多條 MATLAB 指令的外部文件,以 .m 為后綴名
% 使用腳本文件可以避免在命令窗口中重復(fù)輸入冗長(zhǎng)的指令

% .m 函數(shù)文件
% 與腳本文件類(lèi)似,同樣以 .m 作為后綴名
% 但函數(shù)文件可以接受用戶輸入的參數(shù)并返回運(yùn)算結(jié)果
% 并且函數(shù)擁有自己的工作空間(變量域),不必?fù)?dān)心變量名稱沖突
% 函數(shù)文件的名稱應(yīng)當(dāng)與其所定義的函數(shù)的名稱一致(比如下面例子中函數(shù)文件就應(yīng)命名為 double_input.m)
% 使用 'help double_input.m' 可返回函數(shù)定義中第一行注釋信息
function output = double_input(x) 
    % double_input(x) 返回 x 的 2 倍
    output = 2*x;
end
double_input(6)  % ans = 12 

% 同樣還可以定義子函數(shù)和內(nèi)嵌函數(shù)
% 子函數(shù)與主函數(shù)放在同一個(gè)函數(shù)文件中,且只能被這個(gè)主函數(shù)調(diào)用
% 內(nèi)嵌函數(shù)放在另一個(gè)函數(shù)體內(nèi),可以直接訪問(wèn)被嵌套函數(shù)的各個(gè)變量

% 使用匿名函數(shù)可以不必創(chuàng)建 .m 函數(shù)文件
% 匿名函數(shù)適用于快速定義某函數(shù)以便傳遞給另一指令或函數(shù)(如繪圖、積分、求根、求極值等)
% 下面示例的匿名函數(shù)返回輸入?yún)?shù)的平方根,可以使用句柄 sqr 進(jìn)行調(diào)用:
sqr = @(x) x.^2;
sqr(10) % ans = 100
doc function_handle % find out more

% 接受用戶輸入
a = input('Enter the value: ')

% 從文件中讀取數(shù)據(jù)
fopen(filename)
% 類(lèi)似函數(shù)還有 xlsread(excel 文件)、importdata(CSV 文件)、imread(圖像文件)

% 輸出
disp(a)  % 在命令窗口中打印變量 a 的值
disp('Hello World')  % 在命令窗口中打印字符串
fprintf  % 按照指定格式在命令窗口中打印內(nèi)容

% 條件語(yǔ)句(if 和 elseif 語(yǔ)句中的括號(hào)并非必需,但推薦加括號(hào)避免混淆)
if (a > 15)
    disp('Greater than 15')
elseif (a == 23)
    disp('a is 23')
else
    disp('neither condition met')
end

% 循環(huán)語(yǔ)句
% 注意:對(duì)向量或矩陣使用循環(huán)語(yǔ)句進(jìn)行元素遍歷的效率很低?。?% 注意:只要有可能,就盡量使用向量或矩陣的整體運(yùn)算取代逐元素循環(huán)遍歷!!
% MATLAB 在開(kāi)發(fā)時(shí)對(duì)向量和矩陣運(yùn)算做了專門(mén)優(yōu)化,做向量和矩陣整體運(yùn)算的效率高于循環(huán)語(yǔ)句
for k = 1:5
    disp(k)
end

k = 0;  
while (k < 5)
    k = k + 1;
end

% 程序運(yùn)行計(jì)時(shí):'tic' 是計(jì)時(shí)開(kāi)始,'toc' 是計(jì)時(shí)結(jié)束并打印結(jié)果
tic
A = rand(1000);
A*A*A*A*A*A*A;
toc

% 鏈接 MySQL 數(shù)據(jù)庫(kù)
dbname = 'database_name';
username = 'root';
password = 'root';
driver = 'com.mysql.jdbc.Driver';
dburl = ['jdbc:mysql://localhost:8889/' dbname];
javaclasspath('mysql-connector-java-5.1.xx-bin.jar');  % 此處 xx 代表具體版本號(hào)
% 這里的 mysql-connector-java-5.1.xx-bin.jar 可從 http://dev.mysql.com/downloads/connector/j/ 下載
conn = database(dbname, username, password, driver, dburl); 
sql = ['SELECT * from table_name where id = 22']  % SQL 語(yǔ)句
a = fetch(conn, sql)  % a 即包含所需數(shù)據(jù)

% 常用數(shù)學(xué)函數(shù)
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
exp(x) 
sqrt(x)
log(x)
log10(x)
abs(x)
min(x)
max(x)
ceil(x)
floor(x)
round(x)
rem(x)
rand  % 均勻分布的偽隨機(jī)浮點(diǎn)數(shù)
randi  % 均勻分布的偽隨機(jī)整數(shù)
randn  % 正態(tài)分布的偽隨機(jī)浮點(diǎn)數(shù)

% 常用常數(shù)
pi
NaN
inf

% 求解矩陣方程(如果方程無(wú)解,則返回最小二乘近似解)
% \ 操作符等價(jià)于 mldivide 函數(shù),/ 操作符等價(jià)于 mrdivide 函數(shù)
x=A\b  % 求解 Ax=b,比先求逆再左乘 inv(A)*b 更加高效、準(zhǔn)確
x=b/A  % 求解 xA=b

inv(A)  % 逆矩陣
pinv(A)  % 偽逆矩陣

% 常用矩陣函數(shù)
zeros(m, n)  % m x n 階矩陣,元素全為 0
ones(m, n)  % m x n 階矩陣,元素全為 1
diag(A)  % 返回矩陣 A 的對(duì)角線元素
diag(x)  % 構(gòu)造一個(gè)對(duì)角陣,對(duì)角線元素就是向量 x 的各元素 
eye(m, n)  % m x n 階單位矩陣
linspace(x1, x2, n)  % 返回介于 x1 和 x2 之間的 n 個(gè)等距節(jié)點(diǎn)
inv(A)  % 矩陣 A 的逆矩陣
det(A)  % 矩陣 A 的行列式
eig(A)  % 矩陣 A 的特征值和特征向量
trace(A)  % 矩陣 A 的跡(即對(duì)角線元素之和),等價(jià)于 sum(diag(A))
isempty(A)  % 測(cè)試 A 是否為空
all(A)  % 測(cè)試 A 中所有元素是否都非 0 或都為真(邏輯值)
any(A)  % 測(cè)試 A 中是否有元素非 0 或?yàn)檎妫ㄟ壿嬛担?isequal(A, B)  % 測(cè)試 A 和 B是否相等
numel(A)  % 矩陣 A 的元素個(gè)數(shù)
triu(x)  % 返回 x 的上三角這部分
tril(x)  % 返回 x 的下三角這部分
cross(A, B)  % 返回 A 和 B 的叉積(矢量積、外積)
dot(A, B)  % 返回 A 和 B 的點(diǎn)積(數(shù)量積、內(nèi)積),要求 A 和 B 必須等長(zhǎng)
transpose(A)  % A 的轉(zhuǎn)置,等價(jià)于 A'
fliplr(A)  % 將一個(gè)矩陣左右翻轉(zhuǎn)
flipud(A)  % 將一個(gè)矩陣上下翻轉(zhuǎn)

% 矩陣分解
[L, U, P] = lu(A)  % LU 分解:PA = LU,L 是下三角陣,U 是上三角陣,P 是置換陣
[P, D] = eig(A)  % 特征值分解:AP = PD,D 是由特征值構(gòu)成的對(duì)角陣,P 的各列就是對(duì)應(yīng)的特征向量
[U, S, V] = svd(X)  % 奇異值分解:XV = US,U 和 V 是酉矩陣,S 是由奇異值構(gòu)成的半正定實(shí)數(shù)對(duì)角陣

% 常用向量函數(shù)
max     % 最大值
min     % 最小值 
length  % 元素個(gè)數(shù)
sort    % 按升序排列 
sum     % 各元素之和 
prod    % 各元素之積
mode    % 眾數(shù)
median  % 中位數(shù) 
mean    % 平均值 
std     % 標(biāo)準(zhǔn)差
perms(x) % x 元素的全排列

相關(guān)資料

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)