2

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?

smilingbuddha
  • 439
  • 4
  • 8
  • 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

2 Answers2

2

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*)
Rojo
  • 42,601
  • 7
  • 96
  • 188
1

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}]
Rolf Mertig
  • 17,172
  • 1
  • 45
  • 76