7. CHƯƠNG VII: ĐỒTHỊ KHÔNG GIAN
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
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ươngy).
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;
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ơ
8. PHẦN BÀI TẬP Bài tập số1:
Tính toán sóng theo số liệu sau: T = 8 s, H o = 2 m,α o = 30 o .
•G嫕gi trị cho 3 biến T, Ho, alpha0. •T嫕h Co.
•T嫕h L
o
•Mở 1 file disperse.m bằng cách gõ>> edit disperse
•Với file mới mở hãy gõ vào nội dung sau:function [L] = disperse(h, Lo) L = Lo; err = Inf; while err > 0.1; Ltry = Lo * tanh(2*pi*h / L); err = abs(Ltry - L); L = Ltry; end;
•Tađã thiết lập được hàm tính L từ các giá trị h và Lo cho trước
•Hãy thiết lập một vec-tơh chứa độ sâu khác nhau: 3 m, 3.2 m, ..., 4 m. Tính L tại cácđộ sâu cho bởi h.
•T嫕h C tương ứng với L •Tính sin_alpha theo công thức sinα= sinα o * C / Co(chú ý đơn vị độ !) •T嫕h alpha (d嫕g lệnh asin) •T嫕h Kr = sqrt(cosα o / cosα) •T嫕h Ksh theo c嫕g thức Ksh = •Tính H = Ho × Ksh × Kr
•Viết kết quả ra file ketqua.txt
Bài tập số2
Quan hệ giữa vận chuyển bùn cát S và lưu tốc u có quan hệ dạng: S =aub. Để xác định các hệ số avàbngười ta tiến hành thí nghiệm và thuđược kết quả sau:
u(m/s) 0.2 0.35 0.57 0.68 0.81 0.96 1.12
S
(m3/s.m)
0.0002 0.0018 0.0159 0.0282 0.0609 0.1258 0.2858
1) Hãy nhập các giá trịu và Svào hai vec-tơ, sauđó tính X và Y là logarit tương ứng của uvàS.
2) Vẽ đồ thị điểm của X và Y.
3) Hai hệ số a và b được xác định bằng cách dựa vào quan hệ: logS= loga+blogu, hay Y =bX + log a.
Sử dụng hàm polyvalđể tính bvà logatrong phương trình trên nhưsau: p = polyval(X, Y, 1)
Phần tử đầu của vec-tơp chính là b; phần tử thứ 2 của p bằng log a. Hãy tínha.
4) Vẽ đồ thị đường thẳng: Y = bX + log a lên cùng hệ trục với các điểm chấm ở
câu 2).
Bài tập số3
1) Một chuỗi số liệuđođạc vận tốc dòng chảy được phát sinh bởi: t = 0:0.5:48;
N là dãy số ngẫu nhiên có chiều dài bằng length(t) u = 0.4 + 0.12 sin(2πt / 24) + 0.05 N
2) Tínhứng suất tiếp tại ven bờ, biết C = 60 m0.5/s
τ = ρ g u2
/ C2
Thiết lập subplot 3 hàng × 1 cột.Hai vùng trên vẽ hai đồ thị u ~ t, τ~ t.
3) Nếu bờ có thành phần đất sét với ứng suất tiếp tới hạn τc= 0.65 N/m2, hãy chỉ ra xem có bao nhiêu thời điểm xuất hiện τ>τc.
4) Công thức xói lở đường bờ được xác định bởi: Hãy tính khoảng cách xói lở E.
E = 10 (τ–τc) nếu τ>τc
= 0 trường hợp còn lại
Vẽ E ~ t lên vùng đồ thị dưới cùng tạo bởi subplot.
Bài tập số4:
Cho véctơX = [10 20 30] và Y = [10 40 30].
1. Tính diện tích tam giác tạo bởi 3 đỉnh có tọa độ X(1)Y(1), X(2)Y(2), X(3)Y(3).
2. Tổng quát hơn, tính diện tích đa giác n cạnh (trên mặt phẳng 2 chiều) với tọa độ xi và yi của đỉnh thứ i cho bởi phần tử thứ i của véctơX và Y tươngứng (do đó X và Y là 2 véctơcó cùng chiều dài = n).
LỜI GIẢI
Bài tập số1:
Hướng dẫn: tạo mộtscript file có tên baitap1.m, soạn thảo nội dung dưới đây, và ghi lại. Sau đó chạy file này, ta sẽ thu được kết quả.
% baitap1 % Inputs: T, H0, alpha0 % Outputs: C0, L0, L %--- clear all; g=9.81; T=8; H0=2; alpha0=30; %--- L0=g*T^2/(2*pi) C0 = L0/T; h=[3:0.2:4] % n=length(h); % for i = 1:n
% L(i)=disperse(h(i), L0); % end;
L = disperse(h,L0); % Wave length
C=L/T % Wave celerity
sin_alpha=sin(alpha0)/C0*C
alpha = asin(sin_alpha) % arcsin
Kr=sqrt(cos(alpha0)./cos(alpha)) % Refraction coefficient
k=2*pi./L % Wave number
Ksh=sqrt(1./tanh(k.*h)/(1+2*k.*h/sinh(2*k.*h))) % Shoaling coefficient
H=H0*Ksh.*Kr % Wave height
Bài tập số2:
Hướng dẫn: tạo một script file có tên baitap2.m, soạn thảo nội dung dưới đây, và ghi lại. Sau đó chạy file này, ta sẽ thu được kết quả.
(Bài này làm theo các bước nhưtrên lớp: tính log(u), log(S), vẽ lên trục tọa độ
thường (không vẽ lên trục loga vì ở đây ta đã tính giá trị của loga rồi), và xácđịnh
các hệ số a, b của đường thẳng một cách gần đúng trênđồ thị).
Bài tập số3:
Hướng dẫn: tạo một script file có tên baitap3.m, soạn thảo nội dung dưới đây, và ghi lại. Sau đó chạy file này, ta sẽ thu được kết quả.
clear all; t=0:0.5:48 N=rand(1,length(t)); u=0.4+0.12*sin(2*pi*t/24)+0.05*N plot(N); hold on; plot(u,'+'); C=60; Rho = 1000; g=9.81; To = Rho*g/C^2*u.^2 plot(t,To) hold on grid on Toc = 0.65
10 * (To - Toc) .* (To > Toc) + 0 .* (To <= Toc)
Bài tập số4:
Hướng dẫn: Lần lượt thực hiện các bước sau:
function Sdagiac = dientich(x,y); % Tinh dien tich da giac
n = length (x); m = length (y); if m ~=n
'Error: 2 vecto X va Y can co chieu dai bang nhau!' else
Sdagiac = 0; for i = 1:(n-1)
Sdagiac = Sdagiac + 0.5*(y(i)+y(i+1))*(x(i+1)-x(i)); end
Sdagiac = Sdagiac + 0.5*(y(n)+y(1))*(x(1)-x(n)); end
2. Vừa rồi ta đã tạo ra một hàm mới trong Matlab, với tên là hàm dientich. Sử dụng hàm này ta có thể dễ dàng tính được diện tích đa giác nói chung và tam giác nói riêng bằng cách gọi hàm từcửa sổ nhập lệnh
>> dientich(X,Y)
Lưu ý rằng hàm tính diện tích ngầm định rằng 2 véc tơX, Yở đây đã chứa số liệu cho trước về tọa độ các đỉnh của đa giác theo nhưquy ước. Hơn nữa, khi nhập tọa độ ta đánh số các đỉnh từ 1 đến n theo chiều kim đồng hồ.
*Để tính diện tích tam giác Svới chiều dài 3 cạnh cho trước làa, b, c, bạn có thể thử thuật toán khác nhưsau:
) )( )( (p a p b p c p S với p=(a+b+c)/2 là một nửa chu vi.