python计算方程式根的方法

本文实例讲述了python计算方程式根的方法。分享给大家供大家参考。具体实现方法如下:

”’ roots = polyroots(a).
uses laguerre’s method to compute all the roots of
a[0] + a[1]*x + a[2]*x^2 +…+ a[n]*x^n = 0.
the roots are returned in the array ‘roots’,
”’
from evalpoly import *
from numpy import zeros,complex
from cmath import sqrt
from random import random
def polyroots(a,tol=1.0e-12):
def laguerre(a,tol):
x = random()
# starting value (random number)
n = len(a) – 1
for i in range(30):
p,dp,ddp = evalpoly(a,x)
if abs(p) < tol: return x g = dp/p h = g*g - ddp/p f = sqrt((n - 1)*(n*h - g*g)) if abs(g + f) > abs(g – f): dx = n/(g + f)
else: dx = n/(g – f)
x = x – dx
if abs(dx) < tol: return x print 'too many iterations' def deflpoly(a,root): # deflates a polynomial n = len(a)-1 b = [(0.0 + 0.0j)]*n b[n-1] = a[n] for i in range(n-2,-1,-1): b[i] = a[i+1] + root*b[i+1] return b n = len(a) - 1 roots = zeros((n),dtype=complex) for i in range(n): x = laguerre(a,tol) if abs(x.imag) < tol: x = x.real roots[i] = x a = deflpoly(a,x) return roots raw_input("\npress return to exit")

希望本文所述对大家的python程序设计有所帮助。

Posted in 未分类

发表评论