2017-12-01 10 views
0

私は実験から、そして理論式から2組の周波数データを持っています。私は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]) 

しかし、それは次のエラーを示しています:

+0

初期パラメータ推定値の配列を忘れてしまった – Uvar

答えて

2

まず "例外TypeError最小限に抑えるには()は、少なくとも2つの引数(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(赤ちゃんの一例)を使用します君は ?

第3に、scipyによって提案された最適化プロセスは非常に貧弱です。それはあなたが望むものに依存しますが、通常はlmfitのようなより頑強なミニマイザを好むでしょう

関連する問題