4

E(n,k)次のように定義された 2 次元関数を最適化 (最小化) しようとしています。

error=lambda x,y,w: (math.log(abs(Tformulated(x,y,w))) - math.log(abs(Tw[w])))**2 + (math.atan2(Tformulated(x,y,w).imag,Tformulated(x,y,w).real) - math.atan2(Tw[w].imag,Tw[w].real))**2

Tformulated次のように取得されます。

def Tformulated(n,k,w):
    z=1j
    L=1
    C=0.1
    RC=(w*L)/C
    n1=complex(1,0)
    n3=complex(1,0)
    n2=complex(n,k)
    FP=1/(1-(((n2-n1)/(n2+n1))*((n2-n3)/(n2+n3))*math.exp(-2*z*n2*RC)))
    Tform=((2*n2*(n1+n3))/((n2+n1)*(n2+n3)))*(math.exp(-z*(n2-n1)*RC))*FP
    return Tform

andTwは、複雑な値の要素を持つ以前に計算されたリストです。私が正確にやろうとしているのは、(「エラーx、y、w ....」で使用される)の各値に対して、 &wの値に対して関数「エラー」を最小限に抑えたいということです。範囲は 1 から 2048 です。したがって、基本的には 2D 最小化問題です。私は自分でプログラミングを試みました(ただし、使用する方法と使用方法に行き詰まっています)。私のコードは次のとおりです。xyw

temp=[]
i=range(5)
retval = fmin_powell(error , x ,y, args=(i) , maxiter=100 ,maxfun=100)
temp.append(retval)

fmin_powell正しい方法であるかどうかもわかりません。

4

1 に答える 1

3

最も簡単な例を次に示します。

from scipy.optimize import fmin

def minf(x):
  return x[0]**2 + (x[1]-1.)**2

print fmin(minf,[1,2])

[アウト]:

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 44
         Function evaluations: 82
[ -1.61979362e-05   9.99980073e-01]

ここで考えられる落とし穴は、最小化ルーチンが引数としてリストを期待していることです。厄介な詳細については、ドキュメントを参照してください。複素数値の関数を直接最小化できるかどうかわからない場合は、実数部と虚数部を別々に検討する必要があるかもしれません。

于 2012-08-30T15:41:35.360 に答える