0
$\begingroup$

Mathematical formulation of my problem: Let $\Theta\subset\Bbb R$ be an interval. For each $\theta\in\Theta$ let $f_\theta: \Bbb C\to\Bbb C$ be some function and $z_{\theta,1},\ldots,z_{\theta,n(\theta)}$ the (finitely many) solutions to $f_\theta(z)=0$. I would like to plot the multifunction

$$ \Theta\ni\theta\mapsto \left(|z_{\theta,1}|,\ldots,|z_{\theta,n(\theta)}|\right)\in\bigcup_{n\in\Bbb N}\Bbb R^n$$

in a plot with two axes, one for $\theta$ and one in which all values $|z_{\theta,1}|,\ldots,|z_{\theta,n(\theta)}|$ are plotted.

The specific function I am interested in is essentially

$$ f_\theta(z)=(1+i\theta)z-(1+i)|z|^2z+0.01,$$

so $n(\theta)\le3$. The solutions $z_{\theta,1},\ldots,z_{\theta,n(\theta)}$ need not be exact, numerical approximations will do just fine.

What I've done so far: Writing $z=z_1+iz_2$ and using

{{z11, z12}, {z21, z22}, {z31, z32}} =
  {z1, z2} /. 
  NSolve[
    z1 - theta z2 - (z1^2 + z2^2) z1 + (z1^2 + z2^2) z2 + 0.01 == 0 &&
    theta z1 + z2 - (z1^2 + z2^2) z1 - (z1^2 + z2^2) z2 == 0,
    {z1, z2}
  ]

I get solutions -- plus perhaps some nonsensical solution with "complex real part". So what I could try next is to "forget" these nonsensical solutions and then define a function depending on $\theta$ which I could plot, but I'm kind of lost there since I'm quite new to Mathematica. Any help is very much appreciated.

$\endgroup$
1
$\begingroup$

I think you can use ComplexExpand to construct the appropriate equations for the real and imaginary parts, and then use the domain Reals to make sure that the real and imaginary parts are real numbers. Your function:

f[θ_] := (1 + I θ) z - (1 + I) Abs[z]^2 z + 1/100

Then, use ComplexExpand to convert to coupled equations for the real and imaginary parts:

Thread[
    Block[{z = a + I b}, ComplexExpand[ReIm @ f[θ]]] == 0
]

{1/100 + a - a^3 + a^2 b - a b^2 + b^3 - b θ == 0, -a^3 + b - a^2 b - a b^2 - b^3 + a θ == 0}

Finally, a function to solve the equations:

roots[θ_] := With[{eqns = Block[{z = a + I b}, ComplexExpand[ReIm @ f[θ]]]},
     Flatten[{a + b I} /. NSolve[Thread[eqns == 0], {a, b}, Reals]]
]

Example:

roots[1]

{0.709594 - 0.709594 I, -0.704593 + 0.704593 I, -0.00500025 + 0.00500025 I}

Check:

f[1] /. z->roots[1]

{-2.08722*10^-14 + 0. I, 2.88658*10^-15 + 0. I, 2.08619*10^-17 + 0. I}

which is zero up to machine number fuzziness.

| improve this answer | |
$\endgroup$
  • $\begingroup$ Thanks a lot for your nice help! Since roots is a multi-valued function where the number of values depends on $\theta$, I still have trouble plotting it. How is it done? $\endgroup$ – Mars Plastic Oct 25 '19 at 17:15

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.