Я пытаюсь подогнать эллипс к точечной диаграмме. Код, который я использую, ниже
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
, чтобы убедиться, что я всегда получаю эллипс?