Module game_qu.math.indefinite_integral
Expand source code
from game_qu.math.function import Function
import sys
class IndefiniteIntegral:
"""Essentially a wrapper class for a function that makes finding the bounded value from the integral easy"""
indefinite_integral = None
def __init__(self, indefinite_integral: Function) -> None:
"""Initializes the object"""
self.indefinite_integral = indefinite_integral
def evaluate(self, start, end) -> float:
"""
Returns:
float: the value gotten from using the bounds for the indefinite integral"""
return self.indefinite_integral.get_y_coordinate(end) - self.indefinite_integral.get_y_coordinate(start)
def set_indefinite_integral(self, indefinite_integral) -> None:
"""Sets the indefinite integral of the function"""
self.indefinite_integral = indefinite_integral
@staticmethod
def get_polynomial_indefinite_integral(polynomial):
"""
Returns:
Function: the indefinite integral of the polynomial (does not modify the passed in polynomial)"""
new_terms = []
for term in polynomial.get_terms():
# Using the reverse power rule of indefinite integrals
new_coefficient = term.get_coefficient() * 1/(term.get_degree() + 1)
new_degree = term.get_degree() + 1
new_term = term.get_polynomial_term_with_values(new_coefficient, new_degree)
new_terms.append(new_term)
return polynomial.get_polynomial_with_terms(new_terms)
@staticmethod
def evaluate_polynomial_area(polynomial, start, end) -> float:
"""
Returns:
float: the area of the polynomial within the bounds of start and end"""
integral_function = IndefiniteIntegral.get_polynomial_indefinite_integral(polynomial)
return IndefiniteIntegral(integral_function).evaluate(start, end)
Classes
class IndefiniteIntegral (indefinite_integral: Function)
-
Essentially a wrapper class for a function that makes finding the bounded value from the integral easy
Initializes the object
Expand source code
class IndefiniteIntegral: """Essentially a wrapper class for a function that makes finding the bounded value from the integral easy""" indefinite_integral = None def __init__(self, indefinite_integral: Function) -> None: """Initializes the object""" self.indefinite_integral = indefinite_integral def evaluate(self, start, end) -> float: """ Returns: float: the value gotten from using the bounds for the indefinite integral""" return self.indefinite_integral.get_y_coordinate(end) - self.indefinite_integral.get_y_coordinate(start) def set_indefinite_integral(self, indefinite_integral) -> None: """Sets the indefinite integral of the function""" self.indefinite_integral = indefinite_integral @staticmethod def get_polynomial_indefinite_integral(polynomial): """ Returns: Function: the indefinite integral of the polynomial (does not modify the passed in polynomial)""" new_terms = [] for term in polynomial.get_terms(): # Using the reverse power rule of indefinite integrals new_coefficient = term.get_coefficient() * 1/(term.get_degree() + 1) new_degree = term.get_degree() + 1 new_term = term.get_polynomial_term_with_values(new_coefficient, new_degree) new_terms.append(new_term) return polynomial.get_polynomial_with_terms(new_terms) @staticmethod def evaluate_polynomial_area(polynomial, start, end) -> float: """ Returns: float: the area of the polynomial within the bounds of start and end""" integral_function = IndefiniteIntegral.get_polynomial_indefinite_integral(polynomial) return IndefiniteIntegral(integral_function).evaluate(start, end)
Class variables
var indefinite_integral
Static methods
def evaluate_polynomial_area(polynomial, start, end) ‑> float
-
Returns
float
- the area of the polynomial within the bounds of start and end
Expand source code
@staticmethod def evaluate_polynomial_area(polynomial, start, end) -> float: """ Returns: float: the area of the polynomial within the bounds of start and end""" integral_function = IndefiniteIntegral.get_polynomial_indefinite_integral(polynomial) return IndefiniteIntegral(integral_function).evaluate(start, end)
def get_polynomial_indefinite_integral(polynomial)
-
Returns
Function
- the indefinite integral of the polynomial (does not modify the passed in polynomial)
Expand source code
@staticmethod def get_polynomial_indefinite_integral(polynomial): """ Returns: Function: the indefinite integral of the polynomial (does not modify the passed in polynomial)""" new_terms = [] for term in polynomial.get_terms(): # Using the reverse power rule of indefinite integrals new_coefficient = term.get_coefficient() * 1/(term.get_degree() + 1) new_degree = term.get_degree() + 1 new_term = term.get_polynomial_term_with_values(new_coefficient, new_degree) new_terms.append(new_term) return polynomial.get_polynomial_with_terms(new_terms)
Methods
def evaluate(self, start, end) ‑> float
-
Returns
float
- the value gotten from using the bounds for the indefinite integral
Expand source code
def evaluate(self, start, end) -> float: """ Returns: float: the value gotten from using the bounds for the indefinite integral""" return self.indefinite_integral.get_y_coordinate(end) - self.indefinite_integral.get_y_coordinate(start)
def set_indefinite_integral(self, indefinite_integral) ‑> None
-
Sets the indefinite integral of the function
Expand source code
def set_indefinite_integral(self, indefinite_integral) -> None: """Sets the indefinite integral of the function""" self.indefinite_integral = indefinite_integral