MatLab入門手冊(cè)

本文章采用創(chuàng)作共用版權(quán)協(xié)議, 要求署名、非商業(yè)用途和保持一致. 轉(zhuǎn)載本文章必須也遵循署名-非商業(yè)用途-保持一致的創(chuàng)作共用協(xié)議.

1. MatLab簡(jiǎn)介和安裝


  • MatLab是綜合高性能的數(shù)值計(jì)算軟件, 集成了數(shù)值計(jì)算和可視化, 提供大量?jī)?nèi)置函數(shù), 廣泛用于科學(xué)計(jì)算等領(lǐng)域.
  • Simulink是基于MatLab的框圖設(shè)計(jì)環(huán)境, 用來對(duì)各種動(dòng)態(tài)系統(tǒng)進(jìn)行建模, 分析和方針.
  • 學(xué)習(xí)目的: 為了完成當(dāng)前作業(yè)和以為科研工作的需求

安裝包請(qǐng)?jiān)?a target="_blank" rel="nofollow">MatLab官網(wǎng)進(jìn)行下載和安裝.

MatLab窗口>>

  1. 命令窗口
  2. 當(dāng)前目錄
  3. 工作區(qū)

2. MatLab基礎(chǔ)


Matlab如果沒有定義變量名, 系統(tǒng)將計(jì)算結(jié)果暫存在ans臨時(shí)變量中.
優(yōu)先級(jí): 表達(dá)式從左向右運(yùn)算, 指數(shù)運(yùn)算優(yōu)先級(jí)最高, 乘除次之(help precedence查看優(yōu)先級(jí))

常用操作命令

  • clc 清空敏玲窗口
  • diary 日志文件命名
  • who 列出工作空間的變量
save my_var.mat  % 保存工作區(qū)變量
load my_var.mat  % 加載文件中變量到工作區(qū)

運(yùn)算符號(hào)

+ - * / \ ^ '  % 加 減 矩陣乘法 右除 左除 次方 矩陣共軛轉(zhuǎn)置
.* ./ \. .^ .'  % 數(shù)組乘法 數(shù)組右除 數(shù)組左除 數(shù)組次方 矩陣轉(zhuǎn)置

>> a = round(rand(3) * 10)
a =
     8     9     3
     9     6     5
     1     1    10
>> b = magic(3)  % 定義矩陣a和矩陣b
b =
     8     1     6
     3     5     7
     4     9     2
>> c1 = a * b  % 矩陣叉乘
c1 =
   103    80   117
   110    84   106
    51    96    33
>> c2 = a .* b  % 矩陣點(diǎn)乘, 矩陣對(duì)應(yīng)元素位置的元素相乘
c2 =
    64     9    18
    27    30    35
     4     9    20
>> e =a^2  % 矩陣的次方, 表示a * 2
e =
   148   129    99
   131   122   107
    27    25   108
>> d = a.^2  % 矩陣的乘方, 矩陣中每個(gè)元素二次方
d =
    64    81     9
    81    36    25
     1     1   100
>> format short, pi  % format用于更改顯示的輸出格式
ans =
    3.1416
>> format long, pi
ans =
   3.141592653589793
>> iskeyword  % 查詢關(guān)鍵字
ans = 
    'break'
    'case'
    'catch'
    'classdef'
    'continue'
    'else'
    'elseif'
    'end'
    'for'
    'function'
    'global'
    'if'
    'otherwise'
    'parfor'
    'persistent'
    'return'
    'spmd'
    'switch'
    'try'
    'while'
>> class(a)  % 獲取定義的數(shù)據(jù)類型
ans =
double
>> a = cast(a, 'uint8')  % 改變數(shù)據(jù)類型
a =
    8    9    3
    9    6    5
    1    1   10
>> class(a)
ans =
uint8

.的運(yùn)算方式表示對(duì)矩陣元素的運(yùn)算, 矩陣的右除是一般意義的除法, a./b = b.\a

MatLab默認(rèn)的輸出格式為雙精度(double)

變量

  • 變量名區(qū)分大小寫, 以字母開頭, 后跟字母數(shù)字下劃線

數(shù)組

數(shù)組作為Matlab存儲(chǔ)和運(yùn)算的基本單元

數(shù)組創(chuàng)建

>> a = [1 2 3]  % 直接創(chuàng)建, 以空格或者逗號(hào)隔開
a =
     1     2     3
>> a = 0 : 1 : 3  % x = a:inc:b a和b為起始數(shù)和終止數(shù), inc為間隔步長(zhǎng)
a =
     0     1     2     3
>> a = linspace(1, 3, 3)  % 等間距線性創(chuàng)建法, a = linspace(a, b, n), 在a和b區(qū)間取n個(gè)點(diǎn)
a =
     1     2     3
>> a = logspace(1, 3, 3)  % 等間距對(duì)數(shù)創(chuàng)建法
a =
          10         100        1000

數(shù)組訪問

a =
          10         100        1000
>> a(2)  % 索引訪問, 從1開始
ans =
   100
>> a(2 : 3)  % 按塊訪問
ans =
         100        1000
>> a(2 : end)
ans =
         100        1000

多維數(shù)組

  • 直接創(chuàng)建(一位數(shù)組的創(chuàng)建方式), 同行元素用空格和逗號(hào)隔開, 不同行用分號(hào)隔開
  • 新建變量的窗口, 更改變量名, 插入數(shù)據(jù)
  • 大規(guī)模數(shù)據(jù)可以使用導(dǎo)入數(shù)據(jù)導(dǎo)入工作空間
  • 使用已有函數(shù)

常用標(biāo)準(zhǔn)數(shù)組

  • eye生成單位矩陣
  • ones生成全1數(shù)組
  • rand生成隨機(jī)數(shù)組, 服從均勻分布
  • randn生成隨機(jī)數(shù)組, 服從正態(tài)分布
  • zeros生成全0數(shù)組
  • diag生成對(duì)角矩陣
>> a = -3:3
a =
    -3    -2    -1     0     1     2     3
>> k = find(a > 0)  % 找到符合條件的下標(biāo)
k =
     5     6     7
>> sort(a)  % 對(duì)數(shù)組排序
ans =
    -3    -2    -1     0     1     2     3

字符串

字符串是用單引號(hào)括起來的一系列字符的組合

>> str = 'hello world'  % 定義字符串
str =
hello world
>> size(str)  % 查看字符串的大小
ans =
     1    11
>> u = mat2str(pi * eye(2))  % 將矩陣轉(zhuǎn)化為字符串
u =
[3.14159265358979 0;0 3.14159265358979]
>> class(u)
ans =
char
>> disp(u)  % 打印字符串
[3.14159265358979 0;0 3.14159265358979]
>> size(u)
ans =
     1    39
>> t = 23  
>> tempText = [ 'Temperature is ', num2str(t), 'C']  # 字符串的拼接, 使用num2str將數(shù)字轉(zhuǎn)換為字符串
tempText =
Temperature is 23C

關(guān)系運(yùn)算符

關(guān)系運(yùn)算符主要比較兩個(gè)同維數(shù)的數(shù)組的大小

3. 矩陣運(yùn)算


常用函數(shù)列舉

chol(A)  % 對(duì)矩陣A進(jìn)行Cholesky分解
det(A)  % 矩陣A的行列式
eig(A)  % 矩陣A的特征值和特征向量
inv(A)  % 矩陣A的逆
svd(A)  % 矩陣A的奇異值
eye(r, c)  % 生成r * c的單位矩陣
magic(n)  % 生成n*n的魔幻矩陣
ones(r, c)  % 生成r*c的全1矩陣
rand(r, c)  % 生成r*c的元素值0和1之間的隨機(jī)矩陣
zeros(r, c)  % 生成r*c的全0矩陣
cond(A)  %利用奇異值分解求矩陣A的范數(shù)

求行列式

>> for i = 1:3
A = magic(i + 2)
a(i) = det(A)  % 矩陣行列式
disp('矩陣:')  % 打印字符串 
disp(A)
disp('矩陣的行列式')
disp(a(i))
end

稀疏矩陣

>> a = [0 0 0 5; 0 1 0 0; 1 5 0 0; 0 0 0 3]
a =
     0     0     0     5
     0     1     0     0
     1     5     0     0
     0     0     0     3
>> as= sparse(a)  % 創(chuàng)建稀疏矩陣
as =
   (3,1)        1
   (2,2)        1
   (3,2)        5
   (1,4)        5
   (4,4)        3
>> af = full(as)  % 還原矩陣
af =
     0     0     0     5
     0     1     0     0
     1     5     0     0
     0     0     0     3

線性方程組

恰定方程組是方程組個(gè)數(shù)和未知數(shù)個(gè)數(shù)相同的方程組, 使用左除求解.

4. MatLab編程基礎(chǔ)

Matlab可以像C一樣編程, 編寫執(zhí)行命令的腳本和函數(shù)功能的模塊, 文件以.m為后綴

打開M文件編輯器:

  1. 新建->腳本
  2. 在命令行輸入edit命令, 或者edit filename命令
% 一個(gè)簡(jiǎn)單的腳本文件
echo on % 腳本文件內(nèi)容顯示在命令窗口
t = 0 : pi/20 : 2 *pi;
num = input('輸入數(shù)字:');  % 提示用戶輸入內(nèi)容
disp(num);  % 顯示結(jié)果
echo off  %關(guān)閉命令行顯示

流程控制

for循環(huán)

for x = array  % x為循環(huán)變量, array是條件數(shù)組
    commands  % 循環(huán)執(zhí)行的代碼
end

% example
for i = 1: 1: 10
    a(i) = sin(i * pi /5)
end
a  % 輸入a

while循環(huán)

while expression
    commands
end

% example
num = 10;
while num >1
    num = num / 2
end

if條件結(jié)構(gòu)

if expression 
    commands
elseif 
    commands
else
    commands
end

switch分支選擇結(jié)構(gòu)

switch expression
    case test_expression1
        commands1
    case test_expression2
        commands2
    otherwise
        commands3
end

% example
x = input('輸入需要換算的長(zhǎng)度數(shù)值cm:');
unit = input('選擇轉(zhuǎn)換單位 (1 in, 2 ft, 3 m. 4 mm, 5 cm):');
switch unit
    case {'inch', 'in', 1}
        y = x * 2.54;
    case {'feel', 'ft', 2}
        y = x * 2.54 / 12;
    case {'meter', 'm', 3}
        y = x / 100;
    case {'centermeter', 'cm', 4}
        y = x;
    case {'milimeter', 'mm', 5}
        y = x * 10;
    otherwise
        disp('Unkonwn Units');
        y = NaN;
end
disp(y)

try-catch結(jié)構(gòu)

try用于捕獲try后語句的異常, 交給catch語句處理異常

try 
    commands
catch 
    commands
end

% example
x = rand(4 ,2)
y = magic(3)
try
    z = x * y
catch 
    z = NaN
    disp('兩矩陣維數(shù)不同, 計(jì)算錯(cuò)誤!')
end
disp(lasterr)
disp(lasterror)

continue,break,return關(guān)鍵字的應(yīng)用場(chǎng)景與其他語言基本相同

M函數(shù)文件

M函數(shù)文件與M腳本文件的不同:

  • M函數(shù)文件第一行必須是function引導(dǎo)的聲明語句, 成為函數(shù)聲明行
  • 函數(shù)執(zhí)行中, 函數(shù)體內(nèi)變量臨時(shí)建立工作區(qū), 稱為函數(shù)工作區(qū)
  • M函數(shù)文件可以調(diào)用M腳本文件
  • M函數(shù)文件中可以創(chuàng)建一個(gè)或多個(gè)函數(shù)

繪制函數(shù)$y=e^{x/3}sinex(x)$在區(qū)間$[0, 4π]$的曲線

function y = sinex(x)
% sinex.m
y = exp(-x / 3).*sin(3 * x)


% 命令行調(diào)用函數(shù)
>> fh  = @sinex
>> ezplot(fh, [0, 4 * pi, -1, 1]);

5. 幫助


Matlab所有函數(shù)都有詳細(xì)的幫助文檔, 通過一下的方式可以更好的使用文檔:

  • 命令行輸入doc functionname(完整的文檔)
  • 輸出functionname(程序進(jìn)進(jìn)行智能文檔提示(速度慢)
  • 命令行輸入help mean(簡(jiǎn)單的文檔)

6. 參考鏈接


更多精彩可以查看個(gè)人博客-雪憶

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容