On Sat, Oct 9, 2010 at 8:05 PM, Charles R Harris <[email protected]>wrote:
> > > On Sat, Oct 9, 2010 at 8:01 PM, Charles R Harris < > [email protected]> wrote: > >> >> >> On Sat, Oct 9, 2010 at 7:47 PM, <[email protected]> wrote: >> >>> I'm trying to see whether I can do this without reading the full manual. >>> >>> Is it intended that fromroots normalizes the highest order term >>> instead of the lowest? >>> >>> >>> >>> import numpy.polynomial as poly >>> >>> >>> p = poly.Polynomial([1, -1.88494037, 0.0178126 ]) >>> >>> p >>> Polynomial([ 1. , -1.88494037, 0.0178126 ], [-1., 1.]) >>> >>> pr = p.roots() >>> >>> pr >>> array([ 0.53320748, 105.28741219]) >>> >>> poly.Polynomial.fromroots(pr) >>> Polynomial([ 56.14003571, -105.82061967, 1. ], [-1., 1.]) >>> >>> >>> >>> renormalizing >>> >>> >>> p2 = poly.Polynomial.fromroots(pr) >>> >>> p2/p2.coef[0] >>> Polynomial([ 1. , -1.88494037, 0.0178126 ], [-1., 1.]) >>> >>> >>> this is, I think what I want to do, invert roots that are >>> inside/outside the unit circle (whatever that means >>> >>> >>> pr[np.abs(pr)<1] = 1./pr[np.abs(pr)<1] >>> >>> p3 = poly.Polynomial.fromroots(pr) >>> >>> p3/p3.coef[0] >>> Polynomial([ 1. , -0.54270529, 0.0050643 ], [-1., 1.]) >>> >>> >> Wrong function ;) You defined the polynomial by its coefficients. What you >> want to do is >> >> In [1]: import numpy.polynomial as poly >> >> In [2]: p = poly.Polynomial.fromroots([1, -1.88494037, 0.0178126 ]) >> >> In [3]: p >> Out[3]: Polynomial([ 0.03357569, -1.90070346, 0.86712777, 1. ], >> [-1., 1.]) >> >> In [4]: p.roots() >> Out[4]: array([-1.88494037, 0.0178126 , 1. ]) >> >> > Oh, and least squares follows the same convention: > > In [5]: x = linspace(-1,1,10) > > In [6]: y = (x - 1)*( x + 1.88494037)*(x - 0.0178126) > > In [7]: p = poly.Polynomial.fit(x, y, 3) > > In [8]: p > Out[8]: Polynomial([ 0.03357569, -1.90070346, 0.86712777, 1. ], > [-1., 1.]) > > You can also use a scaled and shifted domain, which will change the coefficient representation but can be used to obtain a polynomial less subject to roundoff errors. In [18]: p = poly.Polynomial.fromroots([1, -1.88494037, 0.0178126 ], domain=[-2,1]) In [19]: p Out[19]: Polynomial([ 0.3187287 , -0.89681388, -0.42191482, 1. ], [-2., 1.]) In [20]: p.roots() Out[20]: array([-1.88494037, 0.0178126 , 1. ]) In [21]: plot(*p.linspace()) Out[21]: [<matplotlib.lines.Line2D object at 0x3ea10d0>] I attached the plot. Chuck >
<<attachment: image.png>>
_______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
