Producto de monomios en C++ Linux (variante)

En un foro, alguien me solicitó ayuda (y le sirvió) para generar esto:


P= (x-x1)*(x-x2)2*(x-x3)3*…*(x-xn)n, donde x1, x2, x3,…,xn son n valores dados

Lo que se me ocurrió fue utilizar una variante de monomio que generará, a partir de x1, x2, x3, …, los valores de x1, x2, x2, x3, x3, x3, … y determinará posteriormente el polinomio. Esta fue la propuesta (monomio2.c++):

#include <iostream>

using namespace std;

void monomio(int n, double *x, double *D);

int main(){

   cout << "Este programa efectua el producto de monomios
          (X-X1).(X-X2)².(X-X3)³..., a su" << endl;

      cout << "forma polinomica X^n + A(n-1).X^(n-1)+...+ A0 "
             << endl << endl;

   int i, n;

   cout << "Nunero de monomios = ? ";

   cin >> n;

   cout << endl;

// Asignación de memoria dinámica

   double *x, *xnew, *D;

   x = new double [n];

   D = new double [n];

   xnew = new double [n*(n+1)/2];

// Introduce los valores Xn

   for (i = 0; i < n; i++) {

      cout << "X(" << i+1 << ") = ";

      cin >> x[i];

   }

   cout << endl;

   monomio(n, x, D); // función declarada arriba

   int prov = n;

// Imprime los coeficientes del polinomio

   cout << "Los coeficientes del polinomio son: " << endl << endl;

   for (i = 0; i < n+1; i++) {

      cout << "A[" << prov << "] = " << D[i] << endl;

      prov -= 1;

   }

   cout << endl;

// Hace la asignación de valores de xnew

   int j=0;

   for(i=0; i < n*(n+1)/2; i++){

      xnew[i] = x[j];

      if(i == ((j+1)*(j+2)/2)-1) j +=1;

   }

   monomio(n*(n+1)/2, xnew, D);

   prov = n*(n+1)/2;

// Imprime los coeficientes del polinomio

   cout << "Los coeficientes del polinomio son: " << endl << endl;

   for (i = 0; i < (n*(n+1)/2) + 1; i++) {

      cout << "A[" << prov << "] = " << D[i] << endl;

      prov -= 1;

   }

   delete x, D;

   cout << endl;

   return 0;

}

void monomio(int n, double *x, double *D){

   double *E;

   E = new double [n];

   D[0] = 1;

   D[1] = -x[0];

   for (int i = 1; i < n; i++) {

      for (int k =1; k < i+1; k++) {

         E[k] = D[k] + D[k-1]*(-x[i]);

      }

      D[i+1] = D[i]*(-x[i]);

      for (int j = 1; j < i+1; j++) {

         D[j] = E[j];

      }

   }

   delete E;

}

Después de compilar (g++ monomio2.c++ -o monomio2) y ejecutar (./monomio2), el resultado en pantalla es (para x1 = 1, x2 = 2 y x3 = 3) el siguiente:

Este programa efectua el producto de monomios 
(X-X1).(X-X2)².(X-X3)³..., a su
forma polinomica X^n + A(n-1).X^(n-1)+...+ A0

Nunero de monomios = ? 3

X(1) = 1
X(2) = 2
X(3) = 3

Los coeficientes del polinomio son:

A[3] = 1
A[2] = -6
A[1] = 11
A[0] = -6

Los coeficientes del polinomio son:

A[6] = 1
A[5] = -14
A[4] = 80
A[3] = -238
A[2] = 387
A[1] = -324
A[0] = 108 

El primer polinomio es sólo con propósitos de verificación. El segundo es el solicitado. Por tanto:

P= (x-1)*(x-2)2*(x-3)3 = x6 – 14x5 + 80x4 -238x3 +387x2 – 324x+ 108

Esta entrada fue publicada en Código C++. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s