Download function_generator.py from ldx967/WTFunc: direct link, hf CLI and curl.
- Browser
- Download file 3.67 kB
-
https://huggingface.co/spaces/ldx967/WTFunc/resolve/main/function_generator.py
- Command line
-
hf download hf://spaces/ldx967/WTFunc/function_generator.py
-
curl -L -o function_generator.py https://huggingface.co/spaces/ldx967/WTFunc/resolve/main/function_generator.py
3.67 kB
| 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() | |