Matlab - Tin học ứng dụng - Chương 7 ppsx

6 471 0
Matlab - Tin học ứng dụng - Chương 7 ppsx

Đang tải... (xem toàn văn)

Thông tin tài liệu

Bài giảng Tin Ứng dụng 2 – Matlab 7 - 55 - 7. CHƯƠNG VII: ĐỒ THỊ KHÔNG GIAN Trong kỹthuật rất cần các biểu đồkhông gian. Thường gặp nhất là các bình đồ (bản đồđịa hình của một khu vực nhỏ). Bên cạnh đó, biểu đồkhông gian còn có thểđược dùng đểbiểu diễn độsâu địa hình hay một trường không gian nói chung (nhiệt độ, khí áp ). Trong tất cảcác trường hợp nói trên, luôn có một biến (z) được biểu diễn theo hai biến không gian trên mặt đất (x, y). 7.1. Các dạng cơbản Các dạng cơbản MatLab hỗtrợnhiều phương pháp biểu diễn sốliệu; trong tài liệu này ta làm quen với một sốloại cơbản, đó là:  Mảng màu (color patch)  Đường đồng mức (contour)  Bềmặt 3 chiều (surface) Hãy bắt đầu với một ví dụđơn giản là mô phỏng địa hình đáy biển của một khu vực giảtưởng được cho trong ma trận z. Đáy biển này có dạng tương tựnhưmặt cắt ngang cân bằng (Dean) theo phương trình: z = - 0.1 y 2/3 Với trục x dọc theo bãi biển và trục y hướng ra khơi. Ta xét lưới tọa độtrên mặt bằng, các điểm nút lưới có phạm vi 0 < x < 200, 0 < y < 200. Khoảng cách giữa các điểm nút lưới theo phương x là Δx = 10, theo phương y là Δy = 4. Nghĩa là tọa độcủa tất cảcác điểm nút lưới có dạng: ⋮x i , y i ⋮= [ ⋮0,0⋮ ⋮10,0⋮ ⋮ ⋮200,0⋮ ⋮0,4⋮ ⋮10,4⋮ ⋮ ⋮200,4⋮ ⋮ ⋮ ⋮ ⋮0,200⋮ ⋮10,200⋮⋮ ⋮200,200⋮ ] Lệnh meshgrid sẽgiúp ta làm điều đó: [x, y] = meshgrid(0:10:200, 0:4:200); (Một lần nữa cần chú ý dấu ; ởcuối câu lệnh, nếu không rất nhiều con sốsẽđược in ra màn hình!) Lệnh meshgrid lấy hai thông số: thông sốvec-tơthứnhất là các tọa độtrên trục x, thông sốvec-tơthứhai là các tọa độtrên trục y. Kết quảta được một ma trận các Bài giảng Tin Ứng dụng 2 – Matlab 7 - 56 - điểm trên một vùng hình chữnhật (51 × 21) có các tọa độtương ứng dựng từcác vec-tơtrên 6 . Sau đó mảng z sẽđược tính từmảng y theo công thức Dean: z = -0.1 * y .^ (2/3); Trong đó cần chú ý phép tính lũy thừa cho từng phần tử. Câu lệnh đơn giản nhất đểhiển thịmả ng màu biểu thịz là: pcolor(x, y, z) Bảng màu mặc định đượ c dùng có tên là jet. 7 Ta có thểthay bảng màu này bằ ng một sốbảng màu khác, chẳng hạn: colormap(gray); pcolor(x, y, z); Cần hiện tên các trục x và y theo cách tương tựnhưta đã làm với biểu đồdạng đường: xlabel('x(m)'); ylabel('y(m)'); Có thểhiển thịthanh chú thích bên cạ nh bảng màu bằng lệnh: colorbar Viết thêm dòng chữz(m) bên cạnh thanh chỉdẫn màu này bằng cách Insert – Text Box. Xóa bỏđường bao của hình chữnhật bằng cách nháy phải chuột – Line Style – None. Chú ý rằng khi hiện các bản đồđịa hình / bản vẽmặt bằng, trong hầu hết các trường hợp ta muốn đặt những tỷlệbằng nhau trên hai trục x và y. Khi đó ta dùng lệnh: axis equal; 6 x và y đều là ma trận 2 chiều. Do các điểm trên lưới xếp theo hàng nên ta nhận thấy các phần tửgiống nhau trên mỗi cột của x (các điểm có cùng tọa độx); và tương tựđối với y. x= [ 0 10 ⋮ 200 0 10 ⋮ 200 ⋮ ⋮ ⋮ 0 10 ⋮ 200 ] và y= [ 0 0 ⋮ 0 4 4 ⋮ 4 ⋮ ⋮ ⋮ 200 200 ⋮ 200 ] 7 Bảng màu jet mặc dù rực rỡnhưng không hiệu quảkhi in trắng đen, thay vào đó nên dùng bảng màu gray. Hình 11: Bảng màu biểu thịđịa hình đáy biển với mặt cắt ngang cân bằng theo Dean Bài giảng Tin Ứng dụng 2 – Matlab 7 - 57 - Tiếp theo ta có khung của đồthịlại cho vừa với bảng màu 8 : axis tight; Bên cạnh cách dùng biểu đồmả ng màu, còn có thểbiểu thịdưới dạng đường đồng mứ c. Cách này thường được dùng với các bả n in lên giấy: [C,h] = contour(x,y,z);9 Các đường đồng mức của đáy biển đã xuấ t hiện song song với trục x, nhưng cần phả i có giá trịsốtrên đường đồng mức: clabel(C,h); Và cũng nhưđối với mảng màu, ta có thể căn chỉnh các trục một cách hợp lý: axis equal tight; xlabel('x(m)'); ylabel('y(m)'); Ta cũng có thểbiểu diễn địa hình dưới dạng không gian (3 chiều) sửdụng lệnh surf hoặc mesh: figure; surf(x, y, z); figure; mesh(x, y, z); Sau đó hãy sửdụng công cụxoay hình bằng cách ấn nút Rotate 3D trên thanh công cụ( ). 8 Hai lệnh trên có thểđược gộp lại thành một lệnh axis equal tight 9 Cách viết này có vẻkhác với câu lệnh thông thường, tuy nhiên theo MatLab, các lệnh vẽđều có thểviết dưới dạng hàm. Chẳng hạn, hãy gõ thửlệnh zzz = plot(t, z). Mặt khác, có gì khác nếu ta gõ lệnh clabel(contour(x,y,z)); ? -3 -3 -3 -2.5 -2.5 -2.5 -2 -2 -2 - 1 . 5 -1.5 -1.5 -1 -1 -1 -0.5 -0.5 -0.5 0 0 0 0 x (m) y (m) 0 50 100 150 200 0 20 40 60 80 100 120 140 160 Hình 12: Đường đồng mức biểu diễn địa hình đáy bi ể n v ớ i m ặ t c ắ t theo Dean Bài giảng Tin Ứng dụng 2 – Matlab 7 - 58 - 7.2. Chỉ định các vị trí trong không gian 2 chiều Khi thể hiện dữ liệu không gian bằng mảng màu, trong một số trường hợp ta phải chỉ ra những vị trí thỏa mãn một điều kiện nào đó. Cách đơn giản nhất là đánh dấu chúng bằng những điểm riêng. Chẳng hạn, hãy chỉra các vịtrí có z < - 3 trong ví dụtrên. Có hai bước nhưsau:  Tìm các chỉsố(i,j) trong ma trậ n có giá trịthỏa mãn z(i,j) < -3  Chấm các điểm xác định bởi x(i,j), y(i,j ) lên mảng màu ind = find(z < -3); hold on; plot(x(ind), y(ind), 'k.'); 7.3. Mặt cắt địa hình Trong nhiều trường hợp cần biểu diễn một mặt cắt địa hình từbiểu đồhai chiều. Và tổng quát hơn, có thểlà phân bốđộsâu nước, áp suất, độmặn, hay bất kì một biến đặc trưng nào dọc theo một tuyến xác định trên mặt bằng. Số liệu của mặt cắt được lấy từ 1 cột (hoặc hàng) từ mảng 2 chiều tương ứng. Chẳng hạn, mặt cắt có x = 100 m (tương ứng với cột thứ 11 (trong số 21 cột) trong ma trận z): Hình 13: Biểu diễn mặt cắt Dean dưới dạng mặt 3 chiều Hình 14: Biểu diễn mặt cắt Dean dưới dạng lưới 3 chiều Hình 15: Đánh dấu trên mảng màu 2 chiều Bài giảng Tin Ứng dụng 2 – Matlab 7 - 59 - ymc1 = y(11,:); zmc1 = z(11,:); plot(ymc1, zmc1, '*-'); xlabel('y (m)'); ylabel('z (m)'); 7.4. Trường véctơ Trong các bài toán kỹthuật thủy động lực thường yêu câu mô phỏng trường dòng chảy. Biểu diễn dòng chảy trong không gian 2 chiều được hỗtrợrất tốt trong MatLab bằng câu lệnh: quiver(x, y, u, v) trong đó x, y là hai ma trận chứa tọa độcủa tất cảcác điểm theo phương ngang (thường được phát sinh bằng lệnh meshgrid); u và v là hai ma trận chứa thành phần lưu tốc của tất cảcác điểm (u là lưu tốc theo phương x, v là lưu tốc theo phương y). Giảsửtrong thưmục hiện thời đã có file data_u.txt và data_v.txt, mỗi file chứa một ma trận giá trịu và v. Khi đó, hai ma trận này được đọc nhưsau: u = dlmread('data_u.txt'); v = dlmread('data_v.txt'); Giảsửu và v đã đọc có kích thước giống nhau = sốđiểm trên trục x × sốđiểm trên trục y: [sizex, sizey] = size(u); Ta muốn biểu diễn lên hình với, chẳng hạn, Δx = 10 m và Δy = 5 m: dx = 10; dy = 5; [x, y] = meshgrid(0:dx:(sizex – 1)*dx, 0:dy:(sizey -1) * dy); figure; quiver(x, y, u, v); xlabel('X(m)'); ylabel('Y(m)'); axis equal tight; Bài giảng Tin Ứng dụng 2 – Matlab 7 - 60 - 0 20 40 60 80 0 10 20 30 40 50 X(m) Y(m) Hình 16: Biểu diễn trường vec-tơ . theo MatLab, các lệnh vẽđều có thểviết dưới dạng hàm. Chẳng hạn, hãy gõ thửlệnh zzz = plot(t, z). Mặt khác, có gì khác nếu ta gõ lệnh clabel(contour(x,y,z)); ? -3 -3 -3 -2 .5 -2 .5 -2 .5 -2 -2 -2 - 1 . 5 -1 .5. thông số: thông sốvec-tơthứnhất là các tọa độtrên trục x, thông sốvec-tơthứhai là các tọa độtrên trục y. Kết quảta được một ma trận các Bài giảng Tin Ứng dụng 2 – Matlab 7 - 56 - điểm trên một vùng. Bài giảng Tin Ứng dụng 2 – Matlab 7 - 55 - 7. CHƯƠNG VII: ĐỒ THỊ KHÔNG GIAN Trong kỹthuật rất cần các biểu đồkhông gian. Thường

Ngày đăng: 21/07/2014, 22:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan