我正在尝试使椭圆适合散点图。我正在使用的代码如下
import numpy as np
import matplotlib.pyplot as plt
# Xi and Yi are arrays with my X and Y coordinates of points
# Transform into columns
X = np.c_[Xi]
Y = np.c_[Yi]
# Solve the least squares problem
A = np.hstack([X**2, X * Y, Y**2, X, Y])
b = np.ones_like(X)
x = np.linalg.lstsq(A, b)[0].squeeze()
# Plot the data
x_coord = np.linspace(-5,5,300)
y_coord = np.linspace(-5,5,300)
X_coord, Y_coord = np.meshgrid(x_coord, y_coord)
Z_coord = x[0] * X_coord ** 2 + x[1] * X_coord * Y_coord + x[2] * Y_coord**2 + x[3] * X_coord + x[4] * Y_coord
plt.contour(X_coord, Y_coord, Z_coord, levels=[1], colors=('r'), linewidths=2)
plt.show()
问题是,有时最佳拟合是双曲线而不是椭圆,因为它们具有相同的公式Ax² + Bxy + Cy² + Dx + Ey + F = 0
。有什么方法可以更改我的A
矩阵以确保我总是会出现椭圆形?