【问题标题】:Modifying Iteration for Multiple Inputs修改多个输入的迭代
【发布时间】:2014-09-10 16:03:10
【问题描述】:

我正在进行迭代以在某个高度 (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

【问题讨论】:

    标签: matlab matrix iteration


    【解决方案1】:

    这里最简单的做法是将其封装到单个for 循环中,并更改访问核心变量的方式,以便改为使用循环索引。查看您的代码,我假设 sat_look_tcs_pass1 是一个 3 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 
    

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

    祝你好运!

    【讨论】:

    • 是的,谢谢。上周我设法让这个工作。总是解决新问题哈!
    猜你喜欢
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2018-05-28
    • 2017-12-05
    相关资源
    最近更新 更多