对MATLAB迭代代码进行故障诊断

时间:2014-09-11 10:17:03

标签: matlab for-loop matrix iteration

我有一个迭代代码,我用它来查找一组高度(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

任何建议都赞赏!

1 个答案:

答案 0 :(得分:0)

我认为错误发生在第一个循环中。在第一行中,您可以选择值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;