Skip to content

Commit 814083c

Browse files
committed
init
1 parent 9200c52 commit 814083c

File tree

4 files changed

+526
-0
lines changed

4 files changed

+526
-0
lines changed

main.py

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
from sympy import *
2+
from sympy.parsing.sympy_parser import T
3+
from flask import Flask, render_template, request, jsonify
4+
5+
C = {
6+
"pi": {
7+
"ex": lambda x, n, p: ( x**n * (1-x)**n * (p[0] + p[1]*x + p[2]*x**2) ) / ( 1 + x**2 ),
8+
"inner": lambda x, n, p: p[0] + p[1]*x + p[2]*x**2,
9+
},
10+
"e": {
11+
"ex": lambda x, n, p: x**n * (1 - x)**n * (p[0] + p[1]*x) * E**x,
12+
"inner": lambda x, n, p: p[0] + p[1]*x,
13+
}
14+
}
15+
16+
def above0(inner, n, params, prec=1000):
17+
for i in range(0, prec):
18+
x = i / prec
19+
if inner(x, n, params) <= 0:
20+
return False
21+
return True
22+
23+
def getEq(ex, n, params, collects):
24+
x = symbols("x")
25+
r = collect(simplify(integrate(ex(x, n, params), (x, 0, 1))).expand(), collects, evaluate=False)
26+
return {
27+
str(key): dict(sorted({
28+
str(k): str(v) for k, v in collect(value, params, evaluate=False).items()
29+
}.items())) for key, value in r.items()
30+
}
31+
32+
# print(getEq(C["pi"]["ex"], [1, a, b, c], [a, b, c], ["log(2)", "pi"]))
33+
34+
def generate(ex, inner, params, desired):
35+
collects = [i for i in desired if i != "1"]
36+
for i in range(100):
37+
eqs = getEq(ex, i, params, collects)
38+
matrix = [
39+
[
40+
eqs[k].get(str(e)) if eqs[k].get(str(e)) != None else 0
41+
for e in params
42+
] + [v]
43+
for k, v in desired.items()
44+
]
45+
solution = solve_linear_system(Matrix(matrix), *params)
46+
if above0(inner, i, list(solution.values())):
47+
return i, solution
48+
49+
def main(mode, value):
50+
global C
51+
if mode == "pi":
52+
a, b, c, x = symbols("a b c x")
53+
v = parse_expr(value, transformations=T[:])
54+
piGreater = N(pi) > N(v)
55+
n, sol = generate(C["pi"]["ex"], C["pi"]["inner"], [a, b, c], {
56+
"log(2)": 0,
57+
"pi": 1 if piGreater else -1,
58+
"1": -v if piGreater else v
59+
})
60+
r = simplify(C["pi"]["ex"](x, n, list(sol.values())))
61+
return " ".join([
62+
"\\int_0^1", latex(r), "\\textrm{d} x =",
63+
f"\\pi - {latex(parse_expr(value))}" if piGreater else f"{latex(parse_expr(value))} - \\pi",
64+
"> 0"
65+
])
66+
elif mode == "e":
67+
a, b, x = symbols("a b x")
68+
v = parse_expr(value, transformations=T[:])
69+
eGreater = N(E) > N(v)
70+
n, sol = generate(C["e"]["ex"], C["e"]["inner"], [a, b], {
71+
"E": 1 if eGreater else -1,
72+
"1": -v if eGreater else v
73+
})
74+
r = simplify(C["e"]["ex"](x, n, list(sol.values())))
75+
return " ".join([
76+
"\\int_0^1", latex(r), "\\textrm{d} x =",
77+
f"e - {latex(parse_expr(value))}" if eGreater else f"{latex(parse_expr(value))} - e",
78+
"> 0"
79+
])
80+
81+
82+
app = Flask(__name__)
83+
84+
@app.route('/', methods=['GET'])
85+
def index():
86+
return render_template('index.html')
87+
88+
@app.route('/process', methods=['POST'])
89+
def process():
90+
user_input = request.form['input_box']
91+
mode = request.form['mode']
92+
try:
93+
result = main(mode, str(user_input))
94+
except Exception as e:
95+
result = "ERROR"
96+
return jsonify(result=result)
97+
98+
if __name__ == '__main__':
99+
app.run(debug=True)
100+

params.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from sympy import *
2+
import tqdm
3+
import json
4+
5+
x = symbols("x")
6+
a, b, c = symbols("a b c")
7+
8+
ex = lambda n: ( x**n * (1-x)**n * (a + b*x + c*x**2) ) / ( 1 + x**2 )
9+
params = {}
10+
11+
for n in tqdm.tqdm(range(1, 21)):
12+
r = collect(simplify(integrate(ex(n), (x, 0, 1))).expand(), [pi, log(2)], evaluate=False)
13+
params[str(n)] = {str(key): {
14+
str(k): str(v) for k, v in collect(value, [a, b, c], evaluate=False).items()
15+
} for key, value in r.items()}
16+
17+
with open("params_pi.json", "w+") as f:
18+
json.dump(params, f, indent="\t")
19+
20+

0 commit comments

Comments
 (0)