2
$\begingroup$

I am trying to make a density plot of $|min~[Im(v)]|$ (where $v$ are the eigenvalues of a matrix) as function of $\gamma$ (horizontal axis) and $T$(vertical), The code upto now is

    ListDensityPlot[
 Table[Min[
   Im /@ Eigenvalues[
     With[{k = 2, p = Pi/2}, 
      With[{a = -2 Cos[p], b = -2 Cos[p] - \[Gamma]/(1 + Abs[T]^2)^2, 
        c = (\[Gamma]*T^2*E^(2 I*p))/(1 + Abs[T]^2)^2, n = 2*k + 1}, 
       mat = SparseArray[{Band[{1, 1}] -> 
           Join[ConstantArray[a, n - (k + 1)], {b}, 
            ConstantArray[a, n - (k + 1)]], 
          Band[{2, 1}] -> ConstantArray[1, 2 k], 
          Band[{1, 2}] -> ConstantArray[1, 2 k], 
          Band[{n + 1, n + 1}] -> 
           Join[ConstantArray[-a, n - (k + 1)], {-b}, 
            ConstantArray[-a, n - (k + 1)]], 
          Band[{n + 1, n + 2}] -> ConstantArray[-1, 2 k], 
          Band[{n + 2, n + 1}] -> 
           ConstantArray[-1, 2 k], {n + k + 1, k + 1} -> -c, {k + 1, 
            n + k + 1} -> c}, {2 n, 2 n}];
       mat]]]], {\[Gamma], -30, 30, 0.1}, {T, 0., 5, 0.1}], 
 PlotRange -> All, DataRange -> {{-30, 30}, {0, 5}}]

which gave me enter image description here

However, my required output should be close to the following [![enter image description here][2]][2]

The required output is for k=49 case, however it takes longer to get an output with $198\times 198$ matrix ($k=49$), so I thought one could get atleast something similar for a smaller matrix. Therefore I used $k=2$ just to see if I get any close.

$\endgroup$

1 Answer 1

3
$\begingroup$

Seems to me like you've already gotten the correct result, just rotated a bit. I've switched $T$ and $\gamma$ in your code.

    ListDensityPlot[
 Table[Min[
   Im /@ Eigenvalues[
     With[{k = 2, p = Pi/2}, 
      With[{a = -2 Cos[p], b = -2 Cos[p] - \[Gamma]/(1 + Abs[T]^2)^2, 
        c = (\[Gamma]*T^2*E^(2 I*p))/(1 + Abs[T]^2)^2, n = 2*k + 1}, 
       mat = SparseArray[{Band[{1, 1}] -> 
           Join[ConstantArray[a, n - (k + 1)], {b}, 
            ConstantArray[a, n - (k + 1)]], 
          Band[{2, 1}] -> ConstantArray[1, 2 k], 
          Band[{1, 2}] -> ConstantArray[1, 2 k], 
          Band[{n + 1, n + 1}] -> 
           Join[ConstantArray[-a, n - (k + 1)], {-b}, 
            ConstantArray[-a, n - (k + 1)]], 
          Band[{n + 1, n + 2}] -> ConstantArray[-1, 2 k], 
          Band[{n + 2, n + 1}] -> 
           ConstantArray[-1, 2 k], {n + k + 1, k + 1} -> -c, {k + 1, 
            n + k + 1} -> c}, {2 n, 2 n}];
       mat]]]], {T, 0, 5, 0.1}, {\[Gamma], -30, 30, 0.1}], 
 PlotRange -> All, DataRange -> {{-30, 30}, {0, 5}}]

Reverse <span class=$\gamma$ and $T$ ">

Also, the Y-axis in your bottom picture is reversed. You can use ScalingFunctions for that.

    ListDensityPlot[
 Table[Min[
   Im /@ Eigenvalues[
     With[{k = 2, p = Pi/2}, 
      With[{a = -2 Cos[p], b = -2 Cos[p] - \[Gamma]/(1 + Abs[T]^2)^2, 
        c = (\[Gamma]*T^2*E^(2 I*p))/(1 + Abs[T]^2)^2, n = 2*k + 1}, 
       mat = SparseArray[{Band[{1, 1}] -> 
           Join[ConstantArray[a, n - (k + 1)], {b}, 
            ConstantArray[a, n - (k + 1)]], 
          Band[{2, 1}] -> ConstantArray[1, 2 k], 
          Band[{1, 2}] -> ConstantArray[1, 2 k], 
          Band[{n + 1, n + 1}] -> 
           Join[ConstantArray[-a, n - (k + 1)], {-b}, 
            ConstantArray[-a, n - (k + 1)]], 
          Band[{n + 1, n + 2}] -> ConstantArray[-1, 2 k], 
          Band[{n + 2, n + 1}] -> 
           ConstantArray[-1, 2 k], {n + k + 1, k + 1} -> -c, {k + 1, 
            n + k + 1} -> c}, {2 n, 2 n}];
       mat]]]], {T, 0, 5, 0.1}, {\[Gamma], -30, 30, 0.1}], 
 PlotRange -> All, DataRange -> {{-30, 30}, {0, 5}}, ScalingFunctions -> {Identity, "Reverse"}]

Reversed Y-axis

When using Reverse in ScalingFunctions, you have to adjust the ticks also. I wasn't able to figure that out yet, this answer might help.

You can change the colors by adding a ColorFunction. For example, adding ColorFunction -> "TemperatureMap". Though to get colors like in your picture, you'd have to write a specific function.

ColorFunction TemperatureMap

Note: This was done in Mathematica 11.0, earlier versions may not support ScalingFunctions on ListDensityPlot.

$\endgroup$
4
  • $\begingroup$ Thanks. So you mean that my x-axis was $T$, instead of $\gamma$? What is on the x-axis and y axis in your answer now? Secondly, the scale in the required figure appears to be different>? on the y-axis..? One more thing, is it possible to sharpen the colors a bit? $\endgroup$
    – AtoZ
    Oct 26, 2018 at 2:33
  • 1
    $\begingroup$ @AtoZ Yes, $T$ and $\gamma$ were switched around. I made an edit to the answer. $\endgroup$
    – Valrog
    Oct 26, 2018 at 5:07
  • $\begingroup$ Thanks. So in yourlast update, $\gamma$ is on x-axis and $T$ on y-axis? $\endgroup$
    – AtoZ
    Oct 26, 2018 at 6:43
  • 1
    $\begingroup$ @AtoZ Indeed, $\gamma \in [-30, 30]$ on x-axis and $T \in [0, 5]$ on y-axis, just as you defined. $\endgroup$
    – Valrog
    Oct 26, 2018 at 6:45

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.