Python 이산 서열 도수 의 예 를 구하 다
394.0
388.0
389.0
388.0
388.0
392.0
393.0
395.0
395.0
394.0
394.0
390.0
392.0
이전에 알 고 있 는 바 에 따 르 면 이산 치 에 대한 구 도 는 바로 차이 점 을 구 하 는 것 이다.예 를 들 어 i 점 의 도체(차이 점)는 다음 과 같다.
즉,너비 가 2m+1 인 창 에서 앞 뒤 m 개의 값 을 계산 하여 가중 시 킨 것 과 얻 을 수 있 습 니 다.하지만 실제 사용 과정 에서 효과 가 좋 지 않다.그래서 똑 같이 너비 가 2k+1 인 창 에서 이 2k+1 개의 점 을 하나의 함수 로 만 든 다음 에 구 도 를 하면 임의의 단계 의 도 수 치 를 얻 을 수 있다 는 것 을 생각 했다.
우선 함수 적합,from scipy.optimize import leastsq 즉 최소 2 곱 하기 적합 을 사용 합 니 다.
from scipy.optimize import leastsq
class search(object):
def __init__(self, filename):
self.filename = filename
def func(self, x, p):
f = np.poly1d(p)
return f(x)
def residuals(self, p, x, y, reg):
regularization = 0.1 # lambda
ret = y - self.func(x, p)
if reg == 1:
ret = np.append(ret, np.sqrt(regularization) * p)
return ret
def LeastSquare(self, data, k=100, order=4, reg=1, show=1): # k ,order ,reg
l = self.len
step = 2 * k + 1
p = [1] * order
for i in range(0, l, step):
if i + step < l:
y = data[i:i + step]
x = np.arange(i, i + step)
else:
y = data[i:]
x = np.arange(i, l)
try:
r = leastsq(self.residuals, p, args=(x, y, reg))
except:
print("Error - curve_fit failed")
fun = np.poly1d(r[0]) #
df_1 = np.poly1d.deriv(fun) #
df_2 = np.poly1d.deriv(df_1)
df_3 = np.poly1d.deriv(df_2)
df_value = df_1(x)
df3_value = df_3(x)
fun=np.poly1d(r[0]),fun 는 poly nomial class 를 되 돌려 줍 니 다.구체 적 으로 사용 하면 공식 문 서 를 볼 수 있 습 니 다numpy.poly1dpoly nomial 대상 은 deriv 방법 으로 도 수 를 구 할 수 있 으 며,구 하 는 것 은 여전히 poly nomial 대상 이다.df_value = df_1(x)이 얻 은 것 은 바로 x 라 는 몇 가지 점 에서 구 한 가이드 수치 이다.
큰 성 과 를 거 둔 것 처럼 보이 지만 가이드 의 결 과 는 좋 지 않다.다음 과 같은 그림 에서 실제 최고점 은 100 정도 이지 만 의합 한 곡선 의 최고점 은 120 정도 이 고 여러 가지 의합 을 사용 하면 정확 한 의합 곡선 을 만 들 기 어렵 기 때문이다.
그래서 고 스 함수 로 곡선 에 대한 의합 을 실현 하려 고 했 습 니 다.matlab 에서 시험 해 보 았 습 니 다.3 단계 고 스 의합 은 곡선 을 잘 맞 출 수 있 습 니 다.
그러나 numpy 와 sicpy 에서 poly 1d 와 같은 대상 을 찾 지 못 했 습 니 다.고 스 함 수 를 스스로 정의 할 수 있 지만 다음 과 같 습 니 다.
def gaussian(self, x, *param):
fun = param[0]*np.exp(-np.power(x - param[2], 2.) / (2 * np.power(param[4], 2.)))+param[1]*np.exp(-np.power(x - param[3], 2.) / (2 * np.power(param[5], 2.)))
return fun
그러나 최소 2 곱 하기 의합 을 통 해 함수 인 자 를 얻 은 후에 의합 후의 점 만 얻 을 수 있 고 직접 도 수 를 구 할 수 없 기 때문에 적합 하지 않다.그래서 다항식 의합 으로 돌아 갈 수 밖 에 없다.4 단계 다항식 이 표징 되 지 않 으 면 더 높 은 단계 일 까?
전체적으로 말 하면 효 과 는 받 아들 일 수 있다.
다음 단계 에서 좋 은 고 스 함수 적합 방법 을 찾 으 면 계속 업데이트 할 것 입 니 다.
이상 의 Python 에서 분 산 된 서열 도 수 를 구 하 는 예 는 바로 소 편 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.