python输入三个系数求解方程_python – 求解一个三次方程

作为我写的程序的一部分,我需要精确地求解一个三次方程(而不是使用一个数字根查找器):

a*x**3 + b*x**2 + c*x + d = 0.

我试图使用here中的方程式.但是,请考虑以下代码(这是Python,但它是非常通用的代码):

a = 1.0

b = 0.0

c = 0.2 - 1.0

d = -0.7 * 0.2

q = (3*a*c - b**2) / (9 * a**2)

r = (9*a*b*c - 27*a**2*d - 2*b**3) / (54*a**3)

print "q = ",q

print "r = ",r

delta = q**3 + r**2

print "delta = ",delta

# here delta is less than zero so we use the second set of equations from the article:

rho = (-q**3)**0.5

# For x1 the imaginary part is unimportant since it cancels out

s_real = rho**(1./3.)

t_real = rho**(1./3.)

print "s [real] = ",s_real

print "t [real] = ",t_real

x1 = s_real + t_real - b / (3. * a)

print "x1 = ", x1

print "should be zero: ",a*x1**3+b*x1**2+c*x1+d

但输出的是:

q = -0.266666666667

r = 0.07

delta = -0.014062962963

s [real] = 0.516397779494

t [real] = 0.516397779494

x1 = 1.03279555899

should be zero: 0.135412149064

所以输出不是零,所以x1实际上并不是一个解决方案.维基百科文章中有错误吗?

ps:我知道numpy.roots将会解决这种方程式,但是我需要为数百万的方程式做这个,所以我需要实现这一点来处理系数数组.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值