SymPy和复数的平方根

run

solve用于计算二次方程式的根时,SymPy返回可以简化的表达式,但我无法简化它们。一个最小的示例如下所示:

from sympy import *
sqrt(-24-70*I)

在这里,SymPy刚刚返回,sqrt(-24-70*I)而Mathematica或Maple将以等价的方式回答5-7*I

我知道有两个平方根,但是这种行为需要例如SymPy从中返回非常复杂的解决方案。

z = symbols("z")
solve(z ** 2 + (1 + I) * z + (6 + 18 * I), z)

同时,Maple和Mathematica都会很高兴地给我两个可以求解该方程的高斯整数。

有没有选择或我缺少的东西?

用户名

在逻辑上找到z的平方根与求解方程(x + I * y)** 2 = z是相同的。因此,您可以这样做:

from sympy import *
z = -24-70*I
x, y = symbols('x y', real=True)
result = solve((x+I*y)**2 - z, (x, y))

结果是 [(-5, 7), (5, -7)]

为了方便起见,可以将其包装为一个函数:

def my_sqrt(z):
    x, y = symbols('x y', real=True)
    sol = solve((x+I*y)**2 - z, (x, y))
    return sol[0][0] + sol[0][1]*I

现在您可以使用my_sqrt(-24-70*I)并获取-5 + 7*I


相同的策略对二次方程有帮助:

x, y = symbols('x y', real=True)
z = x + I*y
solve(z ** 2 + (1 + I) * z + (6 + 18 * I), (x, y))

输出: [(-3, 3), (2, -4)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档