|
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_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()
|
|
|