martes, 28 de febrero de 2012

Método de Punto Fijo en Matlab

clear all; 
 clc;  
  fprintf('\nCalculo de la raizde una ecuacion por el metodo del Punto Fijo\n\n'); 
   f=input('Dame la funcion f(x):','s'); 
     xi=input('Dame el valor inicial de x : '); 
       e=input('Dame el porciento del error : '); 
     ea=1000; 
   c=1; 
 x=xi; 
  while ea>e 
    g=eval(f); 
      ea=abs((g-x)/g*100); 
     x=g; 
   c=c+1; 
  end 
 fprintf('\n\n\n\nLa raiz exacta es: %d',g) 
    fprintf('\n\nNumero de iteraciones: %d',c);

domingo, 26 de febrero de 2012

Metodo de Simpson 1/3 en matlab

clear all;
 clc;
    fprintf('Calculo de la integral por el metodo de Simpson de 1/3\n\n');
     f=input('introduce la funcion:','s');
       a=input('lime inferior:');
     b=input('limite superior:');
   c=input('numero de segmentos a dividir (numero par):');
  h=(b-a)/c;
 z=0;
x=a;
for i=1:c;
if (-1)^i==1

k=eval(f);

z=z+k;

end

x=h*i;
end
 zz=0;
x=a;
for i=2:c;
 if (-1)^i==-1
   k=eval(f);
  zz=zz+k;
 end
x=h*i;
end
  x=a;
  if x==a
    d=eval(f);
  end
 x=b;
   if x==b
     e=eval(f);
   end
     z=z*4;
       v=zz*2;
        z=z+v+d+e;
      z=z/(3*c);
  z=z*(b-a)
fprintf('Resultado ');

viernes, 24 de febrero de 2012

Interpolacion Polinomial Simple en matlab

clear  all; 
    clc;
      fprintf('Interpolacion con el Metodo de Aproximacion Polinomial Simple\n\n'); 
   n=input('Numero de puntos que se tienen: ');

for i=1:n 
    x(1,i)=input('dame los valores de xi:'); 
end

for i=1:n 
    xi(1,i)=input('dame los valores de f(xi):'); 
end
%imprimiendo los Valores x, xi
x 
xi 
xint=input('Numero para el que desea interpolar x: '); 
%determinando los parametros a0,1,2
i=1; 
while i<=n 
    a(i,1)=1; 
    j=2;

    while j<=n 
        a(i,j)=a(i,j-1)*x(1,i); 
        j=j+1; 
    end 
    a(i,n+1)=xi(1,i); 
    i=i+1; 
end 
%Resolviendo mediante el metodo de Gauss-jordan
c=n+1; 
f=n; 
for k=1:c-1 
    a(k,:)=a(k,:)/a(k,k); 
    for j=k+1:f 
        a(j,:)=a(j,:)-a(k,:)*a(j,k); 
        j=j+1; 
    end 
    k=k+1; 
end
for k=f:-1:2 
    for j=k-1:-1:1 
        a(j,:)=a(j,:)-a(k,:)*a(j,k); 
        j=j-1; 
    end 
    k=k-1; 
end
r=0; 
for m=1:n-1 
    r=r+(a(m+1,n+1))*xint^m; 
end
  r=r+a(1,n+1); 
   fprintf('\n\nresultado xi: %d\n',r);
%Graficando Resultados
    plot(x,xi) 
  grid 
xlabel('x');ylabel('y')

Detección de Rostro en matlab

vid = videoinput('winvideo',1,'YUY2_640x480');
 set(vid, 'FramesPerTrigger', Inf);
  set(vid, 'ReturnedColorspace', 'rgb')
    vid.FrameGrabInterval = 5;
     start(vid)
while(vid.FramesAcquired<=100)
   data = getsnapshot(vid);
     diff_im = imsubtract(data(:,:,1), rgb2gray(data));  
           diff_im = medfilt2(diff_im, [3 3]);
        diff_im = imadju  st(diff_im);
     level = graythresh(diff_im);
   bw = im2bw(diff_im,level);
 BW5 = imfill(bw,'holes');
bw6 = bwlabel(BW5, 8);
 stats = regionprops(bw6,['basic']);
   [N,M]=size(stats);
if (bw==0)
        break;
else
     tmp = stats(1);
for i = 2 : N
      if stats(i).Area > tmp.Area
        tmp = stats(i);
      end
end
  bb = tmp.BoundingBox;
   bc = tmp.Centroid;
    imshow(data)
     hold on
   rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
 hold off
end
end
 stop(vid);
  flushdata(vid);

martes, 21 de febrero de 2012

Método de la Secante en Matlab (Version 2 )

%USANDO EL COMANDO eval() lo cual evita que se vectorize demasiado el código

clear all;
  clc;
   fprintf('\nCalculo de la raiz de una ecuacion por el metodo de la Secante\n\n');
    f=input('Dame la funcion f(x) : ','s');
      x0=input('Dame el valor del intervalo inferior de x : ');
    x1=input('Dame el valor del intervalo superior de x : ');
  e=input('Dame el porciento del error : ');
 ea=1000;
c=1;  
   while ea>e
    x=x0;
    g=eval(f);
      x=x1;
        gg=eval(f);
          xi=x1-((gg*(x0-x1))/(g-gg));
            ea=abs((xi-x1)/xi)*100;
          x0=x1;
        x1=xi;
      c=c+1;
   end
fprintf('\n\n\n\nLa raiz exacta es: %d',xi)
fprintf('\n\nNumero de iteraciones: %d\n',c);                                                                                                                    

domingo, 19 de febrero de 2012

Regresión Lineal en Matlab

clear all; 
 clc;
  fprintf('Metodo de Regresion Lineal \n\n'); 
  n=input('Numero de puntos: ');

   for i=1:n 
      x(1,i)=input('dame los valores de x: '); 
   end

      for i=1:n 
        y(1,i)=input('dame los valores de y: '); 
     end
% se nota extraño pero asi se mostraran los resultados
%en forma de Vector. 
 x 
   y 
 
    plot(x,y) 
      grid 
        xlabel('x');ylabel('y') 
          pause
         a=0; 
       for i=1:n 
     a=a+x(1,i)*y(1,i); 
       end

 b=0; 
for i=1:n 
    b=b+x(1,i)*x(1,i); 
end

  c=0; 
  for i=1:n 
      c=c+x(1,i); 
  end

       e=0; 
for i=1:n 
    e=e+y(1,i); 
end

d=0; 
   d=c/n; 
     f=0; 
       f=e/n; 
         a1=(n*a-c*e)/(n*b-c*c); 
       a0=f-a1*d;
     clc; 
  fprintf('Ecuacion con la que se encuentran los nuevos valores de y \n\n'); 
fprintf(' y = %d + %d x',a0,a1);

for i=1:n 
    y(1,i)=a0+a1*x(1,i); 
end
    fprintf('\n\nPresiona enter para ver la nueva grafica\n\n'); 
      pause
        %Grafica con los Datos Ajustados
      plot(x,y) 
    grid 
  xlabel('x');ylabel('y') 
pause

Método de la Regla Falsa en Matlab

xai=input('Ingrese limite inferior: ');
 xbi=input('Ingrese limite superior: ');
  tol=input('Ingrese el porcentaje de Error: ');
   syms x;
    f=input('Ingrese la Funcion: ');
     f1=subs(f,x,xai);
   f2=subs(f,x,xbi);
  i=1;
 ea(1)=100;
if f1*f2 < 0
    xa(1)=xai;f1=subs(f,x,xa(1));
     xb(1)=xbi;f2=subs(f,x,xb(1));
     xr(1)=xa(1)-f1*(xb(1)-xa(1))/(f2-f1); f3=subs(f,x,xr(1));
      fprintf('It.              Xa           Xr            Xb            Error aprox \n');
     fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \n',i,xa(i),xr(i),xb(i));
    while abs(ea(i))>=tol,
      if f1*f3 < 0
         xa(i+1)=xa(i);f1=subs(f,x,xa(i+1));
           xb(i+1)=xr(i);f2=subs(f,x,xb(i+1));
      end
      if f1*f3> 0
          xa(1)=xr(i);
         xb(1)=xb(i);
      end
        xr(i+1)=xa(i+1)-f1*(xb(i+1)-xa(i+1))/(f2-f1);
         ea(i+1)=abs((xr(i+1)-xr(i))/(xr(i+1)))*100;
         fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f \n',...
              i+1,xa(i+1),xr(i+1),xb(i+1),ea(i+1));
      i=i+1;
   end
else
    fprintf('No existe una raíz en ese intervalo');
end

domingo, 12 de febrero de 2012

Método de Newton Raphson Modificado en Matlab

clear;
clc; 
 fprintf('\n metodo de Newton Rapson Modificado\n\n');
   funcion=input('Dame la funcion f(x) : ','s');
   dfuncion=input('Dame la derivada de funcion f(x) : ','s');
     d2funcion=input('Dame la segunda derivada de funcion f(x) : ','s');
        xi=input('Dame el valor inicial de x : ');
     e=input('Dame el porciento del error : ');
   ea=1000;
  c=1;
 x=xi;
while ea>e 
 g=eval(funcion);
  h=eval(dfuncion);
   k=eval(d2funcion);
     j=x-(g*h)/(h^(2)-(g*k));
   ea=abs((j-x)/j*100);
  x=j;
 c=c+1;
end
 fprintf('\n\n\n\nLa raiz exacta es: %d',j)
  fprintf('\n\nNumero de iteraciones: %d',c);

jueves, 9 de febrero de 2012

Flowmaster V7


Hace unos días fui invitado a un curso básico de Flowmaster V7.
¿Pero que es flowmaster?

Es una herramienta de software especializada en la simulación de termo-fluidos, que permite a los ingenieros, investigar aumentos en la presión, la caída de presión, caudal, temperatura y tiempos de respuesta del sistema - la eliminación de la incertidumbre de los sistemas de flujo de fluidos.

¿Qué nos permite Realizar?

  • Determinar donde realizar mejoras en la tubería.
  • Manejar de forma eficiente las interrupciones en el suministro.
  • Reducir el consumo de combustible en periodos de baja demanda
  • Maximizar el uso de la capacidad de los gasoductos.

 
Todo gracias a la tecnología de simulación con la que cuenta el software. 

Así que pongo a su disposición la pagina web del proyecto. http://www.flowmaster.com/index.html
Y conforme yo vaya avanzando con el software iré publicando al respecto.

Ordenamiento de números por el método Burbuja.

def ordenamientoBurbuja(lista,tam):
    for i in range(1,tam):
        for j in range(0,tam-i):
            if(lista[j] > lista[j+1]):
                k = lista[j+1]
                lista[j+1] = lista[j]
                lista[j] = k;

def imprimeLista(lista,tam):
    for i in range(0,tam):
        print lista[i]

def leeLista():
    lista=[]
    cn=int(raw_input("Cantidad de numeros a ingresar: "))

    for i in range(0,cn):
        lista.append(int(raw_input("Ingrese numero %d : " % i)))
    return lista

A=leeLista()
ordenamientoBurbuja(A,len(A))
imprimeLista(A,len(A))

Método de Newton Raphson en Scilab

function y=f(x)
y=exp(-x)-log(x);
endfunction

function y=df(x)
y=-exp(-x)-1/x;
endfunction

function x=newtonraphson(x0,tol);
i=1;
ea(1)=100;
x(1)=x0;
while abs(ea(i))>=tol;
    x(i+1)=x(i)-f(x(i))/df(x(i));
    ea(i+1)=abs((x(i+1)-x(i))/x(i+1)*100);
    i=i+1;
end
printf(' i  \t      X(i)      Error aprox (i) \n');
for j=1:i;
    printf('%2d \t %11.7f \t %7.3f \n',j-1,x(j),ea(j));
end
endfunction

Método de la Secante en Matlab

fx(1)=input('Ingrese el intervalo inferior: ');
fx(2)=input('Ingrese el intervalo superior: ');
tol=input('Ingrese el porcentaje de error: ');
syms x;
f=input('Ingrese la funciòn: ');

f1=subs(f,x,fx(1));
f2=subs(f,x,fx(2));

ea(1)=100;

i=1;
j=2;

while abs(ea(i))>=tol
   xf(j+1)=(xf(j-1)*f2-xf(j)*f1)/(f2-f1);  f1=f2; f2=subs(f,x,xf(j+1));
   ea(i+1)=(xf(j+1)-xf(j))/xf(j+1)*100;
   j=j+1;
   i=i+1;     
end

fprintf(' i     xf(i)         Error aprox (i) \n');
%fprintf('%2d\t%11.7f\t\n',0,x(1));
for k=2:j;
    fprintf('%2d\t%11.7f\t%7.3f\n',k-1,xf(k),ea(k-1));
end

miércoles, 8 de febrero de 2012

Método de la Bisección en Matlab

xai=input('Ingrese el intervalo inferior: ');
xbi=input('Ingrese el intervalo superior: ');
tol=input('Ingrese el porcentaje de error: ');
syms x;
f=input('Ingrese la funciòn: ');
i=1;

f1=subs(f,x,xai);
f2=subs(f,x,xbi);

ea(i)=100;
if f1*f2 < 0
    xa(i)=xai; f1=subs(f,x,xa(i));
    xb(i)=xbi; f2=subs(f,x,xb(i));
    xr(i)=(xa(i)+xb(i))/2; f3=subs(f,x,xr(i));
    
    fprintf('It.       Xa               Xr             Xb           Error aprox \n');
    fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \n',i,xa(i),xr(i),xb(i));
    while abs(ea(i)) >= tol,
      if f1*f3<0
         xa(i+1)=xa(i);f1=subs(f,x,xa(i+1));
         xb(i+1)=xr(i);f2=subs(f,x,xb(i+1));
      end
      if f1*f3> 0
         xa(i+1)=xr(i);f1=subs(f,x,xa(i+1));
         xb(i+1)=xb(i);f2=subs(f,x,xb(i+1));
      end      
      xr(i+1)=(xa(i+1)+xb(i+1))/2; f3=subs(f,x,xr(i+1));
      ea(i+1)=abs((xr(i+1)-xr(i))/(xr(i+1))*100);
      fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f \n',...
              i+1,xa(i+1),xr(i+1),xb(i+1),ea(i+1));
      i=i+1;
   end
else
   fprintf('No existe una raíz en ese intervalo');
end

Método de Newton Raphson en Matlab

x0=input('Ingrese el valor inicial: ');
tol=input('Ingrese el porcentaje de error: ');
f=input('Ingrese la función: ');
i=1;
fx(i)=x0;

syms x;
f1=subs(f,x,fx(i));
z=diff(f);
d=subs(z,x,fx(i));

ea(1)=100;

while abs(ea(i))>=tol;
    fx(i+1)=fx(i)-f1/d; f1=subs(f,x,fx(i+1)); d=subs(z,x,fx(i+1));
    ea(i+1)=abs((fx(i+1)-fx(i))/fx(i+1)*100);
    i=i+1;
end
fprintf('i     fx(i)         Error aprox (i) \n');
for j=1:i;
    fprintf('%2d \t %11.7f \t %7.3f \n',j-1,fx(j),ea(j));
end

domingo, 5 de febrero de 2012