2010년 8월 3일 화요일

두 방정식의 양변을 더하라.

다음 두 방정식의 양변을 더하면?
A == B
C == D
%% + %
결과는 (A == B) + (C == D) 이다. 당연히 우리가 원하는 결과가 아니다. 매스매티카가 이 정도도 처리 못할까?
A == B
C == D
%% + % // Thread[#, Equal] &
이렇게 Thread를 이용해서 Plus를 각 변끼리 적용해주면 된다. 두 방정식이 목록으로 주어졌다면, ListPlus로 교체하는 것만으로도 더하는 효과를 줄 수 있다.
{A == B, C == D}
Plus @@ % // Thread[#, Equal] &
그럼, 양변을 빼려면 어떻게 해야 할까? 앞의 예를 이용해서,
A == B
C == D
%% - % // Thread[#, Equal] &
이렇게? 안타깝게도 결과는 A - (C == D) == B - (C == D) 이다. 빼기가 두 번째 방정식의 양변에 적용되지 않아서 이런 결과가 나온다. 그러므로 양변을 더하기 전에 C == D의 양변에에 각각 -1을 곱해주어야 한다.
A == B
C == D
%% + (-1 # &) /@ % // Thread[#, Equal] & 

댓글 없음:

댓글 쓰기