4
$\begingroup$

I already tried to ask this question, but it was unclear what I meant, so I will try to ask it again and explain it more carrefully.

For example I will use a toy problem. Suppose we have equation:

eq=k*x^2 + 2*x + 1

I want to use ContourPlot, to plot the curves where eq=0 for some values of x andk. If x and k are both real, this is easy to do:

ContourPlot[eq == 0, {k, 0, 2}, {x, -3, 3}]

But I want to treat x as complex variable, and k as real variable. For any real k we have 2 complex roots of the equation eq==0. I am not interested in Im[x], I only interested in Re[x]. So want I want is something like this:

ContourPlot[eq == 0, {k, 0, 2}, {Re[x], -3, 3}]

So, for each k, it should solve the equation eq==0, and plot Re[x] against k, omitting Im[x]. I want 2D plot, I don't want 3D plot. (My original problem is linear stability analythis, where x is groth rate, k is wave number).

Say it another way: basically, we have here 3 parameters (complex x + real k). I want to plot Re[x] against k, ignoring Im[x], so it is like a projection of 3D curve to 2D surface.

Note: Plotting Complex Quantity Functions doesn't solve my problem.

Note:

Manipulate[ContourPlot[k (reX + imX I)^2 + 2 (reX + imX I) + 1 == 0, {k, 0, 2}, {reX, -3, 3}], {imX, -3, 3}]

Doesn't solve it as well: I don't want to manipulate Im[x], I want to omit it, whatever it is.

$\endgroup$
  • $\begingroup$ march, I add another explanation: this is like a projection of 3D curve (with parameters Re[x], Im[x], k) to 2D space (with only 2 parameters: Re[x] and k) $\endgroup$ – Mikhail Genkin Sep 22 '15 at 17:32
  • $\begingroup$ march, there is no freedom: for each k, you can solve the equation and find 2 complex roots. So I want to plot real part of this roots against k, omitting imaginary part of the roots. Where did you find freedom?? $\endgroup$ – Mikhail Genkin Sep 22 '15 at 17:33
  • $\begingroup$ How complicated is your general equation? Is it algebraically separable into real and imaginary parts if you write x = Re[x] + I Im[x]? Or will have you have imaginary numbers inside special functions like, say, Erf? $\endgroup$ – march Sep 22 '15 at 17:46
  • $\begingroup$ march, it is of the third order, but numbers are crazy sometimes. I know, that I can separate it and solve for both real and imaginary part, then plot what I want. But it is much more safe to do ContourPlot, rather then solving it exactly $\endgroup$ – Mikhail Genkin Sep 22 '15 at 18:04
  • $\begingroup$ Understood. @george2079's ContourPlot method is very clever. I'm working on another method that requires the separability, but it's hard to get it to work, so I may not end up posting an answer. $\endgroup$ – march Sep 22 '15 at 18:13
6
$\begingroup$

Here is a crude way to generate the plot:

Graphics[Point[
     Flatten[Table[ {k, #} & /@ 
        Re[x /. Solve[ k x^2 + 2 x + 1 == 0  , x]], {k, -3, 3, .01}], 
            1]], AspectRatio -> 1]

enter image description here

clipping the plot range..and with Axes->True

enter image description here

Edit: a trick to coax ContourPlot to do the job:

f[k_, x_] := (Re[y] /. 
   Solve[ k (x + y)^2 + 2 (x + y) + 1 == 0  , y] )[[1]]
g[k_, x_] := (Re[y] /. 
   Solve[ k (x + y)^2 + 2 (x + y) + 1 == 0  , y] )[[2]]
ContourPlot[{ f[k, x] == 0, g[k, x] == 0}, {k, -3, 3}, {x, -10, 10}]

enter image description here

$\endgroup$
  • $\begingroup$ Thanks a lot! Is that possible to everything in log-log scale? $\endgroup$ – Mikhail Genkin Sep 22 '15 at 18:02
  • $\begingroup$ work with ListLogLogPlot (wont work for the toy example however because there are no results for k,x both positive ) $\endgroup$ – george2079 Sep 22 '15 at 18:08
  • $\begingroup$ Thanks again. That solves my problem. $\endgroup$ – Mikhail Genkin Sep 22 '15 at 18:09
  • $\begingroup$ No, it's not. This is a root x=(-2+sqrt(4-k))/(2k). Unless k is very small, negative k results in a small x. Nice trick, btw, to assume x=a+b, where a is real, b is complex, and then set Re[b]=0, which automatically results in arbitrary pure imaginary b. $\endgroup$ – Mikhail Genkin Sep 22 '15 at 19:09
  • $\begingroup$ x is not precisely zero there. I think, you are confusing x-axis with k-axis (horizontal axis is k axis, vertical is x-axis). If you are talking about vertical line k=0,than yes, there is a problem, but it arises from the fact, that the equation I provided is singular when k=0: it becomes first order. If you will try to use formula x=(-2+-sqrt(4-k))/(2k) for k=0, you will get 0/0 $\endgroup$ – Mikhail Genkin Sep 22 '15 at 19:52
3
$\begingroup$

Another way using ParametricPlot:

{k, Re[x]} /.
        Solve[k x^2 + 2 x + 1 == 0, x] //
    ParametricPlot[#, {k, -5, 5}] &

k vs Re[x]

$\endgroup$
  • $\begingroup$ @MikhailGenkin You're welcome :) $\endgroup$ – Silvia Sep 23 '15 at 17:54

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.