从本文http://adsabs.harvard.edu/abs/1992PASJ...44..493K编写等式(5)的程序时,
我想我犯了一些错误(下面)。我不知道如何在等式中包含'或'。
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
非常感谢任何帮助。
答案 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
行。
如果您需要进一步澄清,请随时发表评论。