if else结构错误

时间:2014-08-26 06:15:18

标签: matlab if-statement for-loop matrix

在这段代码中,我必须找到距离值,我必须保存小于或等于425且大于零的值。我估计在这个范围内有大约18000个值,我必须用x1,x2,y1,y2值保存所有值。但这种结构给了我错误。 var3(variable_3)给出了正确的答案,它给出了整个距离矩阵,但是当我们保存小于425的值时,它会导致错误,请帮助我,谢谢.var4矩阵给出了零值。

    var3 = zeros (258840,1);
    var4 = zeros (18000,5);
    m=1;
    for n = 1: 258840

         x1 = var1 (pairpoints(n,1), 1);          
         x2 = var1 (pairpoints(n,2), 1);
         y1 = var1 (pairpoints(n,1), 2);
         y2 = var1 (pairpoints(n,2), 2);

         % distance formula 
         d1=(((x2-x1)^2)+((y2-y1)^2))^(0.5);

         % save distance values in matrix named var3
         lin = sub2ind(size(var3),n,1);
         var3(lin) = d1;

            if 0<d1<426

              line = sub2ind(size(var4),m,1);
              var4(line) = x1;
              line = sub2ind(size(var4),m,2);
              var4(line) = x2;
              line = sub2ind(size(var4),m,3);
              var4(line) = y1;
              line = sub2ind(size(var4),m,4);
              var4(line) = y2;
              line = sub2ind(size(var4),m,5);
              var4(line) = d1;
              m=m+1;

             end
               end

1 个答案:

答案 0 :(得分:1)

首先:如果你提供的代码是可运行的,它会更容易找到错误;那就是你需要提供var1pairpoints,或至少解释它们是什么!

我仍然可能找到了你的问题。我可以在您的代码中看到的问题是if - 语句:if 0<d1<426。当Matlab看到它时,它将其解释为if (0<d1)<426。现在0<d1logical,也就是说,它总是1(true)或0(false)。 if语句可以是if 1<426if 0<426,因此无论您为d1获得哪个值,您都将始终输入if - 分支。

如果您想测试d1是否小于426且大于0,您应该写下:if (0<d1)&&(d1<426)

我希望这可以帮到你!