Professional Documents
Culture Documents
Chương 2
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
12
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
Ðể 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 và 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:
1 2 3
4 5 6
7 8 9
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.
13
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
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
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
15
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
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
Ví dụ:
>> a=[1 2 3;4 5 6;7 8 9]
a=
1 2 3
4 5 6
16
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
7 8 9
>> tong_cot=sum(a)
tong_cot =
12 15 18
>> tong_hang=sum(a,2)
tong_hang =
6
15
24
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 mà đị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ệ.
17
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
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.
18
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
19
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
Ví dụ:
Giải phương trình H*X = B bằng hai phương pháp số, symbolic và dùng lệnh
invhilb. Trong đó H là một ma trận Hilbert 8 x 8 và B là vectơ cột [1 1 1 1 1 1 1
1].
20
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
>> B=ones(8,1);
>> X=inv(H)*B
X=
[ -8]
[ 504]
[ -7560]
[ 46200]
[ -138600]
[ 216216]
[ -168168]
[ 51480]
>> B=[18;18;54;36];
>> G_J=rref([A B])
G_J =
1 0 0 0 30
0 1 0 0 39
0 0 1 0 -33
0 0 0 1 -18
>> X=G_J(:,length(A)+1)
X=
30
39
-33
-18
Khi sử dụng phương pháp khử Gauss - Jordan sẽ dẫn tới một bất tiện là ta phải
tiến hành lại từ đầu thủ tục Gauss - Jordan cho từng vectơ cột B. Một phương
pháp cho phép tiết kiệm được số lần tính toán mà đạt cùng hiệu quả là dùng
phương pháp phân rã ma trận.
23
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
24
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
1 11 1
1 x1 - 1
2 -1
a) x 2 =
1 0 3 3
x 3 4
2 1 4
>> A=[1 1 1;1 2 -1;1 0 3;2 1 4];
>> B=[1;-1;3;4];
>> r_A=rank(A)
r_A =
2
>> r_AB=rank([A B])
r_AB =
2
⇒ r_A = r_AB = 2 < n =3 nên hệ tồn tại vô số nghiệm.
1 1 0 x1 1
b) 0 1 1
x 2 = 2
1 2 1 x - 2
3
25
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
26
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
Trong đó: A−1 và A là chuẩn của ma trận A và ma trận nghịch đảo của ma
trận A
δx
Sai số của hệ phương trình A*X = B, có thể được đánh giá như sau:
x
1 δb δx δb
≤ ≤K
K b x b
Sai số xấp xỉ = K*ε
Với ε là độ chính xác của máy tính. Trong MATLAB có một biến đặc biệt dùng
để định nghĩa dộ chính xác này là eps.
Ðộ chính xác này dùng để phân biệt hai giá trị rất gần nhau. Ví dụ b và b’ khác
nhau khi và chỉ khi | |b| - |b’| | ≥ ε
MATLAB cung cấp cho chúng ta hai hàm để tính điều kiện và chuẩn của ma
trận.
cond (A): trả về một giá trị là điều kiện của ma trận A.
norm (X): trả về chuẩn của X. Nếu X là vectơ sẽ trả về chiều dài của nó. Nếu X
là ma trận trả về giá trị căn bậc hai của tổng bình phương các số hạng của ma
trận. Hàm norm không làm việc với các biến symbolic.
Ví dụ: xét sự ảnh hưởng của sai số trong hệ phương trình tuyến tính H*X = B. H
là ma trận hilbert n x n, với n = 6:13 và 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 và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
28
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
Ax - λx = 0
x = Ix (I là ma trận đơn vị có kích thước n x n)
⇒ Ax - λIx = 0
⇔ (A - λI)x = 0
Giá trị riêng λ là nghiệm của định thức: |A - λI| = 0
Nếu khai triển định thức ta sẽ được một đa thức với biến λ. Ða thức này được gọi
là đa thức đặc trưng. Nếu A là ma trận n x n thì đa thức này có dạng sau:
P(λ) = an λn + an-1λn-1 + …+ a2x2 + a1x + a0
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 và lũy thừa của ma trận thông qua ma trận
giá trị riêng và vectơ riêng
MATLAB cung cấp một số hàm để tính định thức, nghịch đảo và 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à V là ma trận các giá trị riêng và các vectơ riêng đã được chuẩn hóa của
ma trận A. Vì ma trận các giá trị riêng là ma trận đường chéo, có nghĩa là các
phần tử khác không chỉ nằm trên đường chéo chính. Do đó, việc thực hiện nghịch
đảo ma trận, tính định thức ma trận và lấy lũy thừa ma trận được đơn giản đi rất
nhiều nếu chúng ta thực hiện trên ma trận đường chéo (chỉ thực hiện trên các
phần tử đường chéo)
λ1 0 L 0
0 λ2 L 0
V =
M M O M
0 0 L λn
Nên:
V = λ1λ2 λ3 L λn
λ1−1 0 L 0
0 λ-21 L 0
V −1 =
M M O M
0 0 L λ-n1
e λ 1
0 L 0
0 eλ 2
L 0
e =
V
M M O M
0 0 L eλ
n
30
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
λ1n 0 L 0
0 λ n
L 0
V =
n 2
M M O M
0 0 L λnn
→ →
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:
→
→
x
xc = →
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 ở trên chúng ta cần chuẩn hóa chúng
trước.
Ví dụ:
A=[3 2/3;2/3 2];
[v,d]=eig(A)
vc=v/norm(v)
det_A=det(d)
ham_det=det(A)
d1=d;
d1(1,1)=1/d(1,1);
d1(2,2)=1/d(2,2);
inv_A=vc*d1*vc'
ham_inv=inv(A)
d1(1,1)=exp(d(1,1));
d1(2,2)=exp(d(2,2));
exp_A=vc*d1*vc'
ham_exp=expm(A)
v=
0.4472 -0.8944
-0.8944 -0.4472
d=
1.6667 0
0 3.3333
vc =
0.4472 -0.8944
-0.8944 -0.4472
det_A =
31
Chương 2 :Ma trận và Mảng trong Matlab Biên soạn: Nguyễn Thị Hồng Thúy
5.5556
ham_det =
5.5556
inv_A =
0.3600 -0.1200
-0.1200 0.5400
ham_inv =
0.3600 -0.1200
-0.1200 0.5400
exp_A =
23.4842 9.0949
9.0949 9.8419
ham_exp =
23.4842 9.0949
9.0949 9.8419
Ví dụ:
Tính tần số riêng và vectơ riêng của hệ dao động đều hòa:
→
K →
Hay: &x& = − x
M
Vì hệ dao động điều hòa nên:
→ → →
K → →
K →
&x& = −ω 2 x ⇒ −ω2 x = − x⇒ ω2 x = x ⇒
M M
K → →
x=λx
M
(Ðặt λ = ω2, với ω là tần số dao động riêng của hệ).
K − 50 40
=
M 40 − 50
Dùng MATLAB ta giải hệ trên như sau:
>> K_M=[-50 40;40 -50];
>> [V,D]=eig(K_M)
V=
0.7071 0.7071
-0.7071 0.7071
D=
-90 0
0 -10
33