А есть ли какие-нибудь еще методы для их вычисления кроме апроксимации полиномом? Или может уже есть готорвые исходники на C#? Пока смотрю в сторону переделки из вот этих исходников.
Здравствуйте, Jenyay, Вы писали:
J>А есть ли какие-нибудь еще методы для их вычисления кроме апроксимации полиномом? Или может уже есть готорвые исходники на C#? Пока смотрю в сторону переделки из вот этих исходников.
Здравствуйте, Jenyay, Вы писали:
J>Привет.
J>А есть ли какие-нибудь еще методы для их вычисления кроме апроксимации полиномом? Или может уже есть готорвые исходники на C#? Пока смотрю в сторону переделки из вот этих исходников.
Оказывается исходник из моего первого сообщения взят из этой главы как раз. Теперь надо будет проверить точность, но свиду (по графику) должно хватить.
Здравствуйте, Jenyay, Вы писали:
W>>Кстати, есть такие функции в Microsoft CRT — _j0, _j1, _jn, можно посмотреть их исходники, если они есть.
J>А это мысль
Однако, что-то странное... Не находит никаких исходников, ним в VC6, ни в VC7. Хотя указанные функции мало того, что есть, так они еще и работают!
То есть, они присутствуют в бинарном виде в TRAN.LIB. Что-то сильно секретное?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Еще раз про функции Бесселя
От:
Аноним
Дата:
07.06.05 11:23
Оценка:
Здравствуйте, Jenyay, Вы писали:
J>Привет.
J>А есть ли какие-нибудь еще методы для их вычисления кроме апроксимации полиномом? Или может уже есть готорвые исходники на C#? Пока смотрю в сторону переделки из вот этих исходников.
J>А есть ли какие-нибудь еще методы для их вычисления кроме апроксимации полиномом? Или может уже есть готорвые исходники на C#? Пока смотрю в сторону переделки из вот этих исходников.
Есть еще метод вычисления с помошью интегрального представления. Но он актуален только, если надо считать Бессель от комплексного аргумента. В случае действительного аргумента, лучше всего — аппроксимация с помощью полиномов Чебышёва.
Здравствуйте, krasin, Вы писали:
K>Есть еще метод вычисления с помошью интегрального представления. Но он актуален только, если надо считать Бессель от комплексного аргумента. В случае действительного аргумента, лучше всего — аппроксимация с помощью полиномов Чебышёва.
А тут есть пределы в которых эта опроксимация применима? Пока оставил ее, вроде свиду похоже на то что надо, но я еще не знаю пределы в которых будет она вычисляться в реале.
Здравствуйте, krasin, Вы писали:
J>>А есть ли какие-нибудь еще методы для их вычисления кроме апроксимации полиномом? Или может уже есть готорвые исходники на C#? Пока смотрю в сторону переделки из вот этих исходников.
K>Есть еще метод вычисления с помошью интегрального представления. Но он актуален только, если надо считать Бессель от комплексного аргумента.
Это не то представление, которое сильно осциллирует при большом модуле z?
Мне вообще-то комплексный Ханкель нужен... Есть идеи?
new RSDN@Home(1.1.4, 303) << new Message();d0std::head::ear << "Iron Maiden — Brave New World";
A>Это не то представление, которое сильно осциллирует при большом модуле z?
Да, я имел ввиду разложение Пуассона. Оно вполне нормальное, особенно если интегрировать не прямоугольником
У меня совпадало до 10 знака с Maple-ом при модуле аргумента меньше 100 (мне в задаче модуль больше, чем 100 и не нужен был, так что даже не проверял, что там дальше). Число узлов интегрирование было в районе 200-300.
A>Мне вообще-то комплексный Ханкель нужен... Есть идеи?
Вдогонку к имеющемуся — смотрите соответствующий раздел статей на www.ams.org, особенно если есть необходимость в высокой точности. В частности, имеется довольно удобное для вычислений представление отношения двух функций Бесселя последовательных номеров в виде цепной дроби (прикол — несколько формул этого типа я когда-то вывел сам...).
Здравствуйте, krasin, Вы писали:
A>>Это не то представление, которое сильно осциллирует при большом модуле z?
K>Да, я имел ввиду разложение Пуассона. Оно вполне нормальное, особенно если интегрировать не прямоугольником K>У меня совпадало до 10 знака с Maple-ом при модуле аргумента меньше 100 (мне в задаче модуль больше, чем 100 и не нужен был, так что даже не проверял, что там дальше). Число узлов интегрирование было в районе 200-300.
Я проверял на методе Симпсона. Число узлов — 60-70. Плохо дело — мне надо довольно интенсивно считать эту функцию. Можно сказать — это основной тормоз расчетов. Да и не подходят они в общем, потому как они растут с ростом модуля (мне нужна только первая четверть), а Ханкель очень быстро убывает. Короче, вычитать два астрономических числа, чтобы получить очень маленькое известно чем грозит... Хотя, для Ханкеля есть асимптотика в дальней зоне... Но серединку то мне надо как-то считать
A>>Мне вообще-то комплексный Ханкель нужен... Есть идеи?
K>Проверенных идей нет.
Ну ты выкладывай, а проверить не проблема Я единственное знаю выражение через модифицированную функцию Бесселя, но у нее тоже были какие-то проблемы (вроде бы тоже осциллировала).
new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "Iron Maiden — Dream Of Mirrors";
Здравствуйте, ansi, Вы писали:
A>Я проверял на методе Симпсона. Число узлов — 60-70. Плохо дело — мне надо довольно интенсивно считать эту функцию. Можно сказать — это основной тормоз расчетов. Да и не подходят они в общем, потому как они растут с ростом модуля (мне нужна только первая четверть), а Ханкель очень быстро убывает. Короче, вычитать два астрономических числа, чтобы получить очень маленькое известно чем грозит... Хотя, для Ханкеля есть асимптотика в дальней зоне... Но серединку то мне надо как-то считать
А почему бы для этого не использовать табулирование? Именно для "серединки". Создаем точно вычисленную таблицу, хоть на 10000 значений, а точное значение вычисляем интерполяцией. Можно — простой линейной интерполяцией, можно даже кубическим сплайном — будет не сильно медленней.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
K>>Проверенных идей нет.
A>Ну ты выкладывай, а проверить не проблема Я единственное знаю выражение через модифицированную функцию Бесселя, но у нее тоже были какие-то проблемы (вроде бы тоже осциллировала).
С учетом того, что функция Ханкеля — линейная комбинация функций Бесселя первого и второго рода, проще научиться считать именно функцию Бесселя. Есть подозрение, что функцию Бесселя можно довольно быстро считать, если воспользоваться выражением через гипергеометрическую функцию, но этого пока не проверял.
Здравствуйте, Jenyay, Вы писали:
J>Привет.
J>А есть ли какие-нибудь еще методы для их вычисления кроме апроксимации полиномом? Или может уже есть готорвые исходники на C#? Пока смотрю в сторону переделки из вот этих исходников.
Есть есть открытая библиотека http://www.gnu.org/software/gsl/gsl.html
Бессель легко переписывается с С на шарп. Если дело срочное, то могу вам сбросить статическую библиотеку
Здравствуйте, peterbes, Вы писали:
P>Есть есть открытая библиотека http://www.gnu.org/software/gsl/gsl.html P>Бессель легко переписывается с С на шарп. Если дело срочное, то могу вам сбросить статическую библиотеку
Я пока переделал из исходника по той ссылке которую дал в начале. Свиду пока подходит, а там будет видно.