intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giáo trình tính toán khoa học - Chương 9

Chia sẻ: Nguyen Thanhvan | Ngày: | Loại File: PDF | Số trang:17

334
lượt xem
67
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Rất nhiều các bài toán khoa học, kĩ thuật và kinh tế cần được diễn giải và phân tích để rút ra các thông tin liên quan. Đặc biệt trong hầu hết lĩnh vực mô phỏng các quá trình khoa học và công nghệ chúng ta phải đối mặt với những tập dữ liệu rất lớn mà không thể phân tích mà thiếu các phần mềm biểu diễn dữ liệu.

Chủ đề:
Lưu

Nội dung Text: Giáo trình tính toán khoa học - Chương 9

  1. Chương 9 ĐỒ HỌA TRONG MATLAB 9.1 ĐỒ HỌA HAI CHIỀU Rất nhiều các bài toán khoa học, kĩ thuật và kinh tế cần được diễn giải và phân tích đ ể rút ra các thông tin liên quan. Đặc biệt trong hầu hết lĩnh vực mô phỏng các quá trình khoa học và công ngh ệ chúng ta phải đối mặt với những tập dữ liệu rất lớn mà không thể phân tích m à thiếu các phần mềm biểu diễn dữ liệu. Trong ph ần n ày chúng ta sẽ nghiên cứu các công cụ biểu diễn dữ liệu h ai chiều và quá trình biến đổi dữ liệu theo thời gian. Trong các chương trước, chúng ta đ ã được làm quen với một số lệnh vẽ đồ thị 2 chiều như : plot, xlabel, ylabel, text, gtext, loglog, semilogx, semilogy, axis, grid on, hold on, figure và legend. 9.1.1 H ệ toạ độ Semilogarithm Các thủ tục loglog,semilogx, semilogy thích hợp các tập dữ liệu biến đổi lớn, đặc biệt các quá trình biến đổi (tiệm cận) theo h àm mũ, h àm lu ỹ thừa. x Thí dụ 1. Vẽ đồ thị của h àm f ( x)  bằng plot và semilogy: 1  ex x Hình 9.1 Vẽ đồ thị hàm f ( x)  bằng hàm PLOT 1  ex 228
  2. x Vẽ đồ thị hàm f ( x)  b ằng hàm SEMILOGY Hình 9.2 1  ex 9.1.2 Hệ toạ độ cực Trong một số ứng dụng, việc mô tả b ài toán trong hệ toạ độ n ào đó có lợi hơn là mô tả dữ liệu trong toạ độ Đề-các chuẩn. Nó tạo cho ta cảm giác như đang quan sát dữ liệu từ một hệ toạ độ xác định. Một trong các hệ toạ độ như vậy là h ệ toạ độ cực, trong đó dữ liệu được đư ợc cho bởi khoảng cách từ cực và các góc giữa vector bán kính với một trục cố định. Thí dụ như nghiên cứu tốc độ của thuyền buồm chịu ảnh hưởng của tốc độ và hướng gió. y M (x,y) (r,  ) r  O x Hình 9.3 Hệ tọa độ Đề các và h ệ tọa độ cực  Hàm POLAR Cú pháp: polar (Theta, R,Symbol) 229
  3.  Giải thích. Hàm POLAR vẽ đồ thị hàm số trong hệ tọa độ cực. - Theta : vector trị số góc từ trục cố định đến bán kính, đơn vị đo là radian; - R : giá trị của hàm R=R(Theta) ; - Symbol là một xâu qui định kiểu vẽ (xem plot). Thí dụ 2. >> t = 0:.01:2*pi; >> polar(t,sin(2*t).*cos(2*t),'--r') Hình 9.4 Vẽ đồ thị h àm số b ằng hàm POLAR 9.1.3 Lưu trữ đồ thị Có thể lưu trữ đồ thị vào file hoặc in đồ thị bằng h àm PRINT. Cú pháp: print [-driver] [-options] [ filename] Giải thích. : in đồ thị hiện tại ra máy in mặc định; prin t print –f2 hay print(2 ) : in đồ thị figure (2); : lưu đồ thị dưới dạng file PostScript, mặc định *.ps. print  Tham số driver: thường bắt đầu bằng chữ ‘-d’. : đ ưa figure hiện tại ra máy in đen trắng; -dwin : đ ưa figure hiện tại ra máy in màu; -dwinc : đ ưa figure vào clipboard dưới dạng Bitmap file; -dbitmap 230
  4. : đưa figure vào clipboard dư ới dạng JPEG image với chất -djpeg lượng nn (m ặc định nn=75). -dps : đưa figure vào file PostScript (*.ps) dùng cho máy in đen trắng; -dpsc : đưa figure vào file PostScript (*.ps) dùng cho máy in màu; -deps : đưa figure vào file Encapsulated PostScript (*.eps) dùng máy in đen trắng; -depsc : Đưa figure vào file Encapsulated PostScript (*.eps), máy in màu.  Tham số options: chỉ sử dụng cho PostScript driver. -append : th ực hiện append, không overwrite đối với PostScript file; -r : xác định độ phân giải dpi cho hình vẽ. Mặc định là -r150. Thí dụ 3. >> print -depsc -r300 Matine %% Lưu Figure hiện tại với độ phân giải %% 300 dpi vào file Matine.eps. Có thể sử dụng lệnh print như gọi một h àm: print(‘-device’,’-options’,’ filename’) Thí dụ 4. >> print(‘-depsc’,’-r300’,’Matin’) 9.1.4 Biểu đồ (Bar chats) Khi xử lí các dữ liệu thống kê, có thể biểu diễn chúng dưới d ạng một biểu đồ bằng hàm BAR như là một đồ thị 2 chiều. Các phương án sử dụng h àm BAR: bar(X,Y) : vẽ biểu đồ các cột của một ma trận Y cỡ M×N như M nhóm dữ liệu của N bộ số liệu. Vector X ph ải đơn điệu tăng hoặc giảm. bar(Y) : mặc định của X là 1:M. bar(X,Y,width) hoặc bar(Y,width ) : width xác định độ rộng của các cột trên biểu đồ. Mặc định của width là 0.8. Nếu width > 1 thì các cột biểu đồ sẽ chồng ken vào nhau. bar(X,Y,'grouped') : vẽ biểu đồ theo nhóm cột đứng (mặc định). bar(X,Y,'stacked') : vẽ biểu đồ theo nhóm xếp đống . Thí dụ 5. >> Y=hilb(10); y=Y([1:3],[1:2:9]); >> figure(1), bar(y); >> xlabel(‘ Truc I’);ylabel(‘Truc J’); >> figure(2), bar(y,’stacked’); >> xlabel(‘ Truc I’);ylabel(‘Truc J’); 231
  5. Figure 1 Hình 9.5 Đồ thị bar ‘group’ Figure 2 Hình 9.6 Đồ thị bar ‘stacked’ 9.1.5 Biểu diễn sai số ( Error Bars) Khi xử lí dữ liệu, ta thường quan tâm đến mức độ thiếu chính xác của chúng do dung sai thiết bị hay sự không hoàn hảo của môi trường thực nghiệm. Để mô tả sai số có thể sử dụng hàm ERRORBAR . 232
  6.  Các phương án sử dụng: errorbar(X,Y,L,U) : Vẽ đồ thị của vector Y đối với vector X cùng với các khoảng sai số xác định bởi các vector L và U. L và U chứa các sai số giới hạn dưới và trên của mỗi phần tử của Y. Mỗi ERRORBAR có độ cao là L(i) + U(i) được vẽ bởi một doạn thẳng. Các vector X,Y,L và U ph ải cùng cỡ. errorbar(X,Y,E) hay errorbar(Y,E): Vẽ đồ thị của vector Y với ERRORBAR có độ cao là L(i) + U(i) được vẽ bởi một doạn thẳng. Các vector đối xứng L=U=E Thí dụ 6. >> x = 1:10; y = sin(x); >> e = std(y)*ones(size(x)); >> errorbar(x,y,e); % Vẽ errorbar với độ lệch chuẩn đối xứng. Hình 9.7 Đồ thị ERRORBAR 9.2 MỘT SỐ HÀM ĐỒ HỌA 3 CHIỀU Trong các chương trư ớc ta đ ã làm quen với một số thủ tục và hàm liên quan đến đồ thị 3 chiều như: plot3, view... Sau đây là một số hàm vẽ đồ thị 3 chiều khác: 9.2.1 Hàm CONTOUR Cú pháp: contour(Z) contour(Z,N) contour(Z,V) 233
  7. contour(X,Y,Z) contour(X,Y,Z,n) contour(X,Y,Z,V) contour(...,'linespec') [C,H] = contour(...) Giải thích. Hàm CONTOUR vẽ đồ thị đường mức 2 chiều. contour(Z): Vẽ đồ thị đường mức của ma trận Z, được xem như độ cao so với một mặt phẳng. Các giá trị V độ cao của các đường mức đư ợc chọn tự động. contour(X,Y,Z): X và Y xác định toạ độ (x,y) của mặt mức Z=F(X,Y) (Như trong SURF). contour(Z,N) và contour(X,Y,Z,N): vẽ N đường mức lồng nhau với các giá trị độ cao được chọn tự động. contour(Z,V) và contour(X,Y,Z,V): vẽ N = length(V) đư ờng mức với các giá trị độ cao xác định bởi vector V. [C,H] = contour(...), C = contour(...): Trả về ma trận C như trong contourc và vector cột h đ iều khiển các đối tượng LINE hoặc PATCH (mảnh). Cả hai đối tượng này được sử dụng làm tham số trong clabel. Màu đường mức là các màu chuẩn của bản đồ. contour(...,'linespec'): Vẽ các đối tượng LINE với màu và kiểu đường xác định bởi linespec. Sử dụng mã R. Pawlowicz để quản lý các tham số mặt và nhãn đường mức. Thí dụ 7. >> [C,H] = contour(peaks(20),10); colormap autumn Hình 9.8 Đồ thị CONTOUR 234
  8. 9.2.2 Hàm CONTOUR3 Cú pháp: contour3 (Z) contour3 (Z,N) contour3 (Z,V) contour3 (X,Y,Z) contour3 (X,Y,Z,n) contour3(X,Y,Z,V) contour3(...,'linespec') [C,H] = contour3(...) Giải thích. Hàm CONTOUR3 vẽ đồ thị contour 3 chiều. contour3(...) có các tham số giống như contour(...),chỉ khác ở cách vẽ tương ứng với các mức Z tương ứng trong hệ trục 3-D. Thí dụ 8. [X,Y] = meshgrid([-2:.25:2]); Z = X.*exp(-X.^2 -Y.^2); contour3(X,Y,Z,30); surface(X,Y,Z,'EdgeColor',[.8 .8 .8],'FaceColor','none'); g rid off; view(-15,25); colormap cool; Hình 9.9 Đồ thị CONTOUR3 235
  9. 9.2.3 Hàm CLABEL Cú pháp: clabel(cs,h ) clabel(cs,h,V) Giải thích. Hàm CLABEL gắn nhãn cho các đường mức. clabel(cs,h ) : Gắn nhãn độ cao cho đồ thị contour hiện thời. Các nhãn được xoay và chèn vào các đư ờng mức. cs và h là các ma trận được tính toán từ các đói tượng điều khiển của CONTOUR, CONTOUR3 hay CONTOURF. clabel(cs,h,V) : Chỉ gắn nhãn cho các đường mức được cho trong vector V. Mặc định là gắn nhãn cho tất cả các đường mức. Vị trí gắn nhãn được chọn ngẫu nhiên. clabel(cs,h,’manual’) : Gắn nh ãn tại vị trí nháy (click) chuột. Kết thúc bằng phím Enter hoặc nháy chuột ra ngoài đồ thị. h = clabel(...) : Trả về giá trị của chế độ gắn nhãn dạng text. 9.2.4 Hàm PEAKS Cú pháp: : Tạo ra một ma trận cỡ 49×49; Z = peaks Z = peaks(N) : Tạo ra một ma trận cỡ N×N; Z = peaks(V) : Tạo ra một ma trận cỡ N×N, với N=length(V); Z = peaks(X,Y) : Hàm Z được tính theo X và Y. X, Y và Z có cùng cỡ. Giải thích. PEAKS là hàm m ẫu 2 biến để minh hoạ cho các thủ tục vẽ đồ thị. Khi gọi peaks, peaks(N), peaks(V) hay peaks(X,Y) Matlab vẽ một đồ thị dạng SURF từ h àm PEAKS. Thí dụ 9. clear ; p=peaks(30); cs=contour(p,10); clabel(cs,’manual’); g rid on; Thí dụ 10. >> peaks z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ... - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2)... - 1/3*exp(-(x+1).^2 - y.^2) 236
  10. Hình 9.10 Đồ thị CONTOUR của hàm PEAKS và tác dụng của CLABEL Hình 9.11 Đồ thị SURF của hàm PEAKS 9.2.5 Các mặt tham số Xét một mặt cong, trong đó toạ độ của các điểm trên mặt cong phụ thuộc vào các tham số. Thí dụ một mặt cong đ ược xác định như sau: x = f(,), y =g(,), z =h(,), trong đó các tham số  và  xác định trong một khoảng nào đó. Ch ẳng hạn, một mặt cầu viết dưới dạng tham số như sau: x = R coscos , y = R sincos z= R sin. 237
  11. Nh ững mặt phức tạp hơn có thể được xây dựng theo cách này. Chúng ta có thể cấu trúc một mặt cong bằng cách xoay một đường cong quanh một điểm cố định. Phương trình của Hình 3 lá có d ạng: r = a sin3 , [0,2], với r là kho ảng cách tính từ gốc toạ độ và a là độ dài một lá. Các tham số toạ độ cực n ày dễ dàng chuyển sang toạ độ Đề các: x= r cos= a sin3cos, y =r sin = a sin3sin. Tiếp theo ta chuyển Hình 3 lá xa gốc toạ độ một khoảng cách R và quay tròn hình đó quanh trục z. Khi đó ta có: x= (R + a sin3 cos) sin y= (R + a sin3cos)cos z= asin3sin  9.2.5 Hàm MESH: Vẽ đồ thị màu dạng lưới 3 -D.  Các phương án sử dụng: mesh(X,Y,Z,C): vẽ đồ thị dạng lưới xác định bởi 4 ma trận X, Y, Z, C. Điểm quan sát xác định bởi VIEW. Phạm vi của các trục toạ độ xác định bởi phạm vi của X, Y, Z. Các ma trận X và Y phải có cùng cỡ với Z, mỗi nút lưới là bộ ba (X(i,j),Y(i,j), Z(i,j)). Thang màu xác đ ịnh bởi C ho ặc xác định bởi giá trị hàm CAXIS h iện tại , như chỉ thị trong COLORMAP hiện tại. mesh(X,Y,Z): sử dụng C = Z, n ghĩa là màu tỉ lệ với chiều cao. mesh(x,y,Z) và mesh(x,y,Z,C): nếu x, y là 2 vector với length(x) = n, length(y) = m thì [m,n] = size(Z). Khi đó mỗi nút lưới là bộ ba (x(j), y(i), Z(i,j)). Chú ý: x tương ứng với cột của ma trận Z , y tương ứng với h àng của ma trận Z. mesh(Z) và mesh(Z,C): sử dụng giá trị mặc định x =1:n và y =1:m với [m,n] = size(Z). h = mesh(…): trả về các tham số điều khiển đối tượng SURFACE. Chú ý: Các hàm AXIS, CAXIS, COLORMAP, HOLD, HIDDEN và VIEW SHADING xác đ ịnh thuộc tính của h ình vẽ, các trục toạ độ, bề mặt cong, màu sắc... cho hàm MESH. Thí dụ 11. Vẽ đồ thị mặt cong tham số của các phương trình trên: % MATLAB code demontrating cropping surfaces clear colormap(aquamarine); n=50; phi=[ 0:2*pi/n:2*pi]; 238
  12. psi=[ 0:2*pi/n:2*pi]; R = 5 ; r = 2 ; a = 0.5 ; for i=1:length(phi) for j =1:length(psi) z(i,j) = (r + a*sin(6*psi(j)))*sin(phi(i)); y(i,j) = R*sin(psi(j)) + (r + a*sin(6*psi(j)))*cos(phi(i))*sin(psi(j)); x(i,j) = R*cos(psi(j)) + (r + a*sin(6*psi(j)))*cos(phi(i))*cos(psi(j)); c(i,j) =0.8; end; end; mesh(x,y,z,c); axis([-7 7 -7 7 -7 7]); axis('square'); Hình 9.12 Đồ thị d ạng MESH của mặt cong 3 lá 9.2.6 Hàm SURF: Vẽ đồ thị màu dạng mặt cong 3-D  Các phương án sử dụng: surf(X,Y,Z,C): vẽ đồ thị dạng mặt cong xác định bởi 4 ma trận X, Y, Z, C. Điểm quan sát xác định bởi VIEW. Phạm vi của các trục toạ độ xác định bởi phạm vi của X, Y, Z. Các ma trận X và Y phải có cùng cỡ với Z. Các điểm trên mặt tương ứng bộ ba (X(i,j),Y(i,j), Z(i,j)). Thang màu xác đ ịnh bởi C ho ặc xác định bởi giá trị hàm CAXIS hiện tại , như chỉ thị trong COLORMAP hiện tại. 239
  13. surf(X,Y,Z): sử dụng mặc định C = Z, nghĩa là màu tỉ lệ với chiều cao. surf(x,y,Z) và SURF(x,y,Z,C): nếu x, y là 2 vector với length(x)=n, length(y)=m thì [m,n] = size(Z). Khi đó các đ ỉnh của ô m àu là bộ ba (x(j), y(i), Z(i,j)). Chú ý là x tương ứng với cột của ma trận Z , y tương ứng với h àng của ma trận Z. surf (Z) và surf (Z,C): sử dụng giá trị mặc định x = 1:n và y = 1:m, với [m,n] = size(Z). h =surf (…): trả về các tham số điều khiển đối tượng SURFACE. Chú ý: Các hàm AXIS, CAXIS, COLORMAP, HOLD, HIDDEN và VIEW SHADING xác đ ịnh thuộc tính của h ình vẽ, các trục toạ độ, bề mặt cong, màu sắc... cho hàm SURF. Thí dụ 11. clear ; colormap(gray); % Xác đ ịnh thang màu cho đồ thị n=65; theta =pi*[-n:2:n]/n; phi=(pi/2)*[-n:2:n]'/n; R = 5; X= R*cos(phi)*cos(theta); Y=R*cos(phi)*sin(th eta); Z=R*sin(phi)*ones(size(theta)); [xd,yd,C]=peaks(n); cmax=max(max(C)); cmin=min(min(C)); C = (C-cmin*ones(size(C)))/(cmax-cmin); surf(X,Y,Z,C); axis([ -11 11 -11 11 -11 11]);axis('square'); phi = [ 0:2*pi/n:2*pi]; psi=phi; R=9; r =1.5; for i=1:length(phi) for j=1: length(psi) z(i,j)= r/10*sin(phi(i)); y(i,j)=R*sin(psi(j))+ r*cos(phi(i))*sin(psi(j)); x(i,j)=R*cos(psi(j))+ r*cos(phi(i))*cos(psi(j)); 240
  14. c(i,j) = 1; end; end; hold on; surf(x,y,z,c); hold off; view([120 25]); grid on; xlabel(' X'); ylabel(' Y');zlabel('Z'); Hình 9.13 Minh họa đồ thị dạng SURF của mặt cong trong thí dụ 12 Thí dụ 13. clear ; colormap(gray); n=65; theta =pi*[-n:2:n]/n; phi = [ 0:2*pi/n:2*pi]; psi=phi; R = 5 ; a=1; for i=1:length(phi) for j=1: length(psi) z(i,j)= -a*sin(3+phi(i))*sin(phi(i));; y(i,j)=(R+a*sin(3*phi(i))*cos(phi(i)))*cos(psi(j)); x(i,j)=(R+a*sin(3*phi(i))*cos(phi(i)))*sin(psi(j)); 241
  15. c(i,j) = 0.8; end; end; mesh(x,y,z,c); xoff =R; for i=1:length(phi) for j=1: length(psi) y(i,j)= a*sin(3+phi(i))*sin(phi(i));; z(i,j)=(R+a*sin(3*phi(i))*cos(phi(i)))*cos(psi(j)); x(i,j)=xoff+(R+a*sin(3*phi(i))*cos(phi(i)))*sin(psi(j)); c(i,j) = 0.8; end end; hold on; mesh(x,y,z,c); grid on; axis([ -6 10 -6 10 -6 10]);axis('square'); hold off; view([-20 25]); xlabel(' X'); ylabel(' Y');zlabel('Z'); Hình 9.14 Minh họa đồ thị dạng SURF của mặt cong trong thí dụ 13 242
  16. 9.3 HOẠT HÌNH  Thủ tục MOVIE Cú pháp: movie(M,N,fps) Giải thích. Thủ tục MOVIE trình chiếu các khuôn h ình (frame). movie(M): biểu diễn dãy M m ột lần. M phải là dãy các khuôn hình thường được tạo bởi lệnh GETFRAME. movie(M,N): biểu diễn N lần. Nếu N
  17. x2 = (R+r*cos(phi))*cos(2*j/n*pi); y2 = (R+r*cos(phi))*sin(2*j/n*pi); z2 = r*sin(phi); plot3(x1,y1,z1,x2,y2,z2); axis([-Rmax Rmax -Rmax Rmax -Rmax Rmax]); axis('square');grid on; M(:,j)=getframe; end Thực hiện trình chiếu: %% Biểu diễn lặp lại 15 lần với 10 hình/giây >>movie(M,15,10); Hình 9.15 Chiếc vòng tròn con chuyển động quanh vòng tròn lớn Chương trình 2 (Hàm PEAKS chuyển động nhấp nhô tạo h ình sóng) clear ; n=32; for j=1:n mesh(cos(2*pi*j/n)*peaks(30)); axis([0 30 0 30 -10 10]); axis('square');grid on; M(:,j)=getframe; end 244
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2