Mostrando entradas con la etiqueta Algoritmica. Mostrar todas las entradas
Mostrando entradas con la etiqueta Algoritmica. Mostrar todas las entradas

martes, 30 de abril de 2013

Shape Context Based Corresponding Point Models

El Ejemplo 2D creará un modelo de punto correspondiente (PCM) para un conjunto de 10 contorno de la mano 2D.

El Ejemplo 3D creará un PCM de un conjunto de mandíbula 10 3D superficies trianguladas.

También hay ejemplos utilizando el PCM de entrenar y utilizar modelos 2D/3D forma activa (ASM) y modelos de apariencia activa (AAM). (carpeta "ActiveModels_version7")

El ejemplo 2D toma un par de minutos. El 3D-ejemplo alrededor de 7 horas, y requiere 64 bits Matlab.

La asignación no rígida entre conjuntos de datos se mantiene difeomorfa para evitar doblar la malla. Sin embargo, el optimizador no tuvo éxito en todos los casos de la 3D-ejemplo (tal vez en la próxima actualización)



DESCARGAR 



jueves, 25 de abril de 2013

Aplicacion de Matlab a la Economia


En este ejemplo se pondrá de relieve cómo MATLAB se puede utilizar para llevar a cabo:

Análisis de distribución de valor actual neto de una mina

Modelización y simulación de los precios futuros de tasas de interés y rutas

Las evaluaciones de riesgo basadas en la distribución de los resultados económicos




lunes, 22 de abril de 2013

interpolación ecuación cuadrática, en Matlab

Determinar coeficientes de una ecuación de interpolación cuadrática al tener 3 valores de x, y.

se supone que tiene una ecuación cuadrática y = ax ^ 2 + bx + c y tienen 3 puntos en x y 3 puntos en y. Este script determina a, b​​, c




jueves, 18 de abril de 2013

Ecuacion de Segundo Grado en Python 3 usando Tkinter

En el post anterior (16/abril) publicamos el código para la resolucion de ecuaciones  de segundo grado en python 3.x. Partiendo de este código anterior desarrollamos una aplicacion con interfaz de usuario, usando la librería tkinter, en nuestro intento por aprender programacion en python 3.3. El código queda como sigue.

## graficador de  la funciones
from tkinter import*
from tkinter import messagebox
import matplotlib.pyplot as plt
import numpy as np
ventana = Frame(height = 400, width = 400)
ventana.pack(padx = 10, pady = 10)
### Declarando Variables
a = DoubleVar()
b = DoubleVar()
c= DoubleVar()
restx1 = StringVar()
restx2 = StringVar()

#Declarando funciones 
### funcion graficar
def graficar():
     a = aA.get()
     b = bB.get()
     c = cC.get()
     ax = float(a)
     bx = float(b)
     cx  = float (c)
     x = np.arange(-10,10,0.5)
     y = ax*x**2 + bx*x + cx
     plt.plot(x,y)
     plt.title('a*x^2 + b*x + c = 0')
     plt.xlabel('X')
     plt.ylabel('Y')
     plt.show()

##termina funcion graficar
### inica funcion calcular
def calcular():

        
        a = aA.get()
        b = bB.get()
        c = cC.get()
        ax = float(a)
        bx = float(b)
        cx  = float (c)
        ## calculando Delta
        delta = float(bx**2-4*ax*cx)
           
        if delta<0:
                
                messagebox.showerror('Eror', 'No hay solucion')

        elif delta ==0:
            s == float(-bx/2*ax)
            messagebox.showinfo('resultado','Solucion unica ', s)
        else:
             
             
                  resultado = Label(ventana, text =
                                   "Resultado")
                  resultado.place(bordermode = OUTSIDE, height = 30, width= 100, x = 150, y= 250)
                  resultado1 = Label(ventana, text =
                                   "X1")
                  resultado1.place(bordermode = OUTSIDE, height = 30, width= 50, x = 180, y= 280)
                  resultado2 = Label(ventana, text =
                                   "X2")
                  resultado2.place(bordermode = OUTSIDE, height = 30, width= 50, x = 180, y= 310)
                  x1 = float((-bx+((bx**2 - 4*ax*cx))**0.5)/(2*ax))
                  x2 = float((-bx-((bx**2 - 4*ax*cx))**0.5)/(2*ax))
                  r1 = Label(ventana,textvariable = restx1)
                  r1.place(bordermode = OUTSIDE, height = 30, width= 50, x = 230, y= 280)
                  restx1.set(x1)
                  r2 = Label(ventana,textvariable = restx2) 
                  r2.place(bordermode = OUTSIDE, height = 30, width= 50, x = 230, y= 310)
                  restx2.set(x2)
                  
##iniciando maquetado de  interfaz
aA = Entry(ventana, textvariable = a)
aA.place(bordermode = OUTSIDE, height = 30, width = 50, x = 10, y = 40)
bB = Entry (ventana, textvariable = b)
bB.place(bordermode = OUTSIDE, height = 30, width = 50, x = 130, y = 40)
cC = Entry(ventana, textvariable = c)
cC.place(bordermode = OUTSIDE, height = 30, width = 50, x = 230, y = 40)
## entrada de TExto

xa = Label(ventana, text = "X^2 + ")
xa.place(bordermode = OUTSIDE, height = 30, width = 50, x =70,y=40 )
xb = Label(ventana, text = "X + ")
xb.place(bordermode = OUTSIDE, height = 30, width = 50, x = 180, y = 40)
xc = Label(ventana, text = "= 0 ")
xc.place(bordermode = OUTSIDE, height = 30, width = 50, x=280, y = 40)

### boton de graficar

graficar = Button ( ventana, text = "Graficar", command = graficar)
graficar.place(bordermode= OUTSIDE, height= 40, width = 100, x = 40, y = 200)

## boton calcular
calcular = Button (ventana, text = "Calcular", command = calcular)
calcular.place(bordermode = OUTSIDE, height = 40, width = 100, x = 160, y = 200)
## terminado el  maquetetado de la  GUI

ventana.mainloop()
Nuestro codigo ha crecido en gran manera, en el post anterios solo eran aproximadamente 30 lineas  y en este momento tenemos un total de 100 lineas de codigo  ptyhon 3.3. La apliacion queda de la siguiente manera.



















Compara la cantidad de codigo Python  vs la cantida de  Codigo Matlab, ¿Cual crees que es mas conveniente?, ¿Cual se te hace mas facil?, ¿Cual te enseñan en la facultad de ingenieria? Tu tienes la unica respuesta si deseas aprender python.

martes, 26 de marzo de 2013

Codigo del videotutorial 2 de python 3 para calculo numerico

x = input("Datos de X: ")

y = input("Datos de Y: ")


X = ast.literal_eval(x)
Y = ast.literal_eval(y)

lx= len(X)
ly=len(Y)

if lx == ly:
    plt.boxplot(X,Y)
    plt.title("grafica de cajas")
    plt.xlabel("Eje X")
    plt.ylabel("Eje Y")
    plt.show()
else:
    print("longitudes diferentes")

jueves, 14 de marzo de 2013

Señales en Matlab

Una aplicación muy sencilla para poder entender los conceptos de amplitud de señal es la siguiente.

*) empezamos por crear una interfaz de usuario como esta
asignándole al Slider las propiedades que nos parezcan mas convenientes, en este caso use un: ListboxTop 1
un min de 0.0 y un max de 10.0


En mi caso al entrar al callback del Slider1, el código me queda de la siguiente manera



function slider1_Callback(hObject, eventdata, handles)
amplitud = get(handles.slider1,'Value');
A = amplitud;
omega= 2*pi/12;

phi = 0;
a = 6;
n = -10:10;
expseno = A*sin(omega*n );
stem(n,expseno)



la aplicación corre de la siguiente manera:


Al modificar la posición del Slider1 la amplitud de nuestra señal cambiara, también puedes modificar  las otras propiedades se señales agregando mas Slider o simplemente cambiando el código.



martes, 29 de enero de 2013

Cálculo de flash isotérmico mediante la ecuación de estado de Soave

Multicomponentes en flash cálculos utilizando una ecuación de estado y reglas de mezcla clásica.


Sólo tiene que ejecutar main01.m, es fácil cambiar la composición y las condiciones de funcionamiento. Si desea agregar nuevos componentes sólo hay que añadir los críticos y definir propiedades del factor acéntrico. También es posible utilizar parámetros de interacción binarios differentes con ZE

D.E.S.C.A.R.G.A.R

Una clase de Antoine orientados a objetos cálculos de equilibrio vapor-líquido


Antoine para facilitar el cálculo de temperaturas de los componentes puros de saturación y presiones. Un objeto que corresponde a un componente puro se crea una instancia mediante la especificación de los parámetros de Antoine. Los métodos incluyen el cálculo de la presión de saturación, la temperatura de saturación, y el trazado.

Los datos de ejemplo se incluye para un pequeño número de compuestos. Un método de búsqueda se incluye para facilitar la búsqueda Webbook NIST Química para los parámetros de Antoine de otros compuestos.

Un extenso tutorial demuestra el uso de la ecuación de Antoine para los cálculos de equilibrio líquido-vapor. Los ejemplos incluyen el punto de burbuja y cálculos de punto de rocío, la construcción de Txy binario y diagramas XY, y la solución de los problemas de flash isotérmicas.

Este fue desarrollado para su uso en cursos de introducción en Ingeniería Química




miércoles, 31 de octubre de 2012

Animacion de Graficos en Matlab

Les  dejo el código usado en el  videotutorial anterior sobre animación de graficos 2D.
posteriormente  publicare el siguiente videotutorial.


%Animacion de Graficos en Matlab....
clear all
clc
x=[-10:1:10];
k=-1;
y=k*x.^2-2;

h=plot(x,y,'-o');
grid on
axis([-10,10,-100,100]);
while k<1
    for i=1:length(x)
     k=k +.1;%mov de incremento
     y=k*x.^2-2; %Funsion Original
    
     set(h,'XData',x,'YData',y);
     drawnow % grafiq en el mismo punto
             % comando mas avanzado que hold on/ off
    
    Image = getframe;
     P = frame2im(Image);
     number = num2str(i);
     extension = '.bmp';
     filename = [number,extension];
     imwrite(P,eval('filename'), 'bmp');
    end
    
end





sábado, 6 de octubre de 2012

input Avanzado en Matlab parte 2 - Validacion de Datos

Es una buena practica de programacion la Validacion  de nuestros datos a introducir, Matlab cuenta con múltiples comandos para validar datos, algunos de ellos son los siguientes: isempty, isinteger, isnan, isnumeric. Creo que no es necesario mostrar cada uno de ellos ya que con el simple nombre del comando u función nos damos a la idea de cual es el funciona miento.

%Validacion de Datos  de entrada en Matlab
%ejemplo practico.
clear all
clc
while true %iniciamos bucle infinito
    num = input('Introdusca un numero entre 1 y 10:  ');
    if isempty(num)
        fprintf('No soportado' \n');
    elseif ~isnumeric(num)
        fprintf('%s No es un numero \n',num);
    elseif num ~= round(num)
        fprintf('No es un No Entero \n');
    elseif num&lt;1 || num&gt;10
        fprintf('%f No esta en el intervalo 1 a 10\n',num);
    else
        fprintf('introdujo un No, correcto Gracias!! %f\n',num);
        break; % condición Valida salimos del bucle infinito
    end
end

miércoles, 3 de octubre de 2012

input Avanzado en Matlab parte 1 - Valores por Defecto

Una buena practica de programación es la incorporación de valores por defecto ( Default values ), esto nos permite que la aplicación sea mas entendible para el usuario, aun que muchas veces eso no ve reflejado en una mejora o simplicidad del código a escribir.
La característica principal de un valor por defecto  es que siempre nos basemos en el Dato más común que nuestros usuarios mostraran o usaran.
 Acontinuacion un ejemplo Sencillo.
clear all
clc
reply = input('Es mayor de Edad? Y/N [Y]: ', 's');
if isempty(reply)
    reply = 'Y';  % por default yes [Y]
end


reply = upper(reply); % Transformamos a mayusculas

if reply(1) == 'Y'  % verificamos 
    fprintf('Es Mayor de Edad Felicidades .\n');
else
    fprintf('No es Mayor de edad le Falta Crecer.\n');
end

Una gran ventaja de considerar que la repuesta puede ser introducida mediante mayusculas o minusculas la cubrimos con el comando upper.

posteriormente publicaremos la forma de validar datos en un input.

sábado, 4 de agosto de 2012

Problema de Recursión (Los Conejos de Fibonacci)

Ya estamos de Regreso después de unas merecidas Vacaciones. Así  que empezamos a publicar nuevamente.
Alguien compra una pareja de conejos(un macho y una hembra), luego de un mes de haber hecho la compra esos conejos son adultos, después de dos meses de haber hecho la compra esa pareja de conejos da a luz a otra pareja de conejos(un macho y una hembra), al tercer mes, la primera pareja de conejos da a luz a otra pareja de conejos y al mismo tiempo, sus primeros hijos se vuelven adultos.Cada mes que pasa, cada pareja de conejos adultos da a luz a una nueva pareja de conejos, y una pareja de conejos tarda un mes en crecer. Escribe una función que regrese cuántos conejos adultos se tienen pasados n meses de la compra.

Solución Sea F(x) el número de parejas de conejos adultos pasados x meses. Podemos ver claramente que pasados 0 meses hay 0 parejas adultas y pasado un mes hay una sola pareja adulta. Es decir F(0) = 0 y F(1) = 1. Ahora, suponiendo que para alguna x ya sabemos F(0), F(1), F(2), F(3),
:::, F(x -1), en base a eso ¾cómo podemos saber el valor de F(x)? Si en un mes se tienen a parejas jóvenes y b parejas adultas, al siguiente mes se tendrán a + b parejas adultas y b parejas jóvenes. Por lo tanto, el número de conejos adultos en un mes n, es el número de conejos adultos en el mes n-1 más el número de conejos jóvenes en el mes n-1.Como el número de conejos jóvenes en el mes n-1 es el número de conejos adultos en el mes n-2, entonces podemos concluir que:
F(0) = 0
F(1) = 1
F(n) = F(n - 1) + F(n -2) 
El siguiente código en C muestra una implementación de una función recursiva para resolver el problema planteado por Fibonacci:

int F( int n) {
   i f (n==0){
          return 0 ;
               } el se i f (n==1)
 {
            return 1 ;
     }
        el se {
     return F(n-1)+F(n-2) ;
  
  }

        } 
Si corres el código anterior en una computadora, te darás cuenta que el tamaño de los números crece muy rápido y con números como 39 o 40 se tarda mucho tiempo en responder, mientras que con el número 50 parece nunca terminar.
Hemos resuelto de manera teórica el problema de los conejos de Fibonacci,sin embargo esta solución es irrazonablemente lenta.
Como curiosidad matemática, posiblemente alguna vez leas u oigas hablar sobre la sucesión de Fibonacci, cuando suceda, ten presente que la sucesión de Fibonacci es
F(0); F(1); F(2); F(3); F(4); F(5); :::
O escrita de otra manera:
0; 1; 1; 2; 3; 5; 8; 13; 21; 34; 55; :::
Además de servir como solución a este problema, la serie de Fibonacci cumple también con muchas propiedades interesantes que pueden servir para resolver o plantear otros problemas.