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);
}
}
- 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);
- }
- }
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);
}
}
Porque Copias El Codigo con los Numeritos… Eso Da Ladilla….
Vez a Ver Si No Copias Asi… Pajuo
Miguel:
Lo que realmente deberia darte ladilla es Codear TU MISMO el source, en definitva eso si te daria ladilla. Ahora me llamas Pajuo? Digamos que si hubieses puesto atencion veras que en la parte superior del Source hay una opccion que dice PLAIN TEXT donde si tu le das clic veras que te pasa todo a texto plano listo para copiar en tu editor favorio. Ahora si eso no te basta podrias descargar el source directamente en RAR (indicado con letras rojas).
Saludos!
Muchas gracias por los métodos, me hacían falta algunos para mi proyecto final ;D
skan:
Me alegra que el code te sea util. Y gracias por tu comentario
y para que sea generico no tienes uno que le introduzcas una matriz de nxn
juno:
Desgraciadamente este codigo se encuentra limitado ya que en su tiempo solo fue para fines didacticos.
He probado un software para métodos numéricos, se encuentra en http://www.uns.edu.pe/hmat , es muy didáctico
Robert:
Muchas gracias por el dato, segun veo el programa que mencionas esta en Matlab pero aun asi se me hace en demasia interesante.
Saludos!
UN FAVOR ME PUEDES MENCIONAR CUALES SON LAS FUNCIONES DE BISECCION Y NEWTON RAPHSON
IOROCHI:
El codigo se encuentra comentado…
Saludos!
saludos, en el metodo de newton se necesita que lea funciones como cos sen e…
como puedo hacer eso?
@marco:
Si mi memoria no me falla todos los lenguajes de programación incorporan las funciones básicas tales, como sin(x), cos(x), etc. Seria cuestión de que le dieras una leída a la documentación.
Saludos.
una palabra: HARDCODED!
me sale error en import java.lang.Math; por que?
El código es funcional. Deberías revisar la configuración de tu compilador/computadora.
Saludos!
Gracias mi buen por el aporte
Muy padre el código, a mí también me sirvió de mucho!!! Felicidades.
Síguele hechándole ganas.
en que programa lo pedo realizar
@Michel:
No entendi tu pregunta … El codigo esta desarrollado para Java.
Saludos!
Creo que te refieres a que “IDE” usar para edición del código….. puedes usar NetBeans o Eclipse, instalando JDK y la versión de java mas reciente
hola tu diras cuando las chelas xD hehehe buen codigo. ya que solo fue echo para fines didacticos pero aun asi esta muy bien xD…
@XxjulioxX:
Como decimos por aqui: el que paga manda!
Muchísimas gracias
@ Oscar Venegas:
Me alegra que el código te sea útil.
Saludos!
´porfa tambien como se veria su solucion mediante la implementacion de un grafico y datos.
@jeff:
Ese comentario me huele a que deseas que alguien haga tu tarea.
Saludos!
No le entiendo a esto :(… Lo pongo en netbeans y todo me marca error
@Jorge Valdiviezo:
Si no entiendes nada, lamento decirte que la computación no es lo tuyo ¬¬
Bytez!
Pues, solo observo que mencionas que no te agrada el POO (Abstracción, Herencia, Polimorfismo y Encapsulamiento) y que prefieres el paradigma estructurado. No entiendo a que te refieres en tu ejemplo, ya que Java como cualquier lenguaje con capacidad POO puede escribirse de las dos maneras. Tu aportación es totalmente ESTRUCTURADA, pero igual ayuda y sirve bastante, ya que lo que importa es el algoritmo de cada método, con eso es suficiente. GRACIAS x tu APORTE
@SantoZ:
En efecto Java se programa como uno se sienta comodo. Pero me parece que hace años en ese post “pense” en voz alta.
Bytez!
amigo tendras el codigo en java del metodo euler mejorado y el metodo de heun
@luis alberto:
No
Hola como puedo hacer preguntar para que mi sistema de ecuaciones muestre que es linealmente independiente o dependiente.
gracias se agradece el aporte . vere si le añado GUI y lo proyecto para mi escuela haber que pasa igualmente gracias
@anomixXx:
Si le generas una GUI no estaría de mas que nos compartieras el resultado final.
Bytez!
Yo lo estoy haciendo en GUI xD, oye una pregunta dexter… qué es ”gt”? cuando condicionas el WHILE, dices algo como lo siguiente… c>tol, entiendo lo de c, y tol xD pero en ninguna parte te veo el gt, qué es?
hey gracias :3
ya voy a probar jeje
me ahorraste la tarea :3
gracias por la opción de descargar :3
@Flambo06:
Esa es justamente la idea, facilitar el trabajo. Me alegra saber que te fue útil.
Bytez!
Cual método es “lee”? En la parte de interpolación de Newton, es lo único que me marca error :/
@Zitro:
Deberias probar de nuevo … El código funciona a la perfección.
Bytez!
El metodo lee si esta incluido?
@christian:
Tu dime, ¿Esta incluido?.
Bytez!