实数在 python 中变得复杂
real numbers become complex in python
密码是:
A = b/a
B = c/a
C = d/a
Q = (A**2-3*B)/9
R = (2*A**3-9*A*B+27*C)/54
M = R**2-Q**3
p = (3*B-A**2)/3
q = (2*A**3-9*A*B+27*C)/27
delta = (q/2)**2+(p/3)**3
if M <= 0 :
from math import sqrt,acos,cos,pi
Z = acos(R/sqrt(Q**3))
X1 = -(2*sqrt(Q)*cos(Z/3))-A/3
X2 = -(2*sqrt(Q)*cos((Z+2*pi)/3))-A/3
X3 = -(2*sqrt(Q)*cos((Z-2*pi)/3))-A/3
elif delta > 0 :
from math import sqrt
import cmath
u = ((-q/2)+sqrt(delta))**(1/3)
v = ((q/2)+sqrt(delta))**(1/3)
X1 = u-v-A/3
X2 = -(1/2)*(u-v)-A/3+(u+v)*(sqrt(3)/2)*cmath.sqrt(-1)
X3 = -(1/2)*(u-v)-A/3-(u+v)*(sqrt(3)/2)*cmath.sqrt(-1)
当我输入时它给了我错误的答案:
a = 1 b = 1 c = -1 d = -1
M == 0
但它跳过 M 并转到 delta
结果是:
X1 = 1.0
X2 = (-1+4.8e-09j)
X3 = (-1-4.8e-09j)
我不知道怎么了?
假设去 M 和 X1 , X2 和 X3 通过在 M
中计算变为真实
负数的分数次幂要么给出复数(在 Python 3.x 中)(即使是奇数次幂,如 1/3 或 1/5),要么给出一个值错误Python 2.x (ValueError: negative number cannot be raised to a fractional power
).
例子-
>>> (-27)**(1/3)
(1.5000000000000004+2.598076211353316j)
你需要自己处理这种情况,例如,如果你正在做 (1/3) 的幂,你将不得不像 -
x = -27
if x < 0:
pow = -((-x) **(1/3))
elif x > 0:
pow = x **(1/3)
else:
pow = 0
密码是:
A = b/a
B = c/a
C = d/a
Q = (A**2-3*B)/9
R = (2*A**3-9*A*B+27*C)/54
M = R**2-Q**3
p = (3*B-A**2)/3
q = (2*A**3-9*A*B+27*C)/27
delta = (q/2)**2+(p/3)**3
if M <= 0 :
from math import sqrt,acos,cos,pi
Z = acos(R/sqrt(Q**3))
X1 = -(2*sqrt(Q)*cos(Z/3))-A/3
X2 = -(2*sqrt(Q)*cos((Z+2*pi)/3))-A/3
X3 = -(2*sqrt(Q)*cos((Z-2*pi)/3))-A/3
elif delta > 0 :
from math import sqrt
import cmath
u = ((-q/2)+sqrt(delta))**(1/3)
v = ((q/2)+sqrt(delta))**(1/3)
X1 = u-v-A/3
X2 = -(1/2)*(u-v)-A/3+(u+v)*(sqrt(3)/2)*cmath.sqrt(-1)
X3 = -(1/2)*(u-v)-A/3-(u+v)*(sqrt(3)/2)*cmath.sqrt(-1)
当我输入时它给了我错误的答案:
a = 1 b = 1 c = -1 d = -1
M == 0
但它跳过 M 并转到 delta
结果是:
X1 = 1.0
X2 = (-1+4.8e-09j)
X3 = (-1-4.8e-09j)
我不知道怎么了? 假设去 M 和 X1 , X2 和 X3 通过在 M
中计算变为真实负数的分数次幂要么给出复数(在 Python 3.x 中)(即使是奇数次幂,如 1/3 或 1/5),要么给出一个值错误Python 2.x (ValueError: negative number cannot be raised to a fractional power
).
例子-
>>> (-27)**(1/3)
(1.5000000000000004+2.598076211353316j)
你需要自己处理这种情况,例如,如果你正在做 (1/3) 的幂,你将不得不像 -
x = -27
if x < 0:
pow = -((-x) **(1/3))
elif x > 0:
pow = x **(1/3)
else:
pow = 0