LINUX.ORG.RU

Нужен способ интегрирования для осцилирующей функциии (на си).


0

0

Есть функция
f(x) = cos(Pi*cos(theta)^2)*sin(theta)*cos(theta) ; Pi=3.14159...
Нужно её проинтегрировать на промежутке {x, 0, Pi}. Использовал библиотеку gsllib
( gnu scientific library), перепробовал все алгоритмы, пишет:

gsl: qawo.c:104: ERROR: cannot reach tolerance because of roundoff erroron first attempt
Default GSL error handler invoked.
Aborted

Попробовал через mathematica посмотреть что получится - выдаёт какой-то результат вместе
с кучей замечаний.
Собственно если кто подскажет как как это проинтегрировать ( на си ) - буду очень благодарен.
ЗЫ
Попробовал методом трапеций - выдаёт число порядком совпадающее с тем что выдаёт mathematica.

anonymous

А слабовато было той же Математикой получить аналитическое решение? -Sin[Pi*Cos[x]^2]/(2*Pi), всего то...

anonymous
()
Ответ на: комментарий от cvv

Конечно же руками данную конкретную функцию не проблемма взять. Просто мне надо расчитать 31*31*6=5766 похожих функций, но значительно более навороченых ( каждая из которых будет минимум в 7 раз длинее вышеуказанной). А конкретную функцию я получил посути посредством отбрасывания всяких частей. Просто если кто скажет мне способ как посчитать численно вышеприведённую функцию, то я смогу посчитать и те что мне надо Если очень надо могу привести точный вид тех функций, но смысла я не вижу. Пример с математикой я привел чтобы показать что mathematica данные функции численно интерирует плохо.

anonymous
()

Я никак не могу увидеть в чем сложность численного интегрирования этой функции :0

atoku ★★★
()

Да, ваша mathematica меня тоже удивляет. Ответ на отрезке [0,Pi] будет твердый ноль. Так что не должно быть никаких значений там.

Впрочем, может быть имеется в виду несколько другая функция? Например

cos(pi*cos(x^2))*sin(x)*cos(x)?

Тогда все несколько интереснее. Так что?

atoku ★★★
()
Ответ на: комментарий от atoku

Имеется именно та функция которую я написал. A в mathematica я интегрировал не через Integrate[...,{x,0,2*Pi}], а через NIntegrate[...,{x,0,2*Pi}], т. е. использовал именно численные алгоритмы. Оно выдаёт ответ порядка 10^-17 ругась при этом. Причём что само интересно это то что и когда я численно интегрирую ( трапециями) ответ получается тоже порядка 10^-17.

anonymous
()
Ответ на: комментарий от anonymous

Тфу ты. Ещё утром не проснулся. В предыдущем посте пределы интегрирования {x,0,Pi}. А по поводу совпадения порядков - ничего там интересного нету.

anonymous
()
Ответ на: комментарий от anonymous

Вообще, для численного интегрирования быстро осциллирующих функций есть специальные методы, в хороших книгах по численному анализу они описаны. А готовые программы можно на www.netlib.org поискать.

gene
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.