Kỹ thuật tính toán trong công nghệ hóa học

Các bài toán công nghệ hóa học trong thực tế là rất phức tạp, chúng ta cần có công cụ hỗ trợ để giải nó. Thực tế có rất nhiều phần mền, tuy nhiên, trong cuốn sách này, chúng tôi muốn giới thiệu đến các sinh viên nghành công nghệ hóa một công cụ rất mạnh, đó là matlab . Mat lab là một công cụ toán học rất mạnh, ngoài ra nó còn hỗ trợ ngôn ngữ lập trình bậc 4 với cấu trúc đơn giản, gần gũi, dễ tiếp cận, có thể linh hoạt giải quyết các bài toán thực tế để đạt được yêu cầu mong muốn. Do đó, việc sử dụng nó làm công cụ để giải quyết các bài toán kĩ thuật là rất tốt . Nội dung cuốn sách bao gồm: • Phần I: Cơ sở về Matlab nhằm giới thiệu cho bạn đọc sơ lược về Matlab • Phần II: Ứng dụng Matlab trong công nghệ hóa học gồm có các chương: Dẫn nhiệt và đối lưu; bức xạ và truyền nhiệt; kỹ thuật tách chất; kỹ thuật phản ứng . Trong từng chương có tóm tắt cơ sở lí thuyết, kèm theo mỗi chương đó thì có các ví dụ và bài tập liên quan đi kèm, mỗi một ví dụ minh họa được giải bằng tay sau đó được giải lại bằng matlab một cách sinh động và dễ hiểu, có tính tổng quát cao . Đưa matlab vào công nghệ hóa là mục đích của chúng tôi. Tuy nhiên, do được biên soạn lần đầu nên không thể tránh được những sai sót, rất mong nhận được đóng góp của bạn đọc để cuốn sách trở lên gần gũi hơn với các sinh viên công nghệ hóa cũng như những người quan tâm đến lĩnh vực này .

doc125 trang | Chia sẻ: ngtr9097 | Lượt xem: 2619 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Kỹ thuật tính toán trong công nghệ hóa học, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Mục Lục Lời nói đầu Các bài toán công nghệ hóa học trong thực tế là rất phức tạp, chúng ta cần có công cụ hỗ trợ để giải nó. Thực tế có rất nhiều phần mền, tuy nhiên, trong cuốn sách này, chúng tôi muốn giới thiệu đến các sinh viên nghành công nghệ hóa một công cụ rất mạnh, đó là matlab . Mat lab là một công cụ toán học rất mạnh, ngoài ra nó còn hỗ trợ ngôn ngữ lập trình bậc 4 với cấu trúc đơn giản, gần gũi, dễ tiếp cận, có thể linh hoạt giải quyết các bài toán thực tế để đạt được yêu cầu mong muốn. Do đó, việc sử dụng nó làm công cụ để giải quyết các bài toán kĩ thuật là rất tốt . Nội dung cuốn sách bao gồm: Phần I: Cơ sở về Matlab nhằm giới thiệu cho bạn đọc sơ lược về Matlab Phần II: Ứng dụng Matlab trong công nghệ hóa học gồm có các chương: Dẫn nhiệt và đối lưu; bức xạ và truyền nhiệt; kỹ thuật tách chất; kỹ thuật phản ứng . Trong từng chương có tóm tắt cơ sở lí thuyết, kèm theo mỗi chương đó thì có các ví dụ và bài tập liên quan đi kèm, mỗi một ví dụ minh họa được giải bằng tay sau đó được giải lại bằng matlab một cách sinh động và dễ hiểu, có tính tổng quát cao . Đưa matlab vào công nghệ hóa là mục đích của chúng tôi. Tuy nhiên, do được biên soạn lần đầu nên không thể tránh được những sai sót, rất mong nhận được đóng góp của bạn đọc để cuốn sách trở lên gần gũi hơn với các sinh viên công nghệ hóa cũng như những người quan tâm đến lĩnh vực này . Phần I: Cơ sở về Matlab Matlab là công cụ toán học, trước hết là các phép tính khoa học, ngoài ra nó còn cho phép vẽ các đồ thị, tính toán ma trận, làm việc với các đa thức và các hàm tích phân. Đồng thời,chúng ta có thể lập trình các chương trình tính toán một cách linh hoạt theo nhu cầu của mình. Đặc biệt Matlab tỏ ra rất mạnh mẽ trong việc thiết kế và tính toán vector và ma trận. Khi khởi chạy Matlab thì xuất hiện một hoặc nhiều cửa sổ trên màn hình, trong đó quan trọng nhất là Command window, nó cho phép nhập lệnh và hiển thị kết quả. Chương I:Bắt đầu với Matlab 1.1 Nhập dữ liệu qua dòng lệnh *) Các lệnh sẽ được thực hiện ngay sau khi ấn phím Enter. Kết quả sẽ được hiển thị trên màn hình nếu muốn. Tuy nhiên, nó chỉ thực hiện khi các dòng lệnh là hợp lệ. Có thể tìm hiểu thêm từ menu Help. Ví dụ : >> 3 + 7.5 >> 18/4 >> 3 * 7 Chú ý : các dấu cách không quan trọng trong Matlab *) Kết quả tính toán sẽ được tự động lưu vào biến ans Ví dụ : >> 14/4 ans = 3.5000 >> ans^(-6) ans = 5.4399e-04 Chúng ta có thể định nghĩa biến cho riêng mình. Ví dụ: >> a = 14/4 a = 3.5000 >> b = a^(-6) b = 5.4399e-04 Dữ liệu sẽ được lưu vào biến a và b. *) Khi kết thúc dòng lệnh kết thúc bằng dấu “;” thì sẽ không hiển thị kết quả ra màn hình, có thể kiểm chứng bằng hai biểu thức sau : >> 3 + 7.5 >> 3 + 7.5; *) Có thể thực thi nhiều lệnh cùng một lúc, các câu lệnh ngăn cách nhau bởi dấu phẩy hoặc dấu chấm phẩy. >> sin(pi/4), cos(pi); sin(0) ans = 0.7071 ans = 0 Chú ý : cos(pi) không được in ra màn hình *) Mặc định Matlab chỉ hiển thị 5 chữ số. Do đó, muốn có kết quả chính xác hơn thì ta dùng lệnh format long thì có thể hiển thị được tới 15 chữ số >> 312/56 ans = 5.5714 >> format long >> 312/56 ans = 5.57142857142857 Có thể tìm hiểu thêm: >> help format *) Khi dòng quá dài có thể dùng dấu “…” để nối câu xuống dòng sau >> sin(1) + sin(2) - sin(3) + sin(4) - sin(5) + sin(6) - ... sin(8) + sin(9) - sin(10) + sin(11) - sin(12) ans = 1.0357 *) Dòng kí tự đặt sau dấu “%” chỉ có tác dụng làm dòng chú thích >> sin(pi) % dùng để tính giá trị của sin (pi) 1.2 Sử dụng help trực tuyến Chúng ta có thể dùng cấu trúc >> help Vd: help ops Hoặc >> lookfor Vd : lookfor inverse 1.3 Đường dẫn Trong Matlab, các lệnh hay các chương trình được chứa trong m-file, cái mà được biên soạn từ file văn bản nhưng khi lưu với đuôi mở rộng là “.m”. M-file chỉ chạy được khi nó nằm ở thư mục current working directory 1.4 Lưu và tải dữ liệu Rất dễ dàng lưu hoặc gọi 1 biến nào đó, ta chỉ cần click vào File- menu sau đó chọn Save Workspace as... hoặc Load Workspace... Vd : khi save >> s1 = sin(pi/4); >> c1 = cos(pi/4); c2 = cos(pi/2); >> str = ’hello world’; % đây là 1 chuỗi >> save % lưu toàn bộ biến với định dạng matlab.mat >> save data % lưu các biến với định dạng nhị phân data.mat >> save numdata s1, c1 % lưu các biến số s1 và c1 tới numdata.mat >> save strdata str % lưu biến chuỗi str vào strdata.mat >> save allcos.dat c* -ascii % saves c1,c2 in 8-digit ascii format to allcos.dat Còn khi load >> load % tải tất cả các biến từ file matlab.mat >> load data s1 c1 % chỉ tải riêng từng biến trong file data.mat >> load str data % tải tất cả các biến từ file strdata.mat Chương 2: Các cấu trúc cơ bản và biến 2.1 Tính toán với Matlab Có 3 loại biến số học: Số nguyên, số thực, số phức. Matlab còn hỗ trợ thêm những loại không phải là số: Inf (giá trị vô cực, ví dụ : 1/0 sẽ cho kết quả như vậy) hoặc NaN (không phải là số, là kết quả của các phép tính như 0/0 hoặc vô cùng – vô cùng) Chúng ta có thể viết các biểu thức trên dòng lệnh của Matlab : >> (23*17)/7 Kết quả sẽ là : ans = 55.8571 Matlab có 6 toán tử cơ bản là : +, - , * , \ , /(chia phải hoặc trái) và ^(hàm mũ) Chú ý sự khác nhau của toán tử chia trái và chia phải : >> 19/3 % thực hiện phép chia: 19/3 ans = 6.3333 >> 19\3, 3/19 % thực hiện phép chia: 3/19 ans = 0.1579 ans = 0.1579 Những hàm cơ bản về lượng giác, mũ … có thể tìm hiểu >> help elfun Bài tập: Xác định giá trị các biểu thức dưới đây bằng tay và bằng Matlab để so sánh. Chú ý tới sự khác nhau giữa chia trái và phải, và dùng lệnh help để tìm hiểu về các hàm: round, floor, ceil … • 2/2 - 3 • 8 - 5\4 • 8 - (5\4) • 7 − 5 - 4\9 • 6 − 2/5 + 7^2 − 1 • 10/2\5 − 3 + 2 - 4 • 3^2/4 • 3^2^3 • 2 + round (6/9 + 3 - 2)/2 • 2 + floor (6/9 + 3 - 2)/2 • 2 + ceil (6/9 + 3 - 2)/2 • x = pi/3, x = x − 1, x = x + 5, x = abs(x)/x 2.2 Giới thiệu dạng dữ liệu Mặc dù tất cả các tính toán số trong Matlab đều được tính toán với độ chính xác kép (double precision), nhưng khuôn dạng của dữ liệu đưa ra có thể định dạng lại nhờ các lệnh định dạng của Matlab. Các biến ngầm định cũng như các biến của người sử dụng định nghĩa đều có thể đưa ra nhiều định dạng khác nhau. Định dạng được chọn nhờ sử dụng lệnh format tiếp đến là chỉ định long hay short và cuối cùng có thể là dạng biểu diễn của dữ liệu, cụ thể là e đối với dạng hàm mũ, f đối dạng dấu phẩy độ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 11: 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 = -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 = 1 4 9 >> 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 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] 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] % 1 vec tơ cột >> u * v % 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 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 4.0000 3.3333 >> z./z % 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 = Được định nghĩa trong Matlab như sau: >> 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 4 5 >> size(A2) % lấy cỡ của A2 ans = 2 4 >> size(A2’) ans = 4 2 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 >> I = eye(3); % ma trận đơn vị 33 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 1 1 >> C = zeros (size(C’)) % một ma trận toàn phần tử toàn là số 0 với kích thước bằng ma trận C’ 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 5 6]; t = 1:3; >> T = [T; t] % 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 5; 0 2]; % G là ma trận 2*3 >> T2 = [T G] % ghép 2 ma trận 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 = 1 2 3 4 5 6 7 8 9 >> A(1,2), A(2,3), A(3,1) ans = 2 ans = 6 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 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 0 7 >> B2 = [1 2; 5 1; 5 6]; >> B = B + B2’ % 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 ans = 2.0000 1.0000 0.5000 0.6667 4.0000 0.3077 >> C = [1 -1 4; 7 0 -1]; >> B .* C % nhân từng phần tử ans = 2 -4 32 42 0 -13 >> ans.^3 – 2 % thực hiện cho tất cả các phần tử ans = 6 -66 327 66 74086 -2 -2199 20 >> ans ./ B.^2 ans = 0.7500 -1.0312 63.9961 342.9907 -2.0000 -1.0009 >> r = [1 3 -2]; r * B2 ans = 6 -7 Khi thực hiện nhân ma trận: >> b = [1 3 -2]; >> B = [1 -1 3; 4 0 7] B = 1 -1 3 4 0 7 >> b * B % không thể thực hiện: b là ma trận 1*3 và B là 2*3 ??? Error using ==> * Inner matrix dimensions must agree. >> b * B’ ans = -8 -10 >> B’ *ones(2,1) ans = 5 -1 10 >> C = [3 1; 1 -3]; >> C * B ans = 7 -3 16 -11 -1 -18 >> C.^3 % thực hiện trên từng phần tử ans = 27 1 1 -27 >> C^3 % tương đương với C*C*C ans = 30 10 10 -30 >> ones(3,4)./4 * diag(1:4) ans = 0.2500 0.5000 0.7500 1.0000 0.2500 0.5000 0.7500 1.0000 0.2500 0.5000 0.7500 1.0000 Chương 4: Đồ họa 4.1 Đồ thị đơn giản Đơn giản nhất, đồ thị có thể được vẽ nhờ nối các điểm được đánh dấu trên mặt phẳng tọa độ Đề các. Ví dụ: >> x = 0:10; >> y = 2.^x; % ta được y = [1 2 4 8 16 32 64 128 256 512 1024] >> plot(x,y) % vẽ >> semilogy(x,y) Để đưa nhiều đồ thị lên cùng một cửa sổ ta dùng lệnh subpot, chính xác hơn, subplot(m,n,i) tạo mn bản vẽ, được sắp xếp trong mảng với m dòng và n cột. Lệnh này cũng bắt plot tiếp theo phải chuyển đến hệ tọa độ thứ i (đếm theo số dòng). Ví dụ: >> t=(0:.1:2*pi); >> subplot(2,2,1) >> plot(t,sin(t)) >> subplot(2,2,2) >> plot(t,cos(t)) >> subplot(2,2,3) >> plot(t,exp(t)) >> subplot(2,2,4) >> plot(t,1./(1+t.^2)) 4.2 Vẽ đường Hàm plot được sử dụng để vẽ dữ liệu trên mặt phẳng. Cho vec tơ x gồm các hoành độ x1,…,xn và vec tơ y gồm các tung độ y1,…yn, lệnh plot(x,y) sẽ vẽ các điểm từ (x1,y1) đến (xn,yn). Theo mặc định, các điểm này sẽ được nối theo thứ tự bởi các đoạn thẳng. Câu lệnh tổng quát: Mầu của đường vẽ Ký tự hiển thị Nét vẽ y yellow m magenta c cyan r red g green b blue w white k black . dấu chấm(point) O vòng tròn X dấu x + dấu cộng * dấu sao s hình vuông d kim cương tam giác chỉ lên tam giác chỉ xuống < tam giác chỉ sang trái > tam giác chỉ sang phải p ông sao 5 cánh h ông sao 6 cánh - solid : dotted -. dashdot -- dashed Ví dụ: Lệnh plot(x,y,’ro:’) vẽ đường nối bởi các chấm màu đỏ với điểm dữ liệu là vòng tròn nhỏ. Lệnh plot(x,y,’y-’,x,y,’go’) vẽ dữ liệu 2 lần với đường nối liền nét màu vàng và các điểm dữ liệu là các vòng tròn xanh lá cây. Để vẽ tứ giác với các đỉnh (0,0), (1,1), (4,2), và (5,-1) ta có thể dùng lệnh: >> x=[0 1 4 5 0]; >> y=[0 1 2 -1 0]; >> plot(x,y) Ta cũng có thể gần đúng đồ thị hàm số bằng cách lấy nhiều điểm. Ví dụ vẽ đồ thị hàm số / [-2;2]. Trước hết, ta lấy vec tơ dòng với các thành phần biến thiên từ -2 đến 2 với độ dài bước chia là 0.05 >> x=-2:.05:2; Tiếp đó là xác định các giá trị của y bằng cách lấy lũy thừa từng phần tử của x. >> y=x.^3; Cuối cùng: >> Plot(x,y) Ta đặt tên cho hình vẽ nhờ đánh lệnh >>title(‘Do thi cua ham f(x)=x^3’) Hình 1: Đồ thị hàm số Vẽ các đường cong tham số cũng tương tự: với . >> t=0:.1:4*pi; >> x=2*t.*cos(t)./(t+1); >> y=2*t.*sin(t)./(t+1); >> plot(x,y); >> title( '(2t cos t/ (t+1)),2t sin t/(t+1)' ) Chú ý: các phép toán nhân chia phải được thực hiện trên từng phần tử(nghĩa là .*, ./ hoặc .^). Để có tỷ lệ chính xác ta dùng: >> axis equal Hình 2: Đồ thị hàm số cho bởi phương trình tham số Để vẽ nhiều đường trên cùng 1 hình ta dùng lệnh “hold on”. Ví dụ: vẽ 2 đường tròn và . Chuyển sang phương trình tham số: và với . >> t=0:pi/20:2*pi; >> plot(2*cos(t),2*sin(t)) >> hold on >> plot(1+cos(t),1+sin(t)) >> axis equal >> title('Cac duong tron x^2+y^2=4 va (x-1)^2+(y-1)^2=1') Hình 3: vẽ đồ thị nhiều hàm trên cùng một hình Trong không gian 3 chiều thì thay lệnh plot bằng plot3. Ví dụ: Để vẽ đường tham số với ta có thể làm như sau: t=0:.1:8*pi; >> plot3(cos(t),sin(t),t) >> title('(cos t,sin t,t)') Hình 4a: vẽ đồ thị đường cho bởi phương trình tham số trong không gian 3 chiều Để vẽ đường trong tọa độ cực , với : >> theta = 0:.2:5*pi; >> rho=theta.^2; >> polar(theta,rho,'hb') Hình 4b: vẽ đồ thị trong hệ tọa độ cực 4.3 Vẽ mặt Để đồ thị hàm số trên miền hình chữ nhật Trước hết ta tạo lưới điểm trong miền khảo sát nhờ hàm meshgrid Ví dụ: vẽ đồ thị hàm số trên miền chữ nhật . Ta sử dụng lưới vuông với độ dài bước chia 0.1 >> [x,y]=meshgrid(-2:.1:2,-1:.1:1); Sử dụng phép toán vec tơ hóa để xác định Z. >> z=(x.^2).*y-2*y; Cuối cùng ta vẽ >> surf(x,y,z) >> title('Do thi cua ham so f(x,y)=x^2y-2y') Hình 5: Vẽ mặt trong 3 chiều Một trong những khó khăn khi vẽ mặt là phải đối mặt với phép chia c