/*
* Autor: A. L. I. Fernando Merino
* Nombre del archivo: funcionesMembresia.c
* Descripción: Grafica en gnuplot los puntos ordeandos e inicializados
* en los arreglos (valoresX, valoresY)
* 10-octubre-2014*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <math.h>
#define NUM_PUNTOS 11
#define NUM_COMANDOS 4
void seleccionHombroIzquierdo();
void seleccionHombroDerecho();
void seleccionTriangular();
void seleccionSimoidal();
void seleccionTrapezoidal();
void seleccionGaussiana();
void seleccionCampana();
void graficarPuntosDesdeArchivo(char *cad);
double hombroIzquierdo(double a, double b, double x);
double hombroDerecho(double a, double b, double x);
double triangular(double a, double b, double c, double x);
double simoidal(double a, double c, double x);
double trapezoidal(double a, double b, double c, double d, double x);
double campana(double a, double b, double c, double x);
double valorAbsoluto(double x, double c, double gama);
double gaussiana(double c, double gama, double x);
int main(){
int opc;
//while(1){
system("clear");
printf("\n Funciones de membresía disponibles\n");
printf("\n 1: Hombro izquiero");
printf("\n 2: Hombro derecho");
printf("\n 3: Triangular");
printf("\n 4: Trapezoidal");
printf("\n 5: Simoidal");
printf("\n 6: Gaussiana");
printf("\n 7: Campana");
printf("\n 8: Salir");
printf("\n Ingresa tu opción: ");
scanf("%d",&opc);
switch(opc){
case 1:
seleccionHombroIzquierdo();
break;
case 2:
seleccionHombroDerecho();
break;
case 3:
seleccionTriangular();
break;
case 4:
seleccionTrapezoidal();
break;
case 5:
seleccionSimoidal();
break;
case 6:
seleccionGaussiana();
break;
case 7:
seleccionCampana();
break;
case 8:
exit(0);
}
//}
return 0;
}
void seleccionHombroIzquierdo(){
FILE * archivoPuntos = fopen("puntosGraficar.txt", "w");
double x,a,b,inicio, fin;
double ux=0;
/*datos que se pueden configurar:
* muestreo [0,20]
* las variables a y b se pueden leer desde teclado, a tiene que ser menor a b
* opcionalmente también se puede especificar el perido de muestreo*/
printf("\n Inicio de la muestra: ");
scanf("%lf",&inicio);
printf("\n Fin de la muestra: ");
scanf("%lf",&fin);
printf("\n Ingresa a: ");
scanf("%lf",&a);
printf("\n Ingresa b: ");
scanf("%lf",&b);
for(x=inicio;x<=fin;x+=0.01){
printf("%.2f\n",x);
ux = hombroIzquierdo(a,b,x);
fprintf(archivoPuntos, "%lf %lf \n", x, ux);
}
fclose(archivoPuntos);
graficarPuntosDesdeArchivo("set title \"Graficando funcion de membresía - Hombro izquierdo\"");
}
void seleccionHombroDerecho(){
FILE * archivoPuntos = fopen("puntosGraficar.txt", "w");
double x,a,b,inicio, fin;
double ux=0;
/*datos que se pueden configurar:
* muestreo [0,20]
* las variables a y b se pueden leer desde teclado, a tiene que ser menor a b
* opcionalmente también se puede especificar el perido de muestreo*/
printf("\n Inicio de la muestra: ");
scanf("%lf",&inicio);
printf("\n Fin de la muestra: ");
scanf("%lf",&fin);
printf("\n Ingresa a: ");
scanf("%lf",&a);
printf("\n Ingresa b: ");
scanf("%lf",&b);
for(x=inicio;x<=fin;x+=0.01){
printf("%.2f\n",x);
ux = hombroDerecho(4,5,x);
fprintf(archivoPuntos, "%lf %lf \n", x, ux);
}
fclose(archivoPuntos);
graficarPuntosDesdeArchivo("set title \"Graficando funcion de membresía - Hombro derecho\"");
}
void seleccionTriangular(){
FILE * archivoPuntos = fopen("puntosGraficar.txt", "w");
double x,a,b,c,inicio, fin;
double ux=0;
/*datos que se pueden configurar:
* muestreo [0,20]
* las variables a y b se pueden leer desde teclado, a tiene que ser menor a b
* opcionalmente también se puede especificar el perido de muestreo*/
printf("\n Inicio de la muestra: ");
scanf("%lf",&inicio);
printf("\n Fin de la muestra: ");
scanf("%lf",&fin);
printf("\n Ingresa a: ");
scanf("%lf",&a);
printf("\n Ingresa b: ");
scanf("%lf",&b);
printf("\n Ingresa c: ");
scanf("%lf",&c);
for(x=inicio;x<=fin;x+=0.01){
printf("%.2f\n",x);
ux = triangular( a, b, c,x);
fprintf(archivoPuntos, "%lf %lf \n", x, ux);
}
fclose(archivoPuntos);
graficarPuntosDesdeArchivo("set title \"Graficando funcion de membresía - Triangular\"");
}
void seleccionTrapezoidal(){
FILE * archivoPuntos = fopen("puntosGraficar.txt", "w");
double x,a,b,c,d,inicio, fin;
double ux=0;
/*datos que se pueden configurar:
* muestreo [0,20]
* las variables a y b se pueden leer desde teclado, a tiene que ser menor a b
* opcionalmente también se puede especificar el perido de muestreo*/
printf("\n Inicio de la muestra: ");
scanf("%lf",&inicio);
printf("\n Fin de la muestra: ");
scanf("%lf",&fin);
printf("\n Ingresa a: ");
scanf("%lf",&a);
printf("\n Ingresa b: ");
scanf("%lf",&b);
printf("\n Ingresa c: ");
scanf("%lf",&c);
printf("\n Ingresa d: ");
scanf("%lf",&d);
for(x=inicio;x<=fin;x+=0.01){
printf("%.2f\n",x);
ux = trapezoidal(a,b,c,d,x);
fprintf(archivoPuntos, "%lf %lf \n", x, ux);
}
fclose(archivoPuntos);
graficarPuntosDesdeArchivo("set title \"Graficando funcion de membresía - Trapezoidal\"");
}
void seleccionGaussiana(){
FILE * archivoPuntos = fopen("puntosGraficar.txt", "w");
double x,a,b,inicio, fin;
double ux=0;
/*datos que se pueden configurar:
* muestreo [0,20]
* las variables a y b se pueden leer desde teclado, a tiene que ser menor a b
* opcionalmente también se puede especificar el perido de muestreo*/
printf("\n Inicio de la muestra: ");
scanf("%lf",&inicio);
printf("\n Fin de la muestra: ");
scanf("%lf",&fin);
printf("\n Ingresa a: ");
scanf("%lf",&a);
printf("\n Ingresa ancho: ");
scanf("%lf",&b);
for(x=inicio;x<=fin;x+=0.01){
printf("%.2f\n",x);
ux = gaussiana(a,b,x);
fprintf(archivoPuntos, "%lf %lf \n", x, ux);
}
fclose(archivoPuntos);
graficarPuntosDesdeArchivo("set title \"Graficando funcion de membresía - Gaussiana\"");
}
void seleccionCampana(){
FILE * archivoPuntos = fopen("puntosGraficar.txt", "w");
double x,a,b,c,inicio, fin;
double ux=0;
/*datos que se pueden configurar:
* muestreo [0,20]
* las variables a y b se pueden leer desde teclado, a tiene que ser menor a b
* opcionalmente también se puede especificar el perido de muestreo*/
printf("\n Inicio de la muestra: ");
scanf("%lf",&inicio);
printf("\n Fin de la muestra: ");
scanf("%lf",&fin);
printf("\n Ingresa a: ");
scanf("%lf",&a);
printf("\n Ingresa b: ");
scanf("%lf",&b);
printf("\n Ingresa c: ");
scanf("%lf",&c);
for(x=inicio;x<=fin;x+=0.01){
printf("%.2f\n",x);
ux = campana(a,b,c,x);
fprintf(archivoPuntos, "%lf %lf \n", x, ux);
}
fclose(archivoPuntos);
graficarPuntosDesdeArchivo("set title \"Graficando funcion de membresía - Campana\"");
}
void seleccionSimoidal(){
FILE * archivoPuntos = fopen("puntosGraficar.txt", "w");
double x,a,b,inicio, fin;
double ux=0;
/*datos que se pueden configurar:
* muestreo [0,20]
* las variables a y b se pueden leer desde teclado, a tiene que ser menor a b
* opcionalmente también se puede especificar el perido de muestreo*/
printf("\n Inicio de la muestra: ");
scanf("%lf",&inicio);
printf("\n Fin de la muestra: ");
scanf("%lf",&fin);
printf("\n Ingresa a: ");
scanf("%lf",&a);
printf("\n Ingresa b: ");
scanf("%lf",&b);
for(x=inicio;x<=fin;x+=0.01){
printf("%.2f\n",x);
ux = simoidal(a,b,x);
fprintf(archivoPuntos, "%lf %lf \n", x, ux);
}
fclose(archivoPuntos);
graficarPuntosDesdeArchivo("set title \"Graficando funcion de membresía - Simoidal\"");
}
/*funciones finales de membresia*/
double gaussiana(double c, double gama, double x){
double ux = 0, expo=0;
expo = pow((x-c)/gama,2);
ux = pow(2.7182818284,-0.5*expo);
return ux;
}
double campana(double a, double b, double c, double x){
double ux=0;
double abs = valorAbsoluto(x, c, a);
ux = 1 / (1 + pow(abs,2*b));
return ux;
}
double valorAbsoluto(double x, double c, double gama){
double abs=0;
abs = (x - c) / gama;
if(abs < 1){
abs = abs * -1;
}
return abs;
}
double simoidal(double a, double c, double x){
double ux=0;
ux = 1/(1+(pow(2.7182,-a*(x-c))));
return ux;
}
double trapezoidal(double a, double b, double c, double d, double x){
double ux=0;
if(x<=a){
ux=0;
}
if(x>a && x<b){
ux=(x-a)/(b-a);
}
if(x>=b && x<=c){
ux=1;
}
if(x>c && x<d){
ux = (d-x)/(d-c);
}
if(x>d){
ux=0;
}
return ux;
}
double hombroIzquierdo(double a, double b, double x){
double ux=0.0;
if(x<=a){
ux=1;
}
if(x>a && x<b){
ux=(b-x)/(b-a);
}
if(x>b){
ux=0;
}
return ux;
}
double hombroDerecho(double a, double b, double x){
double ux=0;
if(x<=a){
ux=0;
}
if(x>a && x<b){
ux=(x-a)/(b-a);
}
if(x>b){
ux=1;
}
return ux;
}
double triangular(double a, double b, double c, double x){
double ux=0;
if(x<=a){
ux=0;
}
if(x>a && x<b){
ux=(x-a)/(b-a);
}
if(x==b){
ux=1;
}
if(x>b && x<c){
ux = (c-x)/(c-b);
}
return ux;
}
void graficarPuntosDesdeArchivo(char *cad){
int i;
/*lista de comandos para ejecutar y configurar la visualización que tendrán
* los puntos en la gráfica con gnuplot*/
char * configGnuplot[] = {cad,
"set ylabel \"----grado de membresía--->\"",
"set xlabel \"----Universo X--->\"",
"plot \"puntosGraficar.txt\" using 1:2 with lines"
};
/*Se crea una archivo de tipo popen, es una tebería IPC que se usa, para
* ejecutar gnuplot y enviarle el archivo a graficar*/
//FILE * ventanaGnuplot = popen("gnuplot -persist", "w");
FILE * ventanaGnuplot = popen("gnuplot -persist", "w");
// Executing gnuplot commands one by one
for (i=0;i<NUM_COMANDOS;i+ +){
fprintf(ventanaGnuplot, "%s \n", configGnuplot[i]);
}
}
sábado, 11 de octubre de 2014
viernes, 10 de octubre de 2014
Graficar puntos en Gnuplot desde C
Posted on 10/10/2014 06:24:00 p.m. by Fernando Merino with 12 comments
En ocasiones es necesario realizar gráficas de alguna función o simplemente la graficación de puntos. Ésta tarea es simple de realizar desde gnuplot, suponiendo que se use alguna distro de linux. En algunos casos es necesario usar algún programa o software intermedio para realizar dicha gráfica, tal podría ser el caso de realizar un programa en c, y desde ahí generar los puntos y automáticamente graficarlos.
Cuando es la primera vez que se hace esto es un poco complicado. Aquí les traigo un ejemplo para ir comenzando con esto:
/*http://umencs.blogspot.mx/2013/05/plotting-creating-graphs-in-c-c.html File Name: GraphPlotting.c*/
/*
* Autor: gXfer
* Nombre del archivo: graficarGnuplotDesdeC.c
* Descripción: Grafica en gnuplot los puntos ordeandos e inicializados
* en los arreglos (valoresX, valoresY)
* 10-octubre-2014*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define NUM_PUNTOS 11
#define NUM_COMANDOS 4
int main(){
// X, Y valores de los puntos a graficar
double valoresX[NUM_PUNTOS] = {0.0, 1.0, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0};
double valoresY[NUM_PUNTOS] = {4.0, 4.0, 0.0, 1.0, 0.0, 1.5, 0.0, 1.0, 0.0, 0.5, 0.0};
register int i=0;
/* se crea y se abre el archivo puntosGraficar.txt en modo escritura
* para almacenar los valores de x y y que están declarados en los arreglos
* valoresX y valoresY*/
FILE * archivoPuntos = fopen("puntosGraficar.txt", "w");
/*Guardar los puntos x,y en el archivo de texto creado y abierto previamente*/
for (i=0;i<NUM_PUNTOS;i+ +){
fprintf(archivoPuntos, "%lf %lf \n", valoresX[i], valoresY[i]);
}
/*lista de comandos para ejecutar y configurar la visualización que tendrán
* los puntos en la gráfica con gnuplot*/
char * configGnuplot[] = {"set title \"gXfer Graficando puntos - unir con líneas\"",
"set ylabel \"----grado de membresía--->\"",
"set xlabel \"----Universo X--->\"",
"plot \"puntosGraficar.txt\" using 1:2 with lines"
};
/*Se crea una archivo de tipo poen, es una tebería IPC que se usa, para
* ejecutar gnuplot y enviarle el archivo a graficar*/
FILE * ventanaGnuplot = popen ("gnuplot -persist", "w");
// Executing gnuplot commands one by one
for (i=0;i<NUM_COMANDOS;i+ +){
fprintf(ventanaGnuplot, "%s \n", configGnuplot[i]);
}
fclose(archivoPuntos);
return 0;
}
Si usas geany para compilar y ejecutar tus códigos en C, es necesario hacer las siguientes configuraciones:
Ir a la opción construir y seleccionar de la lista desplegable la opción que dice "Establecer comandos de construcción" como se muestra en la siguiente imagen.
Abrirá una ventana como se muestra en la imagen de abajo, en la opción que dice "Compilar" deben agregar la sintaxis "-lm" sin comillas, lo mismo deben de hacer en la línea de que dice "Construir", agregar "-lm" sin comillas. y listo, le dan en aceptar y pueden compilar como normalmente lo hace.
Para compilar: ir al directorio que ha sido guardado previamente:
gcc -Wall graficarGnuplotDesdeC.c -lm -o graficarGnuplotDesdeC
Para ejecutar el resultado introduce en la línea de comandos:
./graficarGnuplotDesdeC.c
La salida es la siguiente:
Si tienen dudas no olviden comentar.
Cómo elegir el mejor entorno de escritorio de Linux para ti
Posted on 10/10/2014 10:34:00 a.m. by Fernando Merino with No comments
En Linux tenemos multitud de entornos de escritorio donde elegir. Analizamos algunos para ayudarte a elegir el mejor para ti.
A los recién llegados a la comunidad de Linux les suele sorprender la gran variedad de entornos de escritorio que tenemos para elegir. Alguien novato
puede estar un poco perdido y probablemente no sepa por donde empezar.
Este post está dirigido a esa gente o a los que ya se han aburrido de su
entorno actual de escritorio y quieren probar algo nuevo.
He buscado en la web y he encontrado éstos, que a continuación se describen brevemente.
Unity
Por regla general, es el primer entorno de escritorio que suelen conocer los recién llegados a Linux. Hay quien definiría a Unity
como una mezcla entre Mac OS y Windows, en el sentido de tener un panel
arriba que recoge los menús de aplicaciones tipo Mac y una barra
lateral izquierda con un botón que nos lleva al Dash, donde podremos navegar por las aplicaciones, tipo Windows.
Una de las características más controvertidas de este escritorio es que cuando abrimos el Dash y realizamos una búsqueda nos muestra resultados online de Amazon.
Lleva un tiempo sin recibir cambios de interés porque los
desarrolladores de Canonical están poniendo más recursos en la versión
para móvil del escritorio. Es un gran entorno para empezar ya que de
Ubuntu, al ser de las distribuciones más usadas, podremos encontrar mucha información al respecto.
Gnome
Para los que usamos Gnome 2, presenciar el cambio radical que se
produjo en Gnome 3 fue difícil de asimilar. Muchas críticas negativas le
cayeron a este entorno por aquellos tiempos, pero he de decir que desde
entonces Gnome ha evolucionado favorablemente hasta convertirse en uno de los mejores entornos de escritorio para elegir.
Este escritorio tiene un panel arriba y juega con los hotcorners,
una función que nos muestra los entornos de escritorio y ventanas al
llevar el cursor a la esquina superior izquierda de la pantalla. Es un entorno cuyas funcionalidades se amplían mediante extensiones,
porque seamos sinceros, Gnome sabe a poco sin ellas. Su facilidad de
uso y su extensibilidad lo hacen recomendable a cualquier tipo de
usuario, así que ya seas novato o usuario avanzado, seguro que podrás
disfrutar de Gnome.
KDE
Si buscas una experiencia de usuario similar a Windows pero vitaminado, KDE es tu entorno. Se basa en el mismo principio, un
panel inferior en el que tenemos un botón a la izquierda que nos
muestra las aplicaciones, la hora y los iconos del sistema a la derecha.
Tiene unas animaciones muy trabajadas y el tema por defecto está
bastante bien. De todas formas, configurarlo a tu gusto es muy sencillo
pero tal cantidad de opciones a veces puede asustar un poco. Es el entorno perfecto para realizar el salto de Windows a Linux y también es genial para aquellos que quieran tener su entorno configurado al detalle.
LXDE
Aquí tenemos un entorno que se centra en ofrecer lo básico usando los menos recursos posibles del sistema. LXDE
tiene un diseño clásico y es ideal para usar en máquinas con unos
cuantos años de antigüedad. Razor-qt y LXDE anunciaron que están
fusionando los dos proyectos así que si prefieres una versión basada en Qt tienes la opción de usar LXQt.
XFCE
Al igual que el anterior, XFCE es un entorno para ordenadores de pocos recursos. Nos moveremos en un panel superior y un dock inferior, ampliamente configurables. No está recibiendo muchos cambios así que si quieres un entorno que no cambie mucho con las versiones nuevas que se van desarrollando este es tu sitio.
Pantheon
El entorno que suelo recomendar por su simplicidad y trabajadísima apariencia es sin duda, Pantheon, de elementary OS. Tendremos una experiencia similar a Mac OS pero con cada versión nueva podemos confirmar que adquiere un sabor propio. Si quieres un escritorio eficiente, simple, que consuma pocos recursos y que además se vea bien, elige Pantheon. Aunque debes de tener presente que no es tan configurable como las opciones anteriores.
De uno u otro modo tienes que elegir uno...
Podrán recomendarnos multitud de entornos de escritorio diferentes pero al final del día lo que importa es que cumpla tus propósitos.
Lo bueno de Linux es que puedes instalar varios e iniciar el que te
apetezca, hay tantos que se hace complicado dedicarles unas líneas a
todos.
Yo uso gnome y ¿cuál usas?
jueves, 9 de octubre de 2014
Truco en Windows 8
Posted on 10/09/2014 12:10:00 p.m. by Fernando Merino with No comments
Nuevo truco descubierto en Windows 8: “ModoDios” (GodMode)
Al igual que pasó en versiones anteriores de Windows poco a poco se
van conociendo más características ocultas y pequeños trucos
relacionados con el nuevo sistema operativo de Microsoft, Windows 8, ese que lleva recogiendo buenas críticas desde que fuera lanzado.
A este respecto desde hace unos días anda pululando por la red un nuevo descubrimiento relacionado con Windows 7, la característica/truco bautizado con el nombre “ModoDios” o GodMode en inglés. ¿Y qué es?
Pues básicamente se ha descubierto que creando una carpeta normal y corriente y dándola un nombre determinado esta
pasa a convertirse en una especie de “super panel de control” desde
donde podremos acceder a multitud de opciones para modificar diversos
aspectos del sistema operativo. Gran parte de las opciones son
accesibles de formas más convencionales pero otras no y tener una
carpeta con todo centralizado es interesante.
Si quieres tener una carpeta “ModosDios”, el proceso es tan simple como hacer lo siguiente:
- Crea una nueva carpeta donde quieras (botón derecho> Nuevo> Carpeta)
- Una vez creada dale el siguiente nombre:
GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}
Listo, verás que la carpeta cambia su icono a uno similar al del
panel de control y si accedes a ella dentro encontrarás todas las
opciones comentadas anteriormente.
Instalar VirtualBox en fedora
Posted on 10/09/2014 08:15:00 a.m. by Fernando Merino with No comments
VirtualBox es un virtualizador de máquinas, en este programa podemos instalar sistemas operativos, como windows, o distros linux.
1. Instalar el repositorio de VirtualBox
cd /etc/yum.repos.d/usuarios de Fedora 20/19/18/17/16/15/14/13/12
sudo wget http://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repoPara usuarios de CentOS 6.5/6.4/6.3/6.2/6.1/6/5.10 y Red Hat (RHEL) 6.5/6.4/6.3/6.2/6.1/6/5.10
sudo wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
3. Actualizar los paquetes y verificar la versión de kernel instaldo en nuestro sistama
sudo yum -y update
Verificar la versión del kernel instalado, con el siguiente comando podemos visualizar en pantalla dicha información:
rpm -qa kernel |sort -V |tail -n 1 uname -r
Nota: Si el la versión del kernel que su sistema tiene instalado no es la versión más reciente, entonces es necesario actulizarlo y reinicar la máquina:
reboot
4. En las últimas versiones de VirtualBox requiere algunas dependencias que no se instalan automáticamente, para instalarlas realizar lo siguiente:
CentOS 6/5 y Red Hat (RHEL) 6/5 se necesita EPEL instalar de la siguiente manera:
sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
sudo yum install binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel dkms
sudo yum install binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-PAE-devel dkms
5. Finalmente instalamos VirtualBox la versión más reciente 4.3 (4.3.16)
yum install VirtualBox-4.3
Nota:
Los siguientes comandos crean automáticamente los usuarios de vboxusers group y agregan al grupo de VirtualBox.
Es necesario ejecutar lo siguientes comandos:
/etc/init.d/vboxdrv setup ## OR ## service vboxdrv setup
6. Agregar nuestro usuario al grupo de vboxuser esto es para que cuando quieras conectar una memoria USB la máquina virtual lo pueda reconocer.
usermod -a -G vboxusers user_nameReemplaza user_name por el nombre de tu usuario.
7. Iniciar VirtualBox, puedes ir al menú de aplicaciones o ejecutarlo desde consola, la decisión es tuya.
Para la consola es: virtualbox &
Suscribirse a:
Entradas (Atom)



