Introduction to MATrix LABoratory Kai-Chun Fan Agenda • • • • • Basic Usages for Mathematics Coding environments Files I/O Statistic tools Plot tools 基本操作畫面 (prompt) How to Use MATLAB >> DEMO >> HELP [ SIGNAL ] % same as man [ SIGNAL ] in UNIX >> google is your good friend. 基本數學運算 >> (5*2+1.3-0.8)*10/25 ans = 4.2000 (return) >> x = (5*2+1.3-0.8)*10/25 x = 4.2000 % % % % (return) % 為 comment sign default variable data type: double MATLAB stores the result in double ans in default 基本數學運算 >> (5*2+1.3-0.8)*10/25 ans = 4.2000 (return) >> x = (5*2+1.3-0.8)* … (return) 10/25 (return) x = 4.2000 % 式子太長可用 … 換行 Appendix abs(x) sqrt(x) 純量的絕對值 or 向量的長度 rat(x) rats(x) angle(z) 複數 z 的 phase angle sign(x) real(z) imag(z) conj(z) 複數 z 的實部 複數 z 的虛部 複數 z 的共軛複數 rem(x,y) gcd(x,y) lcm(x,y) 將實數 x 化為分數表示 將實數 x 化為多項分數展開 -1 , if x < 0 0 , if x = 0 1 , if x > 0 x mod y (int, int) (int, int) round(x) fix(x) floor(x) ceil(x) 四捨五入 無條件捨去 └ ┘ ┌ ┐ exp(x) pow2(x) log(x) log2(x) log10(x) ex 2x ln log2x log10x sin(x) sinh(x) cos(x) cosh(x) tan(x) tanh(x asin(x) asinh(x) acos(x) acosh(x) atan(x) atanh(x) atan2(x,y) 四象限的反正切函數 Vector & Matrix % vector >> x = [1 3 5 2] (return) x = 1 3 5 2 % matrix >> x = [1 3; 5 2] (return) x = 1 3 5 2 X = 3 X 為一個 1 x 1 matrix[3] Vector & Matrix >> x = [1 3 5 2]; (return) >> y = 2 * x + 1 (return) y = 3 7 11 5 % y is an array for 2 * x(i) + 1 >> x = [1 3 5 2]; (return) >> y = 2 * x + 1 (return) y = 3 7 11 5 >> x = [1 3 5 2] (return) x = 1 3 5 2 >> y = 2 * x + 1 (return) y = 3 7 11 5 抑制輸出 Operators for Vector and Matrix M = A◎B-- ◎處可為 加法(+)、減法(-)、乘法(*)、左除(\)、右除(/) M = A.◎B-- ◎處可為 乘法(*)、乘幂(^)、左除(\)、右除(/) M = A◎c-- ◎處可為 加法(+)、減法(-)、乘法(*)、乘幂(^)、右除(/) M = c◎B-- ◎處可為 加法(+)、減法(-)、乘法(*)、乘幂(^)、左除(\)、右除(./) Special Operators • M = A .◎ B >> x = [1 2]; >> y = [118 59]; >> x .* y ans = 118 118 >> x * y error Index for Vector & Matrix % variable(index) >> x = [1 3 5 2]; (return) >> x(1) = 118 (return) x = 118 3 5 2 >> x = [1 3; 5 2]; (return) >> x(2, 1) = 118 (return) x = 1 3 118 2 % index starts from 1, not 0. Index for Vector & Matrix % range index >> x = [1 2 3; 4 5 6; 7 8 9]; (return) >> x(2, 1:3) (return) ans = 4 5 6 >> x(1:3, 2) (return) ans = 2 5 8 Add & Delete % add element >> x = [1 3 5 2]; (return) >> x(6) = 631 (return) x = 1 3 5 2 0 631 % delete element >> x(3) = []; (return) >> x (return) x= 1 3 2 0 631 Catenate & Inverse % catenate a = 1 2 3 4 5 6 >> a = [a; 7 8 9]; >> a = [a(1,:) 118; a(2,:) 118; a(3,:) 118] a = 1 2 3 118 4 5 6 118 7 8 9 118 % inverse a = 39 39 889 >> a’ a = 39 39 889 % start [: different] : end >> x = 7 : 13 x = 7 8 9 10 11 12 13 >> y = 7 : 1 : 13 y = 7 8 9 10 11 12 13 >> z = 7 : 4 : 13 z = 7 11 >> a = [1:3; 10:10:30] a = 1 2 3 10 20 30 Variables in Workspace % information >> whos (return) name size bytes class a 2x4 64 double array b 4x2 64 double array ans 1x1 8 double array x 1x1 8 double array y 1x1 8 double array z 1x1 8 double array grand total is 20 elements using 160 bytes % release >> clear a >> a ??? Undefined function or variable ‘a'. Code in Files % write your code in files, *.m % for example, kerker.m >> kerker (return) For-loop % for <variable> = <vector> % … % end % in kerker.m for i = 0:2:4, for j = 1:2, h(i/2+1, j) = i/(j*4); end end disp(h) % display, like “cout” format rat % use fraction to display disp(h) % output >> kerker (return) 0 0 0.5 1 2 0.5 0 0 1/2 1 2 1/2 While-loop % while <condition> % … % end x = zeros(1,6); % create an 1 x 6 ZERO matrix while i <= 6, x(i) = 1/i; < less than i = i + 1; end <= less than or equal to > larger than >= larger than or equal to == equal to ~= NOT equal to ( != in C ) & AND ( && in C ) | OR ( || in C ) ~ NOT ( ! in C ) if % if <condition> % … % end % in world118.m if rand(1,1) > 0.5, % create an 1x1 matrix with random elements disp('Given random number is greater than 0.5.'); end >> world118 Given random number is greater than 0.5. eye(x, y) Create an Identity matrix ones(x, y, …) Create an ONEs matrix zeros(x, y, …) Create a ZEROs matrix rand(x, y, …) Create a RANDOM NUMBER matrix Appendix min(x) minimum in x max(x) maximum in x mean(x) mean of x median(x) median of x std(x) stander deviation of x diff(x) x(i+1)-x(i), for all i sort(x, [dim], [mode]) mode = ‘ascend(default)’ or ‘decend’ dim = 1 (every column, default), 2 (every row) sortrows(x, column j) sort rows along column j. ‘–j’ means ‘decend’ length(x) number of elements in x norm(x) euclidean length of x sum(x) sum of x prod(x) product of x dim = 1 in default; dim = 1 (column, top to bottom) dim = 2 (row, left to right) cumsum(x, [dim]) cumprod(x, [dim]) dot(x, y) inner product of x and y cross(x, y) cross product of x and y Constants eps realmax realmin nan NaN i or j File I/O • Like C language • Read from file filepointer = fopen(‘filename’); variable = fscanf(filepointer, format, [m n]); fclose(filepointer); File I/O Example fp = fopen('sinx.txt'); A = fscanf(fp, '%g %g', [2 inf]); fclose(fp); >> A = A' A = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416 0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0 File I/O % load filename x = filename(m, n) load sinx.txt A = sinx.txt(:, 1:2); >> A A = 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416 0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0 % A = sinx.txt(inf, 1:2); Random Number Generators 均勻分佈亂數 rand 常態分佈亂數 randn 常態亂數(Normal (Gaussian))-normrnd 貝他亂數(Beta)-betarnd 二項式亂數(Binomial)- binornd X's亂數(Chi square)-chi2rnd 極值亂數(Extreme value)-evrnd 指數亂數(Exponential)-exprnd F亂數(F)-frnd 伽瑪亂數(Gamma)-gamrnd 伽瑪亂數(Gamma (unit scale))-randg 幾何亂數(Geometric)-geornd 超幾何亂數(Hypergeometric)-hygernd 反威夏亂數(Inverse Wishart)-iwishrnd 常態對數亂數(Lognormal)-lognrnd 多變異亂數(Multivariate normal)-mvnrnd 多變T亂數(Multivariate t)-mvtrnd 負二項式亂數(Negative binomial)-nbinrnd 非中央F亂數(Noncentral F)-ncfrnd 非中央亂數(Noncentral)-nctrnd 非中央X's亂數(Noncentral Chi-square)-ncx2rnd 波義松亂數(Poisson)-poissrnd 定群樣本亂數(finite population)-randsample 魏利亂數(Rayleigh)-raylrnd T亂數(T)- trnd 離散均勻亂數(Discrete uniform)-unidrnd 均勻亂數(Uniform)-unifrnd 魏伯亂數(Weibull)-wblrnd 威夏亂數矩陣(Wishart)-wishrnd % *nd are not “dname.” Random Number Generators random(‘dname', mean, var, m, n) 畫 圖 圖 畫 xy - Plane Basic – plot(…) • x-axis: linear scale • y-axis: linear scale – loglog(…) • x-axis: log scale • y-axis: log scale – semilogx(…) • x-axis: log scale • y-axis: linear scale – semilogy(…) • x-axis: linear scale • y-axis: log scale KER plot(x1) - y-axis adopts the column number plot(x1, y1) plot(x1, y1, LineSpec, ‘PropertyName’, Property value, ‘PropertyName’, Property value, …) - LineWidth, MarkerEdgeColor, MarerFaceColor, MarkerSize, … 2 or More than 2 lines plot(set1, set2, …) plot(set1) hold on; plot(set2) … plot(x1, x2) x = -pi:0.1:pi; y = sin(x); plot(x,y) x = -pi:pi/10:pi; y = tan(sin(x)) - sin(tan(x)); plot(x,y,'--rs',... 'LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',10) LineSpec char color char Line type Char Marker y 黃色 - 實線 . 點 k 黑色 : 點線 o 圓 w 白色 -. 點虛線 x x b 藍色 -- 虛線 + + g 綠色 none 無 * * r 紅色 s Square c 亮青色 d Diamond m 錳紫色 none 無 其它線參數 http://www.mathworks.com/help/techdoc/ref/plot.html Other Properties for Plots axis([xmin, xman, ymin, ymax]) - range of x-axis and y-axis. - the dot out of the range will not be presented. xlabel(‘name for x-axis’) ylabel(‘name for y-axis’) title(‘title for the plot’) test(x, y, text, alignment base, position) - notes for a specific point legend(‘note for line1’, ‘note for line2’, …) grid on; - show the grid line x = -pi:.1:pi; y = sin(x); p = plot(x,y) xlabel('-\pi \leq \Theta \leq \pi') ylabel('sin(\Theta)') title('Plot of sin(\Theta)') text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)',... 'HorizontalAlignment','left') set(p,'Color','red','LineWidth',2) set(gca,'XTick',-pi:pi/2:pi) set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'}) subplot subplot(i, j, #) plot(); #1 #2 #3 #4 #5 #6 #7 #8 subplot(4, 2, 1:2) % #1&#2 subplot(4, 2, [1 3 5]) % #1&#3&#5 Other types of plots boxplot 箱型圖 plotyy 可用兩種不同 scale 的座標 ezplot 函數圖型 bar 長條圖 errorbar 圖形加上誤差範圍 fplot 較精確的函數圖形 polar 極座標圖 hist 累計圖 rose 極座標累計圖 stairs 階梯圖 stem 針狀圖 fill 實心圖 feather 羽毛圖 compass 羅盤圖 quiver 向量場圖 pie 圓餅圖 boxplot x1 = normrnd(5, 1, 100, 1); x2 = normrnd(6, 1, 100, 1); boxplot([x1, x2], 'notch', 'on') boxplot x = randn(100,25); subplot(2,1,1) boxplot(x) subplot(2,1,2) boxplot(x,'plotstyle','compact') plotyy x = 0:0.01:10; y1 = 100 * exp(-0.1*x) .* sin(x); y2 = 0.8 * exp(-0.5*x) .* sin(10*x); [ax, h1, h2] = plotyy(x, y1, x, y2, ‘plot’); set(get(ax(1),‘Ylabel’), ‘String’, ‘左側 y1 函數’) set(get(ax(2),‘Ylabel’), ‘String’, ‘右側 y2 函數’) set(h1,‘Linewidth’,4) set(h2,‘LineStyle’, ‘:’, ‘color’, 'k') xlabel('時間 0-10 \mus') title('指令plotyy之應用') ezplot ezplot(‘u*sin(u) + v*cos(v) - 2') bar x = 1:10; y = rand(size(x)); bar(x, y) errorbar x = linspace(0, 2*pi, 30); y = sin(x); e = std(y) * ones(size(x)); errorbar(x, y, e) fplot fplot(func, range); % sampled more precisely fplot('sin(1/x)', [0.02 0.2]) polar theta = linspace(0, 2*pi); % linespace(start, end, [100 in default]) r = cos(4*theta); polar(theta, r) hist hist(x, number of intervals) x = randn(5000, 1); hist(x, 20) rose X = randn(1000, 1); rose(x) stairs x = linspace(0, 10, 50); y = sin(x) .* exp(-x/3); stairs(x, y) stem x = linspace(0, 10, 50); y = sin(x) .* exp(-x/3); stem(x, y) fill x = linspace(0, 10, 50); y = sin(x) .* exp(-x/3); fill(x, y, 'b') % ‘b’ means blue. feather theta = linspace(0, 2*pi, 20); z = cos(theta) + i*sin(theta); feather(z); compass theta = linspace(0, 2*pi, 20); z = cos(theta) + i*sin(theta); compass(z); pie Y = [10 13 40 50]; subplot(2,2,1), pie(Y) title('1.未加任何標示'); subplot(2,2,2), pie(Y,[0 0 0 1]) title('2.第四部產生爆炸'); subplot(2,2,3), pie(Y,{'東部','西部','南部','北部'}) title('3.設定各組名稱'); subplot(2,2,4), pie(Y,[0 0 1 1],{'東部','西部','南部','北部'}) title('4.設定名稱及南北部爆炸'); References http://bime-matlab.blogspot.com/ http://www.mathworks.com/help/techdoc/