示例#1
0
def finite_check(f, x, L):
    def check_fx(exprs, x):
        return x not in exprs.free_symbols

    def check_sincos(_expr, x, L):
        if isinstance(_expr, (sin, cos)):
            sincos_args = _expr.args[0]

            if sincos_args.match(a * (pi / L) * x + b) is not None:
                return True
            else:
                return False

    _expr = sincos_to_sum(TR2(TR1(f)))
    add_coeff = _expr.as_coeff_add()

    a = Wild('a', properties=[
        lambda k: k.is_Integer,
        lambda k: k != S.Zero,
    ])
    b = Wild('b', properties=[
        lambda k: x not in k.free_symbols,
    ])

    for s in add_coeff[1]:
        mul_coeffs = s.as_coeff_mul()[1]
        for t in mul_coeffs:
            if not (check_fx(t, x) or check_sincos(t, x, L)):
                return False, f

    return True, _expr
示例#2
0
def finite_check(f, x, L):
    def check_fx(exprs, x):
        return x not in exprs.free_symbols

    def check_sincos(expr, x, L):
        if type(expr) == sin or type(expr) == cos:
            sincos_args = expr.args[0]

            if sincos_args.match(a * (pi / L) * x + b) is not None:
                return True
            else:
                return False

    expr = sincos_to_sum(TR2(TR1(f)))
    res_expr = S.Zero
    add_coeff = expr.as_coeff_add()
    res_expr += add_coeff[0]

    a = Wild('a', properties=[
        lambda k: k.is_Integer,
        lambda k: k != S.Zero,
    ])
    b = Wild('b',
             properties=[
                 lambda k: x not in k.free_symbols or k == S.Zero,
             ])

    for s in add_coeff[1]:
        mul_coeffs = s.as_coeff_mul()[1]
        for t in mul_coeffs:
            if not (check_fx(t, x) or check_sincos(t, x, L)):
                return False, f
        res_expr += TR10(s)
    return True, res_expr.collect(
        [sin(a * (pi / L) * x), cos(a * (pi / L) * x)])
示例#3
0
def test_TR1():
    assert TR1(2 * csc(x) + sec(x)) == 1 / cos(x) + 2 / sin(x)