r"""模板程序：定义在[-1,1]^2域内的二维函数的数值积分。

用于创新实验————数值积分的编程实现

- 张仪 @ DGMP
- www.mathischeap.com
"""
import numpy as np


def num_integration_2d_ref(int_func, N):
    r"""我们使用这个函数来计算定义在[-1, 1]^2内的函数在此区间上的积分值。

    Parameters
    ----------
    int_func :
        被积函数
    N :
        数值积分的阶数。

    Return
    ------
    int_value :
        积分值。
    """
    quad_nodes, quad_weights = np.polynomial.legendre.leggauss(N)
    # TODO: 补全此程序


def func1(xi, eta):
    r"""被积函数1。"""
    return np.sin(2 * np.pi * xi) * np.cos(2 * np.pi * eta) + 1


def func2(xi, eta):
    r"""被积函数2。"""
    # TODO: 补全此程序


def func3(xi, eta):
    r"""被积函数3。"""
    # TODO: 补全此程序


if __name__ == '__main__':
    N = 8
    int_value1 = num_integration_2d_ref(func1, N)
    int_value2 = num_integration_2d_ref(func2, N)
    int_value3 = num_integration_2d_ref(func3, N)

    print(int_value1, int_value2, int_value3)
