Matlab 修改多输入的迭代

Matlab 修改多输入的迭代,matlab,matrix,iteration,Matlab,Matrix,Iteration,我正在进行迭代,以找到高度(h_截距)处相应的纬度/经度。我的代码适用于单个高度值。但是,我希望找到79高度的lat/long(1x79矩阵),因此有一个3x79矩阵的输出(llh_测试)。我尝试了一个for循环,但似乎没有得到我想要的结果。我可能在做一些愚蠢的事情 基本上,我需要对其进行修改,使其能够在rng_sat、u_sat和h_intercept都是1x79矩阵的情况下运行。在移动到rng_sat、u_sat和h_intercept的下一个值之前,它需要逐步完成整个迭代 此外,我想存储所

我正在进行迭代,以找到高度(h_截距)处相应的纬度/经度。我的代码适用于单个高度值。但是,我希望找到79高度的lat/long(1x79矩阵),因此有一个3x79矩阵的输出(llh_测试)。我尝试了一个for循环,但似乎没有得到我想要的结果。我可能在做一些愚蠢的事情

基本上,我需要对其进行修改,使其能够在rng_sat、u_sat和h_intercept都是1x79矩阵的情况下运行。在移动到rng_sat、u_sat和h_intercept的下一个值之前,它需要逐步完成整个迭代

此外,我想存储所有llh_测试值(3x79矩阵)


这里最简单的方法是将其封装到一个
for
循环中,并更改访问核心变量的方式,以便使用循环索引。查看您的代码,我假设
sat\u look\u tcs\u 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 
看看代码的一般模式。实际上,您正在更改使用第k列访问第一列的所有点。另外,
llh_test
是一个矩阵,因此对于循环中的每个迭代,您都希望访问第k列<代码>llh_测试现在应该是符合您规范的
3 x 79
矩阵


祝你好运

是的,谢谢你。上周我设法让它工作起来了。一直关注新问题哈!
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