我正在进行迭代以找到高度(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
答案 0 :(得分:0)
这里最简单的方法是将它封装到一个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
查看代码的一般模式。您基本上正在使用k th 列更改您访问第一列的所有点。此外,llh_test
是一个矩阵,因此对于循环中的每次迭代,您都希望访问k th 列。 llh_test
现在应该是符合您规范的3 x 79
矩阵。