Main Content

정밀도를 낮춰 속도 향상시키기

계산의 정밀도를 낮춰 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.

참고

정밀도를 높이려면 수치 계산의 정밀도 향상시키기 항목을 참조하십시오.