# Composing two functions in Mathematica [duplicate]

Possible Duplicate:
Composition of mappings not working as expected

I am new to Mathematica and I am having trouble defining a certain composition of functions.

Let m1 and m2 be maps such that $m_1: \mathbb{R}^2 \to \mathbb{R}^2$ and $m_2: \mathbb{R}^2 \to \mathbb{R}^2$ where $\mathbb{R}$ is the real line

m1[eta_, zeta_] = {eta^3, zeta^3}
m2[x_, y_] = x^2 + y^2

m3[eta_, zeta_]  = Composition[m2, m1][eta, zeta]


On evaluating the last line, I get the output

(* m2[{eta^3, zeta^3}] *)


But the anwer to this should be m3[eta,zeta]=eta^6 + zeta^6

How can I do this?

-

## marked as duplicate by Artes, Brett Champion, Leonid Shifrin, Simon Woods, rm -rf♦Jan 10 '13 at 17:04

m3[eta_, zeta_] = m2 @@ m1[eta, zeta] see documentation about Apply –  ssch Jan 10 '13 at 15:36
Composition is only meaningful for single-argument functions. Make your functions take a single list-argument instead of several scalar arguments. –  Szabolcs Jan 10 '13 at 15:44

Maybe this is clearer? :

m1[{eta_,zeta_}]={eta^3,zeta^3};
m2[{x_,y_}]=x^2+y^2;
m3[{eta_,zeta_}]=Composition[m2,m1][{eta,zeta}]

-

If your m1 function outputs a list of 2 values, your m2 function should take that as input. Makes sense, right?

m1[eta_, zeta_] = {eta^3, zeta^3}
m2[{x_, y_}] = x^2 + y^2


Otherwise, make it return a Sequence

m1[eta_, zeta_] = Sequence[eta^3, zeta^3]
m2[x_, y_] = x^2 + y^2


Now

m3[eta_, zeta_] = Composition[m2, m1][eta, zeta]

(*eta^6 + zeta^6*)

-
but then why shouldn't m1 take a list of 2 values, too? –  Rolf Mertig Jan 10 '13 at 16:12
@RolfMertig I agree, both getting a list may be a cleaner design –  Rojo Jan 10 '13 at 16:47