Click here to Skip to main content
15,924,317 members
Articles / Bisection
Tip/Trick

Real & Imaginary Root Finder using Bisection method

Rate me:
Please Sign up or sign in to vote.
5.00/5 (2 votes)
20 May 2024MIT1 min read 4K   144   3   2
Finds Roots through only successive derivatives and Bisection method.
Algorithm to find all Roots of a Polynomial (of 1 variable and real coefficients) through finding the successive derivatives and employing only the Bisection method.

Image 1

Introduction

Present algorithm finds Polynomials' Real and Imaginary Roots. The Polynomial may have only real coefficients, but roots may be imaginary conjugate and a root may have or not multiplicity more than one. The algorithm will find out real and imaginary roots.

Background

For example, (x^2+1)*(x-2) has two conjugate imaginary roots at -i, +i; and a real root x=2. The code will find the three roots. The code first does the multiplication

(x^2+1)*(x-2) = x^3-2*x^2+x-2

and then obtains the roots. So, you may enter the polynomial in either way x^3-2*x^2+x-2 or (x^2+1)*(x-2)

Using the code

There is one class: BisectionRootFinder. To instantiate, it is possible to pass a Math10 polynomial (Math10 is the code from my CAS calculator). More presumably, you will call shared method BisectionRootFinder.ParseFromString(strPolynomial) passing the polynomial as a string.

When instantiating, finding roots is performed.

Now, you may get the roots as an array of Double, calling rrf.GetRealRoots and rrf.GetImaginayRoots.

 

VB
Private Sub btnRoots_Click(sender As Object, e As RoutedEventArgs) Handles btnRoots.Click
    Dim sb As New System.Text.StringBuilder
    Try
        Globalization.CultureInfo.CurrentCulture = New Globalization.CultureInfo("en-US")
        Dim ts As Int64 = Now.Ticks
        Dim rrf As BisectionRootFinder = BisectionRootFinder.ParseFromString(tbPolynomial.Text)
        sb.Append("From polynomial " + vbCrLf + rrf.GetInitialPolynomial.ToString + vbCrLf + vbCrLf)
        sb.Append("Real Roots are:" + vbCrLf)
        If rrf.GetRealRoots.Length = 0 Then
            sb.Append("No real roots where found.")
        Else
            sb.Append(rrf.ToString)
        End If
        sb.Append(vbCrLf)
        sb.Append("Imaginary Roots are:" + vbCrLf)
        If rrf.GetImaginaryRoots.Length = 0 Then
            sb.Append("No imaginary roots where found.")
        Else
            sb.Append(rrf.ToStringImaginaryRoots)
        End If
        sb.Append(vbCrLf)
        Dim ts2 As New TimeSpan(Now.Ticks - ts)
        sb.Append(" " + Math.Round(ts2.TotalMilliseconds).ToString + " ms")
        tbRoots.Text = sb.ToString
    Catch ex As Exception
        tbRoots.Text = ex.Message
    End Try
End Sub

 

Basically, if "p" is our polynomial and is of degree 4, for example, it will obtain the polynomials' successive derivatives of "p", of degree 3, 2 an 1. Then it will obtain the bounds of polynomial degree 1 (by Cauchy's bounds); next of degree 2 and 3. Through bisection method, degree 1 polynomial root (if any) is added as a new bound (interval) for degree 2 polynomial and, here on, up to polynomial of degree 4. Each new root, in polynomials of degree < 4 is evaluated in "p", to ackwnoledge if there is multiplicity. In case of multiplicity, "p" is deflated and .FindRoots is invoked recursively.

History

Version (1.0.2 2024/05/20

Naturally, the next step was to find the imaginary roots. This is done by changes of variable: y=-i*x; and z=sqr(y)

License

This article, along with any associated source code and files, is licensed under The MIT License


Written By
Spain Spain
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 5 Pin
Ștefan-Mihai MOGA22-May-24 21:12
professionalȘtefan-Mihai MOGA22-May-24 21:12 
GeneralRe: My vote of 5 Pin
Xavier Junqué i de Fortuny23-May-24 0:19
Xavier Junqué i de Fortuny23-May-24 0:19 
Thank you so much Ștefan. I'm trying to find out if it's possible to extend the algorithm to polynomials with imaginary coefficients, but I'm not sure if it's possible.

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.