7 1 Hàm với dữ kiện đề bài dạng phương trình.. 7 2 Hàm với dữ kiện đề bài dạng bảng số liệu.. 9 1 Hàm với dữ kiện đề bài dạng phương trình.. 9 2 Hàm với dữ kiện đề bài dạng bảng số liệu.
Trang 1Trường đại học Bách Khoa
Đề tài: 11
Trang 3Mục lục
Danh sách thành viên: 2
Mục lục 3
A Lý thuyết 4
I Quy tắc Hình thang (Trapezoidal) 4
II Phương pháp Simpson 4
III Phương pháp Simpson 3/8: 5
B Xây dựng thuật toán 7
I Phương pháp hình thang (Trapezoidal) 7
1) Hàm với dữ kiện đề bài dạng phương trình 7
2) Hàm với dữ kiện đề bài dạng bảng số liệu 7
II Phương pháp Simpson 9
1) Hàm với dữ kiện đề bài dạng phương trình 9
2) Hàm với dữ kiện đề bài dạng bảng số liệu 11
III Hàm tìm 𝑴𝒏 14
C Giải bài toán 16
Dữ kiện đề bài áp dụng cho câu 24.1, 24.2, 24.3: 16
Câu 24.1: 16
Câu 24.2: 17
Câu 24.3: 18
Dữ kiện dùng cho câu 24.4 và 24.5: 19
Câu 24.4: 19
Câu 24.5: 20
Trang 4A Lý thuyết
Mục đích của đề tài là tính xấp xỉ tích phân của một hàm cho trước dưới dạng phương trình hoặc bảng số liệu bằng phương pháp hình thang (Trapezoidal) và phương pháp Simpson
Xét hàm f(x) trên miền [a,b], đoạn [a, b] được chia thành n khoảng con có độ dài bằng nhau và bằng h = Δx = b−a
n Điểm trong khoảng chia này sẽ là a, a + Δx, a + 2Δx, , a + (n-2) Δx, a + (n-1)Δx,
b
I Quy tắc Hình thang (Trapezoidal)
Δx chính là chiều cao hình thang, xi = a + iΔx, i = 0, 1, 2, , n
Thay diện tích hình thang cong bằng diện tích hình thang thẳng ta được
2n (y0 +2y1 + +2yn-1 + yn) = Δx (y0 +yn
2 + y1 + + yn-1)
Công thức sai số: r = h2.(b−a).M2
12
II Phương pháp Simpson
Đặt h=Δx Trên mỗi đoạn [xi, x2(i+1)] thay hàm f(x) bởi công thức nội suy bậc hai
và diện tích hình thang cong giới hạn bởi ham f(x) bởi diện tích hình thang cong giới hạn bởi parabol nội suy
Trang 5III Phương pháp Simpson 3/8:
Xét hàm số f(x) trên miền [a,b], chia đoạn [a,b] thì tích phân miền giới hạn bởi
đồ thị hàm f(x) và 3 đường thẳng y = 0, x = a, x = b là
Trang 6Biểu thức trên được miêu tả cho phương pháp Simpson 3/8
Để bài toán được tổng quát hơn, ta quay lại chia đoạn [a,b] thành n khoảng con như đầu bài Ta có n+1 giá trị xi với i = 0,1,2, n
Xét trên miền [a,b) với các giá trị i chia hết 3, ta có:
x0 = a, ta có tổng A0 = f(x0) + 3f(x0 + h) + 3f(x0 + 2h) + f(x0 + 3h)
x3 = x0 + 3h, ta có tổng A1 = f(x3) + 3f(x3 + h) + 3f(x3 + 2h) + f(x3 + 3h)
x6 = x3 + 3h, ta có tổng A1 = f(x6) + 3f(x6 + h) + 3f(x6 + 2h) + f(x6 + 3h)
(với k nguyên nếu xi + k.h > b thì f(xi + k.h) = 0)
Tích phân trên đoạn [a,b] của f(x) sẽ có giá trị là
∫ f(x)dxab ≈ 3(b−a)
8 (f(b) + A0 + A1 + A2 + A3 + + Am)
= (b−a)
8 (f(x0) + f(xn) + 3V + 2U) Trong đó:
m là phần nguyên của phép tính n
3
V là tổng các giá trị f(xi) với i không chia hết cho 3, i ≠ b
U là tổng các giá trị f(xi) với i chia hết 3, i ≠ 0, i ≠ b
Công thức sai số: 𝑟 = ℎ4.(𝑏−𝑎).𝑀4
80
Trang 7B Xây dựng thuật toán
Vì các bài toán cho dữ kiện ở 2 dạng là phương trình và bảng số liệu, nên ta sẽ xây dựng 2 hàm tương ứng với mỗi phương pháp để giải 2 dạng dữ kiện
I Phương pháp hình thang (Trapezoidal)
1) Hàm với dữ kiện đề bài dạng phương trình
Hàm được đặt tên là trapez, với 4 đối số là f, a, b, n
Trong đó: f là phương trình từ dữ liện đề bài
a, b lần lượt là cận trên và cận dưới của đoạn cần lấy tích phân
n là số đoạn chia
Phần đầu của hàm là phần kiểm tra đối số để đảm bảo rằng đối số được đưa vào
là đúng Nếu đối số sai, hàm sẽ báo lỗi Điều kiện của đối số: n>1 và a<b
Tiếp theo, dựa vào công thức của phương pháp hình thang, ta xây dựng vòng lập
để hình thành công thức có thể sử dụng với mọi trường hợp có đối số đúng điều kiện và trả về giá trị xấp xỉ của tích phân
Code:
function [I] = trapez(f, a, b, n)
%Kiểm tra đối số
2) Hàm với dữ kiện đề bài dạng bảng số liệu
Hàm được đặt tên là trapez_table, với 2 đối số là x, y với y là giá trị của hàm dưới dấu tích phân tại vị trí x tương ứng
Trang 8Phần đầu của hàm là phần kiểm tra đối số để đảm bảo rằng đối số được đưa vào
là đúng Nếu đối số sai, hàm sẽ báo lỗi Điều kiện của đối số: x, y là dữ liệu ở dạng ma trận và kích thước ma trận x bằng kích thước ma trận y
Ở phần xây dựng công thức, vì công thức chỉ áp dụng trên những khoảng có kích thước bằng nhau, nhưng trong thực tế, dữ liệu có thể có nhiều khoảng với kích thước khác nhau Để khắc phục trường hợp này, chúng em đã xây dựng một thuật toán để chia bảng dữ liệu ban đầu thành những bảng dữ liệu nhỏ hơn sao cho trong mỗi bản dữ liệu nhỏ các khoảng là bằng nhau
Cuối cùng là tạo vòng lập để xây dụng công thức hình thang Áp dụng công thức hình thang lên từng bảng dữ liệu nhỏ Tính tổng kết quả từ các bảng dữ liệu nhỏ
để được giá trị xấp xỉ của tích phân cần tìm và trả về giá trị đó
Code:
function [I] = trapez_table(x, y)
%Kiểm tra đối số
I1(i) = (y(pst(i)) + y(pst(i + 1)))/2;
for j = (pst(i) + 1):(pst(i+1) - 1)
Trang 9I1(i) = I1(i) + y(j);
II Phương pháp Simpson
Phương pháp Simpson bao gồm 2 loại là Simpson 1/3 và Simpson 3/8 Simpson 1/3 được áp dụng đối với dữ liệu có số khoảng là số chẵn (2n), Simpson 3/8 được
áp dụng đối với dữ liệu có số khoảng là 3n Bằng việc phối hợp 2 phương pháp này, ta có thể giải mọi bài toán với số khoảng lớn hơn 1
Ta sẽ ưu tiên sử dụng công thức Simpson 1/3 nhiều hơn, vì Simpson 1/3 có công thức sai số là ℎ
4 (𝑏−𝑎).𝑀4
180 , Simpson 3/8 có công thức sai số là ℎ
4 (𝑏−𝑎).𝑀4
80 , nếu xét cùng phương trình dưới dấu tích phân, cùng đoạn [a, b], thì Simpson 1/3 có sai
số nhỏ hơn
1) Hàm với dữ kiện đề bài dạng phương trình
Hàm được đặt tên là simpson được lưu trong M-file tên simpson, với 4 đối số là
f, a, b, n
Trong đó: f là phương trình từ dữ liện đề bài
a, b lần lượt là cận trên và cận dưới của đoạn cần lấy tích phân
n là số đoạn chia
Trong M-file tên simpson, ta tạo thêm hàm tên simpson13() để xây dựng công thức Simpson 1/3 và hàm simpson38() để xây dựng công thức Simpson 3/8 với 4 đối số giống như trên Việc này giúp rút ngặn thời gian và đơn giản hóa việc viết code
Trong hàm simpson, phần đầu là đoạn code kiểm tra đối số, điều kiện của đối số là: n>1 và a>b
Để có thể sử dụng hợp lý công thức Simpson 1/3 và Simpson 3/8, chúng em chia trường hợp theo đối số n như sau:
Trang 10n = 3: dùng công thức Simpson 3/8
n chia hết cho 2: dùng công thức Simpson 1/3
n không chia hết cho 2: tách n = 2m+3, áp dụng công thức Simpson 1/3 cho 2m khoảng đầu, áp dụng công thức Simpson 3/8 cho 3 khoảng cuối
Ở đây ta thấy trong trường hợp n không chia hết cho 2 đã bao gồm luôn cả trường hợp n = 3, nhưng ta vẫn xét riêng trường hợp n = 3 là vì ở dòng code thứ 23 (dòng được đánh dấu (*) bên dưới), tại trường hợp n = 3 thì biến n1 = 0, lúc này hàm simpson13() tại dòng code đó sẽ trở thành simpson13(f, a, a, n1*2), hàm này sẽ
bị lỗi do đối số thứ 2 phải nhỏ hơn đối số thứ 3 (tức a < b)
Sau quá trình tính toán thì hàm sẽ trả về giá trị xấp xỉ của tích phân cần tìm
Code:
function [I] = simpson(f, a, b, n)
%Kiểm tra đối số
%Xây dựng công thức Simpson 1/3
function [I] = simpson13(f, a, b, n)
f = inline(f);
Trang 11%Xây dựng công thức Simpson 3/8
function [I] = simpson38(f, a, b, n)
2) Hàm với dữ kiện đề bài dạng bảng số liệu
Hàm được đặt tên là simpson_table, với 2 đối số là x, y với y là giá trị của hàm dưới dấu tích phân tại vị trí x tương ứng
Trong M-file tên simpson_table, ta tạo thêm hàm tên simpson13() để xây dựng công thức Simpson 1/3 và hàm simpson38() để xây dựng công thức Simpson 3/8 với 2 đối số giống như trên
Ta kiểm tra đối số với các điều kiện: x, y là 2 ma trận có kích thước bằng nhau
và có số phần tử lớn hơn 2 (tức là số khoảng lớn hơn 1)
Vì bảng số liệu nhập vào có thể có các khoảng với kích thước không bằng nhau, nên ta lại sử dụng thuật toán chia lại bảng số liệu như đối với hàm trapez_table() bên trên
Sau đó, ta phải kiểm tra lại các bảng số liệu mới xem có bảng nào có số phần tử bằng 2 (thức số khoảng bằng 1 không), nếu có thì hàm sẽ báo lỗi
Kế tiếp ta xét từng bảng số liệu và chia trường hợp dựa trên số khoảng như hàm simpson() phía trên
Trang 12Cuối cùng ta tính tổng các giá trị xấp xỉ của tích phân vá trả về giá trị cuối cùng
Code:
function [I] = simpson_table(x, y)
%Kiểm tra đối số
else
if mod(pst(i+1) - pst(i), 2) == 0
I1(i) = simpson13(x(pst(i):pst(i+1)), y(pst(i):pst(i+1)));
Trang 13%Xây dựng công thức Simpson 1/3
function [I] = simpson13(x, y)
%Xây dựng công thức Simpson 3/8
function [I] = simpson38(x, y)
Trang 14Phần đầu của hàm ta sẽ kiểm tra đối số với các điều kiện: n>0 và a<b
Sau đó ta sẽ tính đạo hàm tới cấp n của hàm f(x)
Tiếp theo ta tìm cực trị địa phương của 𝑓(𝑛)(𝑥) qua các bước:
Tính đạo hàm, cho đạo hàm bằng 0 và giải phương trình tìm nghiệm
Kiểm tra xem nghiệm có thuộc đoạn [a, b] không
Tìm giá trị lớn nhất của tụi tuyệt đối 𝑓(𝑛)(𝑥) tại cái điểm a, b, và các nghiệm đã kiểm tra ở bước trên
Ở đây ta phải xét riêng trường hợp 𝑓(𝑛)(𝑥) không phụ thuộc vào x, tức đạo hàm của 𝑓(𝑛)(𝑥) bằng 0, vì ở dòng code thứ 21, hàm solve() sẽ bị lỗi nếu như đối số thứ nhất không phải là phương trình
Trang 16C Giải bài toán
Dữ kiện đề bài áp dụng cho câu 24.1, 24.2, 24.3:
Từ dữ kiện đề bài cho, ta sẽ tính được số đoạn chia n, từ đó sử dụng hàm trapez()
và simpson() đã tạo để tính ra kết quả
Trang 17Từ số đoạn chia n vừa tính được, ta sẽ sử dụng hàm trapez() và simpson() đã tạo
Trang 1833
=> Đối với câu 24.1, dùng phương pháp Simpson hiệu quả hơn
Trang 19Về mặt vật lý:
∆𝐻 là nhiệt lượng của một mẫu vật liệu thu vào hay tỏa ra khi nhiệt độ thay đổi Với mẫu vật liệu ở câu 24.1, nó đã nhận nhiệt lượng 38892 (cal) khi nhiệt độ tăng từ -150°C lên 100°C
Dữ kiện dùng cho câu 24.4 và 24.5:
Trang 20Kết quả thu được từ Matlab:
Trang 21M = simpson_table(t5, f5);
disp(M);
Kết quả thu được từ Matlab: