IDL에서 연산자를 만들 수 있나요?

게시판 IDL Q&A IDL에서 연산자를 만들 수 있나요?

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #1454 Reply
      astroboy
      회원

      안녕하세요.
      numerical method를 공부하던 중에 불편한 점이 있어 질문드립니다.
      현재 공부하고 있는 기법에선 계산을함에 있어 한 쌍의 실수를 이용하는데,(가령 (3,1)이나 (5,1)과 같이)
      기본 4칙연산인 +-*/중 +와 -는 행렬이나 벡터의 연산에서처럼 성분별로 더하거나 빼기때문에 상관이 없는데,
      곱하기와 나누기의 경우에는, (3,1)*(5,1)=(3*5,1*1)이나 (3,1)/(5,1)=(3/5,1/1)과 같은 형태가 아니라
      다른 규칙으로 연산이 이루어집니다.
      현재는 곱하기와 나누기에 대해 각각 함수를 만들어서 곱하기나 나누기를 행하고 있는데, 연산자가 아닌
      함수를 이용해 곱하기와 나누기를 하다보니 수식을 입력하기가 매우 번거롭고 직관적이지도 않습니다.
      (가령, 거듭제곱을 하는 경우에도 3^2와 같이 하는게 아니라 C++에서 power함수를 사용하는 것 처럼 직접
      만든 함수로 연산을 수행하고 있습니다.)
      그래서 이것을 연산자로 만들 수 있으면 좋겠다 생각하는데, 함수를 만드는것 처럼 IDL에서 연산자도
      사용자가 직접 만들수가 있나요?

      도움이 필요합니다 ㅠㅠ

      • 이 게시글은 astroboy에 의해 10 years, 2 months 전에 수정됐습니다.
    • #1457 Reply
      Sangwoo
      회원

      IDL에서는 배열간에도 어떤 연산이든지 각 원소값 단위로 이루어집니다. +, -, *, /, ^ 등등의 연산들 다 마찬가지입니다. 물론 배열끼리의 연산이 이렇게 되기 위해서는 두 배열이 서로 구조가 같아야 한다는 전제가 필요합니다. 계산 결과를 다시 한번 확인해보시기 바랍니다.

    • #1462 Reply
      Sangwoo
      회원

      아 어떤 의미인지 알겠습니다. 사실 사용자 정의의 연산자(Operator)를 만드는 것은 IDL에서는 지원되지 않는 것으로 알고 있습니다. 어차피 FUNCTION이 그런 기능을 수행하도록 할 수 밖에 없을 것 같군요.

      • #1463 Reply
        astroboy
        회원

        아 그렇군요. 조금 편하게 할 순 없을까 싶었는데 아쉽네요. 친절한 답변 감사드립니다!

    • #1458 Reply
      astroboy
      회원

      답변 감사합니다.
      약간 의미가 잘못 전달되지 않았나 싶은데, 우선 저는 현재 1×2(행x열)인 배열끼리의 계산을 하고 있습니다.
      헌데 제가 살펴보고 있는 알고리즘에서의 사칙연산의 규칙이 다음과 같이 정의되어 있습니다.
      x=(a,b), y=(c,d)가 있다고 할 때,
      x+y = (a+c,b+d)
      x-y = (a-c,b-d) 여기까지는 성분별로 연산이 되는 것으로 정의되어 있어 문제가 없습니다.
      하지만 곱셈과 나눗셈에 대해서는 다음과 같이 정의되어 있습니다.
      곱하기는 x*y=(a*c,a*d+b*c)로 정의되어 있으며, 나누기는 x/y=(a/c,(b-(a/c)*d)/c)로 정의되어 있습니다.
      위와같이 곱하기와 나누기가 단순히 성분별로 곱하거나 나누는 것이 아니여서, 현재 곱셈에 대해서는
      times라는 이름으로, 나눗셈은 divide라는 이름으로 두 함수를 만들어 x와 y의 곱, 나눗셈 연산을
      위의 규칙에 따라 행하도록 하여 times(x,y) , divide(x,y)의 형태로 하고 있습니다.
      하지만 곱하기와 나누기를, 만든 times와 divide함수를 사용해 행하다보니, 한 항에 곱하기와 나누기가 여러번 등장하면 수식입력이 번거롭게 됩니다.
      예를들면 (x+y)(-x+xy)/(xy) 를 계산하려면 divide(times(x+y,-x+times(x,y)),times(x,y))가 되는데,
      위와같이 복잡하게 보여서 times나 divide 함수를 연산자형태로 만들 수가 있는가가 궁금합니다.
      가령 times함수가 하는일을 ㅁ이라는 연산자로 대체하고 divide함수가 하는일을 ㅎ이라는 연산자로 대체하여
      (x+y)ㅁ(-x+xㅁy)ㅎ(xㅁy)와 같은형태로 하도록 ㅁ과ㅎ이라는 새로운 연산자를 정의할 수 있는가가 궁금합니다.

      • 이 답변은 astroboy에 의해 10 years, 2 months 전에 수정됐습니다.
2 답변 글타래를 보이고 있습니다
'IDL에서 연산자를 만들 수 있나요?'에 답변달기
글쓴이 정보: