RE:codigo biseccion java para ti con mucho cariño
import java.io.*;
class pruebaBisecc
{
public static void impResult(double a,double b, Biseccion bisecc , Evaluar e)
{
bisecc.asignarDatos(a,b);
System.out.println("\n\tEvaluacion de intervalo : [ " + a + " , " + b + " ]\n");
System.out.println("\tf(" + a + ") : " + e.f(a));
System.out.println("\tf(" + b + ") : " + e.f(b));
System.out.println("\traiz : " + bisecc.raiz(e));
System.out.println("\tNumero de iteraciones : " + bisecc.numIteraciones());
}
public static void main(String arg[])
{
Biseccion b = new Biseccion();
/* polinomio : (x-3)(x+2)(x-1) = 6 - 5x - 2x^2 + x^3 */
double coef[] = { 6.0 , -5.0 , -2.0 , 1.0 };
EvalPolinomio ep = new EvalPolinomio(coef);
System.out.println("\n\tPolinomio : " + ep.toString("x"));
impResult(1.8 , 3.9 , b , ep);
impResult(-3.3 , -1.0 , b , ep);
impResult(-0.2 , 1.6 , b , ep);
System.out.println();
}
}
class Polinomio
{
private double arr[];
public Polinomio(int grado)
{
arr = new double[grado + 1];
}
public Polinomio(double coef[])
{
this(coef.length - 1);
for(int i = 0; i < coef.length; i++)
arr[i] = coef[i];
}
public void asignarCoeficientes(double coef[])
{
for(int i = 0; i < coef.length; i++)
arr[i] = coef[i];
}
public double []obtenerCoeficientes()
{
return arr;
}
public double obtenerCoef(int posicion)
{
return arr[posicion];
}
public void asignarCoef(int posicion, double valor)
{
arr[posicion] = valor;
}
public double evaluar(double t)
{
double s = 0.0;
for(int i = 0; i < arr.length; i++)
s += arr[i] * Math.pow(t,i);
return s;
}
public int obtenerGrado()
{
return arr.length - 1;
}
public static Polinomio integrar(Polinomio c, double cte)
{
Polinomio tmp = new Polinomio(c.obtenerGrado() + 1);
tmp.asignarCoef(0,cte);
for(int i = 1; i <= tmp.obtenerGrado() ; i++)
tmp.asignarCoef(i , c.obtenerCoef(i-1) / i );
return tmp;
}
public static Polinomio derivar(Polinomio c)
{
Polinomio tmp = new Polinomio(c.obtenerGrado() - 1);
for(int i = 0; i <= tmp.obtenerGrado() ; i++)
tmp.asignarCoef(i , c.obtenerCoef(i+1) * (i+1) );
return tmp;
}
public String toString(String var)
{
String s = Double.toString(arr[0]);
for(int i = 1; i <= obtenerGrado( ); i++)
if (arr[i] != 0.0)
{
if (arr[i] < 0.0 ) s += " - ";
else s += " + ";
s += Double.toString( Math.abs(arr[i]));
s += var;
if (i > 1)
{
s += "^";
s += Integer.toString(i);
}
}
return s;
}
}
interface Evaluar
{
double f(double x);
}
class EvalPolinomio extends Polinomio implements Evaluar
{
public EvalPolinomio(double coef[])
{
super(coef);
}
public double f(double x)
{
return evaluar(x);
}
}
class Biseccion
{
public static double EPSILON = 0.00005;
public final static int MAX_ITER = 500;
private double a,b,c;
private int cont;
public void asignarDatos(double a,double b)
{
this.a = a;
this.b = b;
this.cont = 0;
}
public int numIteraciones()
{
return cont;
}
public double raiz(Evaluar e)
{
while(true)
{
c = (a + b) / 2;
if(b - c <= EPSILON) break;
if (e.f(a) * e.f(c) <= 0.0)
b = c;
else
a = c;
cont++;
if (cont > MAX_ITER ) break;
}
return c;
}
}