- This topic has 3개 답변, 3명 참여, and was last updated 10 years, 2 months 전에 by 룰루.
-
글쓴이글
-
-
Sangwoo회원
근사되는 함수의 형태가 증가 혹은 감소만 하는 형태(monotonous)인 경우라면, INTERPOL 함수에서 x벡터와 y벡터를 서로 바꿔줌으로써 값을 찾는게 가능할겁니다. 하지만 지금의 예처럼 같은 y값에 대하여 x값이 두 개가 나올 수 있는 형태라면 이 방법이 안먹힐 것으로 생각됩니다. 링크해주신 내용을 기준으로 말씀드리면, index라고 명명된 배열, 즉 내가 y값을 찾고 싶은 x값들로 구성된 배열을 가급적이면 촘촘하게 만듭니다. 아마도 -100에서 +100까지 1 또는 0.1과 같은 간격을 갖는 배열을 생성해서 index 자리에 사용합니다. 그러면 result라는 배열은 이 index 배열과 같은 갯수의 y값들을 담은 배열로 얻어지게 됩니다. 이 result 배열에 대해서 WHERE와 같은 함수를 사용하여, 내가 원하는 값에 해당되는 위치가 어디인지를 확인하고 그 위치 번호를 사용해서 index 배열의 해당 값을 찾아내는 방식으로 작업을 하면 어떨까 합니다.
-
룰루회원
일단 저는 Sangwoo님과 비슷하게 linear interpolation하여 간격비를 이용해 산수로 했었는데,
배열로도 한번 해봐야겠네요. 그리고 tlseorb0111님이 올려주신 예제로도 한번 해보고 비교한번
해봐야 겠네요.ㅎㅎ
두분 답변 감사드립니다 .^^:
-
contour 프로시저의 path_xy 키워드를 활용하면 될것 같습니다.
example)
x = DINDGEN(20)
y = RANDOMU(seed, 20, /double)PLOT, x, y
dum = REBIN(y, N_ELEMENTS(y), 2) ; contour프로시저에 넣기위서서
lev = 0.5 ; 원하는 값
CONTOUR, dum, x, [0, 1], level=lev, path_xy=x_point, /path_data_coord, closed=0, /path_double
;path_xy키워드를 통해서 level에 해당되는 x촤표를 얻을 수 있습니다.
con = WHERE(x_point[1,*] EQ 0)x_point = REFORM(x_point[0, con]) ;
newy = INTERPOL(y, x, x_point)
PRINT, newy
OPLOT, x_point, newy, psym=4, symsize=1.5제 경우에는 별 문제가 없었는데, 위 방법이 여러 상황에 잘 적용되는 것인지는 모르겠네요
- 이 답변은 tlseorb0111에 의해 10 years, 3 months 전에 수정됐습니다.
-
글쓴이글