finding complex zeros of a square root algebraic expression

96 Views Asked by At

FORENOTE: My question relates to finding the eigenvalues of a non linear map evaulauted at a fixed point in order to solve for the bifurcations of the dynamical system wrt a parameter c, although I am interested purely in the mathematics of my question.

The expression I am trying to solve (for c) is as follows:
$\frac{9 + 4c \pm{\sqrt{225 + 48c + 16c^2}}}{12} = 1$
This can be simplified to a root finding problem
$-3 + 4c \pm{\sqrt{225 + 48c + 16c^2}} = 0$

To my understanding there should be 2 or maybe even 4 answers (complex answers included) for c however I am only able to find 1. The answer I am able to find is somewhat trivial and comes from rearranging the above equation and squaring both sides to find c = -3:
$225 + 48c + 16c^2 = (3-4c)^2 \therefore c = -3$

At the very least it seems that there should be two answers for c, one for the $+$ case of $\pm$ and the other for the $-$ case, but I do not know how to find them. Indeed there should be two answers because c = -3 is only valid for the $+$ case (upon evaluating the 2nd expression for the $-$ case the answer is $-30$ which is not $0$ i.e. roots are not repeated). Intuition also tells me that, since there is a quadratic involved in the square root, each of these cases may even have two solutions for c.
In essence I am looking for a mathematical way of finding the other answer(s) for c, or an explanation as to why it does not exist.

1

There are 1 best solutions below

2
On

$$225+48x+16 x^2 - (3-4x)^2=0$$ has no term in $x^2$, the two terms cancel each other out, leaving you with a linear equation in $x$.

A numeric search for a complex solution for the negative case came up with nothing:

package main

import (
    "fmt"
    "math"
    "math/cmplx"
)

func main() {
    limit := 1000.0
    step := 0.1
    min := math.Inf(1)
    for x := -limit; x <= limit; x += step {
        for y := -limit; y <= limit; y += step {
            c := complex(x, y)
            ex := complex(3, 0) + 4*c - cmplx.Sqrt(complex(225, 0)+48*c+16*c*c)
            a := cmplx.Abs(ex)
            if a < min {
                if a < 100 {
                    fmt.Printf("%g %v %v\n", a, c, ex)
                }
                min = a
            }
        }
    }
}

The minimum this achieved on my computer is this:

3.0000930225447293 (-1.4999999998411289-1000i) (-3.000000000000004-0.023625069768058893i)

This is Google Go language, you can run it in the browser here: https://go.dev/play/p/yEYdLxdm9on However, it will time out, so you will need to change the limits.