Loading [MathJax]/jax/output/HTML-CSS/jax.js

2019년 2월 24일 일요일

파이썬 Sympy 기호수학 - 5. Bessel 함수

파이썬 Sympy 기호수학 - 5. Bessel 함수

SymPy 기호수학 - 응용 5. Bessel 함수

sympy 라이브러리를 불러오고, 사용할 기호 변수를 선언한다. 출력을 LaTex 수식으로 나타내고, 맷플롯립 모듈을 불러온다.

In [1]:
from sympy import *
          
x, y, z, t = symbols('x y z t')
f, g, h = symbols('f, g, h', cls=Function)

init_printing()
%matplotlib inline 

Bessel 함수

Bessel 함수는 Bessel 방정식을 만족하는 해이다.

x2y+xy+(x2ν2)y=0ν0

Bessel 방정식은 편미분 방정식을 원통 좌표계로 표현할 때 나타나며, ν0 또는 양의 실수이다.

Bessel 방정식의 해는 급수 해법으로 얻어진다. "제1종 Bessel 함수" Jν(x)는 다음과 같이 주어진다.

Jν(x)=xνm=0(1)mx2m22m+νm!Γ(ν+m+1)

νn 인 경우 (정수가 아닌 양의 실수), Bessel 방정식의 일반해는

y(x)=c1Jν(x)+c2Jν(x)

로 주어진다.

ν=n 의 경우 (0 또는 양의 정수), 감마 함수를 계승 함수로 나타낼 수 있다.

Jn(x)=xnm=0(1)mx2m22m+nm!(n+m)!

J0(x)

In [2]:
plot( besselj(0,x), (x,0,20) )
Out[2]:
<sympy.plotting.plot.Plot at 0x260ac678780>

Bessel 함수의 값이 0 이되는 x 의 값들을 구한다.

In [3]:
Zeros = []
xini = N(pi)
for i in range(10) :
    zero = nsolve( besselj(0,x), x, xini )   
    Zeros.append( zero )
    xini = zero + N(pi)
print( Zeros )
[2.40482555769577, 5.52007811028631, 8.65372791291101, 11.7915344390143, 14.9309177084878, 18.0710639679109, 21.2116366298793, 24.3524715307493, 27.4934791320403, 30.6346064684320]

J1(x)

In [4]:
plot( besselj(1,x), (x,0,20) )
Out[4]:
<sympy.plotting.plot.Plot at 0x260ab2bce80>
In [5]:
Zeros = []
xini = N(pi)
for i in range(10) :
    zero = nsolve( besselj(1,x), x, xini )   
    Zeros.append( zero )
    xini = zero + N(pi)
print( Zeros )
[3.83170597020751, 7.01558666981562, 10.1734681350627, 13.3236919363142, 16.4706300508776, 19.6158585104682, 22.7600843805928, 25.9036720876184, 29.0468285349169, 32.1896799109744]

ν=n ( 0 또는 양의 정수)의 경우에는, 두 해가 서로 일차종속의 관계를 가지게 된다.

Jn(x)=(1)nJn(x)

따라서, 독립적인 해가 추가적으로 필요하다.

이 해를 “제2종 Bessel 함수” Yν(x)라 하고, 다음과 같이 정의된다.

Yν(x)=[Jν(x)cosνπJν(x)]sinνπ

ν가 정수인 경우에는

ν=n=0

Y0(x)=2π[J0(x)(lnx2+γ)+m=1(1)m1hm22m(m!)2x2m]

h1=1,hm=1+12++1m

γ 는 Euler 상수로서

γ=lims(1+12++1slns)=0.577215664

ν=n=1,2,

Yn(x)=limνnYν(x)

로 주어진다.

ν0 인 모든 경우에 대하여, Bessel 방정식의 일반해를 다음과 같이 나타낼 수 있다.

y(x)=C1Jν(x)+C2Yν(x)

Y0(x)

In [6]:
plot( bessely(0,x), xlim=(0,10), ylim=(-1,1) )      
Out[6]:
<sympy.plotting.plot.Plot at 0x260ad1a67f0>

Y1(x)

In [7]:
plot( bessely(1,x), xlim=(0,10), ylim=(-1,1) )      
Out[7]:
<sympy.plotting.plot.Plot at 0x260ace0a0b8>

버금 Bessel 방정식 (associated Bessel equation)

Bessel 방정식과 유사한 형태를 가지는, 버금 Bessel 방정식은 다음의 식으로 주어진다.

x2y+xy(x2+ν2)y=0ν0

버금 Bessel 방정식의 일반해는

y(x)=c1Iν(x)+c2Kν(x)

"변형 제1종 Bessel 함수" Iν(x)는 다음과 같이 주어진다.

Iν(x)=xνm=0x2m22m+νm!Γ(ν+m+1)

“변형 제2종 Bessel 함수” Kν(x)는 다음과 같이 주어진다.

Kν(x)=π2sinνπ[Iν(x)Iν(x)]

ν=n 의 경우에는

Kn(x)=limνnKν(x)

I0(x)

In [8]:
plot( besseli(0,x), xlim=(0,10), ylim=(0,10) )
Out[8]:
<sympy.plotting.plot.Plot at 0x260ad1feba8>

K0(x)

In [9]:
plot( besselk(0,x), xlim=(0,10), ylim=(0,1) )      
Out[9]:
<sympy.plotting.plot.Plot at 0x260ae345470>

댓글 없음:

댓글 쓰기

Numeric Analysis 4 - Numeric Linear Algebra

Numeric Analysis 4 - Numeric Linear Algebra Numeric Linear Algebra ¶ ...