Main Content

수치 형식에서 기호 형식으로 변환

이 항목에서는 Symbolic Math Toolbox™가 숫자를 기호 형식으로 변환하는 방법을 보여줍니다. 기호 연산방식 및 수치 연산방식에 대한 개요는 수치 연산방식 또는 기호 연산방식 선택하기 항목을 참조하십시오.

숫자형 입력값을 기호 형식으로 변환하려면 sym 명령을 사용하십시오. 기본적으로 sym은 숫자 표현식의 유리수 근삿값을 반환합니다.

t = 0.1;
sym(t)
ans = 

110

sym을 사용하면 배정밀도 값 0.1이 정확한 기호 값 110으로 근사하는 것을 확인할 수 있습니다. 일반적으로 sym은 정확한 기호 형식을 반환하기 위해 부동소수점 입력값의 반올림 오차를 수정하려고 시도합니다. 특히, sympq, pπq, (pq)12, 2q10q 형식과 일치하는 숫자형 입력값의 반올림 오차를 수정합니다. 여기서 pq는 적당한 크기의 정수입니다.

이러한 형식에 대해, sym이 부동소수점 입력값을 정확한 기호 형식으로 변환하는 것을 확인합니다. 먼저, 17, π12의 수치적 근삿값을 구합니다.

N = [1/7 pi 1/sqrt(2)]
N = 1×3

    0.1429    3.1416    0.7071

수치 근삿값을 정확한 기호 형식으로 변환합니다. sym은 반올림 오차를 수정합니다.

S = sym(N)
S = 

(17π22)

입력값을 따옴표로 묶어 sym이 입력값을 그대로 받도록 할 수 있습니다. 이전 입력값 0.142857142857143에서 이 동작을 확인합니다. sym 함수는 입력값을 1/7로 변환하지 않습니다.

sym('0.142857142857143')
ans = 0.142857142857143

큰 숫자를 변환할 때는 따옴표를 사용하여 정확하게 표현합니다. sym(133333333333333333333)sym('133333333333333333333')을 비교하여 이 동작을 확인합니다.

sym(1333333333333333333)
ans = 1333333333333333248
sym('1333333333333333333')
ans = 1333333333333333333

선택적인 두 번째 인수('f', 'r', 'e' 또는 'd')를 사용하여 sym이 부동소수점 숫자를 변환하기 위해 사용하는 기법을 지정할 수 있습니다. 유리수 형식의 경우 디폴트 플래그는 'r'입니다.

유리수 기호 형식으로 변환

'r' 플래그를 지정한 sym을 호출하여 입력값을 정확한 유리수 형식으로 변환합니다. 이는 플래그 없이 sym을 호출할 때 발생하는 디폴트 동작입니다.

t = 0.1;
sym(t,'r')
ans = 

110

부동소수점 전개를 사용한 변환

플래그 'f'를 지정하여 sym을 호출하면 symN2e을 사용하여 배정밀도 부동소수점 숫자를 숫자형 값으로 변환합니다. 여기서 Ne는 각각 지수와 가수입니다.

부동소수점 전개를 사용하여 t를 변환합니다.

sym(t,'f')
ans = 

360287970189639736028797018963968

오차 항이 있는 유리수 기호 형식으로 변환

플래그 'e'를 지정하여 sym을 호출하면 symt의 유리수 형식 및 t의 추정된 정확한 값과 해당 부동소수점 표현 사이의 오차를 반환합니다. 이 오차는 eps(부동소수점 상대 정밀도)로 표현됩니다.

t를 기호 형식으로 변환합니다. 추정된 기호 형식과 해당 부동소수점 값 사이의 오차를 반환합니다.

sym(t,'e')
ans = 

eps40+110

오차 항 eps/40sym('0.1')sym(0.1) 간의 차이입니다.

소수 형식으로 변환

플래그 'd'를 지정한 sym을 호출하면 sym은 입력값의 소수 전개를 반환합니다. digits 함수는 사용되는 유효 자릿수를 지정합니다. digits의 디폴트 값은 32입니다.

sym(t,'d')
ans = 0.10000000000000000555111512312578

digits를 사용하여 유효 자릿수를 변경합니다.

digitsOld = digits(7);
sym(t,'d')
ans = 0.1

추후 계산을 위해 digits의 이전 값을 복원합니다.

digits(digitsOld)

가변 정밀도로 변환

vpa를 사용하여 가변 정밀도 부동소수점 연산방식으로 기호 숫자를 만들 수 있습니다. 기본적으로 vpa는 32자리의 유효 자릿수로 값을 계산합니다.

piVpa = vpa(pi)
piVpa = 3.1415926535897932384626433832795

log(2)와 같은 숫자형 입력값에 대해 vpa를 사용하면 숫자 표현식은 먼저 32자리의 유효 자릿수 미만의 MATLAB® 디폴트 배정밀도 숫자로 계산됩니다. 그런 다음, vpa는 정확도가 떨어질 수 있는 해당 배정밀도 숫자에 적용됩니다. 보다 정확한 결과를 얻기 위해서는 sym을 사용하여 숫자 표현식을 기호 표현식으로 변환한 다음 vpa를 사용하여 가변 정밀도로 결과를 계산합니다. 예를 들어, 17자리 정밀도와 20자리 정밀도로 log(2)를 구합니다.

vpaOnDouble = vpa(log(2))
vpaOnDouble = 0.69314718055994528622676398299518
vpaOnSym_17 = vpa(log(sym(2)),17)
vpaOnSym_17 = 0.69314718055994531
vpaOnSym_20 = vpa(log(sym(2)),20)
vpaOnSym_20 = 0.69314718055994530942

큰 숫자를 변환할 때는 따옴표를 사용하여 정확하게 표현합니다.

inaccurateNum = vpa(123456789012345678)
inaccurateNum = 123456789012345680.0
accurateNum = vpa('123456789012345678')
accurateNum = 123456789012345678.0

관련 항목