Ускорение сходимости ряда

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Ускорение сходимости ряда

Сообщение zykov » 25 апр 2020, 08:51

Добавил к сумме $$\sum_{j=1}^{1000}\xi_j^{-3}$$ интегральную оценку хвоста в виде $$\frac{2}{(\xi_{1000}-\xi_{999})(3 \; \xi_{1000}-\xi_{999})^2}$$.
Получается довольно точно для не очень больших порядков. Вот для порядков от 0 до 20:

Код: Выбрать все

0.0808814735
0.0227528733
0.0105915489
0.00610735991
0.00396964424
0.00278599744
0.00206264438
0.0015884579
0.0012608461
0.00102506817
0.000849746682
0.000715846539
0.00061127561
0.000528053152
0.000460739496
0.000405523457
0.000359670449
0.000321177114
0.000288548624
0.000260651285
0.000236612678


В приложении zip архив с матлаб файлом таких оценок для порядков от 0 до 10000.
(Он текстовый, можно и без Matlab/Octave читать.)
xi3.zip
sum xi^(-3)
(89.24 KiB) Загружено 599 раз

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Ускорение сходимости ряда

Сообщение zykov » 25 апр 2020, 09:12

zykov писал(а):Source of the post Сам Бессель в Matlab вычисляется встроенной функцией besselj.

В Matlab/Octave значение функции Бесселя считает какая-то библиотечная функция. Видимо считает точно и для больших аргументов тоже, т.к. в описании ничего не сказано, что не применять при аргументе больше такого-то.
В C++ в стандарте 2017 года такую функцию добавили в стандартную бибилотеку cmath - cyl_bessel_j.
Как именно считает - не знаю. Зависит от конкретной библиотеки. Наверно сейчас для этого уже есть стандартный алгоритм.
Тут в описании они дают ссылку на вольфрам, там есть описание Frobenius method. Наверно так и считают. Мне правда не ясно, что они делают для больших аргументов...
Ещё есть ссылка на библиотеку boost, там эта функция была ещё до стандарта 2017 года. По этой ссылке есть некоторые данные по точности и кое-какие детали по алгоритму.

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Ускорение сходимости ряда

Сообщение zykov » 25 апр 2020, 09:50

peregoudov писал(а):Source of the post Численно найти 10000 корней Бесселя? Как? Для этого нужно Бесселя уметь считать. Как? Суммированием степенного ряда? По асимптотике (а вы где-то видели ее далее первого члена)? По готовым асимптотическим формулам для корней? И во что в итоге выльются все промежуточные численные погрешности: в расчете самого Бесселя, в нахождении корня, в суммировании ряда из степеней корней?

Вобщем вывод такой.
Сам Бессель считается стандартной бибилотекой. Считается точно и довольно быстро. Даже для больших аргументов.
Имея функцию расчёта можно осуществить поиск нуля по начальному приближению. Люди использовали Halley's method (аналог метода Ньютона, только второго порядка). Таким образом можно довольно быстро и точно найти какое-то количество первых нулей (например первые 1000 или первый 100 000). Наверно делать это "на лету" будет несколько медленно. Но можно заранее табличку обсчитать.
Далее по таблице уже легко считать суммы. Самая простая оптимизация тут - это где-то оборвать сумму и добавить туда интегральное приближение для суммы хвоста.

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Ускорение сходимости ряда

Сообщение zykov » 26 апр 2020, 09:43

peregoudov писал(а):Source of the post По асимптотике (а вы где-то видели ее далее первого члена)?

По той ссылке на boost есть упоминание:
When $x$ is large compared to the order $\nu$ then the asymptotic expansions for large $x$ in M. Abramowitz and I.A. Stegun, Handbook of Mathematical Functions 9.2.19 are used (these were found to be more reliable than those in A&S 9.2.5).

Видимо в этой книге (pdf) есть хорошая асимптотика.

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Ускорение сходимости ряда

Сообщение zykov » 27 апр 2020, 08:42

Кратко, идея там такая.
В целях вычисления функции Бесселя при больших аргументах рассматривают функцию $H(x)=J(x)+i \; Y(x)$ (известную как Hankel function или функция Бесселя третьего рода). Это комплексная линейная комбинация функций Бесселя первого и второго родов.
Для этой комплексной функции рассматривают полярное разложение на амплитуду и фазу $H(x)=A(x) e^{i\Phi (x)}$.
И амплитуда, и фаза имеют понятную асимптотику на бесконечности. Фаза растёт почти линейно. Амплитуда падает примерно как степень $-1/2$, но уже гладко, без нулей.
После замены переменных $x=1/t$ можно разложить амплитуду и фазу при $t=0$ в ряд (т.е. получить сколько угодно порядков асимптотики). Потом просто нужно взять столько членов ряда, сколько нужно для требуемой точности.
Функция Бесселя первого рода будет $J(x)=A(x) \cos \Phi(x)$.

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Ускорение сходимости ряда

Сообщение zykov » 27 апр 2020, 10:23

zykov писал(а):Source of the post В приложении zip архив с матлаб файлом таких оценок для порядков от 0 до 10000.

Оценил ошибку для таких значений (абсолютную и относительную) для некоторых порядков:

Код: Выбрать все

order      abs        rel
2       1.03e-13    9.69e-12
4       5.47e-14    1.38e-11
8      -8.77e-15   -6.96e-12
16     -9.90e-14   -2.75e-10
32     -3.90e-13   -4.05e-09
64     -1.48e-12   -5.91e-08
128    -5.25e-12   -8.26e-07
256    -1.68e-11   -1.05e-05
512    -4.49e-11   -1.11e-04
1024   -9.20e-11   -9.11e-04
10000  -8.19e-11   -7.72e-02

Для порядков под 10000 относительная ошибка уже 8%.

zykov
Сообщений: 1393
Зарегистрирован: 06 янв 2016, 17:41

Ускорение сходимости ряда

Сообщение zykov » 17 окт 2021, 19:10

zykov писал(а):Source of the post Потом просто нужно взять столько членов ряда, сколько нужно для требуемой точности.
Функция Бесселя первого рода будет $J(x)=A(x) \cos \Phi(x)$.

Вот из любопытства повозился немного, чтобы получить разложение дальше:
$$A(x)=A_0 x^{-\frac12} \left(1 + \frac{4\alpha^2-1}{16} x^{-2} + \frac{80\alpha^4-232\alpha^2+53}{512} x^{-4} + ...\right)$$
$$\Phi(x) = C + x + \frac{4\alpha^2-1}{8} x^{-1} + \frac{16\alpha^4-104\alpha^2+25}{384} x^{-3} + ...$$
Тут $A_0$ и $C$ из дифура не находятся, но они были как-то найдены из условия в нуле: $A_0 = \sqrt\frac{2}{\pi}$ и $C = -\frac{\alpha\pi}{2}-\frac{\pi}{4}$.

peregoudov
Сообщений: 620
Зарегистрирован: 29 дек 2015, 13:17

Ускорение сходимости ряда

Сообщение peregoudov » 27 окт 2021, 20:03

Это похоже на известное разложение

$$ K_\alpha(x)=\sqrt{\frac\pi{2x}}\,e^{-x}\sum_{k=0}^\infty \frac{\Gamma(\alpha+k+1/2)}{\Gamma(\alpha-k+1/2)}\frac1{k!}(2x)^{-k}. $$

Для бесселей есть аналогичное.


Вернуться в «Математика»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 4 гостей