파생 프로그램을 작성하려면 프로그램을 작성하십시오. InterpolatedUnivariateSpline은 f (x + h)를 계산하는 데 사용됩니다. 빨간색 선은 코사인의 미분, 녹색 선은 코사인 consine, 파란색 선은 -sine 함수입니다. 빨간색과 파란색 선이 일치합니다. 그것은 다음에서 잘 작동합니다.파이썬에서 데이터 파생물 얻기
from scipy.interpolate import InterpolatedUnivariateSpline
import numpy as np
import matplotlib.pyplot as plt
pi = np.pi
x = np.arange(0,5*pi,0.2*pi)
y = np.cos(x)
f2 = InterpolatedUnivariateSpline(x, y)
#Get dervative
der = []
for i in range(len(y)):
h = 1e-4
der.append((f2(x[i]+h)-f2(x[i]-h))/(2*h))
der = np.array(der)
plt.plot(x, der, 'r', x, y, 'g', x, -np.sin(x),'b')
plt.show()
하지만 몇 가지 문제가 발생합니다. 내 프로젝트에서 변수 x (주파수)는 10^7에서 2.2812375 * 10^9까지 다양하며 그 단계는 22487500이므로 배열 x를 변경합니다. 그 결과, 다음과 같은 결과가 나타납니다.
유도체 그것은 -sine 기능 아니다 선과 거의 0에 가깝다. 어떻게 해결할 수 있습니까?
''InterpolatedUnivariateSpline'''는 [''derivitive'''] 갖는다 (http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.InterpolatedUnivariateSpline.derivative. html # scipy.interpolate.InterpolatedUnivariateSpline.derivative) 메소드. 당신이 그것을 사용하지 않는 이유가 있습니까? – wwii
[중요성 상실] (https://en.wikipedia.org/wiki/Loss_of_significance)처럼 보입니다. 'x'를'1e7'과 같이 나눌 수도 있고,'h'를'1e5'의 크기 주위로 늘릴 수도 있습니다. 또한'x'가 충분히 높은 해상도를 가지고 있다면, 함수를 수치 적으로 구별하는 것이 더 간단합니다.'dy = np.diff (y)/np.diff (x)'가 될 것입니다. 이렇게하면'h '설정에 대해 걱정할 필요가 없습니다. –
안녕하세요. wwii, 나는 또한 InterpolatedUnivariateSpline에서 derivitive를 시도합니다. 아래에서 같은 결과를 얻습니다. – radiosan