2015. 7. 25. 02:25 - 성돌

Mathematica에서 명령어를 뒤에서 사용하는 방법 (//방식으로 명령을 내리기)



Mathematica에 명령어를 사용하는 방법 중 뒤에서 명령어를 내리는 독특한 방법에 대해서 알아보자.
이는 내가 매우 좋아하는 방식이다.

뒤에서 명령어를 사용할 때, //방식으로 명령어를 사용하게 된다.
(이를 
Postfix라고 한다...)


먼저 상당히 일반적인 것부터 소개를 하자..
대부분의 코딩 프로그램이 이러한 형태를 가지고 있는데...
아래와 같은 형태로 명령을 하는 것이다.

1
명령어[...]

사실 이렇게 적어놔서 더 뭔 말인지 모를 수도 있겠는데...
예를 들면 쉽다.

우리가 x라는 변수를 없애고자 하면,

1
Clear[x]

라고 하면 된다.
여기서 Clear가 명령어에 해당하고, x는 명령을 당하는 대상일 것이다.

대부분 다 이렇게 하고, 이게 당연한데...
Mathematica는 한 가지 더 매우 편리한 옵션을 제공
한다.

바로... //방식으로 뒤에서 명령을 입력하는 것이다.

예를 들어, 위의 Clear라는 명령을 아래와 같이 //뒤에 Clear를 적음으로 수행할 수도 있다.

1
x//Clear

이건 사실 굉장히 편리하다.

이게 왜 편리하냐면...
여러가지 기능을 동시에 수행한다고 해보자.


예를 들어,
어떤 식에 Refine이라는 명령과 Simplify라는 명령과 Expand라는 명령을 순서대로 수행한다고 해보자.
기존 방식으로는 아래와 같이 해야한다.

1
Expand[Simplify[Refine[수식]]]

그런데....이런 것들이 괄호를 사용하게 됨으로 복잡하게 보이고...
코딩이 복잡해질 수록... 앞뒤를 왔다갔다해야되서...
상당히 귀찮아지게 될 수 있다.

하지만 Mathematica안에서는 훨씬 간단하고 단순하게
괄호를 사용하지 않고 명령을 내릴 수 있는 것이다.

1
수식//Refine//Simplify//Expand

명령어의 구조가 훨씬 눈에 잘 보이지 않는가?
우선 괄호를 사용하지 않게 되기에... 상당히 편리할 때가 많다.



지금까지 경우는 아무 옵션없이 명령어만 사용한 것이지만
Mathematica에서 사용하는 모든 명령어는 옵션과 함께 //형태의 명령어를 사용할 수 있다.

이는 #와 &를 함께 사용해 줌으로 가능하다.

예를 들어, 선형회귀를 하는 함수인 LinearModelFit
아래와 같은 명령어 구조를 가진다.

1
LinearModelFit[데이터, x, x]

그걸 #와 &를 이용해서 아래와 같이 //방식으로 명령어를 내릴 수 있다.

1
데이터//LinearModelFit[#, x, x]&

즉, 원래 '데이터'가 있던 위치에 #를 두고 맨 뒤에 &를 사용함으로 닫아주는 것이다.

Mathematica에서는 #와 &가 항상 쌍으로 등장한다는 것을 더불어
기억해두면 좋을 것이다.