示例#1
0
    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]
示例#3
0
    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())