1

の配列があり(219812,2)ますが、に分割する必要があり2 (219812)ます。

エラーが発生し続けますValueError: operands could not be broadcast together with shapes (219812,2) (219812)

どうすれば達成できますか?

ご覧のとおり、u = odeint とそれらの倍数から 2 つの別個の解を取得する必要があります。

def deriv(u, t):
    return array([ u[1], u[0] - np.sqrt(u[0]) ])

time = np.arange(0.01, 7 * np.pi, 0.0001)
uinit = array([ 1.49907, 0])
u = odeint(deriv, uinit, time)

x = 1 / u * np.cos(time)
y = 1 / u * np.sin(time)

plot(x, y)
plt.show()
4

3 に答える 3

3

2D 配列の i 番目の列を抽出するには、 を使用しますarr[:, i]

. _ u_u1, u2 = u.T

ところで、スター インポートはあまり良くないので (ターミナルでインタラクティブに使用する場合を除いて)、コードにnp.とをいくつか追加すると、次のようになります。plt.

def deriv(u, t):
    return np.array([ u[1], u[0] - np.sqrt(u[0]) ])

time = np.arange(0.01, 7 * np.pi, 0.0001)
uinit = np.array([ 1.49907, 0])
u = odeint(deriv, uinit, time)

x = 1 / u[:, 0] * np.cos(time)
y = 1 / u[:, 1] * np.sin(time)

plt.plot(x, y)
plt.show()

また、対数プロットの方が見栄えが良いようです。

于 2013-04-11T16:36:04.260 に答える
1

タプルにインデックスを付けたいようです:

foo = (123, 456)
bar = foo[0] # sets bar to 123
baz = foo[1] # sets baz to 456

したがって、あなたの場合、あなたがやりたいことは次のように聞こえます...

u = odeint(deriv, uinit, time)

x = 1 / u[0] * np.cos(time)
y = 1 / u[1] * np.sin(time)
于 2013-04-11T15:56:03.437 に答える
1
u1,u2 = odeint(deriv, uinit, time)

多分 ?

于 2013-04-11T15:59:35.937 に答える