For a list of several functions:

functions = {a[x,y,z],b[x,y,z],c[x,y,z],d[x,y,z]};

I want to maximize the maximum value of a function of three variables. This is easily done:

max = Maximize[Max[functions], {x,y,z}].

This returns the maximum value and the corresponding values x -> x0,y -> y0,z -> z0. I want the element in the list functions that corresponds to the maximum value. However, I want to determine this inside the Maximize step. Hence I am not looking for the following answer:

max = Maximize[Max[functions], {x,y,z}];
maxelement = Position[functions /. max[[2]], max[[1]]]

since this determines the max element separately. Instead I want to define maxelement inside the Maximize step in the definition for max.


a[x_,y_,z_] := E^(-E^(2 Im[x]) Abs[y Sqrt[1 - z] + 0.1 Sqrt[z]]^2);
b[x_,y_,z_] := E^(-E^(2 Im[x]) Abs[y Sqrt[1 - z] + 0.1 I Sqrt[z]]^2);
c[x_,y_,z_] := E^(-E^(2 Im[x]) Abs[y Sqrt[1 - z] + Sqrt[z]]^2);
d[x_,y_,z_] := E^(-E^(2 Im[x]) Abs[y Sqrt[1 - z]]);

functions = {a[x,y,z],b[x,y,z],c[x,y,z],d[x,y,z]};
maxvalue = Maximize[maxelement Max[functions], {x,y,z}];

where max inside the Maximize denotes the element of functions corresponding to the max value after substituting the values for x,y,z returned by maxvalue into functions.

  • $\begingroup$ Could you please provide a workable numerical example ? $\endgroup$
    – Lotus
    Commented Dec 9, 2019 at 9:35
  • $\begingroup$ @Lotus, done - see updated question. $\endgroup$
    – Sid
    Commented Dec 9, 2019 at 9:55
  • $\begingroup$ What's the point of doing it this way? Can you explain what you need the index maxelement for inside Maximize? (I'm asking since this might affect potential answers) $\endgroup$
    – Lukas Lang
    Commented Dec 9, 2019 at 11:01
  • $\begingroup$ @LukasLang, simply since maxelement may change according to the output of the maximisation. $\endgroup$
    – Sid
    Commented Dec 9, 2019 at 11:25

1 Answer 1


Perhaps not the most elegant solution, but you can make a parameter representing the index of each function, e.g. if your initial equations are:

a[x_, y_, z_] := x - x^2 - y^2 - z^2;(*Maximum of 1/4*)
b[x_, y_, z_] := 2 y - x^2 - y^2 - z^2;(*Maximum of 1*)
c[x_, y_, z_] := 3 z - x^2 - y^2 - z^2;(*Maximum of 9/4*)
d[x_, y_, z_] := 4 x + y - x^2 - y^2 - z^2;(*Maximum of 17/4*)

they would become:

a[x_, y_, z_, p_] := (x - x^2 - y^2 - z^2)*KroneckerDelta[p, 1];
b[x_, y_, z_, p_] := (2 y - x^2 - y^2 - z^2)*KroneckerDelta[p, 2];
c[x_, y_, z_, p_] := (3 z - x^2 - y^2 - z^2)*KroneckerDelta[p, 3];
d[x_, y_, z_, p_] := (4 x + y - x^2 - y^2 - z^2)*KroneckerDelta[p, 4];

with the full list and fitting process as:

functions = {a[x, y, z, p], b[x, y, z, p], c[x, y, z, p], d[x, y, z, p]};
max = Maximize[Max[functions], {x, y, z, p}]

out: {17/4,{x->2,y->1/2,z->0,p->4}}

Where p->4 indicates that the last function (d) is the maximal one.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.