Manipolazione di polinomi

Riferimento:
G.C. Barozzi: Primo Corso di Analisi Matematica
Zanichelli (Bologna), 1998, ISBN 88-08-01169-0, Prop. 2.2-3, Laboratorio2.2-2, 2.2-3

Clear["Global`*"]

Horner[lista_, x_] := Expand[Fold[ x #1  +  #2 &, 0, lista]]

La funzione Horner calcola il valore nel punto x del polinomio i cui coefficienti (ordinati secondo le potenze decrescenti della variabile) sono contenuti in lista. Esempi:

Horner[{1, 2, -3},  4]

Horner[{a, b, c}, x]

% // TraditionalForm

La funzione seguente calcola gli (eventuali) zeri razionali del polinomio p a coefficienti interi, dove coefficienti è la lista dei coefficienti ordinati secondo le potenze decrescenti della variabile. La funzione non verifica l'ipotesi che i coefficienti sono interi ed utilizza la funzione Horner precedentemente definita.

\(\(radiciRazionali[coefficienti_List] := 
	
      Module[{lista}, 
	\ 
        lista = 	
          Flatten[Outer[Times, 
					Divisors[Last[coefficienti]], 
              1/Divisors[First[coefficienti]]]]; 
		
        lista\  = \ Union[Join[lista, \ \(-lista\)]]; 
		
        Print["Candidati:"]; \ Print[lista]; 
		
        lista\  = \ Select[lista, \ Horner[coefficienti, \ #]\  == \ 0\ &]; 

        		Print["Radici razionali:"]; Return[lista]; 
	]
		\)\)

Esempi:

radiciRazionali[{6, 1, 2, -1}]

radiciRazionali[{5, 1, 2, 2,  3}]