2013-07-23 2 views
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 

Спасибо!

+0

Совет: никогда не говорите здесь срочно, потому что люди дают добровольный взнос в зависимости от их доступности. Чтобы помочь им помочь вам, когда вы что-то пробовали, всегда говорите об ошибке или побочном поведении, которое вы получаете. Когда вы это делаете, они угадывают проблему, прежде чем смотреть на ваш код, и у вас больше шансов получить ответ. Скажем так, в чем проблема с вашим кодом? Какова ошибка, возвращаемая Matlab? Каково неожиданное поведение? – innoSPG

ответ

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

сделать то же самое для других условий. Используйте & & вместо 'и' и || если хотите "или".

0

Попробуйте использовать atan2(). Эта функция выполняет квадрантную коррекцию, которую, как я думаю, вы пытаетесь достичь с помощью своего заявления if. Попробуйте следующее:

direction{i} = (180/pi) * atan2(u{i},v{i}); 
Смежные вопросы