首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我使用poly()或.as_poly()时,Sympy的sqf()和sqf_list()给出了不同的结果

当我使用poly()或.as_poly()时,Sympy的sqf()和sqf_list()给出了不同的结果
EN

Stack Overflow用户
提问于 2019-08-17 21:23:32
回答 1查看 46关注 0票数 0

如果我对我创建的一个很好的示例使用sqf()函数或sqf_list()函数,它会给我一个很好的结果。例如:

代码语言:javascript
复制
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

转到

代码语言:javascript
复制
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中得到真正的结果呢?或者,如果这是不可能的,看看它打印出一个‘错误’(?)结果呢?

EN

回答 1

Stack Overflow用户

发布于 2019-08-18 19:57:43

在此问题得到解决之前,一个简单的解决方法是:

代码语言:javascript
复制
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之前,您可以通过分离变量来确保使用的是单变量表达式:

代码语言:javascript
复制
def mvsqf(expr):
    d = separatevars(expr)
    assert d
    return Mul(*[sqf(v) for v in d.values()])

编写mvsqf_list留给感兴趣的读者作为练习。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57536689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档