Documente Academic
Documente Profesional
Documente Cultură
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:
md nb
Despejando: x
ad cb
na mc
Despejando: y
ad cb
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
CÁLCULO DE DETERMINANTES.
Ejemplo:
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:
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:
Sustituyendo valores:
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.
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
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]
1
5 6
3
7
2
4
Así:
a mxn
ij
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:
MATRIZ CERO.
Es una matriz que tiene todos sus elementos iguales a cero. Se denota como A = 0.
SUMA DE MATRICES.
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.
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.
O sea: c mn = a m1 b 1n + a m2 b 2n +……+a mp b pn = a
k1
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)
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.
Si A y B son matrices cuadradas tal que AB = BA, entonces A y B son llamadas matrices
conmutativas o se dice que conmutan.
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).
Ejemplos:
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.
Ejemplo:
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:
a) (A’)’ = A
b) (kA)’ = kA’
c) (A + B)’ = A’ + B’
d) (A.B)’ = B’.A’
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:
Ejemplo:
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:
a) (A ) = A
b) ( kA ) = k . A
c) (A B) = A + B
d) ( A.B ) = A . B
e) ( A )’ = ( A ' ) = A*
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:
EJERCICIOS.
9) Demostrar que:
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):
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.
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.
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.
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.
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:
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).
>> save
>> load
Se pueden guardar matrices y vectores de forma selectiva y en ficheros con nombres específicos.
Por ejemplo;
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.
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
>>
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
ans =
ans =
ans =
ans =
-2
4
9
7
Cuando no se asigna nombre a una matriz, Matlab asigna por defecto ans=.
A=
1 2 3
4 5 6
7 8 9
Si decimos:
ans =
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=
1 4 7
2 5 8
3 6 9
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Matriz inversa.
A=
1 4 -3
2 1 5
-2 5 3
>> B = inv(A)
B=
>> B*A
ans =
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:
ans =
3 0
5 9
9 4
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 /.
3 1
-2 18
Ejemplo:
>> u = [1 2 3]
u=
1 2 3
>> v = [2 4 6]
v=
2 4 6
ans =
28
Ejemplo:
A=
-2 3
-4 5
-6 7
3
>> a = [3 -1]; %(1x2), a’ = → (2x1).
1
>> A*a' %Producto matriz por vector.
-9
-17 (3x1)
-25
>> 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:
ans =
32
Ejemplo:
ans =
5 5
5 10
Ejemplo:
ans =
5 5
5 10
Ejemplo:
ans =
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
4 1
1 9
Ejemplo:
ans =
ans =
Ejemplo:
Bi =
0.6000 -0.2000
-0.2000 0.4000
Ejemplo:
x=
2 7 3
Ejemplo:
y=
4
3
-2
Matlab considera vectores fila por defecto, como se muestra en los ejemplos siguientes:
ans =
1 0 0
0 3 0
0 0 -4
Ejemplo:
ans =
1
4
Ejemplo:
ans =
1 0
0 4 Aquí: A = [1 4]
Existen en Matlab varias funciones orientadas a definir con gran facilidad matrices de tipos
particulares. Algunas son:
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 =
>> logspace(0,5,6)
ans =
>> logspace(0,pi,5)
ans =
>> rand(2)
ans =
0.8147 0.1270
0.9058 0.9134
>> rand(2,3)
ans =
>> randn(2)
-0.4326 0.1253
-1.6656 0.2877
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
>> hilb(3)
ans =
>> invhilb(3)
ans =
9 -36 30
-36 192 -180
30 -180 180
ans =
4 -4 12 3 -3 9 -2 2 -6
ans =
0.6667 -0.3333
1.0000 0
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.
A=
2 3
4 5
6 7
ans =
>> A(2,3)
??? Index exceeds matrix dimensions.
ans =
2
4
6
ans =
4 5
ans =
ans =
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
3 2
ans =
ans =
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.0000 -3.0000
-4.0000 5.0000
0.5000 -7.0000
A=
2.0000 -3.0000
1.0000 1.0000
0.5000 -7.0000
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=
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:
ans =
1 0 0 1 1
0 2 0 1 1
0 0 3 1 1
ans =
1 0 0
0 2 0
0 0 3
1 0 0
0 1 0
0 0 1
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=
>> 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
>> A(2,3)
ans =
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,:)
4 36 29 13 18 11
>> 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:
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:
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
>> 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=
>> x=x(5:-1:1)
x=
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.
B=
1 3 1 0 -1
2 1 0 1 7
0 0 1 3 5
0 0 2 1 9
ans =
1 0 1
0 1 3
ans =
2 1 0
Hasta columna 5
Contando de 2 en 2
1ª columna
1ª fila
ans =
1 1 -1
ans =
2 1 0 1 7
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
ans =
0 0 1 3 5
1 3 1 0 -1
1 3 1 0 -1
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
3ª a 1ª
1ª a 3ª
A=
7 6
1 4
2 3
>> A=magic(3)
A=
B=
[]
>> isempty(B)
ans =
>> A(:,3)=[]
A=
8 1
3 5
4 9
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 =
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í:
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
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=
A=
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
Z=
>> Z.'
ans =
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.
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:
Matlab proporciona una forma para representar los números muy grandes. Por ejemplo:
>> 1.0/0.0
ans =
Inf
>> 0/0
ans =
NaN
Así:
ans =
Inf Inf
Inf Inf
>> 1^inf
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
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.
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:
Solución general
Para un sistema de ecuaciones lineales Ax=b, describe todas las posibles soluciones. La solución
general puede ser hallada con:
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
>> 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
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)
x=
1 2 3 Ahora el resultado es un vector fila
EJERCICIOS.
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.
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:
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.
Las siguientes funciones exigen que los argumentos sean matrices. Se clasifican en varios grupos:
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.
pol =
1 0 -8 6 -10
ans =
-3.2800
2.6748
0.3026 + 1.0238i
0.3026 - 1.0238i
ans =
-11
>> pol1=[1 -2 4]
pol1 =
1 -2 4
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).
r=
2.0946
-1.0473 + 1.1359i
-1.0473 - 1.1359i
p2 =
roots y poly son funciones inversas. La función poly también calcula los coeficientes del polinomio
característico de una matriz. Por ejemplo:
ans =
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:
Y=
c=
4 13 28 27 18
>> [q,r]=deconv(c,a)
q=
4 5 6
r=
0 0 0 0 0
Ejemplo:
p=
1 0 -2 5
c=
3 0 -2
polyder también calcula la derivada del producto o cociente de dos polinomios. Por ejemplo:
c=
8 30 56 38
-2 -8 -2
r=
4 16 40 48 36
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:
p=
p=
350
250
200
150
100
50
0
1 1.5 2 2.5 3 3.5 4 4.5 5
b(s) r r r
1 2 ...... n ks
a(s) s p1 s p2 s pn
4s 8
Con Matlab:
s 6s 8
2
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
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:
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 π ]
>> t=0:0.1:3*pi;
>> plot3(sin(2*t),cos(t),t) 10
0
4 cos( 2t ) 2 sin( t ) 2 1 dt Una forma es: -1 -1
Q=
2π π
Ejemplo: calcular la integral doble: y sin x x cos y dxdy
π 0
>> F=@(x,y)y*sin(x)+x*cos(y);
>> resultado=dblquad(F,pi,2*pi,0,pi)
resultado =
-9.8696
a) 5x3 – 3x2 +x + 1
b) 3x5 + 2x2 – x
c) 4x3 – 3x -5
d) x3 – 3x2 -4x + 12
Determinar:
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
4) Hallar el volumen que genera la región del problema anterior al girar en torno al eje x.
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.
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.
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.
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.
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:
Las subdivisiones se enumeran consecutivamente, comenzando por la primera fila, luego la segunda
y así sucesivamente.
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])
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.
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.
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).
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.
Para dibujar con doble buffer en la ventana activa basta ejecutar los comandos:
>>set(gcf,’DoubleBuffer’,’on’,’Renderer’,’painters’)
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.
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)
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.
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:
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,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.
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
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.
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.
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
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
-0.2
-0.4
-0.6
-0.8
-1
0 2 4 6 8 10 12 14 16 18 20
1.5
0.5
-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
10
0
0 20 40 60 80 100 120 140 160
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
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
>> 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 0 0
6
0.4
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
>> 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
250
200
150
50
-50
-20 -15 -10 -5 0 5 10 15 20
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
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
>> 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.
0.4
0.2
>> x=0:0.01:2*pi; 0
>> y=cos(x); Figura 1: -0.2
-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
>> plot(x,Y)
>> axis([0 2*pi -1.5 1.5]) %ejes. Figura 2:
ejey
0
3.- Usaremos ylim para recortar los límites en el rango de la variable vertical. Permite limitar
funciones que tienden a infinito.
10
>> plot(x,1./(x-1).^2) 6
4
>> pause 3
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.
1.5 1.5
1 1
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.
-1
>> 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.
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
0.4
ans =
0.3
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.
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
La figura es: 10
0
1
0.5 1
0 0.5
0
-0.5 -0.5
-1 -1
2 2 x 2 2 1 2 2
z 3(1 x)2 ex (y1) 10. x3 y5 ex y e(xy) y
5 3
El programa es:
>> 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
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.
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]);
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])
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(...)
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(...)
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(...)
>>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): 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.
0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0]; 0.6
0.2
El cubo:
0
1
1
0.8
0.5 0.6
0.4
0.2
0 0
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:
>> [U,V]=meshgrid(u,v);
>> R=sqrt(U.^2+V.^2)+eps; 0.5
>> W=sin(R)./R;
-0.5
>> mesh(W) % Figura de al lado: 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
>> 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:
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:
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.
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
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
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
>> plot(t,tri); 0
-0.2
-0.4
-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
>> n=-10:10; 0
-0.4
>> stem(n,x); -0.6
-0.8
-1
-10 -8 -6 -4 -2 0 2 4 6 8 10
Señales exponenciales.
B*exp(-a*t);
Preparado por: Prof. Felipe S. Vázquez D. Universidad Politécnica de Valencia
Para una creciente:
B*exp(a*t);
>> omega=pi/4; 4
>> n=-10:10; 3
>> plot(t,x); 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
>> 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.
>> 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
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
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
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:
>> 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
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.
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
0.8
0.7
0.4
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
>> 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 =
>> size(u)
ans =
1 21
>> size(t)
Ans=
1 21
Señal impulso.
1
0.8
>> delta=[zeros(1,10),1,zeros(1,10)];
0.7
0.6
0.3
0.2
0.1
0
-10 -8 -6 -4 -2 0 2 4 6 8 10
0.9
0.8
0.6
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
0.8
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).
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
>> 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.
>> 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:
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
0.8
>> x=-pi:0.1:pi; 0.6
>> set(gca,'XTick',-pi:pi/2:pi) 0
-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.
'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
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”.
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
50 0.2
Decreciente lenta
0 0
-50 -0.2
-150 -0.6
-200 -0.8
0 2 4 6 8 10 12 14 16 18 20
Tiempo(seg)
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 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
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
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:
>>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
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:
Al ejecutar las sentencias anteriores en Matlab se observa la diferencia entre las dos formas de
imprimir la matriz A.
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:
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
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:
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
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.
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
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.
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
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:
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.
v(t) = 10cos(377t)
i(t) = 5cos(377t + 60º)
% MATLAB Script
% Circuito RL.
% Corriente i(t) y tensión v(t) son generados; t es el tiempo.
seg
Ejemplo 3.
Solución:
% MATLAB Script
Los comandos:
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.
Ejemplo 5.