CHUONG 7
7.1 Tạo phương trình tuyến tính
Mội vấn đề thường gặp của số học luyến tính là việc giải phương trình Ví dụ giải phương
trinh sau dưới dạng ma trận:
= re
12 3] jx,i [366 4 5 6|.ix; | = |804
7 8 0] |lx;j |361
Ax=b
Biểu tượng phép nhân toán học (.) được định nghĩa trong phép tốn trên, khác với kí hiệu ta dùng đối với mảng trước kia Trong MATLAB phép nhân ma trận này được định nghĩa bằng
dầu sao (*) Tiếp theo định nghĩa dấu bằng, ma trận tạo ra từ ma tran A va vector x bang véi vector b Thêm nữa, khi lời giải không tồn tại, có rất nhiều cách gần đúng để tim kiếm giải pháp, như phép loại trừ Gaussian, sự tìm thừa số LỤ, hoặc tính trực tiếp A1 b Dưới đây chúng ta sẽ đề cập đến một số cách giải quyết như trên:
Trước tiên nhập vac ma tran A va b:
Trang 2366 804
351
Có thể kiểm ira xem định thức của ma trận trên có khác không hay không:
>> det(A)
ans=
27
Nếu nó đúng, MATLAB có thể giải phương trình theo hai cách, mội cách hay được dùng
hơn, mội cách ít sử dụng, nhưng trực tiếp hơn, phương pháp này là chuyển thành dạng x=A'1.b >> x = inv(A)*b
X=
25.0000 22.0000 99.0000
Ở đây inv(A} la ham của MAYLAB dùng để tính A”; và toán tử nhân (*), khơng có dấu châm phía trước, đây là phép nhân ma trận, Phương pháp được dùng nhiều hơn là dùng toán tử
chia ma iran trai:
>> x = Alb
X=
25.0000 22.0000 99.0000
Phương trinh này sử dụng phương pháp tìm thừa số LỤ gần đúng và đưa ra câu trả lời như
la phép chia trai A cho b Toán tử chia trái A) khơng có dấu chấm phía trước là một phép toán
của ma trân, nó khơng phải là các phép toán giữa các phân tử của mảng Phương pháp thứ hai
này được sử dụng nhiều hơn do nhiều nguyên nhân, mội trong những nguyên đơn giản nhất là
phương pháp này dùng ít phép toán hơn và tốc độ nhanh hơn Thêm vào đó, nhìn chung phương
pháp này chính xác hơn cho những bài toán lớn Trong trường hợp khác, nếu MATLAB không
tim thấy phương pháp giải hoặc khơng tìm thấy phương pháp chính xác, nó sẽ hiện thông báo
ll
Trang 3Nếu bạn nghiên cứu số học tuyến tinh, bạn biết rằng 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 nó dùng tố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 A.x - b Cách này gọi là phương pháp vuông nhỏ nhất
Ví dụ:
>>A=j123;,456;780;258] — % Bốn phương trình, ba biến A= 1 2 3 4 5 6 7ƒ 8 0 2 5 8 >> D = [366 804 351 514) b= 366 804 354 914
>> x = A\b % Phương pháp vuông nhỏ nhất
Trang 4Mặt khác khi số phương trình ít hơn số biến tương tự như trường hợp khơng xác định, thì số nghiệm phương trình là vơ tận Đối với những nghiệm này MATLAB tính theo hai cách Dùng toán tử chia đưa ra phương pháp mà có số phần tử 0 của x là cực đại Như một sự lựa chọn, tính x=pinv(A)*b đưa ra phương pháp chiều dài hoặc 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 Ví dụ:
>>A=A’ % Tạo ba phương trình, bốn biến
A= 1 4 7 2 2 5 8 5 3 6 0 8 >> b = b(1:3) b= 366 804 351
>>x=A\b % phương pháp với số phần tử 0 cực đại
X=
0
-165.9000 99.0000 168.3000
>> xn = pinv(A)*b _ % Tìm kiếm giải pháp tiêu chuẩn nhỏ nhất
xn=
30.8182 -168.9818 99.0000
159.0545
>> norm(x) % Tiêu chuẩn O_ clit với các phần tử 0
Trang 582
ans=
256.2200
>> norm(xn) _ % Giải pháp tiêu chuẩn nhỏ nhất
ans=
204.1731
7.2 Cac ham ma tran
Để giải phương trinh tuyến tính, MATLAB cung cấp các hàm trợ giúp sau:
Các hàm ma trận
balance(A) Cân bằng để tăng độ chính xác
cdf2rdf(A) Chuyển từ dạng số phức chéo sang dạng số thực chéo
chol(A) Tìm thừa số Cholesky
cholinc(A, droptol) | Thừa số Cholesky không đây đủ
cond(A) Số điều kiện ma trận
condest(A) Ước lượng số điều kiện ma trận theo tiêu chan 1
det(A) Định thức ma trận
expm(A) Ma trận theo luật mũ
expm1(A) Bổ sung M_ file của expm
expm2(A) Ma trận theo luật hàm mũ, dùng thứ tự Taylor funm(A, ‘fun’) Tinh toan ham ma tran chung
hess(A) Mau Hessenberg
inv(A) Ma tran chuyén vi
logm(A) Ma tran logarithm
lu(A) Tìm thừa số với phép khử Gaussian
luinc(A, droptol) Thừa số LŨ không đầy đủ
norm(A) Ma trận và vector tiêu chuẩn
norm(A,1) Tiêu chuẩn 1
Trang 6
norm(A, 2) Tiêu chuẩn 2
norm(A, inf} V6 cling
norm(A, p) Tiêu chuẩn P (chỉ đối với vector)
norm(A, ‘fro’) Tiêu chuẩn F
normest(A) Tiêu chuẩn 2 ước lượng cho ma trận lớn
nuil(^) Khoảng rỗng
orth(A) Tính trực giao
poly(2) Đa thức đặc trưng
polyvalm(4) Tính giá trị của ma trận
qr(A) Xác định trực giao tam giác
grdeiet(Q, R, ) Xoá cột từ thừa số QR
qrinsert(Q, R, j, x) Chèn cột trong thừa số QR
rank(A} Sô của hàng hoặc cội độc lập
rcond(A) Vớc lượng điều kiện thuận nghịch
soartm(A) Ma trận gốc bình phương
subspace(A, B) Góc giữa hai điểm
svd(A) Phân tích gia trị đơn
svds(4, K} Mội số các giá trị đơn
trace(A) Tổng các phần tử chéo
7.3 Ma trận đặc biệt
MÁTLAB đưa ra mội số các ma trận đặc biệt, Dưới đây là một số trong các ma trận đó >>a=l123,45 8} >>b = find(a>18) b= “7 ke——- L
Môi số trong chúng có những ứng dụng rộng rãi trong các phép toán
Trang 7Ở đây b là ma trận rong MATLAB trả lại ma trận rồng khi phép tốn khơng có kết quả Trong ví dụ trên khơng có phân tử nào của a lớn hơn 10 Ma trân rỗng khơng có kích cỡ, nhưng tên biến của chúng vẫn tồn tại trong không gian làm việc
>>7eros(3) — % Ma trận không 3 hàng, 3 cội (3x3)
ans= 8 0 0Ô 8 0 0 0 0 0 >> ones(2,4) % Ma trận một 2 hàng, 4 cột (2x4) ans= >> zeros(3) + pi ans= 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3.1416 3:1446 3.1416
Ví dụ trên về tạo ma trận 3x3 với các phần tứ đều là r
>> rand(3,1)
ans=
0.2190 0.0470 0.6789
ma trận 3x1 gồm các phân tử là số cung cấp bởi hàm random giữa 0 và 1
>> randn(2)
.8nS=
116830 0.0/51
0.6268 0.3516
Trang 8Ma tran 2x2 của các số cung cấp bởi hàm random với giá trị trung binh la 0 Thuật toán
cho ham rand va randn co thé tim thay trong S.K>Park and K.W.Miller,"Random Number
Generator: Good Ones Are Hard to Find,” Comm ACM, 32, 10, Oct 1988-1201 >> eye(3) ans= 1 0 0 0 1 0 0 0 1 Ma trận đồng nhất 3x3 >> eye(3,2) ans= 1 0 0 1 00 Ma trận đồng nhất 3x2
Ngồi ra để chỉ kích cỡ của một ma trận, bạn có thể dùng hàm s/ze để tạo một ma trận có
kích cỡ giống như ma trận khác:
>>A=[123,456]; >> ones(size(A))
_8n§=
ma trận một có cùng kích cỡ với ma trận A
Các ma trận trên và các ma trận đặc biệt khác được giới thiệu trong bảng sau:
Các ma trận đặc biệt [] Ma trận rỗng compan Tạo ma trận rỗng eye Ma trận đồng nhất
gallery Ma trận kiểm tra nhỏ vài phần tử
Trang 9
hadamard | Ma tran Hadamard a
hankel Ma tran Hankel hilb Ma tran Hilbert
invhilb Chuyén thanh ma tran Hilbert
magic Ma trận vuông, giá trị các phần tử bằng từ 1 đến giá trị số phần tử
ones Ma tran 1
pascal Ma tran tam giac Pascal
rand Ma trận với các phần tử ngẫu nhiên từ 0 đến 1
randn Ma trận ngẫu nhiên thông thường với giá trị trung bình bằng 0 rosser Ma trận kiểm tra đối xứng trục chính
toeplitz Ma tran Toeplitz vander Ma tran Vandermond
wilkinson Ma tran kiém tra Wilkinson
zeros Ma tran khong Vi du
Vấn để: Ta có mạch điện như trong hình 7.1 được mô tả bằng phương trình điện áp nút khi nguồn đưa vào là sóng hình sin
Trang 10Jl
E= 120: Ri=2, L=10; C=
0.2) R2 = 16
Ở đây v, là điện áp giữa nút thứ ¡ và đất Hỏi điện áp tại mỗi nút là bao nhiêu?
Giải pháp: Đây là vấn đề về phân tích pha Phương pháp giải bài nay là giải phương trình
trên, và chuyên các kết quả về dạng thời gian Trong MATLAB giai pháp sẽ là:
function circuit
% circull.m script file to solve circuit proplem
AGL =1!2: % poke in nanzero values as needed
A(1.2)=-112: A(2,1)Z-1/2; A(2,2)= 1/2 + 0.2) + 1/10); A(2,3)=-11101 A(3,2)=-1/101 A(3,3)=Z1/10 + 1H01,
yzj-1 0 0]; % right hand side vector v=Aly % complex solution vmag=abs(v) % solution magnitudes
vphase=angle(v)'180/pi — % solution phase in degrees theta=linspace(0,2?p)); % plot results in time
v1=vmag(1)°cos(heta-vphase(1));
v2=vmag(2}°cos(thela-vphase(2));
v3=vmag(3)°cos(thela-vphase(3)); thd=theta*180/pi;
plot(ffhd,v1,thd,v2 thd v3)
Sau khi chạy chương trình trên, kết qua sẽ là: rE
-4.0000 + 6.0000: 2.0000 + 6.0000) 2.0000 + 4.0000)
Trang 11ymag = 7.2111 6.3246 44721 vphase = 123.6901 108.4348 63.4349 x 7 ⁄ {YX
Hình 7.2 Kết quả được biểu thị theo dạng sông hình sin