Matlab复合'if'语句没有给出预期的结果

时间:2013-06-03 15:26:10

标签: matlab for-loop

从本文http://adsabs.harvard.edu/abs/1992PASJ...44..493K编写等式(5)的程序时,

enter image description here

我想我犯了一些错误(下面)。我不知道如何在等式中包含'或'。

    if alpha_sgp<alpha<=(alpha_sgp-180)
        if p<=180-t
          P=p+t;
        else %p>180-t
          P=p+t-180;
        end
    elseif alpha<=alpha_sgp | (alpha_sgp-180)<alpha   
        if p>=t
          P=p-t;
        else %p<t
          P=p-t+180;
        end
    end

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

我认为您的陈述存在问题:

if alpha_sgp<alpha<=(alpha_sgp-180)

虽然在Matlab中这在语法上是正确的,但它并没有按照你的想法行事。

简单示例:

a=1;b=2;c=3;
disp(a<b<c)

将返回1(true)。 BUT

disp(a<c<b)

还会返回1。这与操作顺序有关,并且在将结果与a<b进行比较之前,将评估类型1的子表达式(c)。因此

a<b<c

相当于

(a<b) < c

相当于

If ( (a < b) & (1 < c)) | ( (a >= b ) & (0 < c) )

你真正想要的第一行是

(alpha_sgp<alpha) & (alpha<=(alpha_sgp-180))

除了确保你正确地从度数到弧度等进行转换之外,我建议你坚持使用内置的pi - 而不是以度数工作,并且必须使用函数比如sind而不是sin

此外 - 您对“不知道如何加入for”发表了一个好奇的评论 - 当没有for时,只有or的等式。这可能是你的错字吗?

最后 - 请注意,第二组条件基本上与第一组条件相反 - 当(alpha_sgp < alpha) & (alpha <= (alpha_sgp-180))为假时,则反之亦然。因此,在实施公式时,您可以使用elseif替换整个else行。

如果您需要进一步澄清,请随时发表评论。