You are on page 1of 2

Sub Roots(dseta As Variant, eta As Variant, x1 As Variant, x2 As Variant, x3 As Variant, x4 As

Variant)

Dim p As Double, q As Double, disc As Double, m As Double, o As Double, theta As Double

'solving for a depressed form

p = -((dseta^(2) / 3)) + eta

q = (2 / 27) * (dseta^(3)) - (dseta * eta / 3) + zeta

disc = ((q / 2) ^ 2) + ((p / 3) ^ 3)

If disc < 0 Then 'Polar form identify real and imaginary roots

m = 2 * Sqr(-p / 3)

o=3*q/p/m

theta = Application.WorksheetFunction.Acos(o) / 3

x1 = m * Cos(theta)

x2 = m * Cos(theta + (4 / 3) * 3.14159265358979)

x3 = m * Cos(theta + (2 / 3) * 3.14159265358979)

adv = 0 'When adv=0, three roots are idenified

Else 'One real root

x4 = (-q / 2 + Sqr(disc)) ^ (1 / 3) + (-q / 2 - Sqr(disc)) ^ (1 / 3)

End If

End Sub

Function zl(alpha As Variant, betha As Variant, gamma As Variant) As Variant

Dim x1 As Double, x2 As Double, x3 As Double, x4 As Double

Call Roots(alpha, betha, gamma, x1, x2, x3, x4)

If x4 = 0 Then
zl = Application.WorksheetFunction.Max(x1, x2, x3) - alpha / 3

Else

zl = x4 - alpha / 3

End Function

Function zv(alpha As Variant, betha As varianat, gamma As Variant) As Variant

Dim x1 As Double, x2 As Double, x3 As Double, x4 As Double

Call Roots(alpha,betha,gamma,x1,x2,x3)- alpha/3

If x4 = 0 Then

zv = Application.WorksheetFuntion.Max(x1, x2, x3) - alpha / 3

Else

zv = x4 - alpaha / 3

End If

End Function

End Function

You might also like