1. Trang chủ
  2. » Công Nghệ Thông Tin

Ma trận và mảng trong matlab

22 14,4K 23

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 253,3 KB

Nội dung

Các tạo và các lệnh sử dụng Ma trận và mảng trong Matlab, dạy bạn sử dụng thành thạo cách dùng lệnh tạo mảng và ma trận trong Matlab

Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 12 Chương 2 MA TRẬN MẢNG TRONG MATLAB Tất cả mọi sự tính toán đều có một điểm chung là có sử dụng đến các đại lượng vô hướng gọi là scalars. Phép toán có liên quan đến scalars là các phép toán cơ bản, nhưng một lúc nào đó phép toán phải lập lại nhiều lần khi tính trên nhiều số. Ðể giải quyết vấn đề này MATLAB đưa ra các khái niệm thao tác tính toán trên mảng ma trận. 2.1. Mảng đơn 2.1.1. Cấu trúc các mảng cơ bản - Ðể tạo mảng, ta đặt các phần tử của mảng vào giữa hai dấu ngoặc vuông, giữa hai phần tử của mãng có thể là dấu cách hoặc dấu phẩy. - Với mảng có số lượng phần tử ít thì ta có thể nhập vào trực tiếp, nhưng với mảng có số lượng lớn các phần tử thì ta có thể dùng các cách sau: x = first : last : tạo vectơ hàng x bắt đầu tại first, phần tử sau bằng phần tử trước cộng với 1, kết thúc là phần tử có giá trị bằng hoặc nhỏ hơn last. x = first : increment : last : tạo vectơ hàng x bắt đầu tại first, giá trị cộng là increment, kết thúc là phần tử có giá trị bằng hoặc nhỏ hơn last. x = linspace (first,last,n): tạo vectơ hàng x bắt đầu tại first, kết thúc là last, có n phần tử. x = logspace (first,last,n): tạo vectơ hàng không gian logarithm x bắt đầu tại 10 first , kết thúc tại 10 last , có n phần tử. Ví dụ : >> a=1:5 a = 1 2 3 4 5 >> b=[6 7 8] b = 6 7 8 >> c=[a b] c = 1 2 3 4 5 6 7 8 2.1.2. Vectơ hàng vectơ cột Trong các ví dụ trước, mảng chứa một hàng nhiều cột, thường gọi là vectơ hàng. Mảng có một cột nhiều hàng gọi là vectơ cột. Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 13 Ðể tạo vectơ cột, ta dùng dấu chấm phẩy để phân cách các phần tử. Ngoài ra, ta cũng có thể dùng các hàm linspace, logspace, hay từ các vectơ hàng, sau đó dùng phương pháp chuyển vị. Ví dụ : >> x=linspace(0,pi,5) x = 0 0.7854 1.5708 2.3562 2.1416 >> y=x' y = 0 0.7854 1.5708 2.3562 2.1416 2.2. Ma trận 2.2.1. Nhập một ma trận trong MATLAB 2.2.1.1. Nhập một ma trận từ một danh sách tường minh: Một ma trận trong MATLAB được định nghĩa như một mảng nhiều chiều theo nguyên tắc sau: Mỗi phần tử trên từng dòng của ma trận được cách nhau bởi dấu phẩy hoặc khoảng trống. Mỗi hàng được phân cách bởi một dấu chấm phẩy. Bao quanh ma trận bởi một cặp ngoặc vuông. Ví dụ : Tạo ma trận 3x3:           987 654 321 Lệnh MATLAB: >> A=[1 2 3;4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 2.1.1.2. Tạo ma trận từ những hàm có sẵn trong MATLAB: MATLAB có một thư viện các hàm cho phép tạo ma trận. Sau đây là một số hàm: zeros(n,m): tạo một ma trận kích thước n x m, với các phần tử đều bằng không. eye(n): tạo một ma trận đơn vị kích thước n x n. ones(n,m): tạo ma trận kích thước n x m, với các phần tử đều bằng một. Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 14 rand(n,m): tạo ma trận kích thước n x m, với các phần tử có giá trị ngẫu nhiên từ 0 -1 diag(V): nếu V là một vectơ sẽ tạo ra ma trận đường chéo, với các phần tử của vectơ V nằm trên đường chéo. Ví dụ : >> zeros(2,3) ans = 0 0 0 0 0 0 >> diag([1 2 3]) ans = 1 0 0 0 2 0 0 0 3 2.1.1.3. Nhập ma trận từ một file Lệnh Load trong MATLAB dùng để đọc file chứa ma trận tạo ra từ những lệnh MATLAB trước đó. Lệnh này còn dùng để đọc text file chứa những dữ liệu số. Text file phải được tổ chức như một bảng số các phần tử được cách nhau bởi các khoảng trống, mỗi hàng của ma trận chiếm mỗi hàng của text file. Số phần tử của mỗi hàng phải bằng nhau. 2.1.1.4. Sử dụng M-file Trên màn hình MATLAB, chọn File → New → M-file. Trên màn hình soạn thảo nhập vào các lệnh sau: A=[1 2 3 4 5 6 7 8 9] Save file với tên matran. Sau đó từ màn hình MATLAB đánh vào: matran Kết quả là: A = 1 2 3 4 5 6 7 8 9 2.2.2. Các thao tác đối với ma trận 2.2.2.1. Sự móc nối ma trận MATLAB cho phép kết hợp các ma trận con để tạo nên một ma trận lớn hơn. Ví dụ : >> b=ones(3,3); >> c=zeros(3,3); >> a=[b c;c b] Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 15 a = 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 2.2.2.2. Xóa dòng cột của ma trận MATLAB cho phép xóa dòng hoặc cột của ma trận bằng cách gán các giá trị rỗng cho hàng hoặc cột của ma trận. Một giá trị rỗng được kí hiệu bởi []. Ví dụ : >> a=[1 2 3;4 5 6;7 8 9] a = 1 2 3 4 5 6 7 8 9 >> a(2,:)=[] a = 1 2 3 7 8 9 >> a(:,3)=[] a = 1 2 7 8 2.2.2.3. Ma trận chuyển vị Ma trận chuyển vị của ma trận A là một ma trận các hàng của ma trận A là các cột của ma trận này. Ví dụ : >> a=[1 2 3;4 5 6;7 8 9] a = 1 2 3 4 5 6 7 8 9 >> b=a' b = 1 4 7 2 5 8 3 6 9 Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 16 2.2.2.4. Lệnh diag Dùng để tạo ma trận đường chéo rút ra đường chéo của ma trận Cú pháp : diag(v,k): nếu v là một vectơ gồm n phần tử thì kết quả là một ma trận vuông bậc n + |k|. Trong đó các phần tử của v nằm trên đường chéo thứ k. Nếu k = 0, đường chéo là đường chéo chính, k > 0 là đường chéo thứ k nằm trên đường chéo chính, k < 0 là đường chéo thứ k nằm dưới đường chéo chính. diag(X,k): nếu X là một ma trận thì kết quả là một vectơ cột hình thành từ những phần tử của đường chéo thứ k. diag(X): trả về một vectơ là đường chéo chính của ma trận. diag(diag(X)): trả về một ma trận đường chéo. Ví dụ : >> v=[1 2 3]; >> diag(v,1) ans = 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 >> X=[1 2 3;4 5 6;7 8 9]; >> diag(X,0) ans = 1 5 9 2.2.2.5. Lệnh sum Tính tổng các hàng hay các cột của ma trận. Cú pháp : sum(X) hay sum(X,1): trả về một vectơ mỗi phần tử là tổng của từng cột trong ma trận. sum(X,2): trả về một vectơ mỗi phần tử là tổng của từng hàng trong ma trận. Ví dụ : >> a=[1 2 3;4 5 6;7 8 9] a = 1 2 3 4 5 6 Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 17 7 8 9 >> tong_cot=sum(a) tong_cot = 12 15 18 >> tong_hang=sum(a,2) tong_hang = 6 15 24 2.2.2.6. Ma trận symbolic Có hai cách định nghĩa một ma trận symbolic: - Từ các tham số - Từ các số thực Ðể định nghĩa ma trận symbolic, hai lệnh sym syms thường được sử dụng: sym(‘a’): trả về kết quả là một biến symbolic tên là a. sym(‘[…;…;…]’):trả về một ma trận symbolic. sym(A): với A là một số thực hay ma trận số thực sẽ trả về một biến hay ma trận symbolic. syms arg1 arg2 tương đương với arg1 = sym(‘arg1’) ; arg2 = sym(‘arg2’) 2.2.2.7. Lệnh det Dùng để tính định thức của ma trận. Cú pháp : det(A): kết quả là biểu thức symbolic nếu A là ma trận symbolic, là một giá trị số nếu A là một ma trận số. Ví dụ : >> syms a b c d >> A=[a b;c d]; >> r=det(A) r = a*d-b*c Ðối với một số ma trận đặc biệt ta có một số kết quả sau: - Ðịnh thức của một ma trận đơn vị bằng một. - Ðịnh thức của một ma trận đường chéo đơn giản là tích của của các phần tử đường chéo. Một ma trận định thức của nó có giá trị bằng không người ta gọi đó là ma trận suy biến. Ngoài việc dùng định thức để giải hệ phương trình tuyến tính, người ta còn dùng nó để xác định điều kiện có nghiệm hay không của hệ. Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 18 2.2.2.8. Các toán hạng ma trận Trong MATLAB tồn tại các toán hạng sau: A + B Cộng ma trận A B. A B phải có cùng kích thước, ngoại trừ một trong hai là một giá trị vô hướng. A – B Trừ ma trận A B. A B phải có cùng kích thước, ngoại trừ một trong hai là một giá trị vô hướng. A * B Nhân ma trận A B. Số cột của ma trận A phải bằng số hàng của ma trận B, ngoại trừ một trong hai là một giá trị vô hướng. A .* B Nhân từng phần tử của ma trận A với từng phần tử của ma trận B. Kết quả là một ma trận. A B phải có cùng kích thước, ngoại trừ một trong hai là một giá trị vô hướng A \ B Chia trái ma trận. X = A\B tương đương với việc giải hệ phương trình tuyến tính A*X = B A .\ B Chia trái mảng. A .\ B tương đương với B(i,j)/A(i,j). A B phải có cùng kích thước, ngoại trừ một trong hai là một giá trị vô hướng. A / B Chia phải ma trận. X = A/B tương đương với việc giải hệ phương trình tuyến tính B*X = A. A ./ B Chia phải mảng. A ./ B tương đương với A(i,j)/B(i,j). A B phải có cùng kích thước, ngoại trừ một trong hai là một giá trị vô hướng. A ^ B Lũy thừa ma trận. Lỗi sẽ phát sinh nếu A B đều là ma trận. A .^ B Lũy thừa mảng. Kết quả là một ma trận các số hạng là A(i,j)^B(i,j). A B phải có cùng kích thước, ngoại trừ một trong hai là một giá trị vô hướng. 2.3. Gải hệ phương trình tuyến tính Một hệ phương trình tuyến tính có dạng tổng quát sau: a 11 x 1 + a 12 x 2 + a 1n x n = b 1 a 21 x 1 + a 22 x 2 + a 2n x n = b 2 M M a m1 x 1 + a m2 x 2 + a mn x n = b m Với: A = [a ij ] m x n là ma trận hệ số. A * = [A b] m x (n +1) là ma trận đầy đủ. Một số phương pháp để giải hệ này: - Nghịch đảo ma trận - Phương pháp khử Gauss - Phương pháp khử Gauss - Jordan - Phương pháp phân rã ma trận (LU) Một trong những ứng dụng của MATLAB là để giải hệ phương trình đại số tuyến tính. Trong MATLAB có một số hàm đã được xây dựng để sử dụng cho các phương pháp này. Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 19 2.3.1. Nghịch đảo ma trận Xét hệ phương trìng tuyến tính. Dưới dạng ma trận hệ có dạng sau: AX = B ⇒ X = A -1 B Với A -1 là ma trận nghịch đảo của ma trận hệ số A. b b b B x x x X a a a a a a a a a A n 2 1 n 2 1 nn 2n 1n n2 22 12 n1 21 11               =               =             = MMM K O L L MM 2.3.1.1. Lệnh inv inv(A): dùng để tính ma trận nghịch đảo. Ví dụ : giải hệ phương trình tuyến tính A*X = B sau: 7 7 4 B x x x X 5- 1- 2- 1 3 1 2 1 1 A 3 2 1           =           =           = >> A=[1 1 -2;1 3 -1;2 1 -5]; >> B=[4;7;7]; >> A_inv=inv(A) A_inv = 14.0000 -3.0000 -5.0000 -3.0000 1.0000 1.0000 5.0000 -1.0000 -2.0000 >> X=A_inv*B X = 0 2.0000 -1.0000 2.3.1.2. Lệnh pinv pinv(A): dùng để tính giả nghịch đảo của ma trận m x n, với m ≠ n. Lệnh pinv không sử dụng được với phương pháp symboic. Ví dụ : giải hệ phương trình tuyến tính A*X = B sau:               − − − =                       =             = 3 0 2 6 B x x x x x x X 5 0 2 4 8- 3 6- 4 4 0 2- 5 1 0 0 1- 2- 1 2- 2- 2 0 2 1 A 6 5 4 3 2 1 Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 20 >> A=[1 -2 -1 5 4 4;2 -2 0 -2 -6 2;0 1 0 0 3 0;2 -2 1 4 -8 5]; >> B=[-6;-2;0;-3]; >> X=pinv(A)*B X = -0.4031 0.8008 0.3984 -0.0157 -0.2669 -0.6126 Vì A không phải là ma trận vuông nên một thông báo lỗi sẽ hiện ra khi ta thay lệnh inv(A) bằng lệnh pinv(A). Có thể giải lại hệ phương trình tuyến tính trên bằng phương pháp symbolic: >> A=sym([1 -2 -1 5 4 4;2 -2 0 -2 -6 2;0 1 0 0 3 0;2 -2 1 4 -8 5]); >> B=sym([-6;-2;0;-3]); >> X=A\B X = [ 0] [ 0] [ 2] [ 0] [ 0] [ -1] 2.3.1.3. Lệnh invhilb Dùng để tính nghịch đảo ma trận Hilbert. Cú pháp : invhilb(n) n là kích thước của ma trận Hilbert. Ma trận Hilbert được xem là điều kiện yếu “ill condition”, có nghĩa là định thức của ma trận có giá trị rất nhỏ. Ma trận Hilbert n xn có dạng như sau:                 + + ++ = 1/(2n) 2)1/(n 1)1/(n 1/n 2)1/(n 1/5 1/4 1/3 1)1/(n 1/4 1/3 1/2 1/n 1/3 1/2 1 H M L O L L K MMM Ví dụ : Giải phương trình H*X = B bằng hai phương pháp số, symbolic dùng lệnh invhilb. Trong đó H là một ma trận Hilbert 8 x 8 B là vectơ cột [1 1 1 1 1 1 1 1]. Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 21 Phương pháp số: >> H=hilb(8) H = 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833 0.0769 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833 0.0769 0.0714 0.1250 0.1111 0.1000 0.0909 0.0833 0.0769 0.0714 0.0667 >> B=ones(8,1) B = 1 1 1 1 1 1 1 1 >> X=inv(H)*B X = 1.0e+005 * -0.0001 0.0050 -0.0756 0.4620 -1.3860 2.1622 -1.6817 0.5148 Phương pháp symbolic: >> H=sym(hilb(8)) H = [ 1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8] [ 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9] [ 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10] [ 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10, 1/11] [...]... thừa của ma trận thông qua ma trận giá trị riêng vectơ riêng MATLAB cung cấp một số hàm để tính định thức, nghịch đảo lũy thừa của ma trận như det, inv, expm Ngoài ra, căn cứ vào các tính chất của ma trận, ta có thể tính toán thông qua các biểu thức: |A| = |D| A-1 = VD-1VT eA = VeDVT An = VDnVT Với D V là ma trận các giá trị riêng các vectơ riêng đã được chuẩn hóa của ma trận A Vì ma trận các... có nghiệm duy nhất 25 Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 2.4.2 Lệnh null null (A): trả về ma trận rỗng R (n x 0) nếu ma trận A không suy biến Ví dụ: Xét hai ma trận magic 3 x 3 4 x 4 >> magic(3) ans = 8 1 6 3 5 7 4 9 2 >> null(magic(3)) ans = Empty matrix: 3-by-0 >> magic(4) ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 >> null(magic(4)) ans = 0.2236 0.6708 -0.6708... riêng vectơ riêng của ma trận Ðịnh nghĩa: Cho ma trận vuông A cấp n Số λ được gọi là một giá trị riêng của ma trận A nếu tồn tại vectơ cột x ≠ 0, x ∈ Rn, sao cho Ax = λx Khi đó vectơ x được gọi là vectơ riêng của ma trận A ứng với giá trị riêng λ Cách tìm: Với A là ma trận vuông cấp n đã cho thì vectơ cột x ≠ 0 là vectơ riêng của ma trận A khi chỉ khi Ax = λx hay: 28 Chương 2 :Ma trận Mảng trong. .. quả là dùng phương pháp phân rã ma trận 2.3.3 Phương pháp phân rã ma trận [L,u] = lu(A): trả về ma trận tam giác trên U, ma trận tam giác dưới L Phân rã ma trận A thành các ma trận tam giác: A = L*U L: ma trận tam giác dưới cỡ n x n, các phần tử đường chéo đều bằng 1 U: ma trận tam giác trên α 11 α L =  21  M  α n1 0 α 22 M α n2 L L O K 0  0   M   α nn   β11 0 U=  M  0 β12 β 22... của ma trận A Cú pháp: poly(A): nếu A là một ma trận symbolic, thì kết quả trả về là một đa thức đặc trưng Nếu A là một hàm ma trận số thì kết quả trả về là một mảng chứa các hệ số của đa thức này Ví dụ: >> A=sym([3 2/3;2/3 2]); >> P=poly(A) 29 Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy P= x^2-5*x+50/9 >> d=solve(P) d= [ 5/3] [ 10/3] 2.6.3 Tính định thức, nghịch đảo lũy... (A*): không tồn tại lời giải của hệ phương trình A*X = B Trong toolbox của MATLAB có một số lệnh liên quan đến hạng của một ma trận, không gian cơ sở của ma trận 2.4.1 Lệnh rank rank(A): trả về một số nguyên là hạng của ma trận A Ví dụ: Xét điều kiện có nghiệm của các hệ phương trình tuyến tính sau: 24 Chương 2 :Ma trận Mảng trong Matlab 1 1 a)  1  2 1 1 b) 0  1  1 1 Biên soạn: Nguyễn Thị... hilbert n x n, với n = 6:13 B là ma trận cột với tất cả các phần tử đều bằng 1 Lệnh của MATLAB: for n=3:13 27 Chương 2 :Ma trận Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy H=hilb(n); HI=invhilb(n); B=ones(n,1); x=H\B; nx=norm(x); dx=norm(x-HI*B); db=norm(H*x-B); nb=norm(B); K=cond(H); err=dx/nx; format short g err1=K*eps; format short g err2=K*db/nb; format short g disp([n err err1 err2])... Gọi x x e là nghiệm gần đúng nghiệm chính xác của hệ phương trình tuyến tính A*X = B Ta có: A x − b = δb x − x e = δx Gọi: δb là chuẩn của vectơ cột δb b là chuẩn của vectơ cột b δx là chuẩn của vectơ cột δx x là chuẩn của vectơ cột x K là điều kiện (condition) của ma trận A, kí hiệu là cond (A) Giữa K ma trận A có mối quan hệ: K = A −1 A Trong đó: A−1 A là chuẩn của ma trận A ma trận. .. 2 :Ma trận Mảng trong Matlab n λ1  0 n V = M  0 0 λ n 2 Biên soạn: Nguyễn Thị Hồng Thúy L M L O 0 L 0  0 M  λn  n → → Khái niệm về chuẩn hóa các vectơ riêng: vectơ chuẩn hóa xc của x bất kỳ bằng: → → xc = x → x → → → Trong đó: x = x x là chiều dài của vectơ x Hàm eig của MATLAB không cung cấp cho chúng ta ma trận vectơ riêng được chuẩn hóa Do đó, để sử dụng các tính chất của ma trận. .. lại 2.4.3 Lệnh clospace colspace (A): nếu A là ma trận symbolic kích thước n x n, không suy biến Kết quả trả về là một ma trận các cột là vectơ cơ sở của không gian Rn Ví dụ: >> colspace(sym(magic(3))) ans = [ 1, 0, 0] [ 0, 1, 0] [ 0, 0, 1] >> colspace(sym(magic(4))) ans = [ 1, 0, 0] [ 0, 1, 0] [ 0, 0, 1] [ 1, 3, -3] 26 Chương 2 :Ma trận Mảng trong Matlab 2.5 Biên soạn: Nguyễn Thị Hồng Thúy Ðộ . 2.1416 2.2. Ma trận 2.2.1. Nhập một ma trận trong MATLAB 2.2.1.1. Nhập một ma trận từ một danh sách tường minh: Một ma trận trong MATLAB được định. :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy 12 Chương 2 MA TRẬN VÀ MẢNG TRONG

Ngày đăng: 09/01/2014, 16:50

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w