从一对单元阵列中得到的矢量

时间:2013-07-23 03:05:27

标签: matlab if-statement

MatLab中新的布尔逻辑,但我有变量u和v,它们是单元阵列(1 x 2928长),单元矩阵分别为58 x 58,u和v值(风)。我需要使用给出的方程式来计算合成矢量(风向),使用下面的等式,但我无法弄清楚这一点!任何帮助将不胜感激!

for i = 1:2928
    if (v > 0) 
        direction {i} = ((180 / pi) * arctan((u/v)) + 180);
    elseif (u < 0 and v < 0);
        direction {i} = ((180 / pi) * arctan((u/v)) + 0);
    else (u > 0 and v < 0);
        direction {i} = ((180 / pi) * arctan((u/v)) + 360);
    end
end

谢谢!

2 个答案:

答案 0 :(得分:0)

由于您使用for循环逐个元素地进行计算,因此您还需要指定v(i)和u(i)元素。

for i = 1:2928
   if (v(i) > 0) 
      direction(i) = ((180 / pi) * arctan((u(i)/v(i))) + 180);
   elseif (u(i) < 0 && v(i) < 0);
      direction(i) = ((180 / pi) * arctan((u(i)/v(i))) + 0);
   else (u(i) > 0 && v(i) < 0);
      direction(i) = ((180 / pi) * arctan((u(i)/v(i))) + 360);
   end
end

有一种更简单,更优雅的方法可以进行与上述相同的计算,但没有for循环。

试试这个:

direction(v>0) = ((180 / pi) * arctan((u(v>0)./v(v>0))) + 180);

对其他条件也这样做。使用&amp;&amp;而不是'和'和||如果你想'或'。

答案 1 :(得分:0)

尝试使用atan2()。此函数执行象限更正,我认为您尝试使用if语句实现。试试这个:

direction{i} = (180 / pi) * atan2(u{i},v{i});