Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.47 MB, 125 trang )
Kỹ thuật tính toán trong công nghệ hóa học
động(ngầm định là f). Một khuôn dạng ít dùng hơn là rat để đưa dữ liệu ra dưới dạng
phân số (chính xác hoặc gần đúng ).
Ví dụ:
>> 4*atan(1)
ans =
3.1416
>> format long e
>> ans
ans =
3.141592653589793e+000
>> format long f
>> ans
ans =
3.14159265358979
>> format short e
>> ans
ans =
3.1416e+000
>> format rat
>> ans
ans =
355/113
Chương 3: Tính toán với ma trận và vec tơ
Nền tảng của Matlab chính là ma trận (hay mảng). Trường hợp đặc biệt:
1 ma trận 1 × 1: là 1 số vô hướng;
1 ma trận chỉ có 1 dòng hoặc 1 cột: là 1 vec tơ
3.1 Vec tơ
Vec tơ hàng là 1 danh sách các số được ngăn cách nhau bởi dấu cách hoặc dấu
phẩy. Số lượng phần tử của 1 vec tơ được gọi là length của vec tơ. Các phần tử nhập
vào phải đặt trong dấu “[ ]”. Vd:
>> v = [-1 sin(3) 7]
v=
9
Kỹ thuật tính toán trong công nghệ hóa học
-1.0000 0.1411 7.0000
>> length(v)
ans =
3
Một số phép toán có thể thực hiện với vec tơ như nhân vô hướng, cộng hoặc trừ
từ các vec tơ khác có số phần tử tương tự, hoặc giữa 1 số với vec tơ. Mọi phép toán
đều được thực hiện trên từng phần tử. Các vec tơ cũng có thể được xây dựng từ các
phần tử hữu hạn.
>> v = [-1 2 7]; w = [2 3 4];
>> z = v + w
% cộng từng phần tử
z=
1 5 11
>> vv = v + 2
% cộng 2 vào tất cả các phần tử vào vec tơ
vv =
149
>> t = [2*v, -w]
ans =
-2 4 14
-2
-3
-4
Đồng thời 1 phần tử có thể được trích dẫn ra, hoặc chỉnh sửa:
>> v(2) = -1
% sửa phần tử thứ 2 của v
v=
-1 -1 7
>> w(2)
% hiển thị phần tử thứ 2 của w
ans =
3
3.1.1 Kí tự hai chấm và trích các phần tử của vec tơ
Dấu hai chấm là phím tắt quan trọng dùng để tạo ra vec tơ hàng:
>> 2:5
ans =
2
3
4
5
>> -2:3
ans =
-2
-1
0
1
2
3
10
Kỹ thuật tính toán trong công nghệ hóa học
Dạng tổng quát “first:step:last”, khởi tạo vec tơ dòng bắt đầu từ phần tử first, kết
thúc tại phần tử last và với độ dài bước là step. Nếu không chỉ ra step, thì giá trị mặc
định nó là bằng một.
>> 0.2:0.5:2.4
ans =
0.2000
0.7000
1.2000
1.7000
2.2000
>> -3:3:10
ans =
-3
0
3
6
9
>> 1.5:-0.5:-0.5
% cũng có thể dùng bước nhảy âm
ans =
1.5000
1.0000
0.5000
0
-0.5000
Các phần tử có thể được lấy ra bởi dấu hai chấm
>> r = [-1:2:6, 2, 3, -2]
% -1:2:6 => -1 1 3 5
r=
-1
1
3
5
2
3
-2
11
>> r(3:6)
% lấy ra các phần tử của r có vị trí từ 3 đến 6
ans =
3
5
2
3
>> r(1:2:5)
%lấy ra các phần tử của r có vị trí 1,3 và 5
ans =
-1
3
2
>> r(5:-1:2) % chuyện gì sẽ xảy ra với trường hợp này?
3.1.2 Vec tơ cột và sự chuyển vị
Để tạo 1 vec tơ cột, chúng ta phải tách các phần tử bởi phím ‘enter’ hoặc dấu
chấm phẩy:
>> z = [1
7
7];
z=
1
7
7
>> u = [-1; 3; 5]
11
Kỹ thuật tính toán trong công nghệ hóa học
u=
-1
3
5
Các phép toán cũng được thực hiện 1 cách tương tự, và cũng có thể chuyển dạng
thành vec tơ hàng:
>> u’ % u là vec tơ hàng còn u’ là vec tơ cột
ans =
-1
3
5
3.1.3 Nhân, chia và mũ của vec tơ
Chúng ta có thể tính tích vô hướng của 2 vec tơ có cùng độ dài:
>> u = [-1; 3; 5]
% 1 vec tơ cột
>> v = [-1; 2; 7]
>> u * v
% 1 vec tơ cột
% chúng ta không thể nhân vec tơ cột với vecto cột
??? Error using ==> *
Inner matrix dimensions must agree.
>> u’ * v
% đây mới là tích vô hướng
ans =
42
Một cách khác để tính tích vô hướng là sử dụng dấu “.*”:
>> u .* v
%nhân từng phần tử cho nhau
1
6
35
>> sum(u.*v)
% cách lấy tích vô hướng
ans =
42
>> z = [4 3 1];
% z là vec tơ hàng
>> sum(u’.*z)
% tích vô hướng
ans =
10
Trong toán học, chúng ta không chia vec tơ cho vec tơ. Tuy nhiên, trong Matlab
chúng ta có thể chia từng phần tử cho nhau của các vec tơ có cùng kích cỡ và cùng
loại:
>> x = 2:2:10
12
Kỹ thuật tính toán trong công nghệ hóa học
x=
2 4 6 8 10
>> y = 6:10
y=
6 7 8 9 10
>> x./y
ans =
0.3333
0.5714
0.7500
0.8889
1.0000
>> z = -1:3
z=
-1 0
1
2
3
>> x./z
% chia 4/0, kết quả ra Inf
Warning: Divide by zero.
ans =
-2.0000
Inf
6.0000
>> z./z
4.0000
3.3333
% chia 0/0, kết quả ra NaN
Warning: Divide by zero.
13
ans =
1
NaN
1
1
1
Toán tử “./” có thể thực hiện bởi 1 đại lượng vô hướng với 1 vector:
>> x=1:5; 2/x
% không thể thực hiện
??? Error using ==> /
Matrix dimensions must agree.
>> 2./x
% nhưng thế này thì được!
ans =
2.0000
1.0000
0.6667
0.5000
0.4000
3.2 Ma trận
Một ma trận
A=
1
4
7
2
5
8
3
6
9
Được định nghĩa trong Matlab như sau:
13
Kỹ thuật tính toán trong công nghệ hóa học
>> A = [1
2
3; 4
5
6; 7
8
9]
% nhập theo hàng
A=
1
2
3
4
5
6
7
8
9
Hoặc cũng có thể:
>> A2 = [1:4; -1:2:5]
A2 =
1
2
3
4
-1 1
3
5
>> A3 = [1 3
-4
7]
A3 =
1
3
-4
7
Phép toán chuyển vị ma trận cũng có thể thực hiện 1 cách dễ dàng:
>> A2
A2 =
1
2
3
4
-1
1
3
5
>> A2’
% chuyển vị A2
ans =
1 -1
2 1
3 3
45
>> size(A2)
% lấy cỡ của A2
ans =
2 4
>> size(A2’)
ans =
4
2
14
Kỹ thuật tính toán trong công nghệ hóa học
3.2.1 Các ma trận đặc biệt
>> E = []
% tạo lập 1 ma trận rỗng !
E=
[]
>> size(E)
ans =
0
0
% ma trận đơn vị 3 × 3
>> I = eye(3);
I=
16
1
0
0
0
1
0
0
0
1
>> x = [2; -1; 7]; I*x
% I is such that for any 3-by-1 x holds I*x = x
ans =
2
-1
7
>> r = [1 3 -2]; R = diag(r) % tạo lập 1 ma trận chéo với r nằm trên đường
chéo
R=
1
0
0
0
3
0
0
0
-2
>> A = [1 2 3; 4 5 6; 7 8 9];
>> diag(A)
% trích dẫn đường chéo của ma trận A
ans =
1
5
9
>> B = ones(3,2)
B=
1
1
1
1
15
Kỹ thuật tính toán trong công nghệ hóa học
1
1
>> C = zeros (size(C’))
kích thước bằng ma trận C’
% một ma trận toàn phần tử toàn là số 0 với
C=
0
0
0
0
0
0
>> D = rand(2,3)
% tạo 1 ma trận với các phần tử là các số ngẫu nhiên
D=
0.0227
0.9101
0.9222
0.0299
0.0640
0.3309
>> v = linspace(1,2,4)
% một vec tơ được sử dụng như 1 ma trận
v=
1.0000
1.3333
1.6667
2.0000
3.2.2 Xây dựng ma trận và cách trích các phần tử của ma trận
Người ta thường xây dựng một ma trận lớn hơn từ những cái nhỏ hơn:
>> x = [4; -1], y = [-1 3]
x=
4
-1
y=
-1 3
>> X = [x y’]
% X gồm có cột x và y’
X=
4 -1
-1 3
>> T = [ -1
3 4; 4
>> T = [T; t]
5
6];
t = 1:3;
% thêm hàng cho T, hàng đó là vec tơ t
T=
-1
3
4
4
5
6
1
2
3
>> G = [1
5; 4
>> T2 = [T G]
5; 0
2]; % G là ma trận 2*3
% ghép 2 ma trận
16
Kỹ thuật tính toán trong công nghệ hóa học
T2 =
-1
3
4
1
5
4
5
6
4
5
1
2
3
0
2
>> T3 = [T; G ones(3,1)]
% G là 3*2, T là 3*3
T3 =
-1
3
4
4
5
6
1
2
3
1
5
1
4
5
1
0
2
1
>> T3 = [T; G’];
>> [G’ diag(5:6); ones(3,2) T]
% chúng ta cso thể nối nhiều ma trận
ans =
1
4
0
5
0
5
5
2
0
6
1
1
-1
3
4
1
1
4
5
6
1
1
1
2
3
Một phần có thể được trích từ 1 ma trận tương tự như cách lấy của vectơ. Mỗi
phần tử trong ma trận được mang chỉ số bởi vị trí của nó trong hàng và cột. Ví dụ:
>> A = [1:3; 4:6; 7:9]
A=
123
456
789
>> A(1,2), A(2,3), A(3,1)
ans =
2
ans =
6
17
Kỹ thuật tính toán trong công nghệ hóa học
ans =
7
>> A(4,3) % this is not possible: A is a 3-by-3 matrix!
??? Index exceeds matrix dimensions.
>> A(2,3) = A(2,3) + 2*A(1,1)
% sửa giá trị của phần tử A(2,3)
A=
1
2
3
4
5
8
7
8
9
Ta có thể dễ dàng mở rộng ma trận:
>> A(5,2) = 5
% gán 5 vào vị trí (5,2);
A=
1
2
3
4
5
8
7
8
9
0
0
0
0
5
0
>> A(4,:) = [2, 1, 2];
% gán vec tơ [2, 1, 2] cho hàng thứ 4 của A
>> A(5,[1,3]) = [4, 4];
% gán : A(5,1) = 4 và A(5,3) = 4
>> A
Lấy các phần tử khác của A:
>> A(3,:)
% trích ra hàng thứ 3 của A
ans =
7
8
9
>> A(:,2)
% trích ra cột thứ 2 của A
ans =
2
5
8
1
5
>> A(1:2,:)
% trích ra hàng 1 và 2 của A
ans =
1
2
3
18
Kỹ thuật tính toán trong công nghệ hóa học
4
5
8
>> A([2,5],1:2)
% trích ra các phần của A
ans =
4
5
4
5
Khái niệm về ma trận rỗng [] rất hữu ích trong Matlab. 1 số hàng hoặc cột của ma
trận có thể được loại bỏ bằng cách gán nó bằng 1 ma trận rỗng:
>> C = [1
2
3
4; 5
6
7
8; 1
1
1
1];
>> D = C; D(:,2) = []
% copy C vào D, xóa cột thứ 2 của D
>> C ([1,3],:) = []
% xóa hàng 1 và hàng 3 của C
3.2.3 Các phép toán với ma trận
Các phép toán thực hiện với ma trận cũng tương tự với vec tơ:
>> B = [1
-1
3; 4
0
7]
B=
1 -1
3
4
7
0
>> B2 = [1
2; 5
>> B = B + B2’
1; 5
6];
% cộng 2 ma trận. Tại sao phải thay B2’ cho B2?
B=
2
4
8
6
1
13
>> B-2
% trừ các phần tử của B cho 2
ans =
0
2
6
4
-1
11
>> ans = B./4
% chia các phần tử của B cho 4
ans =
0.5000
1.0000
2.0000
1.5000
0.2500
3.2500
>> 4/B
% đây là điều không thể
??? Error using ==> /
Matrix dimensions must agree.
>> 4./B
% nhưng đây lại có thể ; tương đương với: 4.*ones(size(B)) ./ B
19