Участник:Gukov/Песочница

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Числовой пример)
(Числовой пример)
Строка 97: Строка 97:
[[Изображение:Result.png|thumb|300px]]
[[Изображение:Result.png|thumb|300px]]
В нижеследующей таблице представлены результаты работы программы:
В нижеследующей таблице представлены результаты работы программы:
-
{|border = '1'
+
{|class="standard"
-
|r
+
!r
-
|Исходная формула
+
!Исходная формула
-
|1 раз
+
!Экстраполированная формула
-
|3 раза
+
!Точное значение
 +
!Погрешность вычислений
 +
!Погрешность формулы
|-
|-
-
|2
+
!2
-
|1.609438
+
|3.98277278
-
|2.925492
+
|4.04665506
-
|3.92582
+
|4.04718956
 +
|0.0005345
 +
|0.00275556
|-
|-
-
|4
+
!4
-
|2.256648
+
|4.03068449
-
|3.506035
+
|4.04714980
-
|3.987405
+
|4.04718956
 +
|0.00003976
 +
|0.00017222
|-
|-
-
|8
+
!8
-
|3.278646
+
|4.04303347
-
|3.778845
+
|4.04718692
-
|4.017368
+
|4.04718956
 +
|0.00000264
 +
|0.00001076
|-
|-
-
|16
+
!16
-
|3.653497
+
|4.04614856
-
|3.913012
+
|4.04718939
-
|4.032286
+
|4.04718956
 +
|0.00000017
 +
|0.00000067
|-
|-
-
|32
+
!32
-
|3.848134
+
|4.04692918
-
|3.980123
+
|4.04718955
-
|4.039738
+
|4.04718956
 +
|0.00000001
 +
|0.00000004
|-
|-
-
|64
+
!64
-
|3.947125
+
|4.04712446
-
|4.013659
+
|4.04718956
-
|4.043464
+
|4.04718956
 +
|0
 +
|0
|-
|-
-
|128
+
!20384
-
|3.997025
+
|4.04718956
-
|4.030424
+
-
|4.045327
+
-
|-
+
-
|256
+
-
|4.022075
+
-
|4.03880706
+
|
|
-
|-
 
-
|512
 
-
|4.034624
 
-
|4.042998
 
|
|
-
|-
 
-
|1024
 
-
|4.040904
 
|
|
|
|
-
|}
+
|}
Здесь <tex>r</tex> - число отрезков, на которые разбивается сегмент <tex>[1, 5]</tex>.
Здесь <tex>r</tex> - число отрезков, на которые разбивается сегмент <tex>[1, 5]</tex>.

Версия 08:24, 20 октября 2008

Содержание

Введение

Постановка математической задачи

Задача численного интегрирования состоит в приближенном нахождении значения интеграла

( 1)
I = \int\limits_a^b f(x)\,dx,

где 
f(x) 
- заданная и интегрируемая на   [a, b] функция. В качестве приближенного значения рассматривается число

( 2)
I_n=\sum_{i=0}^n c_k f(x_k),

где c_k - числовые коэффициенты и x_k - точки отрезка [a,b],  k = 0, 1, \ldots, n . Приближенное равенство

\int\limits_a^b f(x)\,dx=\sum_{k=0}^n c_k f(x_k)

называется квадратурной формулой, а сумма вида (2) - квадартурной суммой. Точки x_i называются узлами квадратурной формулы. Разность

\Psi _n = \int\limits_a^b f(x)\,dx-\sum_{k=0}^n c_k f(x_k)

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

Изложение метода

Общие сведения

Предположим, что для вычисления интеграла (1) отрезок [a, b] разбит на N равных отрезков длины h = \frac{b-a}N и на каждом частичном отрезке применяется одна и та жа квадратурная формула. Тогда исходный интеграл I заменяется некоторой квадратурной суммой I_h, причем возникающая погрешность зависит от шага сетки h. Для некоторых квадратурных формул удается получить разложение погрешности I_h - I по степеням h. Предположим, что для данной квадратурной суммы I_h существует разложение:

( 3)
I_h = I_0 + a_1 h^{\alpha _1} + a_2 h^{\alpha _2} + \ldots + a_m h^{\alpha _m} + O(h^{\alpha _{m+1}}),

где 0 < \alpha _1 < \alpha _2 < \ldots < \alpha _m < \alpha _{m+1} и коэффициенты \{ a_i \} \subset \mathbb{R} не зависят от h. При этом величины \{ \alpha _i \} \subset \mathbb{R} предполагаются известными. Теперь предположим:

I(\frac{h}{r}) = I_0 + a_1\,\frac{h^{\alpha _1}}{r^{\alpha 1}} + a_2\,\frac{h^{\alpha _2}}{r^{\alpha 2}} + \ldots

Чтобы избавиться от степени h^{\alpha _1}, составляющей ошибку (ибо среди всех слагаемых, составляющих ошибку, слагамое при h^{\alpha _1} является наибольшим) вычислим величину r^{\alpha _1}\,I(\frac{h}r) - I(h). Имеем:

r^{\alpha _1}\,I(\frac{h}{r}) - I(h) = r^{\alpha _1}\,I_0 - I_0 + \fbox{a_1 h^{\alpha _1} - a_1 h^{\alpha _1}} + a_2\,\frac{h^{\alpha _2}}{r^{\alpha _2 - \alpha _1}} - a_2 h^{\alpha _2} + \ldots

Отсюда

I_1(h) = \frac{r^{\alpha _1}I(\frac{h}r) - I(h)}{r^{\alpha _1} - 1} = I_0 + \underbrace{a_2\,\frac{r^{\alpha _1 - \alpha _2} - 1}{r^{\alpha _1} - 1}}_{a_2 '}\,h^{\alpha _2} + \ldots

то есть имеем более точное приближение к интегралу I.

Таким образом, рекуррентную формулу можно записать в виде:

( 4)
I_{i+1}(h) = I_i(\frac{h}r) + \frac{I_i(\frac{h}r) - I_i(h)}{r^{\alpha _1} - 1}

Заметим, что r - величина, на которую мы делим размер шага при каждом новом вычислении I. Разумно положить s = 2, т.к. большие значения s могут вызвать резкое увеличение количества вычислений.

Для наглядности представим процесс экстраполирования следующей таблицей:


\line(1, 0){200}

I_0^{0}(h)
I_0^{1}(\frac{h}r) I_1^{0}(h)
I_0^{2}(\frac{h}{r^2}) I_1^{1}(\frac{h}r) I_2^{0}(h)
\vdots \vdots \vdots \ddots

\line(1,0){200}

О сходимости

Числовой пример

Найдем с помощью квадратурной формулы трапеций приближенное значение интеграла, применив экстраполяцию Ричардсона (данный метод называется методом Ромберга):

\int^{5}_{1} \ln x\, dx = x \ln x - x |_1^{5} = 5\ln 5 - 4

В нижеследующей таблице представлены результаты работы программы:

r Исходная формула Экстраполированная формула Точное значение Погрешность вычислений Погрешность формулы
2 3.98277278 4.04665506 4.04718956 0.0005345 0.00275556
4 4.03068449 4.04714980 4.04718956 0.00003976 0.00017222
8 4.04303347 4.04718692 4.04718956 0.00000264 0.00001076
16 4.04614856 4.04718939 4.04718956 0.00000017 0.00000067
32 4.04692918 4.04718955 4.04718956 0.00000001 0.00000004
64 4.04712446 4.04718956 4.04718956 0 0
20384 4.04718956

Здесь r - число отрезков, на которые разбивается сегмент [1, 5].

На иллюстрации черная сплошная линия - вычисление значения интеграла по исходной формуле, зеленая пунктирная - по экстраполированной 1 раз формуле, красная пунктирная - по экстраполированной 3 раза формуле.

Как мы видим, разница между экстраполированными и неэкстраполированными результатами значительна.

Рекомендации программисту

Заключение

Список литературы

Личные инструменты