Comunidad de diseño web y desarrollo en internet online

Error de sintaxis en codigo... MAth.LN10

Citar            
MensajeEscrito el 01 Oct 2008 02:45 pm
Hola, estoy haciendo un simulador que me calcule una variable aleatoria de distribución exponencial y otra de distribucion normal, ya logre sacar el numero aleatorio de esta manera:

package {


import fl.controls.DataGrid;

public class Simulador {
public var clientes:Array=new Array;
public var cola:Array=new Array;
public var tiempoLlegadaA:int;
public var tiempoLlegadaB:int;
public var tiempoAtencionA:int;
public var tiempoAtencionB:int;
public var minutoActualAcomulado:int=0;
public var minutoActualRelativo:int=0;
public var minutoRelativo:int=0;
public var ultimoCliente:Cliente=null;

public function generarNumero(a:int,b:int):int {
var num:int=Math.round(Math.random()*(b-a))+a;
return num;
}
public function entroCliente():Boolean {
minutoActualAcomulado++;
minutoActualRelativo++;
minutoRelativo++;
if (minutoActualRelativo > tiempoLlegadaB) {
minutoActualRelativo=1;
minutoRelativo=1;
}
var minutoAleatorio:int=generarNumero(tiempoLlegadaA,tiempoLlegadaB);

if (minutoRelativo == minutoAleatorio) {
minutoRelativo=0;
actualizarUltimoCliente(minutoAleatorio);
return true;
}
return false;
}
public function actualizarUltimoCliente(minutoAleatorio:int):void {
ultimoCliente=new Cliente();
ultimoCliente.simulador=this;
ultimoCliente.tiempoLlegada=minutoAleatorio;
ultimoCliente.tiempoLlegadaAcomulado=minutoActualAcomulado;
ultimoCliente.tiempoAtencion=generarNumero(tiempoAtencionA,tiempoAtencionB);
clientes.push(ultimoCliente);
cola.push(ultimoCliente);
}
public function loadResultados(dg:DataGrid) {

dg.columns = ["Cliente", "TL", "TLA","TAT"];

for (var i=0; i<clientes.length; i++) {
var item:Object = {Cliente:(i+1),
VAU:clientes[i].tiempoLlegada,
VAE:clientes[i].tiempoLlegadaAcomulado,VAN:clientes[i].tiempoAtencion};
trace(item);
dg.addItem(item);
}
}
}
}


Lo que está en negrilla es lo que deseo reemplazar para generar el numero pero no me cuadra al momento de utilizar el comando Math.LN10, las formulas son las siguientes: Exponen= ((-1/1.2)*Ln(1-aleatorio()))
En la variable aleatorio Normal tengo que generarar dos variables para utilizar la formula: Normal=RAIZ(-2*Ln(Aleatorio1)*COS(2*PI*Aleatorio2).


LEs agradezco su colaboración. es que estas palabras reservadas no las manejo bien. SOy nuevo en Action Script yo manejaba JAva

Por olberillo

10 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Oct 2008 03:08 pm
Ademas no he logrado cuajar como declarar un dato float o double en action script ????? :S

Por olberillo

10 de clabLevel



 

msie
Citar            
MensajeEscrito el 01 Oct 2008 08:32 pm
El código así es imposible de leer, postea entre tags de Action Script:

Código :

[as]
//El código aquí
[/as]

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 01 Oct 2008 11:21 pm

Código ActionScript :

import fl.controls.DataGrid;

public class Simulador {
public var clientes:Array=new Array;
public var cola:Array=new Array;
public var tiempoLlegadaA:int;
public var tiempoLlegadaB:int;
public var tiempoAtencionA:int;
public var tiempoAtencionB:int;
public var minutoActualAcomulado:int=0;
public var minutoActualRelativo:int=0;
public var minutoRelativo:int=0;
public var ultimoCliente:Cliente=null;

public function generarNumero(a:int,b:int):int {
var num:int=Math.round(Math.random()*(b-a))+a;
return num;
} public function entroCliente():Boolean {
minutoActualAcomulado++;
minutoActualRelativo++;
minutoRelativo++;
if (minutoActualRelativo > tiempoLlegadaB) {
minutoActualRelativo=1;
minutoRelativo=1;
}
var minutoAleatorio:int=generarNumero(tiempoLlegadaA,tiempoLlegadaB);

if (minutoRelativo == minutoAleatorio) {
minutoRelativo=0;
actualizarUltimoCliente(minutoAleatorio);
return true;
}
return false;
}
public function actualizarUltimoCliente(minutoAleatorio:int):void {
ultimoCliente=new Cliente();
ultimoCliente.simulador=this;
ultimoCliente.tiempoLlegada=minutoAleatorio;
ultimoCliente.tiempoLlegadaAcomulado=minutoActualAcomulado;
ultimoCliente.tiempoAtencion=generarNumero(tiempoAtencionA,tiempoAtencionB);
clientes.push(ultimoCliente);
cola.push(ultimoCliente);
}
public function loadResultados(dg:DataGrid) {

dg.columns = ["Cliente", "TL", "TLA","TAT"];

for (var i=0; i<clientes.length; i++) {
var item:Object = {Cliente:(i+1),
VAU:clientes[i].tiempoLlegada,
VAE:clientes[i].tiempoLlegadaAcomulado,VAN:clientes[i].tiempoAtencion};
trace(item);
dg.addItem(item);
}
}
}
}

Por olberillo

10 de clabLevel



 

msie
Citar            
MensajeEscrito el 02 Oct 2008 12:36 pm
Según el título del post parece que tienes un problema al utilizar la constante del logaritmo natural de 10, sin embargo no lo veo utilizado en el código, además según las fórmulas:


Exponen= ((-1/1.2)*Ln(1-aleatorio()))

Normal=RAIZ(-2*Ln(Aleatorio1)*COS(2*PI*Aleatorio2)


Lo que debes utilizar en los dos casos es el logaritmo natural del resultado aleatorio, no entiendo entonces donde te da el error del logaritmo natural de 10. Solo recuerda, por si ese es el problema, que cuando vas a calcular el logaritmo de un número, este tiene que ser mayor a 0, y quizás este cálculo:


1-aleatorio


Genere un número negativo.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 02 Oct 2008 02:34 pm
Pues te comento que este es un avancve de codigo que estoy haciendo...al momento de cambiar la parte que esta e negrilla, quise utilizar el Math.LN10 :o pero me di cuenta de que no se pueden realizar operaciones con este ya que no tiene referencia. Entonces estoy utizando Math.log y me funciona bien con este. El Math.LN10 es una constante y no se puede realizar op en ella. "Creo es un error que me funcione con Math.log" puesto qe LOG es != a LN10. Pero si la palabra reservada es asi hay que aprovechar :wink:

GrRaxias por su colaboracion ^^

Por olberillo

10 de clabLevel



 

msie
Citar            
MensajeEscrito el 02 Oct 2008 07:15 pm
No, no es un error que te funcione con Math.log, este es el que debías utilizar, era por eso que te decía que según tus fórmulas no debías utilizar la constante, en realidad la constante Math.LN10 lo que te devuelve es el logaritmo natural de 10, al igual que la constante Math.LN2 te devuelve el del número 2 y la de Math.PI, te devuelve el valor de ¶. Ahora cuando deseas hallar el logaritmo natural de un número se realiza con:

Código ActionScript :

var resultado:Number = Math.log(x);

Y es lógico que LOG != de LN10, porque LN10 no es que sea el logaritmo con base 10 de un número sino el logaritmo neperiano de 10, es decir tomando como base euler y log es el logaritmo neperiano del número que le pases como parámetro.

Si quiseras hallar el logaritmo con base 10 de un número tendrías que calcularlo y es verdad que es una lástima que flash no lo tenga implementado, ya que se utiliza bastante:

Código ActionScript :

//para hallar el logaritmo con base 10 o logaritmo común de de x

var resultado:Number = Math.log(x) / Math.LN10;

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 02 Oct 2008 08:53 pm
^^ Su ayuda ha sido muy beneficiosa para mi. Relamnete es la primera vez que consulto en este foro y me parecio magnifico. Gracias y espero encontrar su ayuda de ahora en adelante. Graxias. :D

Por olberillo

10 de clabLevel



 

msie7
Citar            
MensajeEscrito el 07 Oct 2008 04:29 am

Por olberillo

10 de clabLevel



 

msie

   Página 1 de 1

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.