我正在做一个光学实验,我们有一个高斯光束并测量它的强度,同时用小刀逐渐阻挡光的通道。
我尝试了以下代码:
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import pandas as pd
from math import sqrt
from scipy.special import erf
# My experimental data
xdata = np.array([0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60,
65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125,
130, 135, 140, 145, 150, 155, 160, 165])
ydata = np.array([2.55, 2.54, 2.54, 2.53, 2.52, 2.5 , 2.48, 2.45, 2.4 , 2.34, 2.27,
2.17, 2.04, 1.9 , 1.73, 1.53, 1.33, 1.12, 0.92, 0.73, 0.56, 0.42,
0.31, 0.22, 0.15, 0.1, 0.07, 0.04, 0.03, 0.02, 0.01, 0.01, 0.01,
0.0)
# Objective function
def P(x, wx):
return (2.55/2)*(1-erf(sqrt(2)*x/wx))
# Fit
popt, pcov = curve_fit(P, xdata, ydata, maxfev=8000)
# Gráficas
plt.plot(xdata, ydata, 'b+:', label='Experimental')
plt.plot(xdata, P(xdata, *popt), 'r-', label='Fit')
plt.legend()
plt.xlabel('Distancia [mm]')
plt.ylabel('Potencia [mW]')
plt.show()
明确地说,我想知道 wx 的哪个值更符合我的实验数据。但是我绘制了它,发现它不太合适。