2017-12-04 13 views
2

polyfit() 함수에서 나는 계수와 공분산 행렬을가집니다. 이제 몇 가지 주장을 위해 나는 그 다항식의 값을 오류와 함께 원합니다. 분명히 polyval() 함수는 공분산 행렬을 받아들이지 않습니다 (matlab에서는 그렇습니다).계수에 대한 공분산 행렬의 다항식 값 오류

def sigma(x,pcov): 
    s=0 
    for i in range(len(pcov)): 
     for j in range(len(pcov[0])): 
      s+=x**(len(pcov)-i-1)*pcov[i][j]*x**(len(pcov[0])-j-1) 
    return sqrt(s) 

나는 때문에 다항식의 원을 계수의 역 순서의 인덱스와 함께 몇 가지 재미있는 물건을 할 필요가 : 정의에서 나는 내 자신의 함수를 작성 할 수 있습니다. 그것은 pythonic하지 않습니다. 내가 놓친 게 있니? 또는 SciPy와 같은 좀 더 큰 도서관에서 이런 종류의 작업을 지원할 수 있습니까?

답변

1

루프가 없으면 양측의 공분산 행렬 C에 적절한 x의 값으로 구성된 벡터 x_powers을 곱하여 계산합니다 (예 : [x**5, x**4, ..., x**0]). 완전성을 위해 polyfit의 설정이 포함되어 있습니다.

xdata = np.arange(10) 
ydata = np.abs(xdata-2) # some data to fit 
degree = 5 
p, C = np.polyfit(xdata, ydata, deg=degree, cov=True) 
x = 5.4     # some value of x to estimate error at 
x_powers = x**np.arange(degree, -1, -1) 
x_error = np.sqrt(x_powers.dot(C).dot(x_powers)) 

여기 x_error은 함수가 반환하는 것과 같습니다.

+0

더 나아졌지만 파이썬이 오류를 얻는 간단한 방법을 기대합니다. 나는 불확실성 패키지 (http://pythonhosted.org/uncertainties/)를 살펴 보았고 공분산 행렬을 다룬다. 그러나 전체 패키지를 사용하는 것은 많은 번거 로움이 될 것이다. – mys149