如何在错误函数中使用带有多个参数的scipy.minimize?

时间:2017-12-01 09:52:35

标签: python scipy

我有两组来自实验和理论公式的频率数据。我想使用scipy的最小化功能。 这是我的代码段。 其中g是我想要找到的耦合。 Ad ind是用于在x轴上绘图的电感。

from scipy.optimize import minimize
def eigenfreq1_func(ind,w_q,w_r,g):
return (w_q+w_r)+np.sqrt((w_q+w_r)**2.0-4*(w_q+w_r-g**2.0))/2 
def eigenfreq2_func(ind,w_q,w_r,g):
return (w_q+w_r)-np.sqrt((w_q+w_r)**2.0-4*(w_q+w_r-g**2))/2.0 
def err_func(y1,y1_fit,y2,y2_fit):
return np.sqrt((y1-y1_fit)**2+(y2-y2_fit)**2)  
g_init=80e6
res1=eigenfreq1_func(ind,qubit_freq,readout_freq,g_init)
print res1
res2=eigenfreq2_func(ind,qubit_freq,readout_freq,g_init)
print res2
fit=minimize(err_func,args=[qubit_freq,res1,readout_freq,res2])

但它显示以下错误:

" TypeError:minimize()至少需要2个参数(给定2个)"

1 个答案:

答案 0 :(得分:3)

首先,你的例子中的缩进搞砸了。希望你不要尝试运行这个

其次,这是一个婴儿示例,用函数scipy.optimize.minimize最小化chi2(注意你可以最小化你想要的东西:可能性,| chi | **?,toto等):

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)

在你的例子中,你没有给出初始值...这有缩进...你在等人为你做这份工作吗?

第三,请注意scipy提出的优化过程并不总能适应您的需求。你可能更喜欢像lmfit这样的极简主义者