Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ tính tích phân kép (Double Integration)

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

Chương trình C++ tính tích phân kép (Double Integration)

  • Á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