some image

Codes and Tags

Solucionando Método de Bisección en Java

Etiquetas: , Blog, Programación No comments

Bueno, estos días he estado estudiando algo de análisis numéricos / Métodos numéricos y me dio por investigar un poco más sobre el método de bisección y llevarlo a un lenguaje de programación (En este caso Java). Luego de investigar y ver varios videos para compender mejor la secuencia de pasos llegue a este codigo :).

Video : Explicacion Metodo Bisección

Codigo : 

Lo único que se debería cambiar en el método para utilizarlo, sería la implementación de la función. En este caso para aplicar los conceptos de programación, decidí utilizar una interface la cuál sera la encargada de obligar a nuestra clase a implementar la función.
Interface :

public interface Funcion {
	public double funcion(double x);
}

Clase :

public class MetodoBiseccion implements Funcion {

	private double a;
	private double b;
	private int iteraciones;
	private double error;

	public static void main(String[] args) {

		// Instanciacion y configuracion de nuestro ejercicio
		MetodoBiseccion biseccion = new MetodoBiseccion();
		biseccion.setIntervalo(0, 1);
		biseccion.setIteraciones(6);
		biseccion.setError(10e-4);
		biseccion.solucion();

	}

	@Override
	public double funcion(double x) {
		double resultado = Math.pow((Math.E), x) - (3 * x);
		return resultado;
	}

	/**
	 * Solucion del Metodo de Biseccion
	 */
	public void solucion() {
		System.out.println("Intervalo : [" + a + ", " + b + "]");
		System.out.println("Error : " + error);
		System.out.println("Iteraciones : " + iteraciones);
		System.out
				.println("------------------------------------------------ \n");

		double c = 0;
		double fa = 0;
		double fb = 0;
		double fc = 0;
		int iteracion = 1;

		do {
			// Aqui esta la magia
			c = (a + b) / 2;

			System.out.println("Iteracion (" + iteracion + ") : " + c);
			fa = funcion(a);
			fb = funcion(b);
			fc = funcion(c);

			if (fc * fa < 0) {
				b = c;
				fa = funcion(a);
				fb = funcion(b);
				c = (a + b) / 2;
				fc = funcion(c);
			} else {
				a = c;
				fa = funcion(a);
				fb = funcion(b);
				c = (a + b) / 2;
				fc = funcion(c);
			}
			iteracion++;
			// Itera mientras se cumpla la cantidad de iteraciones establecidas
			// y la funcion se mantenga dentro del margen de error
		} while (iteracion <= iteraciones && Math.abs(fc) >= error);

	}

	/**
	 * Definicion del intervalo
	 * 
	 * @param a
	 * @param b
	 */
	public void setIntervalo(double a, double b) {
		this.a = a;
		this.b = b;
	}

	/**
	 * Definicion de las iteraciones
	 * 
	 * @param iteraciones
	 */
	public void setIteraciones(int iteraciones) {
		this.iteraciones = iteraciones;
	}

	/**
	 * Definicion del margen de error
	 * 
	 * @param error
	 */
	public void setError(double error) {
		this.error = error;
	}

}

 

Pruebas  : 

Intervalo : [0.0, 1.0]
Error : 0.0010
Iteraciones : 6
------------------------------------------------ 

Iteracion (1) : 0.5
Iteracion (2) : 0.75
Iteracion (3) : 0.625
Iteracion (4) : 0.5625
Iteracion (5) : 0.59375
Iteracion (6) : 0.609375

About Edwin Torres

Related Posts

  • Logo Java
  • Logo Java
  • Logo Java
  • Logo Java

Add your comment