Fru*_*lax 5 python symbolic-math sympy
当solve用于计算二次方程的根时,SymPy返回可以简化的表达式,但我无法简化它们.最小的例子如下:
from sympy import *
sqrt(-24-70*I)
Run Code Online (Sandbox Code Playgroud)
在这里,SymPy只是返回,sqrt(-24-70*I)而Mathematica或Maple将回答相当于5-7*I.
我知道有两个平方根,但这种行为需要SymPy,例如,将返回相当复杂的解决方案
z = symbols("z")
solve(z ** 2 + (1 + I) * z + (6 + 18 * I), z)
Run Code Online (Sandbox Code Playgroud)
同时,Maple和Mathematica将很高兴地给我两个高斯整数来解决这个等式.
有没有选项或我缺少的东西?
小智 3
求 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))
Run Code Online (Sandbox Code Playgroud)
结果是[(-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
Run Code Online (Sandbox Code Playgroud)
现在您可以使用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))
Run Code Online (Sandbox Code Playgroud)
输出:[(-3, 3), (2, -4)]