파이썬에서 제한된 다항식 맞춤을 단순화하는 방법

9202 단어 파이썬numpy

간단한 다항식 적합



다항식으로 데이터를 맞추고 싶지만, 어느 데이터점은 반드시 통과하고 싶은 경우에, 간단하게 할 수 있는 방법을 소개한다.

코드 개요



numpy의 polyfit을 사용할 때 w라는 옵션으로 가중치를 지정할 수 있으므로 고정하고 싶은 점의 가중치를 크게 한다. 여기에서는 데이터가 원점을 통과하지 않지만 맞는 경우에는 원점을 억지로 통과시키고 싶은 경우의 예를 나타냅니다. 원래 데이터 x, y 에 대해 te,numpy.append 로 데이터를 추가하고, 그 점의 가중치를 1e3 으로, 다른 것은 1 로 하고 있습니다.

샘플 코드



qiita_polyfit_limited.py

#!/usr/bin/env python

import numpy as np
import matplotlib.pyplot as plt

x = np.array([-10, -8,-6,-4,-2,0,2,4,6,8,10])
y = np.array([-15,-10,-3,-2,-1,3,1,3,4,8,12])
weight = np.ones(len(x))
npoly=4

x_add = np.append(x,0)
y_add = np.append(y,0)
weight_add = np.append(weight,1e3)

coef=np.polyfit(x, y, npoly, w=weight)
yfit = np.poly1d(coef)(x)         

coef_add=np.polyfit(x_add, y_add, npoly, w=weight_add)
yfit_add = np.poly1d(coef_add)(x)         

F = plt.figure(figsize=(7,7))
ax = plt.subplot(1,1,1)

plt.errorbar(x,y,fmt="o",label="data",alpha=0.8,ms=3)
plt.errorbar(x,yfit,fmt="--",label="fit (no limit), order = "  +str(npoly),alpha=0.8,ms=3)
plt.errorbar(x,yfit_add,fmt="--",label="fit (fixed at 0,0), order = "  +str(npoly),alpha=0.8,ms=3)

plt.grid(linestyle='dotted',alpha=0.5)
plt.legend(numpoints=1, frameon=False, loc="best") 

outfile = "qiita_polyfitlimited.png"
plt.savefig(outfile)

맞는 결과



아무것도 제한을 하지 않으면 원점을 통과하지 않지만, 제한 첨부라면 원점을 통과하고 있는 것을 알 수 있다.



엄격한 조건부 맞지 않기 때문에 원점에서 0이 아니며 작은 값이 남습니다. 만약, 엄밀하게 원점에서 0으로 하고 싶은 경우는, 제한 첨부의 피트의 함수를 스스로 써서 실시할 필요가 있다. 이 경우 파이썬에서 매개 변수 제한으로 피팅하는 방법
를 참조하십시오.

좋은 웹페이지 즐겨찾기