Функции Бесселя В Программе Символьной Математики Sympy

Введение: С использованием функций Бесселя связано большое количество самых разнообразных задач, относящихся почти ко всем важнейшим разделам математической физики и призванных ответить на текущие технические вопросы.

Функции Бесселя широко используются при решении задач акустики, радиофизики, гидродинамики, задач атомной и ядерной физики.

Многочисленные приложения функций Бесселя к теории теплопроводности и теории упругости (задачи о колебаниях пластин, задачи теории оболочек, задачи определения концентрации напряжений вблизи трещин).

Такая популярность функций Бесселя объясняется тем, что решение уравнений математической физики, содержащих оператор Лапласа в цилиндрических координатах, с использованием классического метода разделения переменных приводит к обыкновенному дифференциальному уравнению, служащему для определения этих функций [1].

Функции Бесселя названы в честь немецкого астронома Фридриха Бесселя, который в своей работе 1824 года, изучая движение планет вокруг Солнца, вывел рекуррентные соотношения для функций Бесселя.



Функции Бесселя в программе символьной математики SymPy

, получил за целое

Функции Бесселя в программе символьной математики SymPy

интегральное представление функции

Функции Бесселя в программе символьной математики SymPy

, доказал существование бесконечного числа нулей функции

Функции Бесселя в программе символьной математики SymPy

и составил первые таблицы для функций

Функции Бесселя в программе символьной математики SymPy

И

Функции Бесселя в программе символьной математики SymPy

.

Однако впервые одна из функций Бесселя

Функции Бесселя в программе символьной математики SymPy

был рассмотрен еще в 1732 году Даниэлем Бернулли в работе, посвященной колебаниям тяжелых цепей.

Д.

Бернулли нашел выражение для функции

Функции Бесселя в программе символьной математики SymPy

в виде степенного ряда и заметил (без доказательства), что уравнение

Функции Бесселя в программе символьной математики SymPy

имеет бесчисленное множество реальных корней.

Следующей работой, в которой фигурируют функции Бесселя, стала работа Леонардо Эйлера 1738 года, посвященная изучению колебаний круговой мембраны.

В этой работе Л.

Файлер нашел для целых чисел

Функции Бесселя в программе символьной математики SymPy

Выражение функции Бесселя

Функции Бесселя в программе символьной математики SymPy

в виде ряда по степеням

Функции Бесселя в программе символьной математики SymPy

, а в последующих работах распространил это выражение на случай произвольных значений индекса

Функции Бесселя в программе символьной математики SymPy

.

Кроме того, Л.

Эйлер доказал, что для

Функции Бесселя в программе символьной математики SymPy

, равная полуторному целому числу, функция

Функции Бесселя в программе символьной математики SymPy

выражаются через элементарные функции.

Он заметил (без доказательства), что на самом деле

Функции Бесселя в программе символьной математики SymPy

функции

Функции Бесселя в программе символьной математики SymPy

имеют бесконечное число вещественных нулей и дали интегральное представление для

Функции Бесселя в программе символьной математики SymPy

.

Некоторые исследователи полагают, что основные результаты, связанные с функциями Бесселя и их приложениями в математической физике, связаны с именем Л.

Эйлера.

Свободно распространяемая программа символьной математики SymPy, библиотека Python, позволяет изучать свойства функций Бесселя и одновременно осваивать методы решения уравнений, которые можно свести к функциям Бесселя.

В программе символьной математики SymPy графики функций Бесселя первого рода целых порядков можно построить с помощью соотношения для суммы ряда:

Функции Бесселя в программе символьной математики SymPy

Функции Бесселя первого рода

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

from sympy import* from sympy.plotting import plot x,n, p=var('x,n, p') def besselj(p,x): return summation(((-1)**n*x**(2*n+p))/(factorial(n)*gamma(n+p+1)*2**(2*n+p)),[n,0,oo]) st="J_{p}(x)" p1=plot(besselj(0,x),(x,-20,20),line_color='b',title='$'+st+ '$',show=False) p2=plot(besselj(1,x),(x,-20,20),line_color='g',show=False) p3=plot(besselj(2,x),(x,-20,20),line_color='r',show=False) p4=plot(besselj(3,x),(x,-20,20),line_color='c',show=False) p1.extend(p2) p1.extend(p3) p1.extend(p4) p1.show()



Функции Бесселя в программе символьной математики SymPy

Используя соотношение для суммы ряда, можно доказать свойство этих функций для целых порядков

Функции Бесселя в программе символьной математики SymPy

Свойство функции Бесселя первого рода

from sympy import* from sympy.plotting import plot x,n, p=var('x,n, p') def besselj(p,x): return summation(((-1)**n*x**(2*n+p))/(factorial(n)*gamma(n+p+1)*2**(2*n+p)),[n,0,oo]) st="J_{1}(x)=-J_{-1}(x)" p1=plot(besselj(1,x),(x,-10,10),line_color='b',title='$'+st+ '$',show=False) p2=plot(besselj(-1,x),(x,-10,10),line_color='r',show=False) p1.extend(p2) p1.show()



Функции Бесселя в программе символьной математики SymPy

Для демонстрации условий Коши построим функцию

Функции Бесселя в программе символьной математики SymPy

и его производная

Функции Бесселя в программе символьной математики SymPy

: Функция дробного порядка и ее производная

from sympy import* from sympy.plotting import plot x,n, p=var('x,n, p') def besselj(p,x): return summation(((-1)**n*x**(2*n+p))/(factorial(n)*gamma(n+p+1)*2**(2*n+p)),[n,0,oo]) st="J_{1/3}(x),J{}'_{1/3}(x)" p1=plot(besselj(1/3,x),(x,-1,10),line_color='b',title='$'+st+ '$',ylim=(-1,2),show=False) def dbesselj(p,x): return diff(summation(((-1)**n*x**(2*n+p))/(factorial(n)*gamma(n+p+1)*2**(2*n+p)),[n,0,oo]),x) p2=plot(dbesselj(1/3,x),(x,-1,10),line_color='g',show=False) p1.extend(p2) p1.show()



Функции Бесселя в программе символьной математики SymPy

Однако для практических расчетов используется замечательный модуль mpmath, позволяющий не только численно решать уравнения с функциями Бесселя первого и второго рода, в том числе модифицированными всех допустимых порядков, но и строить графики с автоматическим масштабированием.

Кроме того, модуль mpmath не требует специальных инструментов для совместного использования символьной и числовой математики.

Об истории создания этого модуля и возможности его использования для обратного преобразования Лапласа я уже рассказывал в публикации [2].

Теперь продолжим рассмотрение mpmath для работы с функциями Бесселя [3].

Функция Бесселя первого рода

Функции Бесселя в программе символьной математики SymPy

mpmath.besselj(n, x, производная=0) — дает функцию Бесселя первого рода

Функции Бесселя в программе символьной математики SymPy

.

Функции

Функции Бесселя в программе символьной математики SymPy

является решением следующего дифференциального уравнения:

Функции Бесселя в программе символьной математики SymPy

Для положительных целых чисел

Функции Бесселя в программе символьной математики SymPy

ведет себя как синус или косинус, умноженный на коэффициент, который медленно убывает по мере

Функции Бесселя в программе символьной математики SymPy

Функция Бесселя первого рода

Функции Бесселя в программе символьной математики SymPy

является частным случаем гипергеометрической функции

Функции Бесселя в программе символьной математики SymPy

:

Функции Бесселя в программе символьной математики SymPy

Функцию Бесселя можно дифференцировать

Функции Бесселя в программе символьной математики SymPy

раз, при условии, что m-я производная не равна нулю:

Функции Бесселя в программе символьной математики SymPy

Функция Бесселя первого рода

Функции Бесселя в программе символьной математики SymPy

для натуральных порядков n = 0,1,2,3 - решение уравнения Бесселя:

from mpmath import* j0 = lambda x: besselj(0,x) j1 = lambda x: besselj(1,x) j2 = lambda x: besselj(2,x) j3 = lambda x: besselj(3,x) plot([j0,j1,j2,j3],[0,14]



Функции Бесселя в программе символьной математики SymPy

Функция Бесселя первого рода

Функции Бесселя в программе символьной математики SymPy

в комплексной плоскости:

from sympy import* from mpmath import* cplot(lambda z: besselj(1,z), [-8,8], [-8,8], points=50000)



Функции Бесселя в программе символьной математики SymPy

Примеры: Функция

Функции Бесселя в программе символьной математики SymPy

выдает результат с заданным количеством цифр

Функции Бесселя в программе символьной математики SymPy

после десятичной точки:

from mpmath import* mp.dps = 15; mp.pretty = True print(besselj(2, 1000)) nprint(besselj(4, 0.75)) nprint(besselj(2, 1000j)) mp.dps = 25 nprint( besselj(0.75j, 3+4j)) mp.dps = 50 nprint( besselj(1, pi))

Аргументом функции может быть большое число:

from mpmath import* mp.dps = 25 nprint( besselj(0, 10000)) nprint(besselj(0, 10**10)) nprint(besselj(2, 10**100)) nprint( besselj(2, 10**5*j))

Функции Бесселя первого рода удовлетворяют простым симметриям относительно

Функции Бесселя в программе символьной математики SymPy

:

from sympy import* from mpmath import* mp.dps = 15 nprint([besselj(n,0) for n in range(5)]) nprint([besselj(n,pi) for n in range(5)]) nprint([besselj(n,-pi) for n in range(5)])

Корни не периодические, но расстояние между последовательными корнями асимптотически приближается

Функции Бесселя в программе символьной математики SymPy

.

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

from mpmath import* print(quadosc(j0, [0, inf], period=2*pi)) print(quadosc(j1, [0, inf], period=2*pi))

Для

Функции Бесселя в программе символьной математики SymPy

или

Функции Бесселя в программе символьной математики SymPy

Функция Бесселя сводится к тригонометрической функции:

from sympy import* from mpmath import* x = 10 print(besselj(0.5, x)) print(sqrt(2/(pi*x))*sin(x)) print(besselj(-0.5, x)) print(sqrt(2/(pi*x))*cos(x))

Производные любого порядка можно вычислить, отрицательные порядки соответствуют интегрированию :

from mpmath import* mp.dps = 25 print(besselj(0, 7.5, 1)) print(diff(lambda x: besselj(0,x), 7.5)) print(besselj(0, 7.5, 10)) print(diff(lambda x: besselj(0,x), 7.5, 10)) print(besselj(0,7.5,-1) - besselj(0,3.5,-1)) print(quad(j0, [3.5, 7.5]))

Дифференцирование с нецелым порядком дает дробную производную в смысле дифференциального интеграла Римана-Лиувилля, вычисляемого с помощью функции

Функции Бесселя в программе символьной математики SymPy

:

from mpmath import* mp.dps = 15 print(besselj(1, 3.5, 0.75)) print(differint(lambda x: besselj(1, x), 3.5, 0.75))

Другие способы вызова функции Бесселя первого рода нулевого и первого порядков мпмат.j0(х) — Вычисляет функцию Бесселя

Функции Бесселя в программе символьной математики SymPy

; мпмат.j1(х) — Вычисляет функцию Бесселя

Функции Бесселя в программе символьной математики SymPy

; Функции Бесселя второго рода бессели(n, x, производная=0) Вычисляет функцию Бесселя второго рода по соотношению:

Функции Бесселя в программе символьной математики SymPy

Для целого числа

Функции Бесселя в программе символьной математики SymPy

следующую формулу следует понимать как предел.

Функцию Бесселя можно дифференцировать

Функции Бесселя в программе символьной математики SymPy

раз, при условии, что m-я производная не равна нулю:

Функции Бесселя в программе символьной математики SymPy

Функция Бесселя второго рода

Функции Бесселя в программе символьной математики SymPy

для положительных целых порядков

Функции Бесселя в программе символьной математики SymPy

.



from sympy import* from mpmath import* y0 = lambda x: bessely(0,x) y1 = lambda x: bessely(1,x) y2 = lambda x: bessely(2,x) y3 = lambda x: bessely(3,x) plot([y0,y1,y2,y3],[0,10],[-4,1])



Функции Бесселя в программе символьной математики SymPy

Функция Бесселя 2-го рода

Функции Бесселя в программе символьной математики SymPy

в сложной плоскости

from sympy import* from mpmath import* cplot(lambda z: bessely(1,z), [-8,8], [-8,8], points=50000)



Функции Бесселя в программе символьной математики SymPy

Примеры: Некоторые значения функции

Функции Бесселя в программе символьной математики SymPy

:

from sympy import* from mpmath import* mp.dps = 25; mp.pretty = True print(bessely(0,0)) print(bessely(1,0)) print(bessely(2,0)) print(bessely(1, pi)) print(bessely(0.5, 3+4j))

Аргументы могут быть большими:

from sympy import* from mpmath import* mp.dps = 25; mp.pretty = True print(bessely(0, 10000)) print(bessely(2.5, 10**50)) print(bessely(2.5, -10**50))

Производные любого порядка, в том числе отрицательные, можно вычислять:

from sympy import* from mpmath import* mp.dps = 25; mp.pretty = True print(bessely(2, 3.5, 1)) print(diff(lambda x: bessely(2, x), 3.5)) print(bessely(0.5, 3.5, 1)) print(diff(lambda x: bessely(0.5, x), 3.5)) print(diff(lambda x: bessely(2, x), 0.5, 10)) print(bessely(2, 0.5, 10)) print(bessely(2, 100.5, 100)) print(quad(lambda x: bessely(2,x), [1,3])) print(bessely(2,3,-1) - bessely(2,1,-1))

Модифицированная функция Бесселя первого рода.



mpmath.besseli(n, x, derivative=0)

бессели(n, x, производная=0) модифицированная функция Бесселя первого рода

Функции Бесселя в программе символьной математики SymPy



Функции Бесселя в программе символьной математики SymPy

Модифицированная функция Бесселя

Функции Бесселя в программе символьной математики SymPy

для реальных заказов

Функции Бесселя в программе символьной математики SymPy

:

from mpmath import* i0 = lambda x: besseli(0,x) i1 = lambda x: besseli(1,x) i2 = lambda x: besseli(2,x) i3 = lambda x: besseli(3,x) plot([i0,i1,i2,i3],[0,5],[0,5])



Функции Бесселя в программе символьной математики SymPy

Модифицированная функция Бесселя

Функции Бесселя в программе символьной математики SymPy

в сложной плоскости

from mpmath import* cplot(lambda z: besseli(1,z), [-8,8], [-8,8], points=50000)



Функции Бесселя в программе символьной математики SymPy

Примеры: Некоторые значения

Функции Бесселя в программе символьной математики SymPy



from mpmath import* mp.dps = 25; mp.pretty = True print(besseli(0,0)) print(besseli(1,0)) print(besseli(0,1)) print(besseli(3.5, 2+3j))

Аргументы могут быть большими:

from mpmath import* mp.dps = 25; mp.pretty = True print(besseli(2, 1000)) print(besseli(2, 10**10)) print(besseli(2, 6000+10000j))

Для целых чисел n имеет место следующее интегральное представление:

from mpmath import* mp.dps = 15; mp.pretty = True n = 3 x = 2.3 print(quad(lambda t: exp(x*cos(t))*cos(n*t), [0,pi])/pi) print(besseli(n,x))

Производные любого порядка можно вычислить:

from mpmath import* mp.dps = 25; mp.pretty = True print(besseli(2, 7.5, 1)) print(diff(lambda x: besseli(2,x), 7.5)) print(besseli(2, 7.5, 10)) print(diff(lambda x: besseli(2,x), 7.5, 10)) print(besseli(2,7.5,-1) - besseli(2,3.5,-1)) print(quad(lambda x: besseli(2,x), [3.5, 7.5]))

Модифицированные функции Бесселя второго рода

mpmath.besselk(n, x)

бесселк(n, x) модифицированные функции Бесселя второго рода

Функции Бесселя в программе символьной математики SymPy

Для целого числа

Функции Бесселя в программе символьной математики SymPy

эту формулу следует понимать как предел.

Модифицированная функция Бесселя 2-го рода.



Функции Бесселя в программе символьной математики SymPy

серьезно

Функции Бесселя в программе символьной математики SymPy

:

from mpmath import* k0 = lambda x: besselk(0,x) k1 = lambda x: besselk(1,x) k2 = lambda x: besselk(2,x) k3 = lambda x: besselk(3,x) plot([k0,k1,k2,k3],[0,8],[0,5])



Функции Бесселя в программе символьной математики SymPy

Модифицированная функция Бесселя 2-го рода.



Функции Бесселя в программе символьной математики SymPy

в сложной плоскости

from mpmath import* cplot(lambda z: besselk(1,z), [-8,8], [-8,8], points=50000)



Функции Бесселя в программе символьной математики SymPy

Примеры: Сложные и сложные аргументы:

from mpmath import * mp.dps = 25; mp.pretty = True print(besselk(0,1)) print(besselk(0, -1)) print(besselk(3.5, 2+3j)) print(besselk(2+3j, 0.5))

Аргументы — это большие числа.



from mpmath import * mp.dps = 25; mp.pretty = True print(besselk(0, 100)) print(besselk(1, 10**6)) print(besselk(1, 10**6*j)) print(besselk(4.5, fmul(10**50, j, exact=True)))

Особенности поведения функции в точке

Функции Бесселя в программе символьной математики SymPy

:

from mpmath import * print(besselk(0,0)) print(besselk(1,0)) for n in range(-4, 5): print(besselk(n, '1e-1000'))

Нули функции Бесселя

besseljzero() mpmath.besseljzero(v, m, derivative=0)

Для реального заказа

Функции Бесселя в программе символьной математики SymPy

и положительное целое число

Функции Бесселя в программе символьной математики SymPy

возвращает

Функции Бесселя в программе символьной математики SymPy

, m-й положительный нуль функции Бесселя первого рода

Функции Бесселя в программе символьной математики SymPy

(см.

бессель () ).

Альтернативно, с

Функции Бесселя в программе символьной математики SymPy

, дает первый неотрицательный простой нуль

Функции Бесселя в программе символьной математики SymPy

от

Функции Бесселя в программе символьной математики SymPy

.

Обозначение по соглашению об индексации с использованием Abramowitz & Stegun и DLMF. Обратите внимание на особый случай

Функции Бесселя в программе символьной математики SymPy

, а все остальные нули положительны.

В действительности учитываются только простые нули (все нули функций Бесселя являются простыми, за исключением случаев, когда

Функции Бесселя в программе символьной математики SymPy

), И

Функции Бесселя в программе символьной математики SymPy

становится монотонной функцией

Функции Бесселя в программе символьной математики SymPy

И

Функции Бесселя в программе символьной математики SymPy

.

Нули чередуются согласно неравенствам:

Функции Бесселя в программе символьной математики SymPy



Функции Бесселя в программе символьной математики SymPy

Примеры: Ведущие нули функций Бесселя

Функции Бесселя в программе символьной математики SymPy

,

Функции Бесселя в программе символьной математики SymPy

,

Функции Бесселя в программе символьной математики SymPy



from mpmath import * mp.dps = 25; mp.pretty = True print(besseljzero(0,1)) print(besseljzero(0,2)) print(besseljzero(0,3)) print(besseljzero(1,1)) print(besseljzero(1,2)) print(besseljzero(1,3)) print(besseljzero(2,1)) print(besseljzero(2,2)) print(besseljzero(2,3))

Ведущие нули производных функций Бесселя

Функции Бесселя в программе символьной математики SymPy

,

Функции Бесселя в программе символьной математики SymPy

,

Функции Бесселя в программе символьной математики SymPy



from mpmath import * mp.dps = 25; mp.pretty = True print(besseljzero(0,1,1)) print(besseljzero(0,2,1)) print(besseljzero(0,3,1)) print(besseljzero(1,1,1)) print(besseljzero(1,2,1)) print(besseljzero(1,3,1)) print(besseljzero(2,1,1)) print(besseljzero(2,2,1)) print(besseljzero(2,3,1))

Нули с большим индексом:

from mpmath import * mp.dps = 25; mp.pretty = True print(besseljzero(0,100)) print(besseljzero(0,1000)) print(besseljzero(0,10000)) print(besseljzero(5,100)) print(besseljzero(5,1000)) print(besseljzero(5,10000)) print(besseljzero(0,100,1)) print(besseljzero(0,1000,1)) print(besseljzero(0,10000,1))

Нули функций старшего порядка:

from mpmath import * mp.dps = 25; mp.pretty = True print(besseljzero(50,1)) print(besseljzero(50,2)) print(besseljzero(50,100)) print(besseljzero(50,1,1)) print(besseljzero(50,2,1)) print(besseljzero(50,100,1))

Нули функций дробного порядка:

from mpmath import * mp.dps = 25; mp.pretty = True print(besseljzero(0.5,1)) print(besseljzero(1.5,1)) print(besseljzero(2.25,4))

И

Функции Бесселя в программе символьной математики SymPy

.

И

Функции Бесселя в программе символьной математики SymPy

могут быть выражены как бесконечные произведения их нулей:

from mpmath import * mp.dps = 6; mp.pretty = True v,z = 2, mpf(1) nprint((z/2)**v/gamma(v+1) * \ nprod(lambda k: 1-(z/besseljzero(v,k))**2, [1,inf])) print(besselj(v,z)) nprint((z/2)**(v-1)/2/gamma(v) * \ nprod(lambda k: 1-(z/besseljzero(v,k,1))**2, [1,inf])) print(besselj(v,z,1))



besselyzero() mpmath.besselyzero(v, m, derivative=0)

Для реального заказа

Функции Бесселя в программе символьной математики SymPy

и положительное целое число

Функции Бесселя в программе символьной математики SymPy

возвращает

Функции Бесселя в программе символьной математики SymPy

,

Функции Бесселя в программе символьной математики SymPy

, m-й положительный нуль функции Бесселя второго рода

Функции Бесселя в программе символьной математики SymPy

(см.

Бессели() ).

Альтернативно, с

Функции Бесселя в программе символьной математики SymPy

, дает первый положительный ноль

Функции Бесселя в программе символьной математики SymPy

Теги: #Разработка для Windows #python #математика #программирование #SciPy #sympy #уравнение Бесселя #mpmath модуль

Вместе с данным постом часто просматривают: