ladybug.rootfinding module

Utilities for finding roots of continuous functions.

ladybug.rootfinding.bisect(a, b, fn, epsilon, target=0)[source]

Solve for a root using the simplest root-finding algorithm.

It is extremely reliable. However, it converges slowly for this reason, it is recommended that this only be used after the secant() method has returned None.

Parameters
  • a – A lower guess of the value you are tying to find.

  • b – A higher guess of the value you are tying to find.

  • fn

    A function representing the relationship between the value you are trying to find and the target condition you are trying to satisfy. It should typically be structured in the following way:

    def fn(value_trying_to_find):
        funct(value_trying_to_find) - target_desired_from_funct
    

    …but the subtraction should be switched if value_trying_to_find has a negative relationship with the funct.

  • epsilon – The acceptable error in the target_desired_from_funct.

  • target – The target slope (typically 0 for a local minima or maxima).

Returns

root – The value that gives the target_desired_from_funct.

References

[1] Wikipedia contributors. (2018, December 29). Root-finding algorithm. In Wikipedia, The Free Encyclopedia. Retrieved 18:16, December 30, 2018, from https://en.wikipedia.org/wiki/Root-finding_algorithm#Bisection_method

ladybug.rootfinding.secant(a, b, fn, epsilon)[source]

Solve for a root using one of the fastest root-finding algorithms.

The method calculates the slope of the function fn and this enables it to converge to a solution very fast. However, if started too far away from a root, the method may not converge (returning a None). For this reason, it is recommended that this function be used first in any guess-and-check workflow and, if it fails to find a root, the bisect() method should be used.

Parameters
  • a – The lowest possible boundary of the value you are tying to find.

  • b – The highest possible boundary of the value you are tying to find.

  • fn

    A function representing the relationship between the value you are trying to find and the target condition you are trying to satisfy. It should typically be structured in the following way:

    def fn(value_trying_to_find):
        funct(value_trying_to_find) - target_desired_from_funct
    

    …but the subtraction should be switched if value_trying_to_find has a negative relationship with the funct.

  • epsilon – The acceptable error in the target_desired_from_funct.

Returns

root – The value that gives the target_desired_from_funct in the sample above (aka. the value that returns 0 from the fn).

References

[1] Wikipedia contributors. (2018, December 29). Root-finding algorithm. In Wikipedia, The Free Encyclopedia. Retrieved 18:16, December 30, 2018, from https://en.wikipedia.org/wiki/Root-finding_algorithm#Secant_method

ladybug.rootfinding.secant_three_var(a, b, fn, epsilon, other_args)[source]

Solve the roots of a 3-variable function with one of the fastest algorithms.

Parameters
  • a – A tuple with 3 numbers for the the lowest boundary of the roots.

  • b – A tuple with 3 numbers for the the highest boundary of the roots.

  • fn – A function for which roots are to be solved. That is, where the output of the function is a tuple of three zeros.

  • epsilon – The acceptable error in the resulting root.

  • other_args – Other input arguments for the fn other than the ones being adjusted to solve the root.

Returns

root – a tuple of 3 values that return a vector of zeros from the fn.