Домашнее задание#

Задание 1. Двухточечная квадратура Гаусса.#

Постройте квадратурную формулу Гаусса, интегрирующую точно многочлены степеней вплоть до третьей на интервале \([a, b]\). Заметим, что для этого достаточно построить двухточечную квадратуру.

Напишите функцию, которая возвращает веса, \(w_1\) и \(w_2\), и узлы, \(x_1\) и \(x_2\), двухточечной квадратурной формулы Гаусса с весовой функцией \(w(x) = 1\), т.е., интегралы вида

\[ \int_a^b\! f(x)\, dx \approx w_1 f(x_1) + w_2 f(x_2) \]
def gauss_2(a, b):
    r"""Return nodes and weights for a two-point Gauss quadrature on [a, b].
    
    Parameters
    ----------
    a, b : float
       Boundaries of the integration interval
       
    Returns
    -------
    x1, x2, w1, w2 : float
       Nodes and weights of the quadrature.
    """
    # YOUR CODE HERE
    raise NotImplementedError()
from numpy.testing import assert_allclose

x1, x2, w1, w2 = gauss_2(0, 1)

def f(x, n): 
    return x**n

for n in [0, 1, 2, 3]:
    assert_allclose(w1*f(x1, n=n) + w2*f(x2, n=n),
                    1./(n+1), atol=1e-14)
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
Cell In [2], line 3
      1 from numpy.testing import assert_allclose
----> 3 x1, x2, w1, w2 = gauss_2(0, 1)
      5 def f(x, n): 
      6     return x**n

Cell In [1], line 15, in gauss_2(a, b)
      2 r"""Return nodes and weights for a two-point Gauss quadrature on [a, b].
      3 
      4 Parameters
   (...)
     12    Nodes and weights of the quadrature.
     13 """
     14 # YOUR CODE HERE
---> 15 raise NotImplementedError()

NotImplementedError: 

Задание 2. Вычитание интегрируемых сингулярностей.#

Вычислите определённый интеграл методом трапеций с вычитанием сингулярности

\[ I = \int_{0}^{1}\frac{e^x}{\sqrt{x(1-x)}}dx. \]

Вам могут пригодиться значения следующих определенных интегралов:

\[ \int_0^1 \frac{1}{\sqrt{x (1-x)}} \, dx=\pi,\quad \int_0^1 \frac{x}{\sqrt{x (1-x)}} \, dx=\pi/2. \]

Преобразуйте данный интеграл, вычитая сингулярности. Выпишите расчетные формулы. Cоставьте функцию, возвращающую значение интеграла методом трапеций.

def integ(npts=10):
    """Compute the value of the integral above.
    
    Subtract the singularities and use the trapezoid rule. 
    
    Parameters
    ----------
    npts : int
        The number of points for the trapezoid rule
        
    Returns
    -------
    I : float
       The computed value of the integral
    """
    # YOUR CODE HERE
    raise NotImplementedError()

Задание 3*. Интеграл от осциллирующей функции.#

Рассмотрим определенный интеграл

\[ I = \int_0^\infty\! \frac{\sin(x) \cos{(\cos{(x)})}}{x}\,dx \]

Вычислите значение данного интеграла с относительной точностью \(10^{-6}\). Для упрощения задачи можете воспользоваться функционалом scipy.integrate.quad.

Заметим, что «из коробки» интеграл вычислить не удается, и нужно что-то придумать. И даже wolfram тут даёт неправильный ответ.

from math import sin, cos

from scipy.integrate import quad
quad(lambda x: sin(x) * cos(cos(x)) / x, 0, float('inf'))

Задание 4. Вычисление интеграла с внутренней особенностью.#

Найти \(\delta_{1}\) и \(\delta_{2}\) такие, чтобы при вычислении интеграла

\[ J=\int_{-0,5}^{0,5}|x|^{-\frac{1}{2}} \cdot(1-x)^{-\frac{1}{2}} d x \]

модуль \(|\rho|<\varepsilon\), где \(\varepsilon-\) требуемая точность расчетов.

Задание 5. Интеграл от быстроосциллирующей функции.#

Вычислите интеграл от быстроосциллирующей функции $\( \int_{0}^{\pi} \mathrm{e}^{-x} \sin k x d x \)\( для различных значений \)k\( по методу Симпсона, а затем используя прием, описанный ранее, заменяя функцию \)\mathrm{e}^{-x}$ ее интерполяционным полиномом второй степени (третьей степени). Совпадает-ли точность расчетов с ожидаемой? Сравните с точным значением интеграла, который равен

\[ \int_{0}^{\pi} \mathrm{e}^{-x} \sin k x d x=\frac{k}{1+k^{2}}-\frac{\mathrm{e}^{-\pi}(k \cos k \pi+\sin k \pi)}{1+k^{2}} \]

Задание 6*. Интегрирование с помощью ортогональных полиномов.#

Вычислите значение следующего интеграла:

\[ \int_{0}^{2 \pi} \frac{\cos (x) d x}{\sqrt{4 \pi^{2}-x^{2}}} \]

используя соответствующий базис ортогональных полиномов. Найдите степень полинома (количество узлов), при которой точность превысит ошибку плавающей точки. Можете пользоваться вольфрамом или sympy.