-5

在为本文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

任何帮助都感激不尽。

4

1 回答 1

3

我觉得你的说法有问题:

if alpha_sgp<alpha<=(alpha_sgp-180)

虽然这在 Matlab 中的语法是正确的,但它并没有像你想象的那样做。

简单的例子:

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

将返回1(真)。但

disp(a<c<b)

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

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所以在实现你的公式时,你可以用 just替换整行else

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

于 2013-06-03T18:38:51.987 回答