I have a situation where a function sys yields solutions in complex values while I change its argument `x from $-\pi$ to $+\pi$ as in the following:

Bands[sys[t1, t2, 3], {x, -\[Pi], \[Pi]}]

which gives me list of complex values with x as following:

{{-3.14159, -1.99705 + 0.0000290634 I}, {-3.02073, -1.99703 - 
0.0000293392 I}, {-2.8897, -1.99698 - 
0.0000302499 I}, {-2.76735, -1.99691 - 0.0000316411 I},...{3.14159, 1.99705 
+0.0000290634 I}}

Now if I write

Re[Bands[sys[t1, t2, 3], {x, -\[Pi], \[Pi]}]]

it gives me correct list of real parts of the complex values which is:

{{-3.14159, -1.99705},{-3.02073, -1.99703},{-2.8897, -1.99698}...so on} but for imaginary parts:

Im[Bands[sys[t1, t2, 3], {x, -\[Pi], \[Pi]}]]

it gives me:

{{0,0.0000290634 I},{0,- 0.0000293392 I},{0,- 0.0000302499 I}...so on}

thus, not showing the correct values of variable x. As a result, the real values giving me correct plot but the imaginary values don't give me correct plot since the values of 'x' show all zero which is not true.

Someone (@Rom38) suggested me to use: {First@#, Im@Last@#} & /@ [Bands[...]. But in my case how do I implement it when the plot command I use to plot the imaginary part is:

PlotBands[Im[Bands[sys[t1, t2, 1.5], {x, -2 \[Pi], 2[Pi]}]], FrameLabel -> {"x", "Im(E)"}]

Any help will be much appreciated. Many thanks!

  • $\begingroup$ It is clear that imaginary part of the real number is zero. Try something like {First@#,Im@Last@#}&/@Bands[....] $\endgroup$
    – Rom38
    Apr 16, 2018 at 6:27
  • $\begingroup$ Actually my problem is precisely as in this link: mathematica.stackexchange.com/questions/58549/… @ Rom38 I couldn't understand your point. Can you explain. $\endgroup$
    – foi
    Apr 16, 2018 at 6:48
  • $\begingroup$ My point is following: applying the Im for both {x,y}, you will have {0,Im[y]} in case if x is already real. Mapping my pure function {First@#,Im@Last@#}& for each sublist of your list, you will apply the Im only to second element of each {x,y} pair. You should use the /@ command for this. As result, just copy-paste my code from previous comment and see the result $\endgroup$
    – Rom38
    Apr 16, 2018 at 7:19
  • $\begingroup$ @Sam don't use answers to comment. Even with low reputation you can comment under your questions. The problem seems to be that you have created two accounts, see: mathematica.stackexchange.com/help/merging-accounts to fix this. $\endgroup$
    – Kuba
    Apr 16, 2018 at 7:31


Your Answer

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

Browse other questions tagged or ask your own question.