python里面怎么实现三高斯分布拟合
时间: 2024-01-31 14:02:17 浏览: 65
python实现三维拟合的方法
在Python中,可以使用SciPy库中的curve_fit函数来实现三高斯分布拟合。以下是一个简单的例子:
首先,我们需要导入所需的库:
``` python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
```
然后,我们定义一个三高斯分布函数:
``` python
def triple_gauss(x, a1, b1, c1, a2, b2, c2, a3, b3, c3):
return a1 * np.exp(-(x - b1) ** 2 / (2 * c1 ** 2)) + a2 * np.exp(-(x - b2) ** 2 / (2 * c2 ** 2)) + a3 * np.exp(-(x - b3) ** 2 / (2 * c3 ** 2))
```
接下来,我们生成一些随机数据:
``` python
x = np.linspace(-10, 10, 1000)
y = triple_gauss(x, 1, -1, 1, 0.5, 0, 2, 0.2, 2, 0.5)
y_noise = 0.05 * np.random.normal(size=x.size)
y = y + y_noise
```
然后,我们使用curve_fit函数进行拟合:
``` python
popt, pcov = curve_fit(triple_gauss, x, y, p0=[1, -1, 1, 0.5, 0, 2, 0.2, 2, 0.5])
```
其中,p0是函数参数的初始值。
最后,我们可以绘制原始数据和拟合曲线:
``` python
plt.plot(x, y, 'b-', label='data')
plt.plot(x, triple_gauss(x, *popt), 'r-', label='fit')
plt.legend()
plt.show()
```
完整的代码如下:
``` python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def triple_gauss(x, a1, b1, c1, a2, b2, c2, a3, b3, c3):
return a1 * np.exp(-(x - b1) ** 2 / (2 * c1 ** 2)) + a2 * np.exp(-(x - b2) ** 2 / (2 * c2 ** 2)) + a3 * np.exp(-(x - b3) ** 2 / (2 * c3 ** 2))
x = np.linspace(-10, 10, 1000)
y = triple_gauss(x, 1, -1, 1, 0.5, 0, 2, 0.2, 2, 0.5)
y_noise = 0.05 * np.random.normal(size=x.size)
y = y + y_noise
popt, pcov = curve_fit(triple_gauss, x, y, p0=[1, -1, 1, 0.5, 0, 2, 0.2, 2, 0.5])
plt.plot(x, y, 'b-', label='data')
plt.plot(x, triple_gauss(x, *popt), 'r-', label='fit')
plt.legend()
plt.show()
```
注意,这只是一个三高斯分布的简单示例,如果你的数据不是三高斯分布,你需要根据你的数据定义一个合适的拟合函数。
阅读全文