› Foros › Off-Topic › Miscelánea
/**
* Main class of the Java program.
*
*/
public class Main {
public static void main(String[] args) {
double[] preyPredLV;
double[] preyPred; //Double array contains initial pop. Hares preyPred[0] and pop Lynx preyPred[1]
double[] a =new double[2]; //Double Array contains constants a1 and a2
double[] b =new double[2]; //Double Array contains constants b1 and b2
int n= 10; //Integer, Number of desired periods
double iniLynxPob= 20; //Initial Declaration Population Lynxs (double)
double iniHarePob= 300; //Initial Declaration Population Hares (double)
double a1= 0.1; //Real value of a1, coef.growth of hares in absence of lynx
double a2= 0.01; //Real value of a2, coef.loss of hares due pred by lynx
double b1= 0.01; //Real value of b1, coef.loss of lynx in absence of hares
double b2= 0.00002; //Real value of b2, coef.growth of lynx pred hares
a[0]=a1; //Saving a1 value to array a[0]
a[1]=a2; //Saving a2 value to array a[1]
b[0]=b1; //Saving b1 value to array b[0]
b[1]=b2; //Saving b2 value to array b[1]
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(b[0]);
System.out.println(b[1]);
System.out.println(n);
System.out.println(iniLynxPob);
System.out.println(iniHarePob);
}
amchacon escribió:a, b, a1, a2...
Los nombres de las variables deben ser descriptivos, no poner lo primero que te salga por el teclado.
jorcoval escribió:El código es una marranada, y eso que tienes en el enunciado un important
Pero vamos, es crear unos vectores y meterlos en un bucle e iterar la fórmula
Me cuesta creer que puedas programarlo en un automata y aquí no, máxime cuando es un código mucho más fácilmente programable en AWL o ST que en contactos.
Moki_X escribió:@eduy1985 Es un ejercicio de Java? o es un ejercicio de Sistemas Dinámicos?
Es simplemente resolver las ecuaciones de Volterra, para lo cual puedes usar un esquema explícito de Euler, o FTCS.
jorcoval escribió:Es que das poco tiempo para hacerlo despues de llegar a casa después de pasarme el día programando un SCADA, siento no poder ayudar mucho más.
Primero, lo que haría es una limpieza del código: Aunque sea lo que te han dado, poner nombres claros a las variables ya te ayudará mucho.
Luego es crearte los vectores a recorrer dentro de un bucle (para que te hagas a la idea, el bucle principal seria el bloque OB1 de siemens, aunque parará de iterar al cumplirse las condiciones apropiadas)
Ese bucle actualiza valores según la formula en negrita. Hay que tener cuidado pues el valor de iteracion (normalmente i) debe estar entre 0 y n-1 (donde n es el tamaño de vector).
Hay que controlarlo porque java es menos robusto que los lenguajes de automata, que normalmente tragan con excederse el valor de vector, aunque el resultado, obviamente, no será el esperado.
/**
* Main class of the Java program.
*
*/
public class Main {
public static void main(String[] args) {
double[] preyPredLV;
double[] preyPred; //Double array contains initial pop. Hares preyPred[0] and pop Lynx preyPred[1]
double[] a =new double[2]; //Double Array contains constants a1 and a2
double[] b =new double[2]; //Double Array contains constants b1 and b2
int n= 200; //Integer, Number of desired periods
double[] L=new double[300]; //Initial Declaration Population Lynxs (double)
double[] H=new double[300]; //Initial Declaration Population Hares (double)
L[0]=20.0; // Inicializacion de poblacion Linx
H[0]=300.0; // Inicializacion de poblacion Hires
double a1= 0.1; //Real value of a1, coef.growth of hares in absence of lynx
double a2= 0.01; //Real value of a2, coef.loss of hares due pred by lynx
double b1= 0.01; //Real value of b1, coef.loss of lynx in absence of hares
double b2= 0.00002; //Real value of b2, coef.growth of lynx pred hares
a[0]=a1; //Saving a1 value to array a[0]
a[1]=a2; //Saving a2 value to array a[1]
b[0]=b1; //Saving b1 value to array b[0]
b[1]=b2; //Saving b2 value to array b[1]
//Bucle for para calcular la progresion de las poblaciones segun los coeficientes. Itera 200 veces.
for(int i=0; i<n; i++){
H[i+1] = H[i] * (1.0 + a1 - a2*L[i]);
L[i+1] = L[i] * (1 - b1 +b2*H[i]);
}
//Se muesta el estado de la poblacion habiendo iterado 200 veces.
System.out.println(H[200]);
System.out.println(L[200]);
}}
import java.lang.Integer;
public class PredatorPreySolver
{
double[] preyPredLV(double[] preyPred, double[] a, double[] b, int n)
{
double[] H; // Prey population
double[] L; // Predator population
int i = 1;
n = n + 1;
H = new double[n];
L = new double[n];
H[0] = preyPred[0];
L[0] = preyPred[1];
// System.out.println(String.format("H[%s] [%s] L[%s] [%s]", 0, H[0], 0, L[0]));
for ( ; i < n ; i++ )
{
H[i] = H[i - 1] * ( 1.0 + a[0] - ( a[1] * L[i - 1] ) );
L[i] = L[i - 1] * ( 1.0 - b[0] + ( b[1] * H[i - 1] ) );
// System.out.println(String.format("H[%s] = %s * ( 1.0 + %s - ( %s * %s ) )", i, H[i-1], a[0], a[1], L[i-1]));
// System.out.println(String.format("L[%s] = %s * ( 1.0 - %s + ( %s * %s ) )", i, L[i-1], b[0], b[1], H[i-1]));
}
return new double[]{ H[i - 1], L[i - 1] };
}
public static void main(String[] args)
{
int n = Integer.parseInt(args[0]);
double[] values = (new PredatorPreySolver()).preyPredLV(
new double[]{ 300.0, 20.0 },
new double[]{ 0.1, 0.01 },
new double[]{ 0.01, 0.00002 },
n);
System.out.println(String.format("Snowshoe hares [%s]", values[0]));
System.out.println(String.format("Lynxes [%s]", values[1]));
}
}
De como hackear el tiempo y volver al pasado , lo siento por la broma tonta
Mithrandir0x escribió:Se me ha adelantado Black29, pero he aquí otra:import java.lang.Integer;
public class PredatorPreySolver
{
double[] preyPredLV(double[] preyPred, double[] a, double[] b, int n)
{
double[] H; // Prey population
double[] L; // Predator population
int i = 1;
n = n + 1;
H = new double[n];
L = new double[n];
H[0] = preyPred[0];
L[0] = preyPred[1];
// System.out.println(String.format("H[%s] [%s] L[%s] [%s]", 0, H[0], 0, L[0]));
for ( ; i < n ; i++ )
{
H[i] = H[i - 1] * ( 1.0 + a[0] - ( a[1] * L[i - 1] ) );
L[i] = L[i - 1] * ( 1.0 - b[0] + ( b[1] * H[i - 1] ) );
// System.out.println(String.format("H[%s] = %s * ( 1.0 + %s - ( %s * %s ) )", i, H[i-1], a[0], a[1], L[i-1]));
// System.out.println(String.format("L[%s] = %s * ( 1.0 - %s + ( %s * %s ) )", i, L[i-1], b[0], b[1], H[i-1]));
}
return new double[]{ H[i - 1], L[i - 1] };
}
public static void main(String[] args)
{
int n = Integer.parseInt(args[0]);
double[] values = (new PredatorPreySolver()).preyPredLV(
new double[]{ 300.0, 20.0 },
new double[]{ 0.1, 0.01 },
new double[]{ 0.01, 0.00002 },
n);
System.out.println(String.format("Snowshoe hares [%s]", values[0]));
System.out.println(String.format("Lynxes [%s]", values[1]));
}
}
¿"Syntax Highlighter" para cuando?
EDIT: ¿Podrías poner la versión en autómata que dices? ¿Está hecha con Prolog?
santousen escribió:https://www.youtube.com/watch?v=KEkrWRHCDQU
Aquí tienes un tutorial.De como hackear el tiempo y volver al pasado , lo siento por la broma tonta