Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Polinomio en Java

Alguien que me ayude como hago para pedir el grado y coeficientes de un polinomio y despues aplicar dos metodos que es derivación en un punto e integración en un intervalo.
Estos dos métodos ya los hice pero para una función específica ahora quiero generalizarlo.

Elaborar un programa que permita realizar la derivación númerica en un punto y la integración numérica en un intervalo sobre una función polinomica. El programa deberá solicitar los datos del polinomio (grado y coeficiente de cada uno de los términos del polinomio) al usuario, así como la opción de aplicar uno de los dos métodos sobre el polinomio, solicitando los datos pertinentes.

El programa deberá estar realizado de acuerdo a la arquitectura Modelo - Controlador vista en clase, con una clase Controladora y una o varias clases para resolver el modelo.

1. Seguir la estructura Modelo - Controlador.

2. Utilizar la herencia o el polimorfismo, así como la encapsulación de datos.

3. Entregar diagrama de clases.

4. Utilizar los métodos de derivación hacia adelante

5. Y de integración por Simpson 1/3.

Ya tengo los métodos de derivación e integración pero para una función en específico alguien me echa una mano
public class Modelo { //Creando la clase Modelo que contiene en este caso los métodos que pertencen al dominio del problema
double funcXAdelante, funcX, funcXAtras, delta, aproxAdelante, aproxAtras, aproxCentral;
public void diferenciaAdelante(){
this.aproxAdelante=((this.funcXAdelante-this.funcX)/(this.delta));
}
public void diferenciaAtras(){
this.aproxAtras=((this.funcX-this.funcXAtras)/(this.delta));
}
public void diferenciaCentral()
{
this.aproxCentral=((this.funcXAdelante-this.funcXAtras)/(2*this.delta));
}

}

public class Controlador //Creamos la clase Controlador que utilizará a la clase Modelo
{
double x,delta;
public double funcion(double x)
{
double res;
res = Math.pow(x,3)-(8*Math.pow(x,2))+(15*x)+3;
return res;
}
public void obtenDerivadas()
{
Modelo dn = new Modelo();
dn.delta = this.delta;
dn.funcXAdelante = this.funcion(this.x+this.delta);
dn.funcX = this.funcion(this.x);
dn.funcXAtras = this.funcion(this.x-this.delta);
dn.diferenciaAdelante();
dn.diferenciaAtras();
dn.diferenciaCentral();
System.out.println("La derivada en el punto:"+this.x+"\n");
System.out.println("utilizando diferencias hacia "+"adelante: "+dn.aproxAdelante);
System.out.println("utilizando diferencias hacia "+"atras:"+dn.aproxAtras);
System.out.println("utilizando diferencias"+" centrales: "+dn.aproxCentral);
}

public static void main (String args[]){
try{
Controlador ect = new Controlador();
ect.x = Double.parseDouble(args[0]);
ect.delta = Double.parseDouble(args[1]);
ect.obtenDerivadas();
}
catch (ArrayIndexOutOfBoundsException aioobe) {
System.out.println("Error!!");
System.out.println("Modo de uso en consola: java Controlador Digitarvalordex valordelatolerancia");
}
}
}

Este es el de Integración

public class ModeloIntegracion //Se crea la clase modelo que será la encargada de tener los metodos del dominio del problema de Intergación de Simpson
{
double fx[];
double h, sumaPar, sumaImpar, integral;
int n;

public ModeloIntegracion(int partes)
{
this.fx = new double[partes];
this.n = partes;
}

public void sumaImpares()
{
for(int i=1;i<(this.n-1);i++)
{
if(i%2==0)
continue;
this.sumaImpar=this.sumaImpar+this.fx[i];
}
}

public void sumaPares()
{
for(int i=2;i<(this.n-2);i++)
{
if(i%2!=0)
continue;
this.sumaPar=this.sumaPar+this.fx[i];
}
}

public void obtenArea()
{
this.sumaImpares();
this.sumaPares();
this.integral = (this.h/3)*(this.fx[0]+(4*this.sumaImpar)+(2*this.sumaPar)+this.fx[this.n-1]);
}
}

public class ControladorIntegracion //Se crea el controlador que tendrá dependencia de los métodos del modelo ya creado
{
double limInf, limSup;
int n;

public double f(double x)
{
double res;
res = (3*Math.pow(x,2))-(2*x)-8;
return res;
}

public void obtenIntegral()
{
ModeloIntegracion sut = new ModeloIntegracion(this.n);
sut.h = (this.limSup-this.limInf)/(this.n-1);

for(int i = 0;i<n;i++)
{
sut.fx[i]=this.f(this.limInf+(i*sut.h));
}
sut.obtenArea();

System.out.println("La integral en el intervalo: ("+this.limInf+","+this.limSup+") es \n");

System.out.println("Integral= "+sut.integral);
}

public static void main(String args[]){
try{/
ControladorIntegracion ecs = new ControladorIntegracion();
ecs.limInf = Double.parseDouble(args[0]);
ecs.limSup = Double.parseDouble(args[1]);
ecs.n = Integer.parseInt(args[2]);
ecs.obtenIntegral();
}
catch (ArrayIndexOutOfBoundsException aioobe) {
System.out.println("ERROR!!");
System.out.println("Modo de uso en consola: java ControladorIntegral limiteinferior limitesuperior numerodepuntos");
}
}
}

Saludos y gracias desde ya, orientenme porfavor.

noviembre 17, 2013 | Unregistered CommenterCarlos

Guenas.

Francamente estoy hasta los "buevos" de la gente que quiere "aprender programacion" y que otros le resuelvan los problemas.

NOOOO
Si tienes dudas pregunta a tu tutor. Para eso esta.
El tema que exibes no me creo que se de ni una sola vez en el mundo real pero si en el académico. Apostaría cualquier cosa a que el tema sobre el que preguntas no es mas que un ejercicio.
Jamas te haré un ejercicio porque su objetivo es que aprendas. Tu objetivo es aprobar, no aprender.

Tu pregunta es terriblemente "sospechosa" si el resto del código es tuyo.

En la escuela se paga. Si quieres ir a la escuela de javahispano espero que les pagues. La gente de aquí dudo que este dispuesta a hacer tus practicas para que tu luego, sin tener ni puta idea, robes puestos de trabajo a gente que si sabe de lo que hablan y piden.

De verdad que me ponen malo.

Un saludo

noviembre 17, 2013 | Unregistered CommenterPaposo

Agradezco tu respuesta y no para nada mi objetivo es "aprobar" , todo lo contrario es "aprender",y si yo desarrollé los métodos de derivación e integración y como verás jamás pedí que me resolvieran el problema, como bien puse quiero que me orienten, que me ayuden, no soy un experto ni nada de lo contrario no estaría pidiendo su ayuda, pensé que aquí podrían orientarme sobre por donde ir porque nosé como pedir y guardar el polinomio. Creo que malinterpretaste lo que coloqué y es una pena que sea así pero te repito todos aprendemos de todos y yo soy una de las personas que no le interesa una nota sino aprender, creeme que si me conocieras no dudarías ni un segundo en afirmar que lo que digo es verdad.

En fin agradezco tu apoyo y respuesta.

Saludos

noviembre 17, 2013 | Unregistered CommenterCarlos

Guenas.

Pues perdoname si me equivocado. Si lees los mensajes que llegan entenderas mi posicion.

Voy a tratar de ayudarte, aunque no se exactamente cual es tu problema, dado que el código que has escrito no es de bajo nivel.

Por lo que entiendo tu problema es de entrada.
En un polinomio lo que importa son los coefecientes. El resto es estándar.
¿Por que no pides de entrada los coeficientes desde el menor al mayor?
Cuando una X no exista el coeficiente es 0. Si empiezas desde el menor no habrá limite al numero de coeficientes.
Evidentemente con grados de X iguales debes pedir que el usuario simplifique.
Si la simplificacion del usuario no es posible una buena solución es pedir un texto tipo 3X2+ 2x+6x+5x+....
Usa una expresión regular como (/d*X/d*) para obtener los términos y suma los que tengan rango idéntico.Con esto regularizas la expresión y podrás aplicar la descomposición en coeficientes.

No se si me he explicado demasiado bien.

Un saludo

noviembre 17, 2013 | Unregistered CommenterPaposo

Si entiendo tu postura, si eso tengo pensado pedir el grado limitar el for hasta dicho grado y despues ocupar un switch case para que entre a cada metodo, ya sea integrar o derivar. Lo que nose es si para pedir el polinomio lo hago con un readline y eso lo guardo, esa es mi duda.

Lo trataré de desarrollar y en un rato comento como voy o si me atoro para que me orienten. Gracias y saludos

noviembre 17, 2013 | Unregistered CommenterCarlos

Que tal, ya logré leer el polinomio, ahora quiero hacerlo ocupando un switch case, para que entre a derivación o integración pero ya me atoré porque no sé que iría en la funcion main, así como le haría para el paso de parametro, porque ahora a la función que aplicaré cada metodo será el polinomio que me dé el usuario

Esta fue la que implemente para leer el Polinomio:

public class LeePolinomio
{
public static void main (String args[])
{
int grado;
int poli[];
grado=Integer.parseInt(args[0]);
poli= new int[grado+1];
for(int i=grado;i>=0;i--)
{
poli[i]=Integer.parseInt(args[i+1]);}
for(int i=grado;i>=0;i--)
System.out.print(poli[i]+"X^"+(i)+"+"+" ");
System.out.print("\n\n");
}
}

Y este es el que estaba haciendo con el switch case pero ya me quedé atorado en como poner los casos:

public class Principal
{
public static void main (String[] args){
menu();
}

private static void menu () {
Polinomio Poli = new Poli();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("");
System.out.println("Derivacion e Integracion de polinomios");
System.out.println("");
System.out.println("1- Derivación");
System.out.println("2- Integración");
System.out.println("3- Salir");
try{
String respuesta = br.readLine();
char resp = respuesta.charAt(0)
switch (resp) {
case '1':
case '2':
case '3': System.out.println("¡Hasta Luego!");
break;
default: System.out.println("Opcion incorrecta");
menu();
}
}
catch(Exception e1){
System.out.println("No ha ingresado ninguna opcion, Intentelo nuevamente");
menu();
}


}
}

Ayuda porfavor un consejo como le hago, es que ya me atoré ahi

noviembre 19, 2013 | Unregistered CommenterCarlos

Guenas.

Me parece que switch no acepta char. Creo que solo acepta números y la ultima versión acepta ademas Strings.

Un saludo

noviembre 19, 2013 | Unregistered CommenterPaposo