pds random variable - non-gnu · gcc ejemplo1.c -o ejemplo1 -i/home/myname/myheaders 3.1.1....

21
PDS Random Variable Biblioteca para la generación de variables aleatorias. Ing. Fernando Pujaico Rivera Desarrollador Principal Investigador Universidad Nacional de Ingeniería

Upload: others

Post on 14-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

PDS Random Variable

Biblioteca para la generación de variablesaleatorias.

Ing. Fernando Pujaico RiveraDesarrollador Principal

InvestigadorUniversidad Nacional de Ingeniería

Page 2: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

PDS Random Variable Biblioteca para la generación de variables aleatorias.por Ing. Fernando Pujaico Rivera

"PDS Random Variable" (PdsRv) es una biblioteca escrita en C, para trabajar con variables aleatorias (o RV por sussiglas en ingles). Usando PdsRv es posible generar RV’s de tipo:

• Secuencia congruencial

• Uniformemente distribuida

• Gaussiana

• Rayleigh

• Exponencial

• Poisson

<fernando.pujaico.rivera en gmail.com>

Licencia GPL V3

Historial de revisionesRevisión 0.0.1 16-03-2011 Revisado por: fprDocumento inicialRevisión 0.01.0 21-04-2011 Revisado por: fprInclusión de autotools

Page 3: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Tabla de contenidos1. Variables Aleatorias...............................................................................................................................1

1.1. Variable aleatoria Uniforme ........................................................................................................11.2. Variable aleatoria Gaussiana .......................................................................................................21.3. Variable aleatoria Rayleighiana ..................................................................................................31.4. Variable aleatoria Exponencial....................................................................................................41.5. Variable aleatoria Poissoniana ....................................................................................................5

2. Modo de uso............................................................................................................................................72.1. Creando las variables aleatorias. .................................................................................................72.2. Usando las variables aleatorias. ..................................................................................................72.3. Destruyendo las variables aleatorias. ..........................................................................................8

3. Compilación con PDSRV y ejemplos de uso........................................................................................93.1. Compilación con PDSRV............................................................................................................9

3.1.1. Compilación por linea de comandos ............................................................................103.1.2. Compilación usando autotools .....................................................................................10

3.2. Ejemplos de uso de la biblioteca...............................................................................................11

4. Referencias ...........................................................................................................................................16A. Preguntas Frecuentes..........................................................................................................................17

iii

Page 4: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Lista de tablas1-1. Estadística de la variable aleatoria Uniforme.......................................................................................21-2. Estadística de la variable aleatoria Gaussiana ......................................................................................31-3. Estadística de la variable aleatoria Rayleighiana .................................................................................41-4. Estadística de la variable aleatoria Exponencial ..................................................................................51-5. Estadística de la variable aleatoria Poissoniana ...................................................................................62-1. Tipos de datos de las variables aleatorias. ............................................................................................7

iv

Page 5: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 1. Variables AleatoriasPara generar todas las variables aleatorias se uso un generador secuencial pseudoaleatorio usando elmétodo congruencial. Esta secuencia puede ser generada usando la variable PdsCongruential. Estasecuencia genera números enteros aleatoriamente desde el valor 0 hasta el valor PDS_RAND_MAX-1.Cada vez que se crea una variable de tipo PdsCongruential, esta es estadísticamente independiente a lasanteriores.

En un generador congruencial, el parámetro aditivo "c" debe ser primo relativo con PDS_RAND_MAXy menor que este. Siguiendo la premisa anterior se puede ver que solo se pueden crear 7830 secuenciasaleatorias distintas. Si se crean mas de 7830 secuencias, las secuencias aleatorias comenzarán a repetirse.Dado que todas las variables aleatorias de esta biblioteca usan como base este generador congruencial,entonces solo se pueden crear 7830 variables aleatorias distintas.

1.1. Variable aleatoria UniformeUna variable aleatoria uniformemente distribuida (PdsUniform) tiene la función de densidad de la Figura1-1.

Para generar una nueva variable aleatoria uniformemente distribuida X, se crea primero una nuevasecuencia aleatoria X1. Luego se aplica la siguiente ecuación.

1

Page 6: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 1. Variables Aleatorias

Figura 1-1. Función densidad de probabilidad uniforme. fx(x)=Uniform(A,B)

Tabla 1-1. Estadística de la variable aleatoria Uniforme

PdsTipovaPdsUniform (B+A)/2 (B-A)2/12

1.2. Variable aleatoria GaussianaUna variable aleatoria Gaussiana (PdsGaussian) tiene la función de densidad de la Figura 1-2.

Para generar una nueva variable aleatoria Gaussiana X, se crea primero dos nuevas variables aleatoriasuniformemente distribuidas X1 y X2. Luego se aplica la siguiente ecuación.

2

Page 7: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 1. Variables Aleatorias

Figura 1-2. Función densidad de probabilidad Gaussiana. fx(x)=N(U,Sigma2)

Tabla 1-2. Estadística de la variable aleatoria Gaussiana

PdsTipovaPdsGaussian U Sigma2

1.3. Variable aleatoria RayleighianaUna variable aleatoria Rayleighiana (PdsRayleigh) tiene la función de densidad de la Figura 1-3.

Para generar una nueva variable aleatoria Rayleighiana X, se crea primero una nueva variable aleatoriauniformemente distribuida X1. Luego se aplica la siguiente ecuación.

3

Page 8: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 1. Variables Aleatorias

Figura 1-3. Función densidad de probabilidad Rayleighiana. fx(x)=Rayleigh(Sigma)

Tabla 1-3. Estadística de la variable aleatoria Rayleighiana

PdsTipovaPdsRayleigh Sigma * sqrt(PI/2) ((4-PI)/2)*Sigma2

1.4. Variable aleatoria ExponencialUna variable aleatoria Exponencial (PdsExponential) tiene la función de densidad de la Figura 1-4.

Para generar una nueva variable aleatoria Exponential X, se crea primero una nueva variable aleatoriauniformemente distribuida X1. Luego se aplica la siguiente ecuación.

4

Page 9: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 1. Variables Aleatorias

Figura 1-4. Función densidad de probabilidad Exponencial. fx(x)=Exponential(Lambda)

Tabla 1-4. Estadística de la variable aleatoria Exponencial

PdsTipovaPdsExponential Lambda-1 Lambda-2

1.5. Variable aleatoria PoissonianaUna variable aleatoria Poissoniana (PdsPoisson) tiene la función de densidad de la Figura 1-5.

Para generar una nueva variable aleatoria Poisson K, se crea primero una nueva variable aleatoriauniformemente distribuida X1. Luego se aplica el siguiente algoritmo.

Algoritmo para la generación de variables aleatorias poissonianas (Knuth):Inicia:Genera una variable aleatoria uniforme X, x in [0,1).

5

Page 10: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 1. Variables Aleatorias

L = e^{-Lambda}, k = 0 y p = 1.0.

do:k = k + 1.p = p * x.while p > L.

return k - 1

Figura 1-5. Función densidad de probabilidad Poissoniana. fk(k)=Poisson(Lambda)

Tabla 1-5. Estadística de la variable aleatoria Poissoniana

PdsTipovaPdsPoisson Lambda Lambda

6

Page 11: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 2. Modo de usoPara la fácil reutilización del código se han definido algunos tipos de variables. Por ejemplo:

typedef float PdsRvReal;

typedef int PdsRvInteger;

typedef unsigned long PdsRvNaturalD;

La Tabla 2-1 muestra todos los tipos de variable aleatorias (RV), los tipos de estructuras correspondientesy el tipo de variable entregado por cada RV.

Tabla 2-1. Tipos de datos de las variables aleatorias.

tipova PdsTipova Variable devueltacongruential PdsCongruential PdsRvNaturalD

uniform PdsUniform PdsRvReal

gaussian PdsGaussian PdsRvReal

rayleigh PdsRayleigh PdsRvReal

exponential PdsExponential PdsRvReal

poisson PdsPoisson PdsRvInteger

2.1. Creando las variables aleatorias.Todas las funciones para crear una variable aleatoria de tipo "tipova" siguen el siguiente formato.

La función de creación de variable se llamará:

PdsTipova *pds_tipova_new(....);

Los parámetros de esta función dependerá del tipo de RV, nótese que devuelve un puntero al tipoPdsRvTipo.

PdsCongruential *pds_congruential_new(void);

PdsUniform *pds_uniform_new(PdsRvReal A,PdsRvReal B);

PdsGaussian *pds_gaussian_new(PdsRvReal U,PdsRvReal Sigma);

PdsRayleigh *pds_rayleigh_new(PdsRvReal Sigma);

PdsExponential *pds_exponential_new(PdsRvReal Lambda);

PdsPoisson *pds_poisson_new(PdsRvReal Lambda);

7

Page 12: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 2. Modo de uso

2.2. Usando las variables aleatorias.La función para la petición de un elemento de la RV X es:

PdsRvRealPdsRvInteger pds_tipova_get_value(PdsTipova *X);PdsRvNaturalD

Como se ve, esta función recibe un puntero a la RV X, y luego extrae un elemento de X en cada llamadaa esta función. Los valores devueltos por esta función pueden ser variables de tipo PdsRvInteger,PdsRvNaturalD o PdsRvReal, según el tipo de variable aleatoria X.

También es posible pedir a la RV X el último valor generado, para conseguir esto, se usan las siguientesfunciones segun sea el tipo de variable de X.

PdsRvRealPdsRvInteger pds_tipova_get_last_value(PdsTipova *X);PdsRvNaturalD

2.3. Destruyendo las variables aleatorias.La función para liberar la RV X es:

void pds_tipova_free(PdsTipova *X);

Si además de liberar la memoria, se desea cargar a la RV X con un NULL, se debe usar:

void pds_tipova_destroy (PdsTipova **X);

8

Page 13: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 3. Compilación con PDSRV y ejemplosde uso

La biblioteca PDSRV puede ser encontrada con los nombres libpdsrv.so y libpdsrv.a.

La biblioteca libpdsrv.so es una biblioteca compartida, el uso de esta biblioteca indica que el programaque la invoque no incluirá el código de la biblioteca en el código del programa, sino que incluirá en elprograma una referencia a la función contenida en la biblioteca. Para que esto funcione la bibliotecatiene que estar en la carpeta estándar en donde el sistema operativo busca las bibliotecas o en la mismacarpeta del programa que lo invoca.

La biblioteca libpdsrv.a es una biblioteca estática, el uso de esta biblioteca indica que el programaincluirá dentro de su propio código todo el código correspondiente a las funciones de la biblioteca usadasen el programa, esto se hace durante la compilación del programa. La biblioteca tiene que estar en lacarpeta estándar en donde el compilador busca las bibliotecas o en la misma carpeta del código fuentedel programa que lo invoca.

3.1. Compilación con PDSRVPara compilar un programa con gcc usando la biblioteca PDSRV se deben de conocer los siguientesparámetros.

El parámetro -lpdsrv se usa para indicar al compilador que debe incluirse la biblioteca libpdsrv.a olibpdsrv.so

• Si existe libpdsrv.a y libpdsrv.so. Se coge por defecto libpdsrv.a

• Si sólo existe una de ellas. Se coge la que existe.

• Si no existe ninguna de ellas. da Error.

La opción -Bdynamic cambia el primer caso, haciendo que se coja libpdsrv.so en vez de libpdsrv.a. Laopción -Bdynamic afecta a todas las librerías que van detrás en la línea de compilación. Para volver acambiar, podemos poner -Bstatic en cualquier momento.

También es posible indicarle al compilador que biblioteca usar, indicando el nombre completo de labiblioteca, en este caso libpdsrv.a.

Si el código fuente que se desea compilar usa las bibliotecas libnombre1.a y libnombre2.a, y la bibliotecalibnombre1.a usa funciones de la biblioteca libnombre2.a, el comando de compilación deberá seguir elsiguiente orden.

gcc ejemplo1.c -o ejemplo1 -lnombre1 -lnombre2

El parámetro -Ldirectory agrega un directorio a la lista de directorios que contienen a las bibliotecas *.ay *.so. Por defecto los directorios son /lib , /usr/lib y el directorio de trabajo.

gcc ejemplo1.c -o ejemplo1 -L/home/myname/mylibs libnombre.a

gcc ejemplo1.c -o ejemplo1 -L/home/myname/mylibs -lnombre

9

Page 14: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 3. Compilación con PDSRV y ejemplos de uso

El parámetro -Ipathname agrega un directorio a la lista de directorios que contienen los archivosinvocados con #include . Por defecto el compilador busca los archivos en el directorio que contiene elcódigo fuente, después los directorios nombrados con la opción -I (si existe), y finalmente, en/usr/include. Si se tienen los archivos de cabecera en /home/myname/myheaders se debería de usar de lasiguiente manera:

gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders

3.1.1. Compilación por linea de comandosPara compilar un programa que usa la biblioteca PDSRV se debe de incluir la siguiente linea en elcódigo fuente (ejemplo.c).

#include <pds/pdsrv.h>

Si la biblioteca ha sido instalada correctamente en el sistema, se procede entonces a compilar el códigoejemplo.c mediante el siguiente comando.

gcc ejemplo.c -o ejemplo -lpdsrv

Si la biblioteca no se ha instalado y el archivo libpdsrv.* se encuentra en /home/name/mylibs, y losarchivos de cabecera *.h se encuentran en /home/name/include entonces la compilación se realizará de lasiguiente manera.

gcc ejemplo.c -o ejemplo -lpdsrv -L/home/name/mylibs -I/home/name/include

Si se desea compilar el archivo ejemplo.c de tal manera de que use una biblioteca compartidapreferencial-mente, entonces se usará el siguiente comando.

gcc ejemplo.c -o ejemplo -Bdynamic -lpdsrv -L/home/name/mylibs -I/home/name/include

3.1.2. Compilación usando autotoolsPara compilar un programa que usa la biblioteca PDSRV haciendo uso de las AUTOTOOLS, se debe deescribir en el archivo Makefile.am correspondiente los siguiente.

# Adicionales archivos include para compilar el ejemplo1.c .INCLUDES = -I/home/name/header

10

Page 15: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 3. Compilación con PDSRV y ejemplos de uso

# El programa a construir.bin_PROGRAMS = ejemplo1

# Lista de códigos fuente para crear ejemplo1.ejemplo1_SOURCES = ejemplo1.c

# Adicionales bibliotecas para compilar el programa ejemplo1.ejemplo1_LDADD = -lpdsrv libnombre1.a /home/name/mylibs/libnombre2.a

Para compilar un biblioteca estatica (*.a) que usa la biblioteca PDSRV haciendo uso de lasAUTOTOOLS con RANLIB, se debe de escribir en el archivo Makefile.am correspondiente lossiguiente.

# Adicionales archivos include para compilar la biblioteca libejemplo1.a.INCLUDES = -I/home/name/header

# La biblioteca a construir.lib_LIBRARIES = libejemplo1.a

# Lista de códigos fuente para crear la biblioteca libejemplo1.a .libejemplo1_a_SOURCES = ejemplo1.c

# Adicionales bibliotecas para compilar la biblioteca libejemplo1.* .libejemplo1_a_LIBADD = -lpdsrv libnombre1.a /home/name/mylibs/libnombre2.a

Para compilar un biblioteca que usa la biblioteca PDSRV haciendo uso de las AUTOTOOLS conLIBTOOL, se debe de escribir en el archivo Makefile.am correspondiente los siguiente.

# Adicionales archivos include para compilar la biblioteca libejemplo1.a# y libejemplo1.so.INCLUDES = -I/home/name/header

# La biblioteca a construir.lib_LTLIBRARIES = libejemplo1.la

# Lista de códigos fuente para crear la biblioteca libejemplo1.* .libejemplo1_la_SOURCES = ejemplo1.c

# Adicionales bibliotecas para compilar la biblioteca libejemplo1.* .libejemplo1_la_LIBADD = -lpdsrv libnombre1.a \/home/name/mylibs/libnombre2.a carpeta/libotra.la

3.2. Ejemplos de uso de la bibliotecaLos siguientes ejemplos darán un idea del uso de la biblioteca PDSRV.

11

Page 16: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 3. Compilación con PDSRV y ejemplos de uso

Ejemplo 3-1. Test de la variable aleatoria gaussiana. N(1.0,3.02)

Este programa crea una variable aleatoria gaussiana X, luego obtiene NUMELEMENTOS de esavariable aleatoria y los guarda en una columna en el archivo "DataGauss.txt".

#include <stdlib.h>#include <pds/pdsrv.h>

#define NUMELEMENTOS 1000

int main(int argc, char** argv){PdsRvReal x;unsigned long int i;PdsGaussian *X=NULL;

FILE *fd=NULL;

X=pds_gaussian_new(1.0,3.0); if(X==NULL) return EXIT_FAILURE;

fd=fopen("DataGauss.txt","w");if(fd==NULL) {printf("ERROR:Ejecutando fopen.\n");return EXIT_FAILURE;}

for(i=0;i<NUMELEMENTOS;i++){x=pds_gaussian_get_value(X);

fprintf(fd,"%f\n",x);}

fclose(fd);

pds_gaussian_destroy(&X);

return EXIT_SUCCESS;}

Ejemplo 3-2. Test de la función de densidad de probabilidad de todas las RV de la biblioteca.

El programa realiza un test de la función de densidad de probabilidad de todas las variables aleatorias dela biblioteca, para lograr esto crea el archivo "prueba.txt" con los datos de las RV en columnas y elarchivo "plot_octave_pds.m", que será usado por OCTAVE para graficar las funciones de densidad deprobabilidad.

#include <stdlib.h>#include <pds/pdsrv.h>

#define NUMELEMENTOS PDS_RAND_MAX/1000

int pds_octave_plot_pdf(char NombreOctaveFile[],char NombreOctaveDataFile[]);

12

Page 17: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 3. Compilación con PDSRV y ejemplos de uso

int main(int argc, char** argv){PdsRvReal xc,x1,x2,x3,x4,x5,x6;unsigned long int i;PdsCongruential *Xc=NULL;PdsUniform *X1=NULL;PdsUniform *X2=NULL;PdsGaussian *X3=NULL;PdsRayleigh *X4=NULL;PdsExponential *X5=NULL;PdsPoisson *X6=NULL;FILE *fd=NULL;

Xc=pds_congruential_new(); if(Xc==NULL) return EXIT_FAILURE;X1=pds_uniform_new(1.5,3.5); if(X1==NULL) return EXIT_FAILURE;X2=pds_uniform_new(1.5,3.5); if(X2==NULL) return EXIT_FAILURE;X3=pds_gaussian_new(0.0,1.0); if(X3==NULL) return EXIT_FAILURE;X4=pds_rayleigh_new(1.0); if(X4==NULL) return EXIT_FAILURE;X5=pds_exponential_new(1.0); if(X5==NULL) return EXIT_FAILURE;X6=pds_poisson_new(4.0); if(X6==NULL) return EXIT_FAILURE;

pds_octave_plot_pdf("plot_octave_pds.m","prueba.txt");

fd=fopen("prueba.txt","w");if(fd==NULL) {printf("ERROR:fopen de datos.\n");return EXIT_FAILURE;}

for(i=0;i<NUMELEMENTOS;i++){xc=(PdsRvReal)pds_congruential_get_value(Xc);x1=pds_uniform_get_value(X1);x2=pds_uniform_get_value(X2);x3=pds_gaussian_get_value(X3);x4=pds_rayleigh_get_value(X4);x5=pds_exponential_get_value(X5);x6=(PdsRvReal)pds_poisson_get_value(X6);

fprintf(fd,"%f\t%f\t%f\t%f\t%f\t%f\t%f\n",x1,x2,x3,x4,x5,x6,xc);}

fclose(fd);

pds_congruential_destroy(&Xc);pds_uniform_destroy(&X1);pds_uniform_destroy(&X2);pds_gaussian_destroy(&X3);pds_rayleigh_destroy(&X4);pds_exponential_destroy(&X5);pds_poisson_destroy(&X6);

return EXIT_SUCCESS;}

13

Page 18: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 3. Compilación con PDSRV y ejemplos de uso

int pds_octave_plot_pdf(char NombreOctaveFile[],char NombreOctaveDataFile[]){FILE *fd;

fd=fopen(NombreOctaveFile,"w");if(fd==NULL) {printf("ERROR:fopen de octave.\n");return EXIT_FAILURE;}

fprintf(fd,"X=load(\’%s\’)\’;\n",NombreOctaveDataFile);fprintf(fd,"intervalos=100;\n");fprintf(fd,"\n");fprintf(fd,"[Nj1 abscisax1]=hist(X(1,:),intervalos);\n");fprintf(fd,"Rango1=max(X(1,:))-min(X(1,:));\n");fprintf(fd,"figure(1);bar(abscisax1,Nj1*intervalos/(Rango1*%lu));\n",NUMELEMENTOS);fprintf(fd,"\n");fprintf(fd,"[Nj2 abscisax2]=hist(X(2,:),intervalos);\n");fprintf(fd,"Rango2=max(X(2,:))-min(X(2,:));\n");fprintf(fd,"figure(2);bar(abscisax2,Nj2*intervalos/(Rango2*%lu));\n",NUMELEMENTOS);fprintf(fd,"\n");fprintf(fd,"Ex1=mean(X(1,:))\n");fprintf(fd,"Ex2=mean(X(2,:))\n");fprintf(fd,"cov_xy=mean(cov((X(1,:)-Ex1),(X(2,:)-Ex1)))\n");fprintf(fd,"\n");fprintf(fd,"[Nj3 abscisax3]=hist(X(3,:),intervalos);\n");fprintf(fd,"Rango3=max(X(3,:))-min(X(3,:));\n");fprintf(fd,"figure(3);bar(abscisax3,Nj3*intervalos/(Rango3*%lu));\n",NUMELEMENTOS);fprintf(fd,"Ex3=mean(X(3,:))\n");fprintf(fd,"E2x3=mean((X(3,:)-Ex3).*(X(3,:)-Ex3))\n");fprintf(fd,"\n");fprintf(fd,"[Nj4 abscisax4]=hist(X(4,:),intervalos);\n");fprintf(fd,"Rango4=max(X(4,:))-min(X(4,:));\n");fprintf(fd,"figure(4);bar(abscisax4,Nj4*intervalos/(Rango4*%lu));\n",NUMELEMENTOS);fprintf(fd,"Ex4=mean(X(4,:))\n");fprintf(fd,"E2x4=mean((X(4,:)-Ex4).*(X(4,:)-Ex4))\n");fprintf(fd,"\n");fprintf(fd,"[Nj5 abscisax5]=hist(X(5,:),intervalos);\n");fprintf(fd,"Rango5=max(X(5,:))-min(X(5,:));\n");fprintf(fd,"figure(5);bar(abscisax5,Nj5*intervalos/(Rango5*%lu));\n",NUMELEMENTOS);fprintf(fd,"Ex5=mean(X(5,:))\n");fprintf(fd,"E2x5=mean((X(5,:)-Ex5).*(X(5,:)-Ex5))\n");fprintf(fd,"\n");fprintf(fd,"[Nj6 abscisax6]=hist(X(6,:),intervalos);\n");fprintf(fd,"Rango6=max(X(6,:))-min(X(6,:));\n");fprintf(fd,"figure(6);bar(abscisax6,Nj6*1.0/(%lu));\n",NUMELEMENTOS);fprintf(fd,"Ex6=mean(X(6,:))\n");fprintf(fd,"E2x6=mean((X(6,:)-Ex6).*(X(6,:)-Ex6))\n");fprintf(fd,"\n");fprintf(fd,"\n");fprintf(fd,"C=min(size(X))\n");fprintf(fd,"[NjC abscisaxC]=hist(X(C,:),intervalos);\n");fprintf(fd,"RangoC=max(X(C,:))-min(X(C,:));\n");fprintf(fd,"figure(C);bar(abscisaxC,NjC*intervalos/(RangoC*%lu));\n",NUMELEMENTOS);fprintf(fd,"\n");

14

Page 19: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 3. Compilación con PDSRV y ejemplos de uso

fclose(fd);

return EXIT_SUCCESS;}

15

Page 20: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Capítulo 4. Referencias

• http://zsoluciones.com (http://zsoluciones.com) Blog personal.

• http://identi.ca/trucomanx (http://identi.ca/trucomanx) Microblogging del proyecto.

• http://en.wikipedia.org/wiki/Probability_distribution(http://en.wikipedia.org/wiki/Probability_distribution) Wikipedia.

16

Page 21: PDS Random Variable - non-GNU · gcc ejemplo1.c -o ejemplo1 -I/home/myname/myheaders 3.1.1. Compilación por linea de comandos Para compilar un programa que usa la biblioteca PDSRV

Apéndice A. Preguntas Frecuentes

1. Puedo participar en el proyecto ?

Si, entra en contacto con:

fernando.pujaico.rivera en gmail.com

2. Que tipo de licencia usa la biblioteca?

Usa la licencia GPL V.3.

3. La variable aleatoria que busco no está, que hago?

Si tienes la ecuación para generar la RV a partir de una RV uniformemente distribuida, mándame unemail a fernando.pujaico.rivera en gmail.com con esa ecuación, y la incorporaré en la siguiente versiónde la biblioteca. También puedes crearla tu haciendo uso de la secuencia aleatoria generadacongruencialmente (PdsRvCongruential).

17