Matlab là một trong những công cụ giúp chúng ta xử lý được các dạng toán liên quan đến ma trận. Sau đây hãy cùng ttnguyen.net tìm hiểu bài tập matlab có lời giải là gì và một số kiến thức cơ bản nhé!
Xem thêm:
1. Matlab là gì?
MATLAB là từ viết tắt của Matrix Laboratory, được công ty MathWorks khai thác và phát triển. Đối tượng xử lý cơ bản của MATLAB là các ma trận. Xâu cũng có thể xử lí được trong MATLAB, nhưng khá hạn chế hơn.
2. Các câu lệnh cơ bản của Matlab trong đại số tuyến tính
STT | Hàm matlab | Mô tả |
1 | A=[1 2 3;2 3 4] | tạo ma trận cở 2,3 |
2 | B=[3;2;5] | tạo ma trận cột cở 3 hàng, 1cột. |
3 | A*B | Tính tích AB |
4 | 2*A+B | Tính 2A + B, ví dụ A=[2 3 1;2 1 0], B=[1 -2 1;2 1 5] |
5 | A^n | Tính A^n với A là ma trận vuông |
6 | chol(A) | Phân tích ma trận A thành tích 2 ma trận theo phương pháp choleski |
7 | det(A) | Tính định thức ma trận vuông A |
8 | diag(v) | Tạo ma trận chéo với các p/tử trên đường chéo là các pt của vécto v |
9 | eig(A) | xuất ra trị riêng của ma trận A |
10 | [v,d]=eig(A) | xuất ra trị riêng và vecto riêng của ma trận A, chéo hóa ma trận |
11 | eye(n) | tạo ma trận đơn vị cấp n cho trước. |
12 | hadamard(n) | Tạo ma trận Hadamard cấp n. |
13 | Hilb | Ma trận Hilbert |
14 | inv(A) | ma trận nghịch đảo của ma trận A |
15 | isempty(A) | Kiểm tra A có đúng là ma trận 0 không. |
16 | length(v) | Tính độ dài của vector |
17 | Linspace | Tạo 1 vector cách đều nhau |
18 | max(X) | Trả về giá trị lớn nhất trong vector X |
19 | min(X) | Trả về giá trị nhỏ nhất trong vector X |
20 | norm | Ma trận trực chuẩn của các vector riêng |
21 | null | Khoảng trống |
22 | ones(n) | Tạo ma trận cấp n có tất cả các ptử đều bằng 1 |
23 | pascal(n) | Tạo ma trận pascal cấp n. |
24 | rank(A) | Tìm hạng ma trận A |
25 | reshape(A) | Thay đổi kích cỡ ma trận |
26 | size(A) | Kích cỡ ma trận A |
27 | tril(A) | Trích ra ma trận tam giác dưới từ ma trận A |
28 | triu(A) | Trích ra ma trận tam giác trên từ ma trận A |
29 | vander(v) | Tạo ma trận Vandermonde dựa trên vécto v |
30 | zeros(n) | Tạo ma trận 0 cấp n |
31 | gs(A) | Trực giao hóa Gram-Schmidt ma trận(A) |
32 | [Q,R]=qr(A) | Phân tích ma trận (A) thành tích 2 ma trận Q và R |
33 | [L,U]=lu(A) | Phân tích ma trận(A) thành tích 2 ma trận L và U |
34 | roots | Tìm nghiệm của đa thức |
35 | polyvalm | tính trị đa thức mà các biến là ma trận |
36 | polyval | Tính giá trị của đa thức |
37 | polyfit | Xấp xỉ bằng đa thức |
38 | A\b | Giải hệ phương trình Ax = b |
3. Một số lưu ý khi sử dụng MatLab
3.1. Các quy định khi nhập MatLab đại số tuyến tính
MATLAB cho phép ta nhập số liệu từ dòng lệnh. Khi nhập ma trận từ bàn phím ta phải tuân theo các quy định sau :
- ngăn cách các phần tử của ma trận bằng dấu “,” hay dấu trống
- dùng dấu “;” để kết thúc một hàng
- bao các phần tử của ma trận bằng cặp dấu ngoặc vuông [ ]
Ví dụ : >> A = [ 1 2 3 ]
kết quả là A =
1 2 3
>> A = [1;2;3]
kết quả là A =
1
2
3
3.2. Toán tử ‘
Toán tử ‘ dùng để chuyển vị một ma trận thực và chuyển vị liên hợp một ma trận phức. Nếu chỉ muốn chuyển vị ma trận phức, ta dùng thêm toán tử “.” nghĩa là phải viết “.’”. Ví dụ:
C = [1 + 2*i 2 – 4*i; 3 + i 2 – 2*j];
X = C’
Y = C.’
3.3. Chỉ số:
Phần tử ở hàng i cột j của ma trận m×n có kí hiệu là A(i, j). Tuy nhiên ta cũng có thể tham chiếu tới phần tử của mảng nhờ một chỉ số, ví dụ A(k) với k hợp ma trận đầy đủ thì nó được xem là ma trận một cột dài tạo từ các cột của ma trận ban đầu. Như vậy viết A(5) có nghĩa là tham chiếu phần tử A(2, 2). Để xác định kích thước của một ma trận ta dùng lệnh length(trả về kích thước lớn nhất) hay size(số hàng và cột). Ví dụ:
c = [1 2 3 4; 5 6 7 8];
length(c)
[m, n] = size(c)
3.4. Toán tử “:” : Toán tử “:”
Toán tử “:” : Toán tử “:” là một toán tử quan trọng của MATLAB. Nó xuất hiện ở nhiều dạng khác nhau. Ví dụ: Lệnh :
1:10
tạo một vec tơ hàng chứa 10 số nguyên từ 1 đến 10.
Lệnh: 100: -7: 50
tạo một dãy số từ 100 đến 51, giảm 7 mỗi lần.
Các biểu thức chỉ số tham chiếu tới một phần của ma trận. Viết A(1:k, j) là tham chiếu đến k phần tử đầu tiên của cột j. Ngoài ra toán tử “:” tham chiếu tới tất cả các phần tử của một hàng hay một cột. Ví dụ:
B = A(:, [1 3 2 ])
tạo ra ma trận B từ ma trận A bằng cách đổi thứ tự các cột từ [1 2 3] thành [1 3 2] Tạo ma trận bằng hàm có sẵn: MATLAB cung cấp một số hàm để tạo các ma trận cơ bản:
- zeros tạo ra ma trận mà các phần tử đều là zeros: z = zeros(2, 4)
- ones tạo ra ma trận mà các phần tử đều là 1
x = ones(2, 3)
y = 5*ones(2, 2)
- rand tạo ra ma trận mà các phần tử ngẫu nhiên phân bố đều
d = rand(4, 4)
- randn tạo ra ma trận mà các phần tử ngẫu nhiên phân bố trực giao
e = randn(3, 3)
- magic(n) tạo ra ma trận cấp n gồm các số nguyên từ 1 đến n2 với tổng các hàng bằng tổng các cột (n phải lớn hơn hay bằng 3).
- pascal(n) tạo ra ma trận xác định dương cấp n mà các phần tử lấy từ tam giác Pascal.
Lệnh :
- pascal(4) tạo ra ma trận xác định dương cấp 4
- eye(n) tạo ma trận đơn vị cấp n
- eye(3) tạo ma trận đơn vị cấp 3
- eye(m, n) tạo ma trận đơn vị mở rộng
Lệnh:
- eye(3, 4) tạo ma trận đơn vị gồm 3 hàng 4 cột
Ta có thể lắp ghép(concatenation) các ma trận có sẵn thành một ma trận mới. Ví dụ:
a = ones(3, 3)
b = 5*ones(3, 3)
c = [a + 2; b]
Xoá hàng và cột : Ta có thể xoá hàng và cột từ ma trận bằng dùng dấu []. Để
xoá cột thứ 2 của ma trận b ta viết:
b(:, 2) = []
Các lệnh xử lí ma trận:
Cộng : X= A + B
Trừ : X= A – B
Nhân : X= A * B
: X.*A nhân các phần tử tương ứng với nhau
Chia : X = A/B lúc đó X*B = A
: X = A\B lúc đó A*X = B
: X=A./B chia các phần tử tương ứng với nhau
Luỹ thừa : X = A^2
: X = A.^2
Nghịch đảo : X = inv(A)
Định thức : d = det(A)
Số chiều của họ vector A : n=ndims(A)
Tổng các phần tử trên đường chéo chính ma trận A : s = trace(A)
4. Các đề tài MatLab đại số tuyến tính cho sinh viên
1/ Dùng các phép biến đổi sơ cấp đưa ma trận về dạng bậc thang và tìm hạng của ma trận A tùy ý.
Yêu cầu: Input: cho phép nhập vào một ma trận tùy ý. Output: Ma trận bậc thang và r(A).
2/ Nhân hai ma trận với nhau.
Yêu cầu: Input: cho phép nhập vào hai ma trận A và B. Chương trình phải kiểm tra phép nhân có thực hiện được hay không? Output: Ma trận tích.
3/ Tính Am, với m là số tự nhiên cho trước.
Yêu cầu: Input: Nhập vào một ma trận vuông tùy ý và số tự nhiên m. Output: một ma trận Am.
4/ Tính định thức của ma trận bằng biến đổi sơ cấp.
Yêu cầu: Input: cho phép nhập vào một ma trận vuông tùy ý. Output: det(A).
5/ Tính định thức của ma trận vuông A bằng cách khai triển theo một hàng tùy ý (hoặc một cột tùy ý) qua các bù đại số.
Yêu cầu: Input: cho phép nhập vào một ma trận vuông tùy ý. Output: det(A).
6/ Tìm hạng của ma trận bằng các sử dụng các định thức con (phương pháp định thức bao quanh).
7/ Phân tích LU của ma trận A. Phân tích PA=LU.
Yêu cầu: Input: cho phép nhập vào một ma trận vuông cấp n. Chương trình kiểm tra A có thể phân tích thành A = LU hay không. Nếu không thì tìm ma trận P và phân tích PA= LU. Output: Ma trận nghịch đảo: P, L, U.
8/ Kiểm tra tính xác định dương của ma trận vuông A. (định nghĩa: ma trận vuông A gọi là xác định dương, nếu các định thức con chính đều dương).
9/ Phân tích Cholesky: , trong đó A là ma trận đối xứng, xác định dương.
10/ Giải hệ phương trình bằng phép biến đổi Gauss.
Yêu cầu: Input: cho phép nhập vào một ma trận tùy ý A và ma trận b. Output: Nghiệm của hệ ở dạng vécto. Ma trận A và b có thể được đọc từ file *.txt
11/ Tìm tọa độ của một vécto trong một cơ sở cho trước.
Yêu cầu: Input: cho một vécto và một cơ sở E. Output: tọa độ của vécto trong cơ sở E.
12/ Tìm ma trận chuyển cơ sở từ E sang F.
Yêu cầu: Input: cho hai cơ sở E và F. Output: ma trận chuyển cơ sở P.
13/ Tìm hạng của họ vécto.
Yêu cầu: Input: cho một họ vécto. Output: hạng của họ vécto này và các vécto độc lập tuyến tính tối đa của họ
14/ Kiểm tra tính độc lập tuyến tính, phụ thuộc tuyến tính của họ vécto. Kiểm tra vécto x có là tổ hợp tuyến tính của họ vécto M hay không?
15/ Tìm cơ sở, số chiều của không gian con sinh ra bởi họ vécto M.
Yêu cầu: Input: cho phép nhập vào một họ vécto. Output: Số chiều và cơ sở của không gian con sinh ra bởi M.
16/ Tìm cơ sở và số chiều của không gian nghiệm của hệ thuần nhất AX = 0.
Yêu cầu: Input: cho phép nhập vào ma trận A. Output: Số chiều và cơ sở của không gian nghiệm.
17/ Dùng quá trình trực giao hóa Gram-Schmidt, tìm họ trực giao, họ trực chuẩn của họ vécto độc lập tuyến tính.
Yêu cầu: Input: cho phép nhập vào một họ vécto gồm m vécto độc lập tuyến tính (hoặc họ vécto bất kỳ, chương trình phải kiểm tra tính độc lập tuyến tính của họ vécto). Output: Họ gồm m vécto trực giao, có thể trực chuẩn.
18/ Phân tích QR của ma trận vuông A bằng quá trình Gram – Schmidt.
Yêu cầu: Input: cho phép nhập vào ma trận vuông A tùy ý. Chương trình kiểm tra A có phân tích QR hay không (điều kiện: các cột của A là họ độc lập tuyến tính). Output: Ma trận Q và ma trận R.
19/ Tìm hình chiếu vuông góc của một vécto cho trước xuống không gian con. Tìm khoảng cách từ vécto đến không gian con.
Yêu cầu: Input: cho phép nhập vào một họ vécto M và vécto x. Output: hình chiếu vuông góc của vecto x xuống không gian con F được sinh ra bởi M và khoảng cách từ x đến F.
20/ Cho ánh xạ tuyến tính f biết ma trận của f trong cơ sở E là A. Tìm ảnh của một vécto cho trước.
21/ Cho ánh xạ tuyến tính f biết ma trận của f trong cơ sở E là A. Tìm cơ sở, số chiều của nhân và ảnh của ánh xạ tuyến tinh.
22/ Cho ánh xạ tuyến tính f. Tìm ma trận của ánh xạ tuyến tính trong cơ sở E cho trước.
23/ Cho ma trận vuông A. Tìm trị riêng, vector riêng của ma trận A.
24/ Cho ma trận vuông A. Kiểm tra tính chéo hóa của A. Nếu được, tìm ma trận P và ma trận D.
25/ Cho ma trận đối xứng, thực vuông A. Chéo hóa trực giao ma trận A.
26/ Cho ma trận vuông A chéo hóa được. Tính Am.
27/ Ứng dụng ma trận nghịch đảo trong lý thuyết mật mã
28/ Ứng dụng đại số tuyến tính trong bài toán xấp xĩ hàm.
29/ Ứng dụng đại số tuyến tính trong lý thuyết đồ họa.
5. Code MatLab đại số tuyến tính
5.1 Dùng biến đổi sơ cấp đưa về ma trận bậc thang Matlab
function A=bdsc_bacthang(B) A=B; [m,n]=size(A); h=1; for k=1:m-1; for j=h:n; for i=k:m; if(A(i,j)~=0) break; end; end; if(A(i,j)~=0) break; end; end; if(i~=k) for l=h:n; a=A(k,l); A(k,l)=A(i,l); A(i,l)=a; end; end; if(j~=h) h=j; end; for i=k+1:m; if (A(i,h)~=0) a=A(i,h)/A(k,h); for j=h:n; A(i,j)=A(i,j)-a*A(k,j); end; end; end; h=h+1; end; disp('ma tran bac thang'); disp(A); end;
5.2 Code Matlab Dùng biến đổi sơ cấp đưa về dạng bậc thang, tính hạng và tính định thức.
function [B,dinhthuc,hang] = ladder(A) % chuyen ve bac thang % Dong thoi tim dinh thuc va hang cua ma tran dua vao bdsc if nargin <1 error ('phai nhap vao ma tran can phan tich'); end; N = size(A,1);%1 la dong,2 la cot,i la hang,j la cot m = size(A,2); l=A; i=1; d=0; if N~=m dinhthuc ='*phai la ma tran vuong*'; end; for h=1:N k=l(h:N,:); k=k(:,h:m); for j=1:(m-h+1) % tim phan tu khac khong dau tien theo tt cot hang for i=1:(N-h+1) if k(i,j)~=0 e=i; if h==1 f=j; end; if h~=1 f=1; end; break; end; end; if k(i,j)~=0 break; end; end; d=d+(e-1)*(N-1)+(f-1)*(m-1); k=circshift(k, [-(e-1), -(f-1)]); p=[l(1:(h-1),h:m);k]; l=[l(1:N,1:(h-1)) p]; for g=h:(N-1) % khu cac phan tu theo sau ben duoi for i=(g+1):N if l(g,g)~=0 c=l(i,g)/l(g,g); for j=g:m l(i,j)=l(i,j)-(c*l(g,j)); end; end; if l(g,g)==0 break; end; end; if l(g,g)==0 break; end; end; end; E=l(2:N,1:m,:); % bien doi de dinh thuc ma tran khong thay doi F=l(1,1:m); F=((-1)^d)*F; B=[F;E];%ma tran B thay the boi B ma xet su thay doi dau hang 1 hang=0; for s=1:N %tim hang ma tran i=N+1-s; for j=1:m if B(i,j)~=0 hang=i; break; end; end; if B(i,j)~=0 break; end; end; if N==m % tim dinh thuc ma tran dinhthuc=1; for i=1:N dinhthuc=dinhthuc*B(i,i); end; end;
5.3 Giải hệ phương trình bằng phương pháp Cramer
function [X] = cramer(A,b) if nargin <2 error ('phai nhap vao ma tran can phan tich'); end; N = size(A,1);%1 la dong,2 la cot,i la hang,j la cot m = size(A,2); if N~=m error ('khong phai la he cramer,nhap lai ma tran he so A'); end; n = size(b,1); M = size(b,2); if n>M b=b'; if M~=1 error ('kich co he so tu do khong phu hop nhap lai b'); end; if n~=N error ('kich co he so tu do khong phu hop nhap lai b'); end; end; if M>n if n~=1 error ('kich co he so tu do khong phu hop nhap lai b'); end; if M~=N error ('kich co he so tu do khong phu hop nhap lai b'); end; end; if det(A)==0 error ('det=0,khong the dung phuong phap nay'); end; l=A; X=0; b=b'; for j=1:N if j==1 l=A; l(:,j)=[]; l=[b l]; X(1,j)=det(l)/det(A); end; if j>=2 if j<N l=A; a=l; x=a(1:N,1:(j-1),:); y=a(1:N,(j+1):N,:); l=[x,b]; l=[l y]; X(1,j)=det(l)/det(A); end; if j==N l=A; l(:,j)=[]; l=[l b]; X(1,j)=det(l)/det(A); end; end; end;
5.4 Giải hệ bằng phương pháp khử Gauss matlab
function [B,X] = gauss(A,b) if nargin <1 error ('phai nhap vao ma tran can phan tich'); end; N = size(A,1);%1 la dong,2 la cot,i la hang,j la cot m = size(A,2)+1; z = size(b,1);%kiem tra he so tu do t = size(b,2); c=b; if t>z for j=1:t % chuyen vi ma tran for i=1:z b(j,i)=c(i,j); end; end; b=b(:,1:z); end; if z>t b=c; end; z = size(b,1); t = size(b,2); %if z~=1 % if t==N error ('kich co he so tu do khong phu hop'); % end; %end; %if t~=1 error ('kich co he so tu do khong phu hop.'); %end; l=[A b]; i=1; d=0; for h=1:N k=l(h:N,:);%chon hang thu h den N k=k(:,h:m); %chon cot thu h den m for j=1:(m-h+1) for i=1:(N-h+1) if k(i,j)~=0 e=i; if h==1 f=j; end; if h~=1 f=1; end; break; end; end; if k(i,j)~=0 break; end; end;%tim phan tu khac 0 dau tien de hoan doi k=circshift(k, [-(e-1), -(f-1)]); p=[l(1:(h-1),h:m);k]; l=[l(1:N,1:(h-1)) p]; for g=h:(N-1) for i=(g+1):N if l(g,g)~=0 c=l(i,g)/l(g,g); for j=g:m l(i,j)=l(i,j)-(c*l(g,j)); end; end; if l(g,g)==0 break; end; end; if l(g,g)==0 break; end; end;% bien doi so cap khu cac phan tu ben duoi end; B=l; rA=0; rB=0; for s=1:N i=N+1-s; for j=1:(m-1) if B(i,j)~=0 rA=i; break; end; end; if B(i,j)~=0 break; end; end;%tim hang ma tran he so for s=1:N i=N+1-s; for j=1:m if B(i,j)~=0 rB=i; break; end; end; if B(i,j)~=0 break; end; end;% tim hang ma tran mo rong if rA<rB X= ('phuong trinh vo nghiem'); end; if rA==rB if rA<(m-1) X= ('phuong trinh co vo so nghiem'); end; u=0; if rA==(m-1) %giai nghiem he theo phuong phap khu Gauss for s=1:(m-1) i=m-s; if i==(m-1); X(i)=B(i,m)/B(i,i); end; if i~=(m-1) for c=1:(s-1) y=m-c; u=u+X(y)*B(i,y); X(i)=(B(i,m)-u)/B(i,i); end; end; u=0; end; end; end;
5.5 Tìm ma trận nghịch đảo
function [B] = nghichdao (A)% tim ma tran nghich dao theo ma tran phu hop if nargin <1 error ('phai nhap vao ma tran can phan tich'); end; N = size(A,1);%1 la dong,2 la cot,i la hang,j la cot m = size(A,2); d=0; a=A; i=1; if N~=m error ('ma tran khong vuong'); end; l=A; for h=1:N %bien doi bac thang k=A(h:N,:); k=k(:,h:N); for j=1:(N-h+1) for i=1:(N-h+1) if k(i,j)~=0 e=i; if h==1 f=j; end; if h~=1 f=1; end; break; end; end; if k(i,j)~=0 break; end; end; d=d+(e-1)*(N-1)+(f-1)*(N-1); k=circshift(k, [-(e-1), -(f-1)]); p=[A(1:(h-1),h:N);k]; A=[A(1:N,1:(h-1)) p]; for g=h:(N-1) for i=(g+1):N if A(g,g)~=0 c=A(i,g)/A(g,g); for j=g:N A(i,j)=A(i,j)-(c*A(g,j)); end; end; if A(g,g)==0 break; end; end; if A(g,g)==0 break; end; end; end; E=A(2:N,1:N,:); F=A(1,1:N); F=((-1)^d)*F; K=[F;E]; dinhthuccha=1; for i=1:N %tinh dinh thuc dinhthuccha=dinhthuccha*K(i,i); end; for o=1:N l(o,:)=[]; D=l; for t=1:N l(:,t)=[]; N=N-1; for h=1:N k=l(h:N,:); k=k(:,h:N); for j=1:(N-h+1) for i=1:(N-h+1) if k(i,j)~=0 e=i; if h==1 f=j; end; if h~=1 f=1; end; break; end; end; if k(i,j)~=0 break; end; end; d=d+(e-1)*(N-1)+(f-1)*(N-1); k=circshift(k, [-(e-1), -(f-1)]); p=[l(1:(h-1),h:N);k]; l=[l(1:N,1:(h-1)) p]; for g=h:(N-1) for i=(g+1):N if l(g,g)~=0 c=l(i,g)/l(g,g); for j=g:N l(i,j)=l(i,j)-(c*l(g,j)); end; end; if l(g,g)==0 break; end; end; if l(g,g)==0 break; end; end; end; E=l(2:N,1:N,:); F=l(1,1:N); F=((-1)^d)*F; G=[F;E]; dinhthuccon=1; for i=1:N dinhthuccon=dinhthuccon*G(i,i); end; B(o,t)=((-1)^(o+t))*dinhthuccon; dinhthuccon=1; l=D; N=N+1; end; l=a; end;%tim ma tran dinh thuc con C=B; for j=1:N % chuyen vi ma tran for i=1:N B(i,j)=C(j,i); end; end; B=B/dinhthuccha;
5.6 Phân tích LU của ma trận A
function [l,u,dinhthuc] = LU(A)%tam giac duoi,tam giac tren,dinh thuc if nargin <1 error ('phai nhap vao ma tran can phan tich'); end; a=A; N = size(A,1);%1 la dong,2 la cot m = size(A,2); if N~=m A = ('khong la ma tran vuong'); end; if N==m l=zeros(N); u=zeros(N); for i=1:N l(i,i)=1; end; for j=1:N u(1,j)=A(1,j); end; if u(1,1)== 0 error('khong the phan tich duoc, nhap lai ma tran khac'); end; for i=2:N l(i,1)=A(i,1)/u(1,1); end; for i=2:N-1 for j=i:N sum=0; for k=1:i-1 sum=sum+l(i,k)*u(k,j); end; u(i,j)=A(i,j)-sum; end; if u(i,i)==0 error('khong the phan tich duoc, nhap lai ma tran khac'); end; for j=i+1:N sum=0; for k=1:i-1 sum=sum+l(j,k)*u(k,i); end; l(j,i)=(A(j,i)-sum)/u(i,i); end; end; sum=0; for k=1:N-1 sum=sum+l(N,k)*u(k,N); end; u(N,N)=A(N,N)-sum; dinhthuc=1; for i=1:N dinhthuc = dinhthuc*u(i,i)*l(i,i); end; end; A=a;
5.7 Dùng quá trình trực giao Gram-Schmidt đưa họ độc lập tuyến tính về họ trực chuẩn
function orthonormal_basis = Gram_Schmidt_process(A) matrix_size = size(A); m = matrix_size(1,1); n = matrix_size(1,2); if A == zeros(m,n) error('There does not exist any type of basis for the zero vector space.'); elseif n == 1 orthonormal_basis = A(1:m,1)/norm(A(1:m,1)); else flag = 0; if is_orthonormal_set(A) == 1 orthonormal_basis = A; flag = 1; end if flag == 0; if rank(A) ~= n A = basis_col(A); end matrix_size = size(A); m = matrix_size(1,1); n = matrix_size(1,2); orthonormal_basis = A(1:m,1)/norm(A(1:m,1)); for i = 2:n u = A(1:m,i); v = zeros(m,1); for j = 1:(i - 1) v = v - dot(u,orthonormal_basis(1:m,j))*orthonormal_basis(1:m,j); end v_ = u + v; orthonormal_basis(1:m,i) = v_/norm(v_); end end end
5.8 Kiểm tra họ vécto có phải là họ trực giao
function result = is_orthogonal_set(A) matrix_size = size(A); m = matrix_size(1,1); n = matrix_size(1,2); tolerance = 10^-10; if n == 1 result = 1; else orthogonal_counter = 0; for i = 1:n for j = 1:n if i == j else if abs(dot(A(1:m,i),A(1:m,j))) <= tolerance orthogonal_counter = orthogonal_counter + 1; end end end end if orthogonal_counter == factorial(n)/factorial(n - 2); result = 1; else result = 0; end end
5.9 Bài toán bình phương cực tiểu.
function c = fit(n, t, y) % The least-squares approximating polynomial of degree n (n>=0). % Coordinates of points to be fitted are stored in the column vectors % t and y. Coefficients of the approximating polynomial are stored in % the vector c. Graphs of the data points and the least-squares % approximating polynomial are also generated. if ( n >= length(t)) error('Degree is too big') end v = fliplr(vander(t)); v = v(:,1:(n+1)); c = v\y; c = fliplr(c'); x = linspace(min(t),max(t)); w = polyval(c, x); plot(t,y,'ro',x,w); title(sprintf('The least-squares polynomial of degree n = %2.0f',n)) legend('data points','fitting polynomial')
Chạy thử chương trình trên bằng cách nhập:
a/ t = linspace(0, pi/2, 10); t = t’;
b/ y = sin(2*t);
c/ c = fit(3, t, y)
5.10 Ứng dụng trong lý thuyết mật mã.
Đoạn code dùng mã hóa thông tin
function B = code(s, A) % String s is coded using a nonsingular matrix A. % A coded message is stored in the vector B. p = length(s); [n,n] = size(A); b = double(s); r = rem(p,n); if r ~= 0 b = [b zeros(1,n-r)]'; end b = reshape(b,n,length(b)/n); B = A*b; B = B(:)';
Đoạn code giải mã thông tin
function s = dcode(B, A) % Coded message, stored in the vector B, is % decoded with the aid of the nonsingular matrix A % and is stored in the string s. [n,n]= size(A); p = length(B); B = reshape(B,n,p/n); d = A\B; s = char(d(:)');
Chạy thử chương trình trên:
a/ s=’Toi hoc dai so tuyen tinh’
b/ A=pascal(4) tạo ra ma trận khả nghịch tùy ý( trong trường hợp này dùng mt pascal cấp 4)
c/B=code(s,A)
d/ giải mã dcode(B,A)
5.11 Code Matlab đại số tuyến tính Ứng dụng trong lý thuyết mật mã
function [xt, yt] = rot2d(t, x, y) % Rotation of a two-dimensional object that is represented by two % vectors x and y. The angle of rotation t is in the degree measure. % Transformed vectors x and y are saved in xt and yt, respectively. t1 = t*pi/180; r = [cos(t1) -sin(t1);sin(t1) cos(t1)]; x = [x x(1)]; y = [y y(1)]; hold on grid on axis equal fill(x, y,'b') z = r*[x;y]; xt = z(1,:); yt = z(2,:); fill(xt, yt,'r'); title(sprintf('Plane rotation through the angle of %3.2f degrees',t)) hold off
Chạy thử chương trình bằng cách
a/ x=[1 2 3 2]
b/ y=[3 1 2 4]
c/ [xt, yt] = rot2d(75, x, y)
Trên đây là bài biết Matlab đại số tuyến tính trong học phần đại số và hình học giải tích. Cảm ơn các bạn đã tham khảo tên ttnguyen.net
Bài tập thực hành matlab có lời giải PDF: