r"""模板程序：定义在[-1,1]区间上的一维函数的数值积分。

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

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


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

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

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


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


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


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


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

    print(int_value1, int_value2, int_value3)
