求解椭圆方程

时间:2014-09-20 17:29:36

标签: python ellipse

我是Python新手。我有一个椭圆的等式

b[0] + b[1]*X + b[2]*Y + b[3]*X*Y + b[4]*Y**2 - X**2 = 0

b系数向量是已知的。我正在尝试找到解决此等式的XY的值,然后绘制它。

我试过了

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) 

然后得到一个椭圆?

1 个答案:

答案 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!