ĐẠI HỌC QUỐC GIA TP HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA BÁO CÁO BÀI TẬP LỚN PHƯƠNG PHÁP TÍNH Group 4 Giảng viên TS Đậu Thế Phiệt TP HCM 2022 Danh sách thành viên STT Họ Tên MSSV Tiến độ hoàn thành 1 Huỳnh Vă[.]
Trang 1ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA
BÁO CÁO BÀI TẬP LỚN PHƯƠNG PHÁP TÍNH
Group 4
Giảng viên: TS Đậu Thế Phiệt
TP.HCM - 2022
Trang 2Danh sách thành viên
1 Huỳnh Văn Quốc Việt 1713947 100%
2 Hoàng Quốc Huy 1810934 100%
3 Đào Văn Tùng 2014996 100%
4 Trần Hữu Hiếu 2013165 100%
5 Ngô Vĩnh Phát 2014080 100%
6 Nguyễn Đăng Hoằng 1913466 100%
Trang 3LỜI NÓI ĐẦU
Phương pháp tính là môn học đại cương có tầm quan trọng đối với sinh viên ĐH Bách Khoa nói riêng và sinh viên các ngành khối khoa học kỹ thuật công nghệ nói chung Mục đích môn học là cung cấp đầy đủ nội dung cơ bản của phương pháp tính dùng cho các ngành khoa học kỹ thuật Nó sẽ giúp sinh viên khối kỹ thuật tiếp thu vấn đề một cách nhẹ nhàng và trang bị những kỹ năng cơ bản cho người học tự phát triển khả năng áp dụng toán học vào các bài toán thực tế
Môn phương pháp tính bao gồm các kiến thức cơ bản về tìm gần đúng nghiệm cho các phương trình vi tích phân hàm phức tạp, lý thuyết sai số Cùng với đó là các chuẩn đầu ra: Nhắc lại được định nghĩa, tính chất, cách tính, vận dụng được lý thuyết vào các bài toán áp dụng và bài toán thực tế , có khả năng hoạt động nhóm
Trang 4Mục lục
I CƠ SỞ LÝ THUYẾT 5
1 Problem 1 5
2 Problem 2 5
a Công thức hình thang 5
b Công thức Simpson 1/3 5
c Công thức Simpson 8/3 6
3 Problem 3 6
a Phương pháp chụp 6
b Phương pháp sai phân hữu hạn 7
II Code Matlab 8
III Kết quả 13
1 Problem 1 13
2 Problem 2 14
3 Problem 3 15
Trang 5I CƠ SỞ LÝ THUYẾT
1 Problem 1
Trường hợp 𝑦 = 𝐴𝑒−1.5𝑡+ 𝐵𝑒−0.3𝑡+ 𝐶𝑒−0.05𝑡
Có các giá trị của t và p(t), lúc này ta có thể lập được hệ phương trình với 3 ẩn A, B và
C Trong đó hệ này có 3 cột và 9 hàng giá trị ứng với 9 giá trị của p(t)
𝐴𝑒−1.5𝑡𝑖+ 𝐵𝑒−0.3𝑡𝑖+ 𝐶𝑒−0.05𝑡𝑖 = 𝑝(𝑡𝑖)
{
𝐴𝑒−1.5𝑡1+ 𝐵𝑒−0.3𝑡1+ 𝐶𝑒−0.05𝑡1= 6
𝐴𝑒−1.5𝑡2+ 𝐵𝑒−0.3𝑡2+ 𝐶𝑒−0.05𝑡2 = 4.4
𝐴𝑒−1.5𝑡3+ 𝐵𝑒−0.3𝑡…3+ 𝐶𝑒−0.05𝑡3 = 3.2
𝐴𝑒−1.5𝑡9+ 𝐵𝑒−0.3𝑡9+ 𝐶𝑒−0.05𝑡9 = 1.1
Để tìm được các giá trị A, B và C ta áp dụng cách chia ma trận, lấy Vector p(t) chia cho ma trận hệ số bên vế trái, ta sẽ thu được các hệ số A, B và C
2 Problem 2
a Công thức hình thang
chia đoạn [a, b] thành n đoạn nhỏ với bước chia ℎ = 𝑏−𝑎
𝑛 Khi đó a = x0, x1 = x0 + h, …, xk = x0 +kh, …, xn = x0 + nh và yk = f(xk), k = 0, 1, …, n
Sử dụng công thức hình thang cho từng đoạn [xk, xk+1] ta được:
∫ 𝑓(𝑥)𝑑𝑥 = ∫ 𝑓(𝑥)𝑑𝑥
𝑥1
𝑥0
+
𝑏
𝑎
∫ 𝑓(𝑥)𝑑𝑥
𝑥2
𝑥1
+ ⋯ + ∫ 𝑓(𝑥)𝑑𝑥
𝑥𝑛
𝑥𝑛−1
≈ℎ
2(𝑦0+ 𝑦1) +ℎ
2(𝑦2+ 𝑦1) + ⋯ +ℎ
2(𝑦𝑛−1+ 𝑦𝑛)
b Công thức Simpson 1/3
Tìm giá trị gần đúng của tích phân xác định sau:
𝐼 = ∫ 𝑓(𝑥)𝑑𝑥
𝑏 𝑎
Trong đó 𝑓(𝑥) là 1 hàm liên tục và khả vi trên đoạn [a;b]
Sử dụng công thức Simpson, cụ thể như sau:
Chia đoạn [a;b] thành 2 đoạn bằng nhau với 3 mốc
𝑥1= 𝑎; 𝑥2 =𝑎 + 𝑏
2 ; 𝑥3= 𝑏
ta sẽ có các giá trị tương ứng: 𝑦1 = 𝑓(𝑥1);𝑦2 = 𝑓(𝑥2); 𝑦3 = 𝑓(𝑥3)
Trang 6Khi đó ta có được:
𝐼 = ℎ
3 (𝑦1+ 4𝑦2 + 𝑦3) (2) 𝑣ớ𝑖 ℎ = 𝑏 − 𝑎
2 Công thức (2) gọi là công thức Simpson đơn giản
Để gia tăng độ chính xác khi lấy tích phân trên các khoảng lớn hơn, khoảng (a,b) có thể được chia nhỏ hơn nữa thành n bước
Việc định trị qua 3 điểm (tương đương với việc có hai khoảng) đối với mỗi khoảng con đòi hỏi rằng phải có một số chẳn các khoảng con Nghĩa là chúng ta có thể khai
triển số các khoảng con dưới dạng n = 2k
Ta có: ℎ = 𝑏−𝑎
2𝑘 các mốc là 𝑥𝑖 = 𝑎 + 𝑖ℎ; 𝑖 = [0; 2𝑘]
Giá trị của hàm tuong ứng: 𝑦𝑖 = 𝑓(𝑥𝑖) 𝑖 = [0; 2𝑘]
Ta có phép biến đổi:
𝐼 = ∫ 𝑓(𝑥)𝑑𝑥
𝑏 𝑎
= ∫ 𝑓(𝑥)𝑑𝑥
𝑥2
𝑥0
+ ∫ 𝑓(𝑥)𝑑𝑥
𝑥4
𝑥2
+ ⋯ + ∫ 𝑓(𝑥)𝑑𝑥
𝑥2𝑘
𝑥2𝑘−2
≈ℎ
3 (𝑦0 + 4𝑦1+ 𝑦2) + ℎ
3 (𝑦2 + 4𝑦3+ 𝑦4) + ⋯ +ℎ
3 (𝑦2𝑘−2+ 4𝑦2𝑘−1 + 𝑦2𝑘) ≈ℎ
3 [𝑦0 + 𝑦2𝑘+ 4(𝑦1 + 𝑦3 + ⋯ + 𝑦2𝑘−1) + 2(𝑦2 + 𝑦4+ ⋯ + 𝑦2𝑘−2)]
c Công thức Simpson 8/3
Công thức Simpson 8/3 có dạng như sau:
8
3(y0+ 2(y3+ y6+ +yn−3) + 3(y1+ y2+ y4+ y5+ +yn−2+ yn−1) + yn)
3 Problem 3
a Phương pháp chụp
Phương pháp Shooting được áp dụng để giải các bài toán về phương trình vi phân bậc
2 với điều kiện biên
Giả sử, ta có phương trình vi phân bậc 2 với điều kiện biên như sau:
𝑦"(𝑥) = 𝑓(𝑥), 𝑦(𝑥0) = 𝑎, 𝑦(𝑥𝑛) = 𝑏, 𝑥0 ≤ 𝑥 ≤ 𝑥𝑛
Để giải bài toán trên, ta đưa phương trình vi phân bậc 2 về dạng hệ phương trình vi phân bậc 1 của bài toán giá trị ban đầu
Đặt 𝑥 = 𝑦′ → 𝑥′ = 𝑦”
Phương trình vi phân bậc 2 ban đầu trở thành dạng:
Trang 7𝑦′ = 𝑥
𝑥′ = 𝑓(𝑥) 𝑥(𝑥0) = 𝑦′(𝑥0) =?
𝑦(𝑥0) = 𝑎 Phương pháp chụp yêu cầu ta phải tự đưa ra dự đoán cho giá trị y’(x0), sau mỗi lần lặp thì giá trị này được thay đổi theo dự đoán chủ quan của người giải
Sau khi đã đưa ra dự đoán giá trị, ta có thể áp dụng các phương pháp để giải hệ phương
vi phân như Runge – kutta bậc 4 hoặc phương pháp Euler
b Phương pháp sai phân hữu hạn
Xét bài toán biên {𝑝(𝑥)𝑦"(𝑥) + 𝑞(𝑥)𝑦′(𝑥) + 𝑟(𝑥)𝑦(𝑥) = 𝑓(𝑥), 𝑎 < 𝑥 < 𝑏
𝑦(𝑎) = 𝛼, 𝑦(𝑏) = 𝛽 Với phương pháp sai phân hữu hạn, chọn số tự nhiên n bất kỳ >0 Chia đều đoạn [a, b] thành n đoạn bởi các điểm chia x0 = a, xk = x0 +kh, k = 1, 2, …, n-1, xn = b với ℎ =
𝑏−𝑎
𝑛
Tại các nút xk, k = 1, 2, …, n-1 bên trong đoạn [a, b] sử dụng công thức sai phân hướng tâm, ta có:
𝑦′(𝑥𝑘) ≈𝑦(𝑥𝑘+1) − 𝑦(𝑥𝑘−1)
𝑦𝑘+1− 𝑦𝑘−1 2ℎ 𝑦"(𝑥𝑘) ≈ 𝑦(𝑥𝑘+1) − 2𝑦(𝑥𝑘) + 𝑦(𝑥𝑘−1)
ℎ2 =𝑦𝑘+1− 2𝑦𝑘 + 𝑦𝑘−1
ℎ2
Thay vào phương trình đã cho ta được
𝑝𝑘𝑦𝑘+1 − 2𝑦𝑘 + 𝑦𝑘−1
ℎ2 + 𝑞𝑘𝑦𝑘+1− 𝑦𝑘−1
2ℎ + 𝑟𝑘𝑦𝑘 = 𝑓𝑘
∀𝑘 = 1,2, … , 𝑛 − 1 Với 𝑝𝑘 = 𝑝(𝑥𝑘), 𝑞𝑘 = 𝑞(𝑥𝑘), 𝑟𝑘 = 𝑟(𝑥𝑘), 𝑓𝑘 = 𝑓(𝑥𝑘)
Từ các điều kiện biên 𝑦(𝑎) = 𝛼, 𝑦(𝑏) = 𝛽, sau khi biến đổi ta thu được hệ phương trình
{
𝑦0 = 𝛼, 𝑦𝑛 = 𝛽 (𝑝𝑘
ℎ2 −𝑞𝑘
2ℎ) 𝑦𝑘−1+ (𝑟𝑘 −2𝑝𝑘
ℎ2 ) 𝑦𝑘+ (𝑝𝑘
ℎ2 +𝑞𝑘 2ℎ) 𝑦𝑘+1 = 𝑓𝑘, ∀𝑘 = 1,2, … , 𝑛 − 1 Đây chính là hệ phương trình đại số tuyến tính cấp n-1: AY=B với A là ma trận bên dưới
Trang 8𝑟1−2𝑝1
ℎ2
𝑝1
ℎ2 + 𝑞1 2ℎ 0 … 0
𝑝2
ℎ2 −𝑞2 2ℎ 𝑟2 −
2𝑝2
ℎ2
𝑝2
ℎ2+𝑞2 2ℎ … 0
… 0
… 0
… … …
0 … 𝑟𝑛−1 −2𝑝ℎ𝑛−12 )
𝑌 = [𝑦1, 𝑦2, … , 𝑦𝑛−1]𝑇
Và 𝐵 =
(
𝑓1−(𝑝1
ℎ2 −𝑞1
2ℎ )𝛼
𝑓2
…
𝑓𝑛−2
𝑓𝑛−1−(𝑝𝑛−1
ℎ2 +𝑞𝑛−1
2ℎ )𝛽)
II Code Matlab
disp('>Problem 1<');
tt=[0.5 1 2 3 4 5 6 7 9]; %thiết lập các giá trị t
P=[6 4.4 3.2 2.7 2 1.9 1.7 1.4 1.1]; %thiết lập các giá trị p(t)
BPCTABCProjec1(P',tt') %gọi hàm BPCTABCProjec1 để tìm các
hệ số A, B, C
disp('>Problem 2<');
syms x khai báo biến x
f=1-exp(-x); thiết lập hàm f(x)
disp('[2.a]');b2a=double(int(f,0,4)); %tính giá trị tích phân bằng hàm int của matlab
fprintf('Integral of Matlab`s Function: %.4f\n',b2a);
%dùng công thức hình thang tính giá trị tích phân với đoạn chia là 1
b2b=c5trapez(f,0,4,1); %dùng phương pháp hình thang để tính tích phân của f với số đoạn chia là 1
disp('[2.b]');
fprintf('- Single application of the trapezoidal rule:
%.4f\n',b2b); %hiện giá trị tích phân từ công thức hình thang với n = 1
fprintf('- The true percent relative error based on (a):
%.4f\n',abs(b2b-b2a)*100/b2a); %hiện giá trị sai số so với giá trị chuẩn ở câu a
b2c1=c5trapez(f,0,4,2); %dùng công thức hình thang tính giá trị tích phân với đoạn chia là 2
disp('[2.c]');
fprintf('- Composite trapezoidal rule, with n = 2:
%.4f\n',b2c1); %hiện giá trị tích phân từ công thức hình thang với n = 2
Trang 9fprintf('- The true percent relative error based on (a):
%.4f\n',abs(b2c1-b2a)*100/b2a);
b2c2=c5trapez(f,0,4,4); %dùng công thức hình thang tính giá trị tích phân với đoạn chia là 4
disp('([2.c]');
fprintf('- Composite trapezoidal rule, with n = 4:
%.4f\n',b2c2); %hiện giá trị tích phân từ công thức hình thang với n = 4
fprintf('- The true percent relative error based on (a):
%.4f\n',abs(b2c2-b2a)*100/b2a); %hiện giá trị sai số so với giá trị chuẩn ở câu a
disp('[2.d]');
b2d=simpson1_3(f,0,4,1); %dùng công thức Simpson 1/3 tính giá trị tích phân với đoạn chia là 1
fprintf('- Single application of Simpson`s 1/3 rule:
%.4f\n',b2d); %hiện giá trị tích phân từ công thức
Simpson 1/3 với n = 1
fprintf('- The true percent relative error based on (a):
%.4f\n',abs(b2d-b2a)*100/b2a); %hiện giá trị sai số so với giá trị chuẩn ở câu a
disp('[2.e]');
b2e=simpson1_3(f,0,4,4); %dùng công thức Simpson 1/3 tính giá trị tích phân với đoạn chia là 4
fprintf('- Composite Simpson`s 1/3 rule, with n = 4:
%.4f\n',b2e); %hiện giá trị tích phân từ công thức
Simpson 1/3 với n = 4
fprintf('- The true percent relative error based on (a):
%.4f\n',abs(b2e-b2a)*100/b2a); %hiện giá trị sai số so với giá trị chuẩn ở câu a
disp('[2.f]');
b2f=simpson3_8(f,0,4,1); %dùng công thức Simpson 8/3 tính giá trị tích phân với đoạn chia là 1
fprintf('- Single application of Simpson`s 3/8 rule:
%.4f\n',b2f); %hiện giá trị tích phân từ công thức
Simpson 8/3 với n = 1
fprintf('- The true percent relative error based on (a):
%.4f\n',abs(b2f-b2a)*100/b2a); %hiện giá trị sai số so với giá trị chuẩn ở câu a
disp('[2.g]');
b2g=simpson1_3(f,0,4,5); %dùng công thức Simpson 1/3 tính giá trị tích phân với đoạn chia là 5
fprintf('- Composite Simpson`s 1/3 rule, with n = 5:
%.4f\n',b2g); %hiện giá trị tích phân từ công thức
Simpson 1/3 với n = 5
fprintf('- The true percent relative error based on (a):
%.4f\n',abs(b2g-b2a)*100/b2a); %hiện giá trị sai số so với giá trị chuẩn ở câu a
Trang 10disp('>Problem 3<');
disp('[a The shooting method]');
syms x
figure(2);
ShootingMethod(-25,x,0,10,40,200,2); %gọi hàm
ShootingMethod để tính toán
title('Probelem 3: The shooting method'); %đặt tiêu đề đồ thị
disp('[b The finite - difference method]');
figure(3);
SPHH(1,0,0,-25,2,0,10,40,200); %gọi hàm SPHH để tính toán title('Problem 3: The finite - difference method'); %đặt tiêu đề đồ thị
end
tìm các hệ số A, B, C
syms t x
pt=[exp(-1.5*tt) exp(-0.3*tt) exp(-0.05*tt)];
Y=pt\P;
YT=Y(1)*exp(-1.5*t) + Y(2)*exp(-0.3*t) +
Y(3)*exp(-0.05*t);
plot(tt,P);hold on
plot(tt,subs(YT,t,tt));xlabel('x');ylabel('y');
legend('Original data','The Least square data');
fprintf('A = %f, B = %f, C = %f\n',Y(1),Y(2),Y(3));
end
format short
syms t
h=(b-a)/n;
X=a;
y=0;
for i=1:n+1
if (i>1) && (i<n+1)
y=(y+h*subs(f,X));
X=X+h;
else
y=(y+0.5*h*subs(f,X));
X=X+h;
end
end
fprintf('integral of %s from %f to %f, with n = %f:
end
h=(b-a)/n;A=a;
y=subs(f,a)+subs(f,b);
Trang 11for i=1:n-1
A=A+h;
if rem(i,2)==0
B=2;
else B=4;
end
y=y+B*subs(f,A);
end
y=double(y*h/3);
fprintf('integral of %s from %f to %f, with n = %f:
end
syms x
h=(b-a)/n;k=h;h=h+a;
for i=1:n
y(i)=subs(f,x,h);
h=h+k;
end
Y=subs(f,a)+y(n);
for i=1:n-1
if rem(i,3)==0
B=2;
else B=3;
end
Y=Y+B*y(i);
end
Y=double(Y*k*3/8);
fprintf('integral of %s from %f to %f, with n = %f:
end
format short
syms x
k=x1;
n=(x2-x1)/h;
Y(1)=y0;X(1)=x1;
for i=1:n-1
t(i)=h+k;
k=t(i);
end
for i=2:n
X(i)=t(i-1);
X(n+1)=x2;
end
for i=1:n-1
for j=1:n-1
Trang 12if i==j
A(i,j)=double(subs(r,t(i))-2*subs(p,t(i))*(h^-2));
elseif i<j
if j>=i+2
A(i,j)=0;
else
A(i,j)=double((subs(p,t(i))*h^-2)+(subs(q,t(i))/(2*h)));
end
else if i>=j+2
A(i,j)=0;
else A(i,j)=double((subs(p,t(i))*h^-2)-(subs(q,t(i))/(2*h)));
end
end
end
if i==1
B(i)=double(subs(f,t(i))-(subs(p,t(i))/(h^2) - subs(q,t(i))/(2*h))*y0);
B(i)=double(subs(f,t(i))-(subs(p,t(i))/(h^2) + subs(q,t(i))/(2*h))*yn);
else
B(i)=double(subs(f,t(i)));
end
end
B=double(transpose(B));
y=double((A^-1)*B);
for i=2:n
Y(i)=y(i-1);
Y(n+1)=double(yn);
end
for i=1:size(Y,2)
fprintf('x=%0.5f - T = %0.5f\n',X(i),Y(i));
figure(3);
plot(X,Y);hold on
grid on
xlabel('x');ylabel('T');title('Problem 3');
end
end
syms y x
n=input('So lan muon du doan: ');
for i=1:n
fprintf('Lan thu %d\n',i);
z0=input('Gia tri x0= ');
Trang 13end
end
syms x y t
xa=x0;ya=y0;ta=t1;n=(t2-t1)/h;
hh=0;
XA=xa;YA=ya;TA=ta;
for i=1:n
k1x=h*subs(subs(subs(f,x,xa),y,ya),t,ta);
k1y=h*subs(subs(subs(g,x,xa),y,ya),t,ta);
k2x=h*subs(subs(subs(f,x,xa+0.5*k1x),y,ya+0.5*k1y),t,ta+0 5*h);
k2y=h*subs(subs(subs(g,x,xa+0.5*k1x),y,ya+0.5*k1y),t,ta+0 5*h);
k3x=h*subs(subs(subs(f,x,xa+0.5*k2x),y,ya+0.5*k2y),t,ta+0 5*h);
k3y=h*subs(subs(subs(g,x,xa+0.5*k2x),y,ya+0.5*k2y),t,ta+0 5*h);
k4x=h*subs(subs(subs(f,x,xa+k3x),y,ya+k3y),t,ta+h);
k4y=h*subs(subs(subs(g,x,xa+k3x),y,ya+k3y),t,ta+h);
xa=double(xa+(k1x+2*k2x+2*k3x+k4x)/6);
ya=ya+(k1y+2*k2y+2*k3y+k4y)/6;
XA=[XA xa];YA=[YA ya];
ta=ta+h;TA=[TA ta];
ya=double(ya);
hh=hh+h;
fprintf('k1x = %f, k1y = %f\nk2x = %f, k2y = %f\nk3x =
%f, k3y = %f\nk4x = %f, k4y =
fprintf('h=%f y=%f x=%f\n',hh,ya,xa);
end
S=sprintf('Data %d',c);
plot(TA,YA,'DisplayName',S);hold on
grid on
xlabel('x');ylabel('T');
legend show
end
III Kết quả
1 Problem 1
Trang 142 Problem 2
Trang 153 Problem 3
Trang 18TÀI LIỆU THAM KHẢO
1 Applied Numerical Methods with MATLAB for Engineers and Scientists by Stephen C Chapra Dr
2 Giáo trình Phương pháp tính (Đại học Bách Khoa – Đại học Quốc gia
TP.HCM)