Vous êtes sur la page 1sur 26

CAPTULO 0 MATLAB

Clase 2 Seguimos acolitando la vagancia! 2014

Funciones
Las funciones se ven exactamente como scripts, pero con

una diferencia, tienen una declaracin de funcin

Funciones definidas por el usuario


Forma:

function[x, y, z]=nombre(in1, in2)


Se debe empezar con la palabra function
Si hay mas de un argumento se colocan entre corchetes El nombre de la funcin debe coincidir con el nombre del

archivo Se deben especificar las variables de entrada de la funcin entre parentesis

Caractersticas de las funciones


Hay varias formas de invocar una funcin: D = SIZE(X) [M,N] = SIZE(X) [M1,M2,M3,...,MN] = SIZE(X) M = SIZE(X,DIM)
Las funciones de Matlab pueden; Recibir un numero variable de entradas Retornar un numero variable de salidas

Ejercicio:
Escriba una funcin que contenga la siguiente

declaracin:
function plotSin(f1)

En la funcin grafique una funcin seno con frecuencia f1,

en el rango [0, 2]: sin(f1x)


Para tener una buena resolucin, use 16 puntos por

periodo
function plotSin(f1) x=linspace(0,2*pi,f1*16+1); figure plot(x,sin(f1*x))

Operadores de relacin
Estndar: Igual: == Diferente: ~= Mayor que: > Menor que: < Mayor o igual: >= Menor o igual: <= Lgicos: Y: & O: | Not: ~ Xor: xor Todos verdaderos: all Algunos verdaderos: any

Valores Boleanos: cero es falso, no cero es

verdadero

If / else / elseif
Comandos bsicos de control de flujo, comunes a todos

los lenguajes de programacin La sintaxis en Matlab es especial No hay necesidad de parntesis


IF if condicion commando end ELSE if condicion commando1 else commando2 ELSEIF if condicion 1 command01 elseif condicion 2 commando2 else command03 end

end

for
Se usa para toda clase de iteraciones
Sintaxis
for n=1:100 commandos end

Componentes: Variable de ciclo:


Se define como un vector En los comandos es un escalar No es necesario que tenga valores consecutivos (pero es mas claro si

lo son)
Comandos:
Todo lo que este entre la lnea del for y el end

while
Es un iterador mas general No se necesita especificar el nmero de iteraciones
Sintaxis:
WHILE while condicion commando end

Los comandos se ejecutan mientras la condicin sea

verdadera Cuidado con los bucles infinitos

Ejercicio
Modificar la funcin plotSin(f1) para que tenga dos

entradas: plotSin(f1,f2) Si el nmero de argumentos de entrada es 1, ejecute el comando plot que escribi antes. De otra forma, muestre la lnea Hay don argumentos de entrada Pista: El nmero de argumentos se encuentran en funcion de maquina nargin

Graficando con lneas


Se puede dar estilo a las lneas y cambiar el estilo de los

marcadores aadiendo una cadena de argumentos plot(x,y,k.-)


K es el color . es el marcador - es el estilo de lnea

Se puede graficar sin conectar los puntos omitiendo el

argumento de estilo de linea: plot(x,y,.)

La ventana de grficos

Graficas cartesianas
Ya conocemos la sintaxis: x=-pi:pi/100:pi; y=cos(4*x).*sin(10*x).*exp(-abs(x)); plot(x,y,'k-');
Se aplica la misma para grficas logartmicas y

semilogartmicas:

semilogx(x,y,'k'); semilogy(y,'r.-'); loglog(x,y);

Por ejemplo:

x=0:100; semilogy(x,exp(x),'k.-');

Graficas de lneas en 3D
Son igual de simples que en 2D: time=0:0.001:4*pi; x=sin(time); y=cos(time); z=time; plot3(x,y,z,'k','LineWidth',2); zlabel('Time');
La figura se puede rotar Se puede colocar cotas a los ejes xlim, ylim, zlim

Opciones de los ejes


axis square: hace que los ejes formen una caja
axis tight: fija los ejes a un conjunto de datos axis equal: hace que los ejes tengan la misma escala

axis xy: coloca el origen de los ejes en la esquina inferior

izquierda (por defecto para graficas)


axis ij: coloca el origen de los ejes en la esquina superior

izquierda (por defecto para imgenes y matices)

Varios grficos en una figura


Para tener varios ejes en una figura subplot(2,3,1)
Crea una figura con 2 filas y 3 columnas de ejes, y activa los primeros

ejes para graficar cada conjunto de ejes puede tener etiquetas, letreros y ttulos
subplot(2,3:6)
Activar un rango de ejes los fusiona en uno

Para cerrar figuras; close([1 3])


Cierra las figuras 1 y 3

close all
Las cierra todas

Ejercicio
Modificar el comando plot en la funcin plotSin para usar

marcadores cuadrados negos y una lnea discontinua roja de grosor 2.

Visualizando matrices
Una matriz puede visualizarse como una imagen
mat=reshape(1:10000,100,100); imagesc(mat); colorbar

imagesc escala los valores automticamente para

abarcar todo el mapa de colores

Mapas de colores
Se pueden cambiar los mapas de colores
imagesc(mat) colormap(gray) colormap(cool) colormap(hot(256))

Por defecto es jet

Se pueden crear personalizados


map=zeros(256,3); map(:,2)=(0:255)/255; colormap(map);

Graficas de superficies
Es mas cmodo visualizar superficies en 3D
Ejemplo:

surf coloca puntos en lugares especificos en el espacio

(x,y,z) y los conecta para formar una superficie

surf
Creamos los vectores x y y
x=-pi:0.1:pi; y=-pi:0.1:pi;

Se usa meshgrid para crear las matrices [X,Y]=meshgrid(x,y);


Se aplica la funcin a la matriz para obtener los valores
>>

z=sin(X).*cos(Y);

Se grafica la superficie surf(X,Y,Z) surf(x,y,Z);

contour
Se usa para crear superficies de contornos

bidimensionales
contour(X,Y,Z,'LineWidth',2) hold on mesh(X,Y,Z)

Ejercicio
Modifique plotSin para que haga lo siguiente:
Si se dan dos entradas, evaluar la siguiente funcin:

y debe ser como x, pero usando f2 (use meshgrid para

crear las matrices x y y) Muestre la grafica de la matriz usando un mapa de color hot Grafique la representacin tridimensional de la matriz y mustrela en 3 posiciones diferentes

Vectorizacin (find)
find es una funcin muy especial: Retorna ndices de valores diferentes a cero Puede simplificar el cdigo y evita usar bucles Sintaxis bsica: index=find(condicion) >>x=rand(1,100); >>inds=find(x>0.4 & x<0.6); inds contendr los indices en los que los valores de x estn

entre 0.4 y 0.6, esto es lo que sucede:


x>0.4 genera un vector donde 1 es verdadero y 0 es falso x<0.6 genera un vector similar La & combina los dos vectores Find retorna los ndices donde hay 1

Evitando bucles
Dado x= sin(linspace(0,10*pi,100)), cuantas entradas son

positivas?
if/else count=0;

for n=1:length(x)
if x(n)>0 count=count+1;

Siendo vivos! count=length(find(x>0));

end
end

Vous aimerez peut-être aussi