1.代码实现
点击查看代码
import numpy as np
import pylab as plt
from scipy.optimize import curve_fit
# 原始数据点
x0 = np.array([-2, -1.7, -1.4, -1.1, -0.8, -0.5, -0.2, 0.1, 0.4, 0.7, 1, 1.3, 1.6, 1.9, 2.2, 2.5, 2.8, 3.1, 3.4, 3.7, 4, 4.3, 4.6, 4.9])
y0 = np.array([0.1029, 0.1174, 0.1316, 0.1448, 0.1566, 0.1662, 0.1733, 0.1775, 0.1785, 0.1764, 0.1711, 0.1630, 0.1526, 0.1402,
0.1266, 0.1122, 0.0977, 0.0835, 0.0702, 0.0588, 0.0479, 0.0373, 0.0291, 0.0224])
# 定义正态分布函数形式
def normal_distribution(x, A, mu, sigma):
return A * np.exp(-((x - mu) ** 2) / (2 * sigma ** 2))
# 使用curve_fit进行最小二乘非线性拟合
popt, pcov = curve_fit(normal_distribution, x0, y0)
# 获取拟合得到的参数
A_fit, mu_fit, sigma_fit = popt
print("拟合得到的参数:")
print(f"A: {A_fit}")
print(f"mu: {mu_fit}")
print(f"sigma: {sigma_fit}")
print("3014")
# 计算拟合值
y_fit = normal_distribution(x0, A_fit, mu_fit, sigma_fit)
# 绘制原始数据和拟合曲线
plt.plot(x0, y0, 'o', label='原始数据')
plt.plot(x0, y_fit, label='拟合曲线')
plt.legend()
plt.show()
2.运行结果