2

これによりポイントのリストが作成され、sympysolve()メソッドは x の値を返す必要があります。代わりに、さらに別の方程式を返していますが、その理由はわかりません。ogrid()とはプロット内のポイントのリストを作成しています。ravel()これは Matplotlib にありますが、それが違いを生む場合はそうすべきではないと思います。方程式の根を見つける必要があります。ここで何が間違っているのか、値が返されず、代わりに別の方程式が返される原因がわかりません。

from mpl_toolkits.axes_grid.axislines import SubplotZero
from pylab import *
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches
from matplotlib import rc
import random
from sympy.solvers import solve
from sympy import *

a = -2; b = 1
y, x = np.ogrid[-10:10:100j, -10:10:100j]
xlist = x.ravel(); ylist = y.ravel()
elliptic_curve = pow(y, 2) - pow(x, 3) - x * a - b
plt.contour(xlist, ylist, elliptic_curve, [0])
randmid = random.randint(30,70)
#y = ylist[randmid]; x = xlist[randmid]
xsym, ysym = symbols('x ylist[randmid]')
x_result = solve(pow(ysym, 2) - pow(xsym, 3) - xsym * a - b, xsym) # 11/5/13 needs to return a value

私は独学で Python を学んでいるので、これはおそらくジュニア プログラマーが私を助けてくれるものですが、プロがこれを見て、少し時間を割いて助けてくれるとしたら、それは素晴らしいことです。

編集:

y の値をおよそ 3.xx で返します。x の値は 3 つではありません。

ここに画像の説明を入力

4

1 に答える 1

2

x_result方程式の解である式のリストです。ysymはシンボルであるため、値のリストではありません。数値結果が必要な場合は、 callsubs()とが必要evalf()です。

[e.subs({ysym:ylist[randmid]}).evalf() for e in x_result]

出力:

[0.0871073310916539 - 8.0e-17*I,
 1.36864647418387 + 4.37e-17*I,
 -1.45575380527552 + 3.63e-17*I]
于 2013-11-06T01:22:25.587 に答える