defmodule Solver do @epsilon 0.000001 @moduledoc """ Create and solve linear systems of equations. # Example: Create a function description for converting f to c, and another one to convert k to c. Together, the entire system of equations can be solved given any one input. ``` > f = {[:f, :c], fn f -> (f - 32) * 5/9 end} > k = {[:k, :c], fn k -> k - 273.15 end} > Solver.solve([f, k], %{c: 37.0}) %{f: 98.6, c: 37.0, k: 310.15} ``` """ defdelegate find_zero(f, f_prime, start \\ @epsilon), to: Solver.Newton, as: :newton_iterator defdelegate derivative(f, delta \\ @epsilon), to: Solver.Richardson, as: :richardson defdelegate converge(iterator, epsilon \\ 0.0000000000001), to: Solver.Convergence defdelegate zero_function(f), to: Solver.Newton defdelegate reverse(tuple), to: Solver.Reverse defdelegate expand(eq_list), to: Solver.Reverse defdelegate solve(eq_list, problem), to: Solver.Solver defdelegate solve(eq_list), to: Solver.Solver end