Newsgroup: it.comp.lang.c
Titolo: Come ricavare il polinomio dalle sue radici ?

Sono uno studente universitario.
Ho da poco scoperto il ng e ne approfitto subito per chiedervi aiuto.
Esiste un algoritmo per ricavare, a partire dalle radici di un polinomio, i
coefficienti del polinomio stesso (che ha tali radici) ? La funzione che ho
in mente ha in ingresso il vettore contenente le radici e la sua lunghezza,
in uscita il vettore dei coefficienti del polinomio, del tipo:
double*    poly (double r [ ], int length )
Ovviamente il vettore in uscita deve avere la stessa lunghezza di quello in
ingresso+1.
Grazie
Giancarlo Penza
pe...@tin.it

coefficienti del polinomio stesso (che ha tali radici) ? 
Esiste e si chiama algoritmo di Skyscraper ;))) 
C'e' una sola #DEFINE : non storcete il naso :))
#include <stdio.h>
#include <math.h>
#define MAX 5
double segno ( int i )
{
       return ( ( i % 2 ) ? -1.0 : 1.0 ) ;
}
double * poly ( double radice[], int num_radici )
/* e' sottinteso che alla funzione venga passata almeno una radice */
{
       double p_radici = 1.0 ;
       /* il prodotto delle radici viene inizializzato */
       int n_coeff = num_radici + 1 ;
       /* numero dei coefficienti del polinomio
          il risultato conterra' anche il termine di grado 0 */
       double * p = (double *) malloc ( n_coeff * sizeof( double ) ) ;
       /* il polinomio risultante viene predisposto */
       int i, j ;
       p_radici *= radice[0] ;
       p[0] = -p_radici ;
       p[1] = 1 ;
       if ( num_radici == 1 ) return ( p ) ;
       for ( i = 2 ; i <= num_radici ; i++ )
       {
           p_radici *= radice[i - 1] * segno ( i ) ;
           p[i] = 1 ;
           for ( j = i - 1 ; j ; j-- )
               p[j] = - radice[i - 1] * p[j] + p[j - 1] ;
           p[0] = p_radici ;
       }
       p[0] = abs(p_radici) * segno( num_radici ) ;
       return ( p ) ;
}
int main()
{
    int i;
    double * polinomio ;
    double rad[MAX] = { 2.0, 3.0, 1.0, 5.0, 6.0 } ;
    polinomio = ( double * ) malloc( sizeof( double ) * (MAX + 1) );
    polinomio = poly( rad, MAX ) ;
    for ( i = 0; i <= MAX; i++)
        printf(" coefficiente di x^%d = %3.0lf\n", i, polinomio[i] );
    printf("\n");
    return 0 ;
}
Skyscraper (apprezzatelo adesso : eviterete la coda)
----------------------------------------------------
 
andrea_...@bigfoot.com
----------------------------------------------------
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

coefficienti del polinomio stesso (che ha tali radici) ? 
Ho corretto il programma che presentava alcuni errori (adesso funziona :).
E' facile capire l'algoritmo di funzionamento.
#include <stdio.h>
#include <math.h>
double * poly ( double radice[], int num_radici )
/* e' sottinteso che alla funzione venga passata almeno una radice */
{
       int n_coeff = num_radici + 1 ;
       double * p = (double *) malloc ( n_coeff * sizeof( double ) ) ;
       int i, j ;
       p[0] = -radice[0] ;
       p[1] = 1 ;
       for ( i = 1 ; i < num_radici ; i++ )
       {
           p[i + 1] = p[i] ;
           for ( j = i ; j >= 0 ; j-- )
               p[j] = - radice[i] * p[j] + ( j ? p[j-1] : 0 ) ;
       }
       return ( p ) ;
}
int main()
{
    int i, n ;
    double * polinomio ;
    double * rad ;
    printf("numero di radici : "); scanf("%d", &n);
    rad = ( double * ) malloc (sizeof (double) * n );
    printf("\n");
    for ( i = 0; i < n ; i++)
    {
        printf("radice n.%d : ", i + 1 ); scanf("%lf", &rad[i] );
    }
    polinomio = ( double * ) malloc( sizeof( double ) * (n + 1) );
    polinomio = poly( rad, n ) ;
    printf("\n");
    for ( i = 0; i < n + 1; i++)
        printf("coefficiente di x^%d = %.0lf\n", i, polinomio[i] );
