2017-01-20 1 views
0

안녕하세요 저는 파이썬에 일부 데이터를 맞추기 위해 문제가 있습니다. 난 그냥 몇 가지 문제가 그래서 파이썬 내 데이터에 맞게 시작 ... 이건 내 코드입니다 :내 곡선 피팅에 최적의 매개 변수가 없습니다.

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.optimize import * 
from numpy import linalg as LA 
def f(x,a,b,c): 
    return a*np.power(x,b)+c 

x = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79]) 
y = np.array([7200,7925,8050,8200,8000,7550,7500,6800,6400,8150,6566,6280,6105,5963,5673,5495,5395,4800,4550,4558,4228,4087,3951,3817,3721,3612,3498,3416,3359,3269,3163,3241,2984,4475,2757,2644,2555,2600,3163,2720,2630,2543,2454,2441,2389,2339,2293,2261,2212,2180,2143,2450,2065,2032,1994,1960,1930,1897,1870,1838,1821,1785,1763,1741,1718,1689,1676,1662,1635,1635,1667,1633,1617,1615,1599,1581,1565,1547,1547]) 
params, extras = curve_fit(f, x, y) 
plt.plot(x,y, 'o') 
plt.plot(x, f(x, params[0], params[1], params[2])) 
plt.title('Fit') 
plt.legend(['data','fit'],loc='best') 
plt.show() 

그리고 실제로 나는 최고의 값을 찾고 있는데요 기능 f(x) = a*x^b + c 내 데이터에 맞게 원하는 a, b 및 c를 입력하여 내 데이터에 맞 춥니 다.

잘못된 점이 있습니까?

도움 주셔서 감사합니다.

+0

기본 모델이 강세 법칙이라고 확신하십니까? –

답변

1

세 가지주의 사항 :

  • 모델은 매우 좋지 않다.
  • x = 0에서 발산합니다. 첫 번째 점은 사용하지 마십시오.
  • 초기 매개 변수 추정을 제공해야합니다.

exemple : 당신은

In [178]: np.sqrt(np.diag(cov))/params 
Out[178]: array([ 0.12066005, -0.12537714, -0.53450057]) 

하여 모델의 품질을 추정 할 수

p0=[50000,-1,0] 
x=x[10:] 
y=y[10:] 
params, cov = curve_fit(f, x, y,p0) #params=[3.16e+04 -5.83e-01 -1.00e+03] 
plt.plot(x,y, 'o') 
plt.plot(x, f(x, *params)) 
plt.title('Fit') 
plt.legend(['data','fit'],loc='best') 
plt.show() 

fit

매개 변수에 대한 오류의 추정보다 큰 10 것을 보여준다 %.

+0

고마워요! –

0

문제는 피팅에 사용하는 기능입니다.

def f(x, a, b, c): 
    return a*x + b*np.power(x, 2) + c 

편집 같은 것을 사용을 고려 : 실수로 내가 제안하고 싶은 일 대신 원래의 기능을 기록했다.

+0

미안하지만, 내 함수의 차이점은 무엇입니까? def f (x, a, b, c) : a * np.power (x, b) + c? –

+0

@PaulHain 죄송합니다. 실수로 원래 기능을 다시 게시했습니다 (내 껍질이 섞여 있어야합니다). 나는 그것을 고치고, 처음에 제안하고 싶은 2 차 다항식을 추가했다. – Jann

+0

음 ... 나는 포물선이 더 좋은 모델이라고 생각하지 않습니다. –

관련 문제