MATLAB技巧讲座

上传人:876****10 文档编号:141911404 上传时间:2020-08-14 格式:DOC 页数:13 大小:233KB
返回 下载 相关 举报
MATLAB技巧讲座_第1页
第1页 / 共13页
MATLAB技巧讲座_第2页
第2页 / 共13页
MATLAB技巧讲座_第3页
第3页 / 共13页
MATLAB技巧讲座_第4页
第4页 / 共13页
MATLAB技巧讲座_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《MATLAB技巧讲座》由会员分享,可在线阅读,更多相关《MATLAB技巧讲座(13页珍藏版)》请在金锄头文库上搜索。

1、MATLAB技巧讲座 作者: 日期:MATLAB 技巧講座作者:黃俊德 後續修改:丁建均,廖科傑國立台灣大學電信工程學研究所一、畫方程式 plot例:x = sin(t)dt = 0.1;t = 0:dt:2*pi;x = sin(t);plot(t,x);index1234.616263t00.10.20.3.66.16.2index1234.616263x00.09980.19870.2955.-0.2794-0.1822-0.0831在圖上加上各種文字說明dt = 0.1;t = 0:dt:2*pi;x1 = sin(t);x2 = cos(t);plot(t,x1,t,x2);titl

2、e(sin(t) and cos(t);xlabel(time(sec);ylabel(value);legend(sin(t),cos(t);二、將時間值轉為index值如:先設時間軸:dt = 0.1;t = -5:dt:5;index12.404142.6162.100101t-5-4.9.-1.1-1-0.9.16.1.4.95希望得到的x值index12.404142.6162.100101x00.011.10.00x = zeros(1,length(t);x(41:61) = 1;如何將時間值t1轉為index值i1使得 -141, 161 ans: i1 = ( t1 - mi

3、n(t)/dt + 1x(-1+5)/dt+1:(1+5)/dt+1) = 1;有時候可能會發生轉換出來的index值不是整數的錯誤訊息可使用round()再轉為整數i1 = round( t1 - min(t)/dt + 1)三、畫圖與畫線的一些技巧figure;plot(-50 50,0 0,k,0 0,-50 50,k);hold on;plot(-15 0 10 0,0 15 0 -10,r:);axis(-20 20 -15 15);t = 0:0.1:10;figure;subplot(2,1,1);plot(t,cos(t);subplot(2,1,2);plot(t,sin(t

4、);四、輸入與輸出x = input(輸入一個數:);disp(x);輸入一個數:12 12x1 = input(輸入第一個數x1:);x2 = input(輸入第二個數x2:);disp(sprintf(x1=%d, x2=%d, x1+x2=%dn,x1,x2,x1+x2);輸入第一個數x1:2輸入第二個數x2:4x1=2, x2=4, x1+x2=6五、計時可以用 tic, toc 兩個指令tic: 如同按下碼錶toc: 顯示時間例子:ticsum=1;for a=2:100sum=sum+a;endtocElapsed time is 0.001423 seconds.所以 Matla

5、b 計算從1加到100的時間為 0.001423秒六、 善用 find 指令 find這個指令可以找出一個 vector 或 matrix 不為零的 entries位置,或是找出滿足某些條件的 entries 的位置例子: x = 1 1 0 1 0; find(x)ans = 1 2 4 y = -2 1 3 1 -1 1 0; find(y 0)ans = 2 3 4 6又如,我們想要讓 im 這個 vector 大於 255 的值都變為 255,可以用 im = 80 120 260 280 220 280 200; im(find(im255)=255 % 或者可以簡寫為 im(im2

6、55)=255 im = 80 120 255 255 220 255 200善用find這個指令,可以避免迴圈,加快計算速度七、Debug模式增加 breakpoint刪除 breakpoint下一步進入函式退出函式到下一個breakpoint結束程式注意程式中不能有 clear all否則會把breakpoint也清除掉八、向量化寫法由於 Matlab 在執行迴圈的時候較花時間,但是在處理 vector 或 matrix 的時候比較有效率,所以, Matlab 寫程式有一個原則,就是儘量用 vector 或 matrix 來取代迴圈。以下給一個用 Matlab 來計算 continuous

7、 Fourier transform 的例子如 Fourier 轉換: 寫成離散的型式: 程式:close all; dt = 0.01;t = 0:dt:10;N = length(t);x = cos(2*pi*t); df = 0.01;f = 0:df:5;M = length(f); % 方法一:使用迴圈來計算tic;X1 = zeros(1,M);for m = 1:M for n = 1:N X1(m) = X1(m) + x(n)*exp(-j*2*pi*(n-1)*dt*(m-1)*df); end X1(m) = X1(m)*dt;endtoc; % 方法二:用 matri

8、ces 和 vectors 的計算來取代迴圈tic;X2 = x * exp(-j*2*pi*(t.*f) * dt;toc; figure; plot(f,abs(X1);figure; plot(f,abs(X2);執行結果:Elapsed time is 5.284528 seconds. (方法一所花的時間)Elapsed time is 0.314305 seconds. (方法二所花的時間)所以,如果用 matrices 和 vectors 來取代迴圈,可以節省不少運算時間以下是這個程式的圖解示意圖X = zeros(1,M);for m = 1:M for n = 1:N X(m

9、) = X(m) + x(n)*exp(-j*2*pi*(n-1)*dt*(m-1)*df); endend X = x * exp(-j*2*pi*(t.*f)*=exp(-j*2*pi*(t.*f) t. f t.*f exp(-j*2*pi*(t.*f)=*九、讀寫檔案上的資料(1) 讀取 Excel 檔的資料: xlsread(2) 將 vector 或 matrix 寫成 Excel 檔: xlswrite(3) 讀取 *.txt 檔的資料: dlmread例如:當 phone.txt 檔的內容下 3,3,6,6,9,6,5,2 (逗號可以用空格取代)執行 dlmread(phone

10、.txt)結果為ans = 3 3 6 6 9 6 5 2 (4) 將 vector 或 matrix 寫成任何檔: dlmwrite (5) 將 *.txt 檔的資料讀為 char 的形式的方法fid = fopen(檔名, r);f1 = fread(fid);w1 = setstr(f1);(6) 讀取影像檔: imread(7) 將 vector 或 matrix 寫成影像檔: imwrite(8) 讀取聲音檔: wavread(9) 將 column vector 或含有二個 column vectors 的矩陣寫成 *.wav 檔: wavwrite(10) 讀取 video 檔:

11、 aviread十、Matlab 寫程式的原則(1) 迴圈能避免就儘量避免 (可以善用 vectors,matrices,以及find這個指令(2) 能夠不在迴圈內做的運算,則移到迴圈外 例如y(1)=1;for a = 2:100y(a) = y(a-1)+ cos(2*pi*100) + sin(3*pi*100); end可以改成y(1)=1;c1= cos(2*pi*100) + sin(3*pi*100); for a = 2:100y(a) = y(a-1)+ c1; end如此一來,就不必每次迴圈都要再算一次 cos(2*pi*100) + sin(3*pi*100) (3) 寫

12、一部分即測試,不要全部寫完再測試(4) 先測試簡單的例子,成功後再測試複雜的例子第 (2), (3), (4) 點原則,不只適用於 Matlab,也適用於任何程式語言十一、如何不使用迴圈同時存取單一矩陣內的多個元素假設現在我們有一個3*3大小的矩陣A以及兩個向量p與q,其值分別為與。我們該如何不使用迴圈寫出把、相對應位置元素取出的程式呢?一個非常直覺但是錯誤的寫法如下,在這個例子中,正確的答案應該是,但是執行結果卻完全錯誤。A = 8 1 6 3 5 7 4 9 2A(p,q)= 8 6 6 3 7 7 4 2 2正確而言,我們應先將subscript轉為index,參考MATLAB的subcript與ind對應圖(圖一)。圖一我們可將程式改寫程非迴圈寫法並與迴圈寫法做比較。程式碼:A = magic(5000);p =round(4999*rand(1,50

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号