정밀도를 낮춰 속도 향상시키기
계산의 정밀도를 낮춰 MATLAB®의 속도를 높입니다. Symbolic Math Toolbox™의 vpa
함수 및 digits
함수에서 제공하는 가변 정밀도 연산방식을 사용하여 정밀도를 낮춥니다. 정밀도를 낮추면 정확도를 낮춤으로써 성능이 향상됩니다. 자세한 내용은 수치 연산방식 또는 기호 연산방식 선택하기 항목을 참조하십시오.
예를 들어, 큰 행렬 C
의 리만 제타 함수를 구하는 데는 시간이 오래 걸립니다. 먼저 C
를 초기화합니다.
[X,Y] = meshgrid((0:0.0025:.75),(5:-0.05:0)); C = X + Y*i;
그런 다음 zeta(C)
를 계산하는 데 걸린 시간을 구합니다.
tic zeta(C); toc
Elapsed time is 340.204407 seconds.
이제 vpa
를 사용하여 낮은 정밀도로 이 연산을 반복합니다. 먼저 digits
를 사용하여 vpa
에서 사용하는 정밀도를 10
자리의 낮은 정밀도로 변경합니다. 그런 다음 vpa
를 사용하여 C
의 정밀도를 낮추고 zeta(C)
를 다시 구합니다. 연산 속도가 훨씬 더 빠릅니다.
digits(10) vpaC = vpa(C); tic zeta(vpaC); toc
Elapsed time is 113.792543 seconds.
참고
vpa
출력값은 기호 값입니다. 기호 값을 받지 않는 MATLAB 함수에 기호 출력값을 사용하려면 double
을 사용하여 기호 값을 배정밀도로 변환하십시오.
더 큰 행렬의 경우 계산 시간의 차이가 훨씬 더 클 수 있습니다. 예를 들어, 1001
×301
행렬 C
가 있다고 가정하겠습니다.
[X,Y] = meshgrid((0:0.0025:.75),(5:-0.005:0)); C = X + Y*i;
10자리 정밀도로 zeta(vpa(C))
를 실행하는 데 15분이 걸리지만 zeta(C)
를 실행하는 데는 3배가 걸립니다.
digits(10) vpaC = vpa(C); tic zeta(vpaC); toc
Elapsed time is 886.035806 seconds.
tic zeta(C); toc
Elapsed time is 2441.991572 seconds.
참고
정밀도를 높이려면 수치 계산의 정밀도 향상시키기 항목을 참조하십시오.