Mostrando las entradas con la etiqueta Básico. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Básico. Mostrar todas las entradas

martes, 12 de agosto de 2014

Sentencia continue en MATLAB


La sentencia continue es útil para controlar las ejecuciones dentro de un bucle, permite ignorar cualquier instrucción posterior al llamado de esta y continuar con el siguiente ciclo. Por ejemplo, véase el siguiente código:

for i=1:5
    disp(i);
    continue;
    disp(i^2);
end

Si ejecutamos lo anterior MATLAB imprimirá en pantalla los valores del 1 al 5, pero no llegará a "imprimir" los valores resultantes de elevarlos al cuadrado. Se preguntará el lector, esto para qué me sirve si pude no escribir las instrucciones posteriores o bien comentarlas para evitar su ejecución, y toda la razón tendrá, pero, ahora veamos un ejemplo más significativo y en el cual puede resultar más interesante la utilidad de continue:

for i=1:5
    ifrem(i,2)==0
        continue;
    end
    disp(i);
end

Revisemos lo anterior: al "correr" el script MATLAB nos devolverá en pantalla todos los números impares en el intervalo de ejecución, dado que si se cumple la condición de que el residuo de la división entera $i/2$ es nulo entonces ignorará la instrucción disp que se encuentra enseguida y pasará a ejecutarse la siguiente iteración.

La referencia "online" que proporciona MathWorks muestra un ejemplo del conteo de líneas de un archivo de texto, en el cual la sentencia continue se utiliza para evitar adicionar aquellas líneas en blanco. Puede ver el ejemplo en el siguiente link:

Sentencia continue

miércoles, 28 de mayo de 2014

Números primos en MATLAB


Un número primo es un entero mayor a uno que únicamente tiene dos divisores: la unidad y el número mismo. A excepción del 2, el resto de número primos son impares.

MATLAB dispone de la función nativa isprime para determinar si un número es primo, devolviendo un valor lógico verdadero en caso de serlo y falso en caso contrario. Por ejemplo:

>> isprime(11)

ans =

     1

Ahora, la idea es crear por nosotros mismos un algoritmo sencillo que determine si un número es primo. Para ello optaremos por hacer lo siguiente: sea $n$ el número a verificar, entonces crearemos un vector cuyos términos sean todos los enteros positivos en el intervalo $[1,n]$, enseguida mediante una sentencia de control if verificar mediante la función rem si cada uno de los componentes del vector es divisor de $n$, recuerde que rem devuelve un cero si el segundo argumento es divisor del primero y un número mayor a cero si no lo es. Véase el código resultante de lo que se ha descrito:

n=input('Introduzca un número: ');
L=1:n;
ifnnz(rem(n,L)==0)==2
    disp('Número primo');
else
    disp('Número no primo');
end


viernes, 28 de marzo de 2014

Gráficas en tres dimensiones en MATLAB (Superficies, Curvas en el espacio, Planos)


Superficies

Utilizando matrices

Una manera de graficar superficies es utilizar matrices y representarlas mediante funciones disponibles en MATLAB. Para ello debe definirse previamente una malla bidimensional utilizando el comando meshgrid, cuyos argumentos son los intervalos de las variables independientes, por ejemplo suponga que quiere graficarse la siguiente función:

$$f(x,y)=x^2+y^2$$

[X,Y]=meshgrid(-5:0.1:5);
Z=X.^2+Y.^2;
surf(X,Y,Z);


De forma simbólica

Otra forma de obtener el mismo resultado que el caso anterior, es proceder de manera simbólica. Una de las funciones que permite esto es ezsurf, cuya forma es la siguiente:

ezsurf('x^2+y^2',[-5 5]);


Como puede observarse, se necesitan menos líneas de código bajo este método.


Curvas en el espacio

Para graficar curvas en el espacio se dispone del comando plot3, cuyos argumentos son las ecuaciones paramétricas de la curva, tómese como ejemplo la siguiente curva (helice circular):

$$ x(t)=cos(t) \,\,\,\,\,\,\,\,\, y(t)=sin(t)  \,\,\,\,\,\,\,\,\, z(t)=t $$

t=linspace(0,10*pi,200);
x=cos(t);
y=sin(t);
z=t;
plot3(x,y,z,'linewidth',2);

Puede utilizar la forma simbólica para obtener un resultado similar al anterior con el comando ezplot3, tal como sigue:

ezplot3('cos(t)','sin(t)','t',[0 10*pi]);


Planos

El siguiente ejemplo muestra como graficar un plano $z=constante$, para ello se utiliza el comando fill3.

hold on
ezsurf('x^2+y^2',[-5 5]);
k=20;
A=[-5 -5 k];
B=[-5 5 k];
C=[5 5 k];
D=[5 -5 k];
X=[A(1) B(1) C(1) D(1)];
Y=[A(2) B(2) C(2) D(2)];
Z=[A(3) B(3) C(3) D(3)];
fill3(X,Y,Z,[0.7 0.7 0.7]);
view(3);




















jueves, 16 de enero de 2014

Contar archivos con una misma extensión


La función dir  sin argumentos de entrada permite obtener los archivos y carpetas contenidos dentro del directorio actual, organizados en una estructura con los siguientes campos:

  • name
  • date
  • bytes
  • isdir
  • datenum
La dimensión de la estructura depende del número de elementos.

Para buscar un tipo de archivo específico habrá de introducirse como argumento la extensión, tal como se muestra enseguida:

>> A=dir('*.txt');

La instrucción anterior busca todos los elementos con extensión txt (texto sin formato) ubicados en la carpeta actual. Si requiere saber cuántos archivos de ese tipo existen bastará con utilizar el comando length para obtener el número de elementos que componen la estructura.



sábado, 23 de noviembre de 2013

Ordenar Palabras Alfabéticamente


El siguiente "script" permite ordenar palabras introducidas por el usuario de manera alfabética.

clear all;clc;
N=input('Número de Palabras: ');
for i=1:N
    M{i}=input(sprintf('Palabra %s: ',num2str(i)),'s');
end
MS=sort(M);
fprintf('\n*** Palabras ordenadas alfabéticamente ***\n');
for i=1:N
    fprintf('%s. %s\n',num2str(i),MS{i});
end

sábado, 12 de octubre de 2013

Gráficas de funciones paramétricas en 2D


Para graficar una función dadas sus ecuaciones paramétricas simplemente necesitamos crear un vector que definirá al parámetro “t”, para ello podemos usar el comando “linspace” y crear un vector equiespaciado en un rango definido, y posteriormente graficar ambas ecuaciones paramétricas con la instrucción “plot”, el siguiente ejemplo muestra cómo graficar una circunferencia dadas sus ecuaciones paramétricas:


clear all;clc;
t=linspace(0,2*pi,100); % Definimos el vector del parámetro
x=cos(t); % Ecuación paramétrica
y=sin(t); % Ecuación paramétrica
plot(x,y),axis equal; % Instrucción de graficar y mostrar los ejes en proporción 1:1



Gráficas en coordenadas polares


Para trazar la gráfica de una función en coordenadas polares utilizaremos el comando “polar”, el cual necesita cómo argumentos el vector “theta”  y el vector “r” que define la función en coordenadas polares. A continuación se muestra el ejemplo de una espiral:


clear all;clc;
theta=linspace(0,10*pi,1000); % Vector theta
r=theta; % Función en coordenadas polares (espiral)
polar(theta,r,'r'); % Instrucción de graficar



Número de argumentos de entrada y salida de una función (nargin & nargout)


Una función definida en MATLAB tiene la siguiente estructura general:
function [x1, x2,.., xn]= nombrefuncion(a1,a2,…,an)
donde x1, x2,…,xn, son las variables de salida de la función y a1,a2,…,an, son los argumentos de entrada de la función.
En MATLAB las funciones pueden soportar un procedimiento específico acorde al número de argumentos que reciba o bien devolver uno o más valores según sean requeridos por el usuario.
Para ello se hace uso de las palabras reservadas nargin (número de argumentos de entrada) y nargout (número de variables de salida). Las cuales pueden ser utilizadas en una función para realizar un proceso determinado para un número de entradas o salidas definidas.
A continuación se muestra una función muy simple a modo de ejemplo:

function[suma,resta]=mifuncion(n1,n2)
if nargin~=2
    error('Número de argumentos de entrada no válidos');
end
if nargout==1
    suma=n1+n2;
end
if nargout==2
    suma=n1+n2;
    resta=n1-n2;
end
end


En el ejemplo anterior, utilizamos nargout para verificar cuantas variables de salida se están “solicitando” y con ello proporcionar una salida adecuada. De igual manera se utiliza nargin para garantizar que el número de argumentos de entrada sean los correctos, es decir, no diferente de dos para este caso.

viernes, 20 de septiembre de 2013

Factorial de un número


MATLAB dispone de una función propia para calcular el factorial de un número, la cual es nombrada propiamente como factorial.

Ahora veremos dos maneras de cómo implementar nuestra propia función que calcule el factorial de un número entero dado.

function x=ffactorial(N)
if N<0
    error('Ingrese un entero positivo');
end
k=1;
x=1;
while k<=N
    x=k*x;
    k=k+1;
end
end


function x = mifact(N)
if N<0
    error('Ingrese un entero positivo');
end
if N==0
    x=1;
else
    x=N*mifact(N-1);
end
end

Cómo puede observarse la forma de proceder es un tanto diferente. La segunda función implica la aplicación de un concepto básico y muy útil en  programación, la recursividad, que implica un llamado a la función misma dentro del cuerpo de ésta.

domingo, 26 de mayo de 2013