革命年 发表于 2020-7-25 16:44:18

复数出错了

这是错误
print(ecfc(1,0,1))
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
    print(ecfc(1,0,1))
File "F:\yyfc.py", line 12, in ecfc
    return (-b+sqrt(p*-1)*j)/a/2,(-b-sqrt(p*-1*j))/a/2
TypeError: can't convert complex to float
这是源码
def ycfc(a,b):
    #一次方程
    return -b/a
def ecfc(a,b,c):
    #二次方程
    from math import sqrt
    p=b**2-4*a*c
    if p>=0:
      return (-b+sqrt(p))/a/2,(-b-sqrt(p))/a/2
    else:
      j=0+1j
      return (-b+sqrt(p*-1)*j)/a/2,(-b-sqrt(p*-1*j))/a/2

Twilight6 发表于 2020-7-26 10:40:28

本帖最后由 Twilight6 于 2020-7-26 10:41 编辑

math 库不支持复数运算的

改成这样吧:

def ycfc(a,b):
    #一次方程
    return -b/a
def ecfc(a,b,c):
    #二次方程
    p=b**2-4*a*c
    if p>=0:
      return (-b+sqrt(p))/a/2,(-b-sqrt(p))/a/2
    else:
      j=0+1j
      return (-b+(p*-1)**0.5*j)/a/2,(-b-(p*-1*j)**0.5)/a/2

print(ecfc(1,0,1))

革命年 发表于 2020-7-26 10:48:50

Twilight6 发表于 2020-7-26 10:40
math 库不支持复数运算的

改成这样吧:

我这是要求恒有解的一元二次方程,所以里面就必须要用到开根号,我的思路是这样的,如果里面是负数的话,那我就给他乘一个-1把它变成正数,再开根号再乘j,但是不知道怎么出错了,你那里面是什么?我还没看懂

Twilight6 发表于 2020-7-26 10:49:41

革命年 发表于 2020-7-26 10:48
我这是要求恒有解的一元二次方程,所以里面就必须要用到开根号,我的思路是这样的,如果里面是负数的话, ...


**0.5 就是开根号啊, 二分之一次方

math 库不支持复数运算 所以不能用 sqrt 来求开根号的值
页: [1]
查看完整版本: 复数出错了