Tài liệu tham khảo bài giảng Matlab - Tin học ứng dụng ( Nguyễn Bá Tuyên & Nguyễn Quang Chiến ) dành cho sinh viên chuyên ngành kỹ thuật biển gồm 7 chương và phần bài tập - Chương 2 TÍNH TOÁN TRONG MATLAB
Bài giảng Tin Ứng dụng – Matlab CHƯƠNG II: TÍNH TỐN TRONG MATLAB 2.1 Matlab - máy tính cá nhân * Giới thiệ u tốn tửsốhọc: - Các toán tửsốhọ c Matlab hoạ t độ ng theo cú pháp rấ t giố ng với cú pháp ngôn ngữkhác mà bạ n có thểđã quen thuộc nhưTurbo Pascal, C, C++, Fortran, Java - Các tốn tửcơbả n gồm có + - * / ^ = chúng dùng kế t hợp với ngoặ cđ ơn: ( ) Toán tử'=' toán tửgán Toán tử ^ đ ược dùng đ ểcho lũ y thừa: 2^4=16 Với tốn tửnày ta có thểdùng Matlab nhưmộ t máy tính cá nhân đ ơn giả n * Ví dụ: Bạ n có thểđánh lệ nh vào sau dấ u nhắ c lệ nh: >>_ >> A = + 3/4*5 A = 5.7500 >> B = 2^5 - 3*A B = 14.7500 >> A + B ans = 20.5000 Khi tốn tửgán, Matlab trảkế t quảcủ a phép tính gầ n nhấ t vào biế n 'ans = ' (answer) Xem thêm mục 2.2 * Thứtựưu tiên tính tốn: Trong ví dụtrên, Matlab tính nhưthếnào, + 3/(4*5) hay + (3/4)*5? Matlab làm việ c theo thứtựưu tiên sau: đạ i lượng ngoặ cđ ơn, + 3^2 lũy thừa + = 11, * /, làm việ c từtrái qua phả i (3*4/5 = 12/5), + -, làm việ c từtrái qua phả i (3+4-5=7-5), Vì vậ y phép tính ởtrên sẽtheo thứtựư u tiên * Bộcác tốn tửcủa Matlab: (Xem thêm Help/Arithmetic operators) Tốn tử Mơ tả + Cộng - Trừ - 15 - Bài giảng Tin Ứng dụng – Matlab 2.2 .* Nhân mả ng kích thước (nhân phầ n tửvới phầ n tử) / Chia mảng kích thước (chia phần tửvới phầ n tử) \ Chia mảng trái : Toán tửHai chấ m ^ Lũy thừa mảng, lũy thừa phầ n tửvới phầ n tử ' Chuyển vịmảng ' Chuyển vịma trận - ma trậ n liên hợp (MTLH phức) * Nhân (ma trậ n) Đạ i sốtuyế n tính / Chia (ma trận), B/A B*inv(A), xác B/A=(A'\B') \ Chia (ma trận) trái A\B ~ inv(A)*B ^ Lũy thừa ma trận Biến Matlab * Ví dụ: >> 2^3-3 ans = >> ans*6 ans = 30 - Kế t quảcủa phép tính thứnhấ tđ ược Matlab gán cho biế n 'ans', biế n đ ược sử dụ ng cho phép tính thứhai, qua đ ó giá trịcủ a đ ược thay đổ i (được gán lạ i) - Chúng ta có thểsửdụng tên riêng ta đ ặ tđ ểlưu giá trị số >> x = 2^3-3 x = >> y = x*6 y = 30 từđó 'x' có giá trịbằ ng 'y' bằ ng 30 Chúng có thểđ ược sửdụng cho tính tốn tiế p theo - Đây ví dụvềvềcâu lệ nh gán: giá trịđược gán cho biế n Cầ n phả i gán giá trịcho mỗ i biế n trước sửdụng biế n câu lệ nh tiế p theo * Quy tắ c đặ t tên biế n: - Tên biế n hợp lệcấ u tạ o chữvà số, bắ tđ ầ u bằ ng chữ Nên đặ t tên biế n phả n ánh giá trịmà đạ i diệ n cho Các tên sau hợp lệ : - 16 - Bài giảng Tin Ứng dụng – Matlab Hsig, Let2try, Dhaluu, T1, V2, z25c5 Các tên sau không hợp lệ : chu-ky, 2P, %x, @wru - Chiề u dài tên biế n: Mặ c dù tên biế n có thểcó đ ộdài tùy ý, Matlab sẽchỉ sửdụ ng N ký tựđ ầ u tiên củ a tên, vậ y biế n khác khơng đ ược có N ký tựđầ u tiên đề u giống N = namelengthmax N = 63 - Bạ n có thểsựdụng hàm 'isvarname' đểkiể m tra tính hợp lệcủ a tên biế n Hàm trả vềgiá trị1 nế u tên hợp lệvà nế u tên khơng hợp lệ isvarname 8th_column ans = % Not valid - begins with a number - Thông thường, tên biế n không phụthuộc vào chữhoa - chữthường Vì thế'xyz' sẽgiố ng như'xYz' - Tránh đ ặ t tên biế n trùng với tên hàm chuẩ n, hoặ c từkhóa Matlab Vì nhưvậ y thơng thường bạ n sẽkhơng thểsửdụ ng hàm, từkhóa Matlab VD: Nế u bạ n gán cho biế n tên 'sqrt' giá trị , bạ n sẽkhơng thểsửdụ ng hàm că n bậ c hai (sqrt) nữa! - Matlab đ ă ng ký trước rấ t nhiề u từkhóa (xem bằ ng lệ nh 'iskeyword'): 'break' 'case' 'catch' 'continue' 'else' 'elseif' 'end' 'for' 'function' 'global' 'if' 'otherwise' 'persistent' 'return' 'switch' 'try' 'while' hàm, xem danh sách Help/Functions/Categorical List); hằ ng số Một sốhằ ng sốvà hàm thơng dụ ng có thểxem ởmục 2.5 2.6 2.3 Các kiểu dữliệu - Đị nh dạng kết * Tổng quát vềcác kiể u dữliệ u: - Matlab sửdụ ng 15 kiể u (loạ i) dữliệ u Mỗi kiể u dữliệ u đ ề uở ng củ a mộ t ma trậ n hoặ c mả ng Các mả ng hoặ c ma trậ n có kích cỡtố i thiể u 0-nhân-0 có thểphát triể n tới mả ng n-chiề u với kích cỡtùy ý - Ngồi cịn có kiể u dữliệ u người dùng đị nh nghĩ a (thiế t lậ p), kiể u hướng đ ối tư ợng, kiể u dữliệ u liên quan tớiJava - 17 - Bài giảng Tin Ứng dụng – Matlab Hình 2.1 Các kiể u dữliệ u Matlab * Đị nh ng kế t : - Sửdụ ng lệ nh 'format' đị nh ng Lệ nh chỉlàm thay đổ i cách mà kế t quảđư ợc hiể n thịtrên hình, khơng làm thay đ ổi độchính xác sốhoặ c phép tính Hầ u hế t phép tính sốhọ c củ a Matlab đượ c thực hiệ n với độchính xác Double, nghĩ a độchính xác 16 chữsốsau dấ u phẩ y thậ p phân - Đểthực hiệ n lênh, từdấ u nhắ c củ a cửa sổlệ nh đánh mộ t lệ nh sau: format short : dấ u phẩ y thậ p phân cốđ ị nh, chữsố format long : dấ u phẩ y cốđị nh, 15 chữsố format short e : ký hiệ u khoa họ c, chữsố format long e : ký hiệ u khoa họ c, 15 chữsố format short g : dấ u phẩ y cốđị nh hoặ c di độ ng, chữsố format long g : dấ u phẩ y cốđị nh hoặ c di độ ng, 15 chữsố format hex : format ng Hexa (hệ16) format '+' : dương (+), âm (-), ký tựtrắ ng (blank) ứng với format bank : Dollars cents format rat : tỷlệxấp xỉinteger - Thông thường, 'format short' ng mặ c đ ị nh Khi đ ược gọ i lên, ng format sẽcó hiệ u lực tới đ ược thay đổ i 2.4 Các kiểu dữliệu số& sốphức - Integer: ví dụnhư-5 hay 9888 - 18 - Bài giảng Tin Ứng dụng – Matlab - Double precision reals: Trong Matlab, tấ t cảcác sốthực đ ược lưu với đ ộchính xác double, khơng giố ng ngơn ngữlậ p trình khác nhưC hay Fortran chỉcó loạ i riêng biệ t float hay real*8 cho sốthực vớiđộchính xác single - Một ng ngắ n cực kỳhiệ u quảcho việ c nhậ p sốrấ t lớn hoặ c rấ t bé ng -7 ký hiệ u 'e' Chẳ ng hạ n -1.23456e-7 ng ngắ n -1.23456 x 10 ; 8.76e+12 12 ng viế t ngắ n 8.76 x 10 Ví dụ : >> 1.23e-2 ans = 0.0123 >> 5e6 ans = 5000000 - Sốphức: đ ược nhậ p vào ng 3+2*i hoặ c 3+2*sqrt(-1) - Chuỗ i: mộ t mả ng tậ p hợp củ a ký tự, nhậ p vào ng 'abc' hoặ c 'vi du day la mot chuoi' Trên đ ây kiể u dữliệ u cơbả n mà bạ n sẽrấ t thường dùng khóa học Đểbiế t danh sách đ ầ yđ ủhơn, bạ n có thểdùng lệ nh 'help datatypes' từcửa sổ nhậ p lệ nh 2.5 Các ký tự, Chuỗi Văn - Khảnă ng xửlý vă n bả n tính tốn rấ t hữu ích cho việ c nhậ p/xuấ t kế t từ/tới hình file lưu đĩ a Đểcó thểquả n lý vă n bả n, loạ i dữliệ u 'character' đưa vào Matlab Mộ t mả nh vă n bả nđ ơn giả n mộ t chuỗi (vectơ) hay mảng ký tự VD: >> t1='A' sẽgán giá trịA cho mộ t mả ng ký tựtên 't1', kích thước x >> t2='BCDE' sẽgán giá trịBCDE cho mộ t mả ng ký tựtên 't2', kích thước x - Các chuỗi có thểđ ược cộ ng với bằ ng cách sửdụ ng toán tửthao tác mả ng VD: >> t3=[t1, t2] sẽgán giá trịABCDE cho mộ t mả ng ký tựtên 't3', kích thước x >> t4=[t3, ' la ky tu dau tien 'trong bang chu cai latinh.'] sẽgán giá trị 'ABCDE la ky tu dau tien ' 'trong bang chu cai latinh.' cho mả ng ký tựtên 't4', kích thước x 26 - 19 - '; ' Bài giảng Tin Ứng dụng – Matlab - Cầ n ý rằ ng sốcác ký tựởhai dòng phả i bằ ng nhau, nế u không việ c thực thi câu lệ nh sẽdẫ n tới lỗi: ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns - Dấ u ba chấ m ' ' thểhiệ n rằ ng câu lệ nh tiế p tục ởdòng sau * Chuyể n đổ i chuỗi số - Đôi cầ n chuyể n mộ t chuỗi thành mộ t sốtương ứng, hoặ c ngược lạ i Các công việ c chuyể n đổ i thực hiệ n lệ nh: - 'str2num': chuyể n chuỗi thành sốtương ứng hai lệ nh: - 'num2str': chuyể n sốthực thành chuỗ i tươ ng ứng - 'int2str': chuyể n chuỗi thành sốtương ứng - Những lệ nh rấ t hữu ích việ c tạ o nhãn tiêu đềmột cách tự đ ộ ng, chẳ ng hạ n 2.6 Các sốdựng sẵn Matlab đ ị nh nghĩ a sẵ n nhiề u hàm sốrấ t hữu ích, bao gồm: pi, = 3.141592654 i j, cảhai đ ề u phầ n ảo sốphức, = sqrt(-1) inf, 'infinity' hay 'vô cùng' NaN, 'not-a-number' hay 'không phả i mộ t số ' ans, gán cho kế t quảcủ a lệ nh tính trước đ ó Bạ n nên tránh gán lạ i giá trịkhác cho hằ ng sốnêu nế u Chỉcó ngoạ i lệlà i j, cảhai thường đ ược sửdụng nhưcác chỉsốcủ a vòng lặ p Việ c gán lạ i giá trịkhác cho hằ ng sốnày chấ p nhậ nđ ược sốphức ln thu bằ ng cách sửdụng sqrt(-1) 2.7 Các hàm dựng sẵn - Cũng nhưnhững ngôn ngữbậ c cao khác, Matlab thực thi 'function' (hàm) nhiề u 'procedure' (chương trình con) Các hàm bao gồm că n bậ c hai - 20 - Bài giảng Tin Ứng dụng – Matlab (sqrt), lũy thừa (exp), logarit (log, log10, log2), giá trịtuyệ t đố i (abs), hàm lượng giác (sin, cos, tan, atan, ) Ví dụ : >> sin(45) ans = 0.8509 trảkế t quảbằ ng sin củ a 45 radians mà thực ý đị nh bạ n tính sin củ a 450, 45 sẽbằ ng 180 radians: >> sin(45/180*pi) ans = 0.7071 kiể m tra lạ i xem bạ n có thu đ ược nhưđ ã đị nh không >> sqrt(2)/2 ans = 0.7071 - Chú ý rằ ng tấ t cảcác tính tốn củ a Matlab đề u có lỗ i làm trịn, mà đ ôi bạ n lạ i thấ y mộtcách không mong đợi Ví dụ , bạ n khơng nên ngạ c nhiên thấ y >> tan(pi) ans = -1.2246e-016 Nên nhớrằ ng lỗi làm trịn có mặ t ởkhắ p nơi, nên đơn giả n tiế p nhậ n kế t quảnày nhưtan()=0 * Danh mục hàm dựng sẵn phổbiế n: Các hàm lượng giác: sin - hàm sin sind - sin argument tính theo độ sinh - sin hypecbolic asin - arcsin, hay hàm nghị ch đ ả o củ a hàm sin asind - hàm nghị ch đả o hàm sin, kế t quảtheo đ ộ asinh - hàm nghị ch đả o hàm sin hyperbolic cos - hàm cos cosd - cos củ a argument tính theo độ cosh - cos hyperbolic acos - hàm nghị ch đả o hàm cos acosd - hàm nghị ch đả o hàm cos, kế t quảtheo đ ộ acosh - hàm nghị ch đả o hàm cos hyperbolic - 21 - Bài giảng Tin Ứng dụng – Matlab tan - hàm tang tand - tang argument tính theo đ ộ - tang hyperbolic atan - hàm nghị ch đả o hàm tang atand - hàm nghị ch đả o hàm tang, kế t quảtheo đ ộ atan2 - hàm nghị ch đả o hàm tang góc phầ n tư atanh - hàm nghị ch đả o hàm tang hyperbolic cot - hàm côtang cotd - côtang củ a argument tính theo đ ộ coth - cơtang hyperbolic acot - hàm nghị ch đả o hàm côtang acotd - hàm nghị ch đả o hàm côtang, kế t quảtheo độ acoth - hàm nghị ch đả o hàm côtang hyperbolic Các hàm lũy thừa: exp - hàm mũ expm1 - tính xác exp(x)-1 log - logarit cơsốtựnhiên log1p - tính xác log(1+x) log10 - logarit cơsố10 reallog - loga cơsốtựnhiên sốthực realsqrt - că n bậ c hai củ a số>= sqrt - că n bậ c hai nthroot - nghiệ m thực bậ c n sốthự c Các hàm liên quan đ ế n sốphức: abs - giá trịtuyệ t đố i angle - góc pha complex - xây dựng dữliệ u vềsốphức từcác phầ n thực ả o conj - liên hợp phức imag - phầ nả o phức real - phầ n thực củ a phức isreal - hàm logic, trảvềgiá trị'true' với mả ng sốthực - 22 - Bài giảng Tin Ứng dụng – Matlab cplxpair - sắ p xế p sốvềcác cặ p liên hợp phức Các hàm làm tròn phầ n dư: fix - làm trịn vềphía floor - làm trịn vềphía âm vơ ceil - làm trịn vềphía dư ơng vơ round - làm trịn vềphía sốngun gầ n nhấ t mod - mô đ un (lấ y phầ n dưcủa phép chia) rem - lấ y phầ n dưcủ a phép chia (tương tựmod) sign - hàm lấ y dấ u củ a biế n, trảvề+1, 0, -1 (+, 0, -) Ví dụ: mod([1 7],3) ans = 2.8 1 Các phép toán quan hệ * Các toán tửquan hệ(so sánh): Toán tử Cú pháp Mô tả < A= A >= B Lớn bằ ng == A == B Bằng ~= A ~=B Không * Mô tả: - Các toán tửquan hệthực hiệ n sựso sánh phầ n tửvới phầ n tửgiữa hai mả ng Nó cho kế t quảlà mả ng logic có kích cỡ, với phầ n tửcủa mả ng đ úng (1) nế u quan hệđ ó đúng, phầ n tửcủ a mả ng sai (0) nế u khơng - Các tốn tử, = chỉsửdụ ng phầ n thực củ a toán hạ ng cho phép so sánh Các toán tử== ~= kiể m tra cảphầ n thực phầ nả o Ví dụ: >> X = 5*ones(3,3) X = 5 - 23 - Bài giảng Tin Ứng dụng – Matlab 5 5 5 >> Y= [1 3; 6; 9] Y = >> X >= Y ans = 1 1 0 0 Kế t quảđược trảvềdưới ng ma trậ n có kích thước với ma trậ n X Y Trong mỗ i phầ n tửcó giá trị1 (đúng - true) hoặ c (sai - false) tùy thuộc vào sựlogic củ a phép so sánh X>=Y 2.9 Các phép toán logic - Matlab biể u diễ nđ úng sai sốnguyên tố1 0: đ úng = 1, sai = (true = 1, false = 0) - Ví dụtrong q trình tính tốn, biế n x (x đạ i lượng vô hướ ng) nhậ n giá trịbấ t kỳ , có thểtiế n hành phép kiể m tra logic cho nó: x == xem x có bằ ng khơng? x ~= xem x có khác khơng? x>2 xem x có lớn khơng? x= xem x có lớn hoặ c bằ ng khơng? x > x = pi x = 3.1416 >> x ~= ans = >> x ~= pi - 24 - Bài giảng Tin Ứng dụng – Matlab ans = - Khi X véc tơhay ma trậ n, phép kiể m tra sẽđ ược tiế n hành cho phầ n tửcủ a X Ví dụởmục trước (2.8), phép kiể m tra xem X có lớn hoặ c bằ ng Y hay không cho ta kế t : >> X >= Y ans = 1 1 0 0 - Chúng ta có thểphối hợp phép kiể m tra logic, ví dụ4 Y 6 >> Y>=4 & Y5) nghĩ a x khơng lớn 5, nế u x=4 phép kiể m tra sẽcho kế t quảđ úng (true), hay = - Mộ t ứng dụng khác phép kiể m tra logic ta có thể‘ xóa’(hay bỏ qua) phầ n tửnhấ tđ ị nh củ a ma trậ n: tính phân bốlưu tốc theo chiề u sâu (tính từđáy kênh), ta có thểbỏ qua lớp biên với chiề u sâu nước z thỏ a mãn điề u kiệ n z N VD: >> H = [4.7506 1.1557 3.0342 3.8105 2.2823 0.0925 >> N = 3; >> kiemtra = H > N kiemtra = - 25 - 2.4299 4.1070 4.4565 (shift + ) 2.2235]; Bài giảng Tin Ứng dụng – Matlab 1 >> H = H.* kiemtra H = 4.7506 3.0342 4.4565 3.8105 0 4.1070 0 Nhờđ ó véctơH bây giờchỉcịn chứa sốliệ u sóng có chiề u cao lớn ngưỡng 3m 2.10 Kết hợp nhiều lệnh dòng; Ẩn kết quảtính Dấ u phẩ y (,) dấ u chấ m phẩ y (;) ký tựcó ý nghĩ a đ ặ c biệ t Matlab, sẽchứng tỏlà rấ t hữu ích * Kế t hợp nhiề u lệ nh dịng: Tốn tửphẩ y (,) dùng đ ểnhóm nhiề u lệ nh dịng, ví dụ: >> x=3.5, y=-5.0, xˆ3 – y x = 3.5000 y = -5 ans = 47.8750 * Ẩn kế t quảtính (Surpessing output) - Thơng thường, khơng muố n theo dõi tấ t cảcác tính toán trung gian, hay ta muốn ẩ nđ i mộ t câu lệ nh, mộ t diễ n giả i Khi đ ó ta dùng dấ u chấ m phẩ y (;) Ví dụ : >> x=3.5; y=-5.0; xˆ3 – y ans = 47.8750 Trong ví dụtrên, kế t quảcủ a hai lệ nh gán đầ u tiên đ ãđ ược ẩ nđ i - 26 - ... 3.03 42 3.8105 2. 2 823 0.0 925 >> N = 3; >> kiemtra = H > N kiemtra = - 25 - 2. 429 9 4.1070 4.4565 (shift + ) 2. 223 5]; Bài giảng Tin Ứng dụng – Matlab 1 >> H = H.* kiemtra H = 4.7506 3.03 42. .. : - 16 - Bài giảng Tin Ứng dụng – Matlab Hsig, Let2try, Dhaluu, T1, V2, z25c5 Các tên sau không hợp lệ : chu-ky, 2P, %x, @wru - Chiề u dài tên biế n: Mặ c dù tên biế n có thểcó đ ộdài tùy ý, Matlab. .. cosh - cos hyperbolic acos - hàm nghị ch đả o hàm cos acosd - hàm nghị ch đả o hàm cos, kế t quảtheo đ ộ acosh - hàm nghị ch đả o hàm cos hyperbolic - 21 - Bài giảng Tin Ứng dụng – Matlab tan -