Python 求解椭圆方程
我是Python新手。我有下面的椭圆方程Python 求解椭圆方程,python,ellipse,Python,Ellipse,我是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) 对于np.linspace(-1,2,10)]中的X,但是它给了我类型object的3d数组,我无法处理
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)
对于np.linspace(-1,2,10)]中的X
,
但是它给了我类型object的3d数组,我无法处理
关于获得Y向量和相应的X
向量的人有什么建议吗
plt.plot(X, Y)
然后得到一个椭圆?你需要这个函数来拟合椭圆:
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)
有关更多信息和教程,请参见此链接:但作为提示,我只介绍了一些函数:
numpy.linalg.eig(a):计算方形阵列的特征值和右特征向量。
numpy.linalg.inv(a):计算矩阵的(乘法)逆
请参见维基 你能提供一个例子
b
vector?数组([-0.43289427,0.55144696,3.22294034,0.14364618,-2.63562548])非常感谢你的详细回答。我已经用最小二乘法进行了拟合,得到了椭圆方程的系数。我只需要画出来?我正在尝试提取满足方程式的x和y(网格)的值,然后绘制(x,y)不客气,因此对于绘图,您可以使用matplotlib.collections.EllipseCollection
或matplotlib中的其他工具。我自己不熟悉这一点。。。这是链接: