1
표준 다항식 피팅 프로그램을 구현하려고했지만 이해할 수없는 문제가 발생했습니다. 다음은 정상적인 방정식을 사용하여 적합하게 만든 샘플 x 및 y 데이터가 있고 numpy에서 polyfit 함수를 사용하는 코드입니다. 여기numpy의 다항식 피팅 문제
def mytest(N):
print "\nPolynomial order (N): {}".format(N)
mVals = [5, 10, 15, 20]
a_orig = [198.764, 13.5, 0.523]
for M in mVals:
x = arange(-M, M+1)
y = matrix(a_orig[0]+ a_orig[1]*x + a_orig[2]*x**2).T
# Code implementing the solution from the normal equations
nArray = arange(N+1)
A = matrix([[n**i for i in nArray] for n in x])
B = (A.T*A).I
a_myfit = B*(A.T*y)
# numpy's polyfit
a_polyfit = polyfit(x, y, N)
print "M: {}".format(M)
print ["{0:0.3f}".format(i) for i in a_orig]
print ["{0:0.3f}".format(i) for i in array(a_myfit)[:,0]]
print ["{0:0.3f}".format(i) for i in list(array(a_polyfit)[:,0])[::-1]]
mytest(N=5)
mytest(N=6)
는 다항식의 출력
Polynomial order (N): 5
M: 5
['198.764', '13.500', '0.523']
['198.764', '13.500', '0.523', '0.000', '0.000', '-0.000']
['198.764', '13.500', '0.523', '-0.000', '0.000', '0.000']
M: 10
['198.764', '13.500', '0.523']
['198.764', '13.500', '0.523', '-0.000', '0.000', '-0.000']
['198.764', '13.500', '0.523', '0.000', '0.000', '0.000']
M: 15
['198.764', '13.500', '0.523']
['198.764', '13.500', '0.523', '0.000', '0.000', '-0.000']
['198.764', '13.500', '0.523', '-0.000', '-0.000', '0.000']
M: 20
['198.764', '13.500', '0.523']
['198.764', '13.500', '0.523', '0.000', '-0.000', '-0.000']
['198.764', '13.500', '0.523', '0.000', '0.000', '0.000']
Polynomial order (N): 6
M: 5
['198.764', '13.500', '0.523']
['198.764', '13.500', '0.523', '0.000', '0.000', '-0.000', '-0.000']
['198.764', '13.500', '0.523', '-0.000', '0.000', '0.000', '-0.000']
M: 10
['198.764', '13.500', '0.523']
['198.764', '13.500', '0.523', '-0.000', '-0.000', '-0.000', '-0.000']
['198.764', '13.500', '0.523', '0.000', '0.000', '-0.000', '-0.000']
M: 15
['198.764', '13.500', '0.523']
['294.451', '13.500', '-0.061', '0.000', '-0.001', '-0.000', '-0.000']
['198.764', '13.500', '0.523', '0.000', '0.000', '0.000', '-0.000']
M: 20
['198.764', '13.500', '0.523']
['369.135', '13.500', '-0.046', '0.000', '-0.000', '-0.000', '-0.000']
['198.764', '13.500', '0.523', '0.000', '0.000', '-0.000', '-0.000']
값은 N> 5 잘못된 값을 제공하고 M>
(13)가 어디에서 잘못 가고위한 것입니다? 폴리 피트 구현에서 다른 점은 무엇입니까?
나는 이것을 지금부터 염두에 둘 것이다. 감사. – siva82kb