TypeError:模型函数的操作数类型不受支持

2024-04-24 14:33:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本将实验数据拟合到一个模型上,目前为止效果很好,唯一的问题是当我试图打印拟合结果时

我的失败是什么

par = ['a', 'u', 'e', 'w', 'h', 'b', 'c1', 'p', 'd']

# parameters 
a = 20      
u = 4          
e = 2.84            
w = 0.047        
h = 0.10       
b = 0.1            
# structural parameters
c1 = 1.4          
p = 50      
d = 4.3  

pars_bounds=([-np.inf,-np.inf,2.84, -np.inf,-np.inf,-np.inf, -np.inf, -np.inf, 4.3],\
                    [np.inf,np.inf,3, np.inf,np.inf,np.inf, np.inf, np.inf,6])

pars = (a, u, e, w, h, b, c1, p, d)
                
rslt, err = curve_fit(guass_FP, x, y, pars , bounds = pars_bounds) 
pars_err = np.sqrt(np.diag(err))
err = pars_err.round(5) 
rslt = rslt.round(4) 

# print fit parameters and uncertainties
for v, p in enumerate(par):
    p = p +": {0} \u00B1 {1}".format(rslt[v], err[v])
    print(p)

输出:

a: 21.1449 ± 3.11362
u: 4.6946 ± 0.01288
e: 2.844 ± 9e-05
w: 0.0384 ± 0.00012
h: 0.1967 ± 0.00233
b: 0.0 ± 0.00249
c1: 1.4 ± 0.0
p: 50.0 ± 0.0
d: 4.3 ± 0.0

Traceback (most recent call last):
  File "FP_fit.py", line 152, in <module>
    plt.plot(x,guass_FP(x, *pars), 'b--', label='guess', linewidth=1.0)
  File "FP_fit.py", line 62, in guass_FP
    m = Fabry_Perot(x)
  File "FP_fit.py", line 46, in Fabry_Perot
    fp = (1+(R23**2+2*R23*cos(4*pi*n_gn*(d*1000-p)/x))) /(1+(R21**2*R23**2-2*abs(c1)*R21*R23*cos(4*pi*n_gn*(d*1000-p)/x)))
TypeError: unsupported operand type(s) for -: 'float' and 'str'

Tags: inpynpfitfileinfparameterserr