【问题标题】:troubleshooting MATLAB Iteration codeMATLAB 迭代代码故障排除
【发布时间】:2014-09-11 10:17:02
【问题描述】:

我有一个迭代代码,用于查找一组高度的纬度/经度 (h_intercept)。这是一个 1x79 矩阵。

在第 22 个值之前它可以正常工作。我发现这是 h_test>h_intercept 的时候。我试图设置一个条件来重置它,但它不起作用。

当 h_test>h_intercept 时,所有范围值都变为零

例如

for j=20:40
rng_sat= sat_look_tcs_pass1(3,j); 
  u_sat=[sat_look_tcs_pass1(1,j)/sat_look_tcs_pass1(3,j);sat_look_tcs_pass1(2,j)/sat_look_tcs_pass1(3,j);sat_look_tcs_pass1(3,j)/sat_look_tcs_pass1(3,j)];
h_intercept=sat_look_pass1_llh(3,j)/2e3;
  h_test=zeros(1,3);
rng_test_min=0;
rng_test_max=rng_sat/2e3;
err=0.01;
while abs(h_intercept-h_test)>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 copter_llh(:,j)=(llh_test); h_interceptloop(:,j)=(h_intercept); end % code end

任何建议表示赞赏!

【问题讨论】:

    标签: matlab for-loop matrix iteration


    【解决方案1】:

    我认为错误出现在第一个循环中。在第一行中,您选择值 60 到 79:

    h_intercept=sat_look_pass1_llh(3,60:79)/2e3;
    

    但是,您在以下代码中仅使用该向量的长度而不是其值。 你迭代h_intercept的长度,即从1到19:

    for j=1:length(h_intercept)
    

    这意味着h_intercept=sat_look_pass1_llh(3,j)/2e3; 将得到错误的值,因为 j 的范围是 1 到 19,而不是 60 到 79。

    如果您将 for 循环更改为 for j=60:79,它应该可以工作(您也可以删除第一行 h_intercept=sat_look_pass1_llh(3,60:79)/2e3;

    【讨论】:

    • 您好,非常感谢您的回复!哇,我太傻了。但是,它仍然不适用于 h_test>H_intercept
    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多