On Mar 4, 2008, at 8:27 PM, Ben Abbott wrote:
On Mar 4, 2008, at 6:46 PM, Sebastien Loisel wrote:
Dear David,
Thank you for your email.
On Tue, Mar 4, 2008 at 5:44 PM, David Bateman <address@hidden
> wrote:
f = find (p ./ max(p));
p = p (f(1):end);
Are you missing an abs maybe? Also, I hope you did your checking
for nans and infs before you got there.
--
Sébastien Loisel
To respect Matlab an error should result when NaNs or Infs are
present.
The abs shouldn't be necessary. In fact, if NaNs and Infs have
already be handled, why not
f = find (p);
p = p(f(1):end);
n = numel (p)-1;
A = diag (ones (n-1, 1), -1);
A(1,:) = -p(2:n+1) ./ p(1);
z = eig (A);
Ben
ok, nix the simple solution.
I checked Matlab, they apparently remove have some special handling
of trailing zeros.
>> p = [poly([3 3 3 3]), 0 0 0 0];
>> abs(roots(p)-[0; 0; 0; 0; 3; 3; 3; 3])
ans =
0
0
0
0
0.00051228
0.00051228
0.00051223
0.00051223
>>
What should be included is the check for Infs and NaNs. Beyond that
we might add some tests for consistency with Matlab.
How about the attached?
<changeset-roots.txt>