def apply_to(self, expression: Expression) -> List[Expression]: if not expression.is_integral(): return False integral_info = IntegralInfo(expression.sympy_expr.function, parse_expr('x')) subs_rule = substitution_rule(integral_info) if subs_rule is None: # Can not be applied by parts return [] u = subs_rule.u_func du = Derivative(u, subs_rule.symbol).doit() variables = [ ExpressionVariable('u', Expression(u)), ExpressionVariable('du', Expression(du)), ] equivalent_expression = subs_rule.substep.context.xreplace({subs_rule.u_var: parse_expr('u')}) equivalent_expression = equivalent_expression * subs_rule.constant result = Expression(f'Integral({str(equivalent_expression)}, u)', variables, is_latex=False) return [ result ]
def apply_to(self, expression: Expression) -> List[Expression]: if not expression.is_integral(): return False integral_info = IntegralInfo(expression.sympy_expr.function, parse_expr('x')) by_parts_rule = parts_rule(integral_info) if by_parts_rule is None: # Can not be applied by parts return [] u = by_parts_rule.u dv = by_parts_rule.dv v = Integral(dv, by_parts_rule.symbol).doit( ) # TODO Lucas: Buscar si hay una manera menos cochina de hacer esto variables = [ ExpressionVariable('u(x)', Expression(u)), ExpressionVariable('v(x)', Expression(v)), ] equivalent_expression = Expression( '\\int (u(x) * \\frac{d(v(x))}{dx}) dx', variables) #main_expression == Expression('x * cos(x) - \\int (\\frac{d(x)}{dx} * cos(x)) dx') #main_expression = Expression('x * cos(x) - \\int (\\frac{d(x)}{dx} * cos(x)) dx', variables) # TODO: investigar dx #Expression('\\int u * \\frac{d(v)}{dx}', variables) # \\int(x * sen(x)) dx + \\int(x * cos(x)) dx # \\int(x * sen(x)) dx + POR PARTES(\\int(x * cos(x)) dx) # POR PARTES(\\int(x * sen(x)) dx) + \\int(x * cos(x)) dx return [equivalent_expression]
def there_is_a_chance_to_apply_to(self, expression: Expression): if not expression.is_integral(): return False integral_info = IntegralInfo(expression.sympy_expr.function, parse_expr('x')) subs_rule = substitution_rule(integral_info) return True if subs_rule is not None else False
def test_integrate_is_integral_false(self): expression = Expression('Derivative(x+x**2,x)', is_latex=False) self.assertFalse(expression.is_integral())
def test_integrate_is_integral(self): expression = Expression('Integral(x+x**2,x)', is_latex=False) self.assertTrue(expression.is_integral())