/**************************************/ /* Programa de Metodos Numericos */ /* Newton_Rapshon; */ /* Para una funcion dada */ /**************************************/ #include #include #include /************ Declaracion de Funciones ***********/ void Lee_Datos(void); double Funcion(double Xi); double Derivada(double Xi); double Xo; float Tolera; int Ciclos; int main() { double Fx; double Fdx; double Xn; float Error = 1; int Cont = 0; Lee_Datos(); printf("\n======================================================"); printf("\n Ciclo Xo Fx Fdx Xn Error"); printf("\n======================================================"); while (Error > Tolera && Ciclos > Cont) { Fx = Funcion(Xo); Fdx = Derivada(Xo); Xn = Xo - (Fx / Fdx); Error = fabs( (Xn - Xo)/Xn ); Cont++; printf("\n%3d%10.4lf%10.4lf%10.4lf%10.4lf%10.4f",Cont,Xo,Fx,Fdx,Xn,Error); Xo = Xn; } printf("\n======================================================"); if (Ciclos > Cont) printf("\n La raiz de la ecuacion es %.5lf ",Xn); else printf("\n\n No converge en %3d Ciclos !!!! Dar nuevos valores",Ciclos); getch(); } void Lee_Datos(void) { clrscr(); printf("\n Dar el Valor inicial de X -> "); scanf("%lf",&Xo); printf("\n Cual es el error Permitido ->"); scanf("%f",&Tolera); printf("\n Numero de ciclos maximos ->"); scanf("%d",&Ciclos); } double Funcion(double Xo) { return Xo*Xo*Xo-3*Xo*Xo-4; } double Derivada(double Xo) { return 3*Xo*Xo-6*Xo; }