Site Tools


A Quadratic Solver in Script

Developer: RhinoScript
Summary: Demonstrates how to solve quadratic equations in RhinoScript and python.

Question

I am trying to solve quadratic equations, but the results seem incorrect at times. What can I do?

quad.jpg

Answer

Most likely, the problem that you are experiencing are floating point rounding errors. Being that you only get 15 decimal places of accuracy, you can use them all up if you are dealing with small numbers.

The following algorithm should produce more accurate results:

RhinoScript

quadratic_solver.rvb
Function QuadraticSolver(a, b, c)
  Dim d, s0, s1
  d = b * b - 4 * a * c
  If d < 0 Then
    ' No real solution
    QuadraticSolver = Null
  Else
    s0 = (-b - Sqr(d)) / (2 * a)
    s1 = (-b + Sqr(d)) / (2 * a)
    If Abs(s0) < Abs(s1) Then s0 = s1
    s1 = c / (a * s0)
    QuadraticSolver = Array(s0,s1)
  End If
End Function

Python

quadratic_solver.py
import math
def quadraticsolver(a,b,c):
    d = b * b - 4 * a * c
    if d < 0: return # No real solution
 
    s0 = (-b - math.sqrt(d)) / (2 * a)
    s1 = (-b + math.sqrt(d)) / (2 * a)
    if abs(s0) < abs(s1): s0 = s1
    s1 = c / (a * s0)
    return s0, s1
developer/scriptsamples/quadraticsolver.txt ยท Last modified: 2012/09/19 by steve