Debido a un experimento de física que estaré realizando me vi en la penosa necesidad de hacer mi propio simulador de ondas...
Aquí se los dejo:Superpos ondas
sábado, 11 de diciembre de 2010
jueves, 9 de diciembre de 2010
Mapa de Bernoulli
Recordando un poco de los números aleatorios en una computadora (gracias a una pregunta en fb de RAMIS) quise probar un Mapa de Bernoulli home made. Pongo el código en Java:
/* AUTHOR: Andrés Páez Martínez paezand@gmail.com*/
public static void main(String[] args) {
double random = Math.random();
double delta = 0.0000000000000001;
System.out.println("Init val: " + random + " delta " + delta);
double sieve1 = random;
double sieve2 = delta + random;
sieve2 %= 1;
Scanner in = new Scanner(System.in);
System.out.println("Da iteraciones");
int iter = in.nextInt();
while(iter>0){
System.out.println(sieve1 + " " + sieve2);
sieve1*=3;
sieve2*=3;
sieve1 %= 1;
sieve2 %= 1;
iter--;
}
}
Lo que quería ver es cuántas iteraciones era necesario para que la función tomara una característica aleatoria. Lo que hace el programa es tomar un número "random" proveído por el API de Java, declarar una delta de 10^(-16) (número MUY pequeño) sumárselo a nuestro random y meter ambos al mapa de bernoulli:
Random = 0.4617143798319837
Delta = 0.0000000000000001

Bueno, como ven, después de la iteración 30 aprox. la diferencia entre los números ya es del orden de 10^(-1). Básicamente la diferencia s1(i)-s2(i) para i>35, puede considerarse un número aleatorio:

Como se puede apreciar, antes de volverse caótica la gráfica, la función parece exponencial. Supongo que la tao (de e^(i/tao) está determinada por el multiplicando que en este caso es 3. Si variamos este valor las secuencias divergen más rápido. NOTA: Jajajja obviamente con valores par no funciona el mapa.
Y namás pa que no quede duda, va una gráfica con el multiplicando 97(premio al que me diga porqué 97 jajajjaja):
/* AUTHOR: Andrés Páez Martínez paezand@gmail.com*/
public static void main(String[] args) {
double random = Math.random();
double delta = 0.0000000000000001;
System.out.println("Init val: " + random + " delta " + delta);
double sieve1 = random;
double sieve2 = delta + random;
sieve2 %= 1;
Scanner in = new Scanner(System.in);
System.out.println("Da iteraciones");
int iter = in.nextInt();
while(iter>0){
System.out.println(sieve1 + " " + sieve2);
sieve1*=3;
sieve2*=3;
sieve1 %= 1;
sieve2 %= 1;
iter--;
}
}
Lo que quería ver es cuántas iteraciones era necesario para que la función tomara una característica aleatoria. Lo que hace el programa es tomar un número "random" proveído por el API de Java, declarar una delta de 10^(-16) (número MUY pequeño) sumárselo a nuestro random y meter ambos al mapa de bernoulli:
Random = 0.4617143798319837
Delta = 0.0000000000000001

Bueno, como ven, después de la iteración 30 aprox. la diferencia entre los números ya es del orden de 10^(-1). Básicamente la diferencia s1(i)-s2(i) para i>35, puede considerarse un número aleatorio:

Como se puede apreciar, antes de volverse caótica la gráfica, la función parece exponencial. Supongo que la tao (de e^(i/tao) está determinada por el multiplicando que en este caso es 3. Si variamos este valor las secuencias divergen más rápido. NOTA: Jajajja obviamente con valores par no funciona el mapa.
Y namás pa que no quede duda, va una gráfica con el multiplicando 97(premio al que me diga porqué 97 jajajjaja):
miércoles, 1 de diciembre de 2010
Signals in a Nutshell
Suscribirse a:
Entradas (Atom)
