Tin học chuyên ngành cho khoa cơ điện lập trình tính toán trong Matlab

Tin học chuyên ngành cho khoa cơ điện lập trình tính toán trong Matlab 1TIN HỌC CHUYÊN NGÀNH DÀNH CHO KHOA CƠ ĐIỆN LẬP TRÌNH TÍNH TOÁN TRONG MATLAB SỐ TIẾT: 45 (30 LÝ THUYẾT + 15 THỰC HÀNH) 1. Sách, giáo trình chính: - Lập trình Matlab và ứng dụng, Nguyễn Hoàng Hải - Nguyễn Việt Anh, NXB Khoa học và kỹ thuật - Bài giảng LẬP TRÌNH TÍNH TOÁN TRONG MATLAB - Đỗ Thị Mơ 2. Sách tham khảo - Matlab for engineers, Adrian Biran - Moshe Breiner, Addision Wesley Publishing Company. - Cơ

pdf75 trang | Chia sẻ: huongnhu95 | Lượt xem: 249 | Lượt tải: 0download
Tóm tắt tài liệu Tin học chuyên ngành cho khoa cơ điện lập trình tính toán trong Matlab, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
sở Matlab & ứng dụng, Nguyễn Hữu Tình-Lê Tấn Hùng- Phạm Thị Ngọc Yến-Nguyễ Thị Lan Hương, NXB Khoa học và kỹ thuật - Matlab & Simulink, Nguyễn phùng Quang, NXB Khoa học và kỹ thuật 3. Giáo viên: Đỗ Thị Mơ - Bộ môn Công nghệ phần mềm Email: dtmo@hau1.edu.vn Chương 1: Giới thiệu chung 1. Không gian làm việc của Matlab Cửa số lệnh của Matlab có dấu mời (dấu nhức) là dấu >>. Tại đây ta có thể gõ vào các lệnh của Matlab hoặc gõ các biến. Những lệnh hoặc biến được lưu trong không gian làm việc của Matlab và có thể được gọi lại khi ta cần. Dùng các mũi tên (↓↑ ) để chọn các lệnh, có thể cắt, copy, dán và sửa chữa dòng lệnh. Ví du: >> X=2 X= 2 >> A=’XIN CHAO’ A= XIN CHAO Nếu ta không nhớ tên biến, ta có thể yêu cầu Matlab cho danh sách các biến bằng cách đánh lệnh who từ dấu nhắc lệnh. >> who 22. Biến * Tên biến: Tên biến là một dãy kí tự được bắt đầu bằng chữ cái, có độ dài tối đa là 31 kí tự, bao gồm các chữ cái, chữ số và dấu gạch dưới ( _ ), có phân biệt chữ hoa và chữ thường. Ví dụ : x ; a12 ; b_a Có thể gán giá trị cho tên biến bằng cách viết : Tên_biến = biểu thức Ví dụ : >> x=20 >>a12=4 >>A12= ‘ABCD’ * Matlab có các biến đặc biệt được cho trong bảng sau: 1− Số lớn nhất có thể được của số thựcrealmax Số nhỏ nhất có thể được của số thựcrealmin Số các đối số hàm đưa ranarout Số các đối số đưa vào hàm được sử dụngNargin i=j=i hoặc j Dùng để chỉ số không xác định như kết qẩu của 0/0NAN hoặc nan Để chỉ số vô cùng như kết quả của 1/0Inf Số của phép toán số thựcFlops Số nhỏ nhất, nếu cộng thêm 1 sẽ được số nhỏ nhất lớn hơn 1Eps π = 3.1415Pi Tên biến mặc định dùng để trả về kết quảAns Giá trị Các biến đặc biệt 3Các biến đặc biệt ở trên có sẵn giá trị, nếu ta thay đổi giá trị của nó thì giá trị ban đầu sẽ mất cho đến khi ta khởi động lại Matlab thì nó mới trở lại giá trị ban đầu. Không nên thay đổi giá trị của các biến đặc biệt. Ví dụ: >> i ans = 0 + 1.0000i >> j ans = 0 + 1.0000i >> i*i ans = -1 >> pi ans = 3.1416 >> eps ans = 2.2204e-016 >> realmin ans = 2.2251e-308 >> realmax ans = 1.7977e+308 3. Xoá các biến trong không gian làm việc Để xoá các biến ta dùng lệnh clear , có các cách sau: - Xoá một biến clear tên_biến >> clear x - Xoá nhiều biến clear tên_biếm1 tên_biến2 >> clear a b c - Xoá một nhóm biến tên trùng nhau một số kí tự: clear a* % xoá các biến có tên bắt đầu là a. 4- Xoá tất cả các biến trong không gian làm việc: clear Dùng lệnh trên tất cả các biến bị xoá không khôi phục được, do vậy ta phải thận trọng khi dùng nó. 4. Câu gải thích và sự chấm câu * Câu giải thích: Câu giải thích được viết sau dấu % >> a=100 % a nhận giá trị 100 * Có thể viết nhiều lệnh trên một dòng, chúng được ngăn cách bởi dấu phẩy hặc dấu chấm phẩy. Dấu phẩy là yêu cầu hiển thị kết qủa trên màn hình, còn dấu chấm phẩy là không hiển thị kết quả trên màn hình.Ví dụ: >> A=2,B='abcde',x=456.32;y='mnopq' A = 2 B = abcde y = mnopq * Dùng dấu ba chấm ( . . . ) viết sau phép toán để chỉ câu lệnh được tiếp tục ở hàng dưới. Không dùng dấu ba chấm cho các trường hợp khác, hay cho câu giải thích. >> x=10,y=20 x = 10 y = 20 >> z=x+... y z = 30 5. Các phép toán số học Các phép tính số học của Matlab được cho trong bảng sau : 2^3^Phép luỹ thừa 4/2=2 hoặc 2\4=2/ ( chia trái) ,\ (chia phải) Phép chia 3*5*Phép nhân 8-2-Phép trừ 5+4+Phép cộng Ví dụKí hiệu Phép tính 5Các phép tính trên có mức độ ưu tiên như sau : 1. Phép luỹ thừa. 2. Phép nhân, phép chia 3. Phép công, phép trừ. >> x=2+10/5+4^2-6*2 x = 8 6. Số phức Một trong các ưu thế của Matlab là làm việc với số phức. Số phức của Matlab được định nghĩa theo nhiều cách. * Cách 1 : Chèn kí tự i hoặc j vào phần ảo. >> c1=1+3i c1 = 1.0000 + 3.0000i >> c1=2-4j c1 = 2.0000 - 4.0000i * Cách 2 : Dùng căn bậc hai của số âm. >> c2=3+sqrt(-1) c2 = 3.0000 + 1.0000i >> c2=4-sqrt(-4) c2 = 4.0000 - 2.0000i * Cách 3 : Dùng biểu thức *i hoặc *j >> c3=2-sin(1)*j c3 = 2.0000 - 0.8415i >> c3=3+cos(1)*i c3 = 3.0000 + 0.5403i >> c3=4+2*i c3 = 4.0000 + 2.0000i >> c3=4+(6/3)*i c3 = 4.0000 + 2.0000i 6* Các phép toán đối với số phức đều thao tác tương tự như số thực. >> a=2+3i a = 2.0000 + 3.0000i >> b=1+4i b = 1.0000 + 4.0000i >> a+b ans = 3.0000 + 7.0000i >> a-b ans = 1.0000 - 1.0000i >> a/b ans = 0.8235 - 0.2941i >> a*b ans = -10.0000 +11.0000i * Có thể biểu diễn số phức ở dạng cực ( độ lớn và góc) M∠θ ≡ M.eiθ = a+bi Ở trên số phức biểu diễn bằng độ lớn M và góc θ, quan hệ giữa các đại lượng này và phần thực, phần ảo được biểu diễn dưới dạng đại số: M: dùng hàm abs để tính độ lớn, M=abs(so phuc). θ= tan-1(b/a): dùng hàm angle tính góc, θ = angle(so phuc) a= Mcosθ b= Msinθ Ví dụ: >> c=1+2i c = 1.0000 + 2.0000i >> M=abs(c) M = 3.1623 7>> goc=angle(c) % góc θ tính bằng radian goc = 1.1071 % radian >> goc_do=goc*180/pi % chuyển góc θ sang độ goc_do = 63.4349 % góc tính bằng độ 7. Các hàm toán học thông thường tang xtan(x) Căn bậc hai của xsqrt(x) sin xsin(x) Hàm cho dấu của xsign(x) Hàm làm tròn về số nguyênround(x) Phần dư của phép chia x/yrem(x,y) Hàm trả về phần thực của xreal(x) log10 xlog10(x) Lnxlog(x) Bội số chung nhỏ nhất của 2 số nguyên x và ylcm(x,y) Hàm trả về phần ảo của số phứcimag(x) Ước số chung lớn nhất của 2 số nguyên x và ygcd(x,y) Xấp xỉ âm vô cùngfloor(x) Xấp xỉ khôngfix(x) exexp(x) cosin xcos(x) Số phức liên hợpconj(x) Xấp xỉ dương vo cùngceil(x) arctang của phần thực của x và yatan(x,y) arctang xatan(x) arcsin xasin(x) Tính góc của số phứcangle(x) arccos xacos(x) Tính argument (độ lơn M) của số phức xabs(x) Ý nghĩaKí hiệu hàm 8>> x=abs(-2)/2 x= 1 >> x=sqrt(2)/2 x= 0.7071 >> y= sin(x) y= 0.7854 >>4*atan(1) ans= 3.1416 y=rem(10,3) % phần dư y= 1 >>gcd(18,81) % Ước số chung lơn nhất ans= 9 >>lcm(18,81) % bội số chung lớn nhất ans= 162 >> x=3/9+sin(3.14*17/180) x = 0.6256 >> x=3\9+sin(3.14*17/180) x = 3.2922 >> x=asin(3.14/4) x = 0.9027 9Bài tập chương 1 1. Tính tổng n số tự nhiên đầu tiên S=1+2+3+ ... + 179 2. Giải phương trình bậc 2 : 17x2 + 125x - 69 = 0 3. Giải hệ phương trình sau: 4. Tính hàm y theo công thức sau khi x=3: y= 3x3- 4x2 +7x +12 + 2sin 27o - 5. Tính hàm y theo công thức sau khi x=2 y= asin(x) + Chương 2: Cửa sổ lệnh, quản lý tệp, các cấu trúc điều khiển, hàm 1. Cửa số lệnh trong Matlab 1.1 Quản lý không gian làm việc của Matlab Các biến được tạo trong cửa sổ lệnh, được lưu trong không gian làm việc của Matlab. Ta có thể xem lại hoặc xóa các biến đó. * Xem tên biến dùng lệnh who > who Your variables are: a ans b c y * Để xem chi tiết hơn về các biến ta dùng lệnh whos >> whos Name Size Bytes Class a 1x1 8 double array ans 0x0 0 char array b 1x1 8 double array c 1x1 8 double array y 1x1 8 double array Grand total is 4 elements using 32 bytes 10 * Để xóa các biến ta dùng lệnh clear Lệnh này ta đã xét ở mục 3 chương 1. Các tuỳ chọn khác nhau của lệnh clear ta có thể xem bằng lệnh help clear. >> help clear CLEAR Clear variables and functions from memory. CLEAR removes all variables from the workspace. CLEAR VARIABLES does the same thing. CLEAR GLOBAL removes all global variables. CLEAR FUNCTIONS removes all compiled M- and MEX-functions. CLEAR ALL removes all variables, globals, functions and MEX links. CLEAR ALL at the command prompt also removes the Java packages import list. CLEAR IMPORT removes the Java packages import list at the command prompt. It cannot be used in a function. CLEAR CLASSES is the same as CLEAR ALL except that class definitions are also cleared. If any objects exist outside the workspace (say in userdata or persistent in a locked m-file) a warning will be issued and the class definition will not be cleared. CLEAR CLASSES must be used if the number or names of fields in a class are changed. CLEAR VAR1 VAR2 ... clears the variables specified. The wildcard character '*' can be used to clear variables that match a pattern. For instance, CLEAR X* clears all the variables in the current workspace that start with X. If X is global, CLEAR X removes X from the current workspace, but leaves it accessible to any functions declaring it global. CLEAR GLOBAL X completely removes the global variable X. CLEAR FUN clears the function specified. If FUN has been locked 11 by MLOCK it will remain in memory. Use a partial path (see PARTIALPATH) to distinguish between different overloaded versions of FUN. For instance, 'clear inline/display' clears only the INLINE method for DISPLAY, leaving any other implementations in memory. CLEAR ALL, CLEAR FUN, or CLEAR FUNCTIONS also have the side effect of removing debugging breakpoints and reinitializing persistent variables since the breakpoints for a function and persistent variables are cleared whenever the m-file changes or is cleared. Use the functional form of CLEAR, such as CLEAR('name'), when the variable name or function name is stored in a string. See also WHO, WHOS, MLOCK, MUNLOCK, PERSISTENT 1.2. Ghi và phục hồi dữ liệu * Ghi dữ liệu: Để ghi các dữ liệu( các biến) vào tệp kiểu nhị phân với tên do ta đặt và đuôi tệp là MAT, ta có thể dùng lệnh sau: >> Save Tên_tệp hoặc chọn các mục trên thanh Menu: File / Save Workspace as Ví dụ: >> save luu1 Các biến trong Matlab được lưu trong tệp luu1.mat Có thể ghi một số biến vào tệp theo lệnh sau: >> save tên_tệp biến1 biến2 ... Ví dụ: >>save luu2 a b c Các biến a,b,c được ghi trong tệp luu2.mat * Phục hồi dữ liệu: Để phục hồi dữ liệu (các biến) trong các tệp đã ghi ta dùng lệnh: >> Load tên_tệp Ví dụ: >>Load luu1 12 1.3. Khuôn dạng hiển thị số Matlab hiển thị kết quả dạng số mặc định: số nguyên và các dạng số khác trừ số thực hiển thị theo đúng dạng đưa vào. Dạng số thực hiển thị với mặc định là 4 chữ số sau dấu phẩy. Để tạo khuôn dạng riêng ta chọn các mục trong Menu: File / Preferences khi đó sẽ có hộp thoại Preferences như sau: Chọn mục Command Windows, trong mục Numeric format dùng để định dạng số có các định dạng sau: short hiện số có 5 chữ số 20.345 long hiện số có 16 chữ số 20.123456789123456 Short e hiện số có 5 chữ số với số mũ e 2.0345e+01 long e hiện số có 16 chữ số với số mũ e 2.0123456789123456e+1 short g chính xác hơn short hoặc short e long g chính xác hơn long hoặc long e hex số hệ 16 12ABF bank hai số thập phân 12.45 + hiện dương, âm hoặc bằng không + rational hiện ra dạng phân số nếu số thực co phần thập phân , ví du a=12.25 thì hiển thị kết quả trên màn hình là 48/4 13 2. Script file hay M-file Trong Matlab ta gõ lệnh vào từ cửa sổ lệnh, các lệnh sẽ được thực hiện ngay, nếu muôn thực hiện lại các lệnh ta lại phải gõ lại, như vậy không tiện lợi. Đẻ thuận lợi cho việc gõ các lệnh và lưu trữ lại các lệnh Mtlab cho phép mở file dạng văn bản để ghi các lệnh, file này gọi là Script file hay M_file, phần mở rộng ( đuôi file) là m. * Các lệnh về M-file: - Mở tệp m-file mới: chọn các mục trong menu: File / new / M-file - Mở tệp m-file cũ: chọn các mục trong menu: File / Open sau đó chọn tên tệp m-file cần mở. - Ghi tệp m-file : chọn các mục trong menu: File / save sau đó gõ vào tên tệp m-file. - Để chạy các lệnh của M-file , trên cửa số của script file ta chọn các mục Debug / Run , nhập dữ liệu từ cửa sổ lệnh (Command windows ) - Matlab cung cấp một số hàm sử dụng trong m-file: Display(tên_biến) hiển thị kết quả không có tên biến Echo điều khiển cửa sổ lặp lại các lệnh của script file Input sử dụng dấu nhắc để đưa dữ liệu vào Keyboard trao điều khiển tạm thời cho bàn phím Pause dừng lại cho đến khi người dùng nhấn một phím bất kỳ Pause(n) dừng lại n giây Waitforbuttonpress dừng lại cho đến khi người dùng nhấn một phím bất kỳ. Ví dụ 1: tạo một m-file có tên là thu1.m chứa các lệnh tính diện tich tam giác khi biết đường cao và cạnh đáy. Chọn các mục File / new / M-file, tại cửa sổ Script file ta nhập vào các lệnh tính như sau Sau đó chọn File / save và gõ vào tên tệp là thu1.m Chọn Debug / Run để chạy hàm, nhập dữ liệu cho chiều cao, cạnh đáy của tâm giác từ cửa sổ lệnh. Ví dụ 2: tạo một m-file có tên là tinhham.m, nội dung chứa các câu lệnh sau: 14 Sau đó chọn Debug / Run để chạy hàm, nhập dữ liệu cho a, b, c từ cửa sổ lệnh. * Một số lệnh quản lý tệp : - cd hiển thị thư mục hiện thời - cd tên_thư_mục thay đổi thư mục đưa ra - dir danh sách các file trong thư mục hiện thời - edit tên_tệp_m_file mở tệp để sọan thảo - delete tên_tệp_m_file xoá tệp - path hiển thị hoặc sửa đường dẫn - type tên_tệp_m_file hiển thị nội dung M-file trong cửa sổ lệnh - what hiện danh sách các m-file và MAT-file 3. Các cấu trúc điều khiển 3.1. Cấu trúc rẽ nhánh IF ... End * Trường hợp đơn giản: If biểu thức điều kiện khối lệnh end Nếu biểu thức điều kiện là đúng thì khối lệnh được thực hiện. Ví dụ: >> a=10 >> if a>0 x=3*a end >> x x= 30 * Trường hợp có hai điều kiện thay đổi: if biểu thức điều kiện khối lệnh 1 else khối lệnh 2 end Nếu biểu thức điều kiện đúng thì thực hiện khối lệnh 1, còn sai thì thực hiện khối lệnh 2. 15 Ví dụ: Tìm nghiệm thực của phương trình bậc 2 function giaiptbac2() a=input('a='); b=input('b='); c=input('c='); d=b*b-4*a*c if d<0 k='phuong trinh vo nghiem' elseif d==0 x1=-b/(2*a) x2=x1 else x1=(-b+sqrt(d))/(2*a) x2=(-b-sqrt(d))/(2*a) end * Trường hợp có nhiều điều kiện thay đổi: if biểu thức điều kiện 1 khối lệnh 1 elseif biểu thức điều kiện 2 khối lệnh 2 elseif biểu thức điều kiện 3 khối lệnh 3 .... elseif biểu thức điều kiện n khối lệnh n else khối lệnh n+1 end Nếu biểu thức điều kiện i đúng thì thực hiện khối lệnh i ( i từ 1 đến n), ngược lại không có biểu thức điều kiện nào đúng thì thực hiện khối lệnh n+1. 16 Ví dụ: Tính tiền điện, giả sử tính theo cách 50 số đầu 500 đồng 1 số, 50 số tiếp theo 700 đồng 1 số, 50 số tiếp theo 1000 đồng 1 số, 50 số tiếp theo 1500 đồng 1 số, các sô tiếp theo 2000 đồng 1 số function tinhtiendien() csd=input('chi so dau ='); csc=input('chi so cuoi ='); sd=csc-csd if sd<=50 tien=sd*500 elseif sd<=100 tien=50*500+(sd-50)*700 elseif sd<=150 tien=50*500+50*700+(sd-100)*1000 elseif sd<=200 tien=50*500+50*700+50*1000+(sd-150)*1500 else tien=50*500+50*700+50*1000+50*1500+(sd-200)*2000 end 3.2. Cấu trúc switch ... case switch biểu thức điều kiện case giá trị 1 khối lệnh 1 case giá trị 2 khối lệnh 2 case giá trị 3 khối lệnh 3 . . . case giá trị n khối lệnh n otherwise khối lệnh n+1 end Biểu thức điều kiện là dạng số hoặc dạng chuỗi. Giá trị i ( i từ 1 đến n) phải có giá trị phù hợp với biểu thức điều kiện. Nếu biểu thức điều kiện bằng giá trị i thì khối lệnh i ( i từ 1 đến n) được thực hiện, ngược lại nếu biểu thức điều kiện không bằng một giá trị i nào thì khối lệnh n+1 được thực hiện. 17 Ví dụ: Hiện ra thời khoá biểu khi ta nhập vào thứ (là số) function thoikhoabieu() t=input('nhap vao thu ='); switch t case 2 'Tin, Toan, Anh' case 3 ' Sinh, Su, Dia' case 4 ' Hoa, Ly, Anh' case 5 ' Toan, Tin, Ly' case 6 ' Van, Hoa, Dia' case 7 ' Toan, Su, Tin' otherwise ' Nghi o nha' end 3.3. Vòng lặp For Vòng lặp For cho phép một khối lệnh thực hiện lặp lại một số lần cố định. Cú pháp của vòng lặp For như sau; For biến=mang khối lệnh end Biến lần lượt nhận các giá trị của mảng, mỗi lần như vậy khối lệnh được thực hiện 1 lần. Số lần lặp của khối lệnh sẽ bằng số phần tử của mảng. Ví dụ 1 : s= 1+2+3+4+ . . . +10 s=0; for i=1:10 s=s+i; end s Ví dụ 2: Tính p= n !=1*2*3* ...*n n=input(‘ Nhap vao n: ‘) p=1; for i=1:n p=p*i; end p 18 3.4. Vòng lặp While Vòng lặp while thực hiện lặp lại khối lệnh với số lần lặp không biết trước. Cú pháp của vòng lặp này như sau : While biểu thức điều kiện khối lệnh end Khi biểu thức điều kiện còn đúng thì khối lệnh được thực hiện, còn biểu thức điều kiện sai kêt thúc vòng lặp. Ví dụ : Tính q= 1+1/2+ 1/3 + ... + 1/n n= input(‘nhap vao n : ‘) q=0; i=1; while i<=n q=q+1/i; i=i+1; end q 4. Hàm m-File * Matlab đã xây dựng nhiều hàm, người sử dụng chỉ việc gọi ra để sử dụng, ở chương 1 ta đã xét một số hàm toán học. * Matlab cung cấp cấu trúc để người sử dụng có thể xây dựng các hàm của mình dưới dạng M- file. Cấu trúc một hàm M-file như sau: Function Tên_biến= Tên_hàm(các tham số vào) % Các câu chú thich khối lệnh Tên_biến = biểu thức [return] Các quy định và các tính chất với hàm M-file: - Tên_hàm và tên M-file phải là một - Trong thân hàm có lệnh gán giá trị của biểu thức cho tên biến. - Trong hàm có thể chứa các hàm khác nhưng các hàm con trong hàm đó chỉ được gọi chỉ được gọi trong chính nó. - Mỗi hàm có một không gian làm việc riêng tách biệt so với môi trường matlab. Các biến được tạo ra trong hàm chỉ nằm trong không gian làm việc của hàm đó và được giải phóng khi hàm kết thúc. - Các dòng chú thích sẽ được hiện ra khi dùng lệnh Help. - Các tham số vào và ra khi một hàm được gọi chỉ có tác dụng bên trong hàm đó. Biến Nargin chứa các tham số đưa vào, nargout chứa các giá trị đưa ra. 19 - Nếu các hàm muốn dùng chung các biến thì các biến đó phải khai báo là biến toàn cục : Global tên_biến - Trong hàm có thể gặp dòng lệnh Return, cho phép kết thúc một hàm mà không cần phải thi hành hết các lệnh của hàm đó. - Hàm error của Matlab cho hiển thị chuỗi kí tự trên cửa sổ lệnh và dừng thực hiện hàm. Hàm này thường được dùng để cảnh báo việc sử dụng hàm không đúng. Ví dụ hàm phải đưa vào 3 tham số, nếu đậ ít hơn sẽ có lỗi : if nargin <3 error('Phai dua vao du 3 tham so') end * Lời gọi hàm : Trong các hàm khác hoặc tại cửa sổ lệnh sử dụng hàm phải có lời gọi hàm. Lời gọi hàm viết như sau : Tên_biến=Tên_hàm(các tham số thực sự) Các tham số thực sự chứa giá trị và tương ứng với các tham số trong hàm. Ví dụ : Xây dựng hàm tính diện tích của tam giác biết 3 cạnh a,b,c. Ví dụ : Xây dựng hàm tính diện tích của tam giác biết 3 cạnh a,b,c. function y=dttg(a,b,c); %Ham tinh dien tich tam giac biet 3 canh a,b,c %Nhap vao gia tri 3 canh tam giac ( dieu kien cac canh duong va % 1 canh phai nho hon tong 2 canh) if nargin <3 error('Phai dua vao du 3 tham so') end p=(a+b+c)/2; y=sqrt(p*(p-a)*(p-b)*(p-c)); Lời gọi hàm như sau: a=2; b=2; c=3; t=dttg(a,b,c) q=dttg(a,b) % loi goi sai 20 5. Các phép tính logic, quan hệ, xâu kí tự, thời gian 5.1. Các toán tử quan hệ khác~= bằng== lớn hơn hoặc bằng>= lớn hơn> nhỏ hơn hoặc bằng<= nhỏ hơn< ý nghĩaToán tử quan hệ Kết quả của toán tử quan hệ cho giá trị 1 (đúng : true) hoặc giá trị 0 (sai :false). Ví dụ : >> a=4 >> b=6 >> a==b ans = 0 >> a~=b ans = 1 >> a<b ans = 1 5.2. Toán tử Logic Kết qủa của toán tử logic là 1 (true) hoặc 0 (false) Ví dụ : >> a=5 >> b=-2 >> (a>0)&(b<0) ans = 1 NOT~ OR| AND& Ý nghĩaToán tử logic 21 >> (a0) ans = 0 >> ~(a>b) ans = 0 5.3. Xâu kí tự Xâu kí tự trong matlab là mảng các kí tự trong bảng mã ASCII. Xâu kí tự được viết trong dấu nháy đơn ‘...’ Ví dụ : t=’ABCD’ ; q= ‘Ha noi’ * Hàm double cho mã ASCII của xâu : >> double(t) ans = 65 66 67 68 >> double(q) ans = 72 97 32 110 111 105 * Hàm char chuyển lại thành xâu : >> char(q) ans = Ha noi 5.4. Thời gian * Hàm trả về ngày và giờ hiện tại : clock * Hàm trả về ngày hiện tại : date * Hàm trả về thứ trong tuần: weekday * Hàm trả về ngày cuối tháng: eomday(năm, tháng) * Hàm trả về lịch tháng: calendar(năm, tháng) 22 >> date ans = 18-Oct-2006 >> eomday(2006,9) ans = 30 >> calendar(2006,11) Nov 2006 S M Tu W Th F S 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 0 0 0 0 0 0 0 0 0 Chương 3: Các phép toán với mảng 1. Mảng đơn giản 1.1. Biểu diễn mảng đơn trong matlab Để biểu diễn một dãy các phần tử có tính chất giống nhau matlab dùng kiểu mảng. Biểu diễn mảng đơn như sau: Tên_biến_mảng=[a1,a2,...,an] hoặc Tên_biến_mảng=[a1 a2 ... an] Trong đó ai với i từ 1 đến n, là phần tử thứ i của mảng, như vậy giữa các phần tử ngăn cách nhau bới dấu phẩy hoặc dấu cách. Phần tử của mảng có thể biểu diễn bằng biểu thức. Ví dụ 1 x biểu diễn 1 dẫy số 1, 3, 5 ,7, 9,11 trong matlab ta viết như sau x=[1,3,5,7,9,11] hoặc x=[1 3 5 7 9 11] Ví dụ 2: >> a=2 >> y=[2*a,3+a,4/a] y = 4 5 2 23 1.2. Địa chỉ của mảng Ở ví dụ 1 mảng x có 6 phần tử, mảng x có 1 hàng 6 cột hay còn gọi là vector hàng, mảng x có độ dài là 6. * Để truy nhập vào phần tử thứ i của mang ta viết như sau: Tên_biến_mảng(i) Ví dụ: x(1); x(5); y(2); y(3) * Để truy nhập vào từ phần tử thứ i đến phần tử thứ j ta viết: Tên_biến_mảng(i:j) Ví dụ : x(2:4); y(1:2) * Để truy nhập vào từ phần tử thứ i đến phần tử cuối ta viết: Tên_biến_mảng(i:end) Ví dụ : x(3:end); y(2:end) * Để truy nhập vào các phần tử trong khoảng từ phần tử thứ i đến phần tử j, vị trí của phần tử sau bằng vị trí của phần tử trước cộng với số k ta viết: Tên_biến_mảng(i:k:j) ví dụ: >> x(1:2:6) ans = 1 5 9 >> x(6:-1:1) ans = 11 9 7 5 3 1 1.3. Cấu trúc của mảng Có nhiều cách tạo ra một mảng, sau đây là một số cấu trúc của mảng : * Với mảng có số phần tử nhỏ ta có thể nhập vào trực tiếp. * Ta có thể dùng các cấu trúc cơ bản sau để tạo mảng : x=m :n Tạo vector hàng x, phần tử đầu có giá trị là m, phần tử sau bằng phần tử trước công với 1, kết thúc tại phần tử có giá trị bằng hoặc nhỏ hơn x=m :k :n Tạo vector hàng x, phần tử đầu có giá trị là m, phần tử sau bằng phần tử trước công với k, kết thúc tại phần tử có giá trị bằng hoặc nhỏ hơn x=linspace(m :n :k) Tạo vector hàng x, phần tử đầu có giá trị là m, kết thúc là n, có k phần tử x=logspace(m :n :k) Tạo vector hàng không gian logarithm x, phần tử đầu có giá trị là 10m, kết thúc là 10n, có k phần tử Ví dụ : >>a=2:10 a = 2 3 4 5 6 7 8 9 10 >> b=1:3:15 b = 1 4 7 10 13 24 >> c=linspace(1,5,8) c = 1.0000 1.5714 2.1429 2.7143 3.2857 3.8571 4.4286 5.0000 >> d=logspace(1,2,5) d = 10.0000 17.7828 31.6228 56.2341 100.0000 * Đối với các mảng mà các phần tử của nó không tuân theo một quy luật nhất định, ta có thể tạo mảng bằng cách ghép các ghép các mảng thành phần lại. Ví dụ : >> x1=1:6 x1 = 1 2 3 4 5 6 >> x2=3:2:11 x2 = 3 5 7 9 11 >> x3=[x1 x2] x3 = 1 2 3 4 5 6 3 5 7 9 11 >> x4=[x1(1:2:6),2, 7, x3(5:9)] x4 = 1 3 5 2 7 5 6 3 5 7 2. Vector hàng và vector cột * Vector hàng là mảng 1 hàng và nhiều cột, cách biểu diễn đã xét ở phần trên. a=[a1,a2, ... ,an] * Vector cột là mảng 1 cột và nhiều hàng. Các thao tác như vector hàng. Biểu diễn dùng dấu ; ngăn cách giữa các phần tử. b=[b1;b2; ... ;bn] Ví dụ: b=[1;3;5;7] b = 1 3 5 7 * Dùng phép chuyển vị ( kí hiệu là dấu nháy đơn: ‘) để chuyển vector hàng thành vector cột. Ví dụ: >> a=[2,4,6,8,10] a = 2 4 6 8 10 >> b=a' b = 2 4 6 8 10 25 >> b(2,3) ans = 7 >> b(2) % phần tử thứ 2 ans = 5 >> b(4) % phần tử thứ 4 ans = 2 >>b(end) % phần tử cuối cùng ans = 12 >> b(:,2) % cột 2 ans = 2 6 10 >> b(3,:) % dòng 3 ans = 9 10 11 12 * Loại bỏ dòng hoặc cột mảng bằng cách gán cho giá trị rỗng []. Ví dụ: >> c=[1:2:7;8:2:14;20:-1:17] c = 1 3 5 7 8 10 12 14 20 19 18 17 >> c(:,4)=[] % xoá cột 4 c = 1 3 5 8 10 12 20 19 18 >> c(1,:)=[] % xoá dòng 1 c = 8 10 12 20 19 18 * Tạo vector cột d từ ma trận c : d=c( :) >> d=c(:) 26 >> d=c(:) d = 8 20 10 19 12 18 * Ma trận chuyển vị dùng kí hiệu nháy đơn ‘ Ví dụ : >> c1=c' c1 = 8 20 10 19 12 18 * Ma trận có các phần tử là 1 : ones(r,c) r số hàng, c số cột Ví dụ : >> ones(3,4) ans = 1 1 1 1 1 1 1 1 1 1 1 1 * Ma trận có các phần tử là 0 : zeros(r,c) r số hàng, c số cột >> zeros(3,3) ans = 0 0 0 0 0 0 0 0 0 4. Các phép toán với mảng Các phép toán cơ bản với mảng được cho trong bảng sau : a.^b=[a1^b1 a2^b2 ... an^bn] c.^a=[c^a1 c^a2 ... c^an] a.^c=[a1^c a2^c... an ^c] Luỹ thừa mảng a./b=[a1/b1 a2/b2... an/bn] Chia phải mảng a.\b=[a1\b1 a2\b2... an\bn] Chia trái mảng a.*b=[a1 *b1 a2 *b2... an*bn] Nhân mảng a+b=[a1 +b1 a2 +b2... an+bn] Cộng mảng a*c=[a1 *c a2 *c... an*c] Nhân với một số a+c=[a1 +c a2 +c... an+c] Cộng với một số Dữ liệu minh hoạ a=[a1 a2 ... an], b=[b1 b2 ... bn], c là số vô hướng 27 Ví dụ: >> a=[1:3;4:6;7:9] a = 1 2 3 4 5 6 7 8 9 >> b=[3:-1:1;6:-1:4;9:-1:7] b = 3 2 1 6 5 4 9 8 7 >> b+2 ans = 5 4 3 8 7 6 11 10 9 >> b*2 ans = 6 4 2 12 10 8 18 16 14 >> a+b ans = 4 4 4 10 10 10 16 16 16 >> a.*b ans = 3 4 3 24 25 24 63 64 63 >> a.\b ans = 3.0000 1.0000 0.3333 1.5000 1.0000 0.6667 1.2857 1.0000 0.7778 >> a./b ans = 0.3333 1.0000 3.0000 0.6667 1.0000 1.5000 0.7778 1.0000 1.2857 28 >> a.^2 ans = 1 4 9 16 25 36 49 64 81 >> 2.^a ans = 2 4 8 16 32 64 128 256 512 >> a.^b ans = 1 4 3 4096 3125 1296 40353607 16777216 4782969 >> a' % ma trận chuyển vị của a ans = 1 4 7 2 5 8 3 6 9 5. Một số hàm thông dụng với ma trận Tổng các phần tử chéoTrace(A) Hạng ma trậnrank(A Đa thứcPoly(A) Tính trực giaoorth(A) Ma trận logarithmlogm(A) Ma trận nghich đảoinv(A) Tính định thức ma trận Adet(A) Ý nghĩaKí hiệu Ví dụ : >> b=[1 9 4;4 0 6;3 4 1] b = 1 9 4 4 0 6 3 4 1 >> det(b) ans = 166 29 >> inv(b) ans = -0.1446 0.0422 0.3253 0.0843 -0.0663 0.0602 0.0964 0.1386 -0.2169 >> trace(b) ans = 2 * Tìm kiếm trong mảng Dùng hàm: Find(điều kiện tìm) ví dụ: >>m=[1 2 3 4;5 6 7 0] m = 1 2 3 4 5 6 7 0 >>[i,j]=find(m<5) % tìm vị trí các phần tử của m<5 i = 1 1 1 1 2 j = 1 2 3 4 4 * Hàm rank: trả về hạng của ma trận. Ví dụ: >> a=[2 4 6;3 5 7; 9 8 7] a = 2 4 6 3 5 7 9 8 7 >> rank(a) ans = 2 30 6. Giải hệ phương trình Cho phương trình Ax = b a.Trường hợp số biến bằng số phương trình Có 2 phương pháp: - Phương pháp 1 dùng ma trận nghịch đảo: x=inv(A)*b - Phương pháp 2 dùng toán tử chia ma trận: x=A.\b Ví dụ: >> A=[1 2 3;4 5 6;7 8 0] A = 1 2 3 4 5 6 7 8 0 >> b=[366;804;315] b = 366 804 315 >> det(A) ans = 27 + Cách thứ nhất dùng ma trận nghịch đảo: >> x=inv(A)*b x = 29.0000 14.0000 103.0000 + Cách thứ hai dùng toán tử chia ma trận: >> x=A.\b x = 29.0000 14.0000 103.0000 31 b. Trường hợp số phương trình và số biến khác nhau Trong nghiên cứu số học tuyến tính, khi số phương trình và số biến khác nhau, thì không thể có một phương pháp duy nhất để giải. Trong MATLAB khi gặp những hệ phương trình có số phương trình lớn hơn số biến : Dùng toán tử chia trái hoặc chia phải, tự động giảm thấp nhất những phần tử thừa AX-b. Cách này gọi là phương pháp vuông nhỏ nhất. Ví dụ: A=[1 2 3;4 5 6;7 8 0;2 5 8] % Bon phuong trinh ba bien A = 1 2 3 4 5 6 7 8 0 2 5 8 >> b=[366;804;351;514] b = 366 804 351 514 >> x=A\b %Phuong phap vuong nho nhat x = 247.9818 -173.1091 114.9273 Tính độ sai lệch: >> res=A*x-b res = -119.4545 11.9455 0.0000 35.8364 + Trong MATLAB khi gặp những hệ phương trình có số phương trình ít hơn số biến. Có thể dùng 2 cách: Cách 1 dùng toán tử chia đưa ra phương pháp có số phần tử 0 của x là cực đại, phương pháp này goi là phương pháp với số phần tử 0 cực đại. Cách thứ 2 tính x= pinv(A) / b đưa ra phương pháp chiều dài hay tiêu chuẩn của x nhỏ hơn các phương pháp khác, phương pháp này gọi là phương pháp tiêu chuẩn cực tiểu. Ta có thể dung cả 2 phương pháp để giải rồi so sánh để nhận nghiệm x nào phù hợp. 32 - Phương pháp với số phần tử 0 cực đại: x=A\b >>A 1 2 3 4 5 6 7 8 0 2 5 8 >> A=A' % Tao 3 phuong trinh 4 bien A = 1 4 7 2 2 5 8 5 3 6 0 8 >> b=[366;804;351] b = 366 804 351 >> x=A\b % Phuong phap voi so phan tu 0 cuc dai x = 0 -165.9000 99.0000 168.3000 - Phương pháp tiêu chuẩn cực tiểu: xn=pinv(A)*b Lệnh pinv . Lệnh này dùng để tính giả nghịch đảo của ma trận A. >> xn=pinv(A)*b % Tim gia phap tieu chuan nho nhat xn = 30.8182 -168.9818 99.0000 159.0545 33 - Tính sai lệch theo 2 phương pháp >> Res1=A*x-b Res1 = 1.0e-012 * -0.3411 0.1137 0 >> Res2=A*xn-b Res2 = 1.0e-012 * -0.5684 -0.7958 -0.3411 Bài tập chương 3 1. Cho dãy số sau: a1,a2,....,an . Viết chương trình tìm phần tử lớn nhất, phần tử nhỏ nhất của dãy số đó. 2. Cho dãy số sau: a1,a2,....,an . Viết chương trình sắp xếp dãy theo thứ tự tăng dần . 3. Cho dãy số sau: a1,a2,....,an . Viết chương trình tìm các phần tử có giá trị là x nhập vào từ bàn phím. 4. Cho ma trân A có m dòng, n cột. Tính tổng các phần tử của ma trận A. Hãy tính: định thức của A, ma trận chuyển vị của A, ma trận nghịch đảo của A, đa thức của A, tổng đường chéo chính của A, hạng của A. 5. Giải hệ phương trình sau bằng 2 phương pháp: x1+ 2 x2 + 6x3 = 2 8x1+ 6x2 + 9x3 = 8 2x1+ 3x2 + x3 = 4 6. Giải hệ phương trình sau 3x1+ 4 x2+ 5x3=3 3x1+ 2x2 + x3 =4 3x1+ 3x2+ 2x3 =2 5x1+ 6x2+ 4x3=8 7. Giải hệ phương trình sau 3x1+ 3x2+ 3x3+ 5x4=3 4x1+ 2x2+ 3x3+ 6x4=4 5x1+ x2+ 2 x3+ 4x4=2 34 Chương 4: Đồ hoạ trong hệ toạ độ phẳng 1. Lênh Plot Lệnh này dùng vẽ đồ thị của một mảng dữ liệu trên hệ trục thích hợp. Trong đó x là mảng dữ liệu cho trục x, y là mảng dữ liệu cho trục y, nối các điểm (x,y) bằng đường thẳng. Cú pháp: Plot(x,y) Ví dụ 1: >> x=linspace(0,2*pi,30) % mảng góc x bằng radian >> y=sin(x) >> plot(x,y) % vẽ đồ thị hàm sin(x) S

Các file đính kèm theo tài liệu này:

  • pdftin_hoc_chuyen_nganh_cho_khoa_co_dien_lap_trinh_tinh_toan_tr.pdf
Tài liệu liên quan