如果我对我创建的一个很好的示例使用sqf()函数或sqf_list()函数,它会给我一个很好的结果。例如:
v = (x1 + 2) ** 2 * (x2 + 4) ** 5
sqf(v) = (1, [(x1 + 2, 2), (x2 + 4, 5)])但是如果我第一次使用v = poly(v),它只找到= (1, [(Poly(x1 + 2, x1, x2, domain='ZZ'), 2)])。
这是有意为之吗?我假设它是由
v = (x1 + 2) ^ 2 * (x2 + 4) ^ 5
转到
v = Poly(x1^2*x2^5 + 20*x1^2*x2^4 + 160*x1^2*x2^3 + 640*x1^2*x2^2 + 1280*x1^2*x2 + 1024*x1^2 + 4*x1*x2^5 + 80*x1*x2^4 + 640*x1*x2^3 + 2560*x1*x2^2 + 5120*x1*x2 + 4096*x1 + 4*x2^5 + 80*x2^4 + 640*x2^3 + 2560*x2^2 + 5120*x2 + 4096, x1, x2, domain='ZZ')有没有办法从变换后的v中得到真正的结果呢?或者,如果这是不可能的,看看它打印出一个‘错误’(?)结果呢?
发布于 2019-08-18 19:57:43
在此问题得到解决之前,一个简单的解决方法是:
def mysqf(expr):
s = sqf(expr)
r = cancel(expr/s)
if r == 1:
return s
return s*sqf(r)
def mysqf_list(expr):
s = mysqf(expr)
c, m = s.as_coeff_Mul()
return tuple([c, [f.as_base_exp() for f in Mul.make_args(m)]])或者,在将单变量表达式传递给sqf之前,您可以通过分离变量来确保使用的是单变量表达式:
def mvsqf(expr):
d = separatevars(expr)
assert d
return Mul(*[sqf(v) for v in d.values()])编写mvsqf_list留给感兴趣的读者作为练习。
https://stackoverflow.com/questions/57536689
复制相似问题