The Structural Engineer's Corner

Eng. Onorio Francesco Salvatore

Quadratic, cubic and quartic equation solver – Excel spreadsheet

Written By: Francesco Salvatore Onorio - Nov• 09•10

Here you can find an Excel sheet calculator for quadratic, cubic and quartic equations.

Solving Quadratic Equations:

Solution of quadratics. With negative numbers we understand that every quadratic equation in the variable x can be written in the form

ax² + bx + c = 0,

where a, b, and c are constants. We also know that the general solution is given by the quadratic formula:

x = ( –b ±√(b2 – 4ac) ) / (2a)

where there are two distinct real solutions if the discriminant (b2 – 4ac) is positive, one double real solution if the discriminant is 0, and no real solutions if the discriminant is negative.

Solving Cubic Equations:

If you thought the Quadratic Formula was complicated, the method for solving Cubic Equations is even more complex. We will use the example from the Cubic Equation Calculator:

2x³  – 4x²  – 22x + 24 = 0

Cubic equations have to be solved in several steps. First we define a variable ‘f’:

f = ( (3c/a) – (b²/a²) ) / 3

“Plugging in” the numbers from the above equation, we get:

f = ( (3 * -22/2) – (16/4) ) / 3       =     – 12.333333…

Next we define ‘g’:

g = ( (2b³/a³) – (9bc/a²) + (27d/a) ) / 27

From this point on, you are expected to “plug in” the numbers:

g = 4.07407407407407…

h = (g²/4) + (f³/27)

h = -65.333333…

If h > 0, there is only 1 real root and is solved by another method.

(SCROLL down for this method)

For the special case where f=0, g=0 and h = 0, all 3 roots are real and equal.

(SCROLL down for this method)

When h <= 0, as is the case here, all 3 roots are real and we proceed as follows:

ALL 3 Roots Are Real

i = ((g²/4) – h)½

i = 8.33563754151978…

j = (i)1/3

j = 2.0275875100994063…

NOTE: Trigonometric Calculations Are In Radians

k = arc cosine (- (g / 2i))

k = 1.817673356517739…

L = j * -1

L = -2.0275875100994…

M = cosine (K/3)

M = 0.8219949365268…

N = (Square Root of 3) * sine (K/3)

N = 0.9863939238321…

P = (b/3a) * -1

P = 0.6666666666666…

x1 = 2j * cosine(k/3) – (b/3a)

x1 = 4

x2 = L * (M + N) + P

x2 = -3

x3 = L * (M – N) + P

x3 = 1

When Only 1 Root Is Real

3x³   – 10x²   + 14x + 27 = 0

f = ( (3c/a) – (b²/a²) ) / 3

f =   0.962962962962962…

g = ( (2b³/a³) – (9bc/a²) + (27d/a) ) / 27

g = 11.441700960219478…

h = (g²/4) + (f ³/27)

h = 32.761202560585275…

R = -(g/2) + (h)½

R = .002889779596782…

S = (R)^1/3

S = .142436591824886…

T = -(g/2) – (h)½

T = -11.4445907398163…

U = (T)^1/3

U = -2.25354770293599…

X1 = (S + U) – (b/3a)

X1 = -1

X2 = -(S + U)/2 – (b/3a) + i*(S-U)*(3)½/2

X2 = 2.16666666666… + i*2.07498326633146

X3 = -(S + U)/2 – (b/3a) – i*(S-U)*(3)½/2

X3 = 2.16666666666… – i*2.07498326633146

When All 3 Roots Are Real and Equal

X³ + 6x² + 12x + 8 = 0

f = ( (3c/a) – (b²/a²) ) / 3

f =   ((3*12/1)-(36/1)) / 3

f =   0

g = ( (2b³/a³) – (9bc/a²) + (27d/a) ) / 27

g = ((2*216/1) – (9*6*12/1) + (27*8/1)) / 0

g = (432 – 648 + 216) / 0

g = 0

h = (g²/4) + (f³/27)

h=0

x1 = x2 = x3= (d/a)^1/3 * -1

x1 = x2 = x3= (8/1)^1/3 * -1

x1 = x2 = x3= -2

Here you can download the Equation Solver:

download at just 1.00 eur

For guidance, reports and more you can contact the author at:

onorio@strutturista.com

Eng. Onorio Francesco Salvatore

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

16 Comments

  1. giò says:

    Per le radici (reali e complesse) di una cubica ho sviluppato una apposita funzione che trascrivo di seguito.

    Type Complesso
    r As Double
    i As Double
    f As Boolean
    End Type

    Public Function cubica(a As Double, b As Double, c As Double, d As Double, t As Double, flag As String) As Variant

    Dim PI As Double
    Dim p As Double
    Dim q As Double
    Dim delta As Double
    Dim xn As Double
    Dim fn As Double
    Dim d3 As Double
    Dim AA As Double
    Dim BB As Double

    Dim x1 As Complesso
    Dim x2 As Complesso
    Dim x3 As Complesso

    If a = 0 Then
    cubica = “N.B.: a=0”
    Exit Function
    End If

    PI = 4 * Atn(1)
    t = Abs(t)
    p = -(b ^ 2 – 3 * a * c) / (9 * a ^ 2)
    q = b * c / (6 * a ^ 2) – b ^ 3 / (27 * a ^ 3) – d / (2 * a)
    delta = q ^ 2 + p ^ 3
    xn = -b / (3 * a)
    fn = -2 * a * q

    If Abs(delta) < t Then
    delta = 0
    End If

    Select Case delta
    Case Is 0
    AA = Sgn(q + (delta) ^ 0.5) * (Abs(q + (delta) ^ 0.5)) ^ (1 / 3)
    BB = Sgn(q – (delta) ^ 0.5) * (Abs(q – (delta) ^ 0.5)) ^ (1 / 3)
    x1.r = xn + AA + BB
    x2.r = xn – 0.5 * (AA + BB)
    x3.r = xn – 0.5 * (AA + BB)
    x1.i = 0
    x2.i = 1 * (3) ^ 0.5 * (AA – BB) / 2
    x3.i = -1 * (3) ^ 0.5 * (AA – BB) / 2
    x1.f = True ‘numero reale
    x2.f = False ‘numero complesso
    x3.f = False ‘numero complesso
    End Select

    Select Case flag
    Case “x1r”
    cubica = x1.r
    Case “x1i”
    cubica = x1.i
    Case “x1f”
    cubica = x1.f
    Case “x2r”
    cubica = x2.r
    Case “x2i”
    cubica = x2.i
    Case “x2f”
    cubica = x2.f
    Case “x3r”
    cubica = x3.r
    Case “x3i”
    cubica = x3.i
    Case “x3f”
    cubica = x3.f
    Case “p”
    cubica = p
    Case “q”
    cubica = q
    Case “delta”
    cubica = delta
    Case Else
    cubica = “Flag?”
    End Select

    End Function

    Function Arccos(X As Double) As Double
    Arccos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
    End Function

  2. giò says:

    Per l’uso della funzione:

    a- copiare il codice ed incollarlo in un modulo di progetto excel VBA e quindi tornare sul foglio di lavoro

    b- posizionarsi nella cella ove si vuole inserire la funzione per la ricerca delle soluzioni di una cubica

    c – menu’ Inserisci -> funzione e scegliere le “funzioni definite dall’utente”

    d- selezionare dall’elenco sottostante la funzione “cubica” e quindi inserire i coefficienti della cubica oppure fare riferimento alle celle del foglio che contengono i coefficienti della cubica

    e – Al parametro “flag” attribuire uno dei seguenti valori in funzione del risultato che si desidera sia restituito dalla funzione
    “x1r” = restituisce la parte reale della prima radice
    “x1i” = restituisce la parte immaginaria della prima radice
    “x1f” = restituisce VERO se la prima radice è reale, falso se è Complessa.

    “x2r” = restituisce la parte reale della seconda radice
    “x2i” = restituisce la parte immaginaria della seconda radice
    “x2f” = restituisce VERO se la seconda radice è reale, falso se è Complessa.

    “x3r” = restituisce la parte reale della terza radice
    “x3i” = restituisce la parte immaginaria della terza radice
    “x3f” = restituisce VERO se la terza radice è reale, falso se è Complessa.

    “delta” = restituisce il valore del piccolo determinate

    “q” = restituisce il parametro q della equazione “depressa”
    “p” = restituisce il parametro p della equazione “depressa”

  3. Francesco Salvatore Onorio says:

    Molto interessante. Grazie per il contributo.

    P.S.
    inutile cambiare nome, io non serbo rancori. Saluti sinceri.

  4. giò says:

    Rancori?
    Lo hai forse dimenticato, ma è proprio questo il mio nome, anzi il nomignolo col quale mi chiamano amici e familiari. E la mail che qui riporto è quella che giornalmente leggo.

    Saluti.

  5. Francesco Salvatore Onorio says:

    No, ricordo, ricordo, infatti è bastato solo il nome.

    Poche chiacchiere comunque, se hai altro materiale passa pure che è sempre gradito.

    P.S.
    l’altro è più noto (e ricercato nei motori di ricerca).


  6. I’ve recently started a blog, the information you provide on this site has helped me tremendously. Thank you for all of your time & work.

  7. Francesco Salvatore Onorio says:

    Would be interesting to know how a Structural Engineer could be of help for the “Medicine Ball Exercises”. This is just spam, stop it or I’ll blacklist your IP.

    • giò says:

      davvero interessante capire come questo blog possa essere stato di tremenda utilità per gli esercizi medici delle palle!!!
      Inceramente sono curioso anche io.

  8. Francesco Salvatore Onorio says:

    Giò, sei sempre un signore nelle tue esternazioni. 😀

  9. giò says:

    ho tradotto alla lettera: Medicine Ball Exercises
    La funzione qui riportata può essere utile quando gli oggetti dell’esternazione si mettono a girare cubicamente.

  10. giò says:

    purtroppo nel precedente copincolla del codice sono saltati i casi di delta maggiore e monore di zero. Incollo qui il codice completo

    Type Complesso
    r As Double
    i As Double
    f As Boolean
    End Type

    Public Function cubica(a As Double, b As Double, c As Double, d As Double, t As Double, flag As String) As Variant

    Dim PI As Double
    Dim p As Double
    Dim q As Double
    Dim delta As Double
    Dim xn As Double
    Dim fn As Double
    Dim d3 As Double
    Dim AA As Double
    Dim BB As Double

    Dim x1 As Complesso
    Dim x2 As Complesso
    Dim x3 As Complesso

    If a = 0 Then
    cubica = “N.B.: a=0”
    Exit Function
    End If

    PI = 4 * Atn(1)
    t = Abs(t)
    p = -(b ^ 2 – 3 * a * c) / (9 * a ^ 2)
    q = b * c / (6 * a ^ 2) – b ^ 3 / (27 * a ^ 3) – d / (2 * a)
    delta = q ^ 2 + p ^ 3
    xn = -b / (3 * a)
    fn = -2 * a * q

    If Abs(delta) < t Then
    delta = 0
    End If

    Select Case delta
    Case Is 0
    AA = Sgn(q + (delta) ^ 0.5) * (Abs(q + (delta) ^ 0.5)) ^ (1 / 3)
    BB = Sgn(q – (delta) ^ 0.5) * (Abs(q – (delta) ^ 0.5)) ^ (1 / 3)
    x1.r = xn + AA + BB
    x2.r = xn – 0.5 * (AA + BB)
    x3.r = xn – 0.5 * (AA + BB)
    x1.i = 0
    x2.i = 1 * (3) ^ 0.5 * (AA – BB) / 2
    x3.i = -1 * (3) ^ 0.5 * (AA – BB) / 2
    x1.f = True ‘numero reale
    x2.f = False ‘numero complesso
    x3.f = False ‘numero complesso
    End Select

    Select Case flag
    Case “x1r”
    cubica = x1.r
    Case “x1i”
    cubica = x1.i
    Case “x1f”
    cubica = x1.f
    Case “x2r”
    cubica = x2.r
    Case “x2i”
    cubica = x2.i
    Case “x2f”
    cubica = x2.f
    Case “x3r”
    cubica = x3.r
    Case “x3i”
    cubica = x3.i
    Case “x3f”
    cubica = x3.f
    Case “p”
    cubica = p
    Case “q”
    cubica = q
    Case “delta”
    cubica = delta
    Case Else
    cubica = “Flag?”
    End Select

    End Function

    Function Arccos(X As Double) As Double
    Arccos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
    End Function

  11. giò says:

    Siccome inspiegabilmente non riesco ad incollare l’intero codice (nel copincolla viene omessa sempre una parte di codice), invio separatamente il file contenente il codice ed un esempio di utilizzo della funzione.

    ciao


  12. […] Questo post fa seguito agli sviluppi avutisi nei commenti dell’articolo “Quadratic, cubic and quartic equation solver – Excel spreadsheet“. […]

  13. student loan says:

    Finally, an issue that I am passionate about. I have looked for information of this caliber for the last several hours. Your site is greatly appreciated.


  14. Hi there very nice blog!! Guy .. Beautiful .. Wonderful ..
    I’ll bookmark your blog and take the feeds additionally?

    I’m satisfied to seek out numerous helpful information here in the publish,
    we’d like develop extra techniques on this regard, thanks for sharing.
    . . . . .

  15. free hosting says:

    After I initially commented I seem to have clicked the -Notify me when new comments are
    added- checkbox and now whenever a comment is added I receive four emails with
    the exact same comment. Perhaps there is a way you can remove me from that service?
    Cheers!

Leave a Reply

Your email address will not be published. Required fields are marked *