APUNTES DE MATLAB - UNLP

52
APUNTES DE MATLAB C´andidoPi˜ neiroG´omez 1

Transcript of APUNTES DE MATLAB - UNLP

Page 1: APUNTES DE MATLAB - UNLP

APUNTES DE MATLAB

Candido Pineiro Gomez

1

Page 2: APUNTES DE MATLAB - UNLP

Capıtulo 1

Comandos Basicos y Matrices

1.1. Introduccion

Matlab es un lenguaje de alto nivel orientado al desarrollo de calculos tec-

nicos. Integra calculo, visualizacion y programacion en un entorno interactivo

de facil manejo. Los problemas y las soluciones se expresan en la notacion

matematica habitual.

El elemento basico de informacion es una matriz a la que no hace falta

asignar dimensiones con anterioridad. Por tanto, pueden abordarse problemas

que requieren una formulacion vectorial o matricial de un modo mas facil que

en un lenguaje tipo FORTRAN o C. El nombre MATLAB es una abreviatura

de Matrix Laboratory.

1.2. Iniciacion a Matlab

Para entrar en Matlab, debemos hacer clic dos veces en el icono corres-

pondiente. Para salir, tenemos dos opciones: 1) en File podemos hacer clic

en exit y 2) podemos teclear quit y pulsar enter.

Una vez que hemos entrado en Matlab, escribiremos las instrucciones

en la ventana de comandos (command window) a partir del sımbolo >>

2

Page 3: APUNTES DE MATLAB - UNLP

(denominado prompt). Si se quiere salvar en un archivo toda una sesion de

trabajo, podemos proceder como sigue:

Iniciamos la sesion tecleando:

>> diary nombre.txt

y terminar la sesion tecleando

diary off

Automaticamente Matlab crea un archivo con la denominacion nombre.txt

que se encuentra en el directorio de trabajo. El nombre es opcional, pero

un nombre adecuado puede ser poner el mes seguido de la fecha del dıa en

curso: octubre21.txt. Si queremos guardar el archivo en un disquete, CD,.., lo

abrimos y en File hacemos clic en save as. Ahora pulsando en Mi PC podemos

guardarlo en la unidad que deseemos.

Matlab nos ofrece una ayuda que puede ser de gran utilidad. Si tenemos

alguna duda sobre el funcionamiento concreto de determinada funcion, de la

que conocemos su denominacion en Matlab, podemos teclear en la ventana

de comandos

>> help nombre

y aparece en pantalla la ayuda de Matlab explicando el funcionamiento de

la funcion. Si no fuera suficiente, podemos pulsar en doc nombre que nos

ofrece una ayuda mas completa y ejemplos. Supongamos que tenemos alguna

duda sobre el funcionamiento de la funcion det (determinante). Tecleamos

>> help det.

Si tecleamos

>> lookfor nombre

aparece en pantalla una relacion con todos los comandos que contienen nom-

bre. Si no queremos que la ayuda aparezca en la ventana de comandos sino

en una ventana especıfica, debemos teclear

>> helpwin nombre

y se abre una ventana con la ayuda.

Finalmente, indicar que tambien podemos buscar la ayuda acudiendo a

Help y haciendo clic en Matlab Help.

3

Page 4: APUNTES DE MATLAB - UNLP

1.3. Operaciones basicas y variables

Matlab distingue entre mayusculas y minusculas. Entonces A y a pueden

ser nombres apropiados para dos variables distintas. El nombre de toda varia-

ble debe comenzar por una letra. X, x, X1 o media son nombres validos de

variables.

+, -, *, /, ˆ son los sımbolos que denotan las operaciones suma, diferencia,

producto, cociente y potencia. Las operaciones se van realizando por orden

de prioridad, primero las potencias, despues las multiplicaciones y divisiones

y, finalmente, las sumas y restas. Las operaciones de igual prioridad se llevan

a cabo de izquierda a derecha.

Si se quiere asignar a una variable x el valor 3 + 25, se escribe a conti-

nuacion del prompt

>> x=3+2ˆ5;

Se pueden utilizar las funciones matematicas usuales. Por ejemplo, si se

quiere asignar a la variable a el valor√

3, se escribe

>> a=sqrt(3);

Los comentarios deben ir precedidos del signo%. Cuando una instruccion

no cabe en una lınea se puede cortar en dos trozos, en cuyo caso el primero

de ellos debe acabar con tres puntos seguidos y el segundo trozo va en la lınea

siguiente. Para recordar ordenes previas (o posteriores si hemos retrocedido)

se usan las teclas de cursor ↑ y ↓, y para corregir una instruccion las teclas

→ y ←.

Si se quiere conocer el valor de una variable, basta teclear su nombre.

Para conocer las variables que se han usado hasta el momento, se utiliza

el comando who y, si se quiere mas informacion, whos. Para eliminar una

variable denominada nombre

>>clear nombre

A continuacion damos una relacion con los nombres de las funciones mas

habituales:

raız cuadrada: sqrt(x).

funcion exponencial: exp(x).

4

Page 5: APUNTES DE MATLAB - UNLP

funcion seno: sin(x).

funcion coseno: cos(x).

funcion tangente: tan(x).

funcion cotangente: cot(x).

funcion arcoseno: asin(x).

funcion arcotangente: atan(x).

funcion logaritmo neperiano: log(x).

funcion logaritmo en base 10: log10(x).

Resto de la division entera de m por n: rem(m,n).

Matlab tiene definidas variables con un valor predeterminado. Veamos

algunos ejemplos mas importantes:

pi. Su valor es el numero π.

inf. Su valor es infinito. Aparece, por ejemplo, cuando hacemos 1/0.

eps. Es el numero positivo mas pequeno con que trabaja Matlab

>>eps

ans 2.2204e-016

Terminamos esta seccion explicando como puede controlarse el formato

numerico con que se muestran en pantalla los resultados numericos de los

calculos. Sin embargo, hay que senalar que esto no tiene nada que ver con la

precision con la que se realizan dichos calculos. Si queremos que se muestren

en pantalla los resultados con solo 5 dıgitos, se teclea format short

>> format short

a=1/3

ans 0.3333

Si deseamos ver en pantalla los resultados con 15 dıgitos, se tecleara

format long. Si tecleamos format rat, Matlab busca una aproximacion

racional.

Ejemplo. Matlab denota el numero π por pi. Veamos cual es el resultado

de teclear format rat antes de pi:

>> format rat

pi

5

Page 6: APUNTES DE MATLAB - UNLP

ans 355/113.

Finalmente, format short e produce el resultado en notacion punto

flotante con cinco dıgitos

Ejemplo.

>> format short e

a=1/3

ans 3.3333e-001

1.4. Vectores

Si queremos introducir las componentes de un vector v, las escribiremos

entre corchetes separandolos con comas o espacios.

Ejemplo. El vector fila v = (1, 2,−1) se introduce en Matlab como sigue

>> v = [1 2 − 1];

Notese el punto y coma final. Si no se pone, al pulsar enter Matlab muestra

en pantalla la fila 1 2 -1. Si se pone el punto y coma, Matlab guarda en

memoria el vector v = (1, 2,−1) y no lo muestra en pantalla. Esto es un

hecho general que se producira cada vez que escribimos alguna instruccion.

Si colocamos el punto y coma final, Matlab ejecuta la instruccion en cuestion

y no muestra en pantalla el resultado ni los calculos involucrados. Por tanto,

es importante tener en cuenta esta caracterıstica de Matlab. Por ejemplo,

si los calculos que debe realizar Matlab son numerosos, puede que no nos

interese verlos en pantalla.

Si el vector o matriz fila tienen la particularidad de que sus componentes

estan igualmente espaciadas, hay una forma mas simple de introducirlo. Ası,

el vector v = (1, 3, 5, 7) se puede introducir de la forma siguiente

>> v=1:2:7;

Es decir, se indica, separados por dos puntos, la primera componente, el

desfase de uno al siguiente y el ultimo. Cuando el desfase es la unidad se

puede omitir. Entonces v = 4 : 8, es la forma mas simple de indicar el vector

v = (4, 5, 6, 7, 8).

6

Page 7: APUNTES DE MATLAB - UNLP

Otra forma de introducir un vector fila con las componentes igualmente

espaciadas consiste en indicar la primera componente, la ultima y el numero

total de componentes.

Ejemplo. El vector v que tiene 10 componentes igualmente espaciadas

siendo 1 la primera y 18 la ultima se indica

>> v = linspace(1, 18, 10);

Recuerdese que, si no colocamos al final el punto y coma, apare-

cera en pantalla una fila de 10 numeros que no son otra cosa que

las componentes de v.

Cuando necesitemos conocer el numero de componentes de un vector v

bastara recurrir a la funcion length(v).

sort(v) es el vector que resulta al escribir las componentes de v de menor

a mayor.

Para finalizar, veamos algunas operaciones habituales entre vectores:

- Suma: >> u+v.

- Producto por un escalar: >> a*v.

- Producto escalar: >> dot(u,v).

- Producto vectorial: >> cross(u,v).

1.5. Manipulacion de matrices

Para introducir los elementos de una matriz A, escribiremos entre corchetes

los elementos de cada fila separados por un espacio (o por una coma), mien-

tras que las filas se separan con punto y coma.

Ejemplo. La matriz

A =

(2 −1 0

3 2 1

),

se introduce en Matlab como sigue

>>A=[2 -1 0;3 2 1];

Para referirse al elemento de la fila i y columna j de una matriz A, es-

cribiremos A(i,j), como es usual en la teorıa de matrices. Tambien podemos

7

Page 8: APUNTES DE MATLAB - UNLP

necesitar referirnos a alguna submatriz de A. Por ejemplo, si necesitamos

la fila i de A, escribiremos A(i,:). Del mismo modo, la columna j de A se

denota en Matlab por A(:,j). La submatriz de A formada por las filas 2 y 3

y las columnas 1 y 2 de A se denota por A([2 3],[1 2]). Cuando las filas ( o

las columnas) que forman la submatriz son consecutivas hay una forma mas

simple de denotarla

>>A(1:4,[2 4])

es la forma de referirse a la submatriz de A formada por las cuatro primeras

filas y por las columnas 2 y 4.

Ciertas matrices muy simples, entre ellas la matriz unidad y la matriz nu-

la, no necesitan ser introducidas elemento a elemento ya que Matlab dispone

de funciones que nos permitiran referirnos a ellas de forma muy facil.

1. Matriz unidad: eye(4) es la matriz unidad de orden 4.

2. Matriz nula: zeros(3,4) es la matriz nula 3× 4.

3. ones(n,m) es la matriz n×m cuyos elementos son todos iguales a 1.

4. rand(n,m) es una matriz n × m de numeros aleatorios distribuidos

uniformemente en el intervalo (0,1). randn(n,m) es una matriz de numeros

aleatorios como antes, pero ahora estan distribuidos normalmente.

5. det(A) nos da el determinante de una matriz cuadrada A.

6. rank(A) es el rango de la matriz A.

7. A’ es la matriz traspuesta y conjugada de A.

8. inv(A) es la matriz inversa de la matriz cuadrada y regular A.

9. sin(A) es la matriz (sen(aij)), donde A = (aij). Analogamente ocurre

con las otras funciones de Matlab que hemos descrito en una seccion anterior.

10. diag(A) es una matriz columna con los elementos de la diagonal prin-

cipal de A.

11. size(A) nos da las dimensiones de la matriz A.

8

Page 9: APUNTES DE MATLAB - UNLP

1.6. Operaciones con matrices

Los sımbolos + , * y ˆ se reservan para las operaciones matriciales suma,

producto y potencia.

Ejemplos. a) Determinar el cuadrado de la matriz cuadrada A:

>> Aˆ2

b) Determinar el producto de las matrices A y B (recordar que el producto

solo es posible si el numero de columnas de A es igual al de filas de B:

>> A*B

c) Sumar las matrices A y B (que deberan tener la misma dimension):

>> A+B

Tambien necesitaremos operaciones como las siguientes: el producto de

dos matrices elemento a elemento, elevar cada elemento de una matriz a

un cierto exponente, dividir elemento a elemento una matriz por otra. En

general, estas operaciones se indicaran anteponiendo un punto al sımbolo

usado para denotar la operacion en cuestion. A continuacion damos una

relacion de estas operaciones:

A.*B es la matriz cuyos elementos se obtienen haciendo el producto de

cada elemento de A por el correspondiente de B.

A.ˆa es la matriz que resulta al elevar cada elemento de A al exponente

a.

A./B es la matriz cuyos elementos se obtienen dividiendo cada elemento

de A por el correspondiente de B.

1.7. Operaciones entre escalares y matrices

a+B es la matriz que resulta al sumar el escalar a cada elemento de la

matriz B.

a*B cada elemento de B se multiplica por el escalar a.

A/b cada elemento de A se divide por el escalar b.

9

Page 10: APUNTES DE MATLAB - UNLP

1.8. Las instrucciones A/b y A\bSupongamos que A es una matriz cuadrada de orden n y b un vector

columna de n componentes. A\b nos da la solucion del sistema de ecuaciones

Ax = b.

Ejemplo. Resolver el sistema

{x + 2y = 2

3x + y = 0.

Escribimos el sistema en forma matricial: A(

xy

)= b donde b =

(20

)y A es

la matriz (1 2

3 1

).

Si el determinante de A es no nulo, sabemos que existe la matriz inversa

A−1. Entonces, multiplicando la igualdad A(

xy

)= b por A−1 (a la izquierda),

resulta(

xy

)= A−1 ·b, que es la solucion del sistema. Matlab permite encontrar

esta solucion mediante la instruccion A\b.>> A=[1 2;3 1];

b=[2;0];

[x; y] = A\bans

(xy

)=

(−0.41.2

).

Mas en general, si B es una matriz con un numero de filas igual que el

numero de columnas de A, A\B nos da la solucion del sistema A ·X = B.

Ejemplo. Resolver los dos sistemas siguientes

2 1 1

1 2 1

1 1 2

·

x

y

z

=

1

1

1

;

2 1 1

1 2 1

1 1 2

·

x

y

z

=

1

0

−1

.

Ambos sistemas tienen la misma matriz de coeficientes, A. Matricial-

mente, los dos sistemas equivalen a la igualdad A ·X = B, donde

X =

x1 x2

y1 y2

z1 z2

y B =

1 1

1 0

1 −1

.

10

Page 11: APUNTES DE MATLAB - UNLP

Podemos resolver los dos sistemas de un tiron procediendo como sigue

>> A=[2 1 1;1 2 1;1 1 2];

B=[1 1;1 0;1 -1];

A\B

ans

0.25 1

0.25 0

0.25 −1

.

Por otra parte, la instruccion B/A nos ofrece la solucion del

sistema

X · A = B.

Ejemplo. Resolver el sistema (xyz) · A = (101), siendo A la matriz

1 2 1

1 0 −1

2 1 1

.

>> A=[1 2 1;1 0 -1;2 1 1];

b=[1 0 1];

b/A

ans (x, y, z) = (−0.5− 0.51).

1.9. Matrices definidas mediante cajas

Cuando una matriz A se compone de cajas que ya hemos introducido,

se puede introcucir A de una manera mas comoda como muestra el ejemplo

siguiente.

Ejemplo. Supongamos que ya hemos introducido las matrices:

B =

(1

2

); C =

(−1 3

4 1

),

entonces la matriz

11

Page 12: APUNTES DE MATLAB - UNLP

A =

0 0 0 1 0

0 0 0 0 1

2 2 1 −1 3

2 2 2 4 1

,

se puede introducir como sigue

>>A=[zeros(2,3) eye(2,2);2*ones(2,2) B C]

Siempre que definamos una matriz por cajas deberemos tener en cuenta

las dos restricciones siguientes:

a) En cada nivel el numero de filas de las cajas es el mismo.

b) En todos los niveles el numero total de columnas es el mismo.

12

Page 13: APUNTES DE MATLAB - UNLP

Capıtulo 2

Graficos

2.1. Curvas planas

Si se desea obtener la grafica de la funcion y = y(x) en el intervalo

[a,b], debemos tener presente que Matlab dibuja las curvas punto a punto;

es decir, calcula los puntos (x, y(x)), para los valores de x que le indiquemos

y representa dichos puntos unidos por un segmento. Por ello, se empieza

estableciendo la matriz fila x cuyos elementos son los valores de x para los

que se computara el valor correspondiente de y(x). Lo usual sera tomar puntos

igualmente espaciados en el intervalo [a,b], incluyendo los extremos. Tomando

la distancia entre dos valores consecutivos de x convenientemente pequena,

el aspecto final sera el de una verdadera curva en lugar de una poligonal.

Ejemplo . Dibujar la curva de ecuacion y = xsenx en el intervalo [−2π, 2π].

>> x=linspace(-2*pi,2*pi,60); % Tomamos 60 valores de x igual

% mente espaciados en [−2π, 2π]

y=x.ˆ 2.*sin(x); % matriz fila con los valores de y(x)

plot(x,y)

Pulsando enter, se abre una ventana grafica con la curva. Se pueden dibu-

jar varias curvas en la misma ventana grafica. Si el intervalo de variacion de

x es el mismo, se puede proceder como se muestra en el ejemplo siguiente.

Ejemplo.Representar graficamente las curvas y1 = x2 e y2 = xex en el

13

Page 14: APUNTES DE MATLAB - UNLP

intervalo [-3,3].

>> x=linspace(-3,3,90);

y1=x.ˆ 2;y2=x.*exp(x);

plot(x,y1,x,y2)

De esta forma se consigue que se abra una ventana grafica con las dos

curvas. Otra forma de conseguir el mismo resultado consiste en usar

la orden hold on. Si ya tenemos una ventana grafica con una curva y

queremos dibujar una segunda curva en la misma ventana, ponemos

hold on y a continuacion las ordenes necesarias para dibujar la

segunda curva.

Si el intervalo donde se quiera dibujar cada curva no es el mismo, se puede

conseguir el mismo resultado de la forma siguiente. Se dibuja primero una de

las curvas, se teclea hold on y acto seguido se dibuja la otra

Ejemplo. Dibujar y = x en [-1,1] e y = xex en [0,2].

>> x1=-1:.1:1;

y1=x1;

plot(x1,y1)

hold on

x2=0:.1:2; y2=x2.*exp(x2);

plot(x2,y2)

Por el contrario, cuando ya se tiene una ventana grafica abierta y

se quiere dibujar una nueva curva en otra ventana grafica, pero sin

perder la primera ventana, tecleamos figure y se abre una ventana

grafica nueva donde podremos hacer la nueva representacion.

EJEMPLO. Supongamos que se desea obtener la grafica de f(x) = sen(x)/x,

para x ∈ [−2π, 2π]. Se presenta el problema de que para x = 0 no esta defini-

da la funcion, aunque lımx→0 f(x) existe y vale 1. Manejando adecuadamente

la variable eps, podemos evitar este problema.

>>x=linspace(-2*pi,2*pi,100);

t=x+eps;

y=sin(t)./t;

14

Page 15: APUNTES DE MATLAB - UNLP

plot(t,y)

y obtenemos

−8 −6 −4 −2 0 2 4 6 8−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Otras opciones de la funcion plot

1. Etiquetas sobre los ejes: el comando xlabel(’texto’) se usa para que en

el eje OX aparezca el texto que se desea. Analogamente, ylabel(’texto’) para

el eje OY. Para colocar cualquier cadena de texto en el punto que queramos

de la ventana grafica, se usa el comando text(x,y,’texto’), donde (x,y) son las

coordenadas del punto donde queremos situar el centro izquierda del texto. Si

usamos el comando gtext, entonces podemos colocar el texto donde queramos

con el propio raton.

2. Color de la curva y estilo de lınea: Se puede dibujar la curva del color

y con el estilo que se desee. Por ejemplo, si se escribe

>>plot(x,y,’.’,x,z,’- -’) De esta forma se consigue que la curva y = y(x)

aparezca con trazo punteado y la z = z(x) como una lınea de trazo discon-

tinuo.

Si se quiere escoger el color y estilo:

>> plot(x,y,’r - -’)

15

Page 16: APUNTES DE MATLAB - UNLP

la curva aparece en rojo y con lınea de trazo discontinuo. La siguiente tabla

muestra la sintaxis de los diferentes colores y tipo de lınea:

Sımbolo Color Sımbolo Estilo de lınea

y amarillo . lınea de puntos

m magenta ◦ cırculo

r rojo + mas

g verde ∗ estrella

b azul −− trazo discontinuo

k negro − lınea solida

Ejes a medida

Para fijar los valores maximo y mınimo de los ejes:

>>axis([xmin xmax ymin ymax])

Para que la escala sea la misma en ambos ejes:

>>axis equal o axis(’equal’)

Para que la grafica sea un cuadrado:

>>axis square

Si se quiere que aparezca una rejilla: grid on.

Dibujo de poligonales

Supongamos que se desea dibujar la poligonal de vertices (xi, yi) con

i = 1, .., n. Definirıamos las matrices fila x e y que contienen las coordenadas

correspondientes y el comando plot(x,y) dibuja la poliginal (recordar como

dibuja las curvas Matlab). Si la poligonal es cerrada, el ultimo vertice ha de

ser (x1, y1).

Ejemplo. Dibujar la poligonal cerrada de vertices (0, 0), (2, 1), (1, 3) y (−2, 2).

>>x=[0 2 1 -2 0];

y=[0 1 3 2 0];

plot(x,y)

y el resultado serıa

16

Page 17: APUNTES DE MATLAB - UNLP

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

0.5

1

1.5

2

2.5

3

OY

OX

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

2.2. El comando subplot

A veces nos interesara disponer en una misma ventana grafica de varias

subventanas para dibujar en cada una de ellas una curva distinta, con el

objetivo de poder compararlas mas comodamente. Veamos un ejemplo.

Ejemplo. Queremos dibujar en una misma ventana grafica las curvas y =

sen(kπx), para k = 1, ..., 4 y x ∈ [−4π, 4π], cada una en una subventana

diferente.

>>x=linspace(-4*pi,4*pi,240);

subplot(2,2,1)

plot(x,sin(pi*x))

subplot(2,2,2)

plot(x,sin(2*pi*x))

subplot(2,2,3)

plot(x,sin(3*pi*x))

subplot(2,2,4)

plot(x,sin(4*pi*x))

17

Page 18: APUNTES DE MATLAB - UNLP

Y se obtiene

−20 −10 0 10 20−1

−0.5

0

0.5

1

−20 −10 0 10 20−1

−0.5

0

0.5

1

−20 −10 0 10 20−1

−0.5

0

0.5

1

−20 −10 0 10 20−1

−0.5

0

0.5

1

En general, si se necesitan m×n subventanas, se tendra en cuenta que se

numeran de izquierda a derecha y de arriba hacia abajo. Cuando tecleamos

subplot(m,n,k), estamos indicando que vamos a dibujar en la subventana que

ocupa el lugar k. En el ejemplo anterior, todas las subventanas responden a

la forma subplot(2,2,k), porque tenıamos 4 curvas y parece lo mas adecuado

disponerlas en dos filas y dos columnas.

2.3. Coloreado de polıgonos

En la seccion anterior hemos visto como se dibuja una poligonal con

Matlab. Ahora vamos a ver como se colorea la region interior del color que

queramos.

18

Page 19: APUNTES DE MATLAB - UNLP

Ejemplo. Se desea dibujar las curvas y = x2 y x = y2 en el primer

cuadrante. La region que encierran debe aparecer en color rojo.

>> x=0:.1:1;

y1=x.ˆ2;y2=sqrt(x);

plot(x,y1,x,y2)

De esta forma se han dibujado las curvas en cuestion. Para colorear de rojo la

region encerrada, Matlab dispone de la funcion fill. Su sintaxis es la siguiente:

fill(x,y,’r’) (x e y son matrices fila que contienen las coordenadas x e y de

los vertices de la poligonal. El programa anterior se continuarıa de la forma

siguiente:

X=[x x];

y=[y1 y2];

fill(X,y,’r’)

0 0.2 0.4 0.6 0.8 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Si se desea escoger un color indicando las coordenadas (en el sistema

RGB) se escribe

>>fill(x,y,[r g b])

Los numeros r, g y b pertenencen a (0,1) y representan las proporciones en

que se deben tomar los colores principales (rojo, verde y azul) para crear el

color en cuestion.

19

Page 20: APUNTES DE MATLAB - UNLP

2.4. Curvas en polares

Empezamos recordando como se relacionan las coordenadas polares con

las cartesianas.

X

Y

O

P

w

r

Vemos en la figura que ω es el an-

gulo que forman el vector de posicion

del punto P con la direccion positiva

del eje OX y r es el modulo de di-

cho vector. Por un lado, el Teorema

de Pitagoras nos dice que r2 = x2 + y2

y, por otro, usando las definiciones de

sen ω y cos ω, obtenemos x = r cos ω

e y = r sen ω. Si de una curva plana

sabemos que las coordenadas polares

de sus puntos, (r, ω), verifican la igualdad r = r(ω), para ω ∈ [ω1, ω2], diremos que r = r(ω) es la ecuacion de

la curva en coordenadas polares. La ecuacion de la circunferencia unidad

en cartesianas es x2 + y2 = 1 y en coordenadas polares r = 1. En general,

para obtener la ecuacion en polares, conocida la ecuacion de una curva en

cartesianas, basta sustituir en esta ultima ecuacion x e y por r cos ω y r sen ω,

respectivamente.

Ejemplo. Dibujar la curva de ecuacion r = 1 + cos ω, para 0 ≤ ω ≤ 2π.

Por comodidad, vamos a usar w en lugar de ω.

>> w=linspace(0,2*pi,60);

r=1+cos(w);

polar(w,r)

pulsando enter se abre una ventana grafica que muestra la curva siguiente

(denominada cardioide).

20

Page 21: APUNTES DE MATLAB - UNLP

0.5

1

1.5

2

30

210

60

240

90

270

120

300

150

330

180 0

2.5. Curvas en el espacio

Supongamos que se quiere dibujar la curva de ecuaciones parametricas

x = cos t, y = sen t, z = t, para t ∈ [0, 6π]. Podemos usar el comando plot3 o

el comando ezplot3.

a) Con plot3:

>>t=linspace(0,6*pi,150);

plot3(cos(t),sin(t),t)

grid on

y el resultado es

21

Page 22: APUNTES DE MATLAB - UNLP

−1−0.5

00.5

1

−1

−0.5

0

0.5

10

5

10

15

20

b) Con ezplot3:

ezplot3(’cos(t)’,’sin(t)’,’t’, [0,6*pi])

Terminamos esta seccion indicando como puede conseguirse que aparez-

can los vectores tangentes al dibujan curvas en parametricas .

Ejemplo. Representar la curva de ecuaciones parametricas

x = cos(t), y = sen(t), t ∈ [0, pi].

>>t=linspace(0,pi,30);

plot(cos(t),sin(t))

Si se quiere que aparezcan los vectores tangente, se usa la funcion quiver.

>>t=linspace(0,pi,30);

plot(cos(t),sin(t))

hold on

>> t=linspace(0,pi,10);%Dibujamos el vector tangente en solo 10 puntos

% intermedios de la curva

quiver(cos(t),sin(t),-sin(t),cos(t))

y se obtiene

22

Page 23: APUNTES DE MATLAB - UNLP

−1.5 −1 −0.5 0 0.5 1 1.5−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

1.2

2.6. Superficies

Para dibujar una superficie de ecuacion z = z(x, y), se comienza por

establecer los intervalos de variacion de x e y. Con la orden [x,y]=meshgrid(-

2:.1:2;-1:.1:1) Matlab crea una matriz x con todas sus filas iguales a -2:.1:2 y

una matriz y con todas sus columnas iguales a -1:.1:1. De este modo resultan

dos matrices con la misma dimension. Veamos un ejemplo simple. Considera-

mos la funcion z = x2 + y2 y escribimos la orden

>> [x,y]=meshgrid(-1:.5:1,0:.5:1);

que produce las matrices

x =

−1 −.5 0 .5 1

−1 −.5 0 .5 1

−1 −.5 0 .5 1

, y =

0 0 0 0 0

.5 .5 .5 .5 .5

1 1 1 1 1

De esta forma, cuando escribamos z=x.ˆ2+y.ˆ2 en la ventana de coman-

dos, z sera la matriz 3× 5 que contiene los valores de z en todos y cada uno

de los puntos (x, y) con x igual a uno de los valores -1,-.5,0,.5,1 e y igual a

uno de los valores 0,.5,1.

Ejemplo. Dibujar la superficie z =√

x2 + y2 en el dominio [−3, 3]×[−3, 3]

23

Page 24: APUNTES DE MATLAB - UNLP

>>[x,y]=meshgrid(-3:.1:3,-3:.1:3);

z=sqrt(x.ˆ2+y.ˆ2);

surf(x,y,z)

Ademas de la orden surf(x,y,z), para dibujar una superficie, podemos

emplear plot3(x,y,z) o mesh(x,y,z) (la diferencia con surf es que esta rellena

los espacios entre lıneas).

La orden rotate3d permite girar la superficie con el raton. La or-

den colormap permite cambiar el color de la superficie. Hay diversas opciones:

colormap(pink), colormap(summer),colormap(winter), etc.

En ele ejemplo siguiente mostramos como se dibuja una superficie plana

paralela a z = 0.

Ejemplo. Dibujar la superficie z = 3 en el primer octante.

>> [x,y]=meshgrid(-4:.1:4,-4:.1:4);

[m,n]=size(x);% Recordar lo que hemos dicho sobre el comando meshgrid,

% usamos size(x) para determinar las dimensiones de x de una manera se-

gura.

z=3*ones(m,n);

surf(x,y,z)

−4−2

02

4

−4

−2

0

2

42

2.5

3

3.5

4

24

Page 25: APUNTES DE MATLAB - UNLP

2.7. Curvas de nivel

Supongamos que hemos dibujado una superficie, z = f(x, y), y queremos

que en el plano z = 0 aparezcan dibujadas las curvas de nivel. Podemos

proceder como sigue

>>hold on

contour(x,y,z,[c1,c2,c3,...,cn])

y aparecen representadas las curvas de nivel f(x, y) = ci, para i = 1, .., n.

Ejemplo. Representar la superficie de ecuacion z = x2 + y2, para (x, y) ∈[−2, 2] × [−2, 2]. Ademas, deseamos que aparezcan representadas las curvas

de nivel f(x, y) = c, para c = 1, 2, 3.

>>[x,y]=meshgrid(-2:.1:2,-2:.1:2);

z=x.ˆ2+y.ˆ2;

surf(x,y,z)

hold on

contour(x,y,z,[1,2,3])

y se obtiene

−2−1

01

2

−2

−1

0

1

20

2

4

6

8

Si solo se buscan las curvas de nivel (no se necesita dibujar la superficie),

basta escribir

>>[x,y]=meshgrid(-2:.1:2,-2:.1:2);

z=x.ˆ2+y.ˆ2;

25

Page 26: APUNTES DE MATLAB - UNLP

contour(x,y,z,[1,2,3])

y se obtiene

−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

Si se quiere que aparezcan etiquetas sobre cada curva de nivel que reflejen

el valor de la constante c, se usa la funcion clabel

>>[x,y]=meshgrid(-2:.1:2,-2:.1:2);

z=x.ˆ2+y.ˆ2;

clabel( contour(x,y,z,[1,2,3]) )

resultando

1

2

3

−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

26

Page 27: APUNTES DE MATLAB - UNLP

Cuando necesitamos representar una superficie y deseamos que aparezcan

las curvas de nivel, hay una forma muy comoda que consiste en emplear la

funcion surfc(x,y,z).

Ejemplo. Grafica de la superficie z =√

x2 + y2 con las corrspondientes

curvas de nivel.

>>[x,y ]=meshgrid(-2:.1:2,-2:.1:2);

z=sqrt(x.ˆ2+y.ˆ2);

surfc(x,y,z)

y resulta

−2−1

01

2

−2

−1

0

1

20

0.5

1

1.5

2

2.5

3

2.8. ¿Como exportar graficos?

a) Word. Una vez que tenemos el grafico en la ventana grafica, vamos a

Edit (en le ventana grafica) y hacemos clic en Copy figure. A continuacion

abrimos el documento word y pegamos.

b) Latex. Primero debemos salvar el grafico de forma adecuada. Vamos a

File (en la ventana grafica) y hacemos clic en Save as. Se abre una ventana

(Save as) en la que debemos dar el nombre con que vamos a designar el archivo

que contendra el grafico. Automaticamente, Matlab le anade la extension

que corresponda. Normalmente, elegiremos el tipo EPS file, en cuyo caso

la extension que Matlab anade es eps. Ahora es el momento de guardar el

27

Page 28: APUNTES DE MATLAB - UNLP

archivo creado, nombre.eps, en la carpeta que contiene el archivo Latex donde

queremos incluir el grafico. Ahora debemos preparar el archivo Latex, lo que

exige realizar los siguientes dos pasos

1) En el archivo principal y antes de la instruccion \begin{document},debemos incluir

\usepackage{graphicx}2) En el lugar donde vamos a incluir el grafico:

\begin{center}\includegraphics[width=5cm,height=6cm]{nombre.eps}\end{center}

28

Page 29: APUNTES DE MATLAB - UNLP

Capıtulo 3

Programacion

3.1. Archivos .M

Vamos a ver que podemos crear dos tipos de archivos con extension .m,

que llamaremos archivos .M. Se denominan archivos de funcion y archivos de

guion (o de instrucciones). Con los primeros podemos definir nuevas funciones

que se anadiran a las que ya trae Matlab (como sin(x), exp(x),sqrt(x),etc.).

Los archivos de instrucciones se llaman ası porque pueden consistir en una

serie de instrucciones a ejecutar. Veremos que en estos puede ocurrir que en el

momento de su ejecucion nos pida una serie de valores (inputs). En todos los

casos, se debera ir a File-New-M-File y aparece una ventana (Editor-Untitled)

donde podemos escribir el programa correspondiente. Una vez terminado,

vamos a File de dicha ventana y hacemos clic en Save As y podemos guardar

el archivo .M con el nombre que le hayamos dado (nombre.m).

3.2. Archivos de funcion

Las dos primeras lıneas de un archivo de funcion tienen la forma

function [y,z,..]=nombre(a,b,..)

% Una explicacion que sirva para reconocer la funcion en cualquier otro

29

Page 30: APUNTES DE MATLAB - UNLP

momento

a,b,.. denotan las variables de entrada (las variables independientes),

mientras que y,z,.. son las variables de salida (dependientes), en ambos casos

separadas por comas. A continuacion van todas las ordenes que se necesitan

para definir la nueva funcion.

Ejemplo. Crear un archivo de funcion cuya entrada sea una matriz fila x

y cuyas salidas sean la media de x y su desviacion tıpica.

function [media,dest]=estadisticos(x)

% Esta funcion determina la media y la desviacion tıpica de una fila x

n=length(x);

media=sum(x)/n;

s=0;

for k=1:n

s=s+(x(k)-media)ˆ2;

end

dest=sqrt(s/n);

[media,dest]

El nombre de todo archivo de funcion debe coincidir con el nom-

bre de la funcion y tiene extension .m. En nuestro caso, serıa: nom-

bre.m. El nombre de la funcion debe empezar con una letra y, para

evitar confusiones, debemos asegurarnos que no coincide con el

nombre de alguna de las funciones de que dispone Matlab.

3.3. Calculo de integrales usando un archivo

de funcion

Vamos a ver una forma de calcular integrales simples y reiteradas creando

un archivo de funcion con el integrando. Este metodo nos servira, ademas,

para resolver otro tipo de problemas que tienen en comun que necesitamos

hacer manipulable una funcion.

30

Page 31: APUNTES DE MATLAB - UNLP

El primer paso consiste en crear un archivo de funcion con una funcion que

iremos cambiando en cada problema concreto. Este archivo puede llamarse

f.m.

Ejemplo. Deseamos calcular

∫ 1

0

ex2

dx.

Creamos el archivo f.m:

function y=f(x)

%y=F(x) es el integrando de una integral simple

y=exp(x.ˆ2);

Ahora usamos la funcion quad para calcular una integral simple.

>>integrando=@f;% Hacemos manipulable la funcion

quad(integrando,0,1)

ans 1.4627

Veamos ahora como se determina una integral reiterada con la funcion

dblquad.

Ejemplo. Calcular

∫ 1

0

[ ∫ 1

−1

xy dx]dy.

En primer lugar, creamos un archivo de funcion con el integrando:

function z=fun(x,y)

% z=FUN(x,y) es el integrando de una integral reiterada

z=x.*y;

Finalmente, usamos la funcion dblquad:

>>integrando=@fun;

a=dblquad(integrando,xmin, xmax, ymin, ymax)

ans 1.2309e-017

En nuestro caso, xmin = −1, xmax = 1, ymin = 0 e ymax = 1.

Finalizamos esta seccion indicando que si necesitamos evaluar f(a) y

disponemos de un archivo de funcion f.m con la funcion y = f(x), pode-

mos usar la funcion feval:

g=@f;

feval(g,a)

y, pulsando enter, obtenemos el valor f(a).

31

Page 32: APUNTES DE MATLAB - UNLP

3.4. La funcion fplot

Para dibujar la curva y = y(x) con el comando fplot, debemos crear un

fichero de funcion con la funcion y(x). Supongamos que a este fichero le hemos

llamado fun.m. Para manipular la funcion, pondremos f=@fun. Veamos esto

con un ejemplo.

Ejemplo. Usar fplot para dibujar la curva y = x2 sen x

Empezamos creando un archivo de funcion para y(x):

function y=fun(x)

y=x.ˆ2.*sin(x);

Una vez creado este archivo con la funcion, procedemos a dibujar la curva

y = y(x) con fplot

>>f=@fun;

fplot(f,[xmin,xmax])

grid on

Si se quiere que la grafica recoja con mayor detalle el intervalo [ymin,ymax]

>>fplot(f,[xmin,xmax ymin ymax])

Ejemplo.Dibujar la curva y = x2 sen x en [−π, π] con un zoom en [1,4].

>>f=@fun;

fplot(f,[-pi,pi,1,4])

Al pulsar enter, obtenemos

32

Page 33: APUNTES DE MATLAB - UNLP

−3 −2 −1 0 1 2 31

1.5

2

2.5

3

3.5

4

Otra forma de manejar la funcion fplot es la siguiente

>>fplot(’x*sin(x)’,[0,2])

Con la funcion fplot tambien se pueden dibujar dos curvas a la vez

>>fplot(’[x*sin(x),xˆ3]’,[-1,1])

y resulta

−1 −0.5 0 0.5 1−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

33

Page 34: APUNTES DE MATLAB - UNLP

3.5. Archivos de instrucciones

En Programacion nos encontramos a menudo con la necesidad de ejecutar

varias veces una misma serie de instrucciones. Por ello, puede resultar conve-

niente crear un archivo de guion con dichas instrucciones, al que podremos

recurrir cada vez que lo necesitemos. El nombre de uno de tales archivos solo

tiene la restriccion, como ocurre con los archivos de funcion, de que debe

comenzar por una letra. La estructura de estos archivos es la siguiente:

Una primera linea explicativa que describa brevemente el objetivo del

archivo. Esta lınea de comentarios debe comenzar con%. De esta forma se

consigue que el ordenador no considere esta lınea.

A continuacion se escriben todas las instrucciones que deben ejecutarse

en el orden que corresponda.

Ejemplo. Vamos a crear un archivo de guion (que llamaremos raices) y que

nos pedira los coeficientes de una ecuacion de segundo grado y determinara

las raıces reales cuando las haya. Usaremos el comando if que se estudiara

con mas detenimiento mas adelante.

% encuentra las raıces de una ecuacion de segundo grado ax2 + bx+ c = 0

y nos pide a,b y c

a=input(’dame a’);

b=input(’dame b’);

c=input(’dame c’);

Delta=bˆ2-4*a*c;

if Delta>=0

[x1,x2]=[-b/(2*a)+sqrt(Delta)/(2*a),-b/(2*a)-sqrt(Delta)/(2*a)]

end

Este archivo funciona de la siguiente forma: Cuando tecleamos raices el

ordenador nos pide sucesivamente los valores de a, b y c. Calcula el discrimi-

nante de la ecuacion, Delta, y, al encontrarse con el comando if, si Delta no

es negativo, procede a calcular las raıces. Si Delta es negativo, no nos da

ningun resultado, pues no ejecuta las instrucciones que hay entre if y end.

34

Page 35: APUNTES DE MATLAB - UNLP

3.6. Subfunciones

Un archivo de funcion puede contener el codigo de mas de una funcion.

La primera funcion (la funcion principal) que aparece en el archivo es la que

da el nombre a este y las otras se llamaran subfunciones (solo son visibles

para la funcion principal o para otra subfuncion en el mismo archivo.

Ejemplo. Un archivo de funcion que determina la media y la mediana de

un vector fila.

function [media,mediana]=estadistico(v)

% Estadistico encuentra la media y la mediana con subfunciones internas

n=length(v);

media=med(v,n);

mediana=medn(v,n);

function a=med(v,n)

% Calcula la media

a=sum(v)/n;

function b=medn(v,n)

%Calcula la mediana

w=sort(v);

if rem(n,2)==1

b=w((n+1)/2);

else

b=(w(n/2)+w((n/2)+1))/2;

end

3.7. Operadores y Funciones logicas

A) OPERADORES. Matlab posee operadores de tres clases: aritmeti-

cos, de relacion y logicos.

1) Operadores aritmeticos. Realizan computaciones numericas (sumas,

productos, etc.)

35

Page 36: APUNTES DE MATLAB - UNLP

2) Operadores de relacion. Comparan cuantitativamente dos expre-

siones. Matlab posee los siguientes:

< menor que

<= menor o igual que

> mayor que

>= mayor o igual que

== igual que

∼= no igual a

Si se usa uno de estos operadores para comparar dos matrices o vectores,

entonces la comparacion se hace elemento a elemento. Si se emplean para

comparar un escalar con un vector o matriz, entonces se compara el escalar

con cada elemento del vector o matriz.

Ejemplo. Consideremos las matrices

A =

1 2 1

0 1 −1

2 1 2

, B =

0 2 0

0 1 4

1 0 2

.

si ponemos

>>A==B

produce la matriz

0 1 0

0 1 0

0 0 1

,

es decir, la matriz con un 1 en las posiciones donde los elementos de ambas

matrices coinciden y un 0 en los restantes.

Operadores logicos. Matlab emplea los tres operadores logicos siguientes:

&, | y ∼. Cuando operan sobre una matriz, lo hacen elemento a elemento.

Cualquier numero no nulo se considera como verdadero y el cero como falso.

Consideremos, por ejemplo, la instrucciones siguientes:

>>A=[1 0;2 1];

B=[4 0;1 3];

36

Page 37: APUNTES DE MATLAB - UNLP

C=A& B

ans

(1 0

1 1

).

Es decir, produce una matriz con unos y ceros , segun que los elementos

correspondientes de A y B sean no nulos o uno de ellos, al menos, nulo,

respectivamente. Si escribimos A(C), Matlab produce una columna con los

elementos de A que se corresponden con los unos de C (por columnas, de

arriba abajo y de izquierda a derecha). Concretamente, obtenemos

A(C) =

1

2

1

.

B) FUNCIONES LOGICAS.

find. Esta funcion determina los ındices de una matriz que verifican deter-

minada expresion logica. Es muy util para crear filtros o matrices de ındices.

Ejemplo. Sustituir en la matriz A = magic(4) los elementos mayores que

8 por 100.

>>A=magic(4)

ans

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

i=find(A>8);

A(i)=100

A

ans

100 2 3 100

5 100 100 8

100 7 6 100

4 100 100 1

.

Si se suprime el punto y coma al final de la lınea i=find(A>8), en pantalla

se despliega el valor de i y vemos que se trata de una matriz columna con los

37

Page 38: APUNTES DE MATLAB - UNLP

ındices de los elementos de A que superan a 8. Los ındices de A se numeran

por columnas de izquierda a derecha y de arriba abajo.

all. Si x es un vector con todas sus componentes no nulas, all(x) es igual

a 1; en otro caso su valor es cero. Si A es una matriz, all(A) es una matriz

fila de unos y ceros, que no es otra cosa que el resultado de aplicar all a cada

columna de A (de izquierda a derecha).

any. Si x es un vector con alguna componente no nula, entonces any(x)

produce un uno. Por el contrario, si x es nulo, el valor de any(x) tambien es

cero. Sobre una matriz actua como en el caso de all.

xor. Si x e y son vectores, xor(x,y) es un vector fila de ceros y unos,

obtenido de la siguiente forma. Si en determinada posicion, solo uno de los

dos vectores tiene componente no nula, entonces xor(x,y) tiene un uno en

dicha posicion. En cualquier otro caso, tiene un cero.

3.8. Control de flujo

Normalmente, Matlab va realizando las instrucciones de un programa en

el orden que las hemos escrito. No obstante, hay varias formas de conseguir

que este orden no se respete:

- If, junto con else y elseif, ejecuta un grupo de instrucciones dependiendo

de que cierta expresion logica sea cierta o no.

- While ejecuta un grupo de instrucciones un numero indefinido de veces

que depende de que cierta expresion logica se verifique o no.

- For ejecuta un grupo de instrucciones un numero establecido de veces.

- Break termina la ejecucion de un for o while.

- Switch, junto con case y otherwise, ejecuta diferentes grupos de instruc-

ciones dependiendo del valor de alguna condicion logica.

- Continue pasa el control a la siguiente iteracion de un for o while, igno-

rando cualquier instruccion posterior (del for o while en cuestion).

38

Page 39: APUNTES DE MATLAB - UNLP

3.9. If, else y elseif

If evalua una expresion logica y ejecuta un grupo de instrucciones si la

expresion logica es verdadera. La forma mas simple es la siguiente

>> if expresion logica

instrucciones

end

Ejemplo. Supongamos que queremos obtener las raıces de una ecuacion

de segundo grado ax2 + bx + c = 0.

Podemos crear un archivo de instrucciones que nos pida los coeficientes

a, b y c y determine las raıces, una vez que haya comprobado que son reales.

Le daremos el nombre raices.m.

>>% raices determina las raıces de ax2 + bx + c = 0, nos pide los coefi-

cientes

a=input(’dame coefic de xˆ’);

b=input(’dame coefic. de x’);

c=input(’dame ter.indep’);

Delta = bˆ2-4*a*c;

if Delta<0

disp(’no hay raıces reales’)

end

[x1,x2]=[(-b+sqrt(Delta))/2*a,(-b-sqrt(Delta))/2*a]

Para entender como funciona elseif y else, consideramos el mismo ejemplo

anterior, pero vamos a establecer distintas salidas, segun sea el valor de Delta.

>>% raices1 determina las raıces de ax2 + bx + c = 0, nos pide los coefi-

% cientes

a=input(’dame coefic de xˆ’);

b=input(’dame coefic. de x’);

c=input(’dame ter.indep’);

Delta = bˆ2-4*a*c;

if Delta<0

disp(’no hay raıces reales’)

39

Page 40: APUNTES DE MATLAB - UNLP

elseif Delta>0

[x1,x2]=[(-b+sqrt(Delta))/2*a,(-b-sqrt(Delta))/2*a]

else

x=-b/(2*a)

disp(’raız doble’)

end

elseif evalua la expresion logica que aparece en su misma lınea si if o los

anteriores elseif resultan falsos. Si dicha expresion logica es verdadera se

ejecutan las instrucciones siguientes hasta el proximo elseif o else.

Por el contrario, else no lleva expresion logica a evaluar y matlab realiza

las instrucciones siguientes hasta end si las expresiones logicas de if y los

elseif anteriores so falsos. La forma general de un if es la siguiente:

>>if expresion logica

instrucciones

elseif expresion logica

instrucciones

elseif expresion logica

instrucciones

————-

————–

elseif expresion logica

instrucciones

else

instrucciones

end

3.10. For

La sintaxis es la siguiente:

>>for ındice=inicio:incremento:final

instrucciones

40

Page 41: APUNTES DE MATLAB - UNLP

end

Si el incremento es la unidad, no hace falta indicarlo.

Ejemplo. Crear un archivo de funcion para determinar n!.

Vamos a File-New para abrir un nuevo archivo .M y escribimos

function y=factorial(n)

% Esta funcion determina el factorial de un natural N

y=1;

for k=1:n

y=y*k

end

Ejemplo. Construir una matriz A, n×m, tal que aij = 1/(i + j − 1).

for i=1:n

for j=1:m

A(i,j)=1/(i+j-1);

end

end

3.11. while

Su sintaxis es la siguiente:

>>while expresion

instrucciones

end

Mientras que la expresion que controla el while sea verdadera, se ejecutan

todas las instrucciones comprendidas entre while y end.

Ejemplo. Calcular el primer natural n tal que n! es un numero con 100

dıgitos.

>>n=1;

while prod(1:n)<1e100

n=n+1;

end

41

Page 42: APUNTES DE MATLAB - UNLP

3.12. Break

Esta instruccion se usa para terminar un for o un while antes de que

se haya completado la ejecucion. Si este no es el caso, se usara el comando

return.

Ejemplo. Supongamos que se desea determinar un vector v con un numero

de componentes menor o igual que 10 y que verifique: a) sus componentes

son de la forma 24-kˆ2 y b) son no negativas.

>>for k=1:10

w(k)=24-kˆ2;

if w(k)<0

break

end

end

El programa anterior determina un vector de la forma w = (23, 20, 15, 8,−1).

Es decir, el for se termina cuando k = 5 y w(5) = −1, pues la expresion logica

del if, w(k) < 0 es cierta y Matlab ejecuta la instruccion break que termina

el for, aunque no se ha llegado al final (k = 10). El vector buscado serıa

>>n=length(w);

v=w(1:n-1);

Es decir, basta eliminar la ultima componente de w.

3.13. Continue

Este comando pasa el control a la siguiente iteracion en un for o un while,

sin realizar las instrucciones siguientes que pueda haber antes de end.

Ejemplo. Determinar un vector y cuyas componentes sean de la forma

sen x/x, para x = −1 : .1 : 1, exceptuando x = 0.

>>k=0;

for x=-1:.1:1

if x==0

42

Page 43: APUNTES DE MATLAB - UNLP

continue

end

k=k+1;

y(k)=sin(x)/x;

end

3.14. Switch

La sintaxis es como sigue

switch expresion%(o variable)

case valor1

instrucciones%(se ejecutan si el valor de expresion es valor1

case valor2

instrucciones%(se ejecutan si el valor de expresion es valor2)

———-

otherwise

instrucciones%(se ejecutan si el valor de expresion no es ninguno de los

valores de cada caso)

end

Ejemplo. Supongamos que una variable escalar se llama var. Si el valor

de var es -1, debe aparecer en pantalla el texto ”uno negativo”; si el valor es

0, queremos que aparezca en pantalla el texto ”cero”; Si el valor de var es 1,

debe aparecer en pantalla el texto ”uno positivo”. Finalmente, si el valor de

var es cualquier otro, debe aparecer el texto ”otro valor”.

>>switch var

case -1

disp(’uno negativo’)

case 0

disp(’cero’)

case 1

disp(’uno positivo’)

43

Page 44: APUNTES DE MATLAB - UNLP

otherwise

disp(’otro valor’)

end

Si el valor de var es 2, aparecera en pantalla el texto ”otro valor”.

44

Page 45: APUNTES DE MATLAB - UNLP

Capıtulo 4

Calculo Simbolico

4.1. Variables simbolicas

Las variables simbolicas se crean con la instruccion syms. Una vez declaradas

las variables simbolicas, se pueden definir funciones simbolicas. Por ejemplo

>>syms x a

f=x*sin(x/a);

Notese que en el calculo simbolico se prescinde del punto que se anteponıa

con algunas operaciones para indicar que dicha operacion se hacıa coordenada

a coordenada. Si en algun momento dudamos si una funcion es de datos o

simbolica se puede recurrir a la instruccion class. Si tecleamos

>>class(x)

y pulsamos enter, obtenemos

ans sym

que nos advierte de que x es una variable simbolica.

4.2. Derivacion e integracion

1) CALCULO DE DERIVADAS. Para calcular derivadas, Matlab dispone

de la funcion diff. Supongamos que se quiere calcular la derivada tercera de

45

Page 46: APUNTES DE MATLAB - UNLP

f(x) = x3 sen(x/a). Se procede como sigue:

>>syms x a

f=xˆ3*sin(x/a);

d3f=diff(f,3)

En pantalla aparece la derivada tercera de f escrita a la manera de Mat-

lab. Si se quiere que aparezca expresada de la forma usual, se puede usar la

instruccion pretty:

>>syms x a

f=xˆ3*sin(x/a);

d3f=diff(f,3)

pretty(d3f)

Para calcular la derivada primera de f basta escribir diff(f).

2) CALCULO DE PRIMITIVAS. Para calcular una primitiva de una

funcion f , se dispone de la funcion int.

Ejemplo. Calcular∫

xsenx dx.

>>syms x

f=x*sin(x);

F=int(f)

3) CALCULO DE INTEGRALES DEFINIDAS.

Ejemplo. Calcular

∫ 2

0

xex dx.

>>syms x

f=x*exp(x);

I=int(f,x,0,2)

ans exp(2)+1

Si se desea obtener el resultado en forma decimal y con un numero preciso

de decimales, se usa la instruccion vpa(I,n), donde n es el numero total de

dıgitos para representar el valor de I. Si ponemos

>>vpa(I,5)

ans 8.3891

En realidad, no es necesario indicar la variable independiente x y basta

poner I = int(f,0,2).

46

Page 47: APUNTES DE MATLAB - UNLP

4.3. Calculo de lımites

Para el calculo de lımites, Matlab dispone de la funcion limit.

Ejemplo. Calcular lımh→0

sen(x + h)− sen x

h.

>>syms x h

f=(sin(x+h)-sin(x))/h;

a=limit(f,h,0)

ans cos(x)

Ejemplo. Calcular lımx→0+

sen√

x√x

.

>>syms x

f=sin(sqrt(x))/sqrt(x);

limit(f,x,0,’right’)

Ejemplo. Calcular lımx→∞

x

ex2 .

>>syms x

f=x/exp(xˆ2);

limit(f,x,inf)

4.4. El polinomio de Taylor

Para determinar el polinomio de Taylor de una funcion f , de orden n

en el punto x = a, Matlab dispone de la funcion taylor, cuya sintaxis es:

taylor(f,n+1,a). Notese que, si desea el polinomio de orden n, en la funcion

taylor se indica n + 1, que es el numero de terminos de que consta dicho

polinomio.

Ejemplo. Determinar el polinomio de Taylor de f(x) = (x + 1) sen(x2) de

orden 3 en el origen

>>syms x

f=(x+1)*sin(xˆ2);

taylor(f,4,0)

ans x2 + x3.

47

Page 48: APUNTES DE MATLAB - UNLP

Matlab dispone de otra funcion para obtener el polinomio de taylor. Se

trata de la funcion taylortool que nos abre una ventana grafica donde apare-

cen la grafica de la funcion y del polinomio de taylor. Ademas, permite ir

cambiando el orden del polinomio, el punto x = a, etc, manipulando ade-

cuadamente los correspondientes ”botones”.

−6 −4 −2 0 2 4 6−15

−10

−5

0

5

10

15

Taylor Series Approximation

TN

(x) = x2+x3−1/6 x6−1/6 x7

La grafica de la funcion aparece en trazo continuo de color azul. Pulsando

en el boton N se puede ir cambiando el orden del polinomio.

4.5. Resolucion de ecuaciones algebraicas

Para encontrar las soluciones de una ecuacion o (sistema) algebraica, Mat-

lab dispone de la funcion solve.

Ejemplo. Resolver la ecuacion x3 + x + 1 = 0.

>>solve(’xˆ3+x+1=0’)

vpa(ans,4)

-0.6826

0.3411-1.162 i

48

Page 49: APUNTES DE MATLAB - UNLP

0.3411+1.162 i

Ejemplo. Resolver el sistema x + 2y = 1, 2x− 3y = 2.

>>[x,y]=solve(’x+2*y=1’,’2*x-3*y=2’)

ans x=1, y=0.

Tambien puede usarse solve para despejar una variable en una igualdad.

Ejemplo. Despejar b en la igualdad 3ab + c = 1.

>>solve(’3*a*b+c=1’,’b’)

ans b=(1-c)/3a.

4.6. Raıces de ecuaciones arbitrarias

Para ecuaciones generales, Matlab dispone de la funcion fzero. Puede

usarse de dos formas diferentes.

a) Si somos capaces de determinar un intervalo [a,b] que contenga la raız

que buscamos.

Ejemplo. Encontrar en el intervalo [π/6, π] una raız de la ecuacion sen x−x2 = 0.

Sea f(x) = sen x − x2. Como f(π/6) = π2/36 − 1/2 = −0.2258 < 0 y

f(π) = π2 > 0, el Teorema de Bolzano nos asegura que hay una raız de

la ecuacion en el intervalo en cuestion. Para encontrarla, procedemos como

sigue

>>fzero(’sin(x)-xˆ2’,[pi/6,pi])

ans 0.8767.

b) Partiendo de un valor cercano. La funcion fzero tambien puede encon-

trar una raız de una ecuacion a partir de un valor cercano.

Ejemplo. Determinar una raız de la ecuacion anterior con el dato x0 = π.

>>fzero(’sin(x)-xˆ2’,pi)

ans 0.8767.

49

Page 50: APUNTES DE MATLAB - UNLP

4.7. Resolucion de ecuaciones diferenciales

Vamos a ver como se emplea la funcion dsolve para resolver ecuaciones

diferenciales.

a) La integral general de una ecuacion diferencial. Supongamos que se

desea resolver la ecuacion diferencial

y′ = 1 + y2.

>>y=dsolve(’Dy=1+yˆ2’,’x’)

ans y = tg(x + c1).

Si no se indica la variable independiente ’x’, Matlab nos da la respuesta

con la variable t: y = tg(t + c1).

b) Una integral particular. Supongamos que buscamos la solucion de la

ecuacion

y′′′ − 3y′′ + 3y′ − y = 0

que verifica las condiciones iniciales y′′(0) = 1, y′(0) = 0, e y(0) = 0.

>>y=dsolve(’D3y-3*D2y+3*Dy-y=0’,’D2y(0)=1’,’Dy(0)=0’,’y(0)=0’,’x’)

ans y = 1/2x2ex.

4.8. Sustitucion y evaluacion de expresiones

Empezaremos estudiando como se sustituyen en una expresion simbolica

unas variables por otras expresiones simbolicas.

Ejemplo. Sustituir en (x− 2)2 + y2 − 1 x e y por cos(t) y sen(t), respec-

tivamente.

>>syms x y t

f=(x-2)ˆ2+yˆ2-1;

g=subs(f,{x,y},{cos(t),sin(t)});g

ans (cos(t)− 2)2 + sen2(t)− 1

Si queremos obtener una expresion simplificada de g

50

Page 51: APUNTES DE MATLAB - UNLP

simple(g)

ans -4*cos(t) +4.

4.9. La Transformada de Laplace

Para encontrar la transformada de Laplace se usa la funcion laplace. Si

no se indica otra cosa, expresa la transformada en funcion de la variable s.

Ejemplo. Encontrar la transformada de f(y) = y5.

>>syms y

laplace(yˆ5)

ans 120/s6

Si la funcion tiene por variable s, entonces Matlab nos da la transformada

con variable dependiente t.

Ejemplo. Encontrar la transformada de Laplace de f(s) = sen(as).

>>syms a s

laplace(sin(a*s))

ans a/(t2 + a2).

Si se desea que la variable dependiente de la transformada sea la que

nosotros determinemos, por ejemplo p, se procede como sigue.

Ejemplo. Encontrar la transformada de f(x) = cos(ax).

>>syms a x p

laplace(cos(a*x),p)

ans p/(p2 + a2).

Funcion delta de Dirac:

>>syms t

laplace(dirac(t-2))

ans e−2s.

Funcion escalon unidad de Heaviside:

>>syms t

laplace(heaviside(t-3))

ans e−3s/s.

51

Page 52: APUNTES DE MATLAB - UNLP

Transformada de la derivada:

>>syms t

laplace(diff(sym(’F(t)’)))

ans s*laplace(F(t),t,s)-F(0).

4.10. La transformada inversa

La transformada inversa se obtiene con la funcion ilaplace. Por defecto,

expresa la funcion con variable dependiente t.

Ejemplo. Encontrar la transformada inversa de F (p) = 6/p4.

>>syms p

ilaplace(6/pˆ4)

ans t3.

Se puede conseguir que la variable dependiente de la funcion sea la que

queramos, por ejemplo, x.

Ejemplo. Transformada inversa de F (p) = 1/(p− 1).

>>syms p x

ilaplace(1/(p-1),p,x)

ans ex.

52