Skip to main content

mathematical optimization - How to define and plot a maximum function?


Define a function $g$ as follows:


f = 2/((x1 + Sqrt[3] x2)^2 + (y1 + Sqrt[3] y2)^2)
X = vx1^2*D[D[f, x1], x1] + vx2^2*D[D[f, x2], x2] + 2 vx1*vx2*D[D[f, x1], x2]
Y= vx1*D[f, x1] + vx2*D[f, x2]
g=X+Y^2


The function $g$ is clearly a function in 6 variables ($vx1,vx2,x1,x2,y1,y2$).


Now I want to define a function in two variables $max$ as the maximum of $g$ for $x1,x2,y1,y2$ which vary in the following hypersurface


H = ImplicitRegion[{3 (-x1^2 - y1^2 + x2^2 + y2^2) + 
2 Sqrt[3] (x1*x2 + y1*y2) == 0}, {x1, y1, x2, y2}]

So I want to (but I don't know how to) define the function $max:\mathbb{R}^2\rightarrow \mathbb{R}$ as follows:


$$max(vx1,vx2)=\max\limits_{(x1,x2,y1,y2)\in H}g(vx1,vx2,x1,x2,y1,y2)$$


All I could think of is the command


FindMaximum[{g, {x1, y1, x2, y2} ∈ H}, {x1, y1, x2, y2}]


but this doesn't define a function, it just gives the maximum of $g$ for specific values of $vx1,vx2$.


How can I define the function $max$? It's important to me to define it as a function because I need to




  • derive it in its smooth points




  • plot it





  • define other functions which involve $max$ in their definition




How can I do it?


EDIT: I followed the suggestions of user Corey979 and defined the function max[vx1,vx2], but with FindMaximum substitued by MaxValue, since I'm interested in the maximum value (as I thought was clear in my definition). But then I'm not able to do any operation with the function max:


Any of these operations


D[max[vx1, vx2], vx1]

Plot3D[max[vx1, vx2], {vx1, -10, 10}, {vx2, -10, 10}]


FindMaximum[{max[vx1, vx2]}, {vx1, vx2}]

Will require an extremely long computational time and will give no output. Which is strange, since with my old code


f = 2/((x1 + Sqrt[3] x2)^2 + (y1 + Sqrt[3] y2)^2)
X = vx1^2*D[D[f, x1], x1] + vx2^2*D[D[f, x2], x2] + 2 vx1*vx2*D[D[f, x1], x2]
Y= vx1*D[f, x1] + vx2*D[f, x2]
g=X+Y^2
H = ImplicitRegion[{3 (-x1^2 - y1^2 + x2^2 + y2^2) +
2 Sqrt[3] (x1*x2 + y1*y2) == 0}, {x1, y1, x2, y2}]

FindMaximum[{g, {x1, y1, x2, y2} ∈ H}, {vx1,vx2,x1, y1, x2, y2}]

I was able to get the answer


{2.39111, {vx1 -> 1.55608, vx2 -> 1.96316, x1 -> 0.810245, y1 -> -0.236216, x2 -> 1.34919, y2 -> -0.463331}}

Is there a better way to define max in such a way that it will be possible to perform operations with it?



Answer



Define your functions as functions:


f[x1_, x2_, y1_, y2_] := 
2/((x1 + Sqrt[3] x2)^2 + (y1 + Sqrt[3] y2)^2)


X[vx1_, vx2_, x1_, x2_, y1_, y2_] :=
vx1^2*D[D[f[x1, x2, y1, y2], x1], x1] +
vx2^2*D[D[f[x1, x2, y1, y2], x2], x2] +
2 vx1*vx2*D[D[f[x1, x2, y1, y2], x1], x2]

Y[vx1_, vx2_, x1_, x2_, y1_, y2_] :=
vx1*D[f[x1, x2, y1, y2], x1] + vx2*D[f[x1, x2, y1, y2], x2]

g[vx1_, vx2_, x1_, x2_, y1_, y2_] :=

X[vx1, vx2, x1, x2, y1, y2] + Y[vx1, vx2, x1, x2, y1, y2]^2

H = ImplicitRegion[{3 (-x1^2 - y1^2 + x2^2 + y2^2) + 2 Sqrt[3] (x1*x2 + y1*y2) == 0}, {x1, y1, x2, y2}]

Define the max as a function:


max[vx1_, vx2_] := 
FindMaximum[{g[vx1, vx2, x1, x2, y1,
y2], {x1, y1, x2, y2} ∈ H}, {x1, y1, x2, y2}]

Then



m = max[1000., 1000.]

enter image description here


(The value of the maximum is a numerical zero; you might want to incorporate Chop in max.) Verify that the solution is in H:


m[[2, All, 2]] ∈ H


True



Comments

Popular posts from this blog

front end - keyboard shortcut to invoke Insert new matrix

I frequently need to type in some matrices, and the menu command Insert > Table/Matrix > New... allows matrices with lines drawn between columns and rows, which is very helpful. I would like to make a keyboard shortcut for it, but cannot find the relevant frontend token command (4209405) for it. Since the FullForm[] and InputForm[] of matrices with lines drawn between rows and columns is the same as those without lines, it's hard to do this via 3rd party system-wide text expanders (e.g. autohotkey or atext on mac). How does one assign a keyboard shortcut for the menu item Insert > Table/Matrix > New... , preferably using only mathematica? Thanks! Answer In the MenuSetup.tr (for linux located in the $InstallationDirectory/SystemFiles/FrontEnd/TextResources/X/ directory), I changed the line MenuItem["&New...", "CreateGridBoxDialog"] to read MenuItem["&New...", "CreateGridBoxDialog", MenuKey["m", Modifiers-...

How to thread a list

I have data in format data = {{a1, a2}, {b1, b2}, {c1, c2}, {d1, d2}} Tableform: I want to thread it to : tdata = {{{a1, b1}, {a2, b2}}, {{a1, c1}, {a2, c2}}, {{a1, d1}, {a2, d2}}} Tableform: And I would like to do better then pseudofunction[n_] := Transpose[{data2[[1]], data2[[n]]}]; SetAttributes[pseudofunction, Listable]; Range[2, 4] // pseudofunction Here is my benchmark data, where data3 is normal sample of real data. data3 = Drop[ExcelWorkBook[[Column1 ;; Column4]], None, 1]; data2 = {a #, b #, c #, d #} & /@ Range[1, 10^5]; data = RandomReal[{0, 1}, {10^6, 4}]; Here is my benchmark code kptnw[list_] := Transpose[{Table[First@#, {Length@# - 1}], Rest@#}, {3, 1, 2}] &@list kptnw2[list_] := Transpose[{ConstantArray[First@#, Length@# - 1], Rest@#}, {3, 1, 2}] &@list OleksandrR[list_] := Flatten[Outer[List, List@First[list], Rest[list], 1], {{2}, {1, 4}}] paradox2[list_] := Partition[Riffle[list[[1]], #], 2] & /@ Drop[list, 1] RM[list_] := FoldList[Transpose[{First@li...

plotting - How to draw lines between specified dots on ListPlot?

I would like to create a plot where I have unconnected dots and some connected. So far, I have figured out how to draw the dots. My code is the following: ListPlot[{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {1, 7}, {2, 8}, {3, 9}, {4, 10}, {1, 10}, {2, 11}, {3, 12}, {4,13}, {2.5, 7}}, Ticks -> {{1, 2, 3, 4}, None}, AxesStyle -> Thin, TicksStyle -> Directive[Black, Bold, 12], Mesh -> Full] I have thought using ListLinePlot command, but I don't know how to specify to the command to draw only selected lines between the dots. Do have any suggestions/hints on how to do that? Thank you. Answer One possibility would be to use Epilog with Line : ListPlot[ {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {1, 7}, {2, 8}, {3, 9}, {4, 10}, {1, 10}, {2, 11}, {3, 12}, {4, 13}, {2.5, 7}}, Ticks -> {{1, 2, 3, 4}, None}, AxesStyle -> Thin, TicksStyle -> Directive[Black, Bold, 12], Mesh -> Full, Epilog -> { Line[ ...