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