Main Content

수치 계산의 정밀도 향상시키기

기본적으로 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에 영향을 주지 않습니다. 예를 들어, pi100자리로 근사화해 보십시오.

vpa(pi,100)
ans =
3.14159265358979323846264338327950288419716939937510582097494
4592307816406286208998628034825342117068
digits	% digits remains 32
Digits = 32

가변 정밀도는 임의로 증가될 수 있습니다. pi500자리까지 구합니다.

digitsOld = digits(500);
vpa(pi)
digits(digitsOld)
ans =
3.1415926535897932384626433832795028841971693993751058209749
445923078164062862089986280348253421170679821480865132823066
470938446095505822317253594081284811174502841027019385211055
596446229489549303819644288109756659334461284756482337867831
652712019091456485669234603486104543266482133936072602491412
737245870066063155881748815209209628292540917153643678925903
600113305305488204665213841469519415116094330572703657595919
530921861173819326117931051185480744623799627495673518857527
248912279381830119491

digitsvpa유효 소수점 자릿수를 제어합니다. 예를 들어, 4자리 정확도로 1/111을 근사하면 처음 두 자리 숫자가 0이기 때문에 소수점 이하 여섯 자리를 반환합니다.

vpa(1/111,4)
ans =
0.009009

참고

정밀도를 낮춰서 성능을 향상시키는 방법은 정밀도를 낮춰 속도 향상시키기 항목을 참조하십시오.