bài 5: Đồ hoạ Matlab MATLAB có công cụ hữu hiệu để hiển thị véc tơ ma trận dạng đồ thị nh việc thích in ấn đồ thị Trong chơng đề cập vài hàm quan trọng đồ hoạ Matlab đa số thí dụ điển hình I Tạo đồ thị Hàm plot có nhiều dạng, phụ thuộc vào biến đầu vào: Nếu Y véc tơ, hàm plot(Y) in đồ thị Y phụ thuộc vào số véc tơ Nếu X, Y hai véc tơ độ lớn hàm PLOT(X,Y) in đồ thị hàm Y(X) Ví dụ: để vẽ đồ thị hàm Sin với trị số hoành độ từ đến Pi ta dùng dòng lệnh sau: x=0:pi/100:2*pi; y=sin(x); plot(x,y) Nếu đối số hàm bao gồm nhiều X, Y, Hàm đa đợc nhiều đồ thị hình Matlab tự động hiển thị đồ thị với màu khác Ví dụ : Nếu ta có: y1= sin(x); y2=sin(x-0.25); y3=sin(x-0.5) Hàm : plot(x,y1,x,y2,x,y3) đa đồ thị nh hình vẽ Trong hàm plot ta định kiểu đờng nét, màu sắc kiểu đánh dấu điểm nút với cú pháp: plot(x,y,'color_style_marker') Trong color_style_marker 1,2 ký tự phân cách dấu ngoặc đơn định kiểu đờng nét, màu sắc kiểu đánh dấu điểm nút Các chữ màu sắc bao gồm: 'c', 'm', 'y', 'r', 'g', 'b', 'w', 'k' Tơng ứng với màu xanh dơng, màu gạch non, màu vàng, màu đỏ, màu xanh, màu nớc biển, màu trắng đen Các ký tự kiểu đờng bao gồm '-' nét liền, '- -' đờng gạnh, ':' đờng chấm, '-.' đờng chấm gạch, 'none' không vẽ đờng Các ký tự để đánh dấu điểm bao gồm: '+', 'o', '*', 'x' Ví dụ: câu lệnh plot(x,y,'y:+') vẽ đồ thị đờng chấm chấm màu vàng có dấu + đánh dấu điểm nút Chú ý: Lệnh plot tự động mở cửa sổ đồ hoạ Nếu cửa sổ tồn lệnh plot mặc định sử dụng cửa sổ Để mở cửa sổ đa thành thời ta dùng lệnh figure Để đa cửa sổ mở thành thời ta dùng câu lệnh figure(n), n số tiêu đề cửa sổ Vẽ thêm đờng cong vào đồ thị có : Lệnh hold cho phép bạn thêm đờng cong vào đồ thị có Nếu bạn đặt chế độ hold on Matlab không xoá đồ thị có vẽ thêm đờng cong gọi lệnh vẽ Ví dụ: [x,y,z] = peaks; contour(x,y,z,20,'k') hold on pcolor(x,y,z) shading interp Câu lệnh Contour vẽ đờng chu tuyến tạo hàm peaks Hold on đảm bảo cho câu lệnh pcolor đợc phối hợp với đờng cong vẽ lệnh contour cửa sổ II Lệnh Subplot Hàm subplot chia cửa sổ đồ hoạ nhiều phần để thị nhiều đồ thị cửa sổ Cú pháp : sublot(m,n,p) Trong m,n,p số nguyên, chia cửa sổ đồ hoạ m hàng n cột đ a phần cửa sổ thứ p thành thời Chỉ số cửa sổ đợc xác định từ phải qua trái từ xuống dới Ví dụ: Các câu lệnh sau: t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(4*cos(t)); subplot(2,2,1) mesh(X) subplot(2,2,2); mesh(Y) subplot(2,2,3); mesh(Z) subplot(2,2,4); mesh(X,Y,Z) cho ta kết nh hình vẽ III Điều khiển trục toạ độ câu lệnh axis Hàm axis có số tuỳ chọn để thay đổi tỷ lệ, hớng tỷ lệ Thông thờng matlab xác định giá trị lớn nhỏ liệu để chọn vùng vẽ tơng xứng Lệnh axis quy định lại giá trị theo yêu cầu ngời dùng: axis([xmin xmax ymin ymax]) Lệnh axis chấp nhận số từ khoá để điều khiển việc vẽ trục: axis square : Tạo cho toàn trục x y có chiều dài axis equal : tạo khoảng chia trục X Y có chiều dài nh axis auto : Trả lại chế độ mặc định việc vẽ trục axis on : Viết tên trục đánh dấu điểm chia trục axis off : Huỷ bỏ việc viết tên trục đánh dấu điểm chia trục Ví dụ: Các câu lệnh x = 0:.025:pi/2; plot(x,tan(x),'-ro') Sẽ sử dụng hệ số tỷ lệ tự động sở giá trị Ymax=tan(1.57), có giá trị >1000: Tuy nhiên đồ thị đợc quan hệ hàm số cách rõ nét Kết nhận đợc tốt ta gõ lệnh: axis([0 pi/2 5]) Câu lệnh Grid grid off : không vẽ đờng lới grid on : vẽ đờng lới grid: Đảo ngợc tình trạng hiển thị thời lới IV ghi đồ thị Hàm xlabel, ylabel zlabel : Đa vào dòng giải trục x, y, z Cú pháp: xlabel('string') xlabel(fname) xlabel( ,'PropertyName',PropertyValue, ) h = xlabel( ) Mô tả Mỗi trục đồ thị có nhãn riêng đợc tạo lệnh xlabel, ylabel zlabel xlabel('string') Ghi cho trục x hệ toạ độ thời xlabel(fname) Lấy giá trị hàm fname, với kết chuỗi, sau hiển thị chuỗi bên cạnh trục x xlabel( ,'PropertName',PropertyValue, ) Cho phép gán thuộc tính khác cho nhãn trục x (xem phần đặc tính văn đồ hoạ) Hàm title : Chèn vào dòng tên đồ thị Cú pháp: title('string') title(fname) title( ,'PropertyName',PropertyValue, ) h = title( ) Mô tả Chúng ta dùng lệnh title để viết tiêu đề cho đồ thị: title('string') Dùng chuỗi 'string' làm tiêu đề cho đồ thị title(fname) Xác định giá trị hàm chuỗi fname dùng làm tiêu đề cho đồ thị cửa sổ đồ hoạ thời title( ,'PropertyName',PropertyValue, ) Cho phép quy định thuộc tính khác cho tiêu đề đồ thị Hàm text : chèn văn vào điểm đồ thị Cú pháp: text(x,y,'string') text(x,y,z,'string') text( 'PropertyName',PropertyValue ) Trong x,y toạ độ điểm xuất văn ra: 'string' chuỗi văn đợc xuất Trong trờng hợp muốn xuất nhiều dòng văn bản, thay cho việc đa vào chuỗi 'string', đa vào mảng khối với phần tử mảng dòng văn Ví dụ dới tạo hai mảng khối, dùng cho hàm uicontrol mảng thứ dùng cho lệnh text str1(1) = {'Center each line in the Uicontrol'}; str1(2) = {'Also check out the textwrap function'}; str2(1) = {'Each cell is a quoted string'}; str2(2) = {'You can specify how the string is aligned'}; str2(3) = {'You can use LaTeX symbols like \pi \chi \Xi'}; str2(4) = {'\bfOr use bold \rm\itor italic font\rm'}; str2(5) = {'\fontname{courier}Or even change fonts'}; plot(0:6,sin(0:6)) uicontrol('Style','text','Position',[80 80 250 65], 'String',str1); text(5.75,sin(2.5),str2,'HorizontalAlignment','right') Kết nhận đợc nh sau: Sử dụng biến chuỗi văn Tất biến có liệu dạng chuỗi sử dụng thay cho chuỗi 'string' câu lệnh Ví dụ nh có liệu dạng véc tơ cột chuỗi văn sau: PersonalData = ['Jack Straw ';'489 Main St.';'Wichita KN ']; Để hiển thị liệu hình đồ hoạ ta thực câu lệnh: text(x1,y1,['Name: ',PersonalData(1,:)]) text(x2,y2,['Address: ',PersonalData(2,:)]) text(x3,y3,['City and State: ',PersonalData(3,:)]) Nếu biến chứa liệu số, ta phải chuyển thành liệu chuỗi ví dụ: x = 21; text(xcoord,ycoord, ['Today is the ',num2str(x),'st day.']) in toạ độ (xcoord,ycoord) dòng chữ : 'Today is the 21st day.' Quy định thuộc tính văn đồ hoạ Để quy định vị trí, cách chỉnh, kích cỡ kiểu font chữ văn đồ hoạ đa lệnh xlabel, ylabel, zlabel, text, title , gán thuộc tính cho dòng văn dạng : ( , 'Property Name', ) đây: câu lệnh viết chữ Matlab (xlabel, text, title ) 'Property Name' tên thuộc tính (cần đặt bên dấu ' ') giá trị thuộc tính chuỗi số nguyên, số thực 4.1 Các thuộc tính văn Tên thuộc tính ý nghĩa giá trị ' FontName' Cho phép quy định kiểu font chữ Tên font chữ (dạng chuỗi) 'Position' Quy định vị trí đặt chuỗi văn toạ độ x y (z) điểm: [ x y (z)] 'Rotation' Góc xoay dòng văn Số thực góc tính độ 'VerticalAlignment' Quy định kiểu chỉnh theo ph- 'Top', 'Bottom', 'Middle' ơng thẳng đứng 'HorizontalAlignment' Quy định kiểu chỉnh theo ph- 'Left', 'Center', 'Right' ơng ngang 'FontSize' quy định cỡ chữ số nguyên 4.2 Xuất ký tự đặc biệt Trong chuỗi đối số hàm viết chữ chế độ đồ hoạ ta đa vào ký tự điều khiển để xuất chữ hy lạp, ký hiệu toán học, kiểu font Các mã điều khiển đ ợc đặt sau dấu '\' ví dụ: Bảng ký tự điều khiển dùng để xuất chữ hy lạp biểu tợng Chuỗi ký tự Biểu tChuỗi ký tự Biểu tChuỗi ký tự điều Biểu tđiều khiển ợng điều khiển ợng khiển ợng \alpha \beta \gamma \delta \epsilon \zeta \eta \theta \vartheta \iota \kappa \lambda \upsilon \sim ~ \phi \leq \chi \infty \psi \clubsuit \omega \diamondsuit \Gamma \heartsuit \Delta \spadesuit \Theta \leftrightarrow \Lambda \leftarrow \Xi \uparrow \Pi \rightarrow \Sigma \downarrow \mu \Upsilon \circ \nu \Phi \pm \xi \Psi \geq \pi \Omega \propto \rho \forall \partial \sigma \exists \bullet \varsigma \ni \div ữ \tau \cong \neq \equiv \approx \aleph \Im \Re \wp \otimes \oplus \oslash \cap \cup \supseteq \supset \subseteq \subset \int \in \o \rfloor \lceil \nabla \lfloor \cdot ã \ldots \perp ' \neg \prime \wedge \times x \0 \rceil \surd \mid | Chúng ta điều khiển trực tiếp kiểu font chữ ký tự điều khiển: \fontname Trong trờng hợp tên font chữ phải đặt dấu {} phần điều khiển font chữ, thêm mã điều khiển: \bf - kiểu chữ đậm \it - kiểu chữ nghiêng \sl - oblique font \rm - kiểu chữ bình thờng \fontsize{fontsize} - Định nghĩa cỡ chữ Các số dới đợc định nghĩa ký tự điều khiển "_" "^" thí dụ Để hiển thị ngày thời tiêu đề đồ thị ta dùng hàm: title(date) Để đa vào chuỗi số ta dùng lệnh sau: f = 70; c = (f 32)/1.8; title(['Temperature is ',num2str(c),'C']) Include a variable's value in a title and set the color of the title to yellow: n = 3; title(['Case number #',int2str(n)],'Color','y') Include Greek symbols in a title: title('\ite^{\omega\tau} = cos(\omega\tau) + isin(\omega\tau)') Include a superscript character in a title: title('\alpha^2') Include a subscript character in a title: title('X_1') Ví dụ : đa vào chuỗi ký tự đặc biệt t = -pi:pi/100:pi; y = sin(t); plot(t,y) axis([-pi pi -1 1]) xlabel('-\pi \leq \itt \leq \pi') ylabel('sin(t)') title('Graph of the sine function') text(0.5,-1/3,'\it{Note the odd symmetry.}') Đa đồ thị nh hình vẽ: Các tuỳ chọn lệnh plot Trong lệnh plot ta đa vào tuỳ chọn dạng: plot( ,'PropertyName',PropertyValue, ) Trong 'PropertyName' tên thuộc tính, PropertyValue giá trị thuộc tính mà ta muốn gán: Dới bảng liệt kê thuộc tính đồ thị: Tên thuộc tính ý nghĩa 'LineWidth' điều khiển bề dầy nét vẽ đồ thị kiểu giá trị số nguyên 'MarkerEdgeColor' 'MarkerSize' 'MarkerFaceColor' Điều khiển màu nét vẽ biểu tợng đánh dấu điểm Kích thớc biểu tợng đánh dấu điểm Điều khiển màu biểu tợng đánh dấu điểm ký tự màu ví dụ:'g','y' số nguyên ký tự màu ví dụ:'g','y' Ví dụ: plot(x,sin(2*x),'-mo', 'LineWidth',2, 'MarkerEdgeColor','k', 'MarkerFaceColor','r', 'MarkerSize',12) Các lệnh viết chữ khác 7.1 Lệnh gtext Cú pháp: gtext('string') h = gtext('string') Mô tả gtext hiển thị chuỗi văn vị trí định chuột đồ thị 7.2: lệnh ginput Nhập liệu điểm chuột Cú pháp [x,y] = ginput(n) [x,y] = ginput Description x,y] = ginput(n) Cho phép bạn chọn n điểm chuột trả kết toạ độ x y điểm chọn cho véc tơ x y Bnj kết thúc việc chọn điểm cha nhập đủ n điểm cách ấn Enter x,y] = ginput Cho phép chọn số điểm không hạn chế IV Các đồ thị dạng lới bề mặt Các hàm tạo bề mặt Matlab định nghĩa bề mặt lới toạ độ Z lới mặt xy Dùng đờng thẳng để nối điểm kề Hàm mesh surf hiển thị bề mặt dạng chiều Mesh cung cấp bề mặt dạng khung dây thể màu đờng nối Surf hiển thị màu đờng nối bề mặt Trực quan hoá hàm hai biến Để hiển thị hàm biến z=f(x,y), tạo ma trận x y chứa đựng hàng cột lặp Sau sử dụng ma trận để tính đồ thị hàm Hàm meshgrid chuyển phạm vi đợc định nghĩa véc tơ hai véc tơ x, y thành ma trận X, Y dùng để tính giá trị hàm Các hàng X véc tơ x, cột Y copy véc tơ y Cú pháp: [X,Y] = meshgrid(x,y) [X,Y] = meshgrid(x) [X,Y,Z] = meshgrid(x,y,z) Thí dụ: Hàm [X,Y] = meshgrid(1:3,10:14) Tạo hai mảng x y sau X= 3 3 Y= 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 Hàm Mesh Cú pháp mesh(X,Y,Z) Ví dụ: [X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps; Z = sin(R)./R; mesh(X,Y,Z) Cho đồ thị nh hình vẽ Trong R khoảng cách từ tâm, eps dùng để tránh việc chia cho điểm 0,0 V in ấn đồ thị Tuỳ chọn Print mênu FILE lệnh print dùng để in đồ thị Tuỳ chọn Print gọi hộp thoại cho phép ngời dùng chọn tuỳ chọn in ấn giống nh cacs phần mềm khác, lệnh print cung cấp khả mềm dẻo cho phép điều khiển việc in đồ thị từ m file Kết gửi trực tiếp máy in đợc xếp xắp tệp xác định Các định dạng đầu khác đợc cung cấp (kể PostScript) Thí dụ: câu lệnh sau ghi hình ảnh hình đồ hoạ tệp Postscript cấp có tên magicsquare.eps: print -depsc2 magicsquare.eps Một điều quan trọng cần phải biết trớc khả máy in trớc dùng lệnh print Ví dụ nh tệp Postscript cấp thờng gọn tô bóng nhanh in so với tệp Postscript cấp Tuy nhiên tất máy in có khả làm việc với tệp Postscript cấp ... italic font
m'}; str2 (5) = {'fontname{courier}Or even change fonts'}; plot(0:6,sin(0:6)) uicontrol('Style','text','Position',[80 80 250 65] , 'String',str1); text (5. 75, sin(2 .5) ,str2,'HorizontalAlignment','right')... sổ II Lệnh Subplot Hàm subplot chia cửa sổ đồ hoạ nhiều phần để thị nhiều đồ thị cửa sổ Cú pháp : sublot(m,n,p) Trong m,n,p số nguyên, chia cửa sổ đồ hoạ m hàng n cột đ a phần cửa sổ thứ p thành... cho đồ thị title(fname) Xác định giá trị hàm chuỗi fname dùng làm tiêu đề cho đồ thị cửa sổ đồ hoạ thời title( ,'PropertyName',PropertyValue, ) Cho phép quy định thuộc tính khác cho tiêu đề đồ