2017-11-08 11 views
-1

파이썬에서 보간법으로 문제가 있습니다. 나는 값 섹션 [-pi;]에서 sin (1/x)을 보간해야하고 보간 데이터는 0.08 스텝 동안 생성되어야한다. 0.4 단계의 입력 데이터. 입력 데이터 값에 문제가있어 3.14에 끝나지 않았습니다. 동일한 상황이 데이터를 보간하는데 어떻게 해결되는지 모르겠습니다. 2 세트는 같을 수 있습니다. 여기 내 코드는 다음 두 세트를 테스트 할 수있다 :[-pi;]에서 sin (1/x)를 어떻게 보간합니까?

import numpy as np 

//entry x 
x=[i for i in np.arange(-(np.pi),np.pi,0.4)] 
print(x); 

//interpolate x 
xinterp=[i for i in np.arange(-(np.pi),np.pi,0.08)] 
print(xinterp) 
+0

아마 부동 소수점 연산이 그런 식으로 작동하지 않기 때문일 수 있습니다. – duffymo

+0

@duffymo 어떻게 해결할 수 있습니까? –

+0

보간하는 방법에 대해 더 많이 알고 싶지만, 사용하는 루핑 구조가 변경된 것 같습니다. – duffymo

답변

2

편집이 @wwii으로 팁을 반영하기 위해 :

이 예상 된 동작입니다. https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.arange.html

정지 : 간격의 숫자 끝 arange는에서

... 최종 값으로 정지하지 않고 잘 부동 소수점에 대해 정의되어 있지 않습니다. 이 간격은 값을 포함하지 않습니다. 단, step이 정수가 아니고 부동 소수점 포인트 반올림이 길이에 영향을주는 경우는 예외입니다.

대신 linspace을보세요.

https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linspace.html.

설명에 따라 어느 :

반품 간격 통해 계산 균등 샘플, NUM [START, STOP].

따라서 0.8 단위를 얻으려면 간격 (2pi)을 원하는 단위로 나눈 값과 동일한 수의 단계가 있어야합니다.

x = np.linspace(-np.pi, np.pi, int(2 * np.pi/0.08)) 
y = np.sin(1/x) 
+2

OP의 스텝 크기 (또는 그 값에 가깝다)를 얻으려면 : x = np.linspace (-np.pi, np.pi, int (2 * np.pi/0.08))'. – wwii

+0

예! OP에서 볼 수 있도록 링크에서 예제를 추가하는 것 같았습니다. 대답에 귀하의 솔루션을 추가했습니다 :) –

+0

@ Caio Sym 당신의 해결책은 그것이 작동하는지 어떻게 설명 할 수 있습니까? –