首页 > 解决方案 > 如何为模型参数的最小二乘法制作等高线图

问题描述

当使用最小二乘法校准数据时,我想要这样的等高线图。我正在尝试校准 NGSIM 数据并在等高线图上获得结果。但是,我使用 Emcee() 而不是最小二乘法进行优化。我想借助最小二乘法绘制模型参数的轮廓,如图所示

v=df4["v_Vel"].to_numpy()
s=df4["Space_Headway"].to_numpy()
del_v=(df4["v_Vel"]-df4["leader_Vel"]).to_numpy()
A= df4["Smooth_v_Acc"].to_numpy()

def fcn2min(params, v,s,del_v, A):
    vo = params['vo']
    T  = params['T']
    so = params['so']
    a = params['a']
    b = params['b']
    sx = so + v*T + (v*del_v)/(2*(math.sqrt(a*b)))
    model = a*(1-((v/vo)**4- ((sx/s)**2)))
    return (model-A) 

from lmfit import Minimizer, Parameters, report_fit
params = Parameters()
params.add('vo', value=12,min=10,max=30)
params.add('T', value=1,min=1.1,max=5)
params.add('so', value=2.5,min=2,max=6)
params.add('a', value=2.1,min=2,max=6)
params.add('b', value=0.5,min=1,max=4)

minner = Minimizer(fcn2min, params, fcn_args=(v,s,del_v,A))

res=minner.minimize()

res1 = minner.emcee(burn=500,steps=2000, thin=10, params=res.params)
    
import corner
    corner.corner(res1.flatchain, labels=res1.var_names, truths=list(res1.params.valuesdict().values()))

标签: contourleast-squarescalibration

解决方案


推荐阅读