2017-12-01 11 views
0

나는 실험 및 이론적 인 공식으로부터 두 세트의 주파수 데이터를 가지고있다. 나는 scipy의 최소화 기능을 사용하고 싶다. 여기 내 코드 조각입니다. 여기서 g는 내가 찾고자하는 커플 링입니다. Ad ind는 x 축에 플롯하기위한 인덕턴스입니다.오류 함수에서 여러 매개 변수와 함께 scipy.minimize를 사용하는 방법?

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]) 

그러나 다음과 같은 오류 보여주는 것 :

"형식 오류 : 최소화()가 적어도 2 개 인자 (주어진 2) 소요"

+0

초기 매개 변수 추정치 배열을 잊어 버렸습니다. – Uvar

답변

2

첫째, 귀하의 예제에서 들여 쓰기가 엉망이된다. 당신이 이것을 시도하지 않고 실행하면 좋겠다.

둘째로, 원하는 것을 최소화 할 수있다. 여기서 나는 chi2를 최소화한다. 당신이 작업을하는 사람을 기다리고 있었다 ... 들여 쓰기로 ... 당신이 초기 값을 제공하지 않습니다 귀하의 예제에서는이를

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.optimize.minimize를 사용 너?

셋째, scipy가 제안한 최적화 프로세스는 매우 열악합니다. 물론 당신이 원하는 것에 달려 있지만, 보통은 lmfit과 같은 좀 더 견고한 최소화를 선호합니다.