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
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
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)])
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)])