[不備があったため再投稿]
python、数学共に初心者です。
###前提・実現したいこと/発生している問題
pythonの科学技術計算ライブラリscipy.optimize.minimizeのbfgs法で関数の最適化を行っています。
パラメーターはx[0],x[1],x[2]の三つです。
最適化したい関数に複素数が含まれていると以下のようなwarningが出ます。
最適化したい関数は計算すると除算と二乗によりjが消えるので、最適化された関数にもパラメーターにも虚数部が含まれないはずです。
虚数が含まれていない場合、問題がないことは確認済みです。
最適化されたパラメーターは適切な値にならないのですが、どうすればいいでしょうか?
また初歩的な間違いかもしれませんが、よろしくお願いします。
###該当のソースコード
python
1import numpy as np 2from scipy import optimize 3 4def f(x): #最適化したい関数 5 return ((3+4j)-(3*x[0]+4j))**2+((3+4j)-(3+x[1]*1j))**2+((x[2]+0j)-(23+0j))**2 6 7result=optimize.fmin_bfgs(f, [1,1,1]) #bfgs法 8 9for i,elem in enumerate(result): 10 print('x[%s]=%s' %(i,elem) ) #最適化後のパラメーターの表示
###実行結果
/.pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/scipy/optimize/optimize.py:628: ComplexWarning: Casting complex values to real discards the imaginary part grad[k] = (f(*((xk + d,) + args)) - f0) / d[k] /.pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/scipy/optimize/linesearch.py:171: ComplexWarning: Casting complex values to real discards the imaginary part amin, amax, isave, dsave) Optimization terminated successfully. Current function value: -67457804844318816.000000 Iterations: 3 Function evaluations: 85 Gradient evaluations: 17 x[0]=1.0 x[1]=-473759632.1 x[2]=396220148.629
###エラーメッセージ
ComplexWarning: Casting complex values to real discards the imaginary part (複素数を実数にキャストすると、虚数部が破棄されます)
###補足情報(言語/FW/ツール等のバージョンなど)
python3.6.0
numpy1.11.3
scipy0.18.1
回答3件
あなたの回答
tips
プレビュー