유리수 근사

유리수 근사 (Rational Approximations)

부동소수점 숫자를 분수 형태로 바꾸고 싶을 때가 있어요. 예를 들어 파이(π)를 정수 비율로 얼마나 가깝게 표현할 수 있는지 궁금하다면 유리수 근사가 답이 돼요. Octave는 이를 위한 ratrats 함수를 제공해요.

출처: 문서

본문

rat — 유리수 근사

s = rat (x)
s = rat (x, tol)
[n, d] = rat (…)

tol이 정하는 허용 오차 안에서 x의 유리수 근사를 찾아요. tol을 지정하지 않으면 기본 허용 오차는 1e-6 * norm (x(:), 1)이에요.

출력 인자를 하나만 받으면, 연분수 전개(continued fraction expansion, 여러 항)를 담은 문자열을 돌려줘요. 출력 인자를 두 개 받으면, x = n ./ d를 만족하는 분자와 분모의 숫자 행렬을 돌려줘요. 예를 들어 보죠.

s = rat (pi)
⇒  s = 3 + 1/(7 + 1/16)

[n, d] = rat (pi)
⇒  n =  355
⇒  d =  113

n / d - pi
⇒  2.6676e-07

복소수 입력도 비슷하게 동작해요.

s = rat (0.5 + i * pi)
⇒  s = complex (1 + 1/(-2), 3 + 1/(7 + 1/16))

[n, d] = rat (0.5 + i * pi)
⇒  n =  113 + 710i
⇒  d =  226

n / d - (0.5 + i * pi)
⇒  0 + 2.6676e-07i

프로그래밍 참고 사항이에요.

  1. 출력이 하나일 때 rat는 연분수 전개인 문자열을 만들어요. 분자 하나·분모 하나로 된 단순 분수 문자열을 얻으려면 rats를 쓰세요.
  2. rat가 만든 문자열은 eval에 넘겨서, 사용된 허용 오차 범위 안에서 원래 입력을 되살릴 수 있어요.

함께 보면 좋은 함수: rats, format.

rats — 단순 분수 문자열

s = rats (x)
s = rats (x, len)

x를 분수로 나타낸 문자열로 변환해요. 부동소수점 숫자의 유리수 근사는 x = N/D를 만족하는 분자 N과 분모 D를 가진 단순 분수예요. 두 번째 선택 인자 lenx의 원소를 나타내는 문자열의 최대 길이를 정의해요. 기본값은 13이에요. 가능한 가장 작은 유리수 근사의 길이가 len을 넘으면, 대신 공백으로 채워진 별표(*)를 돌려줘요. 행렬에서 문자열로, 다시 문자열에서 행렬로 바꾸는 예시예요.

r = rats (hilb (4));
x = str2num (r)

함께 보면 좋은 함수: rat, format.

더 알아보기

  • hilb 같은 테스트 행렬 생성 함수와 str2num 문자열 변환 함수도 이어서 살펴보세요.
  • 출력 형식을 다루는 format 함수도 함께 보면 좋아요.