admin
upl base
cc646d3
raw
history blame
4.89 kB
from sympy import *
from sympy.abc import *
from output_util import to_latex, sign2cmp, to_latexes
from sgntools import lin_func_sgn
from solution import *
_data = {
(1,): {
"constant_term": a / q**2 + 2 * a / q**3 - 2 * b / q**3 - 6 * b / q**4,
"eq_term": a / q**2 - 2 * a / q**3 + b / q**2 - 4 * b / q**3 + 6 * b / q**4,
},
(2,): {
"constant_term": -2 * a / q**3
- 12 * a / q**4
- 24 * a / q**5
+ 6 * b / q**4
+ 48 * b / q**5
+ 120 * b / q**6,
"eq_term": 2 * a / q**3
- 12 * a / q**4
+ 24 * a / q**5
+ 2 * b / q**3
- 18 * b / q**4
+ 72 * b / q**5
- 120 * b / q**6,
},
(3,): {
"constant_term": 6 * a / q**4
+ 72 * a / q**5
+ 360 * a / q**6
+ 720 * a / q**7
- 24 * b / q**5
- 360 * b / q**6
- 2160 * b / q**7
- 5040 * b / q**8,
"eq_term": 6 * a / q**4
- 72 * a / q**5
+ 360 * a / q**6
- 720 * a / q**7
+ 6 * b / q**4
- 96 * b / q**5
+ 720 * b / q**6
- 2880 * b / q**7
+ 5040 * b / q**8,
},
(4,): {
"constant_term": -24 * a / q**5
- 480 * a / q**6
- 4320 * a / q**7
- 20160 * a / q**8
- 40320 * a / q**9
+ 120 * b / q**6
+ 2880 * b / q**7
+ 30240 * b / q**8
+ 161280 * b / q**9
+ 362880 * b / q**10,
"eq_term": 24 * a / q**5
- 480 * a / q**6
+ 4320 * a / q**7
- 20160 * a / q**8
+ 40320 * a / q**9
+ 24 * b / q**5
- 600 * b / q**6
+ 7200 * b / q**7
- 50400 * b / q**8
+ 201600 * b / q**9
- 362880 * b / q**10,
},
(5,): {
"constant_term": 120 * a / q**6
+ 3600 * a / q**7
+ 50400 * a / q**8
+ 403200 * a / q**9
+ 1814400 * a / q**10
+ 3628800 * a / q**11
- 720 * b / q**7
- 25200 * b / q**8
- 403200 * b / q**9
- 3628800 * b / q**10
- 18144000 * b / q**11
- 39916800 * b / q**12,
"eq_term": 120 * a / q**6
- 3600 * a / q**7
+ 50400 * a / q**8
- 403200 * a / q**9
+ 1814400 * a / q**10
- 3628800 * a / q**11
+ 120 * b / q**6
- 4320 * b / q**7
+ 75600 * b / q**8
- 806400 * b / q**9
+ 5443200 * b / q**10
- 21772800 * b / q**11
+ 39916800 * b / q**12,
},
(6,): {
"constant_term": -720 * a / q**7
- 30240 * a / q**8
- 604800 * a / q**9
- 7257600 * a / q**10
- 54432000 * a / q**11
- 239500800 * a / q**12
- 479001600 * a / q**13
+ 5040 * b / q**8
+ 241920 * b / q**9
+ 5443200 * b / q**10
+ 72576000 * b / q**11
+ 598752000 * b / q**12
+ 2874009600 * b / q**13
+ 6227020800 * b / q**14,
"eq_term": 720 * a / q**7
- 30240 * a / q**8
+ 604800 * a / q**9
- 7257600 * a / q**10
+ 54432000 * a / q**11
- 239500800 * a / q**12
+ 479001600 * a / q**13
+ 720 * b / q**7
- 35280 * b / q**8
+ 846720 * b / q**9
- 12700800 * b / q**10
+ 127008000 * b / q**11
- 838252800 * b / q**12
+ 3353011200 * b / q**13
- 6227020800 * b / q**14,
},
}
class EQIntegrate(GetIntegrateFromData):
data = _data
def get_integrate_args(self, try_arg):
n, q = try_arg
return x**n * (1 - x) ** n * (a + b * x) * e ** (q * x), (x, 0, 1)
def tries(self, try_arg):
n, q_value = try_arg
return {key: expr.subs(q, q_value) for key, expr in self.data[(n,)].items()}
class EQSolution(Solution):
def __init__(self, q1, q2, u, v):
if q2 == 0 or v == 0:
raise BadInput()
self.q = q1 / q2 # 输入都是 Rational 类型的,可以不损失精度相除
self.u = u
self.v = v
self.get_integrate = EQIntegrate()
self.symbols = (a, b)
self.integrate_result_classes_eq = {
"eq_term": v,
CONSTANT_TERM_KEY: -u,
}
# check
self.check_sgn = lin_func_sgn
def get_tries_args(self):
for (n,) in EQIntegrate.data.keys():
yield n, self.q
def get_latex_ans(self):
try_arg, symbol_val, sgn = self.try_times()
print(f"{(try_arg, symbol_val, sgn)=}")
if try_arg is None:
return None
u, q = to_latexes(self.u, self.q)
v = to_latex(self.v, is_coeff=True)
I = self.get_integrate.get_latex(try_arg, symbol_val)
return rf"{v}e^{q}-{u} = {I} {sign2cmp[sgn]} 0"
register("e^q", EQSolution)
if __name__ == "__main__":
print(EQSolution(Rational(2), 1, 7, 1).get_latex_ans())