2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Условие остановки метода Симпсона
Сообщение09.11.2009, 00:59 
Здравствуйте.

Я пишу программу, в которой необходимо интегрирование. Я решил использовать метод Симпсона. Взять четвертую( или третью, если нет четвертой) производную от подынтегральной функции не представляется возможным. Поэтому нужен другой способ проверки точности приближения. В одном из источников нашел следующий метод: если $|I(h) - I(h/2)| < 15*eps/16$, где $I(h) $ - это приближенное значение интеграла, вычисленного с использованием шага h, то шаг h подходит. В противном случае уменьшаем шаг вдвое... Это назвали методом Рунге. В моем случае, такой способ вызывает переполнение памяти. Есть ли еще способ?

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 01:11 
Sayid в сообщении #259916 писал(а):
В моем случае, такой способ вызывает переполнение памяти.
Извините, это как?
Что в методе Симпсона может вызывать переполнение памяти? Там же динамической памяти вообще не надо, насколько я помню.
Вы на каком языке пишите?

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 01:28 
Как это ни странно, я пишу на Java. В этом языке вообще переполнение памяти редкость =). Оно вызвано следующим - отрезок разбивается на такое большое число узлов (порядка 300 000), что размер "динамического массива" для значений функции в этих узлах превышает всякие допустимые размеры (собственно он, конечно, имеет такой же размер, но вот тип long очень тяжеловесен).

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 01:32 
Аватара пользователя
Sayid в сообщении #259926 писал(а):
Как это ни странно, я пишу на Java. В этом языке вообще переполнение памяти редкость =). Оно вызвано следующим - отрезок разбивается на такое большое число узлов (порядка 300 000), что размер "динамического массива" для значений функции в этих узлах превышает всякие допустимые размеры (собственно он, конечно, имеет такой же размер, но вот тип long очень тяжеловесен).

Зачем нужен этот массив?
Сумму с вдвое меньшим шагом можно пересчитывать из исходной суммы, используя O(1) памяти, вычисляя эти значения "на лету".

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 01:37 
хорошо, Вы не могли сказать, как это сделать?

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 01:37 
Xaositect в сообщении #259929 писал(а):
Сумму с вдвое меньшим шагом можно пересчитывать из исходной суммы, используя O(1) памяти, вычисляя эти значения "на лету".
И исходную сумму можно считать, используя O(1) памяти, вычисляя значения интегрируемой функции на лету.
Или там специфика подинтегральной функцией какая-то?

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 01:38 
Аватара пользователя
Это будет выглядеть примерно так:
$S = f(x_0) + 4S_{odd} + 2S_{even} + f(x_N)$ - это формула Симпсона
$S_{odd,\frac{h}{2}}$ вычисляем как $\sum_{i=0}^{N-1} f(x_{2*i+1})$ циклом.
а $S_{even,\frac{h}{2}} = S_{odd,h} + S_{even, h}$

-- Пн ноя 09, 2009 01:39:03 --

Maslov в сообщении #259931 писал(а):
И исходную сумму можно считать, используя O(1) памяти, вычисляя значения интегрируемой функции на лету.Или там специфика подинтегральной функцией какая-то?

Ну я про переход от одного шага к вдвое меньшему.

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 01:47 
Спасибо, преобразование я учту.

Очень странно, что с таким огромным числом шагов сходится, даже при очень малой точности вычислений - $eps = 0.001$. Программу я проверял и перепроверял. Ошибки не вижу. Правильный ли это критерий остановки?

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 01:55 
Sayid в сообщении #259934 писал(а):
с таким огромным числом шагов сходится, даже при очень малой точности вычислений - $eps = 0.001$

У Вас же абсолютная точность в формуле останова, поэтому ничего нельзя сказать в отношении того, много это $eps = 0.001$ или мало. Значение интеграла-то какое получается?

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 01:57 
значение порядка $0.32.......$

-- Пн ноя 09, 2009 02:03:24 --

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 02:03 
С таким огромным количеством шагов точность вычисления интеграла должна быть вполне приличной, поэтому мне кажется довольно естественным, что её оказывается достаточно для того, чтобы обеспечить такой "нетребовательный" критерий останова.

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 02:04 
вообще мне нужно реализовать метод Ритца для решения ОДУ второго порядка. Координатная система такова: $(1-x^2)*Pn(x) $,где $Pn(x)$ - это многочлен Якоби (1,1). Там вылазит энергетическое скалярное произведение. (http://www.math.spbu.ru/user/pan/Page3-8.htm) Вот как раз там мне и нужно интегрировать. И для каждого узла я перестраиваю эти несчастные многочлены Якоби. Так что процесс весьма и весьма трудоемкий!

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 07:45 
Ну, 300 000 -- это в любом случае многовато, машинная точность должна исчерпаться тысячах где-то на пятнадцати. Но главное не в этом. Зачем такая точность интегрирования, если метод Ритца сам по себе -- груб?

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 12:11 
Почему груб? Он ведь дает точность до 4 порядка. Не метод Гаусса, конечно, но ведь и не метод прямоугольников.

А какую точность посоветовали бы Вы? И почему?

 
 
 
 Re: Условие остановки метода Симпсона
Сообщение09.11.2009, 12:28 
Аватара пользователя
Sayid в сообщении #259934 писал(а):
Очень странно, что с таким огромным числом шагов сходится, даже при очень малой точности вычислений - $eps = 0.001$.
Под малой точностью подразумеваете большое $\varepsilon$ или маленькое?
Метод симпсона обычно сходится с четвертым порядком (може быстрее, может медленнее). Какие результаты и на сколько они отличаются при разбиении на 20 и 40 подынтервалов? Откуда токое огромное число шагов 300000?

 
 
 [ Сообщений: 22 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group