python计算方程式根的方法
本文实例讲述了python计算方程式根的方法。分享给大家供大家参考。具体实现方法如下:
'''roots=polyRoots(a).
UsesLaguerre'smethodtocomputealltherootsof
a[0]+a[1]*x+a[2]*x^2+...+a[n]*x^n=0.
Therootsarereturnedinthearray'roots',
'''
fromevalPolyimport*
fromnumpyimportzeros,complex
fromcmathimportsqrt
fromrandomimportrandom
defpolyRoots(a,tol=1.0e-12):
deflaguerre(a,tol):
x=random()
#Startingvalue(randomnumber)
n=len(a)-1
foriinrange(30):
p,dp,ddp=evalPoly(a,x)
ifabs(p)<tol:returnx
g=dp/p
h=g*g-ddp/p
f=sqrt((n-1)*(n*h-g*g))
ifabs(g+f)>abs(g-f):dx=n/(g+f)
else:dx=n/(g-f)
x=x-dx
ifabs(dx)<tol:returnx
print'Toomanyiterations'
defdeflPoly(a,root):#Deflatesapolynomial
n=len(a)-1
b=[(0.0+0.0j)]*n
b[n-1]=a[n]
foriinrange(n-2,-1,-1):
b[i]=a[i+1]+root*b[i+1]
returnb
n=len(a)-1
roots=zeros((n),dtype=complex)
foriinrange(n):
x=laguerre(a,tol)
ifabs(x.imag)<tol:x=x.real
roots[i]=x
a=deflPoly(a,x)
returnroots
raw_input("\nPressreturntoexit")
希望本文所述对大家的Python程序设计有所帮助。