본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #56 테일러 급수

by Mr.Algo 2024. 4. 16.
728x90
반응형

파이썬 실습창을 열 수 있습니다.실습창 열기

Brook Taylor(브룩 테일러)

 

테일러 급수

테일러 급수(Taylor series)란 계산하기 어려운 1개의 식을 여러 개의 식으로 나누어 각각을 계산하여 더함으로서 원래 식의 근사값을 구하는 방법입니다. 급수(series)는 수열(sequence)을 모두 더한 값입니다.  영국의 수학자  브푹 테일러가 18세기에 연구하였습니다.

거창한(?) 수학처럼 보이지만 우리의 학습 목적은 테일러 급수 자체를 공부하는 것이 아니고 for문을  공부하는 것입니다.

어렵지 않으므로 겁먹지(?) 마세요.

 

 

1.   로그 e의 제곱

로그 e의 제곱은 '='의 오른쪽에 있는 급수(수열의 합)로 근사해(정답에 가까운 답)를 구할 수 있습니다.

n의 값이 크면 클수록 오차(정답과의 차이)는 줄어듭니다.

n=1000000 일때 로그 e의 제곱값을 구하여 봅시다.

 

오른쪽의 급수를 관찰하여 봅시다.

  • 처음의 1을 1분의 1로 생각하고 변하는 것과 변하지 않는 것을 관찰합시다.
  • 분자는 1로서 변하지 않고,  분모는 1부터 n까지 변화하고, 부호가 더하기(+) 빼기(-)로 반복됩니다.
  • 변화하는 것은 for문을 사용하여 표현합니다.

다음 코딩을 분석하여 이해하세요.

n=1000000               
s=1                      # 부호 생성(더하기, 빼기)
r=0                      # 수식의 합(급수)
for i in range(1,n+1):   # i는 분모(1부터 n까지) 
    r+=s/i               # 분자를 분모(i)로 나누어 모두 합한다  
    s=-s                 # s는 분자이면서 부호(1, -1, 1, -1의 반복)
print(r)  

'''
출력은 0.6931471805599453

[참고] math 함수에 의한 계산은 다음과 같이 할 수 있습니다.
import math
a=math.log(2)
print(a)

'''

 

2. 원주율(파이)

원주율을 계산하는 테일러 급수는 다음과 같습니다.

코드를 완성하여 보세요.

n=1000000
s=1
r=0
for i in range(1,n+1):
    r+=????????????????
    s=-s
print(4*r)

'''
출력 결과입니다.
3.1415916535897743

'''

 

더보기
n=1000000
s=1
r=0
for i in range(1,n+1):
    r+=s/(2*i-1)
    s=-s
print(4*r)

'''
다음과 같이 코딩할 수도 있습니다.
n=1000000
s=4
r=0
for i in range(1,2*n+1,2):
    r+=s/i
    s=-s
print(r)  


또는, 다음과 같이 코딩할 수도 있습니다.
import math
a=math.pi
print(a)

'''

 

3. 자연대수(e)

!는 팩토리얼(factorial)입니다.  3!=3*2*1 등오로 계산합니다.

n=1000일 때 결과는 2.7182818284590455입니다.

코딩하여 보세요.

 

더보기
n=1000    # 팩토리얼 값은 매우 크므로 작은 숫자 사용 
f=1       # 팩토리얼 계산
r=1       # 합계를 구함. 수식의 처음에 있는 1을 예외 처리하여 r=1로 하였음  
for i in range(1,n+1):
    f*=i       # 팩토리얼 계산. f=1, 2, 6, 24 등으로 변화  
    r+=1/f
print(r)


'''
math 함수를 사용한 코딩입니다.
import math
a=math.e
print(a)
'''

 

4. 도전 문제

이 문제는 건너뛰어도 됩니다. 그러나 도전한다면 말리지는 않겠습니다.

x = 3.14159265 / 4

n = 50

으로 하여 계산하면 결과는 0.7071067805519556입니다.

더보기
n=50
x=3.14159265/4  
s=1
f=1
r=0
for i in range(1,2*n+1,2):
    r+=s*(x**i)/f 
    f*=(i+1)*(i+2)
    s=-s
print(r)

'''
6번 줄: 2*n+1 보다 2작은 수는 2*n-1

math 함수를 사용한 코딩입니다.
import math
a=math.sin(math.pi/4)
print(a)

'''

[참고]

x = 3.14159265 / 4 의 x는 radian(호도)입니다. degree(육십분값)으로 45도입니다.
sin(45)의 값을 구하면 0.7071067805519556입니다.
1 라디안은 반지름과 같은 길이의 호가 만드는 중심각입니다.
 radian=pi*degree/180의 관계가 있습니다.

 

 

수고하셨습니다.

안녕!

728x90
반응형