Cho giới hạn dưới của biến x, giới hạn trên của biến x, giới hạn dưới của biến y, giới hạn trên của biến y, bước nhảy cho x và bước nhảy cho y. Nhiệm vụ là tính tích phân kép và hiển thị kết quả.
Ví dụ
Đầu vào: bước x = 1.2, bước y = 0.54, giới hạn dưới x = 1.3, giới hạn trên x = 2.1, giới hạn dưới y = 1.0, giới hạn trên y = 2.1 Đầu ra: tích phân kép là: 2.1
Phương pháp sử dụng:
- Nhập giá trị giới hạn trên và dưới của x, y cùng với bước nhảy
- Phương pháp sử dụng để tính tích phân kép cho cả x và y là phương pháp Simpson 1/3
- Tạo bảng sau trước khi tiến hành

- Áp dụng quy tắc Simpson 1/3 cho từng hàng cho tích phân đầu tiên và lặp lại 2 lần cho tích phân kép
- In kết quả
THUẬT TOÁN
BẮT ĐẦU
Bước 1 → Khai báo hàm tính lũy thừa cho tích phân
float fun(float x, float y)
TRẢ VỀ pow(pow(x, 4) + pow(y, 5), 0.5)
Bước 2 → Khai báo hàm tìm giá trị tích phân kép
float doubleIntegral(float step_x, float step_y, float lower_x, float upper_x, float lower_y, float upper_y)
Khai báo int n1, n2
Khai báo float arr[50][50], arr_2[50], result
Gán n1 = (upper_x - lower_x) / step_x + 1
Gán n2 = (upper_y - lower_y) / step_y + 1
VỒNG LẶP i = 0 đến n1-1
VỒNG LẶP j = 0 đến n2-1
Gán arr[i][j] = fun(lower_x + i * step_x, lower_y + j * step_y)
KẾT THÚC
KẾT THÚC
VỒNG LẶP i = 0 đến n1-1
Gán arr_2[i] = 0
VỒNG LẶP j = 0 đến n2-1
NẾU (j == 0 || j == n2 - 1)
Gán arr_2[i] += arr[i][j]
KẾT THÚC
NGƯỢC LẠI NẾU (j % 2 == 0)
Gán arr_2[i] += 2 * arr[i][j]
KẾT THÚC
NGƯỢC LẠI
Gán arr_2[i] += 4 * arr[i][j]
KẾT THÚC
KẾT THÚC
Gán arr_2[i] *= (step_y / 3)
KẾT THÚC
Gán result = 0
VỒNG LẶP i = 0 đến n1-1
NẾU (i == 0 || i == n1 - 1)
Gán result += arr_2[i]
KẾT THÚC
NGƯỢC LẠI NẾU (i % 2 == 0)
Gán result += 2 * arr_2[i]
KẾT THÚC
NGƯỢC LẠI
Gán result += 4 * arr_2[i]
KẾT THÚC
Gán result *= (step_x / 3)
KẾT THÚC
TRẢ VỀ result
Bước 3 → Trong main()
Khai báo step_x = 1.2, step_y = 0.54
Khai báo lower_x = 1.3, upper_x = 2.1
Khai báo lower_y = 1.0, upper_y = 2.1
Gọi doubleIntegral(step_x, step_y, lower_x, upper_x, lower_y, upper_y)
DỪNG
Ví dụ mã nguồn
#include <bits/stdc++.h>
using namespace std;
float fun(float x, float y) {
return pow(pow(x, 4) + pow(y, 5), 0.5);
}
// Hàm tìm giá trị tích phân kép
float doubleIntegral(float step_x, float step_y, float lower_x, float upper_x, float lower_y, float upper_y) {
int n1, n2;
float arr[50][50], arr_2[50], result;
n1 = (upper_x - lower_x) / step_x + 1;
n2 = (upper_y - lower_y) / step_y + 1;
for (int i = 0; i < n1; ++i) {
for (int j = 0; j < n2; ++j) {
arr[i][j] = fun(lower_x + i * step_x, lower_y + j * step_y);
}
}
for (int i = 0; i < n1; ++i) {
arr_2[i] = 0;
for (int j = 0; j < n2; ++j) {
if (j == 0 || j == n2 - 1)
arr_2[i] += arr[i][j];
else if (j % 2 == 0)
arr_2[i] += 2 * arr[i][j];
else
arr_2[i] += 4 * arr[i][j];
}
arr_2[i] *= (step_y / 3);
}
result = 0;
for (int i = 0; i < n1; ++i) {
if (i == 0 || i == n1 - 1)
result += arr_2[i];
else if (i % 2 == 0)
result += 2 * arr_2[i];
else
result += 4 * arr_2[i];
}
result *= (step_x / 3);
return result;
}
int main() {
float step_x = 1.2; // bước cho x
float step_y = 0.54; // bước cho y
float lower_x = 1.3; // giới hạn dưới x
float upper_x = 2.1; // giới hạn trên x
float lower_y = 1.0; // giới hạn dưới y
float upper_y = 2.1; // giới hạn trên y
cout << "double integration is: " << doubleIntegral(step_x, step_y, lower_x, upper_x, lower_y, upper_y);
return 0;
}
Kết quả đầu ra
double integration is: 2.1