В общем, я попробовал построить ряд Штурма на бумаге, это адъ!
Лист А4 надо класть поперек иначе не влезает убористым почерком, и это только первые пара членов, дальше там тьма.
И хотя нам надо знать только старший и младший коэффициенты полиномов-членов ряда, т.к. смотреть мы будем на перемены знаков при нуле и бесконечности, я не вижу как это можно быстро посчитать...
Для справки, предпоследний член:
(Оффтоп)
4066635782071730062726234052745758704691969669464140874088294871889986104157
3571504985594483320901196100/67006081316873233816878142542290045220643577
9269914205819165489009032178840893121884499791141784106569x - 600033197365
5556050396403570127294760235332159474332104439208852445393760888362952038
442179385172659050/670060813168732338168781425422900452206435779269914205
819165489009032178840893121884499791141784106569
Ясно, что столько знаков не надо, но не ясно сколько надо.
Знаки у старших коэффициентов выходят
++++--++- (бесконечность - 3 перемены), знаки у младших
+----+--- (ноль - 3 перемены), так что корней от нуля до бесконечности
(т.е. нет корней). На всякий случай проверяем знаки старших коэффициентов на минус бесконечности:
+-+--++-- получаем 5 перемен, так что всего у полинома два корня, оба отрицательные - Штурм работает.
На
pari/gp, которая может делить многочлены с остатком, "вручную" это выглядит так:
(Оффтоп)
? f0=1176*x^8 + 3248*x^7 - 2759*x^6 - 2736*x^5 + 5290*x^4 - 3377*x^3 + 1056*x^2 - 152*x + 8;
? f1=deriv(f0);f2=-f0%f1;f3=-f1%f2;f4=-f2%f3;f5=-f3%f4;f6=-f4%f5;f7=-f5%f6;f8=-f6%f7;
Печатаем знаки старших коэффициентов (при старших степенях):
? print(sign(polcoef(f0,8)),sign(polcoef(f7,1)),sign(polcoef(f6,2)),sign(polcoef(f5,3)),sign(polcoef(f4,4)),
sign(polcoef(f3,5)),sign(polcoef(f4,4)),sign(polcoef(f5,3)),sign(polcoef(f6,2)),sign(polcoef(f7,1)),sign(polcoef(f8,0)))
1111-1-111-1
Печатаем знаки младших коэффициентов (свободных членов):
?print(sign(polcoef(f0,0)),sign(polcoef(f7,0)),sign(polcoef(f6,0)),sign(polcoef(f5,0)),sign(polcoef(f4,0)),
sign(polcoef(f3,0)),sign(polcoef(f4,0)),sign(polcoef(f5,0)),sign(polcoef(f6,0)),sign(polcoef(f7,0)),sign(polcoef(f8,0)))
1-1-1-1-11-1-1-1
Ну и поскольку рациональные числа
pari/gp хранит точно, то можно сказать что это
доказательство неотрицательности полинома на нужном нам интервале (с учетом конечно того, что НОД полинома и его первой производной - константа, т.е. кратных корней нет). НОД вычисляем так:
(Оффтоп)
?gcd(f0,f1)
%1 = 1