annotate scripts/polynomial/roots-tuwien.m @ 561:e79ff1f4df3c

[project @ 1994-07-25 22:32:08 by jwe] Initial revision
author jwe
date Mon, 25 Jul 1994 22:32:08 +0000
parents faf108b99d21
children 4fcd2e68dd3b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
558
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
1 function r = roots(v)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
2 #
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
3 # For a vector v with n components, return the roots of the polynomial
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
4 # v(1)*z^(n-1) + ... + v(n-1) * z + v(n).
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
5
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
6 # written by KH (Kurt.Hornik@neuro.tuwien.ac.at) on Dec 24, 1993
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
7 # copyright Dept of Probability Theory and Statistics TU Wien
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
8 # modified by KH on Jan 10, 1994
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
9
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
10 [nr, nc] = size(v);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
11 if !((nr == 1 && nc > 1) || (nc == 1 && nr > 1))
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
12 error("usage: roots(v), where v is a nonzero vector");
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
13 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
14 n = nr + nc - 1;
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
15 v = reshape(v,1,n);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
16 # If v = [ 0 ... 0 v(k+1) ... v(k+l) 0 ... 0 ], we can remove the
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
17 # leading k zeros and n-k-l roots of the polynomial are zero.
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
18 f = find(v);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
19 m = max(size(f));
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
20 if (m > 0)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
21 v = v(f(1):f(m));
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
22 l = max(size(v));
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
23 if (l > 1)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
24 A = diag(ones(1, l-2), -1);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
25 A(1,:) = -v(2:l) ./ v(1);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
26 r = eig(A);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
27 if (f(m) < n)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
28 r = [r; zeros(n-f(m), 1)];
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
29 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
30 else
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
31 r = zeros(n-f(m), 1);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
32 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
33 else
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
34 error("usage: roots(v), where v is a nonzero vector");
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
35 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
36
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
37 endfunction