Ese método que menciono es iterativo; esto es, para cada iteración el valor obtenido se va acercando al valor óptimo. El problema que tengo es que tengo que hacer muchas iteraciones con mi algoritmo. El profesor dijo que luego de algo más de 20 iteraciones ya se podrá intuir cuál es el valor, pero mi programa requiere hacer muchas(muchísimas) iteraciones para poder converger. En otras palabras, converge, pero lo hace muy lentamente. Si hago los cálculos manualmente, coinciden los valores de la primera y segunda iteración, así que el algoritmo debe estar bien hecho. El problema es el número de iteraciones, ¿creen que pasa por el tipo de variable que uso (double)?
Código:
import java.io.*;
import java.math.*;
public class modet2{
double rutina(double x,double y,double w,double a,double b)
{
double g=w/Math.sqrt(Math.pow(x-a,2)+Math.pow(y-b,2));
return g;
}
public static void main(String args[])throws IOException{
modet2 waa = new modet2();
double A[][] = {{0,0,5,12},{0,10,0,6},{0.25,0.25,0.25,0.25}};
int i,k;
double p,q,w,numx=0,numy=0,den=0,x=4.25,y=5;
for(k=0;k<100000;k++){ //La variable 'k' determina el número de iteraciones
for(i=0;i<4;i++){
numx=A[0][i]*waa.rutina(x,y,A[2][i],A[0][i],A[1][i])+numx;
numy=A[1][i]*waa.rutina(x,y,A[2][i],A[0][i],A[1][i])+numy;
den=waa.rutina(x,y,A[2][i],A[0][i],A[1][i])+den;
}
x=numx/den;
y=numy/den;
System.out.println("IteraciOn\t X \t\t Y");
System.out.println((k+1)+"\t"+x+"\t"+y);
System.out.println();
}
}
}