Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
338,41 KB
Nội dung
Giới thiệu Matlab Matlab MatLab (MATrix LABoratory) môi trường phần mềm (problem-solving environment - PSE) tốn học tính tốn MatLab phát triển vào cuối năm 70 Cleve Moler (Stanford) với mục đích giúp sinh viên thực tính tốn số mà khơng cần phải học ngơn ngữ lập trình bậc thấp, ví dụ Fortran Chương 1: Matlab Trần Minh Tồn Được thiết kế cơng ty MathWorks ngơn ngữ lập trình bậc cao chun sử dụng cho tính tốn kỹ thuật, đặc biệt tốn có dạng ma trận vector MatLab tích hợp tính tốn, đồ họa lập trình môi trường thân thiện, cho phép thể toán nghiệm dạng ký hiệu toán học quen thuộc (1) Viện Toán ứng dụng Tin học, ĐHBK Hà Nội MatLab hệ tương tác, có thành phần liệu mảng mà không cần khai báo trước số chiều MatLab trải qua nhiều năm phát triển với đóng góp nhiều chuyên gia Trong trường đại học, cơng cụ chuẩn cho khóa học toán, kỹ thuật khoa học từ đến nâng cao Trong công nghiệp, MatLab công cụ hữu ích cho việc nghiên cứu, phát triển phân tích sản phẩm chất lượng cao (1) Email: toantm24@gmail.com Trần Minh Toàn (SAMI-HUST) Matlab / 66 Trần Minh Toàn (SAMI-HUST) Giới thiệu Matlab Matlab / 66 Giới thiệu Matlab Matlab Matlab MatLab ứng dụng Nét đặc trưng MatLab cung cấp họ Toolboxes , cho phép người dùng học áp dụng kỹ thuật chuyên ngành Toolboxes tập hợp hàm (”M-files") cho phép mở rộng môi trường MatLab để giải lớp toán Toán học tính tốn Phát triển thuật tốn Xử lý tín hiệu (signal processing) Thu thập liệu Các hệ điều khiển (control systems) Mơ hình hóa, mơ Mạng nơ-ron (neural networks) Phân tích liệu, thăm dị trực quan hóa Logic mờ (fuzzy logic) Đồ họa khoa học kỹ thuật Sóng nhỏ (wavelets) Phát triển ứng dụng, xây dựng giao diện người dùng Mơ (simulation) Trần Minh Tồn (SAMI-HUST) Matlab / 66 Trần Minh Toàn (SAMI-HUST) Matlab / 66 Biểu thức Matlab Biến Biểu thức Matlab Biến (Variables) (1) Biến (Variables)(2) MatLab không yêu cầu phải khai báo biến số chiều (kích thước) Trong MatLab , biến khai báo khởi tạo thơng qua lệnh gán, ví dụ: >> num = 98 num = 98 >> pi = 3.1415926535897931 pi = 3.1416 >> msg = ’Hello World’ msg = Hello World Ví dụ kiểu tên biến hợp lệ: arg1, no_name, vars, Vars Khi tên biến không hợp lệ, xuất dịng thơng báo lỗi: >> 4rum = ’Forum’ ??? 4rum = ’Forum’ | Error: Unexpected matlab expression Ta kiểm tra tính hợp lệ tên biến lệnh isvarname Tên biến bao gồm ký tự chữ, số ký hiệu gạch (_) Tên biến phải bắt đầu ký tự chữ có độ dài tùy thích Tuy nhiên, MatLab sử dụng N ký tự tính lệnh >> N = namelengthmax N = 63 Trần Minh Toàn (SAMI-HUST) Matlab Biểu thức Matlab / 66 >> isvarname(’4u’) ans = MatLab phân biệt chữ hoa chữ thường Do A a biến khác Khi MatLab gặp tên biến mới, tự động tạo lưu nhớ Nếu biến tồn tại, MatLab thay đổi giá trị cần, cấp phát nhớ Trần Minh Toàn (SAMI-HUST) Số Matlab Biểu thức Matlab Số (Numbers) / 66 Các toán tử Các toán tử (Operators) MatLab sử dụng ký hiệu thập phân theo qui ước với số chữ số tùy chọn dấu +,- cho số Ký hiệu khoa học sử dụng chữ e cho lũy thừa 10 Số phức sử dụng chữ i j cho đơn vị ảo Một số ví dụ 9.6397238 1i -99 1.60210e-20 -3.14159j 0.0001 6.02252e23 3e5i Tất số lưu trữ bên cách sử dụng long format theo chuẩn dấu chấm động IEEE (Institute of Electrical and Electronics Engineers) Các số dạng dấu chấm động có độ xác hữu hạn với 16 chữ số thập phân có nghĩa nằm khoảng 10−308 , 10+308 Trần Minh Toàn (SAMI-HUST) Biến Matlab / 66 Các biểu thức MatLab sử dụng toán tử quen thuộc theo thứ tự ưu tiên (từ lên trên) Phép toán + * / \ ^ ’ ( ) Trần Minh Toàn (SAMI-HUST) Ý nghĩa Cộng Trừ Nhân Chia Chia trái Lũy thừa Chuyển vị, chuyển vị liên hợp phức Xác định thứ tự ưu tiên phép toán Matlab 10 / 66 Biểu thức Matlab Các hàm Biểu thức Matlab Các hàm (Functions) (1) Các hàm (Functions) (2) Một số hàm sqrt, sin cài đặt sẵn (built-in functions) Các hàm phần nhân MatLab nên chúng hiệu quả, ta khơng biết tính tốn chi tiết Các hàm khác, ví dụ bessel lập trình dạng m-files MatLab cung cấp số lượng phong phú hàm toán học sơ cấp (elementary mathematical functions), ví dụ abs, sqrt, exp, sin Phép lấy bậc hai hay logarit số âm tự động cho giá trị phức thích hợp MatLab đồng thời cung cấp nhiều hàm toán học nâng cao (advanced mathematical functions), bao gồm hàm Bessel gamma Hầu hết hàm chấp nhận đối số phức Để hiển thị danh sách hàm toán học sơ cấp, nhập vào Tương tự danh sách hàm toán học nâng cao hàm xử lý ma trận >> help specfun >> help elmat Matlab Biểu thức Matlab 11 / 66 >> type sqrt >> type bessel Trần Minh Toàn (SAMI-HUST) Matlab Các hàm 12 / 66 Vector Các hàm (Functions) (3) Vector inf tạo phép chia số khác cho 0, việc tính giá trị biểu thức toán học đắn mà bị tràn nhớ, tức vượt realmax NaN tạo cố gắng tính giá trị biểu thức dạng ∞ − ∞ Ta gán cho giá trị mới, ví dụ >> eps = 1.e-6 sử dụng giá trị cho dãy tính tốn Giá trị ban đầu phục hồi với >> clear eps Trần Minh Tồn (SAMI-HUST) Có số khác biệt hàm cài đặt sẵn hàm khác Ví dụ, với hàm built-in, ta khơng thể xem mã cịn hàm khác ta xem mã chí sửa đổi muốn Kiểm chứng điều lệnh Nhiều hàm đặc biệt cho ta giá trị số hữu ích pi 3.14159265 √ i,j Đơn vị ảo, −1 eps Sai số tương đối dạng dấu chấm động, ε = 2.2204e − 016 realmin Số thực nhỏ nhất, 2.2251e − 308 realmax Số thực lớn nhất, 1.7977e + 308 Inf ∞ NaN Not-a-number >> help elfun Trần Minh Toàn (SAMI-HUST) Các hàm Matlab 13 / 66 Vector ma trận có hàng cột Để khởi tạo vector hàng chứa giá trị rời rạc, phần tử vector phải nằm cặp ngoặc vuông [] ngăn cách dấu phẩy "," khoảng trắng ␣ >> arr1 = [1 3] arr1 = >> arr2 = [0,-5] arr2 = -5 >> arr3 = [arr1 arr2] arr3 = Trần Minh Toàn (SAMI-HUST) -5 Matlab 15 / 66 Vector Vector Vector Vector Để khởi tạo vector hàng chứa giá trị liên tiếp cách giá trị định (bước nhảy), MatLab sử dụng toán tử ":", đồng thời giá trị đầu cuối vector không cần thiết phải đặt dấu ngoặc vuông [] >> arr1 = 1:5 arr1 = >> arr2 = [1:0.5:2] arr2 = 1.0000 1.5000 >> arr3 = 10:-1:6 arr3 = 10 >> col_arr=[1:3]’ col_arr = >> col_arr=[1;2;3] col_arr = 2.0000 Ngược lại, để tạo vector cột, ta cần chuyển vị vector hàng cách dùng toán tử "’" dùng dấu ";" để ngăn cách phần tử Để tạo vector rỗng (không chứa phần tử nào) ta khai báo sau: >> emp_arr = [] emp_arr = [] Trần Minh Toàn (SAMI-HUST) Matlab 16 / 66 Trần Minh Toàn (SAMI-HUST) Vector Matlab 17 / 66 Vector Vector Vector Hàm linspace Hàm logspace Cú pháp Cú pháp y = linspace(a,b) y = linspace(a,b,n) y = logspace(a,b) y = logspace(a,b,n) y = logspace(a,pi) Mô tả Mô tả Hàm linspace tạo vector với khoảng cách tuyến tính Nó tương tự toán tử hai chấm ":", xác định trước số điểm chia n y = linspace(a,b) tạo vector hàng y với 100 điểm cách bao gồm a b y = linspace(a,b,n) tạo vector hàng y với n điểm cách bao gồm a b Với n < 2, hàm linspace trả b Trần Minh Toàn (SAMI-HUST) Matlab 18 / 66 Hàm logspace tạo vector với khoảng cách logarit y = logspace(a,b) tạo vector hàng y gồm 50 điểm khoảng 10a 10b y = logspace(a,b,n) tạo vector hàng y với n điểm khoảng 10a 10b Nếu n < 2, trả 10b y = logspace(a,pi) tạo điểm 10a and π, thường sử dụng xử lý tín hiệu số Trần Minh Toàn (SAMI-HUST) Matlab 19 / 66 Vector Vector Vector Vector Chỉ số Vector biểu thức logic Giá trị phần tử vị trí vector truy xuất thông qua số Trong MatLab , số giá trị đơn mảng Trích phần tử thứ i: X(i) Trích nhiều phần tử: X([danh sách vị trí]) >> arr = 10:-1:0 arr = 10 >> arr(5) ans = >> arr([7,8,11]) ans = Để xóa phần tử vector, ta gán phần tử với vector rỗng: >> arr([2 5]) = [] arr = 10 Trần Minh Toàn (SAMI-HUST) Matlab 20 / 66 Biểu thức logic cho phép truy xuất cách linh hoạt đến thành phần vector hay ma trận Ví dụ >> x = [-1 >> x>0 ans = >> x(x>0) ans >> x(x>2 & ans = >> x>2 ans = 0 9]; 1 1 x> x=[-1 3]; >> any(x>0) ans = all: Kiểm tra xem tất phần tử vector thỏa mãn điều kiện khơng Ví dụ >> all(x> A = [1 4;4 6] >> find(isprime(A))% xuất vị trí có giá trị số ngun tố ans = Trần Minh Toàn (SAMI-HUST) Matlab 22 / 66 a.*b; % nhân từ a.^b % trả vector dạng (a_1^{b_1}, ,a_n^{b_n}) a.^n; % lũy thừa từ a.\b; % chia trái a./b; % chia phải a & b; % không nhầm lẫn với && a | b; % không nhầm lẫn với || ~a; % phủ định sort(a); sort(a,’descend’); % Sắp xếp mảng a theo thứ tự tăng, giảm dần arrayfun(@fn,a); % tính giá trị hàm fn thành phần a % (không dùng) isequal(a,b); % Đúng a==b ismember(a,b); % Đúng phần tử a phần tử b intersect(a,b); % Các phần tử chung a b (phép giao tập hợp) union(a,b); % Tất phần tử thuộc a b (phép hợp tập hợp) setdiff(a,b); % Các phần tử thuộc a mà không thuộc b (hiệu tập hợp) setxor(a,b); % Các phần tử không thuộc phần chung a b Trần Minh Toàn (SAMI-HUST) Matlab 23 / 66 Đa thức Đa thức Đa thức MatLab Giá trị đa thức f (x) = an xn + an−1 xn−1 + · · · + a1 x + a0 , an = 0, n bậc đa thức MatLab tính giá trị đa thức điểm x cách sử dụng hàm Ví dụ polyval(p,x) f (x) = 2x2 − 4x + 10 bậc f (x) = bậc p vector biểu diễn đa thức x số, biến biểu thức Trong MatLab , đa thức biểu diễn vector hàng có thành phần hệ số Vector phải chứa tất hệ số, kể hệ số >> p=[5 -7 3]; >> x=2; >> y=polyval(p,x) y = 53 Ví dụ 8x + 6x2 − 150 Trần Minh Toàn (SAMI-HUST) p=[8 5] h=[6 -150] Matlab Ví dụ 25 / 66 Trần Minh Toàn (SAMI-HUST) Matlab Đa thức 26 / 66 Đa thức Nghiệm đa thức Tìm đa thức biết trước nghiệm Nhắc lại nghiệm đa thức giá trị biến cho giá trị đa thức Cho trước nghiệm đa thức, MatLab tính hệ số đa thức lệnh MatLab tìm nghiệm đa thức lệnh p=poly(r) r=roots(p) trong r vector hàng cột chứa nghiệm đa thức p vector hàng chứa hệ số p vector biểu diễn đa thức r vector cột chứa nghiệm đa thức Ví dụ Ví dụ >> r=[-3;2]; >> p=poly(r) p = 1 % f(x)=x^2+x-6 >> p=[1 -2 -3]; >> r=roots(p) r = 3.0000 -1.0000 Trần Minh Toàn (SAMI-HUST) Matlab 27 / 66 Trần Minh Toàn (SAMI-HUST) -6 Matlab 28 / 66 Đa thức Đa thức Cộng đa thức Nhân đa thức Để cộng, trừ hai vector MatLab vector hệ số cần phải kích cỡ, vector có độ dài ngắn phải thêm phần tử Ví dụ Cú pháp c=conv(a,b) % f1(x)=3x^6+15x^5-10x^3-3x^2+15x-40 % f2(x)=3x^3-2x-6 >> p1=[3 15 -10 -3 15 -40]; >> p2=[0 0 -2 -6]; >> p=p1+p2 p = 15 -7 -3 13 % f(x)=3x^6+15x^5-7x^3-3x^2+13x-46 Trần Minh Toàn (SAMI-HUST) a b vector hệ số đa thức c vector hệ số tích Ví dụ >> a=[2 -3]; >> b=[1 1]; >> c=conv(a,b) c = -46 Matlab 29 / 66 -2 -3 Trần Minh Toàn (SAMI-HUST) Đa thức Matlab 30 / 66 Đa thức Chia đa thức Đạo hàm đa thức Cú pháp [q,r]=deconv(u,v) MatLab tính đạo hàm đa thức lệnh u v q r k=polyder(p) vector hệ số đa thức bị chia vector hệ số đa thức chia vector hệ số thương vector hệ số phần dư p vector hệ số đa thức k vector hệ số đạo hàm Ví dụ Ví dụ >> p=[3 -2 4]; >> k=polyder(p) k = -2 >> u=[1 -9 -10]; >> v=[1 1]; >> [q,r]=deconv(u,v) q = -10 r = 0 Trần Minh Toàn (SAMI-HUST) Matlab 31 / 66 Trần Minh Toàn (SAMI-HUST) Matlab 32 / 66 Đa thức Ma trận Nguyên hàm đa thức Nhập ma trận Nhập ma trận (1) Khi nhập ma trận mơi trường dịng lệnh ta phải tuân theo qui định sau: Ngăn cách phần tử ma trận dấu "," hay khoảng trắng ␣ MatLab tính ngun hàm đa thức lệnh Dùng dấu ";" để kết thúc hàng g=polyint(h,k) Bao phần tử ma trận cặp dấu [] h vector hệ số đa thức g vector hệ số nguyên hàm k số tích phân, mặc định Ví dụ nhập ma trận Ví dụ >> h=[6 0]; >> g=polyint(h) g = 0 >> A = [ 16 13 ; 10 11 ; 12 ; 15 14 1] A = 16 13 10 11 12 15 14 Trần Minh Toàn (SAMI-HUST) Matlab Ma trận 33 / 66 Trần Minh Toàn (SAMI-HUST) Nhập ma trận Matlab Ma trận Nhập ma trận (2) Nhập ma trận Nhập ma trận (3) Bây ta nhập lệnh 35 / 66 Chỉ số >> sum(A) ans = 34 34 Phần tử hàng i, cột j ma trận (cỡ m × n) A A(i,j) 34 34 nghĩa lấy tổng cột MatLab viết để làm việc với cột Muốn lấy tổng của hàng ta cần chuyển vị ma trận >> A’ ans = 16 13 Ta tham chiếu tới phần tử mảng nhờ số, ví dụ A(k) với k = i + (j − 1)m (duyệt theo cột, từ xuống dưới, từ trái qua phải) Để chuyển từ số ma trận sang số mảng chiều dùng lệnh >> k=sub2ind(size(A),i,j) Ngược lại, để chuyển từ số mảng chiều sang số ma trận, dùng hàm ind2sub 10 11 12 15 14 >> [i,j]=ind2sub(size(A),k) Trong MatLab , số cuối hàng hay cột ma trận vector thay end Ví dụ: Chú ý Ma trận a = [] ma trận rỗng Trần Minh Toàn (SAMI-HUST) Matlab 36 / 66 >> x=[1 3; 6]; >> y=x(1:end,1:end-1) y = Trần Minh Toàn (SAMI-HUST) Matlab 37 / 66 Ma trận Nhập ma trận Ma trận Nhập ma trận Nhập ma trận (5) Nhập ma trận (4) Kích thước Để xác định kích thước ma trận ta dùng lệnh length (trả kích thước lớn nhất) hay lệnh size (số hàng cột) Ví dụ: Các lệnh tính kích thước ma trận liệt kê bảng sau: whos >> c = [1 4; 8]; >> length(c) ans = >> [m, n] = size(c) m = n = s = size(A) [r,c] = size(A) r = size(A,1) c = size(A,2) n = length(A) Trần Minh Toàn (SAMI-HUST) Matlab Ma trận 38 / 66 Hiển thị biến không gian làm việc kích cỡ tương ứng Trả vector hàng s, s(1)-số hàng s(2)-số cột Trả hai số r,c ứng với số hàng số cột Trả số hàng A Trả số cột A Trả max(size(A)) A khác [] Trần Minh Toàn (SAMI-HUST) Matlab Nhập ma trận Ma trận Nhập ma trận (6) 39 / 66 Nhập ma trận Nhập ma trận (7) >> 100:-5:50 Toán tử tạo dãy số từ 100 đến 50, lần giảm Toán tử ":" toán tử quan trọng MatLab , xuất nhiều dạng khác ans = 100 Ví dụ >> 0: pi/4: pi ans = 0.7854 Biểu thức 90 85 80 1.5708 75 70 2.3562 65 60 55 50 3.1416 Các biểu thức số tham chiếu đến phần ma trận Viết A(1:k,j) tham chiếu đến k phần tử cột j ma trận Ngoài toán tử ”:” tham chiếu tới tất phần tử hàng hay cột >> 1:10 cho kết vector hàng chứa 10 số nguyên liên tiếp từ đến 10 ans = 95 Trần Minh Toàn (SAMI-HUST) Matlab >> A(:,3) ans = 11 14 10 40 / 66 Trần Minh Toàn (SAMI-HUST) Matlab 41 / 66 Ma trận Nhập ma trận Ma trận Nhập ma trận (8) Nhập ma trận Tạo ma trận từ hàm có sẵn(1) >> A(3,:) ans = MatLab cung cấp hàm để tạo ma trận 12 zeros ones rand randn magic(n) Viết B = A(:, [1 4]) tạo ma trận B cách đổi thứ tự cột từ [1 4] thành [1 4] >> B=A(:,[1 4]) B = 16 11 10 14 15 pascal(n) eye(n) 13 12 Trần Minh Toàn (SAMI-HUST) Matlab Ma trận 42 / 66 Tất phần tử Tất phần tử Các phần tử có phân bố [0, 1] Các phần tử có phân bố chuẩn [0, 1] Tạo ma trận cấp n gồm số nguyên từ đến n2 với tổng hàng tổng cột n ≥ Tạo ma trận xác định dương mà phần tử lấy từ tam giác Pascal Tạo ma trận đơn vị cấp n Trần Minh Toàn (SAMI-HUST) Nhập ma trận Matlab Ma trận Tạo ma trận từ hàm có sẵn (2) 43 / 66 Nhập ma trận Hàm load Sau số ví dụ: >> Z=zeros(2,4) Z = 0 0 0 >> F=5*ones(3) F = 5 5 5 5 >> R=randn(4) R = 0.5377 0.3188 1.8339 -1.3077 -2.2588 -0.4336 0.8622 0.3426 Trần Minh Toàn (SAMI-HUST) Hàm load đọc file văn chứa liệu số File văn phải tổ chức bảng chữ nhật số, cách khoảng trắng ␣, hàng dòng số phần tử hàng Ví dụ, ta tạo file matrix.dat có nội dung sau: 0 16.0 3.0 2.0 13.0 5.0 10.0 11.0 8.0 9.0 6.0 7.0 12.0 4.0 15.0 14.0 1.0 Khi đó, lệnh 3.5784 2.7694 -1.3499 3.0349 >> load matrix.dat 0.7254 -0.0631 0.7147 -0.2050 Matlab đọc file tạo biến matrix chứa phần tử 44 / 66 Trần Minh Toàn (SAMI-HUST) Matlab 45 / 66 Ma trận Nhập ma trận Ma trận Ghép nối M-files Ghép nối (Concatenation) Ta tạo ma trận cách sử dụng file văn chứa mã MatLab (M-files) Sử dụng trình soạn thảo Matlab Editor trình soạn thảo tạo file chứa lệnh giống dùng mơi trường dịng lệnh MatLab , sau lưu file dạng ”.m” Ví dụ, tạo file chứa dịng sau: Ta ghép nối ma trận nhỏ để tạo thành ma trận lớn Ví dụ A = [ 16.0 3.0 2.0 13.0 5.0 10.0 11.0 8.0 9.0 6.0 7.0 12.0 4.0 15.0 14.0 1.0 ]; Lưu file tên matrix.m Khi lệnh >> matrix >> A=ones(3) A = 1 1 1 >> B=[A A+3; A+4 B = 1 1 1 5 5 5 1 A+6] 1 5 4 7 4 7 4 7 đọc file tạo biến A có phần tử Trần Minh Toàn (SAMI-HUST) Matlab Ma trận 46 / 66 Xóa hàng cột Matlab Ma trận Xóa hàng cột 47 / 66 Một số lệnh xử lý ma trận Một số lệnh xử lý ma trận (1) (Đọc thêm help) Ta xóa hàng cột ma trận cách gán cho chúng giá trị [] Ví dụ Cộng Trừ Nhân >> A=[1 3; 6; 9] A = >> X=A; Chia Lũy thừa Để xóa cột thứ X: Chuyển vị (liên hợp ma trận phức) >> X(:,2)=[] X = Trần Minh Toàn (SAMI-HUST) Trần Minh Toàn (SAMI-HUST) Nghịch đảo Định thức Hệ đại số tuyến tính Ax = b Matlab 48 / 66 Trần Minh Toàn (SAMI-HUST) X = A + B X = A - B X = A * B A.*B nhân phần tử tương ứng với X = A/B, X*A = B X = A\B, A*X = B X = A./B chia phần tử tương ứng cho X = A^2 X = A.^: lũy thừa từ X = A’ A.’: chuyển vị (không liên hợp) X = inv(A) d = det(A) Nghiệm x = A\b Matlab 49 / 66 Ma trận Một số lệnh xử lý ma trận Ma trận Một số lệnh xử lý ma trận (2) Phân tích Cholesky Phân tích LU Phân tích QR Giá trị riêng, vector riêng Quay ma trận Đảo ma trận từ trái sang phải Đảo ma trận từ xuống Định dạng lại ma trận A với số hàng m số cột n Lấy phần tử đường chéo lưu thành vector Chọn đường chéo tùy theo giá trị k Trần Minh Toàn (SAMI-HUST) Một số lệnh xử lý ma trận Một số lệnh xử lý ma trận (3) R = chol(A) [L,U] = lu(A) [Q,R] = qr(A) eig(A), [d,r] = eig(A) B = rot90(A) C = fliplr(A) D = flipud(A) reshape(A,m,n) Tạo ma trận có đường chéo vector v Tạo ma trận cỡ với a, có phần tử đường chéo phía đường chéo chính, phần tử khác Tạo ma trận cỡ với a, có phần tử đường chéo phía đường chéo chính, phần tử khác diag(A) A = diag(v) b = triu(a) b = tril(a) diag(A,k) k = chọn đường chéo k > chọn đường chéo thứ k đường chéo k < chọn đường chéo thứ k dưới chéo Matlab 50 / 66 Trần Minh Toàn (SAMI-HUST) Cấu trúc (Structures) Matlab 51 / 66 Cấu trúc (Structures) Cấu trúc Cấu trúc Liệt kê danh sách trường Là cách tổ chức liệu liên quan f=fieldnames(s); Ví dụ, tạo cấu trúc s với trường x,y name Tham chiếu động tới trường (dynamic field reference): >> s.y=1; >> s.x=[1 1]; >> s.name=’abc’; >> s s = y: x: [1 1] name: ’abc’ s.x; s.(’x’) Vòng lặp trường f=fields(s); % tương đương với f=fieldnames(s) for i=1:length(s) doSomething(s.(f{i})); end % for f=fields(s) % doSomething(s.(char(f))); end % gọn structfun(@doSomething,s); đơn giản với từ khóa struct: >> s2=struct(’y’,1,’x’,[1 1],’name’,’abc’) Sử dụng trường biến bình thường Trần Minh Tồn (SAMI-HUST) % tham chiếu tĩnh (static field reference) tới s.x % tham chiếu động tới s.x Matlab 53 / 66 Trần Minh Toàn (SAMI-HUST) Matlab 54 / 66 Cấu trúc (Structures) Mảng tế bào (Cell Arrays) Cấu trúc Mảng tế bào Ta tạo mảng cấu trúc, ví dụ Mảng tế bào chứa kiểu liệu for i=1:10 s(i).y=rand(); s(i).x=[i:i+2]; s(i).name=sprintf(’name %d’,i); end >> >> >> >> a=cell(3,2); a{1,1}=1; a{3,1}=’hello’; a{2,2}=randn(100,100); Hữu dụng cho việc xử lý xâu tránh việc dùng squeeze() Biến đổi mảng cấu trúc → mảng thông thường Sử dụng mảng tế bào với kiểu liệu khác gây rắc rối for i=1:length(s) X(:,i)=s(i).x; end số với dấu () cho ta thành phần mảng tế bào mà thân chúng tế bào số với dấu {} chuyển thành phần mảng tế bào sang dạng liệu bản, trả dạng danh sách cách dấu phẩy "," có nhiều phần tử nhanh X=[s.x]; Trần Minh Toàn (SAMI-HUST) Matlab 55 / 66 Trần Minh Toàn (SAMI-HUST) Mảng tế bào (Cell Arrays) Matlab Vẽ đồ thị 57 / 66 Vẽ đồ thị 2-D Vẽ đồ thị 2-D Mảng tế bào Ví dụ >> a={[1 2],3} a = [1x2 double] [3] >> y=a{1} y = >> ycell=a(1) ycell = [1x2 double] >> x=y+1 x = >> xcell=ycell+1 ??? Undefined function or method ’plus’ for input arguments of type ’cell’ >> onetwothree=[a{1:2}] onetwothree = Trần Minh Toàn (SAMI-HUST) Matlab Lệnh bản: plot(x,f(x)) Trong đó, x vector chứa miền xác định hàm có biểu thức f (x) Ví dụ Vẽ đồ thị hàm số y = sin(x) với x biến thiên khoảng [0, 2π]: x = 0:pi/100: 2*pi; y = sin(x); plot(x, y); 58 / 66 Trần Minh Toàn (SAMI-HUST) Matlab 60 / 66 Vẽ đồ thị Vẽ đồ thị 2-D Vẽ đồ thị Vẽ đồ thị 2-D Vẽ đồ thị 2-D Chú thích thêm cho đồ thị Vẽ đồ thị 2-D Tùy chỉnh nét vẽ, dấu màu sắc text(x, y, ’ ’) gtext(’ ’) title(’ ’) legend(’ ’,’ ’, ) xlabel(’ ’) ylabel(’ ’) \bf \it \rm hold on/off Đặt thích lên đồ thị tọa độ (x,y) Đặt thích lên đồ thị, vị trí xác định click chuột Tiêu đề đồ thị Thêm giải cho đồ thị Ghi nhãn cho trục Ox Ghi nhãn cho trục Oy Font in đậm Font in nghiêng Font chữ thường Bật/tắt chế độ cho phép vẽ nhiều đồ thị hệ trục tọa độ Trần Minh Toàn (SAMI-HUST) Matlab Vẽ đồ thị Lệnh tổng quát >> plot(x,y,’color_style_marker’) Trong Các màu sắc: ’c’-cyan, ’m’-tím (magenta), ’y’-vàng (yellow), ’r’-đỏ (red), ’g’-xanh (green), ’b’-xanh nước biển (blue), ’w’-trắng (white) ’k’-đen (black) Nét vẽ: ’-’: nét liền, ’ ’: nét đứt, ’:’: chấm chấm, ’-.’: gạch chấm Dấu: ’+’, ’o’, ’*’ ’x’; ’s’: 2, ’d’: ’p’: , ’h’: cạnh 61 / 66 Trần Minh Toàn (SAMI-HUST) Vẽ đồ thị 2-D Matlab Vẽ đồ thị Vẽ đồ thị 2-D , ’^’: , ’v’: , ’>’: , ’> subplot(m, n, p): tạo ma trận m hàng, n cột chứa m × n đồ thị , p vị trí đồ thị, thứ tự từ xuống Trần Minh Toàn (SAMI-HUST) Matlab 63 / 66 Trần Minh Toàn (SAMI-HUST) Matlab 64 / 66 Vẽ đồ thị Vẽ đồ thị 3-D Vẽ đồ thị Vẽ đồ thị 3-D Vẽ đồ thị 3-D Vẽ đồ thị 3-D Một số lệnh khác (đọc help!) Lệnh >> plot3(x, y, z) contour / contourf / contour3 Trong plot3, ta cần xác định vector (x, y, z) Để vẽ mặt z = f (x, y), sử dụng lệnh mesh / meshc / meshz >> meshgrid(x,y) surf / surfc waterfall Ví dụ >> >> >> >> bar3 / bar3h t = 0:0.02*pi:25*pi; x = sin(t); y = cos(t); z = t; plot3(x,y,z); pie3 / fill3 comet3 / scatter3 / stem3 In xuất đồ thị Ví dụ Vẽ mặt z(x, y) = x2 ye−x −y Dùng lệnh với −4 ≤ x ≤ 4; −4 ≤ y ≤ >> print -dtiff -r200 mygraph.tiff print –deps2 mygraph.eps [x,y]=meshgrid([-4:0.1:4]); z=x.*x.*y.*exp(-x.^ 2-y.^ 2); plot3(x,y,z) Trần Minh Toàn (SAMI-HUST) Sử dụng Plotting Tools Matlab 65 / 66 Trần Minh Toàn (SAMI-HUST) Matlab 66 / 66 ... f1(x)=3x^6+15x^ 5-1 0x^ 3-3 x^2+15x-40 % f2(x)=3x^ 3-2 x-6 >> p1=[3 15 -1 0 -3 15 -4 0]; >> p2=[0 0 -2 -6 ]; >> p=p1+p2 p = 15 -7 -3 13 % f(x)=3x^6+15x^ 5-7 x^ 3-3 x^2+13x-46 Trần Minh Toàn (SAMI-HUST) a b vector... Ví dụ Ví dụ >> r= [-3 ;2]; >> p=poly(r) p = 1 % f(x)=x^2+x-6 >> p=[1 -2 -3 ]; >> r=roots(p) r = 3.0000 -1 .0000 Trần Minh Toàn (SAMI-HUST) Matlab 27 / 66 Trần Minh Toàn (SAMI-HUST) -6 Matlab 28 / 66... dụ Ví dụ >> p=[3 -2 4]; >> k=polyder(p) k = -2 >> u=[1 -9 -1 0]; >> v=[1 1]; >> [q,r]=deconv(u,v) q = -1 0 r = 0 Trần Minh Toàn (SAMI-HUST) Matlab 31 / 66 Trần Minh Toàn (SAMI-HUST) Matlab 32 /