summaryrefslogtreecommitdiff
path: root/numpy/polynomial/laguerre.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/polynomial/laguerre.py')
-rw-r--r--numpy/polynomial/laguerre.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/numpy/polynomial/laguerre.py b/numpy/polynomial/laguerre.py
index fc9afec00..866aab5c4 100644
--- a/numpy/polynomial/laguerre.py
+++ b/numpy/polynomial/laguerre.py
@@ -283,10 +283,17 @@ def lagfromroots(roots) :
return np.ones(1)
else :
[roots] = pu.as_series([roots], trim=False)
- prd = np.array([1], dtype=roots.dtype)
- for r in roots:
- prd = lagsub(lagmulx(prd), r*prd)
- return prd
+ roots.sort()
+ n = len(roots)
+ p = [lagline(-r, 1) for r in roots]
+ while n > 1:
+ m = n//2
+ tmp = [lagmul(p[i], p[i+m]) for i in range(m)]
+ if n%2:
+ tmp[0] = lagmul(tmp[0], p[-1])
+ p = tmp
+ n = m
+ return p[0]
def lagadd(c1, c2):