/** * Metodo principal del paquete de 17 métodos implementando las ecuaciones: * * 1. Sen(2x)(x^2+2x-15) * 2. Sen^2(x) * 3. e^x(x^2-16) * 4. sin(x)cos(x) * * La quinta función será la evaluación de un polinomio de grado n definido * por la siguiente estructura: * * 5. P(x) = aoX^0 + a1X^1 + a2X^2 + anX^n * * @return 0 */ int main(){ int opcion; do{ printf("Matematicas Aplicadas y Computacion\n"); printf("Metodos Numericos I\n\n"); printf("Tema: Solucion Numerica de Ecuaciones\n"); printf("Seleccione uno de estos metodos\n"); printf("1) Biseccion\n"); printf("2) Falsa posocion\n"); printf("3) Newton Rapson\n"); printf("4) Secante\n"); printf("0) Salir del Programa\n"); scanf("%d",&opcion); switch(opcion){ case BISECCION: printf("Método de Bisección:\n"); menuEcuaciones(); scanf("%d",&opcion); biseccion(opcion); break; case FALSA_POSICION: printf("Método de Falsa Posición\n"); menuEcuaciones(); scanf("%d",&opcion); falsaPosicion(opcion); break; case NEWTON_RAPSON: printf("Método de Newton Rapson\n"); menuEcuaciones(); scanf("%d",&opcion); break; case SECANTE: printf("Método de la Secante\n"); menuEcuaciones(); scanf("%d",&opcion); secante(opcion); break; } }while(opcion!=SALIR); return 0; }
int main() { char resp; int opc; do{ system("clear"); menu(); scanf("%d",&opc); switch(opc) { case 1: biseccion(); break; case 2: rfalsa(); break; case 3: secante(); break; case 4: newton(); break; case 5: pfijo(); break; case 0: printf("\nAdios!"); break; default: printf("\nOpcion Invalida\n"); } printf("\n\nDeseas realizar otro calculo?: (s/n)"); scanf("%*c %c",&resp); //El primer %*c indica que ignore el primer caracter getchar(); //aqui se esta capturando el ultimo salto de lina que mete el Enter //scanf("%c",&resp); }while(resp=='s'); return 0; }
double brent (double x0, double x1, int p, double(*f) (double x)){ double precision = 5 * pow((double)10,-p); double xm =0,fx0,fx1,fxm,x2,fx2,erro,modulo,mod1,trap; int usou = 0; xm = (x0 +x1)/2; fxm = f(xm); trap = fabs(fxm); while(fabs(fxm) > precision ){ //printf("__fxm:%g___precision:%g\n",fabs(fxm),precision); if(usou && (fabs(trap - fxm) < precision) ){ //Não convergirá printf("Nao convergiu a f(x)=0\n"); break; } else{ trap = fxm; } puts("passo"); getchar(); fx0 = f(x0); fx1 = f(x1); usou = 0; /////IQI x2 =(double) calc_inv(fx0,fx1,fxm,x0,x1,xm) ; erro = fabs(f(xm)); fx2= f(x2); //printf("__x:%g___f():%g\n",x2,fx2); //Testando f(IQI) if (fabs(f(x2)) < erro){ modulo = fabs((x0-x1)); if(fx0 *fx2 < 0){ mod1 = fabs((x0-x2)); if(mod1/modulo <=0.5){ x0 = x2; usou =1; puts("A"); } } else{ mod1 = fabs(x1-x2); if(mod1/modulo <=0.5){ x1=x2; usou = 1; puts("A"); } } } if (!usou){ x2 = (double) secante(x0,x1,fx0,fx1); //Testando f(secante) if (f(x2) < erro){ modulo = fabs((x0-x1)); if(fx0 *fx2 < 0){ mod1 = fabs((x0-x2)); if(mod1/modulo <=0.5){ x1 = x2; usou =1; puts("B"); } } else{ mod1 = fabs(x1-x2); if(mod1/modulo <=0.5){ x0=x2; usou = 1; puts("B"); } } } } if(!usou){ //usa xm if(fx0 *fxm < 0){ x1=xm; usou = 1; puts("C"); } else{ x0=xm; usou = 1; puts("C"); } } xm = (x0 +x1)/2; fxm = f(xm); } //printf("__fxm:%g___precision:%g\n",fxm,precision); //printf("__x1:%g___x2:%g\n",x0,x1); return xm; }