문법의 의미를 모르겠습니다.

게시판 IDL Q&A 문법의 의미를 모르겠습니다.

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #2622 Reply
      kimkb
      회원

      pro gauss1p, x, p, f, skew=skew, _EXTRA=extra

      sz = size(x)
      if sz(sz(0)+1) EQ 5 then smax = 26D else smax = 13.

      if n_elements(p) GE 3 then norm = p(2) else norm = x(0)*0 + 1

      u = ((x-p(0))/(abs(p(1)) > 1e-20))^2
      mask = u LT (smax^2) ;; Prevent floating underflow
      f = norm * mask * exp(-0.5*temporary(u) * mask) / (sqrt(2.D * !dpi)*p(1))
      mask = 0

      if n_elements(skew) GT 0 then $
      f = (1.D + skew * (x-p(0))/p(1))*f

      return
      end

      가우스 함수 프로시저입니다.미

      첫번째로 이 코드에서 u = ((x-p(0))/(abs(p(1)) > 1e-20))^2 ” > 1e-20 ” 적혀 있는 이 부분이 코드에서 어떤 의미를 지니는지 잘 모르겠습니다… ( 1e-20보다 커야만한다는건지.. 만약에 작으면 어떻게 되는건지.. ? 변수를 찾는 코드와 함께 돌리는데 1e-20보다 작으면 어떻게 되는지? 의미가 궁금합니다. ㅠ,.ㅠ)

      두번째로 비슷해 보이는데 mask = u LT (smax^2) 이부분도 잘 모르겠네요 대충 이해하기론 u가 smax^2보다 작으면 mask로 둬라?라는 의미인것같은데요..

      감사합니다!!

    • #2623 Reply
      Jonghyuk
      회원

      1. 수식 안에서 부등호는 IDL 연산자로 쓰이는데, 최대값 또는 최소값을 지정합니다.

      > 1e-20 은 왼쪽에 있는 배열이 1e-20 보다는 커야한다는 의미입니다. 다시말하면, 최소값은 1e-20이고, 배열 중 1e-20 보다 작은 값들은 모두 1e-20 으로 대체됩니다. 올려주신 프로그램에서는 분모로 0이 들어가게 되면 위험하니까 그 위험을 방지하는 장치로 사용된 것 같습니다.

      IDL> a=indgen(10)
      IDL> print, a
      0 1 2 3 4 5 6 7 8 9
      IDL> print, a > 3 ;3을 최소값으로 지정함
      3 3 3 3 4 5 6 7 8 9

      2. LT(Less Than)이나 EQ(Equal) GT(Greater Than) GE, LE 는 양쪽의 값을 비교하여 참이면 1, 아니면 0을 리턴합니다. mask라는 배열이 새로 생기는 건데요, U와 (smax^2)을 비교해서 그 중에 U가 더 작으면 1, 그렇지 않으면 0으로 채워지는 배열을 만들어냅니다. 아래는 예시입니다.

      IDL> u=findgen(10)^2
      IDL> v=findgen(10)*3
      IDL> print, u
      0.0 1.0 4.0 9.0 16.0 25.0 36.0 49.0 64.0 81.0
      IDL> print, v
      0.0 3.0 6.0 9.0 12.0 15.0 18.0 21.0 24.0 27.0
      IDL> mask=u lt v
      IDL> print, mask
      0 1 1 0 0 0 0 0 0 0

1 답변 글타래를 보이고 있습니다
'문법의 의미를 모르겠습니다.'에 답변달기
글쓴이 정보: