version 1.3, 2000/08/22 05:04:23 |
version 1.4, 2001/04/03 04:41:24 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2000/lib/sturm,v 1.2 2000/08/21 08:31:43 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/lib/sturm,v 1.3 2000/08/22 05:04:23 noro Exp $ |
*/ |
*/ |
/* find intervals which include roots of a polynomial */ |
/* find intervals which include roots of a polynomial */ |
|
|
Line 159 def numch0(S,V,A,T) { |
|
Line 159 def numch0(S,V,A,T) { |
|
T = T1; |
T = T1; |
} |
} |
return C; |
return C; |
|
} |
|
|
|
def count_real_roots(F) |
|
{ |
|
if ( type(F) == 1 ) |
|
return 0; |
|
V = var(F); |
|
R = 0; |
|
/* remove three roots : -1, 0, 1 */ |
|
if ( Q = tdiv(F,V) ) { |
|
F = Q; R++; |
|
while ( Q = tdiv(F,V) ) |
|
F = Q; |
|
} |
|
if ( Q = tdiv(F,V-1) ) { |
|
F = Q; R++; |
|
while ( Q = tdiv(F,V-1) ) |
|
F = Q; |
|
} |
|
if ( Q = tdiv(F,V+1) ) { |
|
F = Q; R++; |
|
while ( Q = tdiv(F,V+1) ) |
|
F = Q; |
|
} |
|
if ( type(F) == 1 ) |
|
return R; |
|
S = sturm(F); |
|
/* number of roots in [-1,1] */ |
|
R += numch(S,V,-1)-numch(S,V,1); |
|
RS = sturm(ureverse(F)); |
|
/* number of roots in [-inf,-1] \cup [1,inf] */ |
|
R += numch(RS,V,-1)-numch(RS,V,1); |
|
return R; |
} |
} |
end; |
end; |