Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm trying to visualize the SDP cone over 3x3 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}]

share|improve this question
Hmm. What's an SDP? – István Zachar Jan 26 '12 at 11:09
@IstvánZachar Probably 'semi-definite programming' – Brett Champion Jan 26 '12 at 15:16
@IstvánZachar wikipedia has a somewhat scant definition of spectrahedron. But, it may be enough to go be. – rcollyer Jan 26 '12 at 15:59
Yaroslav, I wanted to ask you: We were trying to get some questions migrated from Stack Overflow that are very mma specific and to close as dupes (some of them answered by you), and we faced some resistance from the mods there and one of the reasons that was mentioned was that the answerer might complain about loss of rep (in this case, one of the answers was your sin[x] answer). It's a valid point and so I just wanted to check with you — do you mind if your old questions/answers are migrated here? A list of questions currently being considered is here: – R. M. Oct 6 '12 at 1:30
I don't mind, as long as they are still easily findable – Yaroslav Bulatov Oct 6 '12 at 2:26
up vote 5 down vote accepted

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

share|improve this answer
Ah, clipping the output range...yes, seems to do what I needed – Yaroslav Bulatov Jan 26 '12 at 20:19

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}]


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?

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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