Main Content

고정밀도 연산방식으로 준정수 구하기

PSLQ 알고리즘과 같은 정수 관계를 구하는 알고리즘[1]은 정확한 결과 산출을 위해 고정밀도 연산방식을 필요로 합니다. 알고리즘에 대한 입력값의 정밀도가 높아질수록 알고리즘이 수치적 아티팩트 대신 정수 관계를 구할 가능성이 높아집니다. PSLQ 알고리즘에서는 거짓양성(예: 준정수로 인한 거짓양성)이 발생할 수 있습니다.

이 예제에서는 Symbolic Math Toolbox™의 가변 정밀도 연산방식을 사용하여 준정수(즉, 정수에 매우 가까운 숫자)를 구하는 방법을 보여줍니다. 이 예제에서는 정수 n=1, ...,200에 대해 exp(πn) 또는 exp(π n) 형식을 취한 준정수(또는 근사 정수)를 구합니다.

먼저, 준정수[2]의 잘 알려진 예인 실수 exp(π163)을 살펴보겠습니다. 이 실수를 정확한 기호 숫자로 만듭니다.

r = exp(pi*sqrt(sym(163)))
r = eπ163

vpa를 사용하여 가변 정밀도 연산방식으로 이 숫자를 계산합니다. 기본적으로 vpa는 32자리의 유효 자릿수로 값을 계산합니다.

vpa(r)
ans = 262537412640768743.99999999999925

digits를 사용하여 유효 자릿수를 더 높은 정밀도로 변경할 수 있습니다. 동일한 숫자를 40자리의 유효 자릿수로 계산합니다.

digits(40)
vpa(r)
ans = 262537412640768743.9999999999992500725972

이 숫자는 정수에 매우 가깝습니다. 이 실수와 이 실수에 가장 가까운 정수 간의 차이를 구합니다. vpa를 사용하여 이 결과를 40자리의 유효 자릿수로 계산합니다.

dr = vpa(round(r)-r)
dr = 0.0000000000007499274028018143151532171817442410122968

다음으로, 정수 n=1, ...,200에 대해 exp(πn) 형식을 취한 준정수를 구합니다. 이 수를 정확한 기호 숫자로 만듭니다.

A = exp(pi*sqrt(sym(1:200)));

exp(π200)의 정수부에 소수점 이하 20자리를 더한 자릿수를 유효 자릿수로 설정합니다.

d = log10(A(end));
digits(ceil(d) + 20)

이 일련의 숫자와 그러한 숫자에 가장 가까운 정수 간의 차이를 계산합니다. 반올림 오차가 0.0001 미만인 준정수를 구합니다. 결과를 정확한 기호 형식으로 표시합니다.

B = vpa(round(A)-A);
A_nearint = A(abs(B)<0.0001)'
A_nearint = 

(eπ37eπ58eπ67eπ163)

소수점 이하 20자리 이상의 정밀도로 준정수를 계산합니다.

A_nearint = vpa(A_nearint)
A_nearint = 

(199148647.999978046551856766500923875335924591257751.99999982221324146957619235527147197952743.9999986624542245068292613126262537412640768743.9999999999992500725972)

차이에 대한 히스토그램을 플로팅하여 해당 분포를 표시합니다. 이 분포는 0에 가까운 차이가 많이 발생함을 보여줍니다. 여기서 준정수는 exp(πn) 형식입니다.

histogram(double(B),40)

다음으로, 정수 n=1, ...,200에 대해 exp(π n) 형식을 취한 준정수를 구합니다. 이 수를 정확한 기호 숫자로 만듭니다.

A = exp(sym(pi)*1:200);

exp(π200)의 정수부에 소수점 이하 20자리를 더한 자릿수를 유효 자릿수로 설정합니다.

d = log10(A(end));
digits(ceil(d) + 20)

이 일련의 숫자와 그러한 숫자에 가장 가까운 정수 간의 차이를 계산합니다. 반올림 오차가 0.0001 미만인 준정수를 구합니다. 결과는 비어 있는 sym 배열이며, 이는 이 조건을 만족하는 준정수가 없음을 의미합니다.

B = vpa(round(A)-A);
A_nearint = A(abs(B)<0.0001)
 
A_nearint =
 
Empty sym: 1-by-0
 

차이에 대한 히스토그램을 플로팅합니다. 히스토그램은 비교적 균일한 분포를 나타내고 있으며 exp(π n) 형식에서는 준정수가 많이 발생하지 않음을 보여줍니다. 이 구체적인 예에서는 반올림 오차가 0.0001 미만인 준정수가 없습니다.

histogram(double(B),40)

마지막으로, 추후 계산을 위해 32자리의 유효 자릿수의 디폴트 정밀도를 복원합니다.

digits(32)

참고 문헌

[1] “Integer Relation Algorithm”, In Wikipedia, April 9, 2022. https://en.wikipedia.org/w/index.php?title=Integer_relation_algorithm&oldid=1081697113.

[2] “Almost Integer”, In Wikipedia, December 4, 2021. https://en.wikipedia.org/w/index.php?title=Almost_integer&oldid=1058543590.

참고 항목

| |

관련 항목