0

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

谢谢!

4

2 回答 2

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);

对其他条件做同样的事情。使用 && 代替 'and' 和 || 如果你想要'或'。

于 2013-07-23T03:24:22.043 回答
0

尝试使用atan2(). 此功能进行象限校正,我认为您正试图通过您的if陈述来实现。尝试这个:

direction{i} = (180 / pi) * atan2(u{i},v{i});
于 2013-07-23T07:39:01.893 回答