
On Wed, May 07, 2003 at 11:34:28AM -0400, Matthew Donadio wrote:
Hi all,
One of the needs for a few of my DSP routines is support for functions over polynomials. The attached file is what I threw together.
Since this definetly has a broader scope than just me, I wanted to get some opionions on it.
1. The module is pretty type-free right now. I wanted to get some opionions on the best type for polynomials and names for the type and constructor(s).
The big question here (in my mind) is how to represent polynomials. The most obvious way is as a list of the coefficients. They can also be represented as a list of the roots. Should there be a single type with two constructors or two types each with one constructor.
You can only represent a polynomial as a list of roots if the roots are complex, and it looks like you don't require a to be complex, so I think you are limited to representing them as a list of coefficients (which seems best to me anyways). I would use a single constructor and just provide a function to create a polynomial from a list of roots. Of course, you can also define a polynomial by a list of (x,y) pairs, which would be convenient for interpolation (with the list of roots being a special case).
2. Are there any functions that are missing? I have a root finder in a different module (the one from Numeric Quest; Laguerre's method), but I am going to rewrite it in terms of the module that I attached. Functions for inflation and deflation by a single root will need to be added.
I'm not sure what it would be called, but it would be nice to be able to rescale x: P'(x) = P(s*x)
3. Should I add infix operators? I'm not sure what to do about this because of namespace clutter.
Is there any reason polynomials can't be of Class Num? I can't think of any, and that would seem like an ideal solution to the issue of namespace clutter. (and yes, infix operators are cool)
Any other thoughts?
How about defining a few common functions as polynomials? I'm not sure what this would be used for, but it sounds fun, and might be useful for something. e.g. something like polyexp = map inverse factorials polycos = skipaltsign True $ map inverse factorials where skipaltsign True (x:_:xs) = x : skipaltsign False xs skipaltsign False (x:_:xs) = -x : skipaltsign True xs -- David Roundy http://civet.berkeley.edu/droundy/