Sunteți pe pagina 1din 111

UNIDAD I

DETERMINANTES Y MATRICES

CONCEPTOS ASOCIADOS:

El origen de los determinantes surge al tratar de expresar en forma breve las soluciones de un
sistema de ecuaciones.
Por ejemplo:
ax  by  m

cx  dy  n
Por reducción tenemos:

Multiplicando la 1ª por d: adx + bdy = md


Multiplicando la 2ª por b: cbx + dby = nb
Restando la 1ª y la 2ª: (ad – cb)x = md - nb

md  nb
Despejando: x
ad  cb

Multiplicando la1ª por c: acx + bcy = mc


Multiplicando la 2ª por a: cax + day = na
Restando 2ª – 1ª: (da - bc)y = na - mc

na  mc
Despejando: y
ad  cb

Estas soluciones suelen expresarse en la forma:

mb a m
n d c n
x y: y=
a b a b
c d c d

A B
Acá se conviene que una expresión de la forma: sea igual a: AD – BC. (1)
C D
Se observa que es un producto en cruz:
A B

C D

A (1) se le denomina DETERMINANTE DE LA MATRIZ CUADRADA.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


MATRIZ CUADRADA.

Es un conjunto de elementos dispuestos en igual número de filas (horizontalmente) y de columnas


(verticalmente). Así, en forma general:

DETERMINANTE DE UNA MATRIZ CUADRADA.

Permite formular el determinante de una matriz cuadrada.

CÁLCULO DE DETERMINANTES.

Dependerá del orden del determinante: trataremos los casos de 2º y 3º orden.

Para el caso de 2º orden el tratamiento es como el mostrado en (1) de la página anterior.

En el caso de 3º orden se procede como sigue:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Otra forma:

Lo anterior sugiere otra forma de resolver la situación: Regla de Sarros:

Se colocó la primera y segunda columna a la derecha de la tercera. Se efectúa el producto de


izquierda a derecha y se resta el producto de derecha a izquierda, el resultado es la suma de ambas
operaciones.

Una forma de ver la regla de Sarros es como sigue:

Ejemplo:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


MENOR COMPLEMENTARIO DE UN ELEMENTO DE UN DETERMINANTE.

Es el determinante que resulta de suprimir en el original la fila y la columna a las que pertenece el
elemento considerado.

Sea el determinante:

El menor complementario será, por ejemplo para el elemento ij32 :

ADJUNTO DE UN ELEMENTO DE UN DETERMINANTE:

Sea el determinante:
Se llama adjunto de un elemento a ij al menor complementario
a 11a 12 a 13 afectado de signo + ó – según que i + j sea par o impar, donde i
es la fila y j es la columna a las que pertenece el elemento dado.
A  a 21a 22 a 23 Lo indicaremos con el símbolo A ij . El adjunto de a 32 es:

a 11a 13
a 31a 32 a 33 A 32 = (-1)3+2 α 32 = -
a 21a 23

Esto permitirá el desarrollo de un determinante por los elementos de una línea. En el determinante
anterior elijamos una línea cualquiera como por ejemplo la segunda columna y determinemos sus
adjuntos:

a21a23 a11a13 a11a13


A  a12  a22  a32
a31a33 a31a33 a21a23

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Por ejemplo, calcular el valor del siguiente determinante de cuarto orden:

Desarrollaremos por los elementos de la tercera fila por ser la línea


que contiene mayor número de ceros:

A = (-1).A 31 + 0.A 32 + 0.A 33 + 3.A 34

Sustituyendo valores:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


EJERCICIOS

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
UNIDAD II

MATRICES
Es una disposición rectangular de elementos distribuidos en filas y columnas..
Los elementos pueden ser números complejos, funciones y aun matrices mismas en condiciones
apropiadas.

Algunos ejemplos de matrices son:

Se observa que la notación matemática emplea dos corchetes. Esto permite tratar grandes conjunto
de números como entidades únicas, simplificando así el enunciado de relaciones complicadas.

El orden de una matriz se indica escribiendo primero el número de filas y luego el número de
columnas de la matriz.
Si el número de filas es igual al número de columnas la matriz se dice cuadrada. Entonces, dadas
dos ecuaciones lineales con dos incógnitas, tales como:

2x + 3y = 7
x - 2y = 0

Se observa que los coeficientes de x, y forman una matriz cuadrada:

2 3 
1
  2

Si el número de filas es uno, la matriz se denomina matriz de una fila o vector fila. Por ejemplo:

[2 3 ] [5 4 -1 6]

Si es de una columna; matriz de una columna o vector columna. Por ejemplo:

 1 
5 6 
3  
  7 
2  
  4

La nomenclatura generalmente usada para la designación de matrices es muy similar a la de los


determinantes, excepto por el uso de los corchetes.

Así:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


El elemento situado en la fila i y la columna j de la matriz A se denomina a ij . Una matriz de orden m x
n se puede denotar en forma concisa como:

a mxn
ij

Para las matrices A y B anteriores será: A = [a ij ]3x3 y B = [b ij ]2x3

MATRICES IGUALES.

Dos matrices A=[a ij ] y B=[b ij ] son iguales (A=B) si y solo si tienen el mismo orden y cada elemento
de una es igual al correspondiente elemento de la otra. Esto es:

a ij = b ij donde: (i = 1, 2,……..,m; j = 1, 2,…….,n)

MATRIZ CERO.

Es una matriz que tiene todos sus elementos iguales a cero. Se denota como A = 0.

SUMA DE MATRICES.

Si A = [a ij ] y B = [b ij ] son dos matrices m x n, su suma (diferencia), A ± B, se define como la matriz de


orden m x n C = [c ij ], donde cada elemento de C es la suma (diferencia) de los correspondientes
elementos de A y B. Así:

A ± B = [a ij ± b ij ]

Ejemplo:

Dos matrices del mismo orden se dice que son conformables para la suma o resta. Si las matrices
son de orden diferentes, no pueden sumarse o restarse.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


La suma de k matrices A es otra matriz del mismo orden que A donde cada uno de sus elementos es
k veces el correspondiente elemento de A. Ejemplo:

En particular, -A se denomina la matriz negativa de A, obtenida al multiplicar cada uno de los


elementos de A por -1 o simplemente cambiando el signo de todos los elementos de A.

Asumiendo que las matrices A, B, C son conformables para la suma, se establece:

1) A + B = B + A (Propiedad conmutativa).
2) A + (B + C) = (A + B) + C = A + B + C (Propiedad asociativa).
3) k(A + B) = kA + kB = (A + B)k, k es un escalar.
4) Existe una matriz D tal que: A + D = B.

MULTIPLICACIÓN DE MATRICES.

Sea A = [a mp ] y B = [b pn ]. El producto de A.B, en ese orden, es otra matriz C, tal que: C = [c mn ].

O sea: c mn = a m1 b 1n + a m2 b 2n +……+a mp b pn = a
k1
b
mk kn , (m=1, 2, 3,……,r; n=1, 2, 3,……,s )

Obsérvese que la operación se efectúa multiplicando fila por columna: cada elemento de la fila es
multiplicado por el correspondiente de la columna y luego los productos sumados.

Ejemplos:

(c)

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


El producto AB está definido o A es conformable a B para la multiplicación sólo cuando el número
de columnas de A es igual al número de filas de B. Si A es comformable con B para la multiplicación
(AB está definido), B no necesariamente es conformable con A para la multiplicación (BA puede o no
estar definido).
Asumiendo que A, B, C son conformables para la suma y producto indicados, se tiene:

A(B + C) = AB + AC (Primera ley distributiva).


(A + B)C = AC + BC (Segunda ley distributiva):
A(BC) = (AB)C = ABC (Ley asociativa).
AB ≠ BA Generalmente.
AB = 0 No necesariamente implica que A = 0 ó B = 0.
AB = AC No necesariamente implica que B = C.

ALGUNOS TIPOS DE MATRICES.

Una matriz cuadrada A cuyos elementos a ij = 0 para i > j es llamada triangular superior; una matriz
A cuyos elementos a ij = 0 para i < j es llamada triangular inferior. La matriz D que es triangular
superior y triangular inferior, se denomina matriz diagonal.

Diagonal superior Diagonal inferior Matriz diagonal

La matriz diagonal frecuentemente se escribe como: D = diag(a 11 , a 22 , a 33 ,……,a nn ).

Si en la matriz diagonal a 11 = a 22 = a 33 =……= a nn = k, D se denomina matriz escalar. Si


adicionalmente k = 1, la matriz se denomina matriz identidad y se denota como I n . Ejemplos:

En las matrices identidad se cumple:

a) I n + I n +…p veces…I n = pI n = diag(p, p, p,……,p)


b) Ip = I.I…….I = I.

MATRICES CUADRADAS ESPECIALES.

Si A y B son matrices cuadradas tal que AB = BA, entonces A y B son llamadas matrices
conmutativas o se dice que conmutan.

Si A y B son tales que AB = -BA, A y B son denominadas matrices anti-conmutativas.

Una matriz A para la cual Ak+1 = A, donde k es un número natural, es denominada matriz periódica
de periodo k (siendo k el menor entero positivo).

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Si k = 1 tal que A2 = A entonces A es denominada idempotente.

Una matriz A para la cual Ap = 0, donde p es un entero positivo es denominada nilpotente. Si p es el


menor entero positivo para el cual Ap = 0, entonces A será nilpotente de índice p.

Ejemplos:

INVERSA DE UNA MATRIZ.

Si A y B son matrices cuadradas tal que AB = BA = I, entonces B se denomina matriz inversa de A,


y lo denotamos como B = A-1. B tiene como inversa a A y escribimos A = B-1.

Ejemplo:

Como:

No siempre una matriz cuadrada tiene inversa. Si A y B son matrices cuadradas del mismo orden y
tienen inversas A-1 y B-1 respectivamente, entonces: (AB)-1 = B-1.A-1.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Una matriz A tal que A2 = I es llamada matriz involutoria. Una matriz identidad es involutoria. Una
matriz involutoria es por sí mismo inversa.

Una matriz cuadrada A es llamada no-singular si A ≠ 0. En el otro caso se denomina singular.


De acá se tiene: A.B  A . B
La matriz inversa puede determinarse con: A es una matriz cuadrada no-singular.

Adj A es la matriz adjunta de A y es tal que:

Cada α corresponde al elemento adjunto de cada fila y colocado en la columna y ubicación


equivalente.

Ejemplo:

TRANSPUESTA DE UNA MATRIZ.

Es la matriz de orden n x m obtenida de intercambiar las filas y las columnas de una matriz m x n. La
transpuesta de la matriz A, se denota como A’.

Ejemplo:

Para la matriz transpuesta se cumple:

a) (A’)’ = A
b) (kA)’ = kA’
c) (A + B)’ = A’ + B’
d) (A.B)’ = B’.A’

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


MATRICES SIMÉTRICAS.

Una matriz cuadrada A tal que A’ = A es llamada simétrica. Si una matriz es simétrica se cumple
que a ij = a ji para todos los valores de i y j.

Ejemplo:

Es simétrica. También lo será k.A,


donde k es un escalar cualquiera.

Una matriz cuadrada A tal que A’ = -A se denomina simétrica-oblicua. En ella se cumple a ij = -a ji .

Ejemplo:

Es simétrica-oblicua. Lo será también k.A,


donde k es un escalar cualquiera

Las matrices simétricas satisfacen:

a) A + A’ es simétrica.
b) A – A’ es simétrica-oblicua.
c) Cualquier matriz cuadrada A puede ser escrita como la suma de una matriz simétrica:
1
B= (A + A’)
2
1
d) Lo mismo pero relacionado con la simétrica oblicua: C = (A – A’)
2

MATRIZ CONJUGADA.

Cuando A es una matriz que tiene números complejos como elementos la matriz obtenida de A
reemplazando cada elemento por su conjugado se denomina la conjugada de A y se denota como
A.

Ejemplo:

La matriz conjugada satisface:

a) (A ) = A
b) ( kA ) = k . A
c) (A B) = A + B
d) ( A.B ) = A . B
e) ( A )’ = ( A ' ) = A*

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Ejemplo:

MATRICES HERMITIAN

Una matriz cuadrada A = [a ij ] tal que A ' = A es llamada matriz Hermitian. Si A es Hermitian se
cumple que a ij = a ji para todos los valores de i y j. Los elementos de la diagonal de una matriz
Hermitian son números reales.

Ejemplo:

La matriz es Hermitiana

Una matriz cuadrada A = [a ij ] tal que A ' = -A es llamada Hermitiana-oblicua. Ella satisface a ij = -a ji
para todos los valores de i y j. Los elementos de la diagonal son cero o imaginarios puro.

Ejemplo:

La matriz es Hermitiana oblicua

Las matrices Hermitianas satisfacen:

a) A+ A ' es Hermitian y A - A ' es Hermitian-oblicua


b) Cualquier matriz cuadrada A con elementos complejos puede escribirse como la suma de una
1 1
matriz Hermitian B = ( A  A ' ) y una matriz Hermitian-oblicua C = ( A  A ' ) .
2 2

EJERCICIOS.

1) Determinar la inversa de cada una de las matrices:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
6) Determinar la matriz adjunta y la inversa de cada una de las siguientes matrices:

7) Determinar las inversas de:

8) Calcule la inversa de la matriz simétrica:

9) Demostrar que:

10) Demostrar que la matriz dada es periódica de periodo 2:

11) Demostrar que la matriz dada es nilpotente:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


UNIDAD III

MATLAB
EL ENTORNO DE TRABAJO DE MATLAB.

Cuando se inicia MATLAB, la primera ventana que aparece tiene un aspecto similar al mostrado
(configuración por defecto):

Esta vista puede ser cambiada con la secuencia


Desktop Layout/Default, del menú View.
Las componentes más importantes del entorno de
MATLAB son:

a) La ventana de comandos (Command Window).


b) La ventana histórica de comandos (Command
History).
c) El espacio de trabajo (Workspace).
d) La plataforma de lanzamiento (Launch Pad).
e) El directorio actual (Current Directory).
f) La ventana de ayuda (Help).
g) El editor de ficheros y depurador de errores (Editor&Debugger).
h) El editor de vectores y matrices (Array Editor).
i) La ventana que permite estudiar cómo se emplea el tiempo de ejecución (Profiler).

Describiremos brevemente estas componentes.

El escritorio de MATLAB (Matlab Desktop) es la ventana más general de la aplicación. El resto de las
ventanas pueden alojarse en la misma o ser ejecutadas independientemente. La figura anterior la
muestra, donde la ventana activa es la Command Window.

La figura adjunta muestra un detalle del menú Desktop,


desde el que se controlan las componentes visibles y
como se visualizan.
A través del mismo se puede dejar de visualizar algunas
ventanas o visualizar algunas, como el Help que no está
visible.
El Command Widow es la ventana en que se ejecutan
interactivamente las instrucciones de Matlab y donde se
muestran los resultados correspondientes. Algunas de
sus características son:

a) Se permiten líneas de comando muy largas que continúan en la línea siguiente, siempre que
se active la opción Wrap Lines en el menú File/Preferences/Command Widow.
b) Al clicar con el botón derecho del ratón sobre una función, se abre el Help sobre dicha
función.
c) Comenzando a teclear el nombre de una función y pulsando TAB, Matlab la completa.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


d) Cuando se ejecuta un fichero *.m y se produce un error con el correspondiente mensaje,
Matlab muestra un enlace a la línea del fichero fuente donde se produjo el error. Clicando en
ese enlace se va a la línea correspondiente del fichero con Editor/Debugger.
La ventana Command History ofrece acceso a las sentencias que se han ejecutado anteriormente en
la Command Window, las cuales pueden ejecutarse nuevamente haciéndoles doble clic.

El Current Directory (directorio activo o directorio actual) permite explorar los directorios del
ordenador como un explorador parecido al de Windows. Cuando se llega al directorio deseado se
muestran los ficheros allí contenidos y permite ordenarlos por fecha, tamaño, nombre, etc.
El comando pwd (de print working directory) permite saber cual es el directorio actual. Para cambiar
de directorio actual se puede usaar cd (de change directory) en la línea de comandos, seguido del
nombre del directorio, para el cual se puede emplear un path absoluto, cd:\Matlab\Ejemplos o
relativo, cd Ejemplos.
Para subir un nivel en la jerarquía de directorios se usa el comando cd.. y cd../.. para subir dos
niveles.

El Workspace es el conjunto de variables y de funciones de usuario que en un determinado


momento están definidas en la memoria del programa o de la función que se está ejecutando. Para
obtener información del Workspace se usan los comandos who y whos. Por ejemplo:

La ventana Workspace es un entorno gráfico para ver las variables definidas en el espacio de
trabajo. Se activa con el comando View/Workspace. Las figuras siguientes muestran en primer lugar,
el aspecto inicial de la ventana Workspace cuando se abre desde un determinado programa y la
segunda el Array de la matriz BARS (haciendo doble clic sobre ella en el Worspace).

El Array Editor no sólo permite ver los valores de los elementos de cualquier matriz o vector definido
en el programa: también pueden ser modificados clicando sobre la celda correspondiente.
También es útil cuando se ejecuta un programa paso a paso y viendo cómo cambian los valores de
las distintas variables.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Matlab dispone del Editor/Debugger que permite tanto crear como modificar ficheros así como
ejecutarlos paso a paso para ver si contienen errores (proceso de Debug o depuración).

Las figuras que siguen muestran en primer lugar la ventana principal del Editor/Debbuger, en la que
se ha tecleado un fichero-M llamado Prueba1.m, que contiene un comentario y seis sentencias. La
segunda figura corresponde a una ejecución de este fichero de comandos controlada con el
Debugger. La ejecución comienza con el comando Run en el menú Debug, pulsando F5, clicando en

el botón Continue de la barra de herramientas, , del Editor o tecleando el nombre del fichero
en la línea de comandos de la Command Window.

Los puntos rojos en el margen izquierdo son breakpoints (puntos donde se detiene la ejecución del
programa); la flecha verde en el borde izquierdo indica la sentencia donde se detiene la ejecución
(antes de ejecutar dicha sentencia). Cuando el cursor se coloca sobre una variable (en A) aparece
una ventana con los valores numéricos de la mismEn la última figura se observa que aparecen los
botones del Debugger que están activados:

También se permite el uso de breakpoint condicionales


(indicados con un punto amarillo en vez de rojo), en los
que el programa se para sólo si se cumple una
determinada condición. Para introducirlo se clica con el
botón derecho en la correspondiente línea del código en la
ventana del Editor/Debugger y elegir en el menú
contextual que resulta Set/Modif. Conditional Breakpoint.
Se abre una ventana como la mostrada al lado donde se
escribe
Preparado por: Prof. la condición
Felipe S. VázquezaD.
cumplirse para
Universidad detener el
Politécnica deprograma
Valencia
en dicho punto.
El profiler es un programa de utilidad que permite saber cómo se ha empleado el tiempo de la CPU
en la ejecución de un determinado programa. Se analizará posteriormente con más detalle.

Preferencias: Formatos de salida y de otras opciones de Matlab.

Matlab dispone de un cuadro de diálogo desde el que se establecen casi todas las operaciones que
el usuario puede determinar por su cuenta. Se abre con File/Preference como se muestra en la
figura inferior izquierda (son 24 cuadros de diálogo). La figura de la derercha muestra el cuadro de
diálogo que permite elegir los colores generales del código (Preferences/Color).

Guardar variables y estados de una sesión: Comandos save y load.

Para guardar el estado de una sesión de trabajo se usa el comando save:

>> save

Cuando se desea recuperar nuevamente el programa se usa:

>> load

Se pueden guardar matrices y vectores de forma selectiva y en ficheros con nombres específicos.
Por ejemplo;

>> save filename A x y

Guarda las variables A, x, y en un fichero binario llamado filename.mat (o filename). Para recuperar
en otra sesión dasta con:

>>load filename

Si no se especifica ninguna variable, se guardan todas las variables creadas en esa sesión.

Para borrar todas las salidas de Matlab y dejar limpia la Command Window se pueden usar las
funciones clc (clear console) y home. La primera elimina todas las salidas anteriores, mientras que
home las mantiene, pero lleva el prompt (>>) a la primera línea de la ventana.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Si se desea salir de Matlab basta teclear los comandos quit o exit, elegir exit en file o usar cualquiera
de los medios de terminar una aplicación en Windows.

TRATAMIENTO DE MATRICES CON MATLAB.

En Matlab, una matriz es un arreglo rectangular de números.


Las matrices de 1 x 1 son consideradas escalares.

Definición de matrices desde teclado.

Las matrices y vectores (fila o columna) son variables que tienen nombre. Usaremos mayúsculas
para matrices y minúsculas para vectores y escalares.
Aunque en Matlab las matrices se introducen por filas, Marlab las almacena como columnas
El siguiente comando almacena una matriz de 3x3 (filas x columna):

>> A = [3 2 1;4 7 -3;2 7 0] al pisar ENTER, la respuesta del programa es:

A=

3 2 1
4 7 -3
2 7 0

>>

Esta matriz está disponible para hacer cualquier operación con ella.

El hecho de que Matlab guarde las matrices por columnas nos permite referirnos a un elemento
empleando un solo número.
Por ejemplo:

>> A=[-2 9;4 7] %matriz 2x2, introducida por filas.

A=

-2 9
4 7

>> A(2,1) %Ubicar elemento de la fila 2 y columna 1. Dará:

ans =

>> A(2) %Ubica el mismo elemento anterior. Dará:

ans =

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


>> A(3) %Equivale a A(1,2). Dará:

ans =

>> A(:) %Muestra cómo Matlab guarda A. Dará:

ans =

-2
4
9
7

Cuando no se asigna nombre a una matriz, Matlab asigna por defecto ans=.

Matriz transpuesta. (Transposición matricial).

En Matlab se simboliza con el apóstrofe (‘). Así, si:

>> A=[1 2 3;4 5 6;7 8 9] %Producirá:

A=

1 2 3
4 5 6
7 8 9

Si decimos:

>> A' %Pedimos la transpuesta de A:

ans =

1 4 7 Se cambian filas por la


2 5 8 correspondiente columna.
3 6 9

Obsérvese que en la definición de la matriz, los elementos de una fila están separados por un
espacio en blanco o con una coma y cada columna por punto s y coma. Se ha podido definir a otra
matriz B como la transpuesta de A así:

>> B=A' %Dará como resultado:

B=

1 4 7
2 5 8
3 6 9
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Matriz inversa.

Se determina con la función inv. Ejemplo:

>> A=[1 4 -3;2 1 5;-2 5 3]

A=

1 4 -3
2 1 5
-2 5 3

>> B = inv(A)

B=

0.1803 0.2213 -0.1885


0.1311 0.0246 0.0902
-0.0984 0.1066 0.0574

Para comprobar este resultado efectuaremos la operación:

>> B*A

ans =

1.0000 0.0000 -0.0000


0 1.0000 0.0000 La operación * se analizará más adelante.
0 -0.0000 1.0000

ARITMÉTICA DE LAS MATRICES.

Para las operaciones suma (+) y multiplicación (*) entre matrices se debe tener en cuenta sus
dimensiones.
Para sumar dos matrices, deben ser del mismo tamaño. Por ejemplo:

>> A = [2 -3;-1 4;6 2]; %El ; impide que se extienda A.


>> B = [1 3;6 5;3 2];
>> A + B %Suma de ambas matrices (observe que no hay ;).

ans =

3 0
5 9
9 4

Observamos la aparición del operador suma (+).

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


OPERADORES ARITMÉTICOS.

Matlab opera con matrices usando operadores y funciones. Vimos los operadores transpuesta,
inversa y suma. Los operadores matriciales de Matlab son:

Estos operadores se aplican también a las variables o escalares aunque con algunas diferencias.
Pueden ser aplicados también con un operador escalar y otro matricial (modo mixto).
Para un escalar, se aplica a cada elemento de la matriz. Por ejemplo:

>> A = [1 2;3 4]

A=

1 2
3 4

>> A*2

ans =

2 4
6 8

>> A-4

ans =

-3 -2
-1 0

Para dividir todos los elementos de una matriz o vector por un escalar, se usa el operador /.

Para la multiplicación de matrices: [a ik ]*[b kj ] = [c ij ]. El número de columnas de A es igual al número


de filas de B.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Ejemplo:

>> A = [2 -1 1;4 6 2]; %matriz 2x3.


>> B = [1 1;-1 2;0 1]; %matriz 3x2
Obsérvese que: A → 2x3
>> A*B
B → 3x2
De acá: (2x3)*(3x2) → (2x2)
ans =

3 1
-2 18

Ejemplo:

>> u = [1 2 3]

u=

1 2 3

>> v = [2 4 6]

v=

2 4 6

>> u*v' %fila por columna = PRODUCTO ESCALAR.

ans =

28

Si se hubiese pedido u*v:


Indica que los tamaños de las matrices no permiten
> u*v hacer la multiplicación.
??? Error using ==> mtimes
Inner matrix dimensions must agree.

Ejemplo:

>> A = [-2 3;-4 5;-6 7] %También: A = [-2,3;-4,5;-6,7]

A=

-2 3
-4 5
-6 7

3
>> a = [3 -1]; %(1x2), a’ =   → (2x1).
1 
>> A*a' %Producto matriz por vector.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


ans =

-9
-17 (3x1)
-25

Cuando usamos la función cross, obtenemos el PRODUCTO VECTORIAL. Ejemplo:

>> u = [1 2 3];
>> v = [4 5 6];
>> cross(u,v) %PRODUCTO VECTORIAL.

ans =

-3 6 -3

Podemos también usar una función para la obtención del producto escalar: dot. Por ejemplo: para
los vectores anteriores:

>> dot(u,v) %PRODUCTO ESCALAR.

ans =

32

La aplicación de otros operadores se muestra a continuación:

Ejemplo:

>> B = [2 1;1 3];


>> B^2 %Potencia al cuadrado de la matriz.

ans =

5 5
5 10

Ejemplo:

>> B*B %Producto de matrices.

ans =

5 5
5 10

Ejemplo:

>> B.^2 %Cuadrado de cada elemento de la matriz.

ans =
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
4 1
1 9

Ejemplo:

>> det(B) %Calcula el determinante de la matriz cuadrada de B.

ans =

>> rank(B) %Rango de B.

ans =

Ejemplo:

>> Bi = inv(B) %Matriz inversa de B.

Bi =

0.6000 -0.2000
-0.2000 0.4000

Ejemplo:

>> x = [2 7 3] %Vector fila.

x=

2 7 3

Ejemplo:

>> y = [4;3;-2] %Vector columna.

y=

4
3
-2

Matlab considera vectores fila por defecto, como se muestra en los ejemplos siguientes:

>> x(1)=1, x(2)=2


x=
1
x=1 2
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
MATRIZ DIAGONAL.

La forma general es:

En Matlab se define con la función diag. Por ejemplo:

>> diag([1 3 -4]) %Matriz diagonal.

ans =

1 0 0
0 3 0
0 0 -4

Ejemplo:

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


>> diag(A) %Vector de elementos diagonales de A.

ans =

1
4

Ejemplo:

>> diag(diag(A)) %Truco para extraer la diagonal de una matriz.

ans =

1 0
0 4 Aquí: A = [1 4]

OTRA FORMAS DE MATRICES PREDEFINIDAS.

Existen en Matlab varias funciones orientadas a definir con gran facilidad matrices de tipos
particulares. Algunas son:

eye(n) forma la matriz unidad de tamaño (n x n).


zeros(m,n) forma una matriz con ceros de tamaño m x n.
zeros(n) forma una matriz con ceros de tamaño n x n.
ones(m,n) forma una matriz de unos de tamaño m x n.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


ones(n) forma una matriz de unos de tamaño n x n.
linspace(X1,X2,n) genera un vector con n valores igualmente espaciados entre X1 y X2.
logspace(d1,d2,n) genera un vector con n valores espaciados logarítmicamente entre 10^d1 y
10^d2. Si d2 es pi, los puntos se generan entre 10^d1 y pi.
rand(m,n) forma una matriz de números aleatorios entre 0 y 1 con distribución uniforme,
de
tamaño m x n.
rand(n) forma una matriz de números aleatorios entre 0 y 1, con distribución uniforme
de
tamaño n x n.
randn(n) forma una matriz de tamaño n x n de números aleatorios con distribución
normal, de valor medio 0 y varianza 1.
magic(n) crea una matriz n x n cuyos números tienen la propiedad de que todas las filas
y
todas las columnas suman lo mismo, y también la diagonal.
hilb(n) crea una matriz de Hilbert de tamaño n x n. La matriz de Hilbert tiene
elementos
i, j que responden a la expresión (1/(1+j-i)). Es difícil de manejar por los
grandes
errores numéricos a los que conduce.
invhilb(n) crea la inversa de la matriz de Hilbert.
kron(x,y) genera una matriz con todos los productos de los elementos del vector x por
los
elementos del vector y. equivale a x’*y, donde x e y son vectores fila.
compan(pol) construye una matriz cuyo polinomio característico tiene como coeficientes los
elementos del vector pol (ordenados de mayor grado a menor).
vander(v) construye la matriz de Vandermonde a partir del vector v (las columnas son
las
potencias de los elementos de dicho vector).

Ejemplos:

>> eye(3)

ans =

1 0 0
0 1 0
0 0 1

>> zeros(3,2)

ans =

0 0
0 0
0 0

>> zeros(2)

ans =
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
0 0
0 0

>> ones(2,3)

ans =

1 1 1
1 1 1

>> ones(2)

ans =

1 1
1 1

>> linspace(0,10,5)

ans =

0 2.5000 5.0000 7.5000 10.0000

>> logspace(0,5,6)

ans =

1 10 100 1000 10000 100000

>> logspace(0,pi,5)

ans =

1.0000 1.3313 1.7725 2.3597 3.1416

>> rand(2)

ans =

0.8147 0.1270
0.9058 0.9134

>> rand(2,3)

ans =

0.6324 0.2785 0.9575


0.0975 0.5469 0.9649

>> randn(2)

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


ans =

-0.4326 0.1253
-1.6656 0.2877

>> magic(3)

ans =

8 1 6
3 5 7
4 9 2

>> hilb(3)

ans =

1.0000 0.5000 0.3333


0.5000 0.3333 0.2500
0.3333 0.2500 0.2000

>> invhilb(3)

ans =

9 -36 30
-36 192 -180
30 -180 180

>> x=[4 3 -2];


>> y=[1 -1 3];
>> kron(x,y)

ans =

4 -4 12 3 -3 9 -2 2 -6

>> pol=[3 -2 1];


>> compan(pol)

ans =

0.6667 -0.3333
1.0000 0

>> v=[1 2 3];


>> vander(v)

ans =

1 1 1
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
4 2 1
9 3 1

ACCESO A LOS ELEMENTOS DE UNA MATRIZ. OPERADOR DOS PUNTOS (:). MATRIZ VACÍA
[]. BORRADO DE FILAS Y COLUMNAS.

Veamos los casos más sencillos:

>> A = [2 3;4 5;6 7]

A=

2 3
4 5
6 7

>> A(2,1) %Se toma al elemento de la fila 2 y la columna 1 de A.

ans =

>> A(2,3)
??? Index exceeds matrix dimensions.

>> A(:,1) %Vector columna con la primera columna de A

ans =

2
4
6

>> A(2,:) %Vector fila con la segunda fila de A.

ans =

4 5

>> A(4) %Cuarto elemento de A, contando por columnas.

ans =

>> size(A) %Dimensiones de A (devuelve un vector).

ans =
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
3 2

>> length(A) %MAyor de las dimensiones de A.

ans =

>> v=[-3 4 7]; %Vector fila.


>> v(2) %Segundo elemento.

ans =

>> v(1,2) %Segundo elemento (1ª fila, 2ª columna).

ans =

La referencia a los elementos de una matriz permite cambiar el valor de un elemento mediante una
sencilla operación de asignación. Esto también puede hacerse con una fila o una columna:

>> A = [2 -3;-4 5;6 -7];


>> A(3,1)=1/2 %Cambio de un elemento de A.

A=

2.0000 -3.0000
-4.0000 5.0000
0.5000 -7.0000

>> A(2,:)=[1,1] %Cambiar los valores de la segunda fila.

A=

2.0000 -3.0000
1.0000 1.0000
0.5000 -7.0000

>> A(:,1)=[1;2;3] %Cambiar una columna, la columna 1.

A=

1 -3
2 1
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
3 -7

Al definir un nuevo elemento fuera de las dimensiones de la matriz se ajusta el tamaño de la matriz
dando el valor cero a los restantes elementos.

>> A(3,4)=1 %Asignación fuera del espacio definido.

A=

1 -3 0 0
2 1 0 0
3 -7 0 1

>> size(A)

ans =

3 4

Matlab puede trabajar con grupos de filas y columnas (no necesariamente consecutivos) o
concatenar matrices para formar matrices más grandes siempre que los tamaños sean compatibles.
Por ejemplo:

>> A=diag([1 2 3]);


>> [A,ones(3,2)] %Ampliar con columnas.

ans =

1 0 0 1 1
0 2 0 1 1
0 0 3 1 1

>> [A;eye(3)] %Ampliar con filas.

ans =

1 0 0
0 2 0
0 0 3
1 0 0
0 1 0
0 0 1

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


>> B=[A eye(2);zeros(2) A] %Matriz formada por ccuatro bloques 2 x 2.

B=

1 3 1 0
2 1 0 1
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
0 0 1 3
0 0 2 1

El operador dos puntos (:): Se usa de varias formas. Comenzamos con el siguiente ejemplo:

>> x=1:10

x=

1 2 3 4 5 6 7 8 9 10

Podría decirse que el operador (:) representa un rango: en este caso los números enteros entre 1 y
10. por defecto el incremento es 1, pero este operador puede también usarse con otros valores
enteros y reales, positivos o negativos. En este caso el incremento va entre el valor inferior y el
superior, como se muestra:

>> x=1:2:10

x=

1 3 5 7 9

>> x=1:1.5:10

x=

1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000

>> x=10:-1:1

x=

10 9 8 7 6 5 4 3 2 1

Se observa que, por defecto, este operador produce vectores fila. Si se desea obtener un vector
columna basta transponer el resultado. El ejemplo siguiente genera una tabla de funciones seno y
coseno:

>> x=[0.0:pi/50:2*pi]';
>> y=sin(x); z=cos(x);
>> [x y z]

ans =

0 0 1.0000
0.0628 0.0628 0.9980 La primera columna son los valores de x, la
0.1257 0.1253 0.9921 segunda el del seno y la tercera del coseno.
0.1885 0.1874 0.9823 Estos valores están entre 1 y -1 (produce 303
0.2513 0.2487 0.9686 columnas con los valores de x, sin(x) y cos(x)
para valores entre 0.0 y 2 pi, en incrementos de
Preparadopi/50).
por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
0.3142 0.3090 0.9511
0.3770 0.3681 0.9298
0.4398 0.4258 0.9048
…………………………….
6.2204 -0.0628 0.9980
6.2832 -0.0000 1.0000

Veamos que el operador (:) es aun más potente con matrices. Definamos una matriz A de tamaño
6x6, con la que se realizaran diversas operaciones con el operador (:).

>> A=magic(6)

A=

35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11

Accederemos al elemento de la segunda fila y tercera columna:

>> A(2,3)

ans =

Se extraerán los cuatro primeros elementos de la sexta fila:

>> A(6, 1:4)

ans =

4 36 29 13

Los dos puntos aislados representan “todos los elementos”. Por ejemplo, el siguiente comando
extrae todos los elementos de la tercera fila:

>> A(3,:)

ans =

31 9 2 22 27 20

Para acceder a la última fila o columna puede usarse la palabra end, en lugar del número
correspondiente. Por ejemplo, para extraer la sexta fila (la última) de la matriz:

>> A(end,:)

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


ans =

4 36 29 13 18 11

El comando que sigue extrae todos los elementos de las filas 3, 4 y 5:

>> A(3:5,:)

ans =

31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16

Se pueden extraer conjuntos disjuntos de filas usando corchetes [ ]. Por ejemplo, el comando
siguiente extrae las filas 1, 2 y 5:

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

ans =

35 1 6 26 19 24
3 32 7 21 23 25
30 5 34 12 14 16

En los ejemplos anteriores se han extraído filas y no columnas pero, todo lo dicho para filas es válido
también para ellas (basta cambiar el orden de los índices). Por ejemplo:

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

ans =

35 1 6
3 32 7
31 9 2
8 28 33
30 5 34
4 36 29

El operador dos puntos (:) puede usarse en ambos lados del operador (=). Por ejemplo, definimos
una matriz identidad B de tamaño 6x6 y se reemplazarán filas de B por filas de A. Obsérvese que la
siguiente secuencia de comandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 de A:

>> B=eye(size(A));
>> B([2 4 5],:)=A(1:3,:)

B=

1 0 0 0 0 0
35 1 6 26 19 24
0 0 1 0 0 0
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
3 32 7 21 23 25
31 9 2 22 27 20
0 0 0 0 0 1

Se pueden realizar operaciones aun más complejas, tales como:

>> B=eye(size(A)); %Se sustituyen las dos primeras filas de B por el producto
>> B(1:2,:)=[0 1;1 0]*B(1:2,:) %de dichas filas por una matriz de permutación.

B=

0 1 0 0 0 0
1 0 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1

Como otro ejemplo, se verá la forma de invertir el orden de los elementos de un vector:

>> x=rand(1,5)

x=

0.8147 0.9058 0.1270 0.9134 0.6324

>> x=x(5:-1:1)

x=

0.6324 0.9134 0.1270 0.9058 0.8147

Obsérvese que por usar paréntesis en vez de corchetes, los valores generados por el operador (:)
afectan a los índices del vector y no al valor de sus elementos.
Para invertir el orden de las columnas de una matriz se puede hacer:

>> A=magic(3)

A=

8 1 6
3 5 7
4 9 2

>> A(:,3:-1:1)

ans =

6 1 8
7 5 3
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
2 9 4

Hubiese sido más fácil usar la función fliplr(A), que es específica para ello.
Finalmente, A(:) representa un vector columna con las columnas de A una detrás de otra.

En general, empleando listas implícitas o simplemente vectores de índice, se pueden extraer


submatrices de una matriz, incluso repitiendo filas y columnas:
>> B=[1 3 1 0 -1;2 1 0 1 7;0 0 1 3 5;0 0 2 1 9]

B=

1 3 1 0 -1
2 1 0 1 7
0 0 1 3 5
0 0 2 1 9

>> B(2:3,2:4) %2ª a 3ª fila y 2ª a 4ª columna.

ans =

1 0 1
0 1 3

>> B(2,1:3) %2ª fila y columnas de 1ª a 3ª.

ans =

2 1 0

>> B( 1,1:2:5) %Columnas impares de la 1ª fila

Hasta columna 5
Contando de 2 en 2
1ª columna
1ª fila

ans =

1 1 -1

>> B(2,:) %2ª fila (todas las columnas.

ans =

2 1 0 1 7

>> B(2,4) %Elemento que ocupa el lugar (2,4).

ans =

1
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
>> B(:,3) %3ª columna (todas las filas).

ans =

1
0
1
2

>> B([3 1 1],:) %Filas 3, 1 y 1 (todas las columnas).

ans =

0 0 1 3 5
1 3 1 0 -1
1 3 1 0 -1

>> C=[1 -2;7 -2];


>> C(:) %Lista con todos los elementos de la matriz.

ans =

1
7
-2
-2

Esta forma de manipular matrices permite un simple método de intercambio de filas o columnas de
una manera sin el tradicional empleo de variables intermedias:

>> A=[2 3;1 4;7 6]

A=

2 3
1 4
7 6

>> A([1 3],:)=A([3 1],:) %Intercambio d las filas 1 y 3.

3ª a 1ª
1ª a 3ª

A=

7 6
1 4
2 3

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Para Matlab una matriz definida sin elementos entre los corchetes es una matriz que existe pero que
está vacía, osea; que tiene dimensión 0. Ejemplos:

>> A=magic(3)

A=

8 1 6 Las funciones exist( ) e isempty( ) permiten chequear si una


3 5 7 variable existe y si está vacía.
4 9 2 En el último ejemplo se ha eliminado la tercera columna de A
asignándole la matriz vacía.
>> B=[]

B=

[]

>> isempty(B)

ans =

>> A(:,3)=[]

A=

8 1
3 5
4 9

Con la matriz vacía se pueden borrar filas o columnas. Por ejemplo:

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


>> A(:,2)=[] %Borramos la segunda columna.

A=

1 2
2 1
0 -3

CONSTRUCCIÓN DE TABLAS.

Las operaciones con arreglos son usadas para construir tablas. Supóngase que n es el vector
columna:

>> n=(0:9)'

n=
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
0
1
2
3
4
5
6
7
8
9

>> pows=[n n.^2 2.^n]

pows =

0 0 1
1 1 2 Es una tabla de cuadrados y potencias
2 4 4 de 2 de los números de 0 a 9.
3 9 8
4 16 16
5 25 32
6 36 64
7 49 128
8 64 256
9 81 512

Las funciones matemática elementales, operan en arreglos de elemento por elemento. Así:

>> format short g


>> x=(1:0.1:2)';
>> logs=[x log10(x)] %Construye una tabla de logarítmos.

logs =

1 0
1.1 0.041393
1.2 0.079181
1.3 0.11394
1.4 0.14613
1.5 0.17609
1.6 0.20412
1.7 0.23045
1.8 0.25527
1.9 0.27875
2 0.30103

NÚMEROS COMPLEJOS: FUNCIÓN complex.

En muchos cálculos matriciales los datos y/o los resultados no son reales sino complejos. Para ver
como se representan por defecto los números complejos:
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
>> a=sqrt(-4)

a=

0 + 2.0000i

>> 3+4i

ans =

3.0000 + 4.0000i

>> 3+4j
Puede usarse indistintamente i ó j. Matlab devuelve i.
ans =

3.0000 + 4.0000i

Cuando se trabaja con números complejos conviene no trabajar con i ó con j como variables
ordinarias, pues, puede dar lugar a errores y confusiones. Por ejemplo:

>> i=2

i=

>> 2+3i

ans =

2.0000 + 3.0000i

>> 2+3*i

ans =

>> 2+3*j

ans =

2.0000 + 3.0000i

Cuando se usan i y j como variables ordinarias, puede usarse también sqrt(-1) como unidad
imaginaria, o una variable a la que se le haya asignado el resultado de esta función.
La asignación de valores complejos a vectores y matrices desde teclado puede hacerse de las dos
formas, que se muestran en el ejemplo siguiente (conviene hacer antes clear i, para que i no esté
definida como variable, este comando se estudiará más adelante):
>>clear i
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
>> A=[1+2i 2+3i;-1+1i 2-3i]

A=

1.0000 + 2.0000i 2.0000 + 3.0000i


-1.0000 + 1.0000i 2.0000 - 3.0000i

A=[1 2;-1 2]+[2 3;1 -3]*i %Aquí * es necesario.

>> A=[1 2;-1 2]+[2 3;1 -3]*i %Aquí * es necesario.

A=

1.0000 + 2.0000i 2.0000 + 3.0000i


-1.0000 + 1.0000i 2.0000 - 3.0000i

Produce el mismo resultado (definiendo parte real e imaginaria por separado).

La función complex crea un número complejo a partir de dos argumentos que serán la parte real e
imaginaria respectivamente. Ejemplo:

>> complex(1,2)

ans =

1.0000 + 2.0000i

La transpuesta de una matriz compleja produce una matriz conjugada y transpuesta.


Existe una función que permite hallar la matriz conjugada (conj( )) y el operador (.’ ) que calcula
simplemente la matriz transpuesta. Ejemplo:

>> Z=[1+2i 7-3i 3+4i;6-2i 9i 4+7i]

Z=

1.0000 + 2.0000i 7.0000 - 3.0000i 3.0000 + 4.0000i


6.0000 - 2.0000i 0 + 9.0000i 4.0000 + 7.0000i

>> Z.'

ans =

1.0000 + 2.0000i 6.0000 - 2.0000i


7.0000 - 3.0000i 0 + 9.0000i
3.0000 + 4.0000i 4.0000 + 7.0000i

Para vectores complejos, los dos productos escalares x’*y e y’*x son complejos conjugados uno del
otro y el producto x’*x de un vector complejo consigo mismo es real.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


LA FUNCIÓN format.

Controla el formato numérico de los valores mostrados por Matlab. La función afecta solamente
cómo los números son mostrados, no como los calcula o guarda.
El resumen de los formatos numéricos son:

Veamos los diferentes formatos para un vector x con componentes de diferentes magnitudes:
>>X=[4/3 1.2345e-6]

format short

1.3333 0.0000

format short e

1.3333e+000 1.2345e-006

format short g

1.3333 1.2345e-006

format long

1.33333333333333 0.00000123450000

format long e

1.333333333333333 1.234500000000000e-006

format long g

1.33333333333333 1.2345e-006

format bank

1.33 0.00

format rat

4/3 1/810045
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
format hex

3ff5555555555555 3eb4b6231abfd271
Si el más largo elemento de una matriz es mayor que 103 o menor que 10-3, Matlab aplica un factor
de escala común para el formato corto y largo.

Finalmente:

format compact

Suprime muchas de las líneas en blanco que aparecen en la salida. Esto permite ver más
información en la pantalla.
Si se desea más control sobre los formatos de salida, use sprinf y fprintf (funciones).
Cuando un planteamiento no cabe en una línea, use … (tres puntos) seguidos de return o enter
para indicar que continua en la siguiente línea. Ejemplo:

S = 1 -1/2 +1/3 -1/4 +1/5 -1/6 +1/7 …


-1/8 +1/9 -1/10 +1/11 -1/12;

Los espacios en blanco junto a =, +, y – son opcionales.

Matlab proporciona una forma para representar los números muy grandes. Por ejemplo:

>> 1.0/0.0

ans =

Inf

El infinito se representa como inf.


Cuando ocurre una operación indeterminada, Matlab da como respuesta NaN (Not a Number). Por
ejemplo:

>> 0/0

ans =

NaN

Así:

>> x=[1 2;3 4];


>> x/0

ans =

Inf Inf
Inf Inf

>> 1^inf

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


ans =

NaN
CADENA DE CARACTERES

Matlab puede definir variables que contenga cadenas de caracteres. Las cadenas de texto van entre
apóstrofes o comillas simples. Por ejemplo:

>> s='cadena de caracteres'

s=

cadena de caracteres

las cadenas de texto tienen su más clara utilidad en temas que se verán posteriormente y por eso se
difiere su explicación más detallada.

SOLUCIÓN DE SISTEMAS DE ECUACIONES LINEALES

Los operadores de división son usados para ello. Considérese el siguiente sistema de ecuaciones
lineales:
Ax = b

Donde x y b son vectores y A una matriz de los coeficientes. Esta matriz no necesariamente es
cuadrada. Se presentan tres casos; cuando es de tamaño m x n:

a) m=n Sistema cuadrado. Tiene solución exacta.


b) m>n Sistema sobredeterminado (redundante). Hallar una última solución cuadrada.
c) m<n Sistema bajo determinado (indeterminado). Determinar una solución básica con al menos
m
componentes distintos de 0.

El operador backslash (\) son usados para varios fines:

a) Permutación de matrices triangulares.


b) Matrices definidas positivas, simétricas.
c) Matrices no singulares, cuadradas.
d) Sistema redundante, rectangular.
e) Sistema indeterminado, rectangular.

Solución general

Para un sistema de ecuaciones lineales Ax=b, describe todas las posibles soluciones. La solución
general puede ser hallada con:

1) Resolviendo el correspondiente sistema homogéneo A = 0. esto se hace usando el comando


null(A). este regresa una base de la solución para Ax = 0. cualquier solución es una
combinación lineal de los vectores base.
2) Hallando una solución particular para el sistema no homogéneo Ax = b.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Luego, se puede escribir cualquier solución para Ax=b como la suma de la solución particular para
Ax=b, del paso 2), más una combinación lineal de los vectores base del paso 1).
El resto de esta sección describe cómo Matlab halla una solución particular a Ax=b, como en el paso
2).
Sistema cuadrado.

Es el más común. La solución a Ax=b puede tener las formas:

x=inv(A)*b donde b=vector columna

x=A\b (1)

lo que equivale a multiplicar por la inversa de esa matriz. Cuando la matriz es triangular o simétrica
se aprovecha esta condición para reducir el número de operaciones aritméticas. En algunos casos
se obtiene una solución con no más de r elementos distintos de cero, siendo r el rango de la matriz.
Por ejemplo:

>> A=[1 2],b=[2]

A=
1 2
b=
2
>> x=A\b

x=
Que es la solución obtenida dando valor 0 a la variable
0 independiente x(1).
1
x  y  z  0

Por ejemplo, resolver el sistema de ecuaciones: 2x  y  z  3
3 x  2y  2z  1

En forma matricial tendríamos:
 1 1  1  x  0 
2  1  1  y  =  3
    
3 2  2  z   1 

Resolviendo con Matlab: Otra forma de solucionarlo sería:


>> A=[1 1 -1;2 -1 -1;3 2 -2]; >> A=[1 1 -1;2 -1 -1;3 2 -2];
>> b=[0;-3;1]; %Vector columna. >> b=[0 -3 1]; %Vector fila.
>> x=A\b >> x=A\b'
x= x=
1 1
2 2 El resultado es un vector
3 3 columna.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Aunque no es una forma habitual, también se puede escribir un sistema de ecuaciones lineales en la
forma correspondiente a la transpuesta de Ax=b:
__ = __ yB=c (3)

Donde y, c son vectores fila (c conocido). Si la matriz B es cuadrada e invertible, la solución de este
sistema se puede escribir en las formas siguientes:

y = c*inv(B)
y = c/B (4)

En este caso (1) equivale a postmultiplicar por la inversa de la matriz.


Transponiendo (3) y hallando la solución aplicando \, se tiene:

y’ =(B’)\c’ (5) Comparando (4) y (5) se tiene: c/B = ((B’)\c’)’

Para el ejemplo anterior como sistema de ecuaciones:

>> B=[1 1 -1;2 -1 -1;3 2 -2];


>> c=[0 -3 1];
>> x=c/B' % x equivale a y de la expresión (4).

x=
1 2 3 Ahora el resultado es un vector fila

EJERCICIOS.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Resolver los sistemas de ecuaciones dados:

Resolver los siguientes sistemas:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


UNIDAD IV

FUNCIONES
Analizaremos en primer lugar las funciones de librería. Son funciones incorporadas (funciones
intrtínsecas) en el código ejecutable del programa. Existen también funciones definidas en ficheros
*.m y *.mex que vienen con el programa o aportadas por el usuario.

Los tipos de funciones más importantes de Matlab son:

FUNCIONES MATEMÁTICA QUE OPERAN ESCALARMENTE.

Cuando se aplican a una matriz actúan sobre cada elemento de la misma como si fuese un escalar.
Por tanto, se aplican de la misma forma a escalares, vectores y matrices. Las más importantes:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


FUNCIONES QUE ACTÚAN SOBRE VECTORES.

Básicamente son:

Estas funciones se pueden también aplicar a matrices, aplicándose por separado a cada columna de
la matriz. Si fuese aplicarse a cada fila basta con aplicarlas a la transpuesta.

FUNCIONES QUE ACTÚAN SOBRE MATRICES

Las siguientes funciones exigen que los argumentos sean matrices. Se clasifican en varios grupos:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Las funciones exp( ), sqrt( ) y log( ) se aplican elemento a elemento a las matrices y/o vectores que
se les pasan como argumento. Estas funciones anteriores se distinguen de las últimas nombradas
por la m adicional.
Aunque no pertenecen a ellas el operador potencia (^) está emparentado con ellas. Por ejemplo:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
FUNCIONES PARA CÁLCULO CON POLINOMIOS.

Para Matlab, un polinomio es considerado como un vector de coeficientes. Por ejemplo:

X4 - 8x2 +6x – 10 = 0
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Puede ser representado por el vector: [1,0,-8,6,-10]. Matlab puede efectuar varias operaciones
sobre el, según se muestra en la tabla:

FUNCIÓN DESCRIPCIÓN
conv Multiplica dos polinomios (convolución).
deconv Divide dos polinomios.
poly Polinomio característico de una matriz (polinomio
con raíces especificadas).
polyder Derivada de un polinomio.
polyfit Fija una curva polinómica.
polyval Evaluación de un polinomio.
polyvalm Evaluación de una matriz polinómica.
residue Expansión en fracciones parciales (residuos).
roots Determina las raíces de un polinomio.

Ejemplo: Calcular las raíces del polinomio dado arriba.

>> pol=[1 0 -8 6 -10]

pol =

1 0 -8 6 -10

>> roots(pol) %Cálculo de las raíces.

ans =

-3.2800
2.6748
0.3026 + 1.0238i
0.3026 - 1.0238i

>> polyval(pol,1) %Evaluación del polinomio en 1.

ans =

-11

Ejemplo: multiplicaremos un polinomio de 2º grado por otro de 3º.

>> pol1=[1 -2 4]

pol1 =

1 -2 4

>> pol2=[1 0 3 -4]


Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
pol2 =

1 0 3 -4

>> pol3=conv(pol1,pol2)

pol3 =

1 -2 7 -10 20 -16

Ejemplo: Sea el polinomio Wallis (usado para la aplicación del método de Newton por primera vez).

>> p=[1 0 -2 -5]; %Representación matricial.


>> r=roots(p)

r=

2.0946
-1.0473 + 1.1359i
-1.0473 - 1.1359i

>> p2=poly(r) %Regresa los coeficientes del polinomio.

p2 =

1.0000 0 -2.0000 -5.0000

roots y poly son funciones inversas. La función poly también calcula los coeficientes del polinomio
característico de una matriz. Por ejemplo:

>> A=[ .2 3 -0.9;5 1.75 6;9 0 1];


>> poly(A)

ans =

1.0000 -2.9500 -4.6000 -161.5250

También es posible evaluar un polinomio de matrices. En este caso p(s) = x3-2x-5 será p(X) = X3-2X-
5I donde X es la matriz cuadrada e I es la matriz identidad. Por ejemplo, crear una matriz cuadrada X
y evaluar el polinomio p en X:

>> X=[2 4 5;-1 0 3;7 1 5];


>> Y=polyvalm(p,X)

Y=

377 179 439


111 81 136
490 253 639

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


La multiplicación y división de polinomios corresponde a las operaciones de convolución y
deconvolución respectivamente. Ejemplo:

Sean los polinomios: a(s)=s2+2s+3 y b(s)=4s2+5s+6. Determinaremos su producto:

>> a=[1 2 3];b=[4 5 6];


>> c=conv(a,b)

c=

4 13 28 27 18

Se usará la deconvolución para dividir a(s) anulando el producto:

>> [q,r]=deconv(c,a)

q=

4 5 6

r=

0 0 0 0 0

Ejemplo:

>> p=[1 0 -2 5] %Polinomio.

p=

1 0 -2 5

>> c=polyder(p) %Determina la derivada del polinomio p

c=

3 0 -2

polyder también calcula la derivada del producto o cociente de dos polinomios. Por ejemplo:

>> a=[1 3 5];


>> b=[2 4 6];c=polyder(a,b) %Calcula la derivada del producto a*b

c=

8 30 56 38

>> [q,r]=polyder(a,b) %Calcula la derivada del cociente a/b

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


q=

-2 -8 -2

r=

4 16 40 48 36

q/r es el resultado de la operación.

La función polyfit determina los coeficientes de un polinomio que fija un conjunto de datos de
acuerdo con los mínimos cuadrados. Sea:

p=polyfit(x,y,n), donde x e y son vectores que contienen la data a fijar, y n es el grado del polinomio
de retorno. Por ejmplo:

>> x=[1 2 3 4 5];y=[5.5 43.1 128 290.7 498.4];


>> p=polyfit(x,y,3)

p=

-0.1917 31.5821 -60.3262 35.3400

Para graficar la data sobre un rango fino de valores tendríamos:

>> x=[1 2 3 4 5];y=[5.5 43.1 128 290.7 498.4];p=polyfit(x,y,3)

p=

-0.1917 31.5821 -60.3262 35.3400

>> x2=1:.1:5; 500


>> y2=polyval(p,x2);
450
>> plot(x,y,'o',x2,y2)
>> grid on 400

350

La figura es: 300

250

200

150

100

50

0
1 1.5 2 2.5 3 3.5 4 4.5 5

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


La función residue permite la expansión en fracciones parciales de la razón de dos polinomios.
Normalmente usado cuando se tiene la función de transferencia de una función. Para un polinomio
que no tiene raíces múltiples:

b(s) r r r
 1  2  ...... n  ks
a(s) s  p1 s  p2 s  pn

Donde r es un vector columna de residuos, p es un vector columna de localización de polos, y k es


un vector fila de términos directos. Por ejemplo:

 4s  8
Con Matlab:
s  6s  8
2

>> b=[-4 8];


>> a=[1 6 8];
>> [r,p,k]=residue(b,a)

r=

-12
8

p=

-4
-2

k=

[]

Dados tres argumentos de entrada (r,p y k), residue regresa al polinomio convertido:

>> [b2,a2]=residue(r,p,k)

b2 =

-4 8

a2 =

1 6 8

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


INTEGRACIÓN NUMÉRICA (CUADRATURA).

El área comprendida por una función F(x) puede ser determinada por integración numérica. El
proceso es referido como una cuadratura. En Matlab, las funciones de cuadratura son:

quad Cuadratura por adaptación de Simpson.


quad1 Cuadratura por adaptación de Lobatto.
quadv Cuadratura vectorizada.
dblquad Evaluación numérica de integral doble.
triplequad Evaluación numérica de integral triple.

Ejemplo: Cálculo de la longitud de una curva. Se puede usar quad o quad1. consideremos la curva
parametrizada:
x(t) = sin(2t), y(t) = cos(t), z(t) = t  t  [0.3 π ]

Una gráfica tridimensional de esta curva es:

>> t=0:0.1:3*pi;
>> plot3(sin(2*t),cos(t),t) 10

>> grid on La gráfica es: 8

La fórmula para el cálculo de la longitud de 4

la curva es la integral de la norma de la 2

derivada de las ecuaciones parametrizadas: 0


1
0.5 1
0 0.5
0
2π -0.5 -0.5


0
4 cos( 2t ) 2  sin( t ) 2 1 dt Una forma es: -1 -1

>> F=@(t)sqrt(4*cos(2*t).^2+sin(t).^2+1); %Funciones anónimas.


>> Q=quad(F,0,3*pi)

Q=

17.2220 donde Q es la longitud pedida.

2π π
Ejemplo: calcular la integral doble:   y sin x  x cos y  dxdy
π 0

Lo haremos con funciones anónimas, igual que el caso anterior:

>> F=@(x,y)y*sin(x)+x*cos(y);
>> resultado=dblquad(F,pi,2*pi,0,pi)

resultado =

-9.8696

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


EJERCICIOS.

I) Dados los polinomios:

a) 5x3 – 3x2 +x + 1
b) 3x5 + 2x2 – x
c) 4x3 – 3x -5
d) x3 – 3x2 -4x + 12

Determinar:

I) Raíces de cada uno de ellos.


II) Multiplicación de a) por b).
III) Multiplicación de b) por c).
IV) Multiplicación de c) por d).
V) Multiplicación de a) por b) por c) por d).
VI) División de a) entre b).
VII) División de b) entre a).
VIII) División de c) entre b).
IX) Determinar la derivada de cada uno de los polinomios dados.
X) Trazar la curva de cada uno de los polinomios dados.
XI) Evaluar cada uno de los polinomios dados para valores de x = -2 y x = 4.
XII) Calcular la derivada de las partes III), IV), VII) y VIII).

2) Dadas las matrices:

 1  4  1  4 5 2 2  4
2 2 1 2  1 1  2
0 5  4 1 0 
 5 3 2  1
a)  1 3 1 b)  c)   d)  1 2 1  e) 
 1 1  2 3  2  1  3 1 2  1
 1 2 2    0 1  1  
 1 4  1 6   3 2 2  1

Determinar el polinomio característico de cada una de ellas.

3) Hallar el área de la región cerrada por la curva y = 4 – x2 y el eje x.

4) Hallar el volumen que genera la región del problema anterior al girar en torno al eje x.

5) ¿Cuál es la longitud del arco de la parábola y = x2 desde x = 0 a x = 1?

6) Usando doble integración, determinar el volumen de la región común a los cilindros x2 + y2 = 4


y x2 + z2 = 4.

7) Hallar el volumen de la región limitada por z = x + y, z = 6, x = 0, y = 0, z = 0; usando doble


integración.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


8) Hallar el volumen de la región limitada por el cilindro parabólico z= 4 – x2 y los
planos
x = 0, y = 0, y = 6, z = 0; usando triple integración.

9) Usando integrales triples: dado un cono recto circular de radio 2 y altura 4, determinar:
a) el centro geométrico.
b) el momento de inercia con respecto a su eje.
c) el momento de inercia con respecto a una recta cualquiera que pase por su vértice y se
perpendicular a su eje.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


UNIDAD V

GRAFICACIÓN
INTRODUCCIÓN

Una de las ventajas ofrecidas por Matlab es su fuerte disposición para el trazado de gráficos tanto en
2D como en 3D. analizaremos el primer caso.

GRÁFICOS BIDIMENSIONALES.

Matlab usa un tipo especial de ventana. Ciertos comandos abren un tipo de ventana y otros dibujan
sobre una ventana activa.

Funcione gráficas 2D elementales.

Matlab dispone de cinco funciones gráficas:

FUNCIÓN DESCRIPCIÓN
plot( ) Crea un gráfico a partir de vectores y/o columnas de
matrices, con escalas lineales en ambos ejes
plotyy( ) Dibuja dos funciones con dos escalas diferentes para las
ordenadas, una a la derecha y otra a la izquierda de la
figura.
loglog( ) Ídem al anterior pero con escalas logarítmica en ambos
ejes.
semilogx( ) Ídem con escala lineal en las ordenadas y logarítmica en
las abscisas.
semilogy( ) Ídem con escala lineal en las abscisas y logarítmica en las
ordenadas.

En lo sucesivo haremos referencia casi exclusivamente a la función plot. Las demás pueden usarse
de forma similar.

Las funciones orientadas a añadir títulos al gráfico, a los ejes, a dibujar cuadrículas auxiliares,
introducir texto etc., son:

FUNCIÓN DESCRIPCIÓN
title(‘título’) Añade un título al dibujo.
xlabel(textol’) Añade una etiqueta a las abscisas. con
ylabel(‘textol’) Texto en el eje de ordenadas.
text(x, y,’texto’) Texto en el punto (x,y).
gtext(‘texto’) Usa el ratón para colocar el texto.
legend(‘texto1’,’texto2,…,p) Permite poner leyendas en la gráfica en el lugar de la ventana
indicado por p. 1 superior derecho (por defecto), 2 superior
izquierdo, 3 inferior izquierda,…
grid Cambia el modo de rejilla.
grid on Añade (activa) una rejilla a la gráfica actual.
grid off Elimina la rejilla.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


La función plot.

Es la función clave de los gráficos. El elemento básico de los gráficos 2D son los vectores.
La función plot puede también usarse con matrices como argumento y también cadenas de 1, 2 o 3
caracteres Por ejemplo:

FUNCIÓN DESCRIPCIÓN
plot(A) Dibuja una línea por cada columna.
plot(x,A) Dibuja las columnas (o filas) de A en ordenadas frente al vector x en abscisas. Las
dimensiones de x y A deben ser coherentes: Si A es cuadrada se dibujan las
columnas, pero si no lo es y la dimensión de las filas coincide con la de x, se
dibujan las filas.
plot(A,x) Análogo al anterior, pero dibujando las columnas (o filas) de A en abscisas, frente
al valor de x en ordenadas.
plot(A,B) Dibuja las columnas de B en ordenadas frente a las columnas de A en abscisas,
dos a dos. Las dimensiones deben coincidir.
plot(A,B,C,D) Análogo al anterior para cada par de matrices. Las dimensiones de cada par
deben coincidir, aunque pueden ser diferentes de las dimensiones de los demás
pares.

Estilos de líneas y marcadores en la función plot.

Matlab usa por defecto fondo blanco, azul para la gráfica y otros colores más oscuros para los ejes.
Estos valores pueden ser cambiados de acuerdo a las distintas posibilidades:

Cuando se dibujan varias líneas, por defecto se van escogiendo sucesivamente los colores de la
tabla comenzando con el azul, hacia arriba. Cuando se terminan se comienza de nuevo con el azul.
Añadir líneas a un gráfico ya existente.
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Para añadir líneas a un gráfico sin destruirlo y sin abrir una nueva ventana, se usan los comandos
hold on y hold off. El primero hace que los gráficos sucesivos respeten los ya dibujados (es posible
que se deban modificar las escalas de los ejes). El segundo deshace el efecto de hold on.

El comando subplot.

Una ventana gráfica se puede dividir en m particiones horizontales y n verticales para representar
múltiples gráficos en ella. Cada subventana tiene sus propios ejes. La forma general de este
comando es:

>>subplot(m,n,i)  m y n son el número de subdivisiones en filas y columnas (subventanas) e i es


la subdivisión que se convierte en activa (coloca la imagen en el lugar i-ésimo de izquierda a
derecha y de arriba abajo).

Las subdivisiones se enumeran consecutivamente, comenzando por la primera fila, luego la segunda
y así sucesivamente.

>>subplot(1,1,1): Devuelve al modo por defecto.

Control de los ejes: función axis( ).

Por defecto Matlab ajusta lasa escalas de los ejes de modo que varíe entre el mínimo y el máximo
valor de los vectores a representar; es el modo “auto” o automático. Para definir el valor de cada eje
se usa el comando:
axis([xmin,xmax,ymin,ymax])

Mientras que: axis(‘auto’) devuelve el escalado al valor por defecto.

Otras posibles opciones o usos para el dibujo 2D son:

COMANDO DESCRIPCIÓN
v = axis Devuelve un vector v con los valores xmin, xmax, ymin, ymax.
axis(‘ij’) Usa ejes de pantalla, con el origen en la esquina superior izquierda y el eje y en
vertical descendente. Según figura inferior.
axis(‘xy’) Usa ejes cartesianos normales. Según figura inferior.
axis(‘auto x’) Usa el escalado automático sólo en dirección x.
axis(‘auto xz’) Ídem anterior sólo en dirección xz.
axis(axis) Mantiene los ejes en sus valores actuales, ante posible adición de otras gráficas.
axis(tight’) Establece los mismos límites para los ejes que para los datos.
axis(‘equal’) El escalado es igual en ambos ejes.
axis(‘square’) La ventana será cuadrada.
axis(‘image’) La ventana tendrá las proporciones de la imagen a representar y el escalado
será coherente con dicha imagen.
axis(‘normal’) Elimina las restricciones introducidas por equal square.
axis(‘off’) Elimina las etiquetas, los números y los ejes.
axis(‘on’) Restituye las etiquetas, los números y los ejes.
XLim,YLim Permiten modificar selectivamente los valores máximo y mínimo de los ejes en
las direcciones x e y.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


grid y hold tienen una versión sin opción on u off. Corresponde a cambiar de una a la otra, sea cual
sea la que está escogida. Las dimensiones de los ejes de las gráficas siempre se ajustan (salvo el
uso de axis) para que la figura esté en proporción áurea, o sea, que:

longitud 1  5
  1,618
altura 2

Función line( ).

Permite dibujar una o más líneas que unen los puntos cuyas coordenadas se pasan como
argumentos. Permite además especificar el grosor, color, tipo de trazo, marcador, etc.

Función findobj( ).

Si al dibujar una línea se recupera el valor de retorno de la función line y se almacena en una
variable, más tarde es posible realizar un borrado selectivo de esa línea. Sin embargo, aunque no se
haya tomado esa precaución, también es posible recuperar la referencia (handle) a un determinado
elemento gráfico de una figura por medio de la función findobj (find object), a la que se pasan ciertas
características del elemento gráfico que permiten su localización. Algunos posibles usos son:

>>h=findobj: Recupera la referencia del objeto base de la jerarquía gráfica y de todos sus
Descendientes.

>>findobj(‘color’,’k’): Devuelve las referencias de todos los objetos de color negro.

>>set(findobj(gca,’Tipe’,’line’,’Color’,’b’),’Color’,’r’, ‘LineWidth’,3): Encuentra los objetos de


tipo línea y de color azul y cambia el color a rojo a la vez que establece una anchura de línea de tres
pixels.

CONTROL DE VENTANAS GRÁFICAS: FUNCIÓN figure.

Consideraremos varios aspectos:

figure: Sin argumentos, se crea una ventana gráfica nueva con el número consecutivo que le
corresponde. El valor de retorno es ese número.

figure(n): Hace que la ventana n pase a ser la ventana o figura activa. Si la ventana no existe, se
crea con el número consecutivo que le corresponde (que puede obtenerse como valor de retorno del
comando).

close: Cierra la figura activa.

close(n): Cierra la ventana o figura n.

clf: Elimina el contenido de la figura activa, dejándola abierta pero vacía.

gcf: Devuelve el número de la figura activa en ese momento.

figure(gcf): (get current figure); Permite visualizar la ventana de gráficos desde la ventana de
comandos.
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
La función figure también admite que se fijen algunas de sus propiedades, como por ejemplo la
posición y el tamaño con que aparece en la pantalla. Por ejemplo, el comando:

>>figure(‘position’,[left,botton,width,height])

Abre una ventana cuya esquina inferior izquierda está en el punto (left botton) respecto a la esquina
inferior izquierda de la pantalla (en pixels), que tiene una anchura de width pixels y una altura de
height pixels.

Otra característica de una ventana gráfica es la representaciones de animaciones usando la técnica


del doble buffer consiste en que es como si el PC tuviera dos paneles de dibujo: cuando uno está a
la vista, se dibuja en el otro, y cuando el dibujo está terminado el segundo panel se hace visible. El
resultado es un movimiento perfecto sin parpadeo (flicker).

Para dibujar con doble buffer en la ventana activa basta ejecutar los comandos:

>>set(gcf,’DoubleBuffer’,’on’,’Renderer’,’painters’)

OTRAS FUNCIONES GRÁFICAS 2D.

Otras gráficas distintas a las generadas por plot se realizan mediante las funciones:

FUNCIÓN DESCRIPCIÓN
bar( ) Muestra las columnas de una matriz m x n, como m grupos de n barras
verticales.
barh( ) Ídem anterior pero para barras horizontales.
bar3( ) Igual que bar pero con aspecto 3-D.
bar3h( ) Igual que barh pero con aspecto 3-D.
pie( ) Gráficos de torta.
pie3( ) Igual al anterior pero con aspecto 3-D.
area( ) Igual que plot, pero rellenado en ordenadas de 0 a y.
stairs( ) Análoga a bar pero sin líneas internas.
errorbar( ) Representa sobre una gráfica, mediante barras, valores de errores.
compass( ) Dibuja los elementos de un vector complejo como un conjunto de vectores
partiendo de un origen común.
feather( ) Dibuja los elementos de un vector complejo como un conjunto de vectores
partiendo de orígenes uniformemente espaciados sobre las abscisas.
hist( ) Dibuja histogramas de un vector.
rose( ) Histograma de ángulos en radianes.
quiver( ) Dibujo de campos vectoriales como conjunto de vectores.
fplot(‘f’,[a,b]) Dibuja la función f(x) para valores de x entre a y b.
ezplot(‘f’) Ídem anterior pero para valores de x entre -2π y 2π.
polar(t,r,opciones) Gráficas en polar, t vector de ángulos en radianes, r radio vector.
ezpolar(f ) Dibuja la curva polar ρ  f (θ) en el dominio 0<θ<2π.
Fill(x,y,’c’) Dibuja un poligono 2D definido por los vectores columna x e y con el color
indicado por c.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Función fplot:

Dibuja vectores. Si ser quiere dibujar una función, antes de ser pasada a plot debe ser convertida en
un vector de valores.
Normalmente la función fplot admite como argumento un nombre de función o un nombre de fichero
*.m en donde está definida una función de usuario. La función puede ser escalar (un único resultado
para cada valor de x) o vectorial. Su forma general es:

fplot(‘funcion’,limites,’cadena’,tol) o
[x,y]=fplot’funcion’,limites,’cadena’,tol)

donde: función: es el nombre de la función o del fichero *.m.


límites: es un vector de 2 o 4 elementos, cuyos valores son [xmin,xmax] o
[xmin,xmax,ymin,ymax].
‘cadena’: permite controlar el color, los markers y el tipo de línea.
tol: tolerancia de error relativo. El valor por defecto es 2e-03. el máximo número de valores
en x es (1/tol)+1.

Función fill:

Función especial para dibujar polígonos planos, rellenándolos de un determinado color. La forma
general es:

>>fill(x,y,z) o
>>fill(A,B,C) (con matrices) (A, B son matrices del mismo tamaño y C un vector fila o una matriz).

fill dibuja un polígono definido por los vectores x e y, rellenándolo por el color especificado por c. el
polígono se cierra uniendo el último vértice con el primero. Respecto al color:
.- Si c es un carácter de color o un vector de valores, el polígono se rellena de modo uniforme con el
color especificado.
.- Si c es un vector de la misma dimensión que x e y, sus elementos se transforman de acuerdo a un
mapa de colores determinado, y el llenado del polígono, no uniforme en este caso, se obtiene
interpolando entre los colores de los vértices.

Funciones ezplot( ) y ezpolar( ):

ezplot es útil cuando se quiere obtener rápidamente la gráfica de una función. Su forma más simple
es:

>>ezplot(f,[a,b]);

La función f puede ser de dos variables: f(x,y)=0. el intervalo por defecto para cada variable es:
(-2π ≤ x ≤ 2π). También se puede definir un intervalo común o específico para cada variable:

>>ezplot(f); %Dibuja f(x,y) = 0 en -2*pi < x < 2*pi y -2*pi < y < 2*pi.
>>ezplot(f,[a,b]); %Dibuja f(x,y) = 0 en a < x < b y a < y < b.
>>ezplot(f,[xmin,xmax,ymin,ymax]);

La function dibuja también funciones paramétricas x(t), y(t) como por ejemplo:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


>>ezplot(‘sin(t)’,’cos(t)’); %Dibuja para 0 < t < 2*pi.
>>ezplot(‘sin(t)’,’cos(t)’,[t1,t2]); %Dibuja para t1 < t < t2.
>>f=inline(‘cos(x)+2*sin(2*x)’); ezplot(f);

La función ezpolar es similar a ezplot y se usa para dibujar en coordenadas polares.

ENTRADA DE PUNTOS CON EL RATÓN.

Se realiza mediante la función ginput, que permite introducir las coordenadas del punto sobre el que
está el cursor, al clicar (o al pulsar una tecla). Unas formas de uso son:

[x,y] = ginput Lee un número indefinido de puntos, cada vez que se clica o pulsa una tecla,
hasta que se termina pulsando la tecla intro.

[x,y] = ginput(n) Lee las coordenadas de n puntos.

[x,y,bot] = ginput Igual que el anterior, pero también devuelve un vector de enteros bot con el
código ASCII de la tecla pulsada o el número del botón del ratón con el que se ha
clicado.

PREPARACIÓN DE PELÍCULAS O “MOVIES”.

Para preparar pequeñas películas se usan las instrucciones movie, moviein y getframe. La función
getframe devuelve un vector columna con la información necesaria para reproducir la imagen que se
acaba de representar en la figura o gráfica activa, por ejemplo, con la función plot. El tamaño de este
vector columna depende del tamaño de la ventana, pero no de la complejidad del dibujo.
La función moviein(n) reserva memoria para almacenar n frames (imágenes).
Una vez creada la película se puede representar el número de veces que se desee con el comando
movie.

IMPRESIÓN DE FIGURAS.

Se realiza a partir de file>print, donde se muestra en la ventana que abre algunas opciones. La
opción page setup abre un cuadro de diálogo que permite situar el dibujo sobre la página, establecer
los márgenes, la orientación del papel, etc.
La impresión de una figura puede hacerse también desde la línea de comandos. La forma general
del comando es:

>>print-device-options filename

LAS VENTANAS GRÁFICAS DE MATLAB.

La figura de abajo muestra los menús y las barras de herramientas de las ventanas gráficas de
Matlab. Por defecto sólo aparece la barra de herramientas de la línea superior. Para hacer aparecer
también la segunda barra se ejecuta Camera Toolbar, en el menú View.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


En el menú Edit, además de los comandos
referentes a la copia de figuras, aparecen los
comandos Figure Properties, Axes Properties,
Current Object Properties y Colormap, que abren
paso a los correspondientes editores de
propiedades.
Los tres primeros se muestran en las figuras de
abajo (con la parte de la imagen con tamaño
reducido).

También es posible cambiar interactivamente el


mapa de colores utilizado en una figura. Con el
comando Edit/Colormap se abre el cuadro de
diálogo mostrado al lado.
El menú Edit de las ventanas gráficas ofrece
también las opciones estándar de Windows,
permitiendo copiar, cortar y pegar los elementos
seleccionados de la figura si está activada la opción
Plot Edit

El menú View permite hacer visible u ocultar las


barras de herramientas Window Toolbar y Camera
Toolbar.

Como se ha dicho, por defecto sólo aparece la primera de ellas. Estas barras de herramientas
disponen de diversas opciones para trabajar con ventanas que contengan gráficos 2D y 3D. El menú
Insert permite añadir elementos a la figura activa, por ejemplo rótulos etiquetas, líneas, texto, etc.
Por su parte el menú Tools permite realizar desde menú alguna de las operaciones también
disponibles en las barras de herramientas. Finalmente, el menú Help permite acceder a la ayuda
concreta que hace referencia a las ventanas gráficas.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


EJEMPLOS.

1.-
>> x=[1 3 2 4 5 3]

x=
1 3 2 4 5 3

>> plot(x) %Dibuja el vector dado como la unión de los puntos. La gráfica es:
5

4.5

3.5

2.5

1.5

1
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6

2.-
>> x=[1 6 5 2 1];y=[1 0 4 3 1]; 4

>> plot(x,y) %Dibuja un polígono cerrado. 3.5

2.5

2
El dibujo es:
1.5

0.5

0
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6
3.-
>> x=0:pi/25:6*pi;
>> y=sin(x);z=cos(x);
>> plot(x,y,x,z) %Muestra las permutaciones de colores, según secuencia de la tabla.

0.8

0.6

0.4

La gráfica es: 0.2

-0.2

-0.4

-0.6

-0.8

-1
0 2 4 6 8 10 12 14 16 18 20

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


4.-
>> plot(eig(rand(20,20)),'+') %Vector complejo. La gráfica es:

1.5

0.5

Los markers son “+” 0

-0.5

-1

-1.5
-2 0 2 4 6 8 10

5.-
>> z=eig(rand(20,20));
>> plot(real(z),imag(z),'+') %Produce el mismo resultado anterior.

6.- Añade líneas a un gráfico ya existente. Muestra el uso de hola on y hola off.

>> plot(x)
20

18

>> hold on 16

>> plot(x+1,'*') 14

>> hold off Las gráficas son: 12

10

0
0 20 40 60 80 100 120 140 160

7.- Se generan 4 gráficos en la misma ventana. Uso de subplot.

>> y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z;


>> subplot(2,2,1), plot(x,y)
>> subplot(2,2,2), plot(x,z)
>> subplot(2,2,3), plot(x,w)
>> subplot(2,2,4), plot(x,v)
1 1

0.5 0.5

0 0

-0.5 -0.5

-1 -1
0 5 10 15 20 0 5 10 15 20
Las gráficas son:
1 0.5

0.5

0 0

-0.5

-1 -0.5
0 5 10 15 20 0 5 10 15 20

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


8.- Control de las marcas y los rótulos de los ejes.

>> x=-pi:.1:pi; y=sin(x);


>> plot(x,y)
>> x=-pi:.1:pi; y=sin(x);
>> plot(x,y) % 1ª gráfica
>> set(gca,'XTick',-pi:pi/2:pi) %2ª gráfica
>> set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'}) %3ª gráfica

1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0
0
-0.2
-0.2
-0.4
-0.4
-0.6
-0.6
-0.8
-0.8
-1
-4 -3 -2 -1 0 1 2 3 4 -1
-3.1416 -1.5708 0 1.5708 3.1416

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-pi -pi/2 0 pi/2 pi

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


9.- Control de ventanas gráficas. Función figure:

>> x=[-4*pi:pi/20:4*pi];
>> plot(x,sin(x),'r',x,cos(x),'g') % 1ª figura.
>> title('Función sin(x)-en rojo-y Función coseno(x) -en verde-') % 2ª figura.
>> xlabel('ángulo en radianes'), figure(gcf) % 3ª figura.
>> ylabel('valor de la función trigonométrica'), figure(gvf) % 4ª figura.
>> axis([-12,12,-1.5,1.5]),figure(gcf) % 5ª figura.
>> axis('equal'), figure(gcf) % 6ª figura.
>> axis('normal'), figure(gcf) %7ª figura.
>> axis('square'), figure(gcf) % 8ª figura.
>> axis('off'), figure(gcf) % 9ª figura.
>> axis('on'), figure(gcf) % 10ª figura.
>> axis('on'), grid, figure(gcf) % 11ª figura.
Función sin(x)-en rojo-y Función coseno(x) -en verde- Función sin(x)-en rojo-y Función coseno(x) -en verde-
1 1 1

0.8 0.8 0.8

0.6 0.6 0.6

0.4 0.4 0.4

0.2 0.2 0.2

0 0 0

-0.2 -0.2 -0.2

-0.4 -0.4 -0.4

-0.6 -0.6 -0.6


-0.8 -0.8 -0.8
-1 -1
-15 -10 -5 0 5 10 15 -1
-15 -10 -5 0 5 10 15 -15 -10 -5 0 5 10 15
ángulo en radianes

Función sin(x)-en rojo-y Función coseno(x) -en verde-


1 Función sin(x)-en rojo-y Función coseno(x) -en verde-
1.5 Función sin(x)-en rojo-y Función coseno(x) -en verde-
0.8
8
0.6
1
v alor de la función trigonom étric a

6
0.4
valor de la función trigonométrica

valor de la función trigonométrica

0.2 0.5 4

0 2
0
-0.2 0

-0.4 -2
-0.5
-0.6 -4

-0.8 -1
-6
-1
-15 -10 -5 0 5 10 15 -8
ángulo en radianes -1.5
-10 -5 0 5 10
ángulo en radianes -10 -5 0 5 10
ángulo en radianes

Función sin(x)-en rojo-y Función coseno(x) -en verde- Función sin(x)-en rojo-y Función coseno(x) -en verde-
1 1
Función sin(x)-en rojo-y Función coseno(x) -en verde-

0.8 0.8

0.6
0.6
valor de la función trigonométrica
valor de la función trigonométrica

0.4
0.4
0.2
0.2
0
0
-0.2
-0.2
-0.4
-0.4
-0.6
-0.6
-0.8
-0.8
-1
-10 -5 0 5 10
-1 ángulo en radianes
-10 -5 0 5 10
ángulo en radianes
Función sin(x)-en rojo-y Función coseno(x) -en verde-
1
Función sin(x)-en rojo-y Función coseno(x) -en verde-
1 0.8

0.8 0.6
valor de la función trigonométrica

0.6 0.4
valor de la función trigonométrica

0.4 0.2

0.2 0

0 -0.2

-0.2 -0.4

-0.4 -0.6

-0.6 -0.8

-0.8 -1
-10 -5 0 5 10
-1 ángulo en radianes
-10 -5 0 5 10
ángulo en radianes

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


10.- Se genera un vector aleatorio entre 0 y 10. (otra funciones gráficas 2D):

>> x=[rand(1,100)*10];
>> plot(x) % 1ª figura.
>> bar(x) % 2ª figura.
>> stairs(x) % 3ª figura.
>> hist(x) % 4ª figura.
>> hist(x,20) % 5ª figura.
>> alfa=(rand(1,20)-0.5)*2*pi; %6ª figura.
>> rose(alfa)

10 10 10

9 9 9

8 8 8

7 7 7

6 6 6

5 5 5

4 4 4

3 3 3

2 2 2

1 1 1

0
0 0 0 10 20 30 40 50 60 70 80 90 100
0 10 20 30 40 50 60 70 80 90 100 0 20 40 60 80 100 120

16 12
90 3
120 60
14
10
2
12
150 30
8 1
10

8 6 180 0

6
4

4 210 330

2
2
240 300
0 0 270
0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10

11.- function fplot

Crearemos un fichero .m: function y = mifunc(x) Se guardará en C:\MATLAB como mifunc.m


y(:,1)=200*sin(x)./x;
y(:,2)=x.^2; 400
se creará:
350

>> fplot('mifunc(x)',[-20 20],'g') 300

250

200

150

La figura resultante es: 100

50

-50
-20 -15 -10 -5 0 5 10 15 20

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


12.- Función fill.

>> x=[1 5 4 2]; y=[1 0 4 3];


>> fill(x,y,'r') % 1ª figura.
>> colormap(gray), fill(x,y,[1 0.5 0.8 0.7]) % 2ª figura. Acá la figura no aparece rellena en gris.

4 4

3.5 3.5

3 3

2.5 2.5

2 2

1.5 1.5

1 1

0.5 0.5

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

13.- Entrada de puntos con el ratón.

>> clf, [x,y]=ginput(4); % 1ª figura.


>> figure(gcf), plot(x,y,'w'), pause(5), fill(x,y,'r') % 2ª figura.

Al principio solo aparece el area de dibujo, sobre el que se dan los 4 click, según la primera
instrucción. Al ejecutarse la segunda instrucción aparece la figura segunda. La instrucción pause(5)
espera 5 segundos para continuar la ejecución (precisión de centésimas de segundo).

1
1
0.9
0.9
0.8
0.8
0.7
0.7
0.6
0.6
0.5
0.5
0.4
0.4

0.3
0.3

0.2 0.2

0.1 0.1

0 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

14.- Preparación de películas o “movies”.

>> M=moviein(17);
>> x=[-2*pi:0.1:2*pi]';
for j=1:17
y=sin(x+j*pi/8);
plot(x,y);
M(:,j)=getframe;end % Aparece rápidamente.
>> movie(M,10,15) % Se reproduce 10 veces en 15 cuadros por segundo

La figura es una senoide que se desplaza sobre el plano, aparece como dibujándose.
Pruebe a cambiar la última instrucción por: movie(M, 10, 8).
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
EJEMPLOS VARIOS.

1.- Trazado de dos figuras en un mismo esquema. 1

>> X=0:0.01:2*PI; 0.8

??? Undefined function or variable 'PI'.


0.6

0.4

0.2
>> x=0:0.01:2*pi; 0
>> y=cos(x); Figura 1: -0.2

>> z=sin(2*x); -0.4

>> plot(x,y,'r-',x,z,'b--'); % Dos dibujos. -0.6

-0.8

-1
0 1 2 3 4 5 6 7

2.- Se quiere seguir dibujando pero sin borrar la figura anterior: permanece la figura anterior y la
nueva.
título
1.5

>> figure
>> x=0:0.01:2*pi; 1

>> Y=[cos(x);sin(2*x)]; 0.5

>> plot(x,Y)
>> axis([0 2*pi -1.5 1.5]) %ejes. Figura 2:
ejey
0

>> xlabel('ejex') -0.5


>> ylabel('ejey')
>> title('título') -1

>> grid on -1.5


0 1 2 3 4 5 6
ejex

3.- Usaremos ylim para recortar los límites en el rango de la variable vertical. Permite limitar
funciones que tienden a infinito.
10

>> close % Cierra la última figura. 9

>> figure(4) % Abre la figura 4. 8

>> x=linspace(0,3,200); % 200 puntos equiespaciados de 0 a 3 7

>> plot(x,1./(x-1).^2) 6

>> ylim([0 10]), box off % Quitamos la caja de alrededor.


5

4
>> pause 3

>> close(1) % Cerramos la primera figura. Figura 4: 2

Se ve que, en general, close(n) cierra la figura con numeración n. 0


0 0.5 1 1.5 2 2.5 3

Todas se cierran con close all.

4.-

>> x=linspace(0,pi,200);
>> y=1-x.^2/2+x.^4/16;
>> plot(x,cos(x),x,y) % Primera figura.
>> legend('cos','\itTaylor') %\it=cursiva.
>> title('título con \ alpha, \infty, \int_a^b')
Warning: Unable to interpret TeX string "\ alpha, \infty, \int_a^b".
> In legendcolorbarlayout>doLayoutCB at 281
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
In title at 45
In title at 23
>> pause
>> figure(2) % Acceso a la 2ª gráfica.
>> plot(x,cos(x),x,1-x.^2/2+x.^4/16) & 2ª figura.
>> legend('\bfcos','\itTaylor',2) % En otra esquina.
>> text(0,0.5,'texto en gráfica') %(0,0.5) son las coordenadas.

título con \ alpha, \infty, \int_a^b


2.5 2.5
cos cos
Taylor Taylor
2 2

1.5 1.5

1 1

0.5 0.5 texto en gráfica

0 0

-0.5 -0.5

-1 -1
0 0.5 1 1.5 2 2.5 3 3.5 0 0.5 1 1.5 2 2.5 3 3.5

Con \it se pasa el tipo a cursiva (Italia) y con \bf a negrita (boldface). Se observa que \itTaylor o
\bfcos tiene todo seguido.
La instrucción gtext permite colocar comentarios o texto en una gráfica viendo donde se desea
colocarlo.

5.- Uso de gtext y close all.

>> plot(x,cos(x)), axis equal % Misma escala en ambos ejes.


>> gtext('texto para poner') % Clicamos en el dibujo.
>> pause
>> close all % Cierra todos los dibujos existentes.

1 El conjunto de instrucciones traza la figura


de al lado. La expresión close all cierra
todas ellas, incluso la última anterior que
0.5
permanecía con ésta que acabamos de
dibujar.
0 Observe que donde se clicó aparece el
contenido de lo indicado por gtext (texto
-0.5 para poner).

-1

0 0.5 1 1.5 2 2.5 3


texto para poner

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


6.- Realización de gráficas con fill.

>> t=linspace(0,2*pi,20); |
>> fill(cos(t),sin(t),'r',1+0.5*cos(t),0.5*sin(t),[0 0.5 0]); % Primera figura.
>> hold on
>> pause
>> fill(0.3*cos(t),1.5+0.3*sin(t),[0.8 0.8 0.8]) % Segunda figura.

1 2

0.8

0.6 1.5

0.4
1
0.2

0
0.5
-0.2

-0.4 0

-0.6

-0.8 -0.5

-1
-1 -0.5 0 0.5 1 1.5
-1
-1 -0.5 0 0.5 1 1.5

La primera figura, una vez efectuada la segunda instrucción fill, se transforma en la segunda.

7.- Otro ejemplo de gráficas múltiples (uso de subplot y uso de fplot).

>> subplot(221), fplot('cos(x)',[0 4*pi]); % fplot=dibuja funciones.


>> subplot(222), fplot('abs(cos(x))',[0 4*pi]), grid on;
>> subplot(223), fplot('[sin(x),sin(2*x),sin(3*x)]',[0 2*pi]);
>> subplot(224), fplot('[sin(x),cos(x)]',[0 2*pi])
>> legend('sen','cos');
>> pause
>> subplot(212), fplot('(2+cos(x))*sin(10*x)',[0 8*pi])

Los cuatro primeros subplot producen las cuatro primera figuras mostradas abajo (después de la
instrucción legend, que añade lo mostrado en la 4ª figura). El último produce la segunda.

1 1 1 1

0.8 0.8
0.5 0.5
0.6 0.6
0 0
0.4 0.4
-0.5 -0.5
0.2 0.2

-1 0 -1 0
0 5 10 0 5 10 0 5 10 0 5 10

1 1 4
sen
0.5 0.5 cos 2

0 0 0

-0.5 -0.5 -2

-1 -1 -4
0 2 4 6 0 2 4 6 0 5 10 15 20 25

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


8.- Otro ejemplo de lectura de puntos con el ratón.
1

>> figure 0.9


>> axis([0 1 0 1]); % Crea el cuadro de dibujo. 0.8
>> [x,y]=ginput(4); % Lee cuatro puntos. 0.7
>> plot(x,y), axis([0 1 0 1]); 0.6
>> [x,y] % Muestra la matriz (puntos).
0.5

0.4
ans =
0.3

0.5058 0.9108 0.2

0.3975 0.5863 La gráfica es: 0.1

0.0680 0.3377 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

0.6878 0.4401

GRÁFICOS TRIDIMENSIONALES.

Es una poderosa herramienta de Matlab.

TIPOS DE FUNCIONES GRÁFICAS TRIDIMENSIONALES.

La principal función es plod3: dibuja puntos con coordenadas contenidas en tres vectores,
uniéndolos con una línea continua (por defecto) o con markers.

Ejemplo:
20

>> fi=[0:pi/20:6*pi];plot3(cos(fi),sin(fi),fi,'r'), gris


15

La figura es: 10

0
1
0.5 1
0 0.5
0
-0.5 -0.5
-1 -1

Veamos la representación de una función de dos variables. Usaremos la creación de un fichero


denominado, por ejemplo; test3d.m. la fórmula será:

2 2 x  2 2 1 2 2
z  3(1 x)2 ex (y1) 10.  x3  y5 ex y  e(xy) y
5  3
El programa es:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


>> x=[-3:0.4:3]; y=x;
>> close
>> subplot(2,2,1) 20 10

>> figure(gcf), fi=[0:pi/20:6*pi]; 10 0


>> plot3(cos(fi),sin(fi),fi,'r')
0 -10
>> grid 1
1
20
20
>> [X,Y]=meshgrid(x,y); 0
-1 -1
0 10
0 0
10

>> Z=test3d(X,Y);
>> subplot(2,2,2)
>> figure(gcf), mesh(Z) Gráfica: 10 10

>> subplot(2,2,3) 0 0
>> figure(gcf), surf(Z)
>> subplot(2,2,4) -10
20
-10
15
>> figure(gcf), contour3(Z,16) 10 10
20 10
5 5
10
15
0 0

Dibujo simplificado de funciones 3D: función ezplot3( ), ezsurf( ), etc.

La función ezplot3 dibuja líneas paramétricas tridimensionales en la forma x(t), y(t), z(t). por defecto
se usa el intervalo 0 < y <2*pi. Las posibilidades:

>>ezplot3(x,y,z);
>>ezplot3(f,[t1,t2]);
>>ezplot3(x,y,z,[t1,t2],’animate’); % Dibuja la curva progresivamente.

x, y, z; pueden ser funciones anónimas, handles o funciones, funciones inline o cadenas de


caracteres. Los ficheros *.m y las funciones inline se escriben de forma que admitan vectores de
valores como argumentos (sectorizados).

La función ezsurf dibuja una función de dos variables f(x,y), en 3D. Por defecto usa los intervalos
-2*pi < x , y < 2*pi. Los valores de x e y pueden ser cadena de caracteres, una función convencional,
función anónima o online. Posibles formas:

>>ezsurf(f)
>>ezsurf(f,[a,b]);
>>ezsurf(x,y,z,[xmin,xmax,ymin,ymax]);

Permite dibujar también superficies paramétricas 3D , por ejemplo, de las formas:

>>ezsurf(x,y,z); % Por defecto: -2*pi<s,t<2*pi.


>>ezsurf(x,y,z,[a,b]);
>>ezsurf(x,y,z, [smin,smax,tmin,tmax]);

Con un último parámetro N se puede controlar la densidad del mallado con el que se dibuja. Por
defecto N=60. con el argumento ‘circ’ se dibuja en un dominio circular. Por ejemplo:

>>ezsurf(‘s*cos(t)’,’s*sin(t)’,’t’)
>>ezsurf(‘s*cos(t)’,’s*sin(t)’,’s’)
Ezsurf(‘exp(-s)*cos(t)’,’exp(-s)*sin(t)’,’t’, [0,8,0,4*pi])

Otras funciones son:


Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
FUNCIÓN DESCRIPCIÓN
ezcontourf(f) Dibuja las líneas de contorno de f(x,y) para x e y entre -2*pi y 2*pi.
ezcontour(f,dominio) Dibuja f(x,y) sobre un dominio dado, como los vectores
[xmin,xmax,ymin,ymax] o [min,max].
ezcontour(…,n) Dibuja f en el dominio por defecto, usando un gris de nxn; n tiene por
defecto 60.
ezmesh Crea la gráfica de una f(x,y) usando mesh (superficie mallada).
ezsurfc Combina superficie / contorno.
ezmeshc Combina Mallado / contorno.

Para ezmesh, tenemos las siguientes opciones de sintaxis:

ezmesh(fun)
ezmesh(fun,domain)
ezmesh(funx,funy,funz)
ezmesh(funx,funy,funz,[smin,smax,tmin,tmax])
ezmesh(funx,funy,funz,[min,max])
ezmesh(...,n)
ezmesh(...,'circ')
ezmesh(axes_handle,...)
h = ezmesh(...)

Para ezsurfc, tenemos las opciones de sintaxis:

ezsurfc(fun)
ezsurfc(fun,domain)
ezsurfc(funx,funy,funz)
ezsurfc(funx,funy,funz,[smin,smax,tmin,tmax])
ezsurfc(funx,funy,funz,[min,max])
ezsurfc(...,n)
ezsurfc(...,'circ')
ezsurfc(axes_handle,...)
h = ezsurfc(...)

Para ezmeshc se tienen las siguientes formas de sintaxis:

ezmeshc(fun)
ezmeshc(fun,domain)
ezmeshc(funx,funy,funz)
ezmeshc(funx,funy,funz,[smin,smax,tmin,tmax])
ezmeshc(funx,funy,funz,[min,max])
ezmeshc(...,n)
ezmeshc(...,'circ')
ezmesh(axes_handle,...)
h = ezmeshc(...)

Otras alternatives con vectores y matrices, en cuanto a sintaxis serían:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


mesh(X,Y,Z)
mesh(Z)
mesh(...,C)
mesh(...,'PropertyName',PropertyValue,...)
mesh(axes_handles,...)
meshc(...)
meshz(...)
h = mesh(...)
hsurface = mesh('v6',...) hsurface = meshc('v6',...)

Dibujo de líneas: función plot3.

Se maneja en forma similar que plot. Sus presentaciones son:

>>plot3(x,y,z): Dibuja una línea que une los puntos: (x(1), y(1), z(1)), (x(2), y(2), z(2)), etc., y la
proyecta sobre un plano para poderla representar en la pantalla.

>>plot3(x,y,z,s): Se puede incluir una cadena de 1, 2 o 3 caracteres para el color,los markers y el


tipo de línea.

>>plot3(X,Y,Z): Para matrices del mismo tamaño. Se dibujan tantas líneas como columnas tienen
estas tres matrices cada una de las cuales está definida por las tres columnas homólogas de dichas
matrices.

Ejemplo: Dibujaremos un cubo:


1
>> A=[0 1 1 0 0 0 1 0 1 1 0 0 1 1 1 1 0 0
001100000110001111 0.8

0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0]; 0.6

>> plot3(A(1,:)',A(2,:)',A(3,:)') 0.4

0.2
El cubo:
0
1
1
0.8
0.5 0.6
0.4
0.2
0 0

Dibujo de mallados: funciones meshgrid, mesh y surf.

Dibujaremos una función de dos variables f(x,y) sobre un dominio rectangular. También se dibujan
los elementos de una matriz como función de los dos índices.

Sean x e y dos vectores con coordenadas en una y otra dirección de la retícula (gris) sobre la que se
dibujará la función. Después se crearán dos matrices X, cuyas filas son copia de x e Y cuyas
columnas son copia de y. Estas matrices se crea con meshgrid y representan respectivamente las
coordenadas x e y de todos los puntos de la retícula. La matriz de valores Z se calcula a partir de las
matrices X e Y. La matriz Z se dibuja con mesh, cuyos elementos son función elemento a elemento
de los elementos de X e Y.
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Ejemplo:

>> close all


>> u=-8:0.5:8; v=u; 1

>> [U,V]=meshgrid(u,v);
>> R=sqrt(U.^2+V.^2)+eps; 0.5

% Para evitar dividir por 0, se suma al


denominador el Nº pequeño eps. 0

>> W=sin(R)./R;
-0.5
>> mesh(W) % Figura de al lado: 40

>> surf(W) % Figura de abajo. 30


20 30
40

20
10 10
0 0

1
Se comprueba que mesh dibuja en perspectiva
una función en base a una retícula de líneas de
0.5
colores, rodeando cuadriláteros del color de
fondo con eliminación de líneas ocultas. El color
0
depende del valor z de la función.
En la segunda figura, en vez de líneas aparece
-0.5
40 una superficie faceteada, también con
30
30
40 eliminación de líneas ocultas. El color de las
20
10
20 facetas depende también del valor de la función.
10
0 0

Ejemplo

Dibujaremos nuevamente la función correspondiente al fichero test3d.m, con las sentencias:

>> x=[-3:0.2:3];
y=x;
>> [Z,Y]=meshgrid(x,y);
>> Z=test3d(X,Y);
>> figure(gcf), mesh(Z), pause(5), surf(Z)
>> figure(gcf), mesh(Z), pause(5), surf(Z)

10 10

5 5

0 0

-5 -5

-10 -10
20 20
15 20 15 20
10 15 10 15
10 10
5 5 5 5
0 0 0 0

Pause(5) espera 5 segundos mostrando la primera figura para luego mostrar la segunda. De no ser
así, se mostraría permanentemente la segunda sin observar la primera. (demuéstrelo).
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Dibujo de líneas de contorno: funciones contour y contour3.

Representan funciones por medio de isolíneas o curvas de nivel. Para el ejemplo anterior de las
matrices Z y W:

Ejemplo:

>> contour(Z,20); % Figura 1ª.


>> contour3(Z,20); % Figura 2ª.
>> contour(W,20); % Figura 3ª.
>> contour3(W,20); % Figura 4ª.

30

10
25

5
20
0

15
-5

10 -10
30
30
20 25
5 20
10 15
10
5

5 10 15 20 25 30

30
1

25

0.5
20

0
15

-0.5
10
30
30
20 25
5 20
10 15
10
5

5 10 15 20 25 30

Acá 20 representa el número de líneas de nivel. Si no se pone se liza un número por defecto. Otras
posibles formas de estas funciones:

contour(Z,val): val es un vector de valores para las isolíneas a dibujar.


contour(u,v,W,20): Se usa u y v para dar valores a los ejes de coordenadas.
contour(Z,20,’r--‘): Se puede especificar el tipo de línea como en plot.
contourf(Z,val): Análoga a contour( ), pero rellenado el espacio entre líneas.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


ELEMENTOS GENERALES: EJES, PUNTOS DE VISTA, LÍNEAS OCULTAS,…

Las funciones surf y mesh dibujan funciones tridimensionales en perspectiva. La ubicación del punto
de vista o dirección de observación se hacce con la función view, que tiene la siguiente forma:

view(azimut, elev)

Donde: azimut es el ángulo de rotación de un plano horizontal, medido sobre el eje z a partir del eje
x en sentido antihorario.
elev es el ángulo de elevación respecto al plano (x-y).

Ambos ángulos se miden en grados, pueden ser positivos o negativos (por defecto son -37.5 y 30).
También se puede definir la dirección del punto de vista mediante las tres coordenadas cartesianas
de un vector (sólo se tiene en cuenta la dirección):

view([xd,yd,zd])

En los gráficos tridimensionales existen funciones para controlar los ejes, por ejemplo:

axis([xmin,xmax,ymin,ymax,zmin,zmax])
axis([xmin xmax ymin ymax zmin zmax cmin cmax])

la última función es la forma combinada de la función axis y de la función caxis (permite ajustar
manualmente la escala de colores. Su forma es: caxis([cmin,cmax]) donde cmin y cmax son los
valores a los que se desea ajustar el mínimo y el máximo valor de la escala de colores)

También pueden usarse las funciones: xlabel, ylabel, zlabel, xlim, ylim, zlim. Axis(‘auto’), axis(axis),
etc.

Las funciones mesh y surf disponen de un algoritmo de eliminación de líneas ocultas (los polígonos
o facetas, no dejan ver las líneas que están detrás). El comando hidden activa y desactiva la
eliminación de líneas ocultas.

También son útiles el uso de los NaNs. Cuando una parte de los elementos de una matriz de valores
Z son NaNs, esa parte de la superficie no se dibuja, permitiendo ver el resto de la superficie.

SEÑALES PERIODICAS.

Matlab permite un trazado de las mismas relativamente fácil.

Señal cuadrada.

Se genera una onda cuadrada de amplitud A, frecuencia fundamental w (rad/seg) y ciclo útil rho
Parte positiva de la señal). Usaremos el conjunto de comandos:

>> A=1;
>> w=10*pi;
>> rho=0.5;
>> t=0:0.001:1;
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
>> sq=(A*square(w*t+rho);
>> sq=A*square(w*t+rho); 1

>> plot(t,sq); 0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Señal triangular diente de sierra.

De amplitud A, frecuencia fundamental w y ancho Wdt. El periodo será T con el máximo en t=WT.

>> A=1; 1
>> w=10*pi; 0.8
>> Wdt=0.5; 0.6

>> t=0:0.001:1; 0.4

>> tri=A*sawtooth(w*t+Wdt); 0.2

>> plot(t,tri); 0

-0.2

-0.4

La gráfica es: -0.6

-0.8

-1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Señal discreta.

Para una señal en tiempo discreto se usa el comando stem. Específicamente stem(n,x) muestra los
datos contenidos en el vector x como una señal de tiempo discreto con los valores de tiempo
definidos por el vector n. los valores n y x deben tener dimensiones compatibles, el mismo número
de elementos
Ejemplo: Amplitud =1, ciclo util=50%, frecuencia angular=π/4. 1

0.8

>> A=1; 0.6

>> omega=pi/4; 0.4

>> rho=0.5; 0.2

>> n=-10:10; 0

>> x=A*square(omega*n+rho); La gráfica es: -0.2

-0.4
>> stem(n,x); -0.6

-0.8

-1
-10 -8 -6 -4 -2 0 2 4 6 8 10

Señales exponenciales.

Se clasifican según su comportamiento en decreciente y creciente. El comando en Matlab para


generar una señal exponencial decreciente es:

B*exp(-a*t);
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Para una creciente:

B*exp(a*t);

En ambos casos a es positivo. Ejemplo:


5

>> A=1; 4.5

>> omega=pi/4; 4

>> rho=0.5; 3.5

>> n=-10:10; 3

>> x=A*square(omega*n+rho); Figura: 2.5


>> stem(n,x); 2
>> B=5;
1.5
>> a=6;
>> t=0:0.001:1; 1

>> x=B*exp(-a*t); % Señal exponencial decreciente. 0.5

>> plot(t,x); 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Para una creciente:


150

>> B=1; 100

>> a=5;
>> t=0:0.001:1;
>> x=B*exp(a*t); % Exponencial creciente. 50

>> plot(t,x);
Figura: 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Existen casos particulares en los que la base de operación de exponenciación no es el número. Para
estos casos se usa una notación diferente que se basa en el uso del símbolo ^ . en el ejemplo, r es
un número y n un vector.

Ejemplo: Generaremos la función: x[n] = Brn

>> B=1; 6

>> r=0.85; 5
>> n=-10:10;
>> x=B*r.^n; % A cada valor del vector se le 4

% aplica la función.
3
>> stem(n,x);
Gráfica: 2

0
-10 -8 -6 -4 -2 0 2 4 6 8 10

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Señales senoidales.

Para una señal coseno de amplitud A, frecuencia w0, (rad/seg),y ángulo de fase phi (rad) se obtiene:

>> A=4; 4

>> w0=20*pi; 3

>> phi=pi/6; 2

>> t=0:0.001:1; 1
>> coseno=A*cos(w0*t+phi);
0
>> plot(t,coseno); % Gráfica 1
-1
Gráfica 1:
>> w0=20*pi;
-2

>> phi=pi/2; -3

>> t=0:0.001:1; -4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

>> seno=A*sin(w0*t+phi);
>> plot(t,seno); % Gráfica 2 0.5

0.4

0.3

0.2

0.1

Gráfica 2: 0

-0.1

-0.2

-0.3

-0.4

-0.5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Señales senoidales con amortiguación exponencial.

Es la multiplicación de una senoide y una exponencial. Su forma es:

x(t) = Asen(ω 0 t + Φ)e-at


El comando es:
A*sin(w0*t+phi)*exp(-a*t);

Como la senoide y la exponencial son vectores, se requiere una multiplicación elemento por
elemento.
60

Ejemplo. 50

40

>> A=60; 30

>> w0=20*pi; 20

>> phi=0; 10

>> a=6; 0

>> expsen=A*sin(w0*t+phi).*exp(-a*t); -10

>> plot(t,expsen); -20

Figura: -30

-40
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

La visión discreta de la misma señal se obtiene usando los comandos anteriores como:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


25

>> A=10; 20

>> a=-0.1; 15

>> w0=2*pi/12; 10
>> phi=0;
5
>> n=-10:10;
>> x=A*sin(w0*n+phi); 0

>> y=exp(a*n); Figura: -5

>> z=x.*y; -10

>> stem(n,z) -15


-10 -8 -6 -4 -2 0 2 4 6 8 10

Señal paso.

Los comandos ones(M,N) genera una matriz de unos de tamaño MxN, y el comando zeros(M,N) una
matriz de ceros del mismo tamaño. Las usaremos para generar una señal paso y una señal paso.

Una señal paso de amplitud 1 se genera con: U = [zeros(1,10),ones(1,11)];

Para la versión continua creamos un vector que represente el tiempo con muestras de un intervalo
separados por valores muy pequeños mientras que para la representación de esta señal en tiempo
discreto se crea un vector que represente el tiempo el cual debe tener valores separados por una
unidad.
1

Para ambos tipos de señales tenemos: 0.9

0.8

0.7

>> u=[zeros(1,10),ones(1,11)]; 0.6

>> t=-1:0.1:1; 0.5

0.4

>> plot(t,u) 0.3

Gráfica: 0.2

0.1

0
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

>> u=[zeros(1,10),ones(1,11)]; 1

>> n=-10:10; 0.9

>> stem(n,u)
0.8

0.7

0.6

Gráfica:
0.5

0.4

0.3

0.2

0.1

0
-10 -8 -6 -4 -2 0 2 4 6 8 10

De los comandos anteriores es de notar que para poder usar las funciones plot( ) y stem( ) es
necesario que los vectores (t y u) ó (n y u) tengan iguales dimensiones. Por esta razón el vector u se
forma como una composición de 10 ceros y 11 unos, debido a que los arreglos t y n, tienen
dimensión 21 dado que incluyen un elemento central que es el número cero. Para probarlo, se
puede usar la función size( ) que devuelve como resultado un vector con las dimensiones de la
matriz que se le pasa como parámetro así:

>> size(n)

ans =

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


1 21

>> size(u)

ans =

1 21

>> size(t)

Ans=

1 21

Señal impulso.
1

La versión discreta se obtiene como: 0.9

0.8

>> delta=[zeros(1,10),1,zeros(1,10)];
0.7

0.6

>> n=-10:10; 0.5

>> stem(n,delta); Gráfica: 0.4

0.3

0.2

0.1

0
-10 -8 -6 -4 -2 0 2 4 6 8 10

Para la versión continua veremos dos ejemplos: 1

0.9

0.8

>> delta=[zeros(1,10),1,zeros(1,10)]; 0.7

0.6

>> t=-1:0.1:1; 0.5

>> plot(t,delta); 0.4

0.3

Gráfica: 0.2

0.1

0
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

>> delta=[zeros(1,1000),1,zeros(1,1000)]; 1

>> t=-1:0.001:1; 0.9

0.8

>> plot(t,delta); 0.7

0.6

0.5

0.4

0.3

Gráfica: 0.2

0.1

0
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1

En estas dos últimas se observa la diferencia entre el número de muestras para el mismo intervalo
de tiempo (es necesario aumentar también el número de ceros y unos).

Esto trae como consecuencia un aumento de la pendiente de la señal y la aproximación de la misma


a la señal verdadera (más próxima).

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Señal rampa.

Se crea con la composición de una recta Y(x) = x a partir de cero y la recta Y(x) = 0 para valores de
x menores de cero. Así, la versión continua y discreta se muestra a continuación, respectivamente:

>> t1=0:0.1:10; 10

>> rampa1=t1;
9

>> rampa=[zeros(1,101),rampa1]; 7

>> t2=-10:0.1:0; 6

>> t=[t2,t1]; 4

>> plot(t,rampa); 3

0
-10 -8 -6 -4 -2 0 2 4 6 8 10

30

25

>> n1=0:30;
20
>> rampa1=n1;
>> rampa=[zeros(1,31),rampa1]; 15
>> n2=-30:0;
>> n=[n2,n1]; 10

>> stem(n,rampa)
Gráfica: 5

0
-30 -20 -10 0 10 20 30

También para la discreta:


30

>> n1=0:30;
>> rampa1=n1; 25

>> rampa=[zeros(1,31),rampa1]; 20

>> stem(n,rampa)
15

Gráfica: 10

0
-30 -20 -10 0 10 20 30

EJEMPLOS.

1.- Gráficos de funciones de dos variables (superficies).

>> t=linspace(0,2*pi,200);
>> subplot(221),plot3(sin(t),cos(t),sin(10*t)); % Curvas en el espacio.
>> [X,Y]=meshgrid(-1:0.1:1,-1:0.1:1); % = meshgrid (-1:0.1:1);
>> subplot(222),surf(X,Y,X.^2+Y.^2);
>> subplot(223),surfc(X,Y,X.^2+Y.^2);
>> subplot(224),contour(X,Y,X.^2-Y.^2); Las cuatro figures son:

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


1 2

0 1

-1 0
1 1
1 1
0 0 0 0
-1 -1 -1 -1

1
2
0.5

1
0

0 -0.5
1
1
0 0 -1
-1 -1 -1 -0.5 0 0.5 1

2.- Uso del comando shading que controla el tipo de rellenado en una superficie dibujada con surf.

>> t=linspace(0,2*pi,200);
>> subplot(221),plot3(sin(t),cos(t),sin(10*t)); % Curvas en el espacio.
>> [X,Y]=meshgrid(-1:0.1:1,-1:0.1:1); % = meshgrid (-1:0.1:1);
>> subplot(222),surf(X,Y,X.^2+Y.^2);
>> subplot(223),surfc(X,Y,X.^2+Y.^2);
>> subplot(224),contour(X,Y,X.^2-Y.^2);
>> subplot(221),mesh(X,Y,X.^2-Y.^2);
>> subplot(222),surf(X,Y,X.^2-Y.^2),shading flat;
>> subplot(223),surf(X,Y,X.^2-Y.^2),shading interp, colorbar;
>> subplot(224),contourf(X,Y,X.^2-Y.^2);

El rellenado plano flat quita las curves paramétricas, que pueden ennegrecer mucho una figura,
pero asigna un color plano a cada recuadro contenido entre las líneas paramétricas. El rellenado
interpolado Inter, suaviza este resultado. Aún así, la calidad visual de la gráfica dependerá del
número de puntos escogidos para realizarla. Las gráficas, sustituidas son:

1 1

0 0

-1 -1
1 1
1 1
0 0 0 0
-1 -1 -1 -1

1 1
1
0.5 0.5

0
0 0

-1 -0.5 -0.5
1
1
0 0 -1 -1
-1 -1 -1 -0.5 0 0.5 1

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


3.- Trazar una senoide desde –π hasta π en pasos de π/2 y amplitud 1 e indicación de los valores
de las abscisas.
1

0.8
>> x=-pi:0.1:pi; 0.6

>> y=sin(x); 0.4

>> plot(x,y) 0.2

>> set(gca,'XTick',-pi:pi/2:pi) 0

>> set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'}) -0.2

-0.4

-0.6

-0.8

-1
-pi -pi/2 0 pi/2 pi

4.- A la figura anterior agréguele en el eje vertical “sen θ”, en el eje horizontal “–π ≤ θ ≤ π” y sobre
la curva “sen(-π÷4). Cambie el trazado de la curva por color rojo grueso.

>> x=-pi:0.1:pi; gráfica de sen()


>> y=sin(x); 1

>> plot(x,y); 0.8

>> set(gca,'XTick',-pi:pi/2:pi) 0.6

>> set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'}) 0.4

>> xlabel('-\pi\leq\Theta\leq\pi') 0.2


>> ylabel('sen(\Theta)') sen()
0
>> title('gráfica de sen(\Theta)') -0.2
>> text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)',...
-0.4
'HorizontalAlignment','left')
>> set(findobj(gca,'Type','line','Color',[0 0 1]),... -0.6
 sin(-4)
'Color','red',... -0.8

'LineWidth',2) -1
-pi -pi/2 0 pi/2 pi

5.- Trazar las gráficas de y1 = 200e 0.05 x senx e y2 = 0.8e 0.5 x sen10 x

>> x=0:0.01:20;
200 0.8
>> y1=200*exp(-0.05*x).*sin(x);
>> y2=0.8*exp(-0.5*x).*sin(10*x); 150 0.6
>> [Ax,H1,H2]=plotyy(x,y1,x,y2,'plot');
100 0.4

50 0.2

Dibujo: 0 0

-50 -0.2

-100 -0.4

-150 -0.6

-200 -0.8
0 2 4 6 8 10 12 14 16 18 20

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


6.- En la gráfica anterior, agréguele como título “Exponenciales decrecientes” y en el eje horizontal “
Tiempo (µseg)
Exponenciales decrecientes
200 0.8
>> title('Exponenciales decrecientes')
>> xlabel('Tiempo(\museg)') 150 0.6

100 0.4
Ejemplo:
50 0.2

0 0

-50 -0.2

-100 -0.4

-150 -0.6

-200 -0.8
0 2 4 6 8 10 12 14 16 18 20
Tiempo(seg)

7.- Del ejemplo anterior, escriba sobre los ejes laterales, a la curva correspondiente, “Decreciente
lenta” y “Decreciente rápida”.

>> set(get(Ax(1),'Ylabel'),'String','Decreciente lenta')


>> set(get(Ax(2),'Ylabel'),'String','Decreciente rápida')
Exponenciales decrecientes
200 0.8

150 0.6

100 0.4

Decreciente rápida
50 0.2
Decreciente lenta

0 0

-50 -0.2

-100 -0.4

-150 -0.6

-200 -0.8
0 2 4 6 8 10 12 14 16 18 20

8.- Del ejemplo anterior, cambie la presentación de los trazos de la curva lenta y rápida por “—“ y “:”,
respectivamente. Exponenciales decrecientes
200 0.8

>> set(H1,'LineStyle','--') 150 0.6

>> set(H2,'LineStyle',':') 100 0.4


Decreciente rápida

50 0.2
Decreciente lenta

0 0

-50 -0.2

Gráfica: -100 -0.4

-150 -0.6

-200 -0.8
0 2 4 6 8 10 12 14 16 18 20
Tiempo(seg)

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


EJERCICIOS.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
UNIDAD VI

PROGRAMACIÓN DE MATLAB
Analizaremos las bifurcaciones y bucles, y la lectura y escritura interactiva de variables.

BIFURCACIONES Y BUCLES.

Permiten realizar una u otra operación según se cumpla o no una determinada condición.
Algunas formas de bifurcaciones con Matlab se muestran en la figura siguiente:

Los bucles permiten repetir las mismas o análogas operaciones sobre datos diferentes. La figura
siguiente muestra dos posibles forma de bucles, con el control al principio o al final. Si el control está
situado al comienzo del bucle es posible que las sentencias no se ejecuten jamás, por no cumplirse
la condición al llegar al bucle por primera vez. Si la condición está al final del bucle, las sentencias se
ejecutarán al menos una vez, aunque la condición no se cumpla.

La sentencia for

Es una sentencia de repetición usada para crear bucles. La estructura de un for es:

for variable = inicio:incremento:fin


sentencias
end
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
si no se pone el incremento, se tomará el valor por defecto que es la unidad:

for variable = inicio:fin


sentencias
end

La siguiente construcción ejecuta sentencias con valores de i de 1 a n, variando de uno en uno:

for i = 1:n
sentencias Obsérvese el desplazamiento de las sentencias hacia la
end derecha respecto a for. Esto permite visualizar más
fácilmente donde comienza y termina la bifurcación o el
También: bucle. Se recomienda seguir esta práctica.

for i = vectorValores
sentencias
end

vectorValores es un vector con los distintos valores que tomará la variable i.

También:
Caso donde existe un decremento, se comienza con i = n,
for i = n:-0.2:1 reduciéndose de 0,2 en 0,2 hasta que llega a ser menor de 1, con lo
sentencias que el bucle se termina.
end

En el siguiente ejemplo se muestra una estructura con dos bucles anidados. La variable j es la que
varía más rápidamente (por cada valor de i, j toma todos sus posibles valores).

for i = 1:m
for j = 1:n
sentencias
end
end

Otra forma de aplicación del bucle for es:

for i = A Acá, la variable i es un vector que va tomando en cada iteración el


sentencias valor de una de las columnas de A.
end

Cuando se introducen interactivamente en la línea de comando, los bucles for se ejecutan sólo
después de introducir la sentencia end que los completa.
Veamos otros ejemplos:

Generemos una función .m que trabaje con la serie de Fibonacci:

function a = fibo(n) % Calcula n términos de la sucesión de Fibonacci.


a = ones(1,n); % Reserva ya la memoria necesaria.
for i = 3:n
a(i) = a(i-1) + a(i-2);
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
end

Ahora, para calcular algunos términos, se ejecuta según:

>>fibo(3)

ans =
112

>>fibo(10)

ans =
1 1 2 3 5 8 13 21 34 55

La lista no necesariamente tiene que ser de números distintos. Usaremos el siguiente script, para
observar que su funcionamiento es simple: se crea una lista de valores y luego se recorre de uno en
uno; en cada caso se muestra el cuadrado del número que está en el iterador i.

lista = fibo(n);
for i = lista
disp(i.^2)
end

El iterador puede ser un vector. Por ejemplo, ejecútese el programa:

lista = [1 2 3;2 3 4];

for j = lista
disp(j)

end

En cada avance del iterador, se dispone en j de un vector columna (la matriz lista se recorre
mirándola como una lista de columnas). Esto es útil para recorrer triangulaciones: en lugar de
numerar los triángulos, se va recorriendo la lista de los índices de los vértices que componen los
triángulos.

La función disp permite imprimir en pantalla un mensaje de texto o el valor de una matriz, pero sin
imprimir su nombre. En realidad, disp siempre imprime vectores y/o matrices: las cadenas de
caracteres son un caso particular de vectores. Para su uso, considérense los ejemplos de abajo:

>> disp(‘El programa se ha terminado’)


>> A = rand(4,4)
>> disp(A)

Al ejecutar las sentencias anteriores en Matlab se observa la diferencia entre las dos formas de
imprimir la matriz A.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Sentencia while

Su estructura es:

while condición
sentencias
end

Condición puede ser una expresión vectorial o matricial. Las sentencias se siguen ejecutando
mientras haya elementos distintos de cero en condición, es decir, mientras haya algún o algunos
elementos trae. El bucle se termina cuando todos los elementos de condición son false (es decir,
ceros).

CONDICIONALES

Sentencia if

Las construcciones condicionales son las siguientes, de más simple a más compleja:

1.- Condicional simple: Con la forma:

if condición % La condición puede ir entre paréntesis.


sentencias
end

2.- Condicional simple con caso por defecto:

if condición
sentencias
else
otras sentencias
end

3.- Condicional de decisión múltiples (el else final, que cubre los demás casos, es
opcional).Bifurcación múltiple.

if cond_1
sentencias
elseif cond_2 % Se cumple cond_2 pero no cond_1.
otras sentencias
elseif cond_3

else % Opción por defecto para cuando no se cumplan las condiciones 1, 2, 3

end

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


La opción por defecto else puede ser omitida: si no está presente no se hace nada en caso de que
no se cumpla ninguna de las condiciones revisadas.

La condición if puede ser una condición matricial. Si A y B son dos matrices del mismo tamaño, se
tiene:

if A = B exige que todos los elementos sean iguales dos a dos. (a ij = b ij , 1 ≤ i ≤ m, 1 ≤ j ≤ n).
if A ~= B exige que todos los elementos sean diferentes dos a dos. (a ij ≠ b ij , 1 ≤ i ≤ m, 1 ≤ j ≤ n).

Matlab dispone de la función isequal(A,B) para determinar si dos matrices son iguales. Devuelve un
1 si son iguales y un 0 si son diferentes.

Como ejemplo:

% Script donde se usa también la lectura y la escritura.


a = input(‘introduce el valor de a:’)
b = a^2
if b==0
disp(‘sale 0’)
else
disp(‘sale distinto de 0’)
end

Sentencia switch.

Realiza una función parecida al conjunto if…elseif concatenado. La forma general es:

switch switch_expresión
case case_expr1,
bloque1
case {case_espr2, case_expr3, case_expr4,…}
bloque2
……..
otherwise, % Opción por defecto
bloque3
end

Primero se evalúa la switch_expresión, cyo resultado es un escalar o una cadena de caracteres.


Este resultado se compara con las case_expr, y se ejecuta el bloque de sentencias que corresponda
con ese resultado. Si ninguno es igual a switch_expresión se ejecutan las sentencias
correspondientes a otherwise. Como se muestra, pueden agruparse varias varias condiciones entre
llaves (denominado cell array o vector de celdas). Es suficiente la igualdad de cualquier elemento del
cell array para que se ejecute ese bloque de sentencias. La igualdad debe entenderse en el sentido
del operador igualdad (==) para escalares y la función strcmp( ) para cadenas de caracteres.

Las sentencias suelen desplazarse, como se muestra, para visualizar más fácil dónde comienza y
dónde termina la bifurcación o bucle.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Sentencia break

Se usa para terminar la ejecución de los bucles for y while. Sale del bucle más interno en el que está
contenido.

Sentencia continue

Dentro de un conjunto de sentencias de un bucle pasa directamente a la siguiente iteración, sin


completar el conjunto de sentencias para ese valor del iterador en el bucle for o while. Todas las
sentencias que hay entre el continue y el fin del bucle en la iteración actual.

Sentencias try…catch…end

La construcción try…catch…end permite gestionar los errores que se pueden producir en tiempo de
ejecución. Su forma es la siguiente:

try
sentencias1
catch
sentencias2
end

En el caso de que durante la ejecución del bloque sentencia1 se produce un error, el control de la
ejecución se transfiere al bloque sentencia2. Si la ejecución transcurriera normalmente, sentencias2
no se ejecutaría nunca. Matlab dispone de una función lasterr que devuelve una cadena de
caracteres con el mensaje correspondiente al último error que se ha producido.
En la forma lasterr(“) pone a cero este contador de errores, y hace que la función lasterr devuelva
la matriz vacía [ ] hasta que se produzca un nuevo error.

Los símbolos de comparación son:

SÍMBOLO SIGNIFICADO
== Igual
~= Distinto
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que

El resultado de una operación de comparación es una variable lógica (con valores 0 ó 1). Las
conectivas lógicas son:

SÍMBOLO SIGNIFICADO
& y (and)
and(a,b) Otra forma de escribir a & b
I o (or)
or(a,b) Otra forma de escribir a I b
xor(a,b) o exclusivo de las expresiones a y b
- Negación lógica

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


UNIDAD VII

ANÁLISIS DE CIRCUITOS ELÉCTRICOS USANDO MATLAB

Lo desarrollaremos con ejemplos.

Ejemplo 1.

La tensión v, a través de una resistencia es dada por la Ley de Ohm, v=Ri, donde i es la corriente y
R la resistencia. la potencia disipada en la resistencia es dada por la ecuación:

P = Ri2 = v2/R = v*i

Si R=10 Ω y la corriente se incrementa desde 0 hasta 10 A con incrementos de 2 A, desarrolle un


programa con Matlab para generar una tabla de corriente, voltaje y potencia disipada.

Solución:

% MATLAB Script

>> diary ex1_1.dat % diary hace que la salida sea escrita en un archivo ex1_1.dat.
>> % Cálculo de la tensión y potencia.
>> R = 10; % Valor de la resistencia.
>> i = (0:2:10); % Valores de la corriente generada.
>> v = i*R; % Permite determinar el voltaje
>> p = (i.^2)*R; % Cálculo de la potencia.
>> sol = [i v p] % Valores a imprimir de corriente, voltaje y potencia
>> diary % Este último comando diary, apaga el estado diary.
>> % Matlab produce los siguientes resultados:

Sol =
0 2 4 6 8 10 % Columnas 1 a 6.
0 20 40 60 80 100 % Columnas 7 a 12.
0 40 160 360 640 1000 % Columnas 13 a 18.

% Las columnas 1 a 6 contiene los valores de corriente, las columnas 7 a 12 son las tensiones y las
% columnas 13 a 18 la potencia disipada.

Ejemplo 2.

Para un circuito RL, la tensión v(t) y la corriente i(t) son:

v(t) = 10cos(377t)
i(t) = 5cos(377t + 60º)

Dibujar v(t) e i(t) para t = 0 a 20 mseg.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Solución:

% MATLAB Script

% Circuito RL.
% Corriente i(t) y tensión v(t) son generados; t es el tiempo.

> t = 0:1e-3; v = 10*cos(377*t);


>> a_rad = (60*pi/180); % Ángulo en radianes.
>> i = 5*cos(377*t + a_rad);
>> plot(t,v,’*’,t,i,’o’)
>> title(‘Voltaje y corriente de un circuito RL’)
>> xlabel(‘seg’)
>> ylabel(‘Voltaje(V) y Corriente(mA)’)
>> text(0.003, 1.5, ‘v(t)’);
>> text(0.009,2,’i(t)’)

>> % La imagen resultante es:

Voltaje y corriente de un circuito

seg
Ejemplo 3.

La ganancia vs. la frecuencia de un amplificador capacitivamente acoplado se muestra abajo.


Dibujar un gráfico de ganancia vs. frecuencia usando una escala logarítmica para la frecuencia y una
escala lineal para la ganancia.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Frecuencia (Hz) Ganancia (dB) Frecuencia (Hz) Ganancia (dB)
20 5 2000 34
40 10 5000 34
80 30 8000 34
100 32 10000 32
120 34 12000 30

Solución:

% MATLAB Script

% Diagrama de Bode para amplificador capacitivamente acoplado.


f = [20 40 80 100 120 2000 5000 8000 10000…
12000 15000 20000];
g = [5 10 30 32 34 34 34 34 32 30 10 5];
semilogx(f,g)
title('Diagrama de Bode de un amplificador')
xlabel('Frecuencia en Hz')
ylabel('Ganancia en dB')

El diagrama se muestra en la figura siguiente:

Los comandos:

loglog(x,y): genera una gráfica de log 10 (x) vs. log 10 (y)

semilogx(x,y): genera un gráfico de log 10 (x) vs. ordenada lineal de y

semilogy(x,y): genera un gráfico de la abscisa lineal x vs. log 10 (y)

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia


Ejemplo 4.

Un número complejo puede ser representado por z = rejθ. La n-ésima potencia del número complejo
es dada por z n = rnejnθ. Si r = 1.2 y θ = 10º, use la representación polar para trazar la gráfica de IznI
vs. nθ para n = 1 hasta n = 36.

Solución:

Una gráfica polar de un ángulo vs. una magnitud puede generarse usando el comando:

polar(theta, rho) % theta y rho son vectores, con theta en radianes y rho, la magnitud.

El comando gris permite mostrar una malla en el dibujo.

>> % MATLAB Script


>> % Gráfica polar de z
>> r = 1.2; theta = 10*pi/180;
>> angle = 0:theta:36*theta; mag = r.^(angle/theta);
>> polar(angle,mag)
>> grid
>> title(‘Gráfica polar’)
>> % La gráfica polar se muestra en la figura de abajo

Ejemplo 5.

Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia

S-ar putea să vă placă și