Professional Documents
Culture Documents
HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA KHOA HỌC ỨNG DỤNG
BÁO CÁO
BÀI TẬP LỚN PHƯƠNG PHÁP TÍNH
ĐỀ TÀI 2
BÁO CÁO
BÀI TẬP LỚN PHƯƠNG PHÁP TÍNH
ĐỀ TÀI 2
TRANG
MỤC LỤC
1
2.4. BÀI 8.12
2
NỘI DUNG ĐỀ TÀI
Yêu cầu :
Sử dụng phương pháp chia đôi (bisection method) để giải các bài 8.6, 8.7,
8.9, 8.12, 8.13 page 217, khoảng cách ly nghiệm (isolated interval containing root)
được xác định bằng phương pháp hình học sao cho sai số nhỏ hơn 10-4.
3
Chương 1: CƠ SỞ LÝ THUYẾT PHƯƠNG PHÁP CHIA ĐÔI
Giả sử (a,b) là khoảng cách ly nghiệm của phương trình . Tìm nghiệm thực
gần đúng của phương trình trong (a,b), sai số .
4
1.2. SỰ HỘI TỤ CỦA PHƯƠNG PHÁP VÀ SAI SỐ :
Dãy đơn điệu tăng và bị chặn bởi b, dãy đơn điệu giảm
và bị chặn bởi a. Mặt khác dãy dương và giảm dần về 0, như vậy khi ta
có:
Với
5
Chương 2: NỘI DUNG BÀI LÀM
2.1. Bài 8.6
Đề bài:
Các phản ứng hóa học sau xảy ra trong 1 hệ thống kín:
2A+B C (1)
A+D C (2)
Ở trạng thái cân bằng, chúng có thể được tính bằng các công thức:
K1 =
K2 =
Với ci là nồng độ của các chất thành phần i. Nếu x1 và x2 lần lượt là số mol của C
trong các phản ứng 1 và 2. Sử dụng phương pháp tương tự bài 8.5 để đưa ra mối quan hệ
về nồng độ ban đầu của các chất. Sử dụng phương pháp chia đôi tìm x1, x2 biết K1=4.10-4,
K2=3,7.10-2, ca,0=50, cb,0=20, cc,0=5, cd,0=10.
6
Bước 2 : Tìm khoảng cách ly nghiệm của hàm f(x):
Hình 1: Nhập hàm f x Hình 2: Chọn khoảng chạy Hình 3: Kết quả
Bước 3 : Tìm nghiệm gần đúng của bằng phương pháp chia đôi
1) Ta có: < 0 và
2) Sử dụng máy tính cầm tay để xác định dấu của trên khoảng cách ly
nghiệm:
7
x 4,5 5
>0
Suy ra: =
3) Ta có được bảng số liệu như sau:
n a b
Vậy 4,8469
8
2.1.2.a. Code MatLab:
function Use_86_x1
%+ n: Số lần lặp thực tế
%+ a: Giá trị biên bên trái
%+ b: Giá trị biên bên phải
%+ x: Nghiệm của phương trình
%+ f: Giá trị của hàm f(x)
%+ e: Sai số
format long;
while (n<N&&err>eps)
x1 = (a + b)/2;
a2 = a; b2 = b; %Dùng để thể hiện bảng kết quả
m = subs(diff(f(x)),x,a);
if subs(f(x),x,a)*subs(f(x),x,x1)>0 %Nghiệm không nằm trong
khoảng [a,c]
a = x1;
else %Nghiệm thuộc [a,c]
b = x1;
end
err = abs(subs(f(x),x,x1)/m);
n = n + 1;
%Xuất kết quả ra màn hình
fprintf('%3d %15.9f %17.9f %18.9f %19.9f %20.9f\n',[n a2 b2
x1 subs(f(x),x,x1) err]);
end
9
disp('** Vay so mol cua C trong phan ung 1 la: ' +
string(round(x1,4))+ ' ' + '(mol)')
function fx = f(x)
K1 = 4.0E-4;
Ca0 = 50;
Cb0 = 20;
Cc0 = 5;
fx = (Cc0+x)/((Ca0-2*x)^2*(Cb0-x)) - K1;
% khoảng cách li nghiệm [4,5:5]
2.1.3.a. Kết quả:
10
2) Chọn khoảng chạy cho f x
Hình 1: Nhập hàm f x Hình 2: Chọn khoảng chạy Hình 3: Kết quả
Bước 3 : Tìm nghiệm gần đúng của bằng phương pháp chia đôi
1) Ta có: > 0 và
2) Sử dụng máy tính cầm tay để xác định dấu của trên khoảng cách li
nghiệm:
11
x 4 4,5
>0
Suy ra: =
3) Ta có được bảng số liệu như sau:
n a b
Vậy 4,4167
12
2.1.2.b. Code MatLab:
function Use_86_x2
%+ n: Số lần lặp thực tế
%+ a: Giá trị biên bên trái
%+ b: Giá trị biên bên phải
%+ x: Nghiệm của phương trình
%+ f: Giá trị của hàm f(x)
%+ e: Sai số
format long;
while (n<N&&err>eps)
x1 = (a + b)/2;
a2 = a; b2 = b; %Dùng để thể hiện bảng kết quả
m = subs(diff(f(x)),x,a);
if subs(f(x),x,a)*subs(f(x),x,x1)>0 %Nghiệm không nằm trong
khoảng [a,c]
a = x1;
else %Nghiệm thuộc [a,c]
b = x1;
end
err = abs(subs(f(x),x,x1)/m);
n = n + 1;
%Xuất kết quả ra màn hình
13
fprintf('%3d %15.9f %17.9f %18.9f %19.9f %20.9f\n',[n a2 b2
x1 subs(f(x),x,x1) err]);
end
disp('** Vay so mol cua C trong phan ung 1 la: ' +
string(round(x1,4))+ ' ' + '(mol)')
function fx = f(x)
K2 = 3.7E-2;
Ca0 = 50;
Cc0 = 5;
Cd0 = 10;
fx = (Cc0+x)/((Ca0-x)*(Cd0-x)) - K2;
% Khoảng cách li nghiệm [4:4,5]
2.1.3.b. Kết quả:
với R là hằng số chất khí [ = 0.518 kJ/(kg.K) ], T là nhiệt độ tuyệt đối (K), p là áp suất
tuyệt đối (kPa) và v là thể tích khí trong 1 kg ( m3 / kg ). Các thông số a và b được tính
bởi :
14
với là áp suất tới hạn (kPa) và là áp suất tới hạn (K). Là một kĩ sư hóa học bạn được
yêu cầu xác định lượng metan lỏng (CH4) ( =4600 kPa và =191 K) có thể chứa trong
một thùng có thể tích 3 trong điều kiện nhiệt độ và áp suất 65,000kPa. Sử dụng
một phương pháp xác định nghiệm theo ý muốn để xác định v và từ đó tính lượng CH4
lỏng chứa trong thùng.
Mà:
Vậy đặt
15
Hình 1: Nhập hàm f x Hình 2: Chọn khoảng chạy Hình 3: Kết quả
Bước 3 : Tìm nghiệm gần đúng của bằng phương pháp chia đôi
1) Ta có: > 0 và
2) Sử dụng máy tính cầm tay để xác định dấu của trên khoảng cách li
nghiệm:
16
Ta thấy: nên ta sẽ có bảng xét dấu của như
sau:
x 0,002 0,004
<0
Suy ra: =
3) Ta có được bảng số liệu như sau:
17
n a b
0 0,002 0, 004 0,003 - 0,001309933
1 0,0025 0,003 0,0025 + 0,000777843
2 0,0025 0,003 0,00275 + 0,000097839 104
while (n<N&&err>eps)
x1 = (a + b)/2;
a2 = a; b2 = b; %Dùng để thể hiện bảng kết quả
18
m = abs(subs(diff(f(x)),x,b));% Hàm f''(x) luôn âm trong
khoảng đó với là f'(a) vs f'(b) < 0
if subs(f(x),x,a)*subs(f(x),x,x1)>0 %Nghiệm không nằm trong
khoảng [a,c]
a = x1;
else %Nghiệm thuộc [a,c]
b = x1;
end
err = abs(subs(f(x),x,x1))/m;
n = n + 1;
%Xuất kết quả ra màn hình
fprintf('%3d %15.9f %17.9f %18.9f %19.9f %20.9f\n',[n a2 b2
x1 subs(f(x),x,x1) err]);
end
disp('Luong Ch4 long chua trong thung la: ' + string(V/x1) + ' '
+ '(kg)')
function fx = f(x)
R = 0.518;
Pc = 4600;
Tc = 191;
T = 233;
P = 65000;
a = (0.427*R^2*Tc^2.5)/Pc;
b = 0.0866*R*(Tc/Pc);
fx = R*T/(x-b)-a/(x*(x+b)*T^0.5) - P;
% khoảng cách li nghiệm [0.002:0.004]
2.2.3. Kết quả:
19
Thể tích V của chất lỏng trong bình hình cầu có bán kính r và độ cao h được tính
bằng:
V=
V=
f(x)=
Trường hợp 1:
Hình 1: Nhập hàm f x Hình 2: Chọn khoảng chạy Hình 3: Kết quả
20
Trường hợp 2:
Hình 1: Nhập hàm f x Hình 2: Chọn khoảng chạy Hình 3: Kết quả
Bước 3 : Tìm nghiệm gần đúng của bằng phương pháp chia đôi
1) Ta có: < 0 và
> 0 và
2) Sử dụng máy tính cầm tay để xác định dấu của trên khoảng cách li
nghiệm: và
Trường hợp 1:
x 0,1 1
>0
21
Suy ra: =
Ta có được bảng số liệu như sau:
n a b
Vậy 0,4311
Trường hợp 2:
22
Ta thấy: nên ta sẽ có bảng xét dấu của như sau:
x 2,5 3
<0
Suy ra: =
Ta có được bảng số liệu như sau:
n a b
23
2.3.2. Code MatLab:
function Use_89
%+ n: Số lần lặp thực tế
%+ a: Giá trị biên bên trái
%+ b: Giá trị biên bên phải
%+ x: Nghiệm của phương trình
%+ f: Giá trị của hàm f(x)
%+ e: Sai số
format long;
while (n<N&&err>eps)
x1 = (a + b)/2;
a2 = a; b2 = b; %Dùng để thể hiện bảng kết quả
m = abs(subs(diff(f(x)),x,a));
if subs(f(x),x,a)*subs(f(x),x,x1)>0 %Nghiệm không nằm trong
khoảng [a,c]
a = x1;
else %Nghiệm thuộc [a,c]
b = x1;
end
err = abs(subs(f(x),x,x1))/m;
n = n + 1;
%Xuất kết quả ra màn hình
24
fprintf('%3d %15.9f %17.9f %18.9f %19.9f %20.9f\n',[n a2 b2
x1 subs(f(x),x,x1) err]);
end
disp('** Vay do cao h trong binh cau la: ' + string(round(x1,4))+
' ' + '(m)')
function fx = f(x)
r = 1;
V = 0.5;
fx = (pi*x^2*(3*r-x))/3 - V;
% khoảng cách li nghiệm [0.1:1] + [2.5:3]
2.3.3. Kết quả:
25
2.4. Bài 8.12:
Đề bài:
Phương trình Ergun, được trình bày dưới đây, được sử dụng để mô tả dòng chảy
của chất lỏng qua một tầng được đóng gói. ∆p là độ giảm áp suất, p là khối lượng riêng
của chất lỏng, là vận tốc khối lượng (tốc độ dòng chảy khối lượng trên 1 đơn vị diện
tích mặt cắt ngang), là đường kính của các hạt trong lớp. là độ nhớt của chất lỏng, L
là chiều dài của lớp đệm và là phần rỗng của lớp đệm.
Với các giá trị tham số được liệt kê bên dưới, hãy tìm phần rỗng của lớp đệm.
(1)
26
Thay bằng x ta được:
Hình 1: Nhập hàm f x Hình 2: Chọn khoảng chạy Hình 3: Kết quả
Bước 3 : Tìm nghiệm gần đúng của bằng phương pháp chia đôi
1) Ta có: < 0 và
3x 2 1 x x3 3 3x 2 2x 3 3
f '( x) 10 10
1 x 1 x 20
2 2
20
27
2) Sử dụng máy tính cầm tay để xác định dấu của trên khoảng cách li
nghiệm:
x 0,4 0,5
>0
Suy ra: =
3) Ta có được bảng số liệu như sau:
28
n a b
0 0, 4 0,5 0, 45 - 0.017695986
Vậy
2.4.2. Code MatLab:
function Use_812
%+ n: Số lần lặp thực tế
%+ a: Giá trị biên bên trái
%+ b: Giá trị biên bên phải
%+ x: Nghiệm của phương trình
%+ f: Giá trị của hàm f(x)
%+ e: Sai số
format long;
29
%Trang trí kết quả
fprintf('%3c %10c %17c %18c %18c %20c\n',['n' 'a' 'b' 'x' 'f'
'e']);
fprintf('--------------------------------------------------------
-----------------------------------------\n');
syms x;
while (n<N&&err>eps)
x1 = (a + b)/2;
a2 = a; b2 = b; %Dùng để thể hiện bảng kết quả
m = abs(subs(diff(f(x)),x,a));
if subs(f(x),x,a)*subs(f(x),x,x1)>0 %Nghiệm không nằm trong
khoảng [a,c]
a = x1;
else %Nghiệm thuộc [a,c]
b = x1;
end
err = abs(subs(f(x),x,x1))/m;
n = n + 1;
%Xuất kết quả ra màn hình
fprintf('%3d %15.9f %17.9f %18.9f %19.9f %20.9f\n',[n a2 b2
x1 subs(f(x),x,x1) err]);
end
disp('** Vay phan rong e cua lop dem la: ' + string(round(x1,4)))
function fx = f(x)
a = 1000;
b = 10;
fx = (b*x^3)/(1-x) - (150*(1-x))/a - 1.75;
% khoảng cách li nghiệm [0,4:0,5]
2.4.3. Kết quả:
30
2.5. Bài 8.13:
Đề bài:
Độ giảm áp suất trong một đoạn đường ống có thể được tính như sau:
+ : hệ số ma sát
Đối với dòng chảy rối, từ phương trình Colebrook giúp ta có thể tính được hệ số
ma sát theo công thức:
31
Với : độ nhớt (N.s/m2).
(a) Xác định đối với 0.2 m ống dài nằm ngang nhẵn (trơn) với
, , , =40 m/s và =
0.0015 mm. Sử dụng phương pháp số để xác định hệ số ma sát. Lưu ý rằng
với ống trơn < 105, có thể thu được kết quả tốt hơn bằng công thức
Blasius, .
(b) Lặp lại tính toán nhưng đối với ống thép thương mại nhám hơn ( = 0.045
mm).
Đặt f = x ta có:
32
Hình 1: Nhập hàm f x Hình 2: Chọn khoảng chạy Hình 3: Kết quả
Bước 3 : Tìm nghiệm gần đúng của bằng phương pháp chia đôi
1) Ta có: > 0 và
2) Sử dụng máy tính cầm tay để xác định dấu của trên khoảng cách li
nghiệm:
33
Ta thấy: nên ta sẽ có bảng xét dấu của như
sau:
x 0,025 0,03
<0
Suy ra: =
3) Ta có được bảng số liệu như sau:
34
n a b
Vậy
Vậy
function Use_813_a
%+ n: Số lần lặp thực tế
%+ a: Giá trị biên bên trái
%+ b: Giá trị biên bên phải
%+ x: Nghiệm của phương trình
%+ f: Giá trị của hàm f(x)
%+ e: Sai số
format long;
35
a = input('Nhap gia tri bien trai'); b = input('Nhap gia tri bien
phai'); %Gia tri nghiem trong khoang [a,b]
err = eps+0.1; %Sai so
n = 0; %Thứ tự lần lặp
ro = 1.23;
D = 0.005;
V = 40;
L = 0.2;
while (n<N&&err>eps)
x1 = (a + b)/2;
a2 = a; b2 = b; %Dùng để thể hiện bảng kết quả
m = abs(subs(diff(f(x)),x,b));
if subs(f(x),x,a)*subs(f(x),x,x1)>0 %Nghiệm không nằm trong
khoảng [a,c]
a = x1;
else %Nghiệm thuộc [a,c]
b = x1;
end
err = abs(subs(f(x),x,x1))/m;
n = n + 1;
%Xuất kết quả ra màn hình
fprintf('%3d %15.9f %17.9f %18.9f %19.9f %20.9f\n',[n a2 b2
x1 subs(f(x),x,x1) err]);
end
disp('** Vay do giam ap suat = ' +string((x1*L*ro*V^2)/(2*D)) +'
' +'(Pa)')
function fx = f(x)
ro = 1.23;
muy = 1.79E-5;
D = 0.005;
V = 40;
36
e = 0.0015E-3;% Đối với câu b thì e = 0.045E-3
re = (ro*V*D)/muy;
fx = 1/x^0.5 + 2*log10(e/(3.7*D) + 2.51/(re*x^0.5));
%Khoảng cách li nghiệm câu a [0.025:0.03]
% câu b [0.04:0.045]
37
Chương 3: KẾT LUẬN
Xây dựng được lưu đồ giải thuật để giải quyết một bài toán phương pháp tính.
Viết được chương trình bằng "m file" trong MATLAB để giải quyết bài toán phương
pháp tính được đưa ra.
Giải được các phương trình toán hoc bằng công cụ giải số trong MATLAB.
38
TÀI LIỆU THAM KHẢO
[1] LÊ THÁI THANH, Giáo trình phương pháp tính, NXB Đại học Quốc Gia TP Hồ Chí
Minh -2019
[2] Numerical_Methods_for_Engineers_7th_Edit
39