내 프로그램에서 5823x8153 번 실행해야하는 for 루프가 있습니다. for 루프는 i = 3944 및 j = 8153이 될 때까지 매우 빠르게 실행됩니다. 그러나이 지점 이후에 for 루프는 매우 느리게 실행되어 거의이 시점에서 멈 춥니 다. 사전 할당과 같은 몇몇 가속 방법을 시도하고 for 루프 앞에 몇 가지 변수를 계산했지만 작동하지 않았습니다. 문제가되는 for 루프는 다음과 같습니다. 이 문제에 대해 저를 도울 수 있습니까? 그건 그렇고, 그것은 작은 부분 (1000x1000 또는 3000x3000) 같은 데이터의 좋은 작품과 나는 64GB의 RAM이있는 워크 스테이션을 사용 하여이 프로그램을 실행합니다. 귀하의 의견을 기다리고 있습니다.Matlab은 for 루프에서 약간의 반복 후 매우 느리게 실행됩니다 (0122).
ro1 = (180*3600)/pi;
ro = ro1^2;
sigma_h = horizontal_prec_secs;
sigma_v = vertical_prec_secs;
error_ellip_dim = nan(5823,8153,3);
for i = 1:5823
for j = 1:8153
sigma_r = range_precision(i,j);
h = horizontal_angle(i,j);
v = vertical_angle(i,j);
r = range(i,j)*1000;
if (isnan(h))||(isnan(sigma_r))
error_ellip_dim(i,j,:) = NaN;
else
EXX(1,1) = sigma_r^2*COSDH(i,j)^2*COSDV(i,j)^2 + (r^2*sigma_h^2*COSDV(i,j)^2*SINDH(i,j)^2)/ro + (r^2*sigma_v^2*COSDH(i,j)^2*SINDV(i,j)^2)/ro;
EXX(1,2) = sigma_r^2*COSDH(i,j)*COSDV(i,j)^2*SINDH(i,j) - (r^2*sigma_h^2*COSDH(i,j)*COSDV(i,j)^2*SINDH(i,j))/ro + (r^2*sigma_v^2*COSDH(i,j)*SINDH(i,j)*SINDV(i,j)^2)/ro;
EXX(1,3) = COSDH(i,j)*COSDV(i,j)*SINDV(i,j)*sigma_r^2 - (r^2*sigma_v^2*COSDH(i,j)*COSDV(i,j)*SINDV(i,j))/ro;
EXX(2,1) = EXX(1,2);
EXX(2,2) = sigma_r^2*COSDV(i,j)^2*SINDH(i,j)^2 + (r^2*sigma_h^2*COSDH(i,j)^2*COSDV(i,j)^2)/ro + (r^2*sigma_v^2*SINDH(i,j)^2*SINDV(i,j)^2)/ro;
EXX(2,3) = COSDV(i,j)*SINDH(i,j)*SINDV(i,j)*sigma_r^2 - (r^2*sigma_v^2*COSDV(i,j)*SINDH(i,j)*SINDV(i,j))/ro;
EXX(3,1) = EXX(1,3);
EXX(3,2) = EXX(2,3);
EXX(3,3) = sigma_r^2*SINDV(i,j)^2 + (r^2*sigma_v^2*COSDV(i,j)^2)/ro;
[eig_vec_mat,eig_val_mat] = eig(EXX);
ellip_params = sqrt(diag(eig_val_mat));
error_ellip_dim(i,j,:) = ellip_params';
end
end
i
j
end
루프 인덱스를 줄여서 문제를 설명 할 수있을 정도로 커지도록 루프 인덱스를 줄이면 matlab의 프로파일 러의 출력은 어떻게됩니까? –
중단 점 막대를 마우스 오른쪽 버튼으로 클릭하여 '조건부 중단 점'을 시도 할 수 있습니다. 'i == 3944 && j == 8153'을 설정하고 단계별로 가서 문제가 발생한 곳을 확인하십시오. – Adiel