Biến địa phương và biến toàn cục

Một phần của tài liệu Kỹ thuật tính toán trong công nghệ hóa học (Trang 41)

3. 2M aừ ận

7.2.2 Biến địa phương và biến toàn cục

Các biến thông thường đều được mặc định là biến địa phương, nó chỉ được tham chiếu trong hàm chứa nó. Còn các biến cục bộ được khai báo sau từ ‘global’, nó sẽ được tham chiếu trong toàn bộ modun.

7.2.3 Tính giá trị hàm sổ cách gián tiếp

Việc tính hàm số gián tiếp giúp cho việc lập ừ ình ừở lên tổng quát hơn. Trong Matlab ta sử dụng lệnh ‘ fevaV.

[yl,..,ynj =feval (Fjclr..,xn),

Trong đó F là tên hàm số được định nghĩa , x l,...,x n là biến vào và y l,...,yn có thể là biến ra. Xem ví dụ:

> > X = p i ; y = c o s ( x ) ;

» z = feval(’cos’,x);

Dòng lệnh cuối có thể được thay bởi 2 dòng lệnh

» F = ’cos’;

» z = feval(F,x)

Việc tính giá trị hàm gián tiếp sẽ là 1 công cụ tốt để xây dựng 1 chương ữình với hàm số được coi như là tham số.

Ví dụ tạo hàm có tên là funplot function fimplot (F, xstart, xend, col);

%FUNPLOT makes a plot o f the function F at the interval [xstart, xendj. % The plot should be made in one o f the standard Matlab colors, so

% ’co l’ is one o f the following value: or V’.

% default values:

% [xstart,xend] = [0,10]

% c o ỉ = Ẽb ‘

% Note: illustrates the use o f feval command i f (nargm == 0)

error ( ’No function is provided. ’); end

Kỹ thuật tính toán ừong công nghệ hóa học i f (nargin < 2) xstart - 0; xend= 10; end i f (nargin - - 2)

error ( ’Wrong number o f arguments. You should provide xstart and xend. ’); end

i f (nargin < 4) col = ’b ’; end

i f (xstart == xend),

error ( ’The [xstart, xend] should be a non-zero range. ’); elseif (xstart > xend),

exchange = xend; xend — xstart; xstart - exchange; end switch col case { ’b ’, ’k ’, ’m ’, 'g ’w ’, ’y ’, V '} ; % do nothing; the right color choice otherwise

error ( ’Wrong col value provided. ’) end x - linspace(xstart, xend); y - feval(F,x); plot (x,y,col); description - [ ’Plot o f ’, FJ; title (description); return;

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

Chương 8: Văn bản

8.1 Chuỗi kí tự

Matlab hầu như làm việc vói số, nhưng khi cần thiết ta có thể xử lý văn bản. Văn bản được lưu dưới dạng các kí tự chuỗi. Chuỗi là vec tơ mà phần tử là các giá trị

ASCn được hiển thị dưới dạng chuỗi kí tự. Do đó, các thao tác trên chuỗi giống như 1

vectơ

» t - ’This is a character string’ t =

This is a character string » size(t)

ans I 27 » whos

Name Size Bytes Class 11x27 54 char array » t ( l 0 : 1 9 ) ans = 47 character » t([2,3,10,17]) ans hi t

Để chuyển đổi dạng chuỗi về dạng số ta dùng double » double(t(l: 12))

ans -

84 104 105 115 32 105 115 32 97 32 99 104

Và hàm char được cung cấp để biến đổi ngược lại

» t([16:17])

ans - ct

» t([16:17])+3 % thực hiện các thao tác toán học với mã ASCII

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

102 119

» t([16:17])-3 %gọi lại mã ASCII

ans 96 H ỉ

» char(t([16:17])-2) % chuyển mã ASCII ra thành kí tự ans

ar

8.2 Vào - ra dữ liệu

Các lệnh liên quan đến nhập dữ liệu từ bàn phún: input, keyboard, menu, pause

8.2.1 Vào ra dữ liệu từ bàn phím 8.2.1.1 Lênh ‘input’

Lệnh này đưa ra thông báo nhắc nhở người sử dụng nhập dữ liệu từ bàn phún. Lệnh có dạng: r= input(string)

Trong đó r là tên biến, string là sâu ký tự chứa thông báo nhắc người dừng biết về dữ liệu cần nạp. Dữ liệu đó có thể là biểu thức bất kỳ. Nếu người sử dụng ấn ‘Enter’ ngay thì r sê là 1 ma ừận rỗng.

Ví dụ:

>> m=input('nhap so dong cua ma ừan: ’) nhap so dong cua ma tran: 3

m 3

» n-ìnputựnhap so cot cua ma tran: ') nhap so cot cua ma tran: 5

n 5

8.2.2 Đưa dữ liệu ra màn hình 8.2.2.1 lênh 'disv’

Lệnh disp để hiển thị nội dung cùa 1 mảng ra màn hình mà không hiển thị tên mảng. Lệnh này luôn thực hiện cho dù có dấu ở cuối dòng lệnh hay không, ngoại trừ trường hợp mảng rỗng. Lệnh có dạng:

Disp(x)

Trong đó X có thể là tên biến mảng hoặc biểu thức bất kì. >> disp(’This is a statement. ’) % 1 chuỗi This is a statement.

Kỹ thuật tính toán ừong công nghệ hóa học 0.2221 0.0129 0.8519 0.4885 0.0538 0.5039 0.2290 0.3949 0.4239 8.2.2.2 lênh ‘Ịprintí‘ Lệnh có cấu trúc

Fprintf(dmlog_format, danh sách biến)

Trong đó dialog_format là biến(hằng) xâu ký tụ chứa thông báo và các ký tụ định khuôn dạng dữ liệu ra.

Ví dụ: >> a=rand(3,3) a 0.8462 0.6721 0.6813 0.5252 0.8381 0.3795 0.2026 0.0196 0.8318

>> fprintf('Do dai cua ma tran A: %i%i\ỉength(a)) Do dai cua ma ừan A: 3

» fprintf('A bỉnhphuong: \n %i%i%i\n%i%i%i\n%i%i%i\n\aA2) A binh phuong: 1.207124e+0009.614361e-0013.503595e-001 1.145488e+000L 062870e+0001.690032e-001 1.398258e+0009.914752e-0018.373965e-001 Hay một ví dụ khác: >> sfr = ’life is beautiýul’;

» Jprintf(’My sentence is: %s\n ’,str); % chủ ỷ định dạng \n

My sentence is: ỉife is beautiýuỉ

» fp rin tf(‘My sentence is: %30s\n ’,sư); My sentence is: ỉife is beautiýuỉ

» fprintf(’My sentence is: %30.10s\n\str); My sentence is: ỉife is be

» fprintf(’My sentence is: %-20.10s\n \str); My sentence is: ỉife is be

»

» name - ’John

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

50

» salary = 6130.50;

» Jprintf(’My name is %4s. I am %2d. My salary is f %7.2f.\n’,name, age, salary);

» My name is John. I am 30. My salary is f 6130.50.

» > > x = [0,0.5, 1]; » y - [x; exp(x)]; » jprintf(’%6.2f%12.8j\n \y); 0.00 1.00000000 0.50 1.64872127 1.00 2.71828183 » » jprintf(’%6.1e %12.4e\n’,y); 0.0e+00 1.0000e+00 5.0e-01 1.6487e+00 L0e+00 2.7183e+00 » » x = 1:3:7; » y = [x; sin(x)J; » jprintf(’%2d %10.4g\n \y); 1 0.8415 4 -0.7568 7 0.657 8.2.3 Xử lífile văn bản 8.2.3.1 Lênh ‘fopen’

fllelD = fopen(fĩlename, permission)

Lệnh được sử dụng để mở một file văn bản có tên được cho bởi filename ở chế độ được chỉ ra bởi permission. Permission có thể là:

‘rt’ đọc

‘w t’ ghi (sẽ ghi 1 file mới nếu không tìm thấy file với tên chỉ ra bởi filename) ‘at’ nối đuôi(sẽ ghi 1 file mới nếu không tim thấy file với tên chỉ ra bởi filename)

Biến nhận dạng fîlelD sẽ nhận các giá trị nguyên và ta sẽ thâm nhập vào file sử dụng biến nhận dạng này.

Khi kiểm tra lỗi mở file có thể sử dụng

[fid, message] =/openựUename, permission) 8.2.3.2 Lênh đóng file ‘fclose’

S t = fclose(fîd)

Lệnh này sẽ đóng file ứng với biến nhận dạng fid. Fclose sẽ ừả biến st giá trị 0 nếu nó là thành việc đóng file và trả lại giá trị -1 nếu gặp lỗi.

Lệnh st = fclose(‘aU’) đóng tất cả các file đang mở ngoại trừ 0, 1 và 2.

8.2.3.3 Lênh ‘frewind’ Frewind(fid)

Đặt con ừỏ file có tên fid vào đầu file.

8.2.3.4 Lênh ‘fscanf’

[A, count] =fscan/(fĩd, format, size)

Lệnh này đọc dữ liệu từ file tương ứng với biến nhận dạng fid, chuyển đổi dữ liệu về dạng được xác định bởi xâu biến format, và gán vào ma trận A. Biến count là biến ra tùy chọn dùng để chứa số lượng phần tử đọc được.

Fid là biến nhận dạng tương ứng với file nhận dạng được từ lệnh fopen.

Size là tùy chọn; giới hạn số đối với số phần tà được đọc tù file, nếu không có biến này thì toàn bộ file sẽ được xét Các giá trị của biến có thể là:

• N: đọc không quá N phần tử từ file vào vec tơ cột • Inf: đọc không quá kết thúc file

• [M,N] : đọc không quá M*N phần tử và đưa vào ma trận kích thước không quá M*N theo từng cột. N có thể là inf còn M thì phải là hữu hạn

Nếu ma trận A là kết quả của việc chuyển định dạng kí tự và biến size không có dạng [M,N] thì vec to dòng sẽ được trả lại.

Format là biến xâu chứa các kí tự chuyển đổi định dạng của ngôn ngữ c . Các kí tự định khuôn dạng bao gồm : %, các kí tự thay thế, độ dài trường, và các kí tự chuyển đổi dạng: d, i, o, u, X, e, Ẹ, g, s, c and [... ](liệt kê tập hợp).

Nếu %s được sử dụng thì khi đọc 1 phần tử có thể dẫn tới 1 loạt các thành phần của ma trận được sử dụng, mỗi thành phần giữ 1 kí tự.

Sử dụng %c để đọc kí tự trắng; định dạng %s bỏ qua các kí tự trắng.

Neu chỉ thị định dạng gồm lẫn lộn cả số lẫn kí tự thì ma trận kết quả sẽ là ma trận số và mỗi kí tụ sê chuyển thành 1 số chính bằng giá trị mã ASCII của nó.

Fscanf khác với lệnh này trong ngôn ngữ c ở chỗ nó là lệnh được vec tơ hóa để ừả lại đối số là ma trận. Biến xâu định dạng sẽ được lặp lại cho đến khi gặp kết thúc file hoặc đọc đủ số lượng phần tù chỉ ra bởi size.

Ví dụ:

Kỹ thuật tính toán ừong công nghệ hóa học Lệnh s = fscanf(fỉd,’%s’) Đọc(và ừả lại) một xâu Lệnh Á = fscanf(fỉd,’%5d’) Đọc các số có 5 chữ số thập.

Ví dụ: giả sử có file văn bản với tên ‘kq.txt’ chứa xâu ‘Day la ket qua dua ra’. Khi đó ta có thể đọc dữ liệu vào như sau:

>> fid - f o p e n ( ' k q ’r t ’) Fid = 3 » x= fscanf(fìd, ’%s ’) x= Daylaketquaduara » frewind(fid) »x= fscanf(fid, ’%s%c ’) x=

Day ỉa ket qua dua ra

Yí dụ: giả sử fĩle văn bản Matrix.txt chứa 2 dòng

1 2 3 4 5

6 7 8 9 10

Hãy theo dõi sự tác động của lệnh fscanf >>fo pen(‘m a ừ ix .tx t'r t’) Ans = 4 » A=fscanf(4, ’% i’,[2,5]) A = 1 2 3 4 5 6 7 8 9 10 >>frewind(4); » B =fsccmf(4, ’Voi’,[5,2]) B= 1 6 2 7

Kỹ thuật tính toán ừong công nghệ hóa học 3 8 4 9 5 1 0 » Frewind(4'); » C=fscanf(4, ’% i’,6) c = 1 2 3 4 5 6 8.2.3.5 Lênh FPRINTF Count = fprintf(fidformat,A,...)

Lệnh này sê định dạng các thành phần của ma trận A( và các biến tiếp theo trong danh sách) theo định dạng được xác định bởi xâu format, và ghi ra file tương ứng với các biến nhận dạng fid. Biến count sẽ đếm số byte của dữ liệu được ghi ra. Fid là số nguyên nhận dạng tên file thu được từ lệnh fopen. Có thể dùng số 1 nếu sử dụng thiết bị ra chuẩn(màn hình). Nếu trong lệnh này không chỉ ra biến fid thì kết quả sẽ đưa ra màn hình.

Format là biến xâu chứa các kí tự mô tả đinh dạng dữ liệu giống như trong ngôn ngữ c. Các kí tự \n, \r, \t, \b, \f có thể dùng để tạo ra linefeed, carriage return, tab, backspace, và formfeed characters tương ứng. Sử dụng \\ để tạo dấu \ và %% để tạo ra kí tự %. Ví dụ: >> X=0:.1:1; y=[x,exp(x)]; » ýìd~fopen(’exp.txt', 'w'); » fprintf(fid, '%6.2f %12.8J\r’,y); » fclose(fid);

Đe tạo ra file văn bản có tên là ‘exp.txt’ chứa bảng giá trị hàm mũ:

0.00 0.10000000

0.20 0.30000000

0.40 0.50000000

0.60 0.70000000

Kỹ thuật tính toán ừong công nghệ hóa học 1.00 1.00000000 1.11 1.22140276 1.35 1.49182470 1.65 1.82211880 2.01 2.22554093 2.46 2.71828183

In nội dung fĩle đó ra màn hình:

> > jprintf('**** Day la bang gia trì ham exp ****(« X

**** Day la bang gia tri ham exp ****

X exp(x) » jprintf('% 6.2f %12.8f\n',y); 0.00 0.10000000 0.20 0.30000000 0.40 0.50000000 0.60 0.70000000 0.80 0.90000000 1.00 1.00000000 1.11 1.22140276 1.35 1.49182470 1.65 1.82211880 2.01 2.22554093 2.46 2.71828183 exp(x)\n’);

Phần II: ứng dụng của Matlab trong công nghệ hóa học

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

Trong thực tế, các bài toán công nghệ hóa học rất phức tạp, thiết kế và vận hành một quá trình thì luôn luôn đi kèm với tính kinh tế của nó. Do đó, tối ưu hóa quá trình thiết kế và vận hành là vô cùng cần thiết, việc mô phỏng và tính toán nhanh và chính xác luôn được đánh giá rất cao. Hiện nay, chiếc máy tính cùng với các phần mền tính toán và mô phỏng giúp chúng ta giải quyết những bài toán đó đơn giản hơn, thời gian được tiết kiệm triệt để.

Trong học tập, các bài toán công nghệ hóa cũng cần một khối lượng tính toán khá lớn, có rất nhiều hằng số phải tra cứu(khối lượng riêng, nhiệt hóa hơi, hằng số ừong phương trình Antoine...) và cũng không ít những phương ừình thực nghiệm phức tạp ừong các trường hợp khác nhau( tính chuẩn Nuselt...), việc tính toán bằng tay ừở nên mất thời gian và có khả năng sai rất lớn. Matlab bằng công cụ tính toán, và mô phỏng phong phú và rất mạnh có thể khắc phục điều đó.

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

Chương 1: Dẩn nhiệt và đếỉ lưu

1.1. Dần nhiệt

1.1.1. Tóm tắt li thuyết

dẫn nhiệt qua vách phẳng

Ỳ Ểl w /m 2 1 Ậ

q mật độ dòng nhiệt q = const qua các lớp 5; chiều dày của các lớp thứ i (m);A,i là hệ số dẫn nhiệt của lớp thứ i (W/mK); tw! nhiệt độ mặt ừ o n g ; t^n+i) nhiệt độ mặt ngoài của lóp thứ n dẫn nhiệt qua vách trụ t «/= — K x ^w (n+l) l n ^ ! lĩú ị dt trong đó :

+ qi mật độ dòng nhiệt trên một mét chiều dài (W/m) + di đường kính của lớp thứ i (m)

+ hệ số dẫn nhiệt của lớp thứ i (W/mK)

dẫn nhiệt không ổn định

với tâm phang dày 20 nhiệt độ tại tâm tấm

0 « =f(Bi/Fo)

Nhiệt độ trên bề mặt tấm

ex_, = f(Bi/Fo)

Trong đó :

jy.

Ol = — tiêu chuân Biot

ar , _

g ĩ tiêu chuẩn fourier ( a ~ £ hệ số nhiệt độ )

v _ X

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

1.1.2. Vi dụ

1. Ví dụ vách phẳng hai lớp có bề dày và hệ số dẫn nhiệt tương ứng là ỗi = 10 cm Ằ]= 2.5W/m độ ô2=0.3m Ầ2=1.5W/m độ. nhiệt độ mặt phải là 1^2=25° c khi có dòng nhiệt q = 500W/m2 dẫn qua vách xác định

a)nhiệt độ mặt ừái tjni và nhiệt độ mặt tiếp xúc b) gradiel tại mỗi lóp

c)nếu giữ nguyên lớp có gradien nhỏ và duy ừì gradt như cũ thì lớp còn lại phải thay đổi độ dãy V và 5’bằng bao nhiêu để gradt nhu nhau trên cả hai vách khi nhiệt độ các mặt và dòng điện không đổi

Lời siải

a) xác định nhiệt trở của mặt trái t2 nhiệt trở của các lóp :

lẠpl: J = | ỉ = 0-04" 2đb/ ^ 1 ớ P 2 : ^ = y | = 0-2«12^ / w

nhiệt trở tổng R = 0.04+0.2=0.24m2độ/w

q 500 n

đô chênh lêch nhiêt đô hai măt là At = ti - Í2 = D = 7 = 2 0 8 3 . 3 cK U.24

nhiệt độ mặt trái là: tj = 2083.3+25=2108.3

nhiệt độ chỗ tiếp xúc : tfc = ti - qRi= 2108.3 - 500.0.04 = 2088.3°c b) tính gradiel tại các lớp

l ớ p h g r a d t ^ J = f f = 200aCI M

lóp 2: gradt,= | - = f y = 333.33°C/M

Giải bằns Mathlab

Nhập những dòng lệnh sau, sau đó cho chạy trên mathlab ta sẽ có kết quả function btl

delta=mputCnhap duoi dang ma ữan gia tri cua do day (don vi m ):');

lamda = inputCnhap duoi dang ma tran gia tri cua he so dan dien (don viw /m d o):');

tl=input('nhap gia tri cua nhiet do mat trong cung:');% nếu không cho thì nhập là ‘no’ t2= input('nhap gia tri cua lop ngoai cung:'); % nếu không cho thì nhập là ‘no’

q=input('nhap nhiet luong cua dong: '); % nếu không cho thì nhập là ‘no’ barrier- input('loai vach ma ba can tin h:');

R=nhiettro (barrier, lamda, delta); if strcmp(tl,'no')

Kỹ thuật tính toán ừong công nghệ hóa học elseif strcmp(t2,'no') t2=tl-q/sum(R) elseif strcmp(q,'no') disp(tinh q nao!') q =density(tl,t2,R) end digpC...')

dispCgia tri cua gradiel:') gradt=gradiel(q,lamda) dispC...');

dispCnhiet do cua lop tiep xuc la :'); ttx=nhietdotiepxuc(q,tl ,R);

kết quả thu được là:

» B T 1

nhap duoi dang ma tran gia trì cua do day (don vi m): [0.1 0.3]

nhap duoi đang ma tran gia trì cua he so dem đien (don viW/mdo): [2.5 1.5] nhap gia tri cua nhiet do mat ừong cung: 'no'

nhap gia trì cua lop ngoai cung: 25 nhap nhiet ỉuong cua dong: 500 loai vach ma ba can tinh: 'ýlat' R =

0.0400 0.2000 tl =

2.1083e+003

gia ừỉ cua gradìel: gradt -

200.0000 333.3333

nhỉet do cua lop tiep xuc la:

ttx =

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

2. Vách trụ hai lóp đường kính tron cùng di = 20cm, bề dày và hệ số dẫn nhiệt hai lóp tương ứng là

5i = 2cm Ằ] = 1.2 w /m độ ,52 = 3cm k2 = 0.8 w /m độ. Nhiệt độ mặt trong cùng và ngoài cùng là tmi = 80°c, tm2 = 20°c. xác định

a)dòng điện dài qL qua vách nhiệt độ tại chỗ tiếp xúc b) mật độ dòng tại chỗ tiếp xúc

c)Gradt tại mặt trong cùng

Lời siải

a)dòng điện dài qL qua vách nhiệt độ tại lóp tiếp xúc ttx đường kính các lớp

d2 = di + 2Ỗ! = 0.2 + 2*0.02 = 0.24 m d3= d2+ 252= 0.24 +2*0.03 = 0.3 m nhiệt trở dẫn nhiệt tại mỗi lóp của vách trụ

1ỚP2 ¿ ^ ¿ ^ ( ẩ r 0-0444 ™ ^

nhiệt trở dẫn nhiệt tổng là R = Rt! + Rt2 = 0.0685 m độ/ w A t 80-20

mât đô dòng điên dài 9l=~z = n _ = 875.91 w /m

K U.Uoo5

nhiệt độ tại lớp tiếp xúc : t*i = tn,! - qLR] = 80 - 875.91*0.024 = 58.97°c b) mật độ dòng tại lớp tiếp xúc chỗ có đường kính d2

qL 875.91

q = - ^ ~ = — — = 1 1 6 1 v ự /™ 2

*d2 3.14*0.24 w/m

c) gradt tại mặt trong cùng có đường kính di :

q _ q L 1 875.91 _ 1 1 £ 1 0

I g r a d t i l - ^ ^ ^ 1.2^0.02

Giải bằne Mathlab

Một phần của tài liệu Kỹ thuật tính toán trong công nghệ hóa học (Trang 41)

Tải bản đầy đủ (PDF)

(125 trang)