修改多个输入的迭代

时间:2014-09-10 16:03:11

标签: matlab matrix iteration

我正在进行迭代以找到高度(h_intercept)的相应纬度/经度。我的代码适用于单个高度值。但是,我想找到纬度/长度为79的高度(1x79矩阵),因此输出为3x79矩阵(llh_test)。我试过了一个for循环,但我似乎无法得到我想要的结果。我可能做了一些愚蠢的事。

基本上,我需要修改它,因此它将使用rng_sat,u_sat和h_intercept运行,所有这些都是1x79矩阵。它需要逐步完成整个迭代,然后再转到rng_sat,u_sat和h_intercept的下一个值

另外,我想存储所有llh_test值(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

1 个答案:

答案 0 :(得分:0)

这里最简单的方法是将它封装到一个for循环中,并改变你访问核心变量的方式,这样你就可以使用循环索引了。查看代码,我假设sat_look_tcs_pass13 x 79矩阵。我还假设输出高度h_test是单个值,因为当你执行h_test = llh_test(3,:)时,h_test实际上会成为一个向量,因为你试图获得所有第三行的列。我将假设这是一个单独的值,而不是数组。

要修改此代码,这实际上根本不会付出任何努力,所以这是您需要修改的地方。您看到的任何地方%// NEW都是我修改过的地方,其他任何内容都是您的原始代码:

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 

查看代码的一般模式。您基本上正在使用k th 列更改您访问第一列的所有点。此外,llh_test是一个矩阵,因此对于循环中的每次迭代,您都希望访问k th 列。 llh_test现在应该是符合您规范的3 x 79矩阵。

祝你好运!