Hace mucho en una clase de programación de JAVA me pidieron realizar un programa que resolviera incógnitas por diverso métodos numéricos entre los cuales se encuentran:
- Método de Bisección
- Método de NEWTON-RAPHSON
- Método de GAUSS
- Método de GAUSS-SEIDEL PARA 3 ECUACIONES
- Método de GAUSS-JORDAN
- Método de LU PARA 3 ECUACIONES
- Método de Interpolación de NEWTON
- Método de Interpolación de LAGRANGE
Y pues eh decidido compartir el código de este proyecto, la verdad el código no es del todo mío… Fue facilitado por un compañero, porque para ser honestos a mi no me acaba de agradar la programación orientada a objetos, prefiero la estructurada, pero en gustos se rompen generos…
NOTA:el codigo fuente lo puedes descargar a continuación:
>>> DESCARGAR Codigo Fuente <<<
El código fuente se muestra a continuación:
import java.lang.Math;
import java.io.*;
//Clase ProyectoJava
public class ProyectoJava{
//Metodo Constructor
public static void main(String args[]){
ProyectoJava Proyecto = new ProyectoJava();
Proyecto.menu(); //solo se manda a llamar a menu desde aqui, ya que menu llama a los demas metodos posteriromente
}
//(1)Metodo Biseccion
public void MetodoBiseccion(){
double a;
double b;
double tol;
System.out.println("\t\t\t\"METODO DE BISECCION\"");
System.out.println("Extremo Izquierdo: ");
a=lee();
System.out.println("Extremo Derecho: ");
b=lee();
System.out.println("Tolerancia: ");
tol=lee();
double c;
do{
c=(a+b)/2.0;
if(((c*c-5)*(a*a-5))<0){
b=c;
}
else{
a=c;
}
}while(Math.abs(a-b)>tol);
System.out.println("La raiz es: "+c);
}
//(2)Metodo NewRaphson
public void MetodoNewtonRaphson(){
double a;
double tol;
double b;
double c;
System.out.println("\t\t\t\"METODO DE NEWTON-RAPHSON\"");
System.out.println("Primera Aproximacion: ");
a=lee();
System.out.println("Tolerancia: ");
tol=lee();
do{
b=a-(a*a-a-2)/(2*a-1);
c=Math.abs(a-b);
a=b;
}while(c>tol);
System.out.println("La raiz es: "+b);
}
//(3) metodo gauss
public void MetodoGauss(){
int i,j,k,n;
double a[][] = new double [5][6];
double cte,x1,x2,x3;
double x[] = new double [5];
System.out.println("\t\t\t\"METODO DE GAUSS\"");
System.out.println("Dame el numero de incognitas (de hasta 5) ");
n=leeint();
System.out.println("Ingrese coeficientes");
for(i=0;i<n;i++)
{
System.out.println("Renglon "+(i+1));
for(j=0;j<=n;j++)
{
System.out.println(" Ingrese a "+(i+1)+" "+(j+1));
a[i][j]=lee();
}
}
for(i=0;i<n-1;i++){
for(j=i+1;j<=n;j++){
cte=(-a[j][i])/(a[i][i]);
for(k=i;k<n+1;k++){
a[j][k]=((a[i][k])*cte)+a[j][k];
}
}
}
x3=a[n-1][n]/a[n-1][n-1];
x2=(a[n-2][n]-x3*a[n-2][n-1])/a[n-2][n-2];
x1=(a[n-3][n]-x2*a[n-3][n-2]-x3*a[n-3][n-1])/a[n-3][n-3];
System.out.println("x0= "+x1+" \nx1= " +x2+" \nx2= " +x3);
}
//(4)gauss seidel
public void MetodoGaussSeidel(){
double x0,x1,x2,tol,e;
int i,j;
double a[][]=new double [3][4];
System.out.println("\t\t\t\"METODO DE GAUSS-SEIDEL 3 ECUACIONES\"");
System.out.println("Ingrese tolerancia");
tol=lee();
System.out.println("Ingrese coeficientes");
for(i=0;i<3;i++)
{
System.out.println("Renglon "+(i+1));
for(j=0;j<=3;j++)
{
System.out.println(" Ingrese a "+(i+1)+" "+(j+1));
a[i][j]=lee();
}
}
x1=0.0;
x2=0.0;
do{
e=x1;
x0=(a[0][3]-x1*a[0][1]-x2*a[0][2])/a[0][0];
x1=(a[1][3]-x0*a[1][0]-x2*a[1][2])/a[1][1];
x2=(a[2][3]-x0*a[2][0]-x1*a[2][1])/a[2][2];
}while(Math.abs(e-x1)>tol);
System.out.println("x0= "+x0+" \nx1= " +x1+" \nx2= " +x2);
}
//(5) gauss jordan
public void MetodoGaussJordan(){
int i,j,k,n;
double a[][] = new double [5][6];
double cte;
double x[] = new double [5];
System.out.println("\t\t\t\"METODO DE GAUSS-JORDAN\"");
System.out.println("No. de incognitas (maximo 5): ");
n=leeint();
System.out.println("Dame los coeficientes: ");
for(i=0;i<n;i++)
{
System.out.println("Renglon "+(i+1));
for(j=0;j<=n;j++)
{
System.out.println(" Ingrese a "+(i+1)+" "+(j+1));
a[i][j]=lee();
}
}
for(i=0;i<n-1;i++){
for(j=i+1;j<=n;j++){
cte=(-a[j][i])/(a[i][i]);
for(k=i;k<n+1;k++){
a[j][k]=((a[i][k])*cte)+a[j][k];
}
}
}
for(i=0;i<n;i++)
{
System.out.println("Renglon "+(i+1));
for(j=0;j<=n;j++)
{
System.out.println(" a "+(i+1)+" "+(j+1)+" =" +a[i][j]);
}
}
}
//(6) LU
public void MetodoLu(){
int i,j;
double Y1,Y2,Y3,X1,X2,X3;
double A[][] = new double [3][3];
double L[][] = new double [3][3];
double U[][] = new double [3][3];
double B[] = new double [3];
System.out.println("\t\t\t\"METODO DE LU 3 ECUACIONES\"");
System.out.println("Ingrese coeficientes d");
for(i=0;i<3;i++)
{
System.out.println("Renglon "+(i+1));
for(j=0;j<3;j++)
{
System.out.println(" Ingrese a "+(i+1)+" "+(j+1));
A[i][j]=lee();
}
}
System.out.println("Ingrese los terminos independientes");
for(i=0;i<3;i++){
System.out.println("Termino "+(i+1));
B[i]=lee();
}
for(i=0;i<3;i++){
L[i][0]=A[i][0];
U[i][i]=1;
}
U[0][1]=A[0][1]/L[0][0];
L[1][1]=A[1][1]-L[1][0]*U[0][1];
L[2][1]=A[2][1]-L[2][0]*U[0][1];
U[0][2]=A[0][2]/L[0][0];
U[1][2]=(A[1][2]-L[1][0]*U[0][2])/L[1][1];
L[2][2]=A[2][2]-L[2][0]*U[0][2]-L[2][1]*U[1][2];
Y1=B[0]/L[0][0];
Y2=(B[1]-L[1][0]*Y1)/L[1][1];
Y3=(B[2]-L[2][0]*Y1-L[2][1]*Y2)/L[2][2];
X3=Y3;
X2=Y2-U[1][2]*X3;
X1=Y1-U[0][1]*X2-U[0][2]*X3;
System.out.println("El resultado es:\nx0= "+X1+" \nx1= " +X2+" \nx2= " +X3);
}
//(7) Interpolacion Newton
public void MetodoInterNewton(){
double a[][] = new double [5][2];
double x,y,fx1x0,fx2x1,fx3x2,fx4x3,fx2x1x0,fx3x2x1,fx4x3x2,fx3x2x1x0,fx4x3x2x1,fx4x3x2x1x0;
int i;
System.out.println("\t\t\t\"INTERPOLACION DE DIFERENCIAS DE NEWTON P/ 5 PTOS.\"");
System.out.println("Valor a interpolar: ");
x=lee();
System.out.println("Dame los 5 pares de puntos");
for(i=0;i<5;i++){
System.out.println("Dame x "+i);
a[i][0]=lee();
System.out.println("Dame f(x) "+i);
a[i][1]=lee();
}
fx1x0=(a[1][1]-a[0][1])/(a[1][0]-a[0][0]);
fx2x1=(a[2][1]-a[1][1])/(a[2][0]-a[1][0]);
fx3x2=(a[3][1]-a[2][1])/(a[3][0]-a[2][0]);
fx4x3=(a[4][1]-a[3][1])/(a[4][0]-a[3][0]);
fx2x1x0=(fx2x1-fx1x0)/(a[2][0]-a[0][0]);
fx3x2x1=(fx3x2-fx2x1)/(a[3][0]-a[1][0]);
fx4x3x2=(fx4x3-fx3x2)/(a[4][0]-a[2][0]);
fx3x2x1x0=(fx3x2x1-fx2x1x0)/(a[3][0]-a[0][0]);
fx4x3x2x1=(fx4x3x2-fx3x2x1)/(a[3][0]-a[0][0]);
fx4x3x2x1x0=(fx4x3x2x1-fx3x2x1x0)/(a[4][0]-a[0][0]);
y=a[0][1]+fx1x0*(x-a[0][0])+fx2x1x0*(x-a[0][0])*(x-a[1][0])+fx3x2x1x0*(x-a[0][0])*(x-a[1][0])*(x-a[2][0])+fx4x3x2x1x0*(x-a[0][0])*(x-a[1][0])*(x-a[2][0])*(x-a[3][0]);
System.out.println("f(x) en ese punto es: "+y);
}
//(8) Interpolacion Lagrange
public void MetodoInterLagrange(){
int n,i;
double x,y;
double a[][] = new double [4][2];
System.out.println("\t\t\t\"METODO DE INTERPOLACION LAGRANGE 2-4 PTOS.\"");
do{
System.out.println("Dame el numero de puntos");
n=leeint();
}while(n<2 || n>4);
System.out.println("Dame los pares de puntos");
for(i=0;i<n;i++){
System.out.println("Dame x "+i);
a[i][0]=lee();
System.out.println("Dame f(x) "+i);
a[i][1]=lee();
}
System.out.println("Dame el valor a interpolar ");
x=lee();
switch(n){
case 2:
y=(((((x-a[1][0])*a[0][1])/(a[0][0]-a[1][0]))+(((x-a[0][0])*a[1][1])/(a[1][0]-a[0][0]))));
System.out.println("f(x) en ese punto es: "+y);
break;
case 3:
y=((x-a[1][0])*(x-a[2][0])*a[0][1])/((a[0][0]-a[1][0])*(a[0][0]-a[2][0]))+((x-a[0][0])*(x-a[2][0])*a[1][1])/((a[1][0]-a[0][0])*(a[1][0]-a[2][0]))+((x-a[1][0])*((x-a[0][0])*a[2][1])/((a[2][0]-a[0][0])*(a[2][0]-a[1][0])));
System.out.println("f(x) en ese punto es: "+y);
break;
case 4:
y=((x-a[1][0])*(x-a[3][0])*(x-a[2][0])*a[0][1])/((a[0][0]-a[1][0])*(a[0][0]-a[2][0])*(a[0][0]-a[3][0]))+((x-a[0][0])*(x-a[2][0])*(x-a[3][0])*a[1][1])/((a[1][0]-a[0][0])*(a[1][0]-a[2][0])*(a[1][0]-a[3][0]))+((x-a[0][0])*(x-a[1][0])*((x-a[3][0])*a[2][1])/((a[2][0]-a[0][0])*(a[2][0]-a[1][0])*(a[2][0]-a[3][0]))+((x-a[0][0])*(x-a[1][0])*((x-a[2][0])*a[
3][1])/((a[3][0]-a[0][0])*(a[3][0]-a[1][0])*(a[3][0]-a[2][0]))));
System.out.println("f(x) en ese punto es: "+y);
break;
default:
System.out.println("INVALIDO");
break;
}
}
//para leer desde teclado
public double lee(){
double num;
try{
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader(isr);
String sdato;
sdato = br.readLine();
num = Double.parseDouble(sdato);
}
catch(IOException ioe){
num=0.0;
}
return num;
}
//para leer un entero
public int leeint(){
int num;
try{
InputStreamReader isr = new InputStreamReader (System.in);
BufferedReader br = new BufferedReader(isr);
String sdato;
sdato = br.readLine();
num = Integer.parseInt(sdato);
}
catch(IOException ioe){
num=0;
}
return num;
}
//para salir del programa
public int Fuera(){
int sal;
System.out.println("\n\n\nSI DESEAS OTRO METODO PRESIONA [1]");
sal=leeint();
return sal;
}
//despliega menu
public void menu(){
int a;
int p;
do{
do{
System.out.println("\n\n\t\t\tMETODOS NUMERICOS\n\n");
System.out.println("\t1.-Biseccion\n\t2.-Newton-Raphson\n\t3.-Gauss\n\t4.-Gauss-Seidel\n\t5.-Gauss-Jordan\n\t6.-LU\n\t7.-Interpolacion Newton\n\t8.-Interpolacion Lagrange");
System.out.println("\n\nEscoja el numero del metodo que desea usar:");
a=leeint();
}while(a<1 || a>8);
switch(a){
case 1:
MetodoBiseccion(); //manda a llamara a cada uno de los metodos
p=Fuera();
break;
case 2:
MetodoNewtonRaphson();
p=Fuera();
break;
case 3:
MetodoGauss();
p=Fuera();
break;
case 4:
MetodoGaussSeidel();
p=Fuera();
break;
case 5:
MetodoGaussJordan();
p=Fuera();
break;
case 6:
MetodoLu();
p=Fuera();
break;
case 7:
MetodoInterNewton();
p=Fuera();
break;
case 8:
MetodoInterLagrange();
p=Fuera();
break;
default:
System.out.println("Opcion incorrecta");
p=1;
break;
}
}while(p==1);
}
}