1

Python プロットがy = 0.5線をまたいで反映されるのはなぜですか? Mathematica の同じプロットはそうではありません.方程式を 5 ~ 10 回確認しましたが、違いはわかりません。-1Python プロットの前にa を配置すると、反転して 1 単位下にドロップしy = -0.5ます。

alphagさらに、との定義betagは正しいです。

import numpy as np
import pylab

r1 = 1  #  AU Earth                                                                 
r2 = 1.524  #  AU Mars                                                              
deltanu = 75 * np.pi / 180  #  angle in radians                                     
mu = 38.86984154054163                                        

c = np.sqrt(r1 ** 2 + r2 ** 2 - 2 * r1 * r2 * np.cos(deltanu))

s = (r1 + r2 + c) / 2

am = s / 2


def g(a):
    alphag = 2* np.pi - 2 * np.arcsin(np.sqrt(s / (2 * a)))
    betag = -2 * np.arcsin(np.sqrt((s - c) / (2 * a)))
    return (np.sqrt(a ** 3 / mu)
            * (alphag - betag - (np.sin(alphag) - np.sin(betag)))
            - dt)


a = np.linspace(am, 2, 500000)
dt = np.linspace(0, 2, 500000)

fig = pylab.figure()
ax = fig.add_subplot(111)
ax.plot(a, g(a), color = 'r')
pylab.xlim((0.9, 2))
pylab.ylim((0, 2))

pylab.show()

パイソン:

ここに画像の説明を入力

編集2:

実際に私がプロットしている 2 つのプロットがあり、コメントのおかげで、さらに奇妙なことが起こっていることに気付きました。

私がプロットしている2つのプロットは次のとおりです。

dt = np.sqrt(a ** 3 / mu) * (alpha - beta - (sin(alpha) - sin(beta)))

where alphais 2 * np.arcsin(np.sqrt(s / (2 * a)))or 2 * np.pi - 2 * np.arcsin(np.sqrt(s / (2 * a)))and betais or is 2 * np.arcsin(np.sqrt((s - c) / (2 * a)))or the negative of the first.

In[13]:= r1 = 1;
r2 = 1.524;
dnu = 75 Degree;
mu = 38.86984154054163;

In[17]:= c = Sqrt[r1^2 + r2^2 - 2*r1*r2*Cos[dnu]]

Out[17]= 1.59176

In[18]:= s = (r1 + r2 + c)/2

Out[18]= 2.05788

In[19]:= alp = 2 \[Pi] - 2*ArcSin[Sqrt[s/(2*a)]];
bet = -2*ArcSin[Sqrt[(s - c)/(2*a)]];

In[22]:= Plot[
 Sqrt[a^3/mu]*(alp - bet - (Sin[alp] - Sin[bet])), {a, 0, 2}, 
 PlotRange -> {{.8, 2}, {0, 2}}]

これにより、次が生成されます。

ここに画像の説明を入力

alp2 = 2*ArcSin[Sqrt[s/(2*a)]];
bet2 = 2*ArcSin[Sqrt[(s - c)/(2*a)]];

Plot[Sqrt[a^3/mu]*(alp2 - bet2 - (Sin[alp2] - Sin[bet2])), {a, 0, 2}, 
 PlotRange -> {{.8, 2}, {0, 2}}]

ここに画像の説明を入力

したがって、Python コードは最初の Mathematica コードと一致しますが、プロットは 2 番目の画像であり、2 番目の Mathematica コードの Python コードは最初の Mathematica 画像の反転画像を生成します。

4

1 に答える 1

1

-dtPython コードからを削除するだけでよいと思います。

import numpy as np
import matplotlib.pyplot as plt

r1 = 1  #  AU Earth                                                                 
r2 = 1.524  #  AU Mars                                                              
deltanu = 75 * np.pi / 180  #  angle in radians                                     
mu = 38.86984154054163                                        

c = np.sqrt(r1 ** 2 + r2 ** 2 - 2 * r1 * r2 * np.cos(deltanu))

s = (r1 + r2 + c) / 2

am = s / 2


def g(a):
    alphag = 2 * np.pi - 2 * np.arcsin(np.sqrt(s / (2 * a)))
    betag = -2 * np.arcsin(np.sqrt((s - c) / (2 * a)))
    return (np.sqrt(a ** 3 / mu)
            * (alphag - betag - (np.sin(alphag) - np.sin(betag))))

def g2(a):
    alphag = 2 * np.arcsin(np.sqrt(s / (2 * a)))
    betag = 2 * np.arcsin(np.sqrt((s - c) / (2 * a)))
    return (np.sqrt(a ** 3 / mu)
            * (alphag - betag - (np.sin(alphag) - np.sin(betag))))


a = np.linspace(am, 2, 500000)
dt = np.linspace(0, 2, 500000)

fig, ax = plt.subplots(ncols=2)
ax[0].plot(a, g(a), color = 'r')
ax[1].plot(a, g2(a), color = 'r')
ax[0].set_xlim((0.9, 2))
ax[0].set_ylim((0, 2))
ax[1].set_xlim((0.9, 2))
ax[1].set_ylim((0, 2))

plt.show()

収量

ここに画像の説明を入力

于 2013-06-22T12:21:35.087 に答える