파이썬에서 제한된 다항식 맞춤을 단순화하는 방법
간단한 다항식 적합
다항식으로 데이터를 맞추고 싶지만, 어느 데이터점은 반드시 통과하고 싶은 경우에, 간단하게 할 수 있는 방법을 소개한다.
코드 개요
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으로 하고 싶은 경우는, 제한 첨부의 피트의 함수를 스스로 써서 실시할 필요가 있다. 이 경우 파이썬에서 매개 변수 제한으로 피팅하는 방법
를 참조하십시오.
Reference
이 문제에 관하여(파이썬에서 제한된 다항식 맞춤을 단순화하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yamadasuzaku/items/47b7048f72a3dd8737b1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#!/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)
Reference
이 문제에 관하여(파이썬에서 제한된 다항식 맞춤을 단순화하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yamadasuzaku/items/47b7048f72a3dd8737b1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)