admin
upl base
cc646d3
raw
history blame
1.85 kB
from sympy import *
from sympy.abc import a, b, x
from output_util import to_latex, sign2cmp
from sgntools import lin_func_sgn
from solution import *
_data = {
1: {"constant_term": 3 * a - 8 * b, "e_term": -a + 3 * b},
2: {"constant_term": -38 * a + 174 * b, "e_term": 14 * a - 64 * b},
3: {"constant_term": 1158 * a - 7584 * b, "e_term": -426 * a + 2790 * b},
4: {"constant_term": -65304 * a + 557400 * b, "e_term": 24024 * a - 205056 * b},
5: {
"constant_term": 5900520 * a - 62118720 * b,
"e_term": -2170680 * a + 22852200 * b,
},
6: {
"constant_term": -780827760 * a + 9778048560 * b,
"e_term": 287250480 * a - 3597143040 * b,
},
}
class EIntegrate(GetIntegrateFromData):
# sympy 算力不够,以下由 MMA 算出
data = _data
def get_integrate_args(self, n):
return x**n * (1 - x) ** n * (a + b * x) * exp(x), (x, 0, 1)
class ESolution(Solution):
def __init__(self, p, q):
self.p = p
self.q = q
if self.q == 0:
raise BadInput()
self.get_integrate = EIntegrate()
self.symbols = (a, b)
self.integrate_result_classes_eq = {
"e_term": q,
CONSTANT_TERM_KEY: -p,
}
# check
self.check_sgn = lin_func_sgn
@staticmethod
def get_tries_args():
return EIntegrate.data.keys()
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
p = to_latex(self.p)
q = to_latex(self.q, is_coeff=True)
I = self.get_integrate.get_latex(try_arg, symbol_val)
return rf"{q}e-{p} = {I} {sign2cmp[sgn]} 0"
register("e", ESolution)
if __name__ == "__main__":
print(ESolution(25, 9))