class LagrangePolynomial
Attributes
points[RW]
values[RW]
Public Class Methods
new(input)
click to toggle source
# File lib/polynomial_ruby/lagrange_polynomial.rb, line 4 def initialize(input) self.points = input.map { |a, _| a } self.values = input.map { |_, b| b } end
Public Instance Methods
call()
click to toggle source
# File lib/polynomial_ruby/lagrange_polynomial.rb, line 9 def call basis_polynomials.zip(values) .map { |p, v| p * v } .reduce(:+) end
Private Instance Methods
basis_polynomials()
click to toggle source
# File lib/polynomial_ruby/lagrange_polynomial.rb, line 17 def basis_polynomials Array.new(points.size) { |j| numerator = Polynomial.new([BigDecimal(1)]) denominator = BigDecimal(1) points.each_with_index { |el, m| numerator *= Polynomial.new([BigDecimal(0), BigDecimal(1)]) - el unless(j == m) } points.each_with_index { |el, m| denominator *= (points[j] - points[m]) unless(j == m) } numerator / denominator } end