desarrollo de ejercicios básicos en matlab

13
Desarrollo de ejercicios en MATLAB Algoritmos computacionales y programación Adalberto Cortés Ruiz Instructor: Dr. Eliseo Hernández Martínez

Upload: drperro

Post on 19-Aug-2015

183 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Desarrollo de ejercicios básicos en matlab

Desarrollo de ejercicios en MATLAB

Algoritmos computacionales y programación

Adalberto Cortés Ruiz

Instructor: Dr. Eliseo Hernández Martínez

Page 2: Desarrollo de ejercicios básicos en matlab

INTRODUCCIÓN

En el salón de clases se indagó acerca del uso de MATLAB1, un software especializado para

la resolución de problemas matemáticos de toda clase. Se inició con las aplicaciones de

vectores y la forma en la que estos deben escribirse para poder realizar operaciones

aritméticas básicas y de igual manera con la creación y operación de matrices.

El modo de operar de MATLAB permite guardar los trabajos realizados a través de un

archivo (.m) por medio de un script, (archivo de órdenes o archivo de procesamiento por

lotes), los cuales se pueden ejecutar introduciendo en el área o ventana de comandos

(command window).

Las gráficas son de gran utilidad para la comprensión de funciones que describen algún

fenómeno o situación en especial si la función expresa tres variables distintas, por lo cual

es importante saber crear y manejar graficas de dos y tres dimensiones. Si MATLAB tiene

algo de especial es que puede realizar gráficas en tercera dimensión con la misma facilidad

para realizar una de dos dimensiones. Además ofrece distintas funciones especiales que

muestran distinta apariencia de los datos.

A continuación se muestran dos problemas de aplicación relacionados con la creación de

matrices y vectores, operaciones aritméticas y gráficas que ponen en práctica los

conocimientos adquiridos.

Primer ejercicio

Generar una matriz de números aleatorios (12,20) en la que 12 son los

meses en los que se registró la temperatura durante 20 años.

- Graficar temperatura vs. tiempo (años).

Segundo ejercicio

Generar una función que contengo funciones trigonométricas y

exponenciales. Sea del tipo z=f(x,y).

-curvas de nivel para 5 valores de x,y.

-Realizar gráficas.

1El acrónimo de MATLAB proviene de las palabras en inglés: Matrix Laboratoy.

MATLAB fue desarrollado por MathWorks

Page 3: Desarrollo de ejercicios básicos en matlab

METODOLOGÍA

Inicio de un script2

Una vez abierto el programa, en la barra de herramientas se pueden visualizar las

pestañas de Home, Plots y Apps.

Seleccionamos Home y allí se pueden visualizar distintos botones y se selecciona en botón

New Script como se muestra en la figura 1.

Figura 1. Inicio de un script.

En un script de MATLAB se debe agregar siempre al inicio los siguientes comandos con la

finalidad de evitar posibles errores con las variables, ya que MATLAB podría cambiar el

valor de las variables creadas en el script.

clear all (borra todas las variables creadas)

close all (cierra las ventanas que se encuentran)

home (corre toda el área de comandos)

Con el signo de porcentaje % se puede agregar comentarios y si se le añade una llave %{

gel comentario se extiende a varios renglones hasta ser cerrado con el mismo signo pero

con la llave opuesta %}como se muestra en la figura 2.

Figura 2. Comentario extendido.

2 Todos los procesos fueron desarrollados en la versión 8.3 R2014a de MATLAB.

Page 4: Desarrollo de ejercicios básicos en matlab

Primer ejercicio

1. Determinación de la matriz

Se genera una matriz de datos aleatorios en la que cada dato representa el registro de la

temperatura de un mes y se reconocen 20 años.

El comando rand genera una matriz de datos aleatorios entre cero y uno. En el problema,

la temperatura se estableció en grados Celsius (°C) con una mínima de 0°C y una máxima

de 40°C. Para la cual, se obtiene multiplicando el comando por cuarenta.

r=rand(12,20)*40

Se coloca una apostrofe para indicar la matriz transpuesta.

w=r'

2. Transformación de la matriz a vector Después se genera un vector a partir de los datos de la matriz. En la que cada fila equivale a un año de registro de temperaturas. q=[w(1,:) w(2,:) w(3,:) w(4,:) w(5,:) w(6,:) w(7,:) w(8,:) w(9,:)

w(10,:)]; q2=[w(11,:) w(12,:) w(13,:) w(14,:) w(15,:) w(16,:) w(17,:) w(18,:)

w(19,:) w(20,:)]; qt=[q q2];

Se genera el vector que determina el tiempo utilizando un intervalo de 1

12 (equivalente a

un mes) y se parte del primer mes hasta el año 20.

annos=1/12:1/12:20;

3. gráfica de los datos Se introduce el comando plot para realizar la gráfica de los datos asignando primero el vector de los años y después el de las temperaturas generando la figura 1.1. plot(annos,qt,'-*k'),xlabel('Años'),ylabel('Temperatura (°C)') title('Registro de la temperatura')

vector=matriz(fila,:)

Se utiliza ésta notación para extraer datos de una matriz.

Donde los : indican que se quiere extraer todo el conjunto de filas o columnas

Page 5: Desarrollo de ejercicios básicos en matlab

Figura 1.1. Registro de la temperatura

Para plot, es necesario que los

vectores tengan la misma

dimensión

El '-*k' agregado al final del comando modifica

la apariencia de la gráfica.

Esta será una línea solida de color negra con un

asterisco en cada puto (temperatura al final del

mes). El punto y coma ; hace que

MATLAB no imprima los

resultados de la operación

Se obtiene un total de 240 en

ambos vectores (qt y annos).

Page 6: Desarrollo de ejercicios básicos en matlab

Segundo ejercicio

1. Determinación de la función

Se genera un modelo que contenga funciones trigonométricas y exponenciales tal y como

lo plantea el problema. Además, debe contener dos variables distintas para que sea del

tipo 𝑧 = 𝑓(𝑥,𝑦).

𝑧 = 𝑓(𝑥,𝑦) =𝑒cos 𝑥 + sin 𝑦 + 𝑥2 + 𝑦2

𝑥2 + 𝑦2 + cos 𝑥 + sin𝑦

Se le deben asignar valores a x y y simultáneamente, para ello se utiliza la función

meshgrid, que genera una matriz de malla a partir de vectores y que tiene la siguiente

estructura:

vector=límite inferior:distribución:límite superior; [x,y]=meshgrid(vector);

El vector se generó a partir de valores de entrada (esto se hace con el comando input) de los límites inferior y superior y para la distribución se creó un valor h=(w-q)/e, en la que h es la distribución; w, el límite superior; q, el límite inferior y e representa el número de datos con los que se desea formar el vector. 2. La función escrita en MATLAB

La función se escribió por partes, en la que a=cos 𝑥 + sin𝑦 ; b= 𝑥2 + 𝑦2 y z=(𝑒𝑎 + 𝑏)/(𝑏 + 𝑎) Todo ello está expresado en lenguaje de MATLAB de la siguiente manera:

q=input('Número menor del intervalo:\n'); w=input('Número mayor del intervalo:\n'); e=input('Número de divisiones del intervalo:\n');

h=(w-q)/e; v=q:h:w; [x,y]=meshgrid(v); a=cos(x)+sin(y); b=sqrt(x.^2+y.^2); z=(exp(a)+b)./(b+a);

El signo \n indica que a la hora de

ser ejecutado el script escribirá

abajo del mensaje Ejemplo: Número menor del intervalo:

-20

El punto y coma ; hace que

MATLAB no imprima los

resultados de la operación

El punto . agregado a final de las

variables se usa para realizar

operaciones de componente a

componente, ya que los valores se

encuentran expresados como una

matriz malla

Page 7: Desarrollo de ejercicios básicos en matlab

Cundo se realiza una sola gráfica en MATLAB, por defecto se le asigna como figure(1). Pero en caso necesario de graficar más de una, es necesario agregar el número de la figura que ataña antes de la orden correspondiente a la gráfica. Una vez escrita la función nos cercioramos de que 𝑏 + 𝑎 ≠ 0 para cualquier valor de las variables x y y.3 A ser del tipo z=f(x,y) es necesario realizar una gráfica de tres dimensiones. MATLAB ofrece distintos comandos en los que se pueden realizar estas tareas:

mesh(x,y,z) Realiza una gráfica de tipo malla. surf(x,y,z) Realiza una gráfica de superficie.

pcolor(x,y,z) Realiza una gráfica en la que se muestran los niveles del eje z en colores. waterfall(x,y,z) Realiza una gráfica de líneas.

contour(x,y,z) Grafica el contorno.

Existen diversos variantes de estos comandos que sirven para dar un aspecto más detallado. Si agregamos una c al final de los comandos surf y mesh, se le añade a la gráfica el contorno de la función. En la figura 3 se muestra la aplicación del comando surfc.

Figura 2.1. Se agrega el contorno de la función a la gráfica.

3 En el caso de que así sea, se le puede agregar una adición al cociente de eps.

Page 8: Desarrollo de ejercicios básicos en matlab

3. Complementos

El comando hidden off se agrega para tener una visión translúcida de la función como se

puede observar en la figura 2.2.

Figura 2.2. Uso de hidden off.

Al agregar el comando colorbar, aparecerá una barra de colores a la derecha y para

especificar la escala de colores que se desea se utiliza el comando colormap y a

continuación escribimos la escala (ver figura 2.3). shading flat quita las líneas negras que

dividen cada área, mientras de shading interp hace que los colores de cada área se

entremezclen, obteniendo así una apariencia mas suave.

Los complementos de identificación de gráficas en MATLAB se pueden aagregar con los

siguientes comandos mostrados en la tabla 2:

xlabel('Ejex')

ylabel('Eje y') zlabel('Eje z')

Agregan una etiqueta al eje correspondiente

title('titulo')

Agrega titulo en la gráfica situado en la parte superior

legend('leyenda1’,

'leyenda2’,2)

Agrega una leyenda a la gráfica en la que se indican los valores para cada dato. Se escribe al final el número de datos.

Tabla 2. Complementos de identificación.

Page 9: Desarrollo de ejercicios básicos en matlab

Figura 2.3.

Escala de colores

En la figura 2.4 se muestra el uso de los complementos de etiqueta, titulo y algunos de

apariencia aplicados en la función.

figure(1) surfc(x,y,z),colorbar,shading interp,xlabel('Eje x'),ylabel('Eje

y'),zlabel('Eje z'),colormap(hsv); title('gráfica superficie');

Figura 2.4.

Gráfica de la función

en un intervalo de

-20:1:20

Page 10: Desarrollo de ejercicios básicos en matlab

El comando subplot se utiliza para unir más de una gráfica en una, como se muestra en la

figura 2.5 generada por la siguiente cadena:

figure(2) subplot(2,2,1),mesh(x,y,z),colorbar,hidden off,shading flat,xlabel('Eje

x'),ylabel('Eje y'),zlabel('Eje z'); title('gráfica malla'); subplot(2,2,2),surf(x,y,z),colorbar,shading flat,xlabel('Eje

x'),ylabel('Eje y'),zlabel('Eje z'); title('gráfica superficie'); subplot(2,2,3),pcolor(x,y,z),colorbar,shading flat,xlabel('Eje

x'),ylabel('Eje y'),zlabel('Eje z'),view(-30,40); title('gráfica plano de colores'); subplot(2,2,4),waterfall(x,y,z),colorbar,shading flat,xlabel('Eje

x'),ylabel('Eje y'),zlabel('Eje z'); title('gráfica cascada');

Figura 2.5. Mezcla de gráficas a partir de subplot.

El comando view utilizado en la gráfica de plano de colores hace que se altere la

posición de acuerdo a los ángulos que se le asignen

Page 11: Desarrollo de ejercicios básicos en matlab

4. Curvas de nivel

Para las curvas de frecuencia se tomaron los siguientes valores constantes para x y y:

x1=-5; x2=0; x3=1; x4=1.5; x5=3;

y1=-7; y2=-2; y3=-1; y4=0; y5=5;

Se insertan los cinco valores de x considerados como constantes en la función y se obtiene

la figura 2.6 a partir de la siguiente cadena de comandos:

a1=cos(x1)+sin(v); b1=sqrt(x1^2+v.^2)+eps; Z=(exp(a1)+b1)./(b1+a1);

a2=cos(x2)+sin(v); b2=sqrt(x2^2+v.^2)+eps; z2=(exp(a2)+b2)./(b2+a2);

a3=cos(x3)+sin(v); b3=sqrt(x3^2+v.^2)+eps; z3=(exp(a3)+b3)./(b3+a3);

a4=cos(x4)+sin(v); b4=sqrt(x4^2+v.^2)+eps; z4=(exp(a4)+b4)./(b4+a4);

a5=cos(x5)+sin(v); b5=sqrt(x5^2+v.^2)+eps; z5=(exp(a5)+b5)./(b5+a5);

Figura 2.6. Curva de nivel para 5 valores de x

figure(3) plot(v,Z,'-+g',v,z2,'-*r',v,z3,'-+b',v,z4,'-+k',v,z5,'-*m');

xlabel('Eje y'),ylabel('Eje z') legend('X=-5','X=0','X=1','X=1.5','X=3',5) title('curvas de nivel para 5 valores de x')

h=(w-q)/e; v=q:h:w; [x,y]=meshgrid(v); a=cos(x)+sin(y); b=sqrt(x.^2+y.^2); z=(exp(a)+b)./(b+a);

Se debe utilizar los valores de y

expresados en vector para que al

momento de insertar el comando

de leyenda sea posible identificar

los cinco valores constantes de x.

Donde v=q:h:w es un vector con los mismos valores para x y y.

Page 12: Desarrollo de ejercicios básicos en matlab

Con la siguiente cadena de

comandos genera la figura 2.7 que

corresponde a la curva de nivel con

los valores constantes de y:

c=cos(v)+sin(y1); d=sqrt(v.^2+y1^2)+eps; zy=(exp(c)+d)./(d+c);

c2=cos(v)+sin(y2); d2=sqrt(v.^2+y2^2)+eps; zy2=(exp(c2)+d2)./(d2+c2);

c3=cos(v)+sin(y3); d3=sqrt(v.^2+y3^2)+eps; zy3=(exp(c3)+d3)./(d3+c3);

c4=cos(v)+sin(y4); d4=sqrt(v.^2+y4^2)+eps; zy4=(exp(c4)+d4)./(d4+c4); Figura 2.7. Curvas de nivel para 5 valores de y

c5=cos(v)+sin(y5); d5=sqrt(v.^2+y5^2)+eps; zy5=(exp(c5)+d5)./(d5+c5);

figure(4) plot(v,zy,'-og');hold on xlabel('Eje x'),ylabel('Eje z') title('curvas de nivel para 5 valores de y'); figure(4) plot(v,zy2,'-*k') figure(4) plot(v,zy3,':*m') figure(4) plot(v,zy4,'-+b') figure(4) plot(v,zy5,'-^y') legend('y=-7','y=-2','y=-1','y=0','y=5',5)

La gráfica de contorno se realiza introduciendo el comando contour

contour(x,y,z),colorbar; xlabel('Eje x'),ylabel('Eje y') title('contorno de la función')

Page 13: Desarrollo de ejercicios básicos en matlab

CONCLUSIONES

Se deben de tomar en cuenta los atributos que definen el funcionamiento de cada

comando y la forma en que los datos pueden ser expresados con mayor claridad.

Para cada comando existen diversas restricciones en los valores que se les asigna. En el

aula se reconocieron las características que deben cumplir los comandos generadores de

gráficas de tres dimensiones. Por ejemplo, El comando mesh ,(al igual que los demás

comandos), tiene la siguiente estructura:

mesh(vector1,vector2,matriz)

Donde el vector1 mide nx1 y el vector2 mide 1xm y la matriz tiene medidas de nxm.

Lo mismo sucede con otros comandos especializados para la resolución de gráficas.

Si una curva de niveles es realizada tomando a la variable como una matriz, se genera un

error cuando se inserta una leyenda a la gráfica, como se muestra en la figura 3.

La leyenda no reconoce a las líneas trazadas a partir de los valores de x, puesto que la

leyenda está describiendo a cada punto de la gráfica.

Figura 3. 4.Error en la leyenda