유리수 근사
유리수 근사 (Rational Approximations)
부동소수점 숫자를 분수 형태로 바꾸고 싶을 때가 있어요. 예를 들어 파이(π)를 정수 비율로 얼마나 가깝게 표현할 수 있는지 궁금하다면 유리수 근사가 답이 돼요. Octave는 이를 위한 rat와 rats 함수를 제공해요.
출처: 문서
본문
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
프로그래밍 참고 사항이에요.
- 출력이 하나일 때
rat는 연분수 전개인 문자열을 만들어요. 분자 하나·분모 하나로 된 단순 분수 문자열을 얻으려면rats를 쓰세요. rat가 만든 문자열은eval에 넘겨서, 사용된 허용 오차 범위 안에서 원래 입력을 되살릴 수 있어요.
함께 보면 좋은 함수: rats, format.
rats — 단순 분수 문자열
s = rats (x)
s = rats (x, len)
x를 분수로 나타낸 문자열로 변환해요. 부동소수점 숫자의 유리수 근사는 x = N/D를 만족하는 분자 N과 분모 D를 가진 단순 분수예요. 두 번째 선택 인자 len은 x의 원소를 나타내는 문자열의 최대 길이를 정의해요. 기본값은 13이에요. 가능한 가장 작은 유리수 근사의 길이가 len을 넘으면, 대신 공백으로 채워진 별표(*)를 돌려줘요. 행렬에서 문자열로, 다시 문자열에서 행렬로 바꾸는 예시예요.
r = rats (hilb (4));
x = str2num (r)
함께 보면 좋은 함수: rat, format.
더 알아보기
hilb같은 테스트 행렬 생성 함수와str2num문자열 변환 함수도 이어서 살펴보세요.- 출력 형식을 다루는
format함수도 함께 보면 좋아요.