2014-09-20 73 views
2

我是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) 

np.linspace(-1, 2, 10)])X但它給了我類型的對象,我無法處理的三維陣列。

對誰的任何建議,以獲得y向量和相應X載體,根本就

plt.plot(X, Y) 

,然後得到一個橢圓形?

+0

你能提供一個'b'向量的例子嗎? – Ffisegydd 2014-09-20 17:32:21

+0

array([ - 0.43289427,0.55144696,3.22294034,0.14364618,-2.63562548]) – 2014-09-20 17:45:24

回答

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):計算方形arr的特徵值和右特徵向量唉。 numpy.linalg.inv(a):計算矩陣的(乘法)倒數。

請參閱sci-py Linear algebra維基太!

+0

非常感謝您的詳細解答。我已經用最小二乘法進行了擬合,並得到了橢圓方程的係數。我只需要繪製它?我試圖提取x和y(網格)的值,以滿足方程,然後繪製(x,y) – 2014-09-20 18:12:03

+0

不用客氣,所以對於繪圖,您可以使用'matplotlib.collections.EllipseCollection'或其他工具matplotlib。 – Kasramvd 2014-09-20 18:22:10

+0

即時通訊不熟悉...這是鏈接:http://matplotlib.org/api/collections_api.html?highlight=ellipse#matplotlib.collections.EllipseCollection – Kasramvd 2014-09-20 18:27:12