複素数のデータ セットがあり、そのデータに最適なパラメーターを見つけたいと考えています。Python で scipy によって実装されているように、leastsq を使用してデータを複素数に適合させることはできますか?
たとえば、私のコードは次のようなものです。
import cmath
from scipy.optimize import leastsq
def residuals(p,y,x):
L,Rs,R1,C=p
denominator=1+(x**2)*(C**2)*(R1**2)
sim=complex(Rs+R1/denominator,x*L-(R1**2)*x*C/denominator)
return(y-sim)
z=<read in data, store as complex number>
x0=np.array[1, 2, 3, 4]
res = leastsq(residuals,x0, args=(z,x))
ただし、residuals
複素数を操作するのが好きではないため、次のエラーが表示されます。
File "/tmp/tmp8_rHYR/___code___.py", line 63, in residuals
sim=complex(Rs+R1/denominator,x*L-(R1**_sage_const_2 )*x*C/denominator)
File "expression.pyx", line 1071, in sage.symbolic.expression.Expression.__complex__ (sage/symbolic/expression.cpp:7112)
TypeError: unable to simplify to complex approximation
複素数ではなく、float/double のみを使用する必要があると思います。その場合、実数部と複素数部を別々に評価し、それらを 1 つのエラー メトリックにまとめてresiduals
返すにはどうすればよいでしょうか?