Плохой интеграл¶
Интеграл \(\int_0^\infty \frac{sin(x)}{\sqrt{x}}dx\) можно вычислить аналитически и он равен равен \(\sqrt{ \frac{\pi}{2} }\). На сколько точно можно найти подобные интегралы численно?
Задания¶
- Напишите функцию вычисляющую определенный интеграл. Предусмотрите входные параметры, изменяющие точность разбиения \(dx\) и верхний предел интегрирования \(b\).
- Проверьте работу алгоритма интегрирования для нескольких известных функций.
- Изменяя параметры, определяющие точность, постарайтесь найти интеграла из задания.
- Какую точность вам удалось получить?
- Повторяя вычисления для разных параметров и фиксируйте время выполнения программы и точность вычислений.
- Оцените время, которое потребуется для вычисления требуемого интеграла с точностью \(10^{-6}\).
Подсказки¶
Фрагмент кода может выглядеть так
def integrate(fun,a=0.,b=1.,N=100,dx=0.): """ функция вычисления интеграла от 'fun' в пределах от 'a' до 'b' методом Симпсона dx - величина шага (если 0, то берем число точек разбиения - 'N') """ if dx > 0: # N = int((b-a)/dx) # число интервалов разбиения if N%2 <>0: N+=1 # N должно быть четным dx = (b-a)/N cf = 0 sum = - fun(a) - fun(b) # коррекция первого и последнего коэфф. for i in xrange(N+1): if cf == 2: # чередование коэффициентов cf = 4 else: cf = 2 sum += fun(a+dx*i)*cf # суммирование sum *= dx/3 # коэффициент return sum
Выбирите шаг интегрирования \(\pi/(2k)\) (\(k\) - натуральное), и верхний предел пропорциональным \(2\pi\).
Проанализируйте зависимость полученного значения от \(1/b\) (постройте график)
Проанализируйте зависимость полученного значения от \(dx\) (постройте график)
Уточните решение используя результаты проведенного анализа