将2D椭圆拟合到点

时间:2020-02-27 19:29:20

标签: python numpy

我正在尝试使椭圆适合散点图。我正在使用的代码如下

    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矩阵以确保我总是会出现椭圆形?

0 个答案:

没有答案