2014-09-10 3 views
0

높이 (h_intercept)에서 해당 위도/경도를 찾기 위해 반복 작업을 수행하고 있습니다. 내 코드는 단일 높이 값에 대해 완벽하게 작동합니다. 그러나, 나는 79 높이의 위도/경도 (1x79 행렬)를 찾고 따라서 3x79 행렬 (llh_test) 인 출력을 원합니다. for 루프를 시도했지만 원하는 결과를 얻지 못하는 것 같습니다. 나는 아마 어리석은 짓을하고있다.다중 입력에 대한 반복 수정

기본적으로 rng_sat, u_sat 및 h_intercept가 모두 1x79 매트릭스로 실행되도록 수정해야합니다. 그것은, 내가 llh_test 모든 값을 저장할 rng_sat, u_sat 및 h_intercept 또한

의 다음 값으로 이동하기 전에 전체 반복을 통해 단계 필요 (3x79 매트릭스)

rng_sat= sat_look_tcs_pass1(3,1)/2e2; 
u_sat=[sat_look_tcs_pass1(1,1)/sat_look_tcs_pass1(3,1);sat_look_tcs_pass1(2,1)/sat_look_tcs_pass1(3,1);sat_look_tcs_pass1(3,1)/sat_look_tcs_pass1(3,1)]; 
h_intercept=sat_look_pass1_llh(3,1)/2e3; 
h_test=0; 
rng_test_min=0; 
rng_test_max=rng_sat; 
err=0.01; 
while abs(h_test-h_intercept)>err 
    rng_test=(rng_test_min+rng_test_max)/2; 
    tcs_test=u_sat*rng_test; 
    llh_test=tcs2llhT(tcs_test,station_llh); 
    h_test=llh_test(3,:); 
    if h_test>=h_intercept; 
     rng_test_max=rng_test; 
    else 
     rng_test_min=rng_test; 
    end 
end 

답변

0

쉬운 일에 이것을 하나의 for 루프로 캡슐화하고 루프 변수를 대신 사용하도록 핵심 변수에 액세스하는 방식을 변경하십시오. 귀하의 코드를 보면 sat_look_tcs_pass13 x 79 행렬이라고 가정합니다. 또한 출력 높이가 h_test은 단일 값이라고 가정합니다. h_test = llh_test(3,:)을 수행 할 때 h_test은 실제로 세 번째 행의 모든 ​​열을 가져 오려고하므로 벡터가됩니다. 이 값은 배열이 아니라 단일 값이라고 가정합니다.

이 코드를 수정하려면 실제로 아무런 노력이 필요하지 않으므로 여기에서 수정해야합니다.

llh_test = zeros(3,79); %// Preallocate 
for k = 1 : 79 %// You have 79 values to go through 
    rng_sat = sat_look_tcs_pass1(3,k)/2e2; %// NEW Change to k 
    u_sat = [sat_look_tcs_pass1(1,k)/sat_look_tcs_pass1(3,k); ... 
       sat_look_tcs_pass1(2,k)/sat_look_tcs_pass1(3,k);... 
       sat_look_tcs_pass1(3,k)/sat_look_tcs_pass1(3,k)]; %// NEW - Change to k 
    h_intercept = sat_look_pass1_llh(3,k)/2e3; %// NEW - Change to k 
    rng_test_min=0; 
    rng_test_max=rng_sat; 
    err=0.01; 
    while abs(h_test-h_intercept) > err 
     rng_test=(rng_test_min+rng_test_max)/2; 
     tcs_test=u_sat*rng_test; 
     llh_test(:,k) = tcs2llhT(tcs_test,station_llh); %// NEW - llh_test is now a matrix 
     h_test = llh_test(3,k); %// NEW - Changed the way we are accessing llh_test 
     if h_test >= h_intercept 
      rng_test_max=rng_test; 
     else 
      rng_test_min=rng_test; 
     end 
    end 
end 

이 코드의 일반적인 패턴을 살펴 보자 어디서나 당신은 내가 수정하고 다른 어떤 원본 코드입니다 %// NEW입니다 참조하십시오. 기본적으로 k 번째 열을 사용하여 첫 번째 열에 액세스하는 모든 지점을 변경하고 있습니다. 또한 llh_test은 행렬이므로 루프의 각 반복마다 k 번째 열에 액세스하려고합니다. llh_test은 이제 사용자 사양에 따라 3 x 79 행렬이어야합니다.

행운을 빈다.

+0

예, 감사합니다. 나는 지난 주에이 일을 할 수 있었다. 항상 새로운 문제 하에! – Buzz92