유리수의 자연 로그를 임의의 정밀도 이상의 정밀도로 유리수로 근사

6516 단어 수치 계산
했던 테마이지만,
고등학교 수학 3까지의 지식이 있으면 이해 및 구현이 용이하기 때문에, 투고하겠습니다.

입력: 음이 아닌 유리수 m(!=1) & 정밀도 p (P>0)
목표: |ln(m)-A|방법:

다음 두 가지 명제가 입증됩니다. 단, m>1
(i)

(ii)

(i)는 n에 관한 귀납법,
(ii)는 0<=t<=x<=(m-1)/(m+1)이라는 부등식을 이용하면 됩니다.

(i), (ii)에서,

를 얻을 수 있으므로, (우변)m<1인 경우는 ㏑(1/m)의 근사값을 구하여 -㏑(1/m)을 출력합니다.

아래, 파이썬 코드
Python

import numpy as np

n=0.03 #input
m=n if n>=1 else 1/n 
#print(m)
p=0.0001 #input


def error(m,n):
    denom=2*m*(2*n+1)*(m+1)**(2*n-1)    
    return ((m+1)**2)*((m-1)**(2*n-1))/denom

def ap_A(n,m):
    s=0
    for k in range(1,n+1):
       r=((m-1)/(m+1))**(2*k-1)
       s+=r/(2*k-1)
       #print(s)
    return 2*s

def n_finder(m,p):
    n=1
    while error(m,n)>p:
        n+=1
        #print(n,error(m,n))
    return n

ap=ap_A(n_finder(m,p),m)
if n<1: ap=-ap
print("An approximate value A s.t. |ln(n)-A|<p is ", ap) # output of result
print(abs(np.log(n)-ap)<p) # check

좋은 웹페이지 즐겨찾기