1. Trang chủ >
  2. Khoa học tự nhiên >
  3. Hóa học >

2 Giới thiệu dạng dữ liệu

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



Xem Thêm
Tải bản đầy đủ (.pdf) (125 trang)

×