Bài giảng Tin học ứng dụng - Học phần II - Matlab
MỤ C LỤ C
1. CHƯ Ơ NG I: MATLAB CĂ N BẢ N . . . 4
1.1. Matlab – ngôn ng ữ củ a t ính t oán kỹ thuậ t . . 4
1.2. Khả n ă ng và nhữ n g ứ ng dụ ng củ a Mat la b . . 4
1.3. Đ ặ c đ iể m củ a Mat lab . . . 6
1.4. Cài đ ặ t và khở i đ ộ ng Ma t la b 7.0. . . 7
1.5. Quả n lý không gia n l àm việ c c ủ a Mat lab. . 8
1.6. Ghi & phụ c hồ i dữ l iệ u. . . 11
1.7. Sử dụ ng He lp . . . . 12
1.8. History & Editing. . . 13
2. CHƯ Ơ NG II: TÍNH TOÁN TRONG MATLAB . . 15
2.1. Matlab - mộ t m á y t í nh c á nhân . . . 15
2.2. Biế n t r o n g Mat la b . . . 16
2.3. Các ki ể u dữ l iệ u - Đ ị nh dạ n g kế t quả . . 17
2.4. Các ki ể u dữ l iệ u số & số phứ c . . . 18
2.5. Các ký tự , Chuỗ i và Vă n b ả n. . . 19
2.6. Các hằ ng số dự n g s ẵ n. . . 20
2.7. Các hàm dự ng sẵ n . . . 20
2.8. Các phép toán quan h ệ . . . 23
2.9. Các phép toán logic. . . 24
2.10. Kế t hợ p nhiề u lệ nh t rên m ộ t dòng; Ẩ n kế t quả t ính. . . 26
3. CHƯ Ơ NG III: VECTƠ. . . 27
3.1. Gi ớ i t hiệ u . . . . 27
3.2. Véctơ hàng. . . . 28
3.3. Vectơ cộ t . . . . 29
3.4. Toán tử ha i chấ m ( : ) . . . 29
3.5. Làm việ c v ớ i vec tơ & ma trậ n (mả ng) . . 30
3.6. Xử lý dữ l iệ u vớ i cá c hàm dự ng sẵ n c h o v e ct ơ & ma trậ n. 32
4. CHƯ Ơ NG IV: MA TRẬ N Đ Ạ I SỐ & TUYẾ N TÍNH. . 34
4.1. Đ ị nh nghĩ a và khở i t ạ o ma t rậ n . . . 34
4.2. Mộ t s ố ma t rậ n đ ặ c biệ t . . . 34
4.3. Các phép toán v ớ i từ n g p h ầ n tử trong ma trậ n . . 35
4.4. Các phép toán v ớ i ma t rậ n . . . 35
4.5. Gi ả i phư ơ ng tr ình đ ạ i số . . . 35
4.6. Gi ả i hệ phư ơ ng tr ình đ ạ i số t uyế n t ính. . 35
4.7. Tìm nghiệ m củ a đ a thứ c . . . 35
4.8. Gi ả i phư ơ ng tr ình phi tuy ế n . . . 35
4.9. Gi ả i phư ơ ng tr ình vi phân . . . 35
4.10. Các l ệ nh hữ u íc h khác . . . 35
Bài giả ng Ti n Ứ ng dụ n g 2 – Matlab 7
- 3 -5. CHƯ Ơ NG V: SCRIPTS VÀ FUNCTIONS (M-FILES). . 37
5.1. Gi ớ i t hiệ u M-file . . . 37
5.2. Biên soạ n và thự c thi M-file . . . 37
5.3. Chú thích (comments). . . 38
5.4. Các hàm m-file (function m- files) . . . 39
5.5 . Câu l ệ nh rẽ nhánh (i f và switch) . . 41
5.6. Vòng l ặ p (f o r và while) . . . 42
5.7. Đ ọ c dữ l iệ u từ fi le và ghi ra file. . . 43
6. CHƯ Ơ NG VI: Đ Ồ THỊ DẠ NG Đ Ư Ờ NG . . 44
6.1. Biể u diễ n đ ư ờ n g quá t rình . . . 44
6.2. Lự a chọ n màu vẽ , nét vẽ . . . 46
6.3. Tạ o c ác c h ú t hích, c hú giả i t rên hình vẽ . . 48
6.4. Xóa đ ư ờ n g bi ể u đ ồ , lư u bi ể u đ ồ . . . 50
6.5. Đ ồ t hị Logar i t . . . 50
6.6. Dãy biể u đ ồ . . . . 52
7. CHƯ Ơ NG VII: Đ Ồ THỊ KHÔNG GIAN . . 55
7.1. Các dạ ng c ơ bả n . . . 55
7.2. Ch ỉ đ ị nh cá c vị t rí t r o n g kh ô n g g ian 2 chi ề u . . 58
7.3. Mặ t cắ t đ ị a hình . . . 58
7.4. Trư ờ ng v é ct ơ . . . . 59
8. PHẦ N BÀI TẬ P . . . . 61
Bài tậ p s ố 1: . . . . 61
Bài tậ p s ố 2 . . . . 62
Bài tậ p s ố 3 . . . . 62
Bài tậ p s ố 4: . . . . 63
LỜ I GIẢ I . . . . 63
Bài tậ p s ố 1: . . . . 63
Bài tậ p s ố 2: . . . . 64
Bài tậ p s ố 3: . . . . 64
Bài tậ p s ố 4: . . . . 64
9. TÀI LIỆ U THAM KHẢ O: . . . 66
ử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 equa 9 Cách viết này có vẻkhác với câu lệnh thông thường, tuy nhiê dưới dạng hàm. Chẳng hạn, hãy gõ thửlệnh zzz = plot(t, 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 Deanl tight n theo MatLab, các lệnh vẽđều có thểviết z). Mặt khác, có gì khác nếu ta gõ lệnh Bài giảng Tin Ứng dụng 2 – Matlab 7 - 58 - 7.2. Chỉ định các vị trí trong không gia Khi thể hiện dữ liệu không gian bằng mảng m chỉ ra những vị trí thỏa mãn một điều kiện nào 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ặ Và tổng quát hơn, có thểlà phân bốđộsâu nư biếnđặc trưng nào dọc theo một tuyến xácđịnh Số liệu của mặt cắt được lấy từ 1 cột (hoặc Chẳng hạn, mặt cắt có x = 100 m (tương ứng v 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ềut cắt địa hình từbiểu đồhai chiều. ớc, áp suất, độmặn, hay bất kì một trên mặt bằng. hàng) từ mảng 2 chiều tương ứng. ới cột thứ 11 (trong số 21 cột) trong n 2 chiều àu, trong một số trường hợp ta phải đó. Cáchđơn giản nhất làđánh dấ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 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ơ- 60 - Bài giảng Tin Ứng dụng 2 – Matlab 7 - 61 - 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 •Ghi lại c嫕 gi trị của H Bài giảng Tin Ứng dụng 2 – Matlab 7 - 62 - •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ố a và b ngườ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à S vào hai vec-tơ, sauđó tính X và Y là logarit tương ứng của u và 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ệ: log S = log a + b log u, hay Y = b X + log a. Sử dụng hàm polyvalđể tính b và log a trong 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ính a. 4) Vẽ đồ thị đường thẳng: Y = b X + 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 . Bài giảng Tin Ứng dụng 2 – Matlab 7 - 63 - 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ột script 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 Bài giảng Tin Ứng dụng 2 – Matlab 7 - 64 - % 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: 1. Tạo một script file có tên baitap4.m, soạn thảo nội dung dưới đây, và ghi lại. Bài giảng Tin Ứng dụng 2 – Matlab 7 - 65 - 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 S vớ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: ))()(( cpbpappS với p=(a+b+c)/2 là một nửa chu vi. Bài giảng Tin Ứng dụng 2 – Matlab 7 - 66 - 9. TÀI LIỆU THAM KHẢO: 1. Matlab R14 - Helps & Demos, The Mathworks, Inc., 2004 2. David F. Griffths, An introduction to Matlab, Department of Mathematics- The University of Dundee – Sweden, 1996 3. John M. Stockie, A Whirlwind Tour of MATLAB for Students of CS 3113, Department of Mathematics and Statistics, University of New Brunswick - Canada, 2003 4. Bill Mason, Introduction to Matlab, Northeastern University - College of Computer and Information Science – USA, 2003. 5. Tobin A. Driscoll, Crash course in MATLAB, Department of Mathematical Sciences - University of Delaware – USA, 2006 6. Nguyễn Hoàng Hải & Nguyễn Việt Anh, Lập trình Matlab và ứng dụng, NXB Khoa học và Kỹ thuật – Hà Nội, 2005 7. Nguyễn Phùng Quang, Matlab & Simulink dành cho kỹ sưđiều khiển tự động, NXB Khoa học & Kỹ thuật – Hà Nội, 2006 8. Nguyễn Phương Thảo, Programming in Matlab, handouts, 2007 9. ĐH. Thủy Lợi, Matlab version 7.0 cơbản, Khóa tin học nâng cao cho cán bộ giảng dạy của dự án 95 bộ NN&PTNT, handouts, 2007 10. Knight A., Basics of MatLab® and beyond, CRC Press, 2000 11. Timothy A. Davis & Kermit Sigmon, Matlab® Primer, Chapman & Hall/CRC 12. R. J. Braun, Beginning Matlab Exercises, Department of Mathematical Sciences – University of Delaware – USA.
File đính kèm:
- Bài giảng Tin học ứng dụng - Học phần II - Matlab.pdf