用 Python 对实验数据拟合误差函数

问题描述 投票:0回答:0

我正在做一个光学实验,我们有一个高斯光束并测量它的强度,同时用小刀逐渐阻挡光的通道。

我尝试了以下代码:

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 的哪个值更符合我的实验数据。但是我绘制了它,发现它不太合适。

As you can see here

python curve-fitting scipy-optimize
© www.soinside.com 2019 - 2024. All rights reserved.