Пример #1
0
/**
 * 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;
}
Пример #2
0
Файл: main.c Проект: kique/mn
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;
}
Пример #3
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;
}