Evaluación de polinomios en puntos de su dominio real

La implementación de esta rutina hace innecesario incluir dentro del código fuente una fórmula con base en la función pow de la librería math.h. Esto permite generalizar este cálculo para cualquier polinomio, colocando en el archivo de entrada de datos el grado y sus coeficientes (desplegados de mayor a menor grado). La implementación del método de Newton-Raphson, para calcular raíces de polinomios, se beneficia ampliamente de este enfoque porque, una vez que funcione el programa, este no tendría que ser compilado nuevamente sino que, para tener un nuevo sistema, bastaría sólo con modificar el archivo de entrada de datos.

Para implementar el código siguiente (guardado como evaluapoli.c++):

#include <iostream>
#include <fstream>



using namespace std;

void evaluapoli(int n, double *f, double x, double &p);


int main(){


	ifstream label1 ("datos//datos.in");


	int n;


	cout << "El grado del polinomio y sus coeficientes están en datos//datos.in\n\n";


	//Introduce el grado del polinomio



	label1 >> n; cout << "grado = " << n << "\n\n";


	double *f;	


	f = new double [n+1];      // Define el arreglo para los valores de los coeficientes del polinomio


	// Se introducen los coeficientes del polinomio


	cout << "Coeficientes del polinomio\n\n";


	for (int i = n; i > -1; i--) {		


		label1 >> f[i]; 

		cout << "F" << i << " = " << f[i] << "\n";



	}


	cout << "\n";

	cout << "El polinomio será evaluado en el punto: \n" << endl << "X = ";



	double x, p=0;



	// Se introduce el valor de x



	cin >> x;



	cout << endl;



	/* Esta es la función que evalua el polinomio en el punto x. Evita el uso de una fórmula

	con la función pow de la libreria math.h */



	evaluapoli (n, f, x, p);


	cout << "f(" << x << ") = " << p << endl;



	cout << endl;



	return 0;

}

void evaluapoli(int n, double *f, double x, double &p){

	int i;	
	
	double *a;

	a = new double [n];


	for (i = n; i > -1; i--) {  // Crea una copia de los elementos de f[i]

                                        // porque el ciclo for inferior los destruye

		a[i] = f[i];                   



	}	



	for (i = n; i > 0; i--) {



		p = a[i] * x + a[i - 1];



		a[i - 1] = p;



	}

// P es el valor del polinomio en el punto x


}

consideraremos la evaluación del polinomio de grado 3:

x³ + x² + x + 1

en cualquiera de los puntos de su dominio real. El archivo datos.in (carpeta datos) contiene estos valores:

3

1
1
1
1 

Se compila el código fuente de la siguiente manera:

g++ evaluapoli.c++ -o evaluapoli

La ejecución interactiva (con ./evaluapoli [Enter]) nos presentará una pantalla similar a esta:

El grado del polinomio y sus coeficientes están en datos//datos.in

grado = 3

Coeficientes del polinomio

F3 = 1
F2 = 1
F1 = 1
F0 = 1

El polinomio será evaluado en el punto:

X = -2

f(-2) = -5

para evaluar el referido polinomio en X = -2. El algoritmo para la determinación del valor del polinomio en el punto se encuentra en en la función evaluapoli. Para tener un nuevo sistema que evaluar sólo basta modificar el archivo datos.in que se encuentra en la carpeta datos.

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

Una respuesta a Evaluación de polinomios en puntos de su dominio real

  1. Pingback: Desarrollo en serie del Coseno en C/C++ |

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