File size: 2,498 Bytes
3e7998b
2f94119
 
 
3e7998b
2f94119
3e7998b
 
 
 
 
2318650
3e7998b
2318650
 
3e7998b
2318650
 
3e7998b
 
 
2318650
3e7998b
2318650
 
 
3e7998b
2318650
 
3e7998b
 
 
 
 
2318650
3e7998b
8a4e70b
2318650
3e7998b
2318650
2f94119
2318650
3e7998b
2318650
8a4e70b
2318650
 
 
3e7998b
 
 
 
2318650
 
3e7998b
 
2318650
3e7998b
 
2f94119
3e7998b
2318650
3e7998b
2318650
 
2f94119
 
2318650
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
\
import gradio as gr
import sympy as sp

TITLE = "LanguageBridge — Math Fast Agent (SymPy)"

def solve_math(q: str):
    q = (q or "").strip()
    if not q:
        return "請輸入算式或方程,例如:2x+3=11;或:sin(x)**2 + cos(x)**2;或:factor(x**2-9)"
    try:
        # 支援方程/聯立:可用分號或換行分隔
        if "=" in q:
            parts = [s.strip() for seg in q.split(";") for s in seg.split("\n")]
            eqs, syms = [], set()
            for s in parts:
                if not s: 
                    continue
                if "=" not in s:
                    continue
                left, right = s.split("=", 1)
                eq = sp.Eq(sp.sympify(left), sp.sympify(right))
                eqs.append(eq)
                syms |= eq.free_symbols
                if hasattr(eq, "rhs"):
                    syms |= eq.rhs.free_symbols
            if not syms:
                x = sp.symbols("x")
                syms = {x}
            sol = sp.solve(eqs, list(syms), dict=True)
            if not sol:
                return "無解或需要更多條件。"
            lines = []
            for i, s in enumerate(sol, 1):
                lines.append(f"解 {i}: " + ", ".join([f"{k} = {sp.simplify(v)}" for k, v in s.items()]))
            return "\n".join(lines)

        # 非方程:做一輪常見操作
        expr = sp.sympify(q)
        tips = []
        try:
            tips.append(f"簡化:{sp.simplify(expr)}")
        except Exception:
            tips.append(f"簡化:{expr}")
        try:
            fact = sp.factor(expr)
            if fact != expr:
                tips.append(f"因式分解:{fact}")
        except Exception:
            pass
        try:
            x = list(expr.free_symbols)[0] if expr.free_symbols else sp.symbols("x")
            tips.append(f"對 {x} 微分:{sp.diff(expr, x)}")
            tips.append(f"對 {x} 積分:{sp.integrate(expr, x)}")
        except Exception:
            pass
        return "\n".join(tips) if tips else f"結果:{expr}"
    except Exception as e:
        return f"解析失敗:{e}"

with gr.Blocks(title=TITLE) as demo:
    gr.Markdown(f"## {TITLE}\n貼上算式(可多行 / 用分號 `;` 分隔):")
    q = gr.Textbox(lines=6, label="題目 / 算式(可含聯立方程)")
    out = gr.Textbox(lines=10, label="輸出")
    gr.Button("送出 🚀").click(fn=solve_math, inputs=q, outputs=out)

if __name__ == "__main__":
    demo.launch()