7
$\begingroup$

I'm trying to visualize the SDP cone over 3×3 matrices by plotting random 3D sections of it. Since each region is a system of inequality constraints, I'm using RegionPlot, but I think the plots would look better if they only showed the surface... what is a good way to achieve this?

spectro2 := (
   X = ( {
      {x1, x2, x3},
      {x2, x4, x5},
      {x3, x5, x6}
     } );
   vars = Union@Flatten@X;
   dvars = {x, y, z};
   m = Length@vars;
   n = Length@dvars;
   makeMat := X /. (Thread[vars -> #]) &;
   proj = makeMat /@ Orthogonalize@RandomReal[{-1, 1}, {n, m}];
   mat2 = 
    Total@MapThread[Times, {proj, dvars}, 1] + IdentityMatrix@Length@X;
   cons = And @@ (Thread[Eigenvalues[mat2] >= 0]);
   RegionPlot3D[cons, {x, -3, 3}, {y, -3, 3}, {z, -3, 3}, Mesh -> 5, 
    PlotStyle -> Opacity[.7], PlotPoints -> 5]
   );
Table[spectro2, {2}, {3}]

spectrahedra

$\endgroup$
  • 1
    $\begingroup$ Hmm. What's an SDP? $\endgroup$ – István Zachar Jan 26 '12 at 11:09
  • $\begingroup$ @IstvánZachar Probably 'semi-definite programming' $\endgroup$ – Brett Champion Jan 26 '12 at 15:16
  • 1
    $\begingroup$ @IstvánZachar wikipedia has a somewhat scant definition of spectrahedron. But, it may be enough to go be. $\endgroup$ – rcollyer Jan 26 '12 at 15:59
5
$\begingroup$

If the desire is to not have a surface appear when the region hits the boundary of the plot range, you could use something like:

Show[RegionPlot3D[Evaluate[cons], {x, -3, 3}, {y, -3, 3}, {z, -3, 3}, 
  PlotRangePadding -> None, Mesh -> 5, PlotStyle -> Opacity[.7], 
  PlotPoints -> 10], PlotRange -> 2.9]

to truncate the plot range to an area inside the boundary.

enter image description here

$\endgroup$
  • $\begingroup$ Ah, clipping the output range...yes, seems to do what I needed $\endgroup$ – Yaroslav Bulatov Jan 26 '12 at 20:19
2
$\begingroup$

For plotting 3D surfaces, there's ContourPlot3D. Here's an example from the documentation:

ContourPlot3D[x^3 + y^2 - z^2 == 0, {x, -2, 2}, {y, -2, 2}, {z, -2, 2}]

ContourPlot3D

However, I can't modify your code because no matter what I change it breaks, so this is all I can give you here. Could you clean it up a bit and document what it's doing so we can actually play around with it?

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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