elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  metodo de newton rapson para calcular las raices de una funcion con n grado
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: metodo de newton rapson para calcular las raices de una funcion con n grado  (Leído 16,603 veces)
kiara_luna

Desconectado Desconectado

Mensajes: 13


Ver Perfil
metodo de newton rapson para calcular las raices de una funcion con n grado
« en: 29 Septiembre 2011, 15:37 pm »

hola estoy haciendo un programa en dev c++ para hallar las raices de una funcion con el metodo de newton rapson, ya la supe hallar para cuando es de grado 2 la funcion y me quedó asi:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <conio.h>
#include <time.h>

double funcion (double x);
double derivadaf (double x);

main()
{
   int Nit, i;
   double cota,xi,xsol,error;

   printf("Metodo de Newton-Raphson\n");
   printf("Cota de error maxima: ");
   scanf ("%lf",&cota);
   printf ("Numero maximo de iteraciones: ");
   scanf ("%d",&Nit);
   printf ("Punto inicial: ");
   scanf ("%lf",&xi);

   i = 1; /* Contador de iteraciones */
   error = cota + 1 ; /* Para asegurar que error > cota al ppio */

   while (i<= Nit && error > cota)
   {
      /* Aplicamos formula Newton-Raphson */
      xsol = xi - funcion (xi) / derivadaf(xi);
      error = fabs (xsol-xi);
      i++;
      /* En la siguiente iteracion xsol es xi */
      xi = xsol;
   }

   printf ("La solucion es %lf\n", xsol);
   printf ("El valor de la funcion es %g\n",funcion(xsol));
   printf ("El error alcanzado es %g\n", error);
   if (i>=Nit)
      printf ("Se ha alcanzado el maximo n. de iteraciones\n");
   else
      printf ("El n. de iteraciones ha sido %d\n",i);
      getch();
}
double funcion(double x)
{
   double f;
   f = x*x + 2*x - 35;
   return (f);
}

double derivadaf(double x)
{
   double fp;
   fp = 2*x + 2;
   return (fp);

}
el problema es que como hago ahora para hacer este programa pero que me calcule cualquier funcion con grado n, intente hacerlo del siguiente modo con vectores, pero la verdad no se como poner el formato de la ecuacion ni la derivada?? alguien me puede guiar ayuda.

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <conio.h>
#include <time.h>
//vetor grado 3   posiciones, grado 5 -5 posiciones

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <conio.h>
#include <time.h>

double funcion (double x);
double derivadaf (double x);

main()
{
   int Nit, i;
   double cota,xi,xsol,error;

   printf("Metodo de Newton-Raphson\n");
   printf("Cota de error maxima: ");
   scanf ("%lf",&cota);
   printf ("Numero maximo de iteraciones: ");
   scanf ("%d",&Nit);
   printf ("Punto inicial: ");
   scanf ("%lf",&xi);

   i = 1; /* Contador de iteraciones */
   error = cota + 1 ; /* Para asegurar que error > cota al ppio */

   while (i<= Nit && error > cota)
   {
      /* Aplicamos formula Newton-Raphson */
      xsol = xi - funcion (xi) / derivadaf(xi);
      error = fabs (xsol-xi);
      i++;
      /* En la siguiente iteracion xsol es xi */
      xi = xsol;
   }

   printf ("La solucion es %lf\n", xsol);
   printf ("El valor de la funcion es %g\n",funcion(xsol));
   printf ("El error alcanzado es %g\n", error);
   if (i>=Nit)
      printf ("Se ha alcanzado el maximo n. de iteraciones\n");
   else
      printf ("El n. de iteraciones ha sido %d\n",i);
      getch();
}
double funcion(double x)
{
    int i=0, g=0;   
   double f, j[100], v=0;
   printf ("digite el grado de la ecuacion:  \n" );
    scanf("%d", &g );
    g++;
    for(i=0; i<=g; i++)
    {
      printf ("digite el valor de variable:  \n" ); 
      scanf("%f", &v);   
     j=j+v;
    }
     
   f =
   return (f);
   
}
double derivadaf(double x)
{
   double fp;
   fp =
   return (fp);

}


En línea

kiara
kiara_luna

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: metodo de newton rapson para calcular las raices de una funcion con n grado
« Respuesta #1 en: 30 Septiembre 2011, 01:45 am »

hola ya creo que tengo la solucion pero necesito que me ayuden pues me estan saliendo los siguientes errores: iostream.h: no such file or directory, este mismo error me sale en fstream.h y cmath, in funtion main, sintaxis error before "label1", label1 undeclared(first use in this funtion), me salen todos estos errores pero no he sido capaz de corregirlos lo estoy haciendo en dev c++ ayudenmen a corregirlos.
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <cmath>
 
/*void evaluapoli(int n, double *f, double x, double &p); //utilizada por newton_raphson.h
void derivapoli(int n, double *f, double *fd);
void newtonraphson(int n, double *f, double *fd, double &x, int &contador);*/
 
int main(){
   
 ifstream label1 ("datos//datos.in");
   
 int n;
 
 prinft("El grado del polinomio y sus coeficientes están en datos/datos.in\n\n");
   
 //Introduce el grado del polinomio

 label1 >> n;
 prinft("grado = ", n, "\n\n");
 
 double *f, *fd;
   
 f = new double [n+1];   // Arreglo para los coeficientes del polinomio
 
 fd = new double [n];    // Arreglo para los coeficientes de la derivada del polinomio
   
 // Se introducen desde datos.in y se imprimen en pantalla los coeficientes del polinomio
   
 prinft("Coeficientes del polinomio\n\n");
 
for (int i = n; i > -1; i--) {
    label1 >> f;
   
  //scanf("%d", f);
 
  prinft("F",  i, " = ", f, "\n");
   
    }
 
    prinft("\n");
 
 derivapoli (n, f, fd);  // función que determina la primera derivada y
         // se imprimen sus coeficientes
 
 prinft("Coeficientes del polinomio primera derivada\n\n");
 
 for (int i = n - 1; i > -1; i--) {
 
  prinft("Fd", i, " = ", fd, "\n");
 
 }
   
 prinft("\n");
 
 prinft("Introduzca el valor de inicio para la raiz: \n",  "X = ");
 
    double x;
   
    int contador = 0;
 // Se introduce el valor de x
   
    scanf("%d", &x);
 
    prinft("\n");
 
 // Implementación del método de Newton-Raphson
 
 newtonraphson (n, f, fd, x, contador);
 
    prinft("La raiz es x = ", x, " y se obtuvo en ", contador, " iteraciones\n");
   
    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
                             // porque el ciclo for inferior los destruye
 
  a = f;                 
   
    }
   
 for (i = n; i > 0; i--) {
   
 p = a * x + a[i - 1];
 
  a[i - 1] = p;
 
 }
 
// P es el valor del polinomio en el punto x
 
   }
   
   void derivapoli(int n, double *f, double *fd){
   
    int i;
   
    for (i = n; i > 0; i--){
   
    fd[i-1] = i * f;
 
 }
   
   }
   void newtonraphson(int n, double *f, double *fd, double &x, int &contador){
 
    /* La función evaluapoli determina el valor del polinomio en el punto x.*/
   
    double p=0, y1, y2, verificador, z = 0;
 
    do {    evaluapoli (n, f, x, p);  // Determina el valor del polinomio en el punto
   
  y1 = p;
 
     evaluapoli (n-1, fd, x, p);  //Valor de la primera derivada en el punto
 
     y2 = p;
   
     x = x - y1/y2;
   
     verificador = fabs(x - z);
   
  z = x;
 
  contador += 1;
   
 } while (verificador > 1e-10);
 
}



En línea

kiara
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines