我是Python新手。我有一个椭圆的等式
b[0] + b[1]*X + b[2]*Y + b[3]*X*Y + b[4]*Y**2 - X**2 = 0
b系数向量是已知的。我正在尝试找到解决此等式的X
和Y
的值,然后绘制它。
我试过了
Z = np.array([solve([b[0] + b[1]*Y + b[2]*Y + b[3]*Y*X + b[4]*Y**2 - X**2], Y)
X
中的np.linspace(-1, 2, 10)])
,但它给了我一个类型对象的3d数组,我无法处理。
有关获取Y向量和相应X
向量的人的任何建议,只需执行
plt.plot(X, Y)
然后得到一个椭圆?
答案 0 :(得分:0)
你需要这个函数来拟合椭圆:
import numpy as np
from numpy.linalg import eig, inv
def fitEllipse(x,y):
x = x[:,np.newaxis]
y = y[:,np.newaxis]
D = np.hstack((x*x, x*y, y*y, x, y, np.ones_like(x)))
S = np.dot(D.T,D)
C = np.zeros([6,6])
C[0,2] = C[2,0] = 2; C[1,1] = -1
E, V = eig(np.dot(inv(S), C))
n = np.argmax(np.abs(E))
a = V[:,n]
return a
并使用它:
arc = 0.8
R = np.arange(0,arc*np.pi, 0.01)
x = 1.5*np.cos(R) + 2 + 0.1*np.random.rand(len(R))
y = np.sin(R) + 1. + 0.1*np.random.rand(len(R))
This becomes
a = fitEllipse(x,y)
有关更多信息和教程,请参阅此链接:http://nicky.vanforeest.com/misc/fitEllipse/fitEllipse.html但作为提示我只描述了一些功能:
numpy.linalg.eig(a):计算方阵的特征值和右特征向量。 numpy.linalg.inv(a):计算矩阵的(乘法)逆。
请参阅 sci-py Linear algebra wiki!