Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Metodos para La Solucion de Sistemas de Ecuaciones Lineales en Java
Metodos para La Solucion de Sistemas de Ecuaciones Lineales en Java
package gauss; import javax.swing.JOptionPane; public class gauss { public static void main(String[] args) { int i,j,s,k,h,n; double d; double m[][]; double r[]; double x[];
n=Integer.parseInt(JOptionPane.showInputDialog("ingrese el numero de incognitas")); m= new double [n][n]; for(i=0;i<=n-1;i++){ k=i+1; r[i]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento "+k+" del vector de soluciones")); x[i]=0; for(j=0;j<=n-1;j++){ h=j+1; m[i][j]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento "+k+h+" de la matriz de coeficientes")); } } for(i=0;i<n;i++){ for(j=i;j<n;j++){ if(i==j){ d=m[i][j]; for(s=0;s<n;s++){ m[i][s]=((m[i][s])/d); } r[i]=((r[i])/d); } r= new double [n]; x= new double [n];
for(i=n-1;i>=0;i--){ double y=r[i]; for(j=n-1;j>=i;j--){ y=y-x[j]*m[i][j]; } x[i]=y; } for(i=0;i<n;i++){ k=i+1; "+x[i]); } } } JOptionPane.showMessageDialog(null,"el valor de la incognita x"+k+" es
MTODO DE GAUSS-JORDAN
package gaussjordan; import javax.swing.JOptionPane; public class gaussjordan { public static void main(String[] args) { int i,j,s,k,h,n,x,y; double d,c; double m[][]; double r[];
n=Integer.parseInt(JOptionPane.showInputDialog("ingrese el numero de incognitas")); m= new double [n][n]; for(i=0;i<=n-1;i++){ k=i+1; r[i]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento "+k+" del vector de soluciones")); for(j=0;j<=n-1;j++){ h=j+1; m[i][j]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento "+k+h+" de la matriz de coeficientes ")); } } for(i=0;i<=n-1;i++){ d=m[i][i]; for(s=0;s<=n-1;s++){ m[i][s]=((m[i][s])/d); } r[i]=((r[i])/d); for(x=0;x<=n-1;x++){ if(i!=x){ c=m[x][i]; for(y=0;y<=n-1;y++){ m[x][y]=m[x][y]-c*m[i][y]; r= new double [n];
FACTORIZACIN LU
package factorizacionlu; import javax.swing.JOptionPane; public class factorizacionLU { public static void main(String[] args) { int i,j,h,k,n,s; double c,suma; double m[][]; x[]; n=Integer.parseInt(JOptionPane.showInputDialog("ingrese el numero de incognitas")); m= new double [n][n]; x= new double [n]; for(i=0;i<=n-1;i++){ k=i+1; r[i]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento "+k+" del vector de soluciones")); for(j=0;j<=n-1;j++){ h=j+1; m[i][j]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento"+k+h+" de la matriz de coeficientes ")); if(i==j){ l[i][j]=1; } else{ l[i][j]=0; } } } for(i=0;i<n-1;i++){ for(j=i+1;j<n;j++){ l= new double [n][n]; z= new double [n]; r= new double [n]; double l[][]; double r[]; double z[]; double
c=(m[j][i])/m[i][i]; for(s=0;s<n;s++){ m[j][s]=m[j][s]-c*m[i][s]; } l[j][i]=c; } } for(i=0;i<n;i++){ suma=r[i]; for(j=i;j>=0;j--){ if(i==j){ suma=suma/l[i][j]; } else{ suma=suma-((z[j]*l[i][j])/l[i][i]); } } z[i]=suma; } for(i=n-1;i>=0;i--){ suma=z[i]; for(j=i;j<n;j++){ if(i==j){ suma=suma/m[i][j]; } else{ suma=suma-((x[j]*m[i][j])/m[i][i]); }
MTODO DE THOMAS package thomas; import javax.swing.JOptionPane; public class Thomas { public static void main(String[] args) { int i,j,k,h,n; double band,suma; double m[][]; double u[][];double l[][]; double r[]; double z[]; double x[]; double a[];double b[];double c[]; n=Integer.parseInt(JOptionPane.showInputDialog("ingrese el numero de incognitas")); m= new double [n][n]; u= new double [n][n];l= new double [n][n]; r= new double [n];x= new double [n];z= new double [n]; a= new double [n]; b= new double [n];c= new double [n-1]; for(i=0;i<=n-1;i++){ k=i+1; r[i]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento "+k+" del vector de soluciones")); for(j=0;j<=n-1;j++){ h=j+1; u[i][j]=0; m[i][j]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento"+k+h+" de la matriz de coeficientes ")); if(i==j){ l[i][j]=1; } else{ l[i][j]=0; }
} } for(i=0;i<n;i++){ if(i==0){ b[i]=m[i][i]; a[i]=0; u[i][i]=b[i]; } else{ c[i-1]=m[i-1][i]; a[i]=(m[i][i-1])/(b[i-1]); b[i]=m[i][i]-((a[i])*(c[i-1])); l[i][i-1]=a[i]; u[i][i]=b[i]; u[i-1][i]=c[i-1]; } } for(i=0;i<n;i++){ k=i+1; for(j=0;j<n;j++){ h=j+1; JOptionPane.showMessageDialog(null,"El elemento"+k+h+" de la matriz L es "+l[i][j]); JOptionPane.showMessageDialog(null,"El elemento"+k+h+" de la matriz U es "+u[i][j]); } } for(i=0;i<n;i++){ suma=r[i];
for(j=i;j>=0;j--){ if(i==j){ suma=suma/l[i][j]; } else{ suma=suma-((z[j]*l[i][j])/l[i][i]); } } z[i]=suma; } for(i=n-1;i>=0;i--){ suma=z[i]; for(j=i;j<n;j++){ if(i==j){ suma=suma/u[i][j]; } else{ suma=suma-((x[j]*u[i][j])/u[i][i]); } } x[i]=suma; } for(i=0;i<n;i++){ k=i+1; JOptionPane.showMessageDialog(null,"el valor de la incognita x"+k+" es "+x[i]); } } }
FACTORIZACIN DE CHOLESKY package cholesky; import javax.swing.JOptionPane; public class Cholesky { public static void main(String[] args) { int i,j,s,k,h,n; double band,suma; double m[][]; double l[][];double lt[][]; double r[]; double z[]; double x[]; double a[];double b[];double c[]; n=Integer.parseInt(JOptionPane.showInputDialog("ingrese el numero de incognitas")); m= new double [n][n]; l= new double [n][n];lt= new double [n][n]; r= new double [n];x= new double [n];z= new double [n]; a= new double [n]; b= new double [n];c= new double [n-1]; for(i=0;i<=n-1;i++){ k=i+1; r[i]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento "+k+" del vector de soluciones")); for(j=0;j<=n-1;j++){ h=j+1; m[i][j]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento"+k+h+" de la matriz de coeficientes ")); if(i==j){ l[i][j]=1; } else{ l[i][j]=0; }
} } k=0; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(m[i][j]!=m[j][i]){ k=1; } } } h=0; for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(m[i][j]<0){ h=1; } } } if(k==0 && h==0){ l[0][0]=Math.sqrt(m[0][0]); for(i=0;i<n;i++){ for(j=0;j<=i;j++){ if(i==j){ suma=0; for(s=0;s<=i-1;s++){ suma=suma+Math.pow(l[i][s],2); } l[i][i]=Math.sqrt(m[i][i]-suma);
else{ suma=0; for(s=0;s<=j-1;s++){ suma=suma+(l[j][s])*(l[i][s]); } l[i][j]=(m[i][j]-suma)/l[j][j]; } } } for(i=0;i<n;i++){ k=i+1; for(j=0;j<n;j++){ h=j+1; JOptionPane.showMessageDialog(null,"el valor de la incognita x"+k+h+" es "+l[i][j]); } } for(i=0;i<n;i++){ for(j=0;j<n;j++){ a[j]=l[i][j]; } for(j=0;j<n;j++){ lt[j][i]=a[j]; } } for(i=0;i<n;i++){ k=i+1;
for(j=0;j<n;j++){ h=j+1; JOptionPane.showMessageDialog(null,"el valor de la incognita lt"+k+h+" es "+lt[i][j]); } } for(i=0;i<n;i++){ suma=r[i]; for(j=i;j>=0;j--){ if(i==j){ suma=suma/l[i][j]; } else{ suma=suma-((z[j]*l[i][j])/l[i][i]); } } z[i]=suma; } for(i=n-1;i>=0;i--){ suma=z[i]; for(j=i;j<n;j++){ if(i==j){ suma=suma/lt[i][j]; } else{ suma=suma-((x[j]*lt[i][j])/lt[i][i]); } } x[i]=suma;
} for(i=0;i<n;i++){ k=i+1; JOptionPane.showMessageDialog(null,"el valor de la incognita x"+k+" es "+x[i]); } } else{ if(k==1 && h==1){ JOptionPane.showMessageDialog(null,"La matriz es asimetrica y no esta definida positivamente"); } else{ if(k==1){ JOptionPane.showMessageDialog(null,"La matriz es asimetrica"); } else{ JOptionPane.showMessageDialog(null,"La matriz no esta definida positivamente"); } } } } }
MTODO DE JACOBI package jacobi; import javax.swing.JOptionPane; public class jacobi { public static void main(String[] args) { int n,k,i,j,h,band,siga,miter; double m[][]; double error[]; double suma,l,tol; n=Integer.parseInt(JOptionPane.showInputDialog("ingrese el numero de incognitas")); tol=Double.parseDouble(JOptionPane.showInputDialog("ingrese tolerancia ")); la double r[]; double x[]; double s[]; double cont[];
miter=Integer.parseInt(JOptionPane.showInputDialog("ingrese el numero maximo de iteraciones")); m= new double [n][n]; new double [n]; cont= new double [n]; for(i=0;i<=n-1;i++){ k=i+1; r[i]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento "+k+" del vector de soluciones")); x[i]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el valor en el cual quiere comenzar a evaluar x"+k)); s[i]=0; for(j=0;j<=n-1;j++){ h=j+1; m[i][j]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento"+k+h+" de la matriz de coeficientes")); } } r= new double [n]; error= new double [n]; x= new double [n]; s=
band=0; for(i=0;i<n;i++){ suma=0; for(j=0;j<n;j++){ if(i!=j){ suma=suma+m[i][j]; } } cont[i]=suma; if(Math.abs(m[i][i])>cont[i]){ band=band+1; } } if(band==n){ siga=n-1; int iter=0; while(siga!=n && iter<miter){ iter=iter+1;
} s[i]=l; } for(i=0;i<n;i++){ error[i]=Math.abs((s[i]-x[i])/s[i])*100; } for(i=0;i<n;i++){ x[i]=s[i]; } siga=0; for(i=0;i<n;i++){ if(error[i]<tol){ siga=siga+1; } } } h=0; for(i=0;i<n;i++){ h=h+1; JOptionPane.showMessageDialog(null,"el valor aproximado de la incognita x"+h+" es "+s[i]); } JOptionPane.showMessageDialog(null,"El numero total de iteraciones fue de "+iter); } else { JOptionPane.showMessageDialog(null,"No se puede solucionar por este metodo debido a que la matriz de coeficientes no es diagonalmente dominante"); }
} }
MTODO DE GAUSS-SEIDEL package gaussseidel2; import javax.swing.JOptionPane; public class gaussseidel2 { public static void main(String[] args) { int n,k,i,j,h,band,siga,miter; double m[][]; double cont[]; double r[]; double x[]; double y[]; double error[];
double suma,l,tol; n=Integer.parseInt(JOptionPane.showInputDialog("ingrese el numero de incognitas")); tol=Double.parseDouble(JOptionPane.showInputDialog("ingrese la tolerancia ")); miter=Integer.parseInt(JOptionPane.showInputDialog("ingrese el numero maximo de iteraciones")); m= new double [n][n]; new double [n]; cont= new double [n]; for(i=0;i<=n-1;i++){ k=i+1; r[i]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento "+k+" del vector de soluciones")); x[i]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el valor en el cual quiere comenzar a evaluar x"+k)); y[i]=0; for(j=0;j<=n-1;j++){ h=j+1; r= new double [n]; error= new double [n]; x= new double [n]; y=
m[i][j]=Double.parseDouble(JOptionPane.showInputDialog("ingrese el elemento"+k+h+" de la matriz de coeficientes")); } } band=0; for(i=0;i<n;i++){ suma=0; for(j=0;j<n;j++){ if(i!=j){ suma=suma+m[i][j]; } } cont[i]=suma; if(Math.abs(m[i][i])>cont[i]){ band=band+1; } } if(band==n){ siga=n-1; int iter=0; while(siga!=n && iter<miter){ iter=iter+1; for(i=0;i<n;i++){ l=0; for(j=0;j<n;j++){ if(i==j){ l=l+r[i]/m[i][j]; } else{
l=l-((m[i][j]*x[j])/m[i][i]); } } x[i]=l; } for(i=0;i<n;i++){ error[i]=Math.abs((x[i]-y[i])/x[i])*100; y[i]=x[i]; } siga=0; for(i=0;i<n;i++){ if(error[i]<tol){ siga=siga+1; } } } h=0; for(i=0;i<n;i++){ h=h+1; JOptionPane.showMessageDialog(null,"el valor aproximado de la incognita x"+h+" es "+x[i]); } JOptionPane.showMessageDialog(null,"El nmero total de iteraciones fue de "+iter); } else { JOptionPane.showMessageDialog(null,"No se puede solucionar por este metodo debido a que la matriz de coeficientes no es diagonalmente dominante"); }
} }