1012 matlab 教學

Post on 03-Jan-2016

85 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

1012 MATLAB 教學. 羅英倉 2014/02/25. What is MATLAB?. MAT rix LAB oratory 的 縮寫 1984 年由 MathWorks 公司 推出 主要特色 強大的數值運算 ( numeric computation) 能力 完整的矩陣運算指令 許多 不同領域 的工具箱 (Toolbox ) 、函式庫 影像處理 、訊號 處理、金融分析、生物資訊 應用 algorithm development, data visualization, data analysis, and numeric computation. - PowerPoint PPT Presentation

TRANSCRIPT

1012 MATLAB 教學

羅英倉 2014/02/25

What is MATLAB? MATrix LABoratory 的縮寫 1984 年由 MathWorks 公司推出 主要特色

強大的數值運算 (numeric computation) 能力 完整的矩陣運算指令 許多不同領域的工具箱 (Toolbox) 、函式庫

影像處理、訊號處理、金融分析、生物資訊 應用

algorithm development, data visualization, data analysis, and numeric computation

2

Development Environment 4 個主要視窗

Workspace( 變數區域 ) 、 Command History( 命令歷史列 ) 、 Command History 、 Current Folder

3

Operators 算術運算子

沒有 ++ 、 -- + 、 - 、 * 、 /( 除以 ) 、 \( 除 ) 、 ^( 次方 ) >> 100/5

ans = 20 比較運算子

>= 、 <= 、 > 、 < 、 == 、 ~= 邏輯運算子

& 、 | 、 ~ Element-by-Element 運算“ .”

A = [1 1 1;1 2 3;1 3 6];

4

A.^2 = 1 1 1 1 4 9 1 9 36

A^2 = 3 6 10 6 14 25 10 25 46

A = 1 1 1 1 2 3 1 3 6

Operators 運算式最後加分號 (;) ,就不會顯示運算結果

>> 100/5; % 不會輸出運算結果 多個運算式之間,可用逗號 (,) 或分號 (;) 隔開

x=1,y=2,z=3 x=1;y=2;z=3

% 註解符號,類似 C 語言的 // 快捷鍵: Ctrl+R( 註解 ) 、 Ctrl+T( 解除註解 )

5

Variables (1/3) 區分大小寫 (case sensitive) 變數第一個字母必需是英文字母

Ex: num_students = 30 不需要預先宣告變數 輸入變數名稱,會顯示變數值 預設變數

ans: Most recent answer pi: 3.1416 i or j: 虛數基本單位,也就是根號負 1 Inf: 無窮大 (Infinity) NaN: 不存在 realmin: 可以使用的最小實數 realmax: 可以使用的最大實數6

Matrices and Arrays 矩陣 index 從 1 開始算 產生一個 1x3 的矩陣,可用空格或逗號隔開

x=[10 2 3] 或 y=[1,2,3] 產生一個 2x3 的矩陣,分號作為換列的分隔符號

m=[11 12 13; 21 22 23] 直接存取該位置的值

x(2)=2 m(2,3)=23

亦可由變數組成 z=[x y] % z=[10 2 3 1 2 3]

刪除元素 z(2)=[] % z=[10 3 1 2 3]

增加元素 z(6)=100% z=[10 3 1 2 3 100]7

Matrices and Arrays 矩陣列跟欄的操作

x=[1 2 3; 4 5 6] x(2,:) % 顯示第二列資料,其結果 4 5 6 x(:,3) % 顯示第三欄資料,其結果 3 6 x(2,1:2)=7 % x=[1 2 3; 7 7 6] x(1,end) % ans = 3

從哪裡到哪裡 a=1:3 % 從 1~3 每次間隔 1 b=1:.5:3 % 從 1~3 每次間隔 0.5 c=linspace(0,10,20) % 從 0~10 分成 20 等分 %linspace(Generate linearly spaced vectors) x(2:6)=1 % 將 x 向量的第二到六個設定 1

8

矩陣基本運算 x = [2 2 2];

y = [3 3 3];z = [1 1 1];x+y-z = [4 4 4]

矩陣相乘A = [5 3 2 6];A = 5 3 2 6B = [-4 9 0 1]’B = -4 9 0 1A*B = 13

如果要 element by element 的相乘,應該用” .*” ,而不是” *”

9

矩陣常用函式 zeros: 配置零矩陣

zeros(3) % 產生一個 3-by-3 的零矩陣 ones: 配置每個 element 都是 1 的矩陣 eye: 配置單位矩陣

eye(3) rand, randi, randn: 配置值為亂數的矩陣 size: 取得矩陣的大小 length: 取得陣列的長度 inv: 取得反矩陣 sort: 排序 magic(n): 產生 n x n 的魔方陣 ( 每行、每列、和對角線的總和都

一樣 )

10

數學常用函式 min 、 median 、 max mean: 平均 sum: 總和 abs: 取絕對值 ceil 、 floor 、 round( 四捨五入 ) sin 、 cos 、 tan 、 asin 、 acos 、 atan exp: 自然指數 log(x): 自然對數 ln(x), log2, log10 sqrt( 開根號 ) rem(x,y): x 除以 y 的餘數 sign: 回傳 -1( 負數 ), 0( 零 ) or 1( 正數 ) imag( 取虛數部份 ) 、 real( 取實數部份 )

11

一般常用函式 clear: 清除所有變數宣告

亦可僅清除單一變數 clear x; clc: 清除 Command Window 畫面 disp: 顯示文字或陣列

12

訊號系統常用函式 conv(a,b):Convolution fft2(x):Fast Fourier transform

13

Custom M-file 副檔名 : *.m File->New->M-File or File->New->Script 檔名必須與函數名稱相同 M-file 函式裡面定義的任何變數皆是 local variable 一般習慣將指令先寫個 M-File ,然後執行該 M-File( 等同於在

Command Window 下指令 ) ,以便多次執行相同指令 Function 格式

function [ output_args ] = FuncName( input_args )% UNTITLED Summary of this function goes here% Detailed explanation goes herecodereturn

14

M-file Examplefunction [z] = add(x,y)z=x+y;return

在 Command Window 可以直接呼叫 add() add(4,80) Current Folder 要設定在 M-file 所在位置,不然會找不到該函式,

發生” ??? Undefined function or method” 的錯誤

15

if/elseif/else 與 C 語言相同,看情況使用 elseif 跟 else if expression1

commandselseif expression2

commandselseif …

……

elsecommands

end

16

For Loop for i=1:10 % i 從 1~10 間隔 1

x(i)=sin(i)end

for i=1:2:10 % i 從 1~10 間隔 2x(i)=cos(i)

end for i=10:-1:1 % i 從 10~1 每次少 1

x(i)=tan(i)end

for 迴圈方法較慢,可直接向量操作 i=1:10;

x=sin(i)

17

while loop while

i=0;while i<10

i = i+1end

迴圈可使用 break , continue

18

Graphics (1/4) plot: 畫 2D 線圖 樣式設定

顏色 y(yellow) 、 m(magenta) 、 c(cyan) 、 r(red) 、 green(g) 、 b(blue)

、 white(w) 、 black(b) 線條樣式

.(point) 、 o(circle) 、 x(x-mark) 、 +(plus) 、 *(star) 、 -(solid line) 、 :(dotted line) 、 --(dashed)

19

x=linspace(1,2*pi,30);y=sin(x);plot(x,y);

z=cos(x);plot(x,y,x,z);

plot(x,y,'o',x,z,'g*');

Graphics (2/4) stem(x,y): 繪製離散圖形 grid: 格線 xlabel('x name'): x 軸名稱 ylabel('y name'): y 軸名稱 title('stem(x,sin(x))'): 圖片抬頭 text(0,0, 'text'): 特定位置加上文字 axis([xmin xmax ymin ymax]): x 、 y 軸的範圍

20

1 2 3 4 5 6 7-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

x name

y na

me

stem(x,sin(x))

x=linspace(1,2*pi,30);y=sin(x);stem(x,sin(x));grid on;xlabel('x name');ylabel('y name');title('Test Title');

Graphics (3/4) subplot(共幾列 ,共幾欄 , 第幾個位置 )%選擇輸出的位置

分好幾個小圖顯示 Example

21

x=linspace(0,2*pi,30);y=sin(x);z=cos(x);a=2*sin(x).*cos(x);b=tan(x);subplot(2,2,1);plot(x,y);subplot(2,2,2);plot(x,z);subplot(2,2,3);plot(x,a);subplot(2,2,4);plot(x,b);

Graphics (4/4) hold on / hold off

在已有的圖案上,加上新的圖案 % plot(x,z) 的結果會覆蓋 plot(x,y) 的結果

% 在 plot(x,z) 之前加上 hold on ,保留之前畫得結果

22

x=linspace(1,2*pi,30);y=sin(x);plot(x,y);z=cos(x);plot(x,z);

x=linspace(1,2*pi,30);y=sin(x);plot(x,y);z=cos(x);hold onplot(x,z);hold off

Input/Output fprintf

print to the screenx= 100;fprintf('hello world! %d\n',x);

寫檔x = 0:.1:1;y = [x; exp(x)];% open the file with write permissionfid = fopen('c:\exp.txt', 'w');fprintf(fid, '%6.2f %12.8f\n', y);fclose(fid);% view the contents of the filetype exp.txt

input: select=input('selection(number):');23

音效 (1/3) 讀取音效

[y,fs]=wavread('file.wav'); 可設定讀取範圍,如 wavread('file.wav',[3000,5000]);

播放音效 sound(y,fs); wavplay(y*m,fs*n);

y 增加倍數 (m) 可增大音量, fs 增加倍數 (n) 會影響音訊速度 錄製音效

y=wavrecord(n, fs); %讀入 n 點資料 輸出檔案

wavwrite(y, fs, nbits, waveFile)

24

音效 (2/3) wavread 範例

wavrecord 範例

25

fs=12000; % 取樣頻率 12000 Hz

fprintf('按任意鍵後開始 2秒錄音: '); pause

fprintf('錄音中 ...');

y=wavrecord(2*fs, fs); %duration*fs 是錄音資料點數fprintf('錄音結束 \n');

fprintf('按任意鍵後開始播放: '); pause

wavplay(y,fs);

[y, fs]=wavread('run.wav');

sound(y, fs); % 播放此音訊time=(1:length(y))/fs; % 時間軸的向量plot(time, y); % 畫出時間軸上的波形

音效 (3/3) 音效 Convolution範例

26

file='sentence.wav';

[y,fs,nbits]=wavread(file);

file2='Hallway_IR.wav';

[y2,fs2,nbits2]=wavread(file2);

test=conv(y,y2); % 迴旋積運算wavwrite(test,fs2,'test.wav');

time=(1:length(test))/fs; %時間軸plot(time,test);

影像處理範例 imread(‘filename.jpg'): 讀取影像檔案 Example:

filename = 'dog.jpg';rgb_image = imread(filename);figure,imshow(rgb_image);%彩色轉成灰階gray_image = rgb2gray(rgb_image); figure,imshow(gray_image);imwrite(gray_image, 'gray_dog.jpg'); %write new image% 影像模糊化h = fspecial('gaussian',10,10);blur_rgb_image =imfilter(rgb_image,h);figure,imshow(blur_rgb_image);

27

影像處理範例 灰階影像的邊界

edge_img = edge(gray_image,'canny');imshow(edge_img);

28

top related