2013-01-12 3 views
1

데이터 수가 복소수이며 데이터에 가장 적합한 매개 변수를 찾고 싶습니다. 파이썬에서 scipy에 의해 구현 된 leastsq를 사용하여 복소수에 데이터를 맞출 수 있습니까?python scipy 최소값은 복소수로 맞 춥니 다

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 

내가 추측하고있어 :

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 내 복소수와 협력 좋아, 나는 오류가 발생하지 않습니다 예를 들어

, 내 코드는 다음과 같은 것입니다 복소수가 아닌 수레/복식으로 만 작업해야합니다. 이 경우 어떻게 실제 부품과 복잡한 부품을 개별적으로 평가 한 다음 residuals에 대한 단일 오류 측정 기준으로 되돌릴 수 있습니까?

답변

2

scipy의 최소 제곱 함수는 복잡한 값 (예 : 1 + 2j보다 크거나 2 + 1j 미만)을 비교하기가 어렵 기 때문에 실제 잔차가 반환되기를 원합니다. 잔차는 본질적으로 전달 된 매개 변수 세트의 품질 척도이며, 실제 적합도에 얼마나 가깝게 있는지를 알려줍니다. 당신이 당신의 잔차 기능에 '시뮬레이션'을 계산 한 후 할 수있는 일

는 직교의 오류 (Y-SIM)를 추가 이러한 라인을 추가하는 것입니다 : 너무 오래 Y로

a = y-sim 
return a.real**2 + a.imag**2 

및 시뮬레이션은 모두 NP 있습니다 .array는 복잡합니다. 그러면 효과적이고 비교적 효율적입니다.

관련 문제