已知散点的坐标x,y分别对应的list值,python把这些点拟合成椭圆并作图输出,不需要插值
时间: 2024-05-10 19:21:02 浏览: 116
可以使用scipy库中的optimize.curve_fit函数来拟合椭圆。具体步骤如下:
1. 导入所需库
``` python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
```
2. 定义椭圆方程
椭圆方程可表示为:
$$\frac{(x-x_0)^2}{a^2} + \frac{(y-y_0)^2}{b^2} = 1$$
其中,$(x_0, y_0)$为椭圆中心坐标,$a$和$b$分别为椭圆长半轴和短半轴长度。
``` python
def ellipse(x, x0, y0, a, b):
return ((x[0]-x0)**2/a**2 + (x[1]-y0)**2/b**2 - 1)
```
3. 调用curve_fit函数进行拟合
在curve_fit函数中,第一个参数为拟合函数,第二个参数为自变量数据,第三个参数为因变量数据。
``` python
popt, pcov = curve_fit(ellipse, (x, y), None, p0=(0, 0, 1, 1))
```
其中,popt为拟合后的参数,pcov为协方差矩阵,p0为拟合参数的初始值。
4. 绘制椭圆
``` python
fig, ax = plt.subplots()
ax.scatter(x, y, color='red')
x0, y0, a, b = popt
ellipse_plot = plt.Ellipse((x0, y0), 2*a, 2*b, fill=False)
ax.add_artist(ellipse_plot)
plt.axis('scaled')
plt.show()
```
其中,scatter函数用于绘制散点,Ellipse函数用于绘制椭圆,axis('scaled')函数用于设置坐标轴比例一致。
完整代码如下:
``` python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 9]
def ellipse(x, x0, y0, a, b):
return ((x[0]-x0)**2/a**2 + (x[1]-y0)**2/b**2 - 1)
popt, pcov = curve_fit(ellipse, (x, y), None, p0=(0, 0, 1, 1))
fig, ax = plt.subplots()
ax.scatter(x, y, color='red')
x0, y0, a, b = popt
ellipse_plot = plt.Ellipse((x0, y0), 2*a, 2*b, fill=False)
ax.add_artist(ellipse_plot)
plt.axis('scaled')
plt.show()
```
阅读全文