jueves, 29 de septiembre de 2011

Codigo en Java Seidel-Jacobi

Este el codigo que desarrollé en Java de Seidel y Jacobi. Los metodos de llenar Matrices y mostrar se los dejo a ustedes
//@utor Jose Espejo Cuba
//Despejamos para que la diagonal principal sea cero
public static void despeje(double M[][],double V[],int m){
double d;
for(int i=0;i d=M[i][i];
for(int j=0;j if(i!=j)
M[i][j]=-M[i][j]/d;
else
M[i][j]=0.0;
}
V[i]=V[i]/d;
}
}

//Metodo de Jacobi
public static void Jacobi(double M[][],double v[],double v1[],double v2[],int m){
for(int i=0;i for(int j=0;j if(i!=j)
v2[i] +=M[i][j]*v1[j];
else
v2[i]+=v[i];
}
}
}
//Metodo de Seidel
public static void Seidel(double M[][],double v[],double v1[],double v2[],int m){
for(int i=0;i for(int j=0;j if(j v2[i] +=M[i][j]*v2[j];
else
v2[i] +=M[i][j]*v1[j];
}
v2[i]+=v[i];
}
}
//Esta es mi condicion de parada
public static double condicion(double v1[],double v2[],int m){
double may1,may2,error;
may1=may2=error=0.0;
for(int i=0;i error=Math.abs(v2[i]-v1[i]);
if(error>may1)
may1=error;
if(v2[i]>may2)
may2=v2[i];
}
return(may1/may2);
}
//Iteramos
public static void iterar(double M[][],double V[],int m){
int cont=0;
double cond=99999;
double x1[]=new double[m];
double x0[]=new double[m];
Arrays.fill(x1, 0.0);
Arrays.fill(x0, 0.0);
while(cond>=0.00000006){
//Seidel(M,V,x0,x1,m);
Jacobi(M,V,x0,x1,m);
cond=condicion(x0,x1,m);
x0=Arrays.copyOf(x1, m);
Arrays.fill(x1, 0.0);
cont++;
}
System.out.println("Numero de iteraciones: "+cont);
for(int i=0;i System.out.println(x0[i]);
}
System.out.println();
}

No hay comentarios:

Publicar un comentario en la entrada