Code so sánh 2 ma trận trong matlab năm 2024

MATLAB viết tắt của từ “matrix laboratory”. Phần mềm Matlab được tạo ra nhằm mục đích làm việc với toàn bộ ma trận và mảng [ không như các phần mềm khác chỉ làm việc với các phần tử số tại 1 thời điểm].

Tất cả các biến trong matlab là mảng nhiều chiều, không kể đó là loại dữ liệu nào [từ số đến chuỗi kí tự]. Mộ ma trận là một mảng 2 chiều, 1 vector là mảng 1 chiều. Để sử dụng được chúng thì người dùng nên có kiến thức về đại số tuyến tính.

Tạo mảng Array

Để tạo mảng có 4 phần tử trên 1 hàng người dùng nhập các phần tử trong dấu ngoặc vuông [], phân biệt các phần tử bằng dấu cách hoặc dấu phẩy [,]. Ví dụ mảng 1 chiều a [đây cũng gọi là vector hàng]:

a = [1 2 3 4] a = 1 2 3 4

Để tạo ma trận có nhiều hàng các hàng được phân biệt bằng dấu chấm phẩy [;].

a = [1 2 3; 4 5 6; 7 8 10] a = 1 2 3 4 5 6 7 8 10

Các khác để tạo 1 ma trận đó là sử dụng hàm có sẵn như hàm ones, zeros, hoặc rand. Tuy nhiên các hàm này tạo ra giá trị mặc định [trừ hàm rand]. Ví dụ, Tạo 1 ma trận 5 hàng 1 cột gồm các phần tử 0:

z = zeros[5,1] z = 0 0 0 0 0

Các phép toán đối với Ma trận và Mảng MATLAB cho phép người dùng thực hiện các toán tử đại số cho 1 phần tử đối với tất cả các phần tử của ma trận và mảng. Ví dụ:

a + 10 ans = 11 12 13 14 15 16 17 18 20 sin[a] ans = 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 0.9894 -0.5440

Để chuyển vị mộ ma trận người ta dùng dấu [‘]. Ví dụ:

a' ans = 1 4 7 2 5 8 3 6 10

Người dùng cũng có thể thực hiện phép nhân ma trận bằng toán tử nhân [*] nhưng phải tuân theo quy tắc nhân ma trận. Ví dụ ma trận a có thể nhân với ma trận đảo của nó và cho ra ma trận đơn vị [a là ma trận vuông]

p = a*inv[a] p = 1.0000 0 -0.0000 0 1.0000 0 0 0 1.0000

Chú ý trong ví dụ trên p không phải là ma trận có các phần tử nguyên [integer]. MATLAB lưu các giá trị số dưới dạng dữ liệu có dấu phẩy động. Người dùng có thể thay đổi và hiển thị ra nhiều giá trị thập phân sau dấu phẩy hơn bằng cách sử dụng câu lệnh format:

format long p = a*inv[a] p = 1.000000000000000 0 -0.000000000000000 0 1.000000000000000 0 0 0 0.999999999999998

Để thiết lập lại định dạng cũ người dùng có thể dùng câu lệnh:

format short

Định dạng chỉ làm thay đổi cách thể hiện các số ra màn hình chứ thông thay đổi cách mà Matlab lưu trức các giá trị đó.

Để tác động toán tử nhân lên từng phần tử trong ma trận người dùng phải dùng toán tử .* [các bạn lưu ý có dấu chấm]

p = a.*a p = 1 4 9 16 25 36 49 64 100

Tương tự như vậy đối với phép chia và hàm mũ. Để tác động lên từng phần tử chúng ta phải sử dụng dấu chấm [.]

a.^3 ans = 1 8 27 64 125 216 343 512 1000

Toán tử ghép [Concatenation]

Toán tử này thực hiện nối các mảng với nhau và tạo nên mảng lớn hơn. Dấu ngoặc vuông [] chính là toán tử này.Ví dụ:

a = [1 2 3; 4 5 6; 7 8 10] a = 1 2 3 4 5 6 7 8 10

0

Người dùng có thể thực hiện nối theo phương ngang [hàng] hoặc theo phương dọc [cột] bằng cách không hoặc có sử dụng dấu chấm phẩy [;]. Ví dụ:

2.814 lượt xem 168 download

DownloadVui lòng tải xuống để xem tài liệu đầy đủ

Nội dung Text: Sử dụng matlab trong đại số tuyến tính

  1. File này có 3 phần. Phần 1. Các câu lệnh đơn giản của matlab trong đại số tuyến tính. Phần 2. Các đề tài đại số tuyến tính cho sinh viên. Phần 3. Các chương trình tham khảo. Phần 1. 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à vécto 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 Một số comments. 1/ 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
  2. • 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 = 123 >> A = [1;2;3] kết quả là A = 1 2 3 2/ 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/ 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 = i + [j - 1]m. Cách này thường dùng để tham chiếu vec tơ hàng hay c ột. Trong tr ường 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] 4/ 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.
  3. 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 n 2 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 Lệnh: 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]
  4. 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] Phần 2. Yêu cầu: Sinh viên không được dùng các hàm s ẵn có trong matlab đ ể viết ch ương trình. Các đề tài. 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 A m. 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].
  5. 7/ Tìm ma trận nghịch đảo của ma trận vuông A bằng biến đổi s ơ cấp đ ối v ới hàng cho ma tr ận [ A I] hang [I|A ]. −1 Yêu cầu: Input: cho phép nhập vào một ma trận vuông tùy ý. Ch ương trình ki ểm tra tính kh ả ngh ịch c ủa ma trận. Output: Ma trận nghịch đảo: A−1. . 1 8/ Tìm ma trận nghịch đảo bằng công thức A−1 = PA . det[ A] Yêu cầu: Input: cho phép nhập vào một ma trận vuông tùy ý. Ch ương trình ki ểm tra tính kh ả ngh ịch c ủa ma trận. Output: Ma trận nghịch đảo: A−1. . 9/ 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. 11/ 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]. 10/ Phân tích Cholesky: A = RT R , trong đó A là ma trận đối xứng, xác định dương. 11/ 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 12/ Giải hệ Cramer AX = b với A vuông, det[ A] 0 bằng công thức x = [ x1 , x2 ,..., xn ] , det[ Ai ] trong đó xi = . det[ A] 13/ 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. 14/ 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. 15/ 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ọ 16/ 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? 17/ 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. 18/ Tìm cơ sở và số chiều của không gian nghiệm của hệ thuần nh ất AX = 0.
  6. 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. 19/ Tìm số chiều và cơ sở của không gian giao F G và không gian tổng F + G của hai không gian con F và G. Input: nhập vào hai không gian con [t ập sinh của hai không gian con F và G, ho ặc nh ập h ệ pt]. Output: số chiều và cơ sở của giao và tổng. 20/ 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. 21/ 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. 22/ 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. 23/ 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. 24/ 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. 25/ 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. 26/ Cho ma trận vuông A. Tìm trị riêng, vécto riêng của ma trận A. 27/ 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. 28/ Cho ma trận đối xứng, thực vuông A. Chéo hóa trực giao ma trận A. 29/ Cho ma trận vuông A chéo hóa được. Tính Am. 30/ Cho dạng toàn phương Q[ X ] = X T AX . Kiểm tra dạng toàn phương xác định dương hay không. 31/ Cho dạng toàn phương Q[ X ] = X T AX . Đưa dạng toàn phương về chính tắc bằng biến đổi trực giao. 32/ Cho dạng toàn phương Q[ X ] = X T AX . Phân loại dạng toàn phương. 33/ Ứng dụng ma trận nghịch đảo trong lý thuyết mật mã 34/ Ứng dụng đại số tuyến tính trong bài toán xấp xĩ hàm. 35/ Ứng dụng đại số tuyến tính trong lý thuyết đồ họa. Phần 3. Các chương trình tham khảo. Các chương trình này được download t ừ mạng hoặc ph ần l ớn do sinh viên viết nên chưa chắc là tối ưu. 1/ dùng biến đổi sơ cấp đưa ma trận về dạng bậc thang function A=bdsc_bacthang[B] A=B; [m,n]=size[A];
  7. 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 1b/ 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
  8. 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; 2/ Giải hệ phương trình bằng phương pháp Cramer function [X] = cramer[A,b] if nargin 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;
  9. 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 jt 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.'];
  10. %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;
  11. end; if B[i,j]~=0 break; end; end;% tim hang ma tran mo rong if rA
  12. 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;
  13. 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/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
  14. 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; 6/ 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];
  15. end v_ = u + v; orthonormal_basis[1:m,i] = v_/norm[v_]; end end end 7/ 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]]] =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]
  16. 9/ Ứ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] 10/ Ứ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]

Chủ Đề