Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería...

30
Prácticas de M ATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1 er curso Guion de prácticas realizado por Alberto Portal Ruiz, despacho 2.1D14 (Curso 2003-2004) Departamento de Matemáticas Escuela Politécnica Superior Universidad Carlos III de Madrid

Transcript of Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería...

Page 1: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

Prácticas de MATLAB R©

Matemáticas IIngeniería Técnica en Informática de Gestión

1er curso

Guion de prácticas realizado porAlberto Portal Ruiz,despacho 2.1D14(Curso 2003-2004)

Departamento de MatemáticasEscuela Politécnica Superior

Universidad Carlos III de Madrid

Page 2: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

Índice

1. Introducción a MATLAB R© 2

1.1. Primeros pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.2. Operaciones básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.4. Definición de vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.5. Punto y coma a final de línea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.6. Gráficos bidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.7. Programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.7.1. Bucles for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

1.7.2. Sentencia if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2. Aplicaciones 19

2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.2. Asistente para resolver desigualdades gráficamente . . . . . . . . . . . . . . . . . 19

2.2.1. Método propuesto: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.3. Composición de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.3.1. Método propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.4. Sucesiones: Límites, monotonía, acotación. . . . . . . . . . . . . . . . . . . . . . . 21

2.4.1. Método propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.5. Continuidad de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.5.1. Método propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.6. Derivabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.6.1. Método propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

1

Page 3: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

1. Introducción a MATLAB R©

1.1. Primeros pasos

El programa MATLAB R© (abreviatura de MATrix LABoratory) es una herramienta muy po-tente de cálculo numérico y simbólico. En el desarrollo de esta práctica vamos a ver las nocionesbásicas para aplicarlo a la asignatura de Matemáticas I.

Comenzamos dando algunos consejos útiles sobre la sintaxis de MATLAB R©. En primerlugar, distingue mayúsculas de minúsculas. Esto se ilustra con el siguiente ejemplo:

'

&

$

%

» min(2,3)

ans =

2

» Min(2,3)

??? Undefined variable or capitalized

internal function Min; Caps Lock may be on.

Por otro lado, los espacios en blanco tienen un significado concreto para MATLAB R©. Ob-sérvese la diferencia:'

&

$

%

» [12+2i]

ans =

12.0000 + 2.0000i

» [12 +2i]

ans =

12.0000 0 + 2.0000i

En el primer caso, tenemos un escalar, el número complejo 12+ 2i, pero en el segundo casotenemos un elemento de C2, el vector (12, 2i).

Los paréntesis ( ) y los corchetes [ ] tienen significados distintos. En efecto, los primeros seusan para alterar la jerarquía de las operaciones aritméticas y para introducir los parámetrosde las funciones y los segundos se utilizan para definir vectores (de forma más general, se usanpara definir matrices, pero no estudiaremos aquí esta cuestión).

Otro consejo importante consiste en tratar de editar comandos que hayamos usado ante-riormente que sean similares al que intentamos introducir. Para este fin, si usamos las teclasde cursor ↑ y ↓ podremos visualizar los comandos que hemos usado anteriormente. Si quere-mos editar uno de ellos para usarlo, basta con desplazarse con las teclas de cursor → y ← ymodificar lo que haga falta.

Finalmente, para obtener ayuda sobre el uso de algún comando, disponemos de la sen-tencia help. Si, por ejemplo, pedimos ayuda acerca de la función linspace, obtendremos lo

2

Page 4: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

siguiente:

'

&

$

%

» help linspace

LINSPACE Linearly spaced vector.

LINSPACE(x1, x2) generates a row vector of

100 linearly equally spaced points between

x1 and x2.

LINSPACE(x1, x2, N) generates N points

between x1 and x2.

See also LOGSPACE, :.

1.2. Operaciones básicas

Tenemos los siguientes operadores binarios:

Operador Significado Ejemplo Resultado+ adición 2+3 5

- sustracción 2-3 -1

.* multiplicación puntual 2.*3 6

.^ potenciación puntual 2.^3 8

./ división derecha puntual 2./3 0.6667

.\ división izquierda puntual 2.\3 1.5000

Obsérvese que 2./3 = 3.\2. Entre las funciones básicas con que cuenta MATLAB R©, cabedestacar las que se muestran en la siguiente tabla:

3

Page 5: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

Función Explicaciónexp Función exponencial f (x) = ex.log Función logaritmo f (x) = log x.

log10 Función logaritmo decimal f (x) = log10 x.sin Función seno f (x) = sen x.cos Función coseno f (x) = cos x.tan Función tangente f (x) = tan x.asin Función arco seno f (x) = arc sen x.acos Función arco coseno f (x) = arc cos x.atan Función arco tangente f (x) = arc tan x.abs Valor absoluto o función módulo f (x) = |x|.sqrt Función raíz cuadrada f (x) =

√x.

sign Función signo f (x) = x|x| si x 6= 0, f (0) = 0.

round round(x) redondea al entero más próximo a x.floor floor(x) redondea al entero más próximo a x y menor que él.ceil ceil(x) = floor(x)+1

Damos a continuación una tabla que muestra las diferencias entre las funciones de redon-deo que hemos visto más arriba:

x round floor ceil

2.3 2 2 3

2.5 3 2 3

2.7 3 2 3

-2.3 -2 -3 -2

-2.5 -3 -3 -2

-2.7 -3 -3 -2

1.3. Variables

A lo largo de nuestro trabajo, resultará útil con toda seguridad almacenar cálculos inter-medios para acceder a ellos posteriormente y usarlos. Esto se consigue mediante el empleode variables. El nombre de la variable consiste en una letra seguida de otras letras, dígitos osubrayados, hasta un máximo de 31 caracteres. Es importante recordar que MATLAB R© distin-gue mayúsculas de minúsculas, por lo tanto, no es lo mismo llamar a una variable resultado1que llamarla Resultado1. Podemos hacer lo que se muestra a continuación para ilustrar el em-pleo de variables:

4

Page 6: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

'

&

$

%

» a=2

a =

2

» A=3

A =

3

» alfa=30

alfa =

30

» conf=pi./180

conf =

0.0175

» sin(conf.*alfa+a.*a)

ans =

-0.9822

Para ver qué variables tenemos definidas se usa el comando who. Para obtener detalles delas variables, whos y para borrar una variable llamada nombre, se emplea clear nombre. Laorden clear all borra todas las variables. En nuestro caso, tenemos'

&

$

%

» who

Your variables are:

A a alfa ans conf

» clear alfa

» who

Your variables are:

A a ans conf

» whos

Name Size Bytes Class

A 1x1 8 double array

a 1x1 8 double array

ans 1x1 8 double array

conf 1x1 8 double array

Grand total is 4 elements using 32 bytes

5

Page 7: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

1.4. Definición de vectores

Los vectores en MATLAB R©, así como los escalares, son casos particulares de matrices. Portanto, la sintaxis empleada para definirlos es la misma. En el caso de los vectores, podemosdefinir vectores fila y vectores columna.

Para definir un vector es necesario especificar sus componentes. Éstas se pondrán entrecorchetes. Dentro de los corchetes, se delimita cada componente de las demás usando un sepa-rador según estemos definiendo un vector fila o un vector columna. En el primer caso (vectorfila), podemos usar dos tipos de separadores, una coma (,) o un espacio en blanco. Ambosseparadores significan exactamente lo mismo. Incluso pueden usarse los dos dentro de la de-finición de un vector. Para definir vectores columna, el separador que se utiliza es el punto ycoma (;). Obsérvese el siguiente ejemplo:

'

&

$

%

» v1=[1 2 3]

v1 =

1 2 3

» v2=[3,2,7]

v2 =

3 2 7

» v3=[1;5;9]

v3 =

1

5

9

» v4=[5 6,9 4,1,2 3 4]

v4 =

5 6 9 4 1 2 3 4

La función length da como resultado el número de componentes de un vector, ya seavector fila o vector columna. Para ver cuántas componentes tiene v4, se escribe lo siguiente.

�» length(v4)

ans =

8

Para acceder a un elemento concreto de un vector, se escribe el nombre del vector y, entreparéntesis, se escribe a qué componente nos referimos. Así, si queremos acceder a la compo-nente sexta del vector v4 definido antes, basta con hacer lo siguiente:

6

Page 8: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

�» v4(6)

ans =

2

Esto puede ser aún más sofisticado. En efecto, podemos acceder a más de una componentea la vez. Para ello, en lugar de poner entre paréntesis a qué elemento nos estamos refiriendo, es-cribimos un vector cuyas componentes son, precisamente, las componentes del vector originala las que queremos acceso. Véanse los siguientes ejemplos:

'

&

$

%

» A=v4(3)

A =

9

» v5=v4([1 3 7])

v5 =

5 9 3

» v6=v4([5 5 3 1 7 2])

v6 =

1 1 9 5 3 6

» v6=v6([1 2 3 5 6])

v6 =

1 1 9 3 6

Obsérvese cómo se ha usado esto en el último caso para quitar la componente cuarta al vec-tor v6. A continuación vamos a ver cómo se definen algunos vectores que, por sus característi-cas particulares, son especialmente importantes. Para obtener un vector fila de n componentesrelleno de unos, escribimos ones(1,n). Si queremos un vector columna, haremos ones(n,1).Si queremos rellenar el vector con ceros, se usan zeros(1,n) y zeros(n,1) respectivamente.Para que cada componente sea un número aleatorio entre 0 y 1, se escribe rand(1,n) o bienrand(n,1). Se ilustra en el siguiente ejemplo (el alumno debe intentar hacer lo mismo, peroobteniendo vectores columna en lugar de vectores fila).

'

&

$

%

» v7=ones(1,5)

v7 =

1 1 1 1 1

» v8=zeros(1,7)

v8 =

0 0 0 0 0 0 0

7

Page 9: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

'

&

$

%

» v9=rand(1,4)

v9 =

0.9501 0.2311 0.6068 0.4860

» v9=rand(1,4)

v9 =

0.9501 0.2311 0.6068 0.4860

» v9=rand(1,4)

v9 =

0.8913 0.7621 0.4565 0.0185

Obsérvese cómo la función rand proporciona resultados distintos cada vez que se usa,incluso aunque los parámetros sean los mismos.

Hay otros vectores con una estructura particular que, por su importancia, también tienenuna forma especial de escribirse en MATLAB R©. Éstos son aquellos cuyas componentes formanuna progresión aritmética, es decir, las diferencias entre dos componentes consecutivas son unacantidad constante. Ejemplos de este tipo de vectores son (1, 3, 5, 7, 9) y (5, 1,−3,−7,−11). Lamanera de escribirlos en MATLAB R© consiste en introducir la primera componente, escribir dospuntos (:), el incremento que permitirá pasar de una componente a la siguiente, nuevamentedos puntos, y la última componente. Si el incremento es 1, puede omitirse. Por otro lado, elsusodicho incremento no tiene por qué ser una cantidad entera. Los siguientes ejemplos pro-porcionan una visión de toda la casuística:

'

&

$

%

» v1=1:2:9

v1 =

1 3 5 7 9

» v2=5:-4:-11

v2 =

5 1 -3 -7 -11

» v3=1:7

v3 =

1 2 3 4 5 6 7

» v4=50:7:100

v4 =

50 57 64 71 78 85 92 99

» v5=0:pi./4:pi

v5 =

0 0.7854 1.5708 2.3562 3.1416

8

Page 10: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

1.5. Punto y coma a final de línea

La verdadera importancia de este apartado no se apreciará hasta ver la sección dedicada aprogramación con MATLAB R©. No obstante, será útil ya en la parte de gráficos bidimensionales.

Como se habrá podido observar en el breve contacto que hemosmantenido conMATLAB R©,cada vez que terminamos una línea éste ejecuta los comandos y sentencias que contenga ydevuelve el resultado. La devolución del resultado puede resultar embarazosa en los pasosintermedios de un cálculo más importante, haciendo menos legible el proceso que estamos si-guiendo. Además, en el caso de los programas, mostrar resultados parciales irrelevantes puedeincrementar considerablemente el tiempo de ejecución. Con el fin de ocultar estos resultadosparciales podemos acabar la línea que estemos escribiendo con un punto y coma. Esto no sig-nifica que los cálculos no se realicen, simplemente, no se muestran en pantalla.

1.6. Gráficos bidimensionales

Nuestro siguiente objetivo será introducirnos en una de las herramientas más potentes deMATLAB R©. Estamos hablando de su capacidad gráfica. En este sentido, MATLAB R© dispone deunas herramientas potentes y sencillas de utilizar. Vamos a centrarnos en el comando plot.Supongamos que tenemos la siguiente sucesión de puntos:

(0, 3), (1, 2), (2, 4), (3, 0), (4, 5), (5, 3)

El comando plot permitirá representar estos puntos y unirlos mediante una línea poligonal.La manera de hacerlo es la siguiente:

En primer lugar, creamos un vector x con la primera coordenada de cada punto:

�» x=0:5

x =

0 1 2 3 4 5

A continuación, creamos el vector y que contendrá la segunda coordenada de cada punto:

�» y=[3 2 4 0 5 3]

y =

3 2 4 0 5 3

Por último, si escribimos plot(x,y), obtendremos la siguiente figura:

9

Page 11: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

Podemos escribir un tercer parámetro con el que se especifican el color de línea, el símbolopara los nodos y el tipo de línea que unirá los puntos. Mediante help plot se obtiene una listadetallada de todas las opciones.

Color Nodo Líneay Amarillo . Punto (•) - Continuam Magenta o Círculo (◦) : Punteadac Turquesa x Equis (×) -- Discontinuar Rojo + Más (+) -. Mixtag Verde * Asterisco (∗)b Azul s Cuadrado (2)w Blanco d Rombo (⋄)k Negro v Triángulo (▽)

^ Triángulo (△)< Triángulo (⊳)> Triángulo (⊲)p Estrella (✩)h Estrella (✡)

Así, si queremos que la gráfica anterior salga en color rojo, con un asterisco en cada nodoy éstos unidos con una línea discontinua, usaremos plot(x,y,’r*--’). Se obtiene la siguientefigura:

10

Page 12: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

En el siguiente ejemplo se representan, simultáneamente, un octógono y una estrella deocho puntas. Obsérvese el uso del punto y coma para evitar los resultados parciales.

'

&

$

%

» x1=[2 sqrt(2) 0 -sqrt(2) -2 -sqrt(2) 0 sqrt(2) 2];

» y1=[0 sqrt(2) 2 sqrt(2) 0 -sqrt(2) -2 -sqrt(2) 0];

» p=[1 4 7 2 5 8 3 6 1];

» x2=x1(p);

» y2=y1(p);

» plot(x1,y1,’r:’,x1,y1,’k*’,x2,y2,’b’)

−2 −1.5 −1 −0.5 0 0.5 1 1.5 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

11

Page 13: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

Este ejemplo ilustra cómo obtener varias gráficas simultáneas, cuando sabemos a priori queeso es lo que queremos. Si decidimos a posteriori que nos interesa tener dos gráficas simultáneas,¿cómo podemos hacerlo? Para eso tenemos la sentencia hold. Se habrá observado que cadanueva llamada al comando plot borra la figura anterior y dibuja la nueva gráfica. Con hold

podemos alterar este comportamiento. Escribiendo hold on logramos que se vayan dibujandolos nuevos objetos unos encima de otros. Para desactivar esta opción se escribe hold off. Amodo de ejemplo, vamos a añadir la estrella de ocho puntas, en verde, que podemos formar enel centro de la estrella mayor que ya tenemos dibujada.

'

&

$

%

» x3=x2.*(sqrt(2)-1);

» y3=y2.*(sqrt(2)-1);

» hold on

» plot(x3,y3,’g-.’)

» hold off

−2 −1.5 −1 −0.5 0 0.5 1 1.5 2−2

−1.5

−1

−0.5

0

0.5

1

1.5

2

Vamos a añadir algunos elementos a la figura anterior. Podemos hacer que MATLAB R©

dibuje una retícula cuadrada en la figura mediante la sentencia grid. Con grid on se visualiza,con grid off se oculta. Con axis establecemos los límites de la ventana. Esto es útil para ajustara nuestro gusto las proporciones de la gráfica y la región de la misma que se visualiza. Lasintaxis es �

�� axis([xmin,xmax,ymin,ymax])

En el caso anterior, vamos a activar el retículo y a quedarnos con el rectángulo de vértices(1, 1), (−1, 1), (−1,−1), (1,−1).

12

Page 14: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

��

��

» grid on

» axis ([-1,1,-1,1])

Para añadir un título al gráfico se utiliza title y para poner un comentario en cada eje seusan xlabel e ylabel. En nuestro caso, escribimos:�

�» title(’Estrella de ocho puntas’)

» xlabel(’Coordenada x’)

» ylabel(’Coordenada y’)

El resultado que se obtiene es el siguiente

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Coordenada x

Co

ord

en

ad

a y

Estrella de ocho puntas

Vamos a estudiar ahora cómo aprovechar el comando plot para dibujar la gráfica de unafunción. La idea es muy sencilla. Vamos a aproximar la gráfica mediante una línea poligonal. Amodo de ejemplo, representemos la función f (x) = cos(x2) en el intervalo [0, 5]. Comenzamoseligiendo un conjunto de puntos del dominio:�

�� » x=0:0.5:5;

A continuación evaluamos la función en estos puntos y, finalmente, representamos la fun-ción mediante plot.�

�» x=0:0.5:5;

» y=cos(x.^2);

» plot(x,y);

13

Page 15: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

En las figuras que se mostrarán a continuación, no sólo aparece el resultado del código intro-ducido, sino que se ha añadido una representación de la función f para apreciar la bondad denuestro método.

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

f(x)=cos(x2)Aproximación

Si definimos x=0:0.25:5;, llegamos a la siguiente figura

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

f(x)=cos(x2)Aproximación

y con x=0:0.1:5; a lo siguiente:

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

f(x)=cos(x2)Aproximación

14

Page 16: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

Se aprecia, por tanto, cómo mejora la aproximación al tomar una mayor cantidad de pun-tos. La cuestión está en decidir cuántos puntos del dominio debemos tomar. Tienen que ser lossuficientes como para que se aproxime bien la función (no se aprecie la línea poligonal), pero noconviene tomar una gran cantidad de ellos, pues de lo contrario, ocuparemos demasiada me-moria y se tardará más en obtener la representación, sin un beneficio apreciable en el resultado.En nuestro ejemplo, es suficiente con tomar x=0:0.05:5;. Podríamos tomar x=0:0.0001:5;,pero como se puede comprobar fácilmente, las diferencias son inapreciables a simple vista, yconsumimos casi 500 veces más memoria.

1.7. Programación

En esta sección vamos a ver unas nociones básicas de programación en MATLAB R©. Enconcreto, vamos a centrarnos en la creación de funciones. Para este fin, MATLAB R© incorporaun editor específico. La diferencia principal que observamos al trabajar en el editor frente a loque hemos hecho hasta el momento es que los comandos no se ejecutan automáticamente alacabar la línea.

Una vez abierto el editor, para comenzar a escribir el código de nuestra función, debemosespecificar los parámetros de entrada y salida de la misma. Por ejemplo, si queremos imple-mentar una función que se llame sqr y calcule el cuadrado de un número real, escribiremos:

��

� function y=sqr(x)

donde x especifica el parámetro de entrada y representa el valor al cual aplicaremos la funcióne y especifica el parámetro de salida, es decir, el resultado de aplicar nuestra función.

A continuación basta con introducir el código de la función. En nuestro ejemplo, quedará:

�function y=sqr(x)

y=x.^2; %Calculamos el cuadrado de x

Obsérvese el uso que se ha hecho del punto y coma. Lo que aparece tras el símbolo % seconsidera un comentario y es ignorado al ejecutar la función.

Una vez escrita la función, hay que guardarla. Es importante tener en cuenta que el nombreque se dará al archivo es el mismo que se ha dado a la función. La extensión del archivo será.m. En nuestro caso, llamaremos al archivo sqr.m. Obsérvese que el editor nos sugiere estaposibilidad automáticamente al guardar el archivo.

Una vez guardado, volvemos a la ventana de comandos para ver cómo se aplica nues-tra función. En primer lugar, debemos situarnos en el directorio donde guardamos el fichero.Hecho esto, basta con escribir el nombre de la función y, entre paréntesis, el número al que laaplicaremos. Se muestran a continuación algunos ejemplos:

15

Page 17: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

'

&

$

%

» sqr(3)

ans =

9

» b=sqr(8)

b =

64

Es posible especificar más de un parámetro de entrada. Para ello, debemos separarlos porcomas. Así, si sqr tuviera dos parámetros de entrada, x y z, se especificaría como�� ��function y=sqr(x,z)

y para llamar a la función, se podría escribir�� ��c=sqr(5,3)

Las variables que definimos y usamos al implementar la función son locales. Esto quieredecir que sólo existen mientras se ejecuta la función.

1.7.1. Bucles for

La sintaxis es �

�for j=V

instrucciones(j);

end

donde V es un vector fila. Ejecuta el bloque interno de instrucciones para cada una de las com-ponentes del vector fila V. Véase el siguiente ejemplo para entender mejor su funcionamiento:'

&

$

%

» n=5; x=[]; for i=1:n; x(i)=i.^2, end;

x =

1

x =

1 4

x =

1 4 9

x =

1 4 9 16

x =

1 4 9 16 25

16

Page 18: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

1.7.2. Sentencia if

Su sintaxis es '

&

$

%

if relación

instrucciones(1)

end

O BIEN

if relación

instrucciones(1)

else

instrucciones(2)

end

En el primer caso, sólo ejecuta el bloque de sentencias instrucciones(1) si la relaciónes cierta. En el segundo caso, si la relación es cierta, ejecuta el bloque instrucciones(1), y sies falsa, el bloque instrucciones(2). A modo de ejemplo y antes de ver cómo expresar unarelación lógica en MATLAB R©, puede probarse lo siguiente:

'

&

$

%

» a=rand(1,1), if a<0.5, b=a.*2, else, b=-a, end

a =

0.7621

b =

-0.7621

» a=rand(1,1), if a<0.5, b=a.*2, else, b=-a, end

a =

0.4565

b =

0.9129

Para expresar una relación lógica, necesitamos conocer los operadores lógicos y los opera-dores relacionales. Estos últimos se especifican en la siguiente tabla:

< Menor que> Mayor que<= Menor o igual que>= Mayor o igual que== Igual a~= Distinto de

Por otro lado, entre los operadores lógicos tenemos

17

Page 19: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

Conjunción lógica (”y”). En MATLAB R© se utiliza el símbolo &. Se tiene que A & B es cierta siambas, A y B lo son (con que alguna de las dos sea falsa, también será falsa la conjunción).

Disyunción lógica (”o”). En MATLAB R© se utiliza el símbolo |. Se tiene que A | B es cierta silo es alguna de las dos, A o B (o incluso las dos). Únicamente será falsa cuando tanto A como B

sean falsas.

Negación lógica (”no”). En MATLAB R© se utiliza el símbolo ~. Se tiene que ~A es cierta sí y sólosi A es falsa.

18

Page 20: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

2. Aplicaciones

2.1. Introducción

En esta sección vamos a utilizar MATLAB R© para ayudarnos a resolver problemas de cálcu-lo, como los que se proponen en las hojas de problemas de la asignatura (Matemáticas I). Sepersigue un doble objetivo: Por un lado, que el alumno asimile MATLAB R© como una herra-mienta de trabajo, y, por otro, que el alumno sea consciente de las limitaciones que tiene todoprograma de cálculo numérico.

Las ventajas de asimilar MATLAB R© como herramienta de trabajo sonmuchas. Puede servirpara discriminar si nuestra solución es erróneamediante una sencilla comprobación o bien paratantear un problema dado y, en función de los resultados obtenidos en el ordenador, tratar deresolverlo de una u otra manera. Por otro lado, siempre que trabajamos con cálculo numérico,se producen errores de redondeo, el modelo utilizado para resolver el problema es discreto,una elección desafortunada de los parámetros puede llevar a conclusiones equivocadas, etc.

Las posibilidades que ofrece MATLAB R© no acaban en lo expuesto aquí. El propio alumnopuede intentar resolver problemas distintos a los planteados en esta práctica con la ayuda deMATLAB R©, usando variantes de los métodos mencionados, o ideando otros nuevos que se ajus-ten a la naturaleza del problema en cuestión.

2.2. Asistente para resolver desigualdades gráficamente

Se nos plantea el siguiente problema:

� Escríbase el conjunto de los x que verifican

|x− 3| ≤ 8 .

� Ejercicio. Trátese de resolver el problema anterior usando MATLAB R©. ¿Se le ocurre algún método?

2.2.1. Método propuesto:

El método que usaremos consistirá en representar las funciones f (x) = |x− 3| y g(x) = 8.El conjunto buscado será aquél donde la gráfica de f esté por debajo de la gráfica de g.

Comenzamos representando las funciones

#

"

!

» x=-10:0.1:15;

» y1=abs(x-3);

» y2=8.*ones(1,length(x));

» plot(x,y1,’b’,x,y2,’r’)

19

Page 21: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

El resultado que obtenemos es

−10 −5 0 5 10 150

2

4

6

8

10

12

14

Lo cual nos lleva, tras dibujar la recta x = 11 sobre la gráfica (por ejemplo, mediante la secuen-cia de comandos hold on; plot([11 11],[0 14])’); hold off;), a la conclusión de que elconjunto que nos piden es [−5, 11].

� Ejercicio. Hágase lo mismo para las siguientes desigualdades:

a) |x− 1|+ |x− 2| > 1.

b) |x− 1| · |x+ 2| = 3.

c) ||x+ 1| − |x− 1|| < 1.

� Ejercicio. Calcúlese con MATLAB R© para qué puntos se tiene que

x[100(x− 1) + 1] ≤ 0

sabiendo que dicho conjunto está contenido en [−1, 2]. Resuélvase analíticamente y compárense los re-sultados obtenidos.

2.3. Composición de funciones

Podemos utilizar el lenguaje de programación de MATLAB R© para calcular composicionesde funciones. Se nos plantea el siguiente problema:

� Sean f (x) = x3 − x y g(x) = sen(2x). Calcúlense f ◦ g(π

2 ), g ◦ f (1), f ◦ f (1) y g ◦ g(π

2 ).

20

Page 22: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

2.3.1. Método propuesto

Comenzamos escribiendo dos funciones, f.m y g.m, que implementan las funciones quenos dan en el ununciado. Los códigos son:

��

��

function y=f(x)

y=x.^3-x;

��

��

function y=g(x)

y=sin(2.*x);

Llegados a este punto, basta con calcular lo que nos piden:

'

&

$

%

» f(g(pi./2))

ans =

-1.2246e-016

» g(f(1))

ans =

0

» f(f(1))

ans =

0

» g(g(pi./2))

ans =

2.4493e-016

� Ejercicio. Dadas f (x) = x3 − x, g(x) = cos(πx) y h(x) = e1−x, calcúlense f ◦ g( 34), h ◦ f (6),h ◦ g ◦ f (3) y g ◦ f ( 34 ).

� Ejercicio. Represéntense las funciones f ◦ g y g ◦ f en la misma figura en el intervalo [−2, 2]. Hágaselo mismo con g ◦ h y h ◦ g en [0, 5]. Las funciones f , g y h son las que se definieron en el ejercicio anterior.¿Qué se observa? ¿Por qué?

2.4. Sucesiones: Límites, monotonía, acotación.

En este caso, el problema consiste en conjeturar si una sucesión está acotada, si es monóto-na o si tiene límite.

21

Page 23: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

A modo de ejemplo, partimos del siguiente problema:

� Conjetúrese acerca de si la sucesión definida por{

x1 = 0

xn+1 =√

2+√xn

es monótona, está acotada y si tiene límite.

� Ejercicio. ¿Se le ocurre alguna manera de resolver el problema usando MATLAB R©?

2.4.1. Método propuesto

Comenzamos definiendo una función tal que, dado N ∈ N, nos devuelva un vector de Ncomponentes, donde cada componente es un término de la sucesión. El código del programaes el siguiente: '

&

$

%

function x=sucesion(N);

x(1)=0;

for n=2:N

x(n)=sqrt(2+sqrt(x(n-1)));

end

Ahora, desde la ventana de comandos, dibujamos los pares de puntos (n, xn):��

��

» n=50;

» plot(1:n,sucesion(n),’k:+’)

Obtenemos la siguiente figura:

0 5 10 15 20 25 30 35 40 45 500

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

22

Page 24: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

A la vista de la figura, se puede augurar que la sucesión será monótona creciente. Además,está acotada superiormente por 2. Si efectivamente es creciente y está acotada superiormente,entonces sabemos que existe el límite. Su valor aproximado, según se desprende de la observa-ción de la figura, está algo por encima de 1,8.

� Ejercicio. Hágase lo mismo con las siguientes sucesiones:

a) an = 1+ 1n b) bn = 1+ (−1)n

n

c) cn = n+ 1n d) dn =

(

1+ 1n

)

+ (−1)n(

1− 3n

)

e) en = n−2n+2 f) fn = 3n+4

2n+5

g) gn = cos(nπ/2) h) hn = nn2+n−1

i) in =√n+1

5n+3

� Ejercicio. Hágase el mismo estudio para las siguientes sucesiones definidas por recurrencia.

{

a1 = 1

an+1 =√2an

{

b1 = 0

bn+1 =√

2+√bn

{

cn = 1

cn+1 =√1+ 2cn − 1

{

d1 = 0

dn+1 =1

dn+1

{

e1 = 2

en+1 =e2n+22en

{

f1 = 4

fn+1 =f 2n+56

� Ejercicio. Conjetúrese sobre la monotonía, acotación y existencia de límite para la siguiente sucesióndefinida por recurrencia:

x1 = 10

xn+1 =xn4

(

3(500xn − 1)|500xn − 1| − 1

)

Hecho esto, concéntrese en una ventana cuya amplitud vertical sea de dos centésimas en torno al cero ydiga qué observa. ¿Coincide con sus conjeturas?

23

Page 25: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

2.5. Continuidad de funciones

El problema que se nos plantea en este caso es el siguiente:

� Conjetúrese si la función

f (x) =

{

x+ log x si x > 1

x2 si x ≤ 1

es continua en [−1, 2].

� Ejercicio. Trátese de resolver el problema anterior usando MATLAB R©.

2.5.1. Método propuesto

El método que usaremos consistirá en representar gráficamente la función y observar loque ocurre. Habrá que concentrarse en los lugares conflictivos de la gráfica para conocer mejorel comportamiento que tiene la función.

Comenzamos definiendo la función que queremos representar:

'

&

$

%

function y=f(x)

y=[];

for xx=x

if xx>1

y=[y xx+log(xx)];

else

y=[y xx.^2];

end

end

A continuación la representamos

�» x=0:0.01:2;

» y=f(x);

» plot(x,y,’k-’)

Se obtiene una gráfica como la siguiente:

24

Page 26: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.5

1

1.5

2

2.5

3

A la vista de la gráfica, parece que la función es continua. Podemos vaticinar que existelı́mx→1− f (x) = lı́mx→1+ f (x), pero podría ocurrir que este valor no coincida con f (1). Estoúltimo tendremos que verificarlo por nuestra cuenta. En este caso, f (1) = 1, que coincide conlo que muestra la gráfica.

La siguiente tabla muestra imágenes obtenidas con MATLAB R© de distintos tipos de dis-continuidades y distinto muestreo del dominio.

25

Page 27: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

Discontinuidad x=0:0.1:2 x=0:0.15:2 x=0:0.01:2 x=0:0.015:2

Discontinuidadevitable

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.5

1

1.5

2

2.5

3

3.5

4

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.5

1

1.5

2

2.5

3

3.5

4

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.5

1

1.5

2

2.5

3

3.5

4

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.5

1

1.5

2

2.5

3

3.5

4

Discontinuidadinevitable desalto finita

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

Discontinuidadinfinita

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−15

−10

−5

0

5

10

15

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−15

−10

−5

0

5

10

15

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−15

−10

−5

0

5

10

15

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−15

−10

−5

0

5

10

15

Discontinuidadde oscilaciónfinita

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Discontinuidadde oscilacióninfinita

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−20

−15

−10

−5

0

5

10

15

20

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−20

−15

−10

−5

0

5

10

15

20

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−40

−30

−20

−10

0

10

20

30

40

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2−40

−30

−20

−10

0

10

20

30

40

� Ejercicio. Explíquese por qué en las columnas dos y cuatro de la tabla anterior no se refleja la discon-tinuidad evitable.

� Ejercicio. Conjetúrese sobre la continuidad de las siguientes funciones.

1.) f (x) =

{

sen xx si x > 0

ex si x ≤ 02.) f (x) =

x2 si x ≤ −12πsenπx si − 1 < x < 1

log x si x ≥ 1

3.) f (x) =

{

x sen π

x si x 6= 0

0 si x = 04.) f (x) =

{

3x+ 1 si x ≥ 0

2x si x < 0

5.) f (x) =

{

x2 sen 1x si x 6= 0

0 si x = 06.) f (x) =

{

e1x si x 6= 0

0 si x = 0

7.) f (x) =

{

3−x22 si x < 1

1x si x ≥ 1

8.) f (x) =

{

2− (x+ 1)3 si x < 02x+1x+1 si x ≥ 0

26

Page 28: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

� Ejercicio. Conjetúrese sobre la continuidad de las siguientes funciones.

1.) f (x) =x log2(x)1+ log(x)

2.) f (x) =ex − esen x

x− sen x

3.) f (x) =ex + sen x− 1log(1+ x)2

4.) f (x) =∣

x

sen x

sen xx−sen x

2.6. Derivabilidad

Se nos plantea el siguiente problema:

� Conjetúrese sobre la derivabilidad de la siguiente función:

f (x) =

{

|x| si x < 1

3− x si x ≥ 1 .

� Ejercicio. ¿Se le ocurre alguna manera de resolver el problema anterior?

2.6.1. Método propuesto

Como siempre, partimos de la definición de la función:

'

&

$

%

function y=f(x)

y=[];

for xx=x

if xx<1

y=[y abs(xx)];

else

y=[y 3-xx];

end

end

A continuación, la representamos en el intervalo adecuado:

�» x=-1:0.05:3;

» y=f(x);

» plot(x,y,’k.-’);

27

Page 29: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

Obtenemos la siguiente figura:

−1 −0.5 0 0.5 1 1.5 2 2.5 30

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

La figura sugiere que la función tiene una discontinuidad de salto en x = 1, por tanto, sieste es el caso, no será derivable en 1 por no ser continua. En x = 0 parece que tampoco seráderivable pues la función tiene un ”pico”. Para analizar esto con más detalle, vamos a tratar deaveriguar con la ayuda de MATLAB R© si existe

lı́mx→0

f (x)− f (0)x− 0

= lı́mx→0

|x|x

.

Representamos la función |x|x en [-0.1,0.1]. Para ello, escribimos lo siguiente:

�» x=linspace(-0.1,0.1,50);

» y=abs(x)./x;

» plot(x,y,’k.-’);

obteniendo la siguiente figura:

−0.1 −0.08 −0.06 −0.04 −0.02 0 0.02 0.04 0.06 0.08 0.1

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

28

Page 30: Prácticas de Mapr/materiales/Guion-MAT1.pdf · Prácticas de MATLAB R Matemáticas I Ingeniería Técnica en Informática de Gestión 1er curso Guion de prácticas realizado por

Dicha figura permite conjeturar que no existe el citado límite, y por tanto, podemos aven-turar que la función no será derivable en cero.

� Ejercicio Conjetúrese sobre la derivabilidad de las funciones cuya continuidad se estudió en la secciónanterior.

� Ejercicio. Con la ayuda de MATLAB R©, ¿qué puede decirse acerca de la derivabilidad de la siguientefunción

f (x) =

{

(x− 2)e1

2−x si x 6= 2

0 si x = 2

en x = 2?

� Ejercicio. Se considera la siguiente función:

f (x) =√

1+ (100x)2 .

Represéntese en el intervalo [-10,10] y conjetúrese sobre su derivabilidad en x = 0 usandoMATLAB R©.Hágase un estudio analítico. ¿Coinciden los resultados obtenidos? ¿Por qué? ¿Qué comandos habría queescribir en MATLAB R© para que la representación nos sugiera la conclusión correcta?

29