수치 계산의 정밀도 향상시키기
기본적으로 MATLAB®은 16자리의 정밀도를 사용합니다. 정확도를 높이려면 Symbolic Math Toolbox™의 vpa
함수를 사용하십시오. vpa
는 제한 없이 증가시킬 수 있는 가변 정밀도를 제공합니다.
가변 정밀도 연산방식을 선택한 경우 기본적으로 vpa
는 32자리의 유효 소수점 자릿수 정밀도를 사용합니다. 자세한 내용은 수치 연산방식 또는 기호 연산방식 선택하기 항목을 참조하십시오. digits
함수를 사용하여 더 높은 정밀도를 설정할 수 있습니다.
디폴트 정밀도인 32자리를 사용하여 합을 근사화해 보겠습니다. 하나 이상의 입력값을 vpa
이 감싸고 있는 경우 다른 모든 입력값이 자동으로 가변 정밀도로 변환됩니다.
vpa(1/3) + 1/2
ans = 0.83333333333333333333333333333333
exp(vpa(200))
과 같이 모든 내부 입력값은 vpa
로 감싸야 합니다. 그러지 않으면 입력값이 MATLAB에 의해 자동으로 배정밀도로 변환됩니다.
digits
를 사용하여 정밀도를 50
자리로 늘리고 digits
의 이전 값을 digitsOld
에 저장합니다. 합산을 반복합니다.
digitsOld = digits(50); sum50 = vpa(1/3) + 1/2
sum50 = 0.83333333333333333333333333333333333333333333333333
추후 계산을 위해 자릿수를 이전 값으로 복원합니다.
digits(digitsOld)
참고
vpa
출력값은 기호 값입니다. 기호 값을 받지 않는 MATLAB 함수에 기호 출력값을 사용하려면 double
을 사용하여 기호 값을 배정밀도로 변환하십시오.
digits
를 호출하여 현재 digits
설정을 확인합니다.
digits
Digits = 32
정밀도를 vpa
의 두 번째 입력값으로 지정하여 단일 vpa
호출의 정밀도를 변경합니다. 이 호출은 digits
에 영향을 주지 않습니다. 예를 들어, pi
를 100
자리로 근사화해 보십시오.
vpa(pi,100)
ans = 3.14159265358979323846264338327950288419716939937510582097494 4592307816406286208998628034825342117068
digits % digits remains 32
Digits = 32
가변 정밀도는 임의로 증가될 수 있습니다. pi
를 500
자리까지 구합니다.
digitsOld = digits(500); vpa(pi) digits(digitsOld)
ans = 3.1415926535897932384626433832795028841971693993751058209749 445923078164062862089986280348253421170679821480865132823066 470938446095505822317253594081284811174502841027019385211055 596446229489549303819644288109756659334461284756482337867831 652712019091456485669234603486104543266482133936072602491412 737245870066063155881748815209209628292540917153643678925903 600113305305488204665213841469519415116094330572703657595919 530921861173819326117931051185480744623799627495673518857527 248912279381830119491
digits
및 vpa
는 유효 소수점 자릿수를 제어합니다. 예를 들어, 4자리 정확도로 1/111
을 근사하면 처음 두 자리 숫자가 0이기 때문에 소수점 이하 여섯 자리를 반환합니다.
vpa(1/111,4)
ans = 0.009009
참고
정밀도를 낮춰서 성능을 향상시키는 방법은 정밀도를 낮춰 속도 향상시키기 항목을 참조하십시오.