import sympy as sp class FunctionGenerator: def __init__(self): self.x = sp.Symbol('x') def generate(self, sequence): """生成函数表达式 参数: sequence (list): 输入数列 返回: tuple: (符号表达式, 一般数学表达式, LaTeX表达式) """ try: sequence = [float(x) for x in sequence] if len(sequence) < 2: raise ValueError("至少需要两个数来生成函数") # 生成符号表达式 symbol_expr = self._generate_symbolic_expression(sequence) # 生成一般数学表达式 general_expr = self._generate_general_expression(symbol_expr) # 生成LaTeX表达式 latex_expr = self._generate_latex_expression(symbol_expr) return symbol_expr, general_expr, latex_expr except Exception as e: raise ValueError(f"生成函数时出错: {str(e)}") def _generate_symbolic_expression(self, sequence): """生成符号表达式""" # 使用拉格朗日插值 terms = [] for i in range(len(sequence)): numerator = 1 denominator = 1 for j in range(len(sequence)): if j != i: numerator *= (self.x - (j + 1)) denominator *= ((i + 1) - (j + 1)) term = sp.Rational(sequence[i]) * numerator / denominator terms.append(term) return sp.simplify(sum(terms)) def _generate_general_expression(self, symbol_expr): """生成一般数学表达式""" expr_str = str(symbol_expr) # 仅替换非符号表达式中的 ** 为 ^ expr_str = expr_str.replace('**', '^') return f"y = {expr_str}" def _generate_latex_expression(self, symbol_expr): """生成LaTeX表达式""" return f"y = {sp.latex(symbol_expr)}" def _identify_pattern(self, sequence): """识别数列模式""" # 检查指数增长 if len(sequence) > 1: ratios = [sequence[i+1]/sequence[i] for i in range(len(sequence)-1)] if all(abs(r - ratios[0]) < 1e-10 for r in ratios): base = sp.Rational(sequence[1]) / sp.Rational(sequence[0]) return f"{base}**(x)" # 检查线性增长 differences = [sequence[i+1] - sequence[i] for i in range(len(sequence)-1)] if len(set(round(d, 10) for d in differences)) == 1: diff = differences[0] return f"{sp.Rational(sequence[0])} + {sp.Rational(diff)}*(x)" return None def test_function_generator(test_sequences=None): """测试函数生成器""" generator = FunctionGenerator() test_sequences = test_sequences or [ [1, 2, 4, 8, 16], # 指数增长 [1, 3, 5, 7, 9], # 线性增长 [1, 2, 4, 8, 16, 31] # 复杂序列 ] for seq in test_sequences: print(f"\n测试序列: {seq}") try: symbol_expr, general_expr, latex_expr = generator.generate(seq) print("符号表达式: y =", symbol_expr) print("一般数学表达式:", general_expr) print("LaTeX表达式:", latex_expr) except Exception as e: print(f"错误: {str(e)}") if __name__ == "__main__": test_function_generator()