Tema destacado: Últimos eventos sobre seguridad/inseguridad
Autor
|
Tema: metodo de newton rapson para calcular las raices de una funcion con n grado (Leído 1,832 veces)
|
kiara_luna
Desconectado
Mensajes: 13
|
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
Mensajes: 13
|
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
|
|
|
|
| Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Metodos Numericos (Metodo Biserccion, falsa posicion,Newton Raphson,Secante)
Java
|
GaLaN GaLaNaSo 3000
|
1
|
8,618
|
11 Abril 2012, 05:27
por Carlos Luna
|
|
|
CODIGO DEL METODO DE NEWTON RAPHSON
Programación General
|
kay19
|
0
|
2,768
|
26 Abril 2009, 23:39
por kay19
|
|
|
Metodo bisección para cualquier funcion dada
Programación C/C++
|
rob1104
|
4
|
3,418
|
5 Mayo 2009, 06:28
por Eliptico
|
|
|
Entendiendo y traduciendo el pseudocódigo de la funcion para calcular hmac
Programación Visual Basic
|
Carloswaldo
|
3
|
2,311
|
18 Julio 2009, 23:31
por Dessa
|
|
|
necesito ayuda con el metodo de newton raphson...pleaseeeeeeeeeeeee helpme
Programación C/C++
|
steffany27
|
1
|
1,780
|
11 Noviembre 2009, 14:50
por do-while
|
|