MLabLOLI

92
Matlab 1 Universidad Nacional Mayor de San Marcos FACULTAD DE CIENCIAS MATEMÁTICAS Curso de Perfeccionamiento Docente MATLAB Autores: Cristian Amador Loli Prudencio Agosto, 2006

Transcript of MLabLOLI

Page 1: MLabLOLI

Matlab

1

Universidad Nacional Mayor de San Marcos

FACULTAD DE CIENCIAS MATEMÁTICAS

Curso de

Perfeccionamiento Docente

MATLAB Autores:

Cristian Amador Loli Prudencio

Agosto, 2006

Page 2: MLabLOLI

Matlab

2

INTRODUCCIÓN

MATLAB es un programa para cálculo científico y técnico, posibilitando el

cálculo numérico y simbólico de forma rápida y precisa, acompañado de características

gráficas con altos recursos de visualización. Permite análisis, modelado, programación y

calculo efectivo de problemas de ingeniería, ciencias de la salud, situaciones

empresariales y de finanzas, procesamiento de señales, procesamiento de voz, sistemas

de telefonía fija/móvil o ADSL y distintos campos de aplicación.

MALTAB gracias a sus recursos de programación de alto nivel posibilita una

solución personalizada de los problemas adecuado a las necesidades del usuario.

La potenciabilidad del MATLAB esta basada en el trabajo con arreglos los cuales

posibilitan una gran facilidad de trabajo.

MATLAB es abierto y extensible, pues interactúa con información proveniente

de Excel, C, Fortran, etc. Entre otras cosas el código usado en el lenguaje de MATLAB

puede ser traducido a C en forma inmediata.

MATLAB es compatible a diversas plataformas permitiendo así comodidad de

trabajo.

MATLAB, a través de SIMULINK permite hacer modelamiento y simulación

mediante lenguaje de diagramas de bloques. Admite sistemas en tiempo discreto y

continuo, sistemas de control y control inteligente y una serie de posibilidades de

simulación.

MATLAB, a través de un entorno GUIDE permite una interfaz gráfica visual para

trabajos con mejores acabados de presentación y objetos visuales con lo cual la potencia

se combina con las facilidades visuales para resolver diverso tipo de problemas.

Lic. Cristian Amador Loli Prudencio

E-mail: [email protected]

Page 3: MLabLOLI

Matlab

3

CAP 1. ENTORNO DE MATLAB

1. ENTRAR EN MATLAB

Si aparece el icono de MATLAB como acceso directo en la pantalla inicial (escritorio)

es suficiente pulsar DOBLE CLICK sobre el ratón. En otro caso, será necesario buscarlo

a partir del menú de inicio.

Una vez iniciado MATLAB, nos encontramos con la pantalla de la figura, donde se

observan los diferentes menús y ventanas. El trabajo inicial se realiza en la ventana de

comandos “Command Window”.

2. AMBIENTE MATLAB

EL ÁREA DE TRABAJO de MatLab esta básicamente constituida por:

[Command Window]: Ventana de Comandos Área en la cual son digitadas las instrucciones para el MatLab y exhibidos sus

resultados.

Indicador del sistema o prompt ‘>>’ indica estado de espera de entrada de datos.

Las teclas y repiten los comandos digitados anteriormente.

[Workspace]: Espacio de trabajo Área de memoria de trabajo del Matlab, en la cual se hallan almacenadas todas las

variables definidas interactivamente.

Page 4: MLabLOLI

Matlab

4

Las variables se visualizan en esta ventana y si desea visualizar su contenido basta pulsar doble click sobre la variable deseada.

[Current Directory]: Directorio actual Área en la cual es exhibida la lista de los archivos y directorios contenidos en el

directorio actual.

[Command History]: Historia de Comandos Área en la cual se hallan almacenadas todas las instrucciones ejecutadas en el

MatLab.

EL ESCRITORIO del Matlab también contiene:

LA BARRA DEL MENÚ PRINCIPAL

Esta barra interactúa según se encuentre en una ventana o en otra, por ejemplo si

actualmente esta en la ventana [Workspace], la barra del menú principal se vería así

LA BARRA DE HERRAMIENTAS

Esta barra contiene

o [New M-file] Crea nuevo M-file.

o [Open] Abre archivo.

o [Cut] Recorta datos.

o [Copy] Copia datos.

o [Paste] Pega datos.

o [Undo] Deshace operación.

o [Redo] Rehace operación.

o [Simulink] Abre modelo de simulación.

o [Guide] Abre editor de interfaz gráfica.

o [Help] Abre el navegador de ayuda.

Page 5: MLabLOLI

Matlab

5

o Browse de Current Directory

EL BOTON DE INICIO DEL MATLAB

El botón Inicio del Matlab provee facil acceso a las herramientas, demos y

documentación para todos los productos de MathWorks. Usando el atajo Alt+S puedes

también acceder al botón de Inicio.

Page 6: MLabLOLI

Matlab

6

3. MENÚS POP-UP EN EL MATLAB

Menú [File]: Manipulación de archivos. Menú [Edit]: Edición.

Menú [Debug]: Depuración

Menú [View]: Configuración de la visualización

Configura la visualización de las ventanas de [Workspace] y [Current Directory]

Si actualmente está en [Workspace]

el menú [View] se vería así:

Si actualmente está en [Current Directory]

el menú [View] se vería así:

Page 7: MLabLOLI

Matlab

7

Menú [Desktop]: Configuración del escritorio

Para volver al escritorio por defecto se debe pulsar la opción

[Desktop] – [Desktop Layout] – [Default]

Menú [Window]: Ventanas. Menú [Help]: Ayuda.

Page 8: MLabLOLI

Matlab

8

EJERCICIOS DESARROLLADOS

ENTORNO DE MATLAB

1. Listar los archivos del directorio actual.

>> dir

. fb555.m jose.zip

.. fbef.asv mefloli.asv

L1.M fbef.m mefloli.m

L2.M fbef22222.asv meflolimejor.m

LOLI fbef22222.m metnum

LOLI.asv fbefmejor.m metnum2

MATLAB fbf.m monografias3.doc

Ondaseno.mdl integ2.m sbef111.m

algo.m integ3.m timestwo.asv

e.m integ4.m timestwo.m

fb.m integc2.m vsfunc.m

fb333.m integc3.m

fb444.m integc4.m

2. Listar el path actual.

>> cd

C:\MATLAB7\work

3. Listar los directorios de búsqueda.

>> path

MATLABPATH

C:\MATLAB7\toolbox\matlab\general

C:\MATLAB7\toolbox\matlab\ops

C:\MATLAB7\toolbox\matlab\lang

C:\MATLAB7\toolbox\matlab\elmat

C:\MATLAB7\toolbox\matlab\elfun

C:\MATLAB7\toolbox\matlab\specfun

C:\MATLAB7\toolbox\matlab\matfun

4. Crear en la carpeta C:\MATLAB7 la subcarpeta GATO.

Como estamos por defecto en C:\MATLAB7\WORK, retrocedemos un nivel, con:

>> cd ..

Ahora estamos en C:\MATLAB7, y creamos la subcarpeta GATO

>> mkdir gato

5. Cambiar el path de trabajo a GATO.

>> cd c:\matlab7\gato

6. Copiar los archivos de extensión txt de C:\MATLAB7 a la carpeta GATO.

>> copyfile('C:\Matlab7\*.txt')

Page 9: MLabLOLI

Matlab

9

>> dir

. .. license.txt

7. Copiar el archivo license.txt asignando el nombre borrar.txt

>> copyfile('license.txt', 'borrar.txt')

8. Borrar todos los archivos que comiencen con b y tengan extensión txt.

>> delete b*.txt

EJERCICIOS PROPUESTOS

1. ¿Qué muestra la ventana ?.

2. Listar (sin cambiar de path) el directorio raíz de la unidad C.

3. Crear en la carpeta C:\, la subcarpeta COLOR.

4. Cambiar el path de trabajo a COLOR.

5. Copiar todos los archivos de C:\MATLAB7\TOOLBOX\MATLAB\ELFUN\JA, a la

carpeta COLOR.

6. Duplicar los archivos de la carpeta COLOR que comiencen con m y tengan extensión

m asignando a los duplicados la letra inicial p y la extensión p.

7. Borrar todos los archivos que comiencen con m y tengan extensión m.

Page 10: MLabLOLI

Matlab

10

CAP 2. MANEJO DE ARREGLOS

1. TIPOS DE DATOS EN MATLAB

MATLAB trabaja habitualmente con valores matriciales, de ahí que su definición y

manejo sean fundamentales. En MATLAB existen una serie de tipos de datos los cuales

están basados en la estructura de matrices.

DATOS NÚMERICOS

COMPLEJOS DE DOBLE PRECISIÓN

El más común tipo de datos en MATLAB es los complejos de doble precisión, los cuales

contienen la parte real y la parte imaginaria. Su uso es completamente natural en en

Matlab. En estos datos la unidad imaginaria es manejada como i o j, la que es

transformada por el Matlab a la notación i.

EJEMPLO

Digitar en la ventana de comandos:

>> u=2+3i

u =

2.0000 + 3.0000i

>> v=2-3j

v =

2.0000 - 3.0000i

OTROS TIPOS DE DATOS NUMÉRICOS

MATLAB también soporta otros tipos numéricos de datos. Estos son: DATOS DE

SIMPLE PRECISIÓN DE PUNTO FLOTANTE, ENTEROS DE 8-, 16- y 32- BIT con

SIGNO o SIN SIGNO, estos tipos de datos también son manejados como números

complejos.

DATOS LÓGICOS

Los datos tipo lógico representado por Verdadero y Falso son manejados con los

números 1 y 0 respectivamente.

EJEMPLO

Digitar en la ventana de comandos:

>> 7 * 10 > 40

ans =

1

>> P = (5 * 7 ~= 35)

P =

0

DATOS TIPO CARÁCTER Y CADENAS

Las cadenas son arreglos de datos tipo carácter. A diferencia del C, Matlab no necesita el

carácter nulo para terminar una cadena.

EJEMPLO

Page 11: MLabLOLI

Matlab

11

Digitar en la ventana de comandos:

>> mg='El minino es de color blanco'

mg =

El minino es de color blanco

>> m='Debes estudiar matemática'

m =

Debes estudiar matemática

NOTA

Matlab no requiere ningún tipo de comando para declarar variables. Sencillamente crea

la variable mediante asignación directa de su valor. Así si asigna a la variable un número

será variable numérica, si le asigna una cadena será variable alfanumérica.

DATOS TIPO FECHAS Y DE TIEMPO

Datos tipo cadena y numéricos reconocidos con formatos de fechas y horas de acuerdo a

los formatos establecidos.

DATOS TIPO ESTRUCTURAS

Parecidos a los de C, contiene los nombres de los campos que son de nombre dinámico.

DATOS TIPO ARREGLO DE CELLS

Contiene diferente tipo de datos y controles permite conversión automática.

DATOS TIPO FUNCIONES HANDLES

Permite acceso a datos y funciones complementa el trabajo de programación arientada a

objetos con gran facilidad.

DATOS TIPO MATLAB CLASES

Permite la creación de tu propio tipo de datos proveyéndoles clases y trabajo orientado a

objetos.

DATOS TIPO JAVA CLASES

Datos tipo Java classes que permite la interfaz de programación Java y que es aceptado

por Matlab.

2. VECTORES Y MATRICES EN MATLAB

Los vectores se pueden introducir separando sus componentes por espacios en blanco o

por comas. Para definir una matriz en MATLAB, basta con introducir entre corchetes

todos sus vectores fila separados por punto y coma.

VECTORES

Su sintaxis es la siguiente:

vector=[a, b, c, d, . . . m] Define un vector fila, cuyos elementos son los

valores a, b, c, d,m.

vector=[a; b; c; d; . . . m] Define un vector columna, cuyos elementos son los

valores a, b, c, d, m.

En resumen, las comas separan elementos de un vector (en vez de comas también se

pueden usar espacios en blanco), mientras que el punto y coma separa las filas.

Page 12: MLabLOLI

Matlab

12

Veamos algunos ejemplos:

>> a=[1, 2, 3, 4] % vector fila

a =

1 2 3 4

>> a=[1 2 3 4];

>> b=[4; 2; -3; 4] % vector columna

b =

4

2

-3

4

>> u=0:5

u =

0 1 2 3 4 5

>> v=0:2:10

v =

0 2 4 6 8 10

>> d=u+v % suma de vectores

d =

0 3 6 9 12 15

>> c=a+1 % caso especial

c =

2 3 4 5

>> m=7*a % escalar por un vector

m =

7 14 21 28

EL MANEJO A TRAVÉS DEL OPERADOR “:”

variable=primer_elemento:último_elemento Define el vector cuyos primer y último elemento son los especificados, y los elementos intermedios se diferencian en una

unidad.

variable=primer_elemento:incremento:último_elemento Define el vector cuyos primer y último elemento son los especificados, y los elementos intermedios se

diferencian en la cantidad especificada por el incremento.

GENERACIÓN DE VECTORES POR linspace y logspace

variable=linspace(primer_elemento,último_elemento,n) Define el vector cuyos primer y último elemento son los especificados, y que tiene en total n elementos

uniformemente espaciados. >> v=linspace(0,4,11)

v =

0 0.4000 0.8000 1.2000 1.6000 2.0000 2.4000 2.8000 3.2000 3.6000 4.0000

variable=logspace(primer_elemento,último_elemento,n) Define el vector cuyos primer y último elemento son los especificados, y que tiene en total n elementos en

escala logarítmica uniformemente espaciados entre sí. >> v=logspace(0,4,5)

v =

1 10 100 1000 10000

ORDENAMIENTO

: Permite la generación de sucesiones de números tipo progresiones aritméticas y por

ende genera datos ordenados en forma decreciente o creciente.

>> u=4:2:20

u = 4 6 8 10 12 14 16 18 20

sort. Permite el ordenamiento de datos.

Page 13: MLabLOLI

Matlab

13

>> V=[6 7 2 8 9]

V =

6 7 2 8 9

>> W=sort(V)

W =

2 6 7 8 9

MÁXIMO Y MÍNIMO DE UN CONJUNTO DE DATOS

>> max(V)

ans =

9

>> min(V)

ans =

2

MATRICES

Para generar matrices tenemos que introducir vectores fila de la misma cantidad de

componentes, fila por fila. Se usa punto y coma para separar las filas. MATLAB indica

un error cuando las filas tienen diferente número de elementos.

Generemos las siguientes matrices de 3 filas y 4 columnas

1 2 3 4

5 6 7 8

9 10 11 12

A

,

0 2 1 4

5 0 1 0

2 0 3 7

B

Introducimos en la ventana de comandos >> A=[1 2 3 4;5 6 7 8;9 10 11 12]

A =

1 2 3 4

5 6 7 8

9 10 11 12

>> B=[0 2 1 4

5 0 1 0

2 0 3 7]

B =

0 2 1 4

5 0 1 0

2 0 3 7

Operaciones de suma de matrices y producto de una matriz por un escalar >> S=A+B % suma de matrices

S =

1 4 4 8

10 6 8 8

11 10 14 19

>> CE=10+B % caso especial

CE =

10 12 11 14

15 10 11 10

12 10 13 17

>>% prod. de un escalar por una matriz

>> EP=2*B

EP =

0 4 2 8

10 0 2 0

4 0 6 14

Page 14: MLabLOLI

Matlab

14

Más operaciones clásicas:

>> C=A' % matriz traspuesta

C =

1 5 9

2 6 10

3 7 11

4 8 12

>> %producto de matrices

>> P=A*C

P =

30 70 110

70 174 278

110 278 446

>> E=[1 2;3 4]

E =

1 2

3 4

>> E^3 %potencia matricial=E*E*E

ans =

37 54

81 118

3. OPERACIONES A ELEMENTO

Existen en MATLAB dos tipos de operaciones aritméticas: Las operaciones aritméticas

matriciales, que se rigen por las reglas del álgebra lineal, y las operaciones aritméticas a

elemento, que se realizan elemento a elemento.

Símbolo Operación Símbolo Operación

+ Suma de escalares, vectores o matrices

* Producto matricial

^ Potenciación matricial

/ Cociente matricial, B/A=B*inv(A)

\ Cociente matricial, A\B=inv(A)*B

- Resta de escalares, vectores o matrices

.* Producto elemental

.^ Potenciación elemental A.^B ajk ^ bjk

./ Cociente elemental A./B ajk / bjk

.\ Cociente elemental A.\B bjk / ajk

Veamos algunos ejemplos de operaciones a elemento:

>> E=[1 2;3 4], F=[2 4;8 16]

E =

1 2

3 4

F =

2 4

8 16

>>%operación de potencia a elemento

>> P=E.^3

P =

1 8

27 64

Page 15: MLabLOLI

Matlab

15

>> GP=E.*F %operación de producto a elemento

GP =

2 8

24 64

>> GD=E./F %operación de división a elemento

GD =

0.5000 0.5000

0.3750 0.2500

>> x=1:5; x.^x %operación de potencia variable a elemento

ans =

1 4 27 256 3125

>> y=[1 2;3 2]; y.^y %operación de potencia variable a elemento

ans =

1 4

27 4

4. VECTORES Y MATRICES BLOQUES

Tabla 1

SELECCIÓN DE LOS ELEMENTOS DE UN VECTOR “V”

Se hace de acuerdo a la siguiente sintaxis:

V(n) Devuelve el n-ésimo elemento del vector V.

V([n,m,p]) Devuelve los elementos del vector V situados en las posiciones n-ésima, m-

ésima y p-ésima.

V(n:m) Devuelve los elementos del vector V situados entre el n-ésimo y el m-

ésimo, ambos inclusive.

V(n:p:m) Devuelve los elementos del vector V situados entre el n-ésimo y el m-

ésimo, ambos inclusive pero separados de p en p unidades.

Sea el vector

>> V=[6 7 2 8 9];

Para obtener su tercera componente

>> V(3)

ans =

2

Para obtener su 1ra, 4ta y última componente

>> V([1, 4, 5])

ans =

6 8 9

Tabla 2

SELECCIÓN DE LOS ELEMENTOS DE UNA MATRIZ “A” Se hace de acuerdo a la siguiente sintaxis:

A(m,n) Devuelve el elemento (m,n) de la matriz A (fila m y columna n).

A([m, n],[p, q]) Devuelve la submatriz de A formada por la intersección de las filas n-

ésima y m-ésima y las columnas p-ésima y q-ésima.

Page 16: MLabLOLI

Matlab

16

A(n,:) Devuelve la fila n-ésima de la matriz A.

A(:,p) Devuelve la columna p-ésima de la matriz A.

A(:) Devuelve un vector columna cuyos elementos son las columnas de A situadas

por orden.

A(:,:) Devuelve toda la matriz A.

Sea la matriz

>> A=[1:4; 5:8; 9:12]

A =

1 2 3 4

5 6 7 8

9 10 11 12

Para obtener el elemento de la 2da fila y

la 3ra col.

>> A(2,3)

ans =

7

Para obtener la primera fila

>> A(1,:)

ans =

1 2 3 4

Para obtener la tercera columna

>> A(:,3)

ans =

3

7

11

Para obtener la submatriz formada por la

1ra y 2da columna

>> A(:,1:2)

ans =

1 2

5 6

9 10

Para obtener la matriz aumentada

añadiendo a la matriz A su tercera columna

>> AD=[A A(:,3)]

AD =

1 2 3 4 3

5 6 7 8 7

9 10 11 12 11

Para obtener todos sus elementos de la

matriz A como un único vector

>> vect=A(:)

vect =

1

5

9

2

6

10

3

7

11

4

8

12

Extraer la submatriz indicada de la matriz B.

3 6 10 12

2 16 30 31

B = 4 -2 3 96

5 32 96 97

2 1 3 4

>> B=[3,6,10,12;2,16,30,31;4,-2,3,96;5,32,96,97;2,1,3,4];

>> M=B(2:4,2:3)

M =

Page 17: MLabLOLI

Matlab

17

16 30

-2 3

32 96

5. MATRICES ESPECIALES

Tipos especiales de matrices

Función Operación Función Operación

tril(A) Parte triangular inferior de la

matriz A

eye(n) Crea la matriz identidad de nxn

zeros(n) Crea la matriz nula de nxn

ones(n) Crea la matriz de unos de nxn

rand(n) Crea una matriz aleatoria

uniforme de nxn randn(n) Crea una matriz aleatoria normal

de nxn diag(A) Extraer la diagonal de la matriz A

diag(A,k)Extraer la k-ésima diagonal de la

matriz A. k = 0 es la diagonal principal, k > 0 es encima de la diagonal principal y k < 0 es debajo de la diagonal principal.

triu(A) Parte triangular superior de la

matriz A

eye(m,n) Idem orden mxn

zeros(m,n) Idem de orden mxn

ones(m,n) Idem de orden mxn

rand(m,n) Idem de orden mxn

randn(m,n) Idem de orden mxn

diag(v) Matriz diagonal con los

elementos de v

diag(v,k) Matriz diagonal con los

elementos de v en la k-ésima diagonal

EJEMPLOS

MATRIZ COMANDO SALIDA

NULA >> zeros(2)

>> zeros(2,3)

UNOS >> ones(2)

>> ones(2,3)

IDENTIDAD >> I=eye(3) I =

1 0 0

0 1 0

0 0 1

ALEATORIA >> rand(3) ans =

0.2028 0.2722 0.7468

0.1987 0.1988 0.4451

0.6038 0.0153 0.9318

DIAGONAL >> A=[1:4; 5:8; 9:12]

A =

1 2 3 4

5 6 7 8

9 10 11 12

>> D=diag(A)

D =

1

6

11

DIAGONAL >> I=diag(2:4) I =

Page 18: MLabLOLI

Matlab

18

2 0 0

0 3 0

0 0 4

LA MATRIZ

IDENTIDAD

GENERADA CON LA

DIAGONAL

>> I=diag(ones(3,1))

I =

1 0 0

0 1 0

0 0 1

MÁS MATRICES ESPECIALES:

magic matriz Mágica. M = magic(n) retorna una matriz de nxn construida con enteros del 1.. n

2

con igual suma en las filas, columnas, diagonal principal y diagonal

secundaria.

>> magic(3)

ans =

8 1 6

3 5 7

4 9 2

>> magic(4)

ans =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

pascal matriz de Pascal. M=pascal(N) es la matriz de orden N, simétrica y definida positiva, con

elementos enteros, construidos como el triángulo de Pascal. Su matriz

inversa tiene elementos enteros.

>> pascal(2)

ans =

1 1

1 2

>> pascal(3)

ans =

1 1 1

1 2 3

1 3 6

vander matriz de Vandermonde. A = vander(v) matriz cuyas columnas son potencias del vector v, dado por

A(i,j) = v(i)^(n-j) .

Page 19: MLabLOLI

Matlab

19

>> vander([2 4 1]) ans = 4 2 1 16 4 1

1 1 1

>>%tambien >> vander([2;4;1]) ans = 4 2 1 16 4 1

1 1 1

>> vander([2 4 5 3 6])

ans =

16 8 4 2 1

256 64 16 4 1

625 125 25 5 1

81 27 9 3 1

1296 216 36 6 1

hilb matriz de Hilbert. H = hilb(n) matriz de orden n. Es una matriz pobremente condicionada,

sus elementos son 1H(i,j)=

i j 1 .

invhilb matriz Inversa de Hilbert.

>> hilb(3) ans =

1.0000 0.5000 0.3333

0.5000 0.3333 0.2500

0.3333 0.2500 0.2000

>> invhilb(4)

ans =

16 -120 240 -140

-120 1200 -2700 1680

240 -2700 6480 -4200

-140 1680 -4200 2800

MÁS OPERACIONES CON MATRICES

Función Operación Función Operación

A’ Matriz transpuesta de A

inv(A) Matriz inversa de la matriz

cuadrada A

det(A) Determinante de la matriz

cuadrada A

trace(A) Suma de los elementos de la

diagonal de A

sum(v) Suma de los elementos del

vector v

prod(v) Producto de los elementos del

vector v

transpose(A) Matriz transpuesta de A

rank(A) Rango de la matriz A

length(v) Devuelve la longitud del vector v

size(A) Devuelve el orden (tamaño) de la

matriz A, es decir el numero de filas y numero de columnas.

sum(A) Suma de los elementos de la

matriz A en cada columna. sum(A,2) suma de los elementos de la matriz A en cada fila.

prod(A) Producto de los elementos de la

matriz A en cada columna. prod(A,2) producto de los

Page 20: MLabLOLI

Matlab

20

cumsum(v) Suma acumulada de los

elementos del vector v

elementos de la matriz A en cada fila.

cumsum(A) Suma acum. de los elementos de

la matriz A en cada columna. cumsum(A,2) suma acum. de los elem. de la matriz A en cada fila.

Page 21: MLabLOLI

Matlab

21

EJERCICIOS DESARROLLADOS

MANEJANDO MATRICES

1. Genere los vectores:

a) u vector ordenado de números pares desde 4 a 20.

b) v vector ordenado de 12 múltiplos de 3 comenzando de 6.

c) w vector en orden inverso desde 12 hasta 4 usando la función linspace.

2. Ingrese las matrices 2 1 3

4 6

0.4 7.1 0

A

y B = matriz aleatoria de 3x3. Construya C a

partir de A y B: C = [A A ; A.^3 B]

3. ¿Qué dimensiones tiene C? ¿Cuál es la diferencia entre size y length?

4. Extraer los siguientes elementos de las matrices formadas:

a) Última fila de A.

b) La submatriz formada por las dos columnas centrales de C.

c) La submatriz formada por las columnas 3ra, 5ta y 6ta de C.

d) Extraer una submatriz de 2x2 que comience del elemento C(2,2) de C.

5. Crear A = matriz mágica de 3x3 y el vector columna b = [-13;1;4.2].

a) ¿Qué acción hace? >> b(1) = [ ]

b) ¿Qué acción hace? >> A(:)'

c) ¿Qué acción hace? >> A(2)

d) ¿Qué acción hace? >> A(1) = [ ]

6. Luego de realizar los comandos, ¿Qué información tiene E?

>> M = 'MATHTYPE'; N='QUESTION';

>> M = M(2:5);N = N(2:5);

>> E = [M' N']'

7. Extraer la diagonal y antidiagonal de la matriz A = [2,3,-7; 2,1,-1; 1,0.1,1].

8. Extraer los elementos de la parte triangular superior de A.

9. Crear la matriz mágica de M de 5x5 y usar la función del Matlab para hallar el valor

de la suma de los elementos de la diagonal.

Page 22: MLabLOLI

Matlab

22

DESARROLLO

1. Genere los vectores:

d) u vector ordenado de números pares desde 4 a 20.

e) v vector ordenado de 12 múltiplos de 3 comenzando de 6.

f) w vector en orden inverso desde 12 hasta 4 usando la función linspace.

a) u vector ordenado de números pares desde 4 a 20.

>> u=[4:2:20]

u =

4 6 8 10 12 14 16 18 20

b) v vector ordenado de 12 múltiplos de 3 comenzando de 6.

>> v=(6:3:39)

v =

6 9 12 15 18 21 24 27 30 33 36 39

c) w vector en orden inverso desde 12 hasta 4 usando la función linspace.

>> w=linspace(12,4,9)

w =

12 11 10 9 8 7 6 5 4

2. Ingrese las matrices 2 1 3

4 6

0.4 7.1 0

A

y B = matriz aleatoria de 3x3. Construya C a

partir de A y B: C = [A A ; A.^3 B]

>> A=[2 -1 3;4 pi 6;0.4 7.1 0]

A =

2.0000 -1.0000 3.0000

4.0000 3.1416 6.0000

0.4000 7.1000 0

>> B=rand(3)

B =

0.9501 0.4860 0.4565

0.2311 0.8913 0.0185

0.6068 0.7621 0.8214

>> C=[A A;A.^3 B]

C =

2.0000 -1.0000 3.0000 2.0000 -1.0000 3.0000

4.0000 3.1416 6.0000 4.0000 3.1416 6.0000

0.4000 7.1000 0 0.4000 7.1000 0

8.0000 -1.0000 27.0000 0.9501 0.4860 0.4565

64.0000 31.0063 216.0000 0.2311 0.8913 0.0185

0.0640 357.9110 0 0.6068 0.7621 0.8214

3. ¿Qué dimensiones tiene C? ¿Cuál es la diferencia entre size y length?

¡DIMENSIONES DE C!

Page 23: MLabLOLI

Matlab

23

>> size(C)

ans =

6 6

DIFERENCIA ENTRE SIZE Y LENGTH

length devuelve la longitud del vector, y en caso de matrices length devuelve el mayor

valor de la dimensión (es decir el mayor valor entre #filas y ·#columnas) de la matriz.

>> length(C)

ans =

6

Y size devuelve la dimensión o tamaño de la matriz, es decir el número de filas y

columnas. C tiene 6 columnas y 6 filas.

>> size(C)

ans =

6 6

4. Extraer los siguientes elementos de las matrices formadas:

a) Última fila de A.

b) La submatriz formada por las dos columnas centrales de C.

c) La submatriz formada por las columnas 3ra, 5ta y 6ta de C.

d) Extraer una submatriz de 2x2 que comience del elemento C(2,2) de C.

a) Última fila de A.

>> A(3,:)

ans =

0.4000 7.1000 0

b) La submatriz formada por las dos columnas centrales de C.

>> C(:,3:4)

ans =

3.0000 2.0000

6.0000 4.0000

0 0.4000

27.0000 0.9501

216.0000 0.2311

0 0.6068

c) La submatriz formada por las columnas 3ra, 5ta y 6ta de C.

>> M=C(:,[3 5 6])

M =

3.0000 -1.0000 3.0000

6.0000 3.1416 6.0000

0 7.1000 0

27.0000 0.4860 0.4565

216.0000 0.8913 0.0185

0 0.7621 0.8214

d) Extraer una submatriz de 2x2 que comience del elemento C(2,2) de C.

>> L=C(2:3,2:3)

L =

3.1416 6.0000

7.1000 0

Page 24: MLabLOLI

Matlab

24

5. Crear A = matriz mágica de 3x3 y el vector columna b = [-13;1;4.2].

a) ¿Qué acción hace? >> b(1) = [ ]

b) ¿Qué acción hace? >> A(:)'

c) ¿Qué acción hace? >> A(2)

d) ¿Qué acción hace? >> A(1) = [ ]

>> A=magic(3)

A =

8 1 6

3 5 7

4 9 2

>> b = [-13;1;4.2]

b =

-13.0000

1.0000

4.2000

a) ¿Qué acción hace? >> b(1) = [ ]

Elimina el primer elemento de la matriz B.

>> b(1) = [ ]

B =

1.0000

4.2000

b) ¿Qué acción hace? >> A(:)'

Me devuelve todos los elementos de la matriz A como una sola fila, por orden

consecutiva de cada columna.

>> A(:)'

ans =

8 3 4 1 5 9 6 7 2

c) ¿Qué acción hace? >> A(2) Me devuelve el segundo componente de la Matriz A.

>> A(2)

ans =

3

d) ¿Qué acción hace? >> A(1) = [ ] Elimina el primer elemento de la matriz A.

>> A(1) = [ ]

A =

3 4 1 5 9 6 7 2

6. Luego de realizar los comandos, ¿Qué información tiene E?

>> M = 'MATHTYPE'; N='QUESTION';

>> M = M(2:5);N = N(2:5);

>> E = [M' N']'

>> M = 'MATHTYPE'; N='QUESTION';

>> M = M(2:5);N = N(2:5);

>> E = [M' N']'

E =

ATHT

UEST

Explicación: Cuando hago esto >> M = M(2:5);N = N(2:5); estoy definiendo tanto en

M como en N. Luego tomo solo los elementos de la posición 2 hasta la 5 en M e igual

en N. Luego Defino E para que me devuelva a M y N como columna, tomando solo los

elementos ya definidos M = 'MATHTYPE'; N='QUESTION'

7. Extraer la diagonal y antidiagonal de la matriz A = [2,3,-7; 2,1,-1; 1,0.1,1].

>> A = [2,3,-7; 2,1,-1; 1,0.1,1]

Page 25: MLabLOLI

Matlab

25

A =

2.0000 3.0000 -7.0000

2.0000 1.0000 -1.0000

1.0000 0.1000 1.0000

>> diag(A)

ans =

2

1

1

>>% la antidiagonal

>> diag(fliplr(A))

ans =

-7

1

1

8. Extraer los elementos de la parte triangular superior de A.

>> triu(A)

ans =

2 3 -7

0 1 -1

0 0 1

9. Crear la matriz mágica de M de 5x5 y usar la función del Matlab para hallar el valor

de la suma de los elementos de la diagonal.

>> M=magic(5)

M =

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

>>%suma de elementos de la diagonal

>> trace(M)

ans =

65

Page 26: MLabLOLI

Matlab

26

EJERCICIOS PROPUESTOS

1. Hallar las dimensiones, la traza, el determinante, el rango y la inversa de la matriz

A. A=[2,3, 7;2,1, 1;1,2,3] .

2. Crear una matriz de dos columnas con la diagonal y antidiagonal de la matriz

A=[2,3, 7;2,1, 1;1,2,3] .

3. Crear una matriz M de 3 columnas:

Primera columna con la diagonal de [1:11;2:12;...;11: 21]A traspuesta de .

Segunda columna con la primera diagonal inferior de (12)B magic .

Tercera columna con la primera diagonal superior de (12)C pascal .

4. Generar la matriz A con la orden diag.

5 -4 1 0 0 0 0 -4 6 -4 1 0 0 0 1 -4 6 -4 1 0 0 0 1 -4 6 -4 1 0

A = 0 0 1 -4 6 -4 1 0 0 0 1 -4 6 -4

0 0 0 0 1 -4 5

5. Generar la matriz A con las órdenes diag y fliplr.

0 0 0 0 3 -4 2 0 0 0 3 -4 2 -4 0 0 3 -4 2 -4 0 0 3 -4 2 -4 0 0

A = 3 -4 2 -4 0 0 0 -4 2 -4 0 0 0 0

2 -4 0 0 0 0 0

Page 27: MLabLOLI

Matlab

27

CAP 3. ÁLGEBRA MATRICIAL

1. SISTEMA LINEAL DE ECUACIONES

OPERACIONES DE LA MATRIZ

Hemos visto ya el operador ' (traspuesto) para hallar la traspuesta de una matriz ó

traspuesta de un vector, también las operaciones con matrices.

Pero nótese que si 1 2 3

C=4 5 6

, 1 1 1

D=2 2 2

y x 1 1 1 entonces:

a) Están bien definidos C*x'=

11 2 3

14 5 6

1

, C*D' =

1 21 2 3

1 24 5 6

1 2

.

b) Están bien definidos x*x' =

1

1 1 1 1

1

(producto interno que es equivalente a la

operación a elemento x.*x) y el x'*x =

1

1 1 1 1

1

(producto externo).

c) Sin embargo C*x y C*D no están bien definidos.

SOLUCIÓN DE SISTEMAS LINEALES

Para resolver los sistemas lineales A*x = B por ejemplo

1

2

3

2 3 4 3

1 1 1 0.5

4 7 14 2

x

x

x

Recuerde las siguientes operaciones:

Símbolo Operación

/ Cociente matricial, B/A=B*inv(A)

\ Cociente matricial, A\B=inv(A)*B

Si A es una matriz no singular cuadrada entonces A\B y B/A corresponden formalmente

a la multiplicación izquierda y derecha de B por A-1

(inversa de A). Estas expresiones se

utilizan para solucionar los tipos siguientes de sistemas de ecuaciones:

División izquierda:

x = A\B y también x=linsolve(A, B) soluciona A * x = B

División derecha:

x = B/A soluciona x * A = B

Page 28: MLabLOLI

Matlab

28

EJEMPLO

Resolver 1 2 3

1 2 3

1 2 3

2x 3x 4x 3

x x x 0.5

4x 7x 14x 2

Las acciones en MATLAB serán:

>> A=[2,3,-4;1,-1,1;4,-7,14]

A =

2 3 -4

1 -1 1

4 -7 14

>> b=[3;-0.5;2]

b =

3.0000

-0.5000

2.0000

>> x=A\b %solución

x =

0.5000

2.0000

1.0000

>> linsolve(A,b) %con linsolve

ans =

[ 1/2]

[ 2]

[ 1]

2. OPERACIONES ELEMENTALES FILA Y COLUMNA

OPERACIONES FILA

Sea A la siguiente matriz

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

A =

0 2 1 4

5 0 1 0

2 0 3 7

1ra) Multiplicación de una fila por un escalar

>> A(3,:) = 0.5*A(3,:) %Accion 0.5xFila3 Fila3

>> A(3,:)=0.5*A(3,:)

A =

0 2.0000 1.0000 4.0000

5.0000 0 1.0000 0

1.0000 0 1.5000 3.5000

2da) Intercambio de filas

>> aux=A(1,:);A(1,:)=A(3,:);A(3,:)=aux %Accion Fila1 Fila3 A =

1.0000 0 1.5000 3.5000

5.0000 0 1.0000 0

0 2.0000 1.0000 4.0000

3ra) Adicionar a una fila otra fila por un escalar

>> A(2,:)=A(2,:)-5*A(1,:) %Accion Fila2 – 5xFila1 Fila2

A =

1.0000 0 1.5000 3.5000

0 0 -6.5000 -17.5000

0 2.0000 1.0000 4.0000

OPERACIONES COLUMNA Sea B la siguiente matriz

>> B=[0 2 1 4; 5 0 1 0; 2 0 8 6]

B =

0 2 1 4

5 0 1 0

2 0 8 6

Page 29: MLabLOLI

Matlab

29

1ra) Multiplicación de una columna por un escalar

>> B(:,2)=0.5*B(:,2) %0.5xColumna2 Columna2

B =

0 1 1 4

5 0 1 0

2 0 8 6

2da) Intercambio de columnas

>> aux = B(:,1); B(:,1)=B(:,2); B(:,2)=aux %Columna1 Columna2

B =

1 0 1 4

0 5 1 0

0 2 8 6

3ra) Adicionar a una columna otra columna por un escalar

>> B(:,4)=B(:,4)-4*B(:,1) %Columna4 – 4xColumna1 Columna4

B =

1 0 1 0

0 5 1 0

0 2 8 6

Vía estas operaciones elementales se pueden realizar transformaciones de una matriz A a

matriz escalonada, matriz triangular, matriz identidad, matriz ortogonal, … etc. Estas

son por ende algunas de las clásicas operaciones que el álgebra lineal usa para realizar

sus acciones con diversos objetivos como la diagonalización, la forma canónica de

Jordan, la forma canónica Racional.

3. FACTORIZACIÓN LOWER UPPER

FORMA DE GAUSS-DOOLITTLE

Otra técnica para resolver Ax = b es descomponer en factores A por Eliminación

Gaussiana y después solucionar dos sistemas triangulares para computar x. Es decir

descomponer A de la forma Lower Upper, que en su forma más general será:

P * A = L * U

Siendo L = matriz triangular inferior unitaria, U = matriz triangular superior, P = matriz

de permutación.

FORMA DE CHOLESKI

Si A es definida positiva y simétrica entonces la factorización Lower Upper también se

puede realizar de la forma de Choleski que será:

A = R’ * R

Siendo R = matriz triangular superior.

OPERACIONES DE FACTORIZACIÓN EN MATLAB

[L,U]=lu(A) Descompone la matriz A en el producto A =L*U, siendo U una matriz

triangular superior y L una matriz pseudotriangular inferior unitaria

(triangularizable mediante permutación).

Page 30: MLabLOLI

Matlab

30

[L,U,P]=lu(A) Devuelve una matriz triangular inferior unitaria L, una matriz triangular

superior U, y una matriz de permutación P tales que PA = LU.

R=chol(A) Devuelve la matriz triangular superior R tal que R’ * R = A

(descomposición de Cholesky de A), en caso de que A sea definida

positiva y simétrica. Si A no es definida positiva devuelve un error.

EJEMPLO

Factorizar:

2 3 4

A 1 1 1

4 7 14

por Gauss Doolittle, y

B = matriz de pascal de 3x3 por Choleski.

Las acciones en MATLAB serán:

>> A=[2,3,-4;1,-1,1;4,-7,14]

A =

2 3 -4

1 -1 1

4 -7 14

>> [L,U]=lu(A)

L =

0.5000 1.0000 0

0.2500 0.1154 1.0000

1.0000 0 0

U =

4.0000 -7.0000 14.0000

0 6.5000 -11.0000

0 0 -1.2308

>> [L,U,P]=lu(A)

L =

1.0000 0 0

0.5000 1.0000 0

0.2500 0.1154 1.0000

U =

4.0000 -7.0000 14.0000

0 6.5000 -11.0000

0 0 -1.2308

P =

0 0 1

1 0 0

0 1 0

>> % Por Choleski

>> B=pascal(3)

B =

1 1 1

1 2 3

1 3 6

>> R=chol(B)

R =

1 1 1

0 1 2

0 0 1

Nótese que la matriz de pascal B es una matriz simétrica y definida positiva, por lo cual

la factorización de la forma de Choleski se ha llevado con éxito.

4. FACTORIZACIÓN ORTOGONAL

Cuando A es rectangular, los factores de A se pueden hallar por ortogonalización.

[Q,R] = qr(A) produce una matriz triangular superior R de la misma dimensión de A y

una matriz ortogonal Q tal que A = Q*R.

[Q,R,P] = qr(A) produce una matriz de permutación P, una matriz triangular superior R de

la misma dimensión de A y una matriz ortogonal Q tal que A*P = Q*R.

EJEMPLO

Factorizar ortogonalmente:

Page 31: MLabLOLI

Matlab

31

2 3 4

A 1 1 1

4 7 14

y B =

1 2 3 1

2 1 2 4

0 2 3 1

.

Las acciones en MATLAB serán:

>> A=[2,3,-4;1,-1,1;4,-7,14]

A =

2 3 -4

1 -1 1

4 -7 14

>> [Q,R]=qr(A)

Q =

-0.4364 0.8927 0.1126

-0.2182 0.0164 -0.9758

-0.8729 -0.4504 0.1876

R =

-4.5826 5.0190 -10.6927

0 5.8146 -9.8602

0 0 1.2009

>>Q*R %verificando

ans =

2.0000 3.0000 -4.0000

1.0000 -1.0000 1.0000

4.0000 -7.0000 14.0000

>> B=[1,2,3,1;-2,1,2,4;0,2,3,1]

B =

1 2 3 1

-2 1 2 4

0 2 3 1

>> [Q,R]=qr(B)

Q =

-0.4472 -0.6667 -0.5963

0.8944 -0.3333 -0.2981

0 -0.6667 0.7454

R =

-2.2361 0.0000 0.4472 3.1305

0 -3.0000 -4.6667 -2.6667

0 0 -0.1491 -1.0435

>> Q*R %verificando

ans =

1.0000 2.0000 3.0000 1.0000

-2.0000 1.0000 2.0000 4.0000

0 2.0000 3.0000 1.0000

5. NORMAS MATRICIALES

norm(A) Norma 2 de la matriz A (norma euclideana).

norm(A,1) Norma 1 de la matriz A

norm(A,Inf) Norma infinito de la matriz A (norma del máximo).

norm(A,'fro') Norma de Frobenius de la matriz

cond(A) Número de condición de la matriz A según la norma 2.

EJEMPLO

Extraer la norma 1, norma euclideana y norma del máximo de la matriz A.

>> A=[2,3,-4;1,-1,1;4,-7,14]

A = 2 3 -4 1 -1 1 4 -7 14

>> norm(A,2) ans = 16.8014

>> norm(A,1) ans = 19

>> norm(A,inf) ans = 25

Page 32: MLabLOLI

Matlab

32

6. ARREGLOS MULTIDIMENSIONALES

Para introducir vectores y matrices no hubo problemas, ahora es tiempo de

introducir arreglos multidimensionales. Por ejemplo voy a introducir el arreglo A de

3x3x4 cuyos elementos esquematizo a continuación:

>> A(:,:,1)=pascal(3); A(:,:,2)=magic(3); A(:,:,3)=ones(3); A(:,:,4)=vander([2,4,5]) ;

>>% Veamos el arreglo A

>> A

A(:,:,1) =

1 1 1

1 2 3

1 3 6

A(:,:,2) =

8 1 6

3 5 7

4 9 2

A(:,:,3) =

1 1 1

1 1 1

1 1 1

A(:,:,4) =

4 2 1

16 4 1

25 5 1

Page 33: MLabLOLI

Matlab

33

EJERCICIOS DESARROLLADOS

ÁLGEBRA MATRICIAL

1. Hallar la norma euclideana, la norma del máximo, la norma L1, de v=[2,3, 1,2,1,3] .

>> v=[2,3,-1,2,1,3]

v =

2 3 -1 2 1 3

>> norm(v)

ans =

5.2915

>> norm(v,inf)

ans =

3

>> norm(v,1)

ans =

12

2. Hallar la norma euclideana, la norma del máximo, la norma de Frobenious, el número de

condición, de A=[2,3, 7;2,1, 1;1,2,3] .

>> A=[2,3,-7;2,1,-1;1,2,3] A =

2 3 -7

2 1 -1

1 2 3

>> norm(A)

ans =

8.2563

>> norm(A,inf)

ans =

12

>> norm(A,'fro')

ans =

9.0554

>> cond(A)

ans =

7.5751

3. Resuelva el Sistema lineal Ax = b, siendo A=[2,3, 7;2,1, 1;1,2,3] , b=[1:3]' .

>> A=[2,3,-7;2,1,-1;1,2,3] A =

2 3 -7

2 1 -1

1 2 3

>> b=[1:3]'

b =

1

2

3

>> x=A\b

x =

0.9063

0.5313

0.3438

4. Factorice por Gauss Doolitle y también ortogonalmente la matriz A.

>> [L,U,P]=lu(A) L =

Page 34: MLabLOLI

Matlab

34

1.0000 0 0

1.0000 1.0000 0

0.5000 -0.2500 1.0000

U =

2 3 -7

0 -2 6

0 0 8

P =

1 0 0

0 1 0

0 0 1

>> [Q,U]=qr(A)

Q =

-0.6667 0.4576 -0.5883

-0.6667 -0.7191 0.1961

-0.3333 0.5230 0.7845

U =

-3.0000 -3.3333 4.3333

0 1.6997 -0.9152

0 0 6.2757

Page 35: MLabLOLI

Matlab

35

EJERCICIOS PROPUESTOS

1. Resolver el sistema lineal 1 2 3

1 2 3

1 2 3

2x 3x 4x 3

x 2x x 0

x 7x 14x 2

2. Resolver el sistema lineal

4xx3x2x

3x2xxx3

1xxxx2

4x3xx

4321

4321

4321

421

3. Resolver los sistemas A x = b y B x = b utilizando:

2035

1260

0162

2/1231

B

1251

0051

1142

1021

A

Siendo b ==>

3

2

0

1

4

3

2

1

0

1

0

1

321 bbb

4. Factorice

1 1 1 1 1

1 3 5 3 7

1 3 6 1 1

1 4 1 2 3

0 2 3 4 5

A

por Gauss Doolitle y también ortogonalmente.

5. Haga operaciones elementales filas a la matriz A con tal de convertir toda la 1ra

columna y debajo del primer elemento de A en ceros.

Page 36: MLabLOLI

Matlab

36

CAP 4. POLINOMIOS. RAÍCES DE FUNCIONES

1. POLINOMIOS

Un polinomio 1

1 2 1 ... n n

n na x a x a x a

en Matlab se introduce a través de sus

coeficientes pero considerando el polinomio completo y ordenado decrecientemente.

EJEMPLO

El polinomio 104)( 23 xxxp en Matlab será

>> p=[1 4 0 -10]

p =

1 4 0 -10

EVALUACIÓN DE POLINOMIOS

polyval(p, x) evalúa el polinomio p (que es un vector de longitud n+1 cuyos elementos

son los coeficientes del polinomio) en x.

EJEMPLO

El polinomio 104)( 23 xxxp lo evaluamos en distintos x.

>> y=polyval(p,1)

y =

-5

>> y=polyval(p,-2.1+3i)

y =

19.0790 -37.7100i

>> x=1:0.25:2

x =

1.0000 1.2500 1.5000 1.7500 2.0000

>> y=polyval(p,x)

y =

-5.0000 -1.7969 2.3750 7.6094 14.0000

PRODUCTO DE POLINOMIOS

conv(p,d) Multiplicación de los polinomios p y d

DIVISIÓN DE POLINOMIOS

[Q,R] = deconv(p,d) División de polinomios p y d, obteniéndose el cociente Q y

residuo R.

EJEMPLO

Sean los polinomios 104)( 23 xxxp y 2( ) 2d x x se tiene

>> p=[1,4,0,-10];d=[1,0,-2];

>> m=conv(p,d) %producto de p(x) por d(x)

m =

1 4 -2 -18 0 20

>> [Q,R]=deconv(p,d) %division de p(x) por d(x)

Q =

1 4

R =

0 0 2 -2

Page 37: MLabLOLI

Matlab

37

FRACCIONES PARCIALES

[R,P,Q] = residue(A,B) Descomposición en fracciones parciales de ( )

( )

A x

B x, siendo

( ) (1) (2) ( ) ... ( )

( ) (1) (2) ( )

A x R R R nQ x

B x x P x P x P n

Si ( ) ... ( -1)P j P j m es un polo de orden m, entonces la expansión incluye

términos de la forma

2

( ) ( 1) ( 1) ...

( ) ( ) ( )m

R j R j R j m

x P j x P j x P j

EJEMPLO

Descomponer en fracciones parciales

( )f x = 3 2

2 2

4 3 2

( 1)

x x x

x x

=

2 2

1 1

a b c d

x x xx

Solución:

3 2( ) 4 3 2A x x x x , 2 2 4 3 2( ) ( 1) 2B x x x x x x , luego en Matlab se tiene:

>> A=[4,-1,-3,-

2];B=[1,2,1,0,0];

>> [R,P,Q]=residue(A,B)

R =

3

-4

1

-2

P =

-1

-1

0

0

Q =

[ ]

Entonces la expansión en fracciones parciales

será:

3 2

22 2 2

4 3 2 3 4 1 2

( 1) 1 1

x x x

x x x x xx

DERIVADAS DE POLINOMIOS

polyder(p) Es la derivada del polinomio p.

EJEMPLO

Sea el polinomio p(x) = 4x3 + 3x

2 +x – 1, su derivada y segunda derivada son:

>> p=[4 3 1 -1]

p =

4 3 1 -1

>> dp=polyder(p) dp =

12 6 1

>> d2p=polyder(dp)

d2p =

24 6

2. AUTOVALORES Y AUTOVECTORES

Función Operación Función Operación

Page 38: MLabLOLI

Matlab

38

eig(A) Autovalores de la matriz A.

poly(A) Polinomio característico de A.

jordan(A) Forma canónica de Jordan de

la matriz A.

[V,D]=eig(A) Matriz diagonal de

autovalores D y matriz V de autovectores

por columnas.

poly(V) Vector (polinomio) cuyas raíces

son los elementos del vector V.

[V,J]=jordan(A) Forma canónica de

Jordan J, de la matriz y la matriz de paso V

de autovectores por columnas.

EJEMPLO

Sea 2 3 4

A 1 1 1

4 7 14

a) Calcular los autovalores de la matriz A.

b) Calcular los autovalores y autovectores de A.

>> A=[2,3,-4;1,-1,1;4,-7,14]

A =

2 3 -4

1 -1 1

4 -7 14

>> % respuesta de (a)

>> D=eig(A)

D =

12.1493

3.5853

-0.7346

>> % respuesta de (b)

>> [V,D]=eig(A)

V =

-0.3550 0.9525 0.2442

0.0440 0.1499 -0.8485

0.9338 -0.2651 -0.4694

D =

12.1493 0 0

0 3.5853 0

0 0 -0.7346

3. RAÍCES DE POLINOMIOS

roots Halla las raíces de polinomios.

roots(p) calcula las raíces del polinomio con coeficientes que son los elementos del

vector p.

EJEMPLO

Calcular las raíces del polinomio 104)( 23 xxxp

>> p=[1,4,0,-10];

>> roots(p)

ans =

-2.6826 + 0.3583i

-2.6826 - 0.3583i

1.3652

Page 39: MLabLOLI

Matlab

39

4. RAÍCES DE FUNCIONES

fzero Extrae las raíces de funciones lineales y no lineales, con el único requisito de que

introduzca un valor inicial.

>> fzero('sin(x)-cos(x)',0)

ans =

0.7854

>> fzero('sin(2*x)-2*cos(x)+x^2-3*x-6',3)

ans =

3.9113

Page 40: MLabLOLI

Matlab

40

EJERCICIOS DESARROLLADOS

5. Evaluar el polinomio en x = 1:0.3:4, 3

1 2 7p x x

>> p1=[2,0,-1,7]

p1 =

2 0 -1 7

>> x = 1:0.3:4

x =

1 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4

>> polyval(p1,x)

ans =

Columns 1 through 5

8.0000 10.0940 13.5920 18.8180 26.0960

Columns 6 through 10

35.7500 48.1040 63.4820 82.2080 104.6060

Column 11

131.0000

6. Hallar el producto de polinomios p1(x).p3(x) , siendo 4

3 7 p x

>> p3=[1,0,0,0,7] >> conv(p1,p3)

7. Hallar el cociente y residuo de p3 entre p1

>>[q,r]=deconv(p3,p1)

8. Hallar la descomposición en fracciones parciales de 3

1

p

p

>>[R,P,Q] = residue(p3,p1)

9. Calcular las raíces del polinomio 3 2( ) 3 p x x x x i

>>p=[1,1,-1,-3i]

>> roots(p)

ans =

-1.8925 + 0.5281i

1.1483 + 0.6156i

-0.2557 - 1.1436i

Page 41: MLabLOLI

Matlab

41

EJERCICIOS PROPUESTOS

6. Evaluar los polinomios en x = 1:0.3:7

i. 5

2 2 3 (6 2 )p x ix i

ii. 10

3 1p x x

7. Hallar el desarrollo del trinomio 4

3p(x) = x - ix+2 usando comandos del Matlab.

8. Calcular las raíces del polinomio:

3 4

( ) 3 5 7p x x i xcis xcis [nota: cos sincis i ]

9. Hallar el resto de la división de p(x) por 3d(x) = x - ix+2 , siendo p(x) el polinomio

característico de la matriz A.

1 1 1 1 1

1 3 5 3 7

1 3 6 1 1

1 4 1 2 3

0 2 3 4 5

A

10. Hallar la derivada del cociente de la división de p(x) 10 1 x x por

3d(x) = x - ix+2 .

11. Hallar las raíces de la función f(x) 2 xsenx cercanas a – 6, – 4, 4 y 6.

Page 42: MLabLOLI

Matlab

42

CAP 5. GRÁFICOS BIDIMENSIONALES (2-D)

Matlab produce gráficos de dos y tres dimensiones, así como contornos y gráficos de

densidad.

Se pueden representar los gráficos y listar los datos, permite el control de colores,

sombreados y otras características de los gráficos, también soporta gráficos

animados.

Los gráficos producidos por Matlab son portables a otros programas.

1. GRÁFICOS EN COORDENADAS CARTESIANAS

Estos gráficos se tratan como curvas que pasan por pares ordenados, pero finalmente

Matlab lo que hace es trazar una poligonal lineal que pasa por estos puntos o pares

ordenados.

ANATOMIA DE UN GRAFICO

Se pueden hacer los gráficos de dos formas:

Modelo matemático de la curva.

Datos discretos de la curva.

- Modelo matemático de la curva. Para esto se tiene que tener la ley o modelo

matemático que describe el fenómeno, es decir

Modelo

Por una ley o modelo matemático

Page 43: MLabLOLI

Matlab

43

- Datos discretos de la curva. Para esto se tiene que tener datos de los pares ordenados

(X,Y), es decir

Datos X = Pre imágenes

Y= Imágenes

GRAFICANDO CON PLOT

plot(X) Representa los puntos (k, Xk). Si X es una matriz, hace lo mismo para cada

columna de la matriz. Si X es un vector complejo, representa Real(X) frente a

Imag(X).

EJEMPLO

>> x=[7,9,3,1,5,20,5]

x =

7 9 3 1 5 20 5

>> plot(x)

plot(X,Y) Representa el conjunto de puntos (X,Y). Si X o Y son matrices, representa por

filas o columnas los datos de X frente a los datos de Y, dependiendo si el otro

vector es fila o columna. Para valores complejos de X e Y, se ignoran las partes

imaginaria.

plot(X,Y,S) Gráfica de plot(X,Y) con las opciones definidas en S. Usualmente, S se

compone de 3 caracteres entre tildas, el primero de los cuales fija el color de la

línea del gráfico, el segundo fija la etiqueta o marca en el nodo y el último fija el

carácter a usar en el graficado.

plot(X1,Y1,S1,X2,Y2,S2,…,Xn,Yn,Sn) Gráfica de las n curvas superpuestas Y1 vs X1,

Y2 vs X2, … , Yn vs Xn con las opciones definidas en S1, S2, … , Sn

respectivamente.

Los caracteres son respectivamente, los siguientes:

Color Etiqueta Trazo

y

m

amarillo

magenta

.

o

puntos

círculos

-

:

sólido

a puntos

Page 44: MLabLOLI

Matlab

44

c

r

g

b

w

k

cyan

rojo

verde

azul

blanco

negro

x

+

*

s

d

p

h

v

^

<

>

x-marcas

signo más

estrellas

cuadrados

diamantes

estrella de 5 puntas

estrella de 6 puntas

triángulo

triángulo triángulo

triángulo

-.

--

guiones y puntos

semisólidos

EJEMPLO

Graficar 2( ) 4 ( )f x x x sen x en el intervalo [0, 5]

Solución

>> x=0:0.2:5;

>> y=sqrt(x)+4*x.^2.*sin(x);

>> plot(x,y)

EJEMPLO

Graficar 2( ) ( ) 2xf x e xsen x en el intervalo [ - 3 , 3] con trazo de color rojo

etiquetas cuadradas y línea punteada.

Solución

>> x=-3:0.4:3;

>> y=exp(x)-x.*sin(x.^2)+2;

>> plot(x,y,'rs:')

Page 45: MLabLOLI

Matlab

45

COLOCACIÓN DE TÍTULOS Y TEXTOS

title(‘texto’) Añade el texto como título del gráfico en la parte superior del mismo en

gráficos 2-D y 3-D

xlabel(‘texto’) Sitúa el texto al lado del eje x en gráfico 2-D y 3-D

ylabel(‘texto’) Sitúa el texto al lado del eje y en gráficos 2-D y 3-D

zlabel(‘texto’) Sitúa el texto al lado de eje z en un gráfico 3-D

text(x,y,’texto’) Sitúa el texto en el punto (x,y) dentro del gráfico 2-D

text(x,y,z,’texto’) Sitúa el texto en el punto (x,y,z) en el gráfico 3-D

gtext(‘texto’) Permite situar el texto en un punto seleccionado con el ratón dentro de un

gráfico 2-D LEYENDAS

Colocación

legend(string1,string2,string3, ...) Crea las leyendas de los gráficos correspondientes.

Localización

legend(...,'location',loc) Adiciona las leyendas en una ubicación específica con respecto a

los ejes. Esta ubicación loc es de 1x4 posiciones y combinaciones de acuerdo a:

'North' Dentro del cuadro grafico y arriba.

'South' Dentro y abajo.

'East' Dentro y a la derecha.

'West' Dentro y a la izquierda.

'NorthEast' Dentro y arriba a la derecha (default)

'NorthWest Dentro y arriba a la izquierda

'SouthEast' Dentro y abajo a la derecha

'SouthWest' Dentro y abajo a la izquierda

'NorthOutside' Fuera del cuadro grafico y arriba

'SouthOutside' Fuera y abajo

'EastOutside' Fuera y a la derecha

'WestOutside' Fuera y a la izquierda

'NorthEastOutside' Fuera y arriba a la derecha

'NorthWestOutside' Fuera y arriba a la izquierda

'SouthEastOutside' Fuera y abajo a la derecha

'SouthWestOutside' Fuera y abajo a la izquierda

'Best' Espacio no usado dentro del cuadro grafico

'BestOutside' Espacio no usado fuera del cuadro grafico

EJEMPLO

Graficar en el intervalo [ - 3 , 3] 21 ( ) 2y xsen x , 2 4 ( )y x sen x , y3=x+0.3[x]

colocando titulo, descripción de ejes y leyendas.

Solución:

Page 46: MLabLOLI

Matlab

46

>> x=-3:0.4:3;

>> y1=-x.*sin(x.^2)+2;

>> y2=abs(x)+4*sin(x);

>> y3=x+0.3*floor(x);

>> plot(x,y1,x,y2,x,y3);

>> title('Gráfico de tres funciones');

>> xlabel('eje x');ylabel('eje y');

>> legend('-x*sen(x)', '|x|+4*sen(x)',

'x+0.3[x]')

>> legend('-x*sen(x)', '|x|+4*sen(x)', 'x+0.3[x]','Location','North')

CONFIGURACIÓN DE EJES, DOMINIO, MALLADO Y SUPERPOSICIÓN

Estos comandos permiten manipular los ejes de un gráfico, la colocación del mismo

dentro de la pantalla, su apariencia, su presentación desde distintos puntos de vista, etc.

axis([xmin xmax ymin ymax]) Sitúa los valores máximo y mínimo para los ejes X e Y en el

gráfico corriente.

axis (‘auto’) Sitúa los ejes en la escala automática por defecto (la dada por xmin=min(x),

xmax=max(x) e y libre).

axis (axis) Congela el escalado de ejes en los límites corrientes, de tal forma que al situar

otro gráfico sobre los mismo ejes (con hold en on), la escala no cambie.

V=axis Da el vector V de 4 elementos, conteniendo la escala de gráfico corriente.

axis(‘ij’) Sitúa coordenadas con el origen en la parte superior izquierda del gráfico.

axis(‘square’) Convierte el rectángulo de graficado en un cuadrado, con lo que las

figuras se abomban.

axis(‘equal’) Sitúa el mismo factor de escala para ambos ejes.

axis (‘normal’) Elimina las opciones square y equal.

axis(‘off’) Elimina las etiquetas y marcas de los ejes y las rejillas, manteniendo el título del

gráfico y los textos situados en él con text y gtext.

axis(‘on’) Coloca de nuevo las etiquetas, marcas y rejillas de los ejes.

Page 47: MLabLOLI

Matlab

47

ginput(n) Permite recuperar las coordenadas de n puntos de un grafico mediante ratón o

teclado. grid Sitúa rejillas en los ejes de un gráfico 2-D o 3-D. La opción grid on coloca las

rejillas y grid off las elimina. La opción grid permuta entre on y off

hold Permite mantener el gráfico existente con todas sus propiedades, de modo que el

siguiente gráfico que se realice se sitúe sobre los mismos ejes y se superponga al existente. La opción hold on activa la opción y hold off la elimina. La opción hold permuta entre on y off. Válido para 2-D y 3-D

EJEMPLO

Graficar 2( ) ( ) f x x x sen x y g(x)=senx+[x2] en el intervalo [0, 5] dentro de una

region rectangular 2,7 30,30

Solución

>> x=0:0.2:5;

>> y1=sqrt(x)+x.^2.*sin(x);

>> plot(x,y1)

>> hold on %superposición

>> y2=sin(x)+floor(x.^2);

>> plot(x,y2)

>> axis([-2 7 -30 30])

>> grid %mallado

SELECCIÓN DE LA VENTANA O SUBVENTANA DE EXHIBICIÓN

figure(n) Crea la n-ésima ventana de figura.

subplot(m,n,p) Divide la ventana gráfica en mxn subventanas y coloca el gráfico corriente

en la ventana p-ésima. EJEMPLO

Para crear 2x3 = 6 subventanas y colocar el puntero en la posición 4, se procede en

Matlab como:

>>subplot(2,3,4)

Page 48: MLabLOLI

Matlab

48

>> x=0:pi/40:2*pi;plot(x,sin(x))

FUNCIÓN FPLOT

fplot('fun',limits) Plotea 'fun' entre limites [xmin xmax] o limites [xmin xmax ymin

ymax]. 'fun' es el nombre de una función M-file o una cadena con

variable x tal como 'sin(x)', 'diric(x,10)' o '[sin(x),cos(x),exp(x)]'.

fplot('fun',limits,S) Plotea 'fun' con las opciones definidas en S.

fplot('fun',limits,tol) Plotea 'fun' con el error relativo con tolerancia tol (por defecto

es 2*10-3

). fplot('fun',limits,tol,S) Plotea 'fun' con tolerancia tol y con las opciones def. en S.

fplot('fun',limits,n) Con 1n . Plotea 'fun' con un mínimo 1n de puntos. El máximo

tamaño de paso esta restringido por xmax-xmin

n .

[X,Y] = fplot('fun',limits) Retorna las abscisas y ordenadas para 'fun' en X e Y. No

hace la gráfica.

EJEMPLO

Graficar ( ) ( ) 2f x xsen x en el intervalo [0, 5].

>> fplot('-x.*sin(x)+2',[0 5])

EJEMPLO

Graficar 2( ) ( ), ( ) cos , ( ) 3 2f x xsen x g x x x h x x x en el intervalo [0, 5].

Page 49: MLabLOLI

Matlab

49

>> fplot('[-x*sin(x)+2,cos(x)-x,x^2-3*x+2]',[0 5])

2. GRÁFICOS LOGARÍTMICOS Y SEMILOGARÍTMICOS

Los comandos que habilita Matlab para representar gráfico con escalas logarítmicas son

los siguientes:

loglog(X,Y) Realiza los mismos gráficos que plot(X,Y), pero con escala logarítmica en

los dos ejes. El comando loglog presenta las mismas variantes y admite las

mismas opciones que el comando plot.

semilogx(X,Y) Realiza los mismos gráficos que plot(X,Y) , pero con escala logarítmica

en el eje x, y escala normal en el eje y.

semilogy(X,Y) Realiza los mismos gráficos que plot(X,Y), pero con escala logarítmica

en el eje y, y escala normal en el eje x.

EJEMPLO

>> x=0:0.2:5;

>> semilogy(x,10.^x)

Page 50: MLabLOLI

Matlab

50

3. GRÁFICOS EN COORDENADAS POLARES

Matlab habilita el comando específico polar, que representa funciones en coordenadas

polares. Su sintaxis es la siguiente:

polar (,r) Representa la curva en coordenadas polares r = r()

polar (,r,S) Idem con el estilo de línea dado por S (ver la instrucción plot)

EJEMPLO

Graficar el cardiode.

>> a=0:pi/40:2*pi;polar(a,1-sin(a))

EJEMPLO

Graficar

a) La rosa de 4 pétalos horizontal.

>> a=0:pi/40:2*pi;

>> polar(a,3*cos(2*a))

b) La función polar r = 1 – 2*cos(θ)

>> polar(a,1-2*cos(a))

EJEMPLO

Graficar la rosa de 7 pétalos horizontal.

>> b=0:pi/100:2*pi;

>> polar(b,3*cos(7*b))

Page 51: MLabLOLI

Matlab

51

. GRÁFICOS ESTADÍSTICOS

HISTOGRAMAS

bar(Y) Dibuja el gráfico de barras relativo al vector Y

bar(X,Y) Dibuja el gráfico de barrar relativo al vector Y cuyos elementos son

especificados a través del vector X EJEMPLO

>> y=[2 7 4 6 19 2];

>> bar(y)

EJEMPLO

>> x=[2 5 7 8 9 12];

>> y=[2 7 4 6 19 2];

>> bar(x,y)

stairs(Y) Dibuja el gráfico escalonado relativo al vector Y

stairs(X,Y) Dibuja el gráfico escalonado relativo al vector Y cuyos elementos son

especificados a través del vector x.

hist(Y) Dibuja el histograma relativo al vector Y utilizando 10 rectángulos

verticales de igual base.

hist(Y,n) Dibuja el histograma relativo al vector Y utilizando n rectángulos

verticales de igual base.

hist(X,Y) Dibuja el histograma relativo al vector Y utilizando rectángulos verticales

cuyas bases miden lo especificado en los elementos del vector X

Page 52: MLabLOLI

Matlab

52

EJEMPLO

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

>> hist(y)

errorbar(x,y,e) Realiza el gráfico del vector x contra el vector y con los errores

especificados en el vector e. Pasando por cada punto (xi,yi)

stem(Y) Dibuja el gráfico de racimo relativo al vector Y. Cada punto del vector Y

es unido al eje x por una línea vertical

stem(X,Y) Dibuja el gráfico de racimo relativo al vector Y cuyos elementos son

especificados a través del vector X.

pie(X) Realiza el gráfico de sectores relativo al vector de frecuencias X.

pie(X,Y) Realiza el gráfico de sectores relativo al vector de frecuencias X

desplazando hacia fuera los sectores en los que Yi 0

EJEMPLO

>> x=[1,4,0.5,2.5,2]; pie(x)

5. GRÁFICOS DE RELACIONES

ezplot(f) Plotea f sobre el dominio por defecto -2 < x < 2 .

ezplot(f, [a,b]) Plotea f sobre a < x < b

ezplot(f, [xmin,xmax,ymin,ymax]) Plotea f sobre xmin< x <xmax, ymin< y <ymax.

ezplot(x,y) Plotea en coordenadas paramétricas la curva plana

x= x(t), y= y(t) sobre el dominio por defecto

-2 < x < 2 .

ezplot(x,y, [tmin,tmax]) Plotea x = x(t) , y = y(t) over tmin < t < tmax.

Donde f puede ser una función estandar f = f(x) ó una función implicita f = f(x,y) = 0.

Page 53: MLabLOLI

Matlab

53

ezpolar(f) Plotea la curva polar r = f(theta) sobre el dominio por

defecto 0 < theta < 2 .

ezpolar(f,[a,b]) Plotea f sobre a < theta < b.

EJEMPLOS

>> %funciones estandar

>> ezplot('cos(x)')

>> ezplot('cos(x)', [0, pi])

>> %funciones implicitas

>> ezplot('1/y-log(y)+log(-1+y)+x - 1')

>> ezplot('x^2 + y^2 - 1',[-1.25,1.25]); axis equal

>> ezplot('x^3 + 2*x^2 - 3*x + 5 - y^2')

>> %En coordenadas paramétricas

>> ezplot('sin(t)','cos(t)')

>> ezplot('sin(3*t)*cos(t)','sin(3*t)*sin(t)',[0,pi])

>> ezplot('sin(3*t)','cos(t)',[0,2*pi])

Page 54: MLabLOLI

Matlab

54

EJEMPLOS

Gráficos con dominio por defecto

>>ezpolar('cos(5*t)')

>>ezpolar('1 + 2*sin(t/2)')

>>ezpolar('1 - 2*sin(3*t)')

Graficos con dominio indicado

>>ezpolar('sin(2*t)*cos(3*t)',[0,pi])

>>r = '100/(100+(t-1/2*pi)^8)*(2-sin(7*t)-1/2*cos(30*t))';

>>ezpolar(r,[-pi/2,3*pi/2])

Page 55: MLabLOLI

Matlab

55

5. IMAGENES F = imread(filename) asigna el contenido del archive imagen a la variable matricial F.

Soporta los archivos *.jpeg, *.tiff, *.gif, *.png, *.hdf, *.ico, *.bmp, etc

image(F) visualiza la matriz C como una imagen en una ventana de figura.

>>F=imread('pcblack.bmp');image(F);

>>axis off %desactiva los ejes

EJERCICIOS RESUELTOS

1. Graficar el polinomio 3

1p = 2x x 7 en el intervalo [–10 , 10].

2. Graficar la función xsen(x2) en el intervalo [ - 2 , 2].

3. Graficar las funciones 3sen(x) y e-0.2 x sobre un mismo gráfico, para x=0:0.1:4. Usar zoom y gtext para nombrar uno de los puntos de intersección de dichas funciones.

Solución:

1. Graficar el polinomio 3

1p = 2x x 7 en el intervalo [–10 , 10].

>>p1=[2,0,-1,7] >>x=-10:0.5:10;y=polyval(p1,x); >>plot(x,y)

2. Graficar la función xsen(x2) en el intervalo [ - 2 , 2].

>> fplot('x*sin(x^2)',[-2*pi 2*pi])

Page 56: MLabLOLI

Matlab

56

Page 57: MLabLOLI

Matlab

57

3. Graficar las funciones 3sen(x) y e-0.2 x sobre un mismo gráfico, para x=0:0.1:4. Usar zoom y gtext para nombrar uno de los puntos de intersección de dichas funciones.

>>x=0:0.1:4; >>plot(x,3*sin(pi*x)) >>hold on >>plot(x,exp(-0.2*x))

EJERCICIOS PROPUESTOS

1. Crear el archivo tipo texto datos.txt con los datos 1.0 7.5

2.5 4.0 3.2 5.0 3.5 5.5 2.0 6.3 7.8 6.2 8.1 6.0 9.7 5.0 10.3 3.0

2. Graficar usando este archivo la 1ra columna versus la 2da columna a través de una poligonal lineal, use textread para leer los datos de este archivo.

3. Grafique:

a. 2 2x y 3

b. = 10 4. Grafique las funciones polares:

a) 1 2 (3 ), 0 : / 20: 2r sen

b) 2 5 , 0 : / 20 : 2r

c) 3 2 ( ), 0 : / 20: 2r sen

5. Use subplot para dividir la ventana en 1x2 para luego graficar en ellas las

siguientes curvas paramétricas (R R2).

1

1

x sen(t),t [0,2 ]

y sen(2t)

1

1

x sen(t),t [0,2 ]

y cos(t)

x y+

Page 58: MLabLOLI

Matlab

58

CAP 6. GRÁFICOS TRIDIMENSIONALES (3-D)

El Matlab posee muchos recursos para visualización de datos en 3D, como trazado de

curvas, trazado de superficies, contornos y gráficos de densidad, permite el control de

colores, sombreados y otras características de los gráficos, también soporta gráficos

animados.

1. CURVAS 3D

plot3(X,Y,Z) gráfica la terna X, Y, Z dándonos así una curva en el espacio.

plot3(X,Y,Z,S) gráfica la terna X, Y, Z dándonos así una curva en el espacio con

las características S igual que plot.

ezplot3(x,y,z) Gráfica en coordenadas paramétricas x = x(t), y = y(t), z = z(t)

sobre el dominio por defecto 0 < t < 2 .

ezplot3(x,y,z ,[tmin,tmax]) Gráfica x=x(t), y=y(t), z=z(t) sobre tmin < t < tmax.

EJEMPLO

>> x=0:0.8:8,y=x.^2,z=sqrt(x) x =

0 0.8000 1.6000 2.4000 3.2000 4.0000 4.8000 5.6000 6.4000 7.2000 8.0000

y =

0 0.6400 2.5600 5.7600 10.2400 16.0000 23.0400 31.3600 40.9600 51.8400 64.0000

z =

0 0.8944 1.2649 1.5492 1.7889 2.0000 2.1909 2.3664 2.5298 2.6833 2.8284

>> plot3(x,y,z)

>> grid

EJEMPLO

>> ezplot3('cos(t)', 't * sin(t)', 'sqrt(t)', [0,6*pi])

Page 59: MLabLOLI

Matlab

59

2. GENERACIÓN DE MALLADOS EN EL PLANO

meshgrid Dados dos vectores xa e ya, conteniendo las coordenadas de los ejes x e y, retorna x e y,

conteniendo la „Malla‟ de coordenadas del mallado en el plano en una región rectangular

correspondiente a x e y.

>>xa=1:3,ya=4:6

xa =

1 2 3

ya =

4 5 6

>>[x, y]=meshgrid(xa,ya)

x =

1 2 3

1 2 3

1 2 3

y =

4 4 4

5 5 5

6 6 6

Explicación:

Como xa = [1 2 3], se tiene en el eje

x 3 puntos y como ya =[4 5 6] en el

eje se tienen 3 puntos, lo que

mediante meshgrid genera un

mallado de nueve puntos los cuales se

encuentran en x e y generados por

meshgrid.

Page 60: MLabLOLI

Matlab

60

EJEMPLO

Generar el mallado cuadrangular indicado, usando meshgrid.

Solución:

>> xa=0:0.5:2,ya=0:0.4:2

xa =

0 0.5000 1.0000 1.5000 2.0000

ya =

0 0.4000 0.8000 1.2000 1.6000 2.0000

>> [x,y]=meshgrid(xa,ya)

x =

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

0 0.5000 1.0000 1.5000 2.0000

y =

0 0 0 0 0

0.4000 0.4000 0.4000 0.4000 0.4000

0.8000 0.8000 0.8000 0.8000 0.8000

1.2000 1.2000 1.2000 1.2000 1.2000

1.6000 1.6000 1.6000 1.6000 1.6000

2.0000 2.0000 2.0000 2.0000 2.0000

Page 61: MLabLOLI

Matlab

61

3. SUPERFICIES

Un gráfico de malla tridimensional viene definido por una función z = f(x,y), de tal

forma que los puntos de la superficie se representan sobre una rejilla, resultado de

levantar los valores de z dados por f(x,y) sobre los correspondientes puntos del plano

(x,y). El aspecto de un gráfico de malla es como una red de pesca, con los puntos de la

superficie sobre los nudos de la red. Realmente, es un gráfico de superficie cuyo grafo

tiene forma de red.

El primer paso para representar una función de dos variables z = f(x,y) mediante su

gráfico de superficie, es utilizar el comando meshgrid, que básicamente define la matriz

de puntos (X,Y) sobre los cuales se evalúa la función de dos variables para hacer su

presentación gráfica. Para representar un gráfico de malla, se utiliza el comando mesh y sus variantes, cuya

sintaxis es la siguiente:

mesh(X,Y,Z) Representa el gráfico de malla de la función z=f(x,y), dibujando las líneas

de la rejilla que componen la malla.

meshz(X,Y,Z) Representa el gráfico de malla de la función z=f(x,y) con una especie de

cortina o telón en la parte inferior

waterfall(X,Y,Z) Representa el gráfico de cascada de la función z=f(x,y).

surf(X,Y,Z) Representa el gráfico de superficie de la función z=f(x,y)

surfl(X,Y,Z) Representa el gráfico de superficie de la función z=f(x,y).

Los gráficos de contorno de curvas de nivel:

contour(Z) Dibuja el gráfico de contorno (curvas de nivel) para la matriz Z. El número

de líneas de contorno a utilizar se elige automáticamente

contour(Z,n) Dibuja el gráfico de contorno (curvas de nivel) para la matriz Z usando n

líneas de contorno

contour(x,y,z,n) Dibuja el gráfico de contorno (curvas de nivel) para la matriz Z usando en

los ejes X e Y el escalado definido por los vectores x e y (n líneas de contorno)

contour3(Z), contour3(Z,n), contour3(x,y,z,n) Dibujan los gráficos de contorno en 3

dimensiones

pcolor(X,Y,Z) Dibuja un gráfico de contorno (curvas de nivel) para la matriz (X,Y,Z)

utilizando una representación basada en densidades de colores. Suele denominarse gráfico de densidad.

Combinaciones del gráfico de la superficie y las curvas de nivel:

meshc(X,Y,Z) Representa el gráfico de malla de la función z=f(x,y) junto con el gráfico

de contorno correspondiente (curvas de nivel proyectadas sobre el plano XY)

surfc(X,Y,Z) Representa el gráfico de superficie de la función z=f(x,y) junto sus curvas

de nivel. EJEMPLO

Graficar el paraboloide 2 2z x y en el dominio [ -5, 5 ]x[ -5, 5 ]

Page 62: MLabLOLI

Matlab

62

>> [x,y]=meshgrid(-5:0.25:5,-5:0.25:5);

>> z=x.^2+y.^2;

>> surf(x,y,z)

EJEMPLO

Graficar usando mesh, surf, contour y contour3 2 2z x y en el dominio [-5, 5]x[-5, 5]

Solución:

>> [x,y]=meshgrid(-5:0.25:5,-5:0.25:5);

>> z=x.^2 – y.^2;

>> subplot(2,2,1);

>> mesh(x,y,z)

>> subplot(2,2,2);

>> surf(x,y,z)

>> subplot(2,2,3);

>> contour(x,y,z);

>> subplot(2,2,4);

>> contour3(x,y,z);

SOMBREADO Y COMBINACIONES DE COLOR

shading Diversos estilos de sombreado para

la superficie.

shading flat

shading interp

shading faceted (por defecto).

colormap Combinación de colores para la

superficie (mapeo de colores). Combinaciones

GRÁFICO DE LA FUNCIÓN PREDETERMINADA PEAKS

peaks es la función de 2 variables de presentación del Matlab, para graficarla use mesh, surf,

pcolor, contour, etc.

z = peaks; z = peaks(n); z = peaks(v); z = peaks(x,y);

[x,y,z] = peaks; [x,y,z] = peaks(n); [x,y,z] = peaks(v);

EJEMPLO

Page 63: MLabLOLI

Matlab

63

>> z=peaks(25); surf(z); colormap(pink)

EJEMPLO

>> z=peaks(20); mesh(z); shading flat; colormap(hot)

4. COORDENADAS CILÍNDRICAS

Graficar el paraboloide 2 2z x y en el dominio rectangular [ -5, 5 ]x[ -5, 5 ] es una

situación donde no están tan claras las propiedades geométricas del paraboloide, en

realidad en este caso es más recomendable graficar usando un dominio circular que por

ejemplo podría ser un circulo de radio 5 centrado en el origen de coordenadas. Surge la

pregunta natural, ¿cómo hacemos un mallado en el dominio circular?, el cual nos servirá

para levantar el paraboloide. La respuesta es sencilla: Solo hay que usar el cambio de

coordenadas cilíndricas a cartesianas.

COORDENADAS CILÍNDRICAS

1 2

cos( )

( ) , [ , ], [ , ]

x r u

y rsen u u r r r

z z

EJEMPLO

Graficar el paraboloide 2 2z x y en el dominio circular de radio 5 y centrado en el

origen de coordenadas.

Page 64: MLabLOLI

Matlab

64

>> [r,u]=meshgrid(0:0.25:5,0:pi/20:2*pi);

>> x=r.*cos(u);

>> y=r.*sin(u);

>> z=x.^2+y.^2;

>> surf(x,y,z)

5. COORDENADAS ESFÉRICAS

COORDENADAS ESFÉRICAS

1 2 1 2

( )cos( )

( ) ( ), [ , ], ,

cos( )

x rsen v u

y rsen v sen u u v

z r v

EJEMPLO

Graficar parte del hemisferio superior

indicado con radio = 5.

>> [u,v]=meshgrid(pi/3:pi/20:7*pi/4,0:pi/20: pi/2);

>> x=5*sin(v).*cos(u);

>> y=5*sin(v).*sin(u);

>> z=5*cos(v);

>> mesh(x,y,z)

Page 65: MLabLOLI

Matlab

65

6. COORDENADAS PARAMÉTRICAS

COORDENADAS PARAMÉTRICAS EN SUPERFICIES

1 2 1 2

( , )

( , ), [ , ], ,

( , )

x x u v

y y u v u u u v v v

z z u v

COORDENADAS PARAMÉTRICAS EN CURVAS 3D

1 2

( )

( ), [ , ]

( )

x x t

y y t t t t

z z t

7. CILINDROS, ESFERAS Y ELIPSOIDES

[x,y,z]= cylinder(R,N) retorna las coordenadas x, y, z necesarias para la

generación de un cilindro con altura 1, radio R y

número de puntos en cada circunferencia de N (20

por default).

cylinder(R,N) idem pero traza solo la grafica.

[x,y,z]= sphere(N) retorna las coordenadas x, y, z necesarias para la

generación de una esfera con radio 1. El número de

ternas es (N+1)x(N+1) (N=20 por default).

sphere(N) idem pero traza solo la grafica.

[x,y,z]= ellipsoid(xc,yc,zc,xr,yr,zr,N) retorna las coordenadas x, y, z necesarias

para la generación de una elipsoide centrada en

(xc,yc,zc) con semiejes xr,yr,zr. El número de

ternas es (N+1)x(N+1) (N=20 por default).

ellipsoid(xc,yc,zc,xr,yr,zr,N) idem pero traza solo la grafica.

Page 66: MLabLOLI

Matlab

66

EJEMPLO

>> cylinder(3,50)

>> sphere

>>ellipsoid(0,0,0,10,5,2)

EJERCICIOS DESARROLLADOS

1. Grafique usando mesh, surf, contour y contour3, 2 2

1 2z x y

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

>> mesh(x,y,x.^2-2*y.^2)

>> surf(x,y,x.^2-2*y.^2)

>> contour(x,y,x.^2-2*y.^2)

>> contour3(x,y,x.^2-2*y.^2)

Page 67: MLabLOLI

Matlab

67

2. Grafique usando surf, 2 ( ) cos( )z sen x y

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

>> z=floor(sin(x))+cos(y);

>> surf(x,y,z)

Page 68: MLabLOLI

Matlab

68

Page 69: MLabLOLI

Matlab

69

EJERCICIOS PROPUESTOS

1. Grafique usando mesh, surf, contour y contour3 3 2 2

2xyz

x y

. Para x = 0.25:0.25:5,

y= 0.25:0.25:5

2. Grafique 2 ( ), 0 : / 20 : 2x y z sen

3. Use subplot para dividir la ventana en 1x2 para luego graficar en cada una de ellas las

siguientes curvas paramétricas (R R3).

i.

( )

, [0,2 ](2 )

2

x sen t

ty sen t

z t

b)

( )

, [0,2 ]cos( )

cos( )

x sen t

ty t

z t

3. Haga la grafica de la parte de la figura con radio = 5.

4. Grafique el Toroide

cos( )(4 cos( ))

( )(4 cos( )) , [0,2 ], 0,2

( )

x t v

y sen t v t v

z sen v

Page 70: MLabLOLI

Matlab

70

CAP 7. PROGRAMACIÓN EN MATLAB

1. OPERADORES LÓGICOS Y RELACIONALES

Las condiciones se construyen con operadores relacionales y lógicos, los cuales son:

Símbolo Operador Relacional Símbolo Operador Lógico

> mayor que ~A Negación (NOT)

< menor que A&B Conjunción (AND)

== igual que A | B Disyunción (OR)

~= diferente que xor(A,B) Disyunción exclusiva (XOR)

<= menor o igual que

>= mayor o igual que

Podemos imponer más de una condición, o condiciones complejas, utilizando los

operadores relacionales (condiciones cuyo resultado es cierto o falso) combinados con

operadores lógicos (sirven como nexo entre varios relacionales).

2. PROGRAMAR EN MATLAB

Al igual que en los lenguajes de alto nivel, MATLAB permite crear programas utilizando

programación estructurada. Para ello cuenta con condicionales, bucles y funciones.

Asimismo utiliza muchos de los recursos de la programación orientada a objetos.

ENTRAR EN EL ENTORNO DE EDICIÓN

MATLAB tiene integrado su propio editor, al que se accede desde el menú “File”,

seleccionando “New”, si vamos a crear un nuevo archivo debemos elegir la opción

“m-file” u “Open” si vamos a un archivo creado previamente.

Pero MATLAB sólo puede ejecutar funciones (archivos- m) que estén en sus librerías

o en el directorio actual; por ello es necesario cambiar al directorio donde salvamos

nuestro archivo antes de poder ejecutarlo. Para ver en que directorio estamos se

emplea la orden “pwd”. Mientras que para cambiar de directorio de trabajo se usa

cd, por ejemplo para cambiar al directorio mio basta poner “cd C:\mio”. También es

Page 71: MLabLOLI

Matlab

71

posible realizar el cambio mediante la opción “Set Path” del menú “File”, pulsando

“Browser”.

SCRIPTS

Un script se define mediante un archivo- m, el cual esta formado por un conjunto de

sentencias pero no tiene la cualidad de ser una función como y = sin(x) que posee

argumentos de salida.

FUNCIONES

Una función se define mediante un archivo- m, cuyo nombre coincide con el de la

función. La primera línea ejecutable debe tener la palabra function. Su sintaxis es

function argumentos_salida= nombre_función (argumentos_entrada) seguida de las instrucciones necesarias. Cuando hay más de un argumento de salida,

éstos deben ir entre corchetes y separados por comas. Por ejemplo:

Comentarios y líneas no procesadas. Los comentarios y líneas que son solo explicatorios y que no desea el usuario que se procese se inician con '%', y anulan la

línea desde la posición del '%' hasta el final de la línea para que no se procese.

Comando return. La función puede finalizarse en cualquier punto utilizando la

instrucción return.

Variables locales. Las variables definidas en la función (salvo los argumentos) son locales.

Variables globales (externas). Para que el valor de una variable sea compartido por

varias funciones de forma externa se emplea la instrucción global, cuya sintaxis es

global variable, y debe aparecer en todas las funciones que la compartan.

IMPLEMENTACIÓN DE UN PROGRAMA

Calcule el valor de la hipotenusa de un triángulo rectángulo a partir de sus dos catetos.

a) Cree un Script.

b) Cree una Función.

Solución:

a) SCRIPT.

Crear el m-archivo

Desde el menú “File”, seleccionamos “New”, y vamos a crear un nuevo archivo

eligiendo la opción “m-file”, luego digitamos el programa como sigue:

Page 72: MLabLOLI

Matlab

72

Con [Ctrl.]+[S] guardarlo como: hipot.m

Ejecución en la ventana de comandos

>> hipot

cateto a=2

cateto b=4

hip =

4.4721

b) FUNCIÓN.

Crear el m-archivo

Con [Ctrl.]+[S] guardarlo como: hipotenusa.m

Nótese que este nombre del archivo es el mismo que de la función.

Page 73: MLabLOLI

Matlab

73

Ejecución en la ventana de comandos >> h= hipotenusa(3,4)

h =

5

En resumen:

IMPLEMENTACIÓN DEL HELP PARA EL PROGRAMA

Para implementar la ayuda en línea se usan las primeras líneas del fichero para

comentarios (iniciándolas con '%'), explicando cómo debe usarse la función y sus

argumentos (tanto de entrada como de salida). Así, dicha definición será visible mediante

la instrucción help nomfuncion.

EJEMPLO

Construyo el programa que calcule el perímetro del triángulo, implementando también

su ayuda.

PROGRAMAS EN MATLAB

Script Función

>> hipot

cateto a=2

cateto b=4

hip =

4.4721

>> h= hipotenusa(3,4)

h =

5

Ejecución en la ventana de

comandos

Archivos nombre.m

Page 74: MLabLOLI

Matlab

74

.

Muestro la ayuda en línea de la función perimtri, digitando en la ventana de comandos:

Ejecuto la función perimtri cuando los lados son 2, 3 y 4.

>> perim = perimtri(2,3,4)

perim =

9

4. ESTRUCTURAS DE CONTROL CONDICIONADAS

SENTENCIA if

Permite seleccionar entre dos conjuntos alternativos de instrucciones dependiendo de que

se verifique una condición lógica (cuyo resultado es cierto o falso). Su sintaxis es de la

forma:

if condición

Instrucciones que deben ejecutarse si la condición es

verdadera

else

Instrucciones a ejecutar si la condición es falsa

end

Page 75: MLabLOLI

Matlab

75

Cuando no hay instrucciones que ejecutar si la condición

no se cumple, la sintaxis anterior se reduce a

if condición

Instrucciones que deben ejecutarse

end

Al contrario, cuando se encadenan varios bloques alternativos, la sintaxis queda como: if condición_1

Instrucciones a ejecutar cuando se verifica la condición 1

elseif condición_2

Instrucciones a ejecutar cuando no se verifica la condición 1 y sí la condición_2

elseif condición_3

Instrucciones a ejecutar cuando no se verifica la condición 1- condición 2 y sí la condición_3

else

Instrucciones a ejecutar cuando no se verifican las condiciones anteriores

end

INSTRUCCIONES PARA ARGUMENTOS DE ENTRADA Y SALIDA

Una función utiliza las siguientes instrucciones para verificar el número de argumentos:

nargin número de argumentos de entrada que el usuario ha pasado a la función.

nargout número de argumentos de salida que el usuario desea recibir de la función

LA FUNCIÓN error.

Muestra mensajes de error.

error('message') Muestra un mensaje de error y finaliza el programa.

error('message',a1,a2, ...) Muestra un mensaje de error conteniendo formatos similar

al printf del c++ o al fprintf del Matlab y finaliza el programa.

EJEMPLO

>> error('Valores Inconsistentes')

??? Valores Inconsistentes

EJEMPLO

El siguiente programa calcula el perímetro de un triangulo e indica error en la función

perimtri(a,b,c) cuando no hay 3 argumentos (lados).

Page 76: MLabLOLI

Matlab

76

Solución:

Creación de la función.

Grabar como: perimtri.m

Ejecución en la ventana de comandos

>> perim = perimtri(2,3,4)

perim =

9

>> perim = perimtri(2,3)

??? Error using ==> perimtri

Número de argumentos incorrecto, debe introducir 3 argumentos

EJEMPLO

El siguiente programa analiza si son iguales o diferentes las matrices, vectores o

números.

Ejecución:

>> A=[1 2;3 4],B=[5 6;7 8] A = 1 2 3 4 B = 5 6 7 8 >> compara(A,B) ans = distintas

Pero también se podría haber usado:

if A == B, 'iguales' else, 'distintas' end

EJEMPLO

El siguiente programa analiza el tipo de triángulo que se tiene, dados sus tres lados, de

acuerdo con el siguiente algoritmo

a b

c

Page 77: MLabLOLI

Matlab

77

Entrada: coeficientes a, b y c (lados del triángulo)

Salida: tipo de triángulo

Paso 1: Verificar el número y coherencia de los argumentos

Paso 2: Ordenar los lados para comprobar si pueden formar un triángulo

Paso 3: SI la suma de dos de ellos es igual al tercero: Triángulo llano

Paso 4: SI los tres son iguales: Triángulo Equilátero

Paso 5: SI los dos son iguales: Triángulo Isósceles

Paso 6: SI los tres son distintos: Triángulo Escaleno

Paso 7: SI verifican el Teorema de Pitágoras: idem + rectángulo

Crear la función result=triangulo(a,b,c) en el Matlab que realice esta acción.

Solución:

Creación de la función.

Desde el menú “File”, seleccionamos “New”, y vamos a crear un nuevo archivo

eligiendo la opción “m-file”, luego digitamos el programa como sigue:

function r=triangulo(a,b,c);

if nargin ~= 3

error('Número de argumentos incorrecto, debe ser 3 datos');

end

x=sort([a b c]);

if ~isempty(find(x<0))

error('Valores inconsistentes de algún lado');

end

if (x(3)>x(1)+x(2))

error('No forman un triangulo');

elseif (x(3)==x(1)+x(2))

r='Triangulo Llano';

else

if (x(1)==x(2) & x(2)==x(3))

r='Triangulo Equilatero';

return;

elseif (x(1)==x(2) | x(2)==x(3))

r='Triangulo Isosceles';

else

r='Triangulo Escaleno';

end

if (hipotenusa(x(1),x(2))==x(3))

r=[r,' rectangulo'];

end

end

Page 78: MLabLOLI

Matlab

78

Grabarla como: triangulo.m

Ejecución en la ventana de comandos >> result = triangulo(3,4,5)

result =

Triangulo Escaleno rectangulo

>> r=triangulo(sqrt(2), sqrt(2), 2)

r =

Triangulo Isosceles rectangulo

>> x=10*rand(1),y=10*rand(1),z=10*rand(1)

x =

6.0684

y =

4.8598

z =

8.9130

>> triangulo(x,y,z)

ans =

Triangulo Escaleno

>> x=1.2105, y=4.5075, z=7.1588

x =

1.2105

y =

4.5075

z =

7.1588

>> r=triangulo(x, y, z)

??? Error using ==> triangulo

No forman un triangulo

Si queremos verificar la cantidad de argumentos de entrada y salida de la función

triangulo.m: >> nargin('triangulo')

ans =

3

>> nargout('triangulo')

ans =

1

SENTENCIA switch

Page 79: MLabLOLI

Matlab

79

Permite seleccionar entre múltiples posibilidades dependiendo de que la expresión se

encuentre dentro de los conjuntos definidos por case. Su sintaxis es de la forma:

switch expresion % (escalar o cadena)

case conjunto1

sentencias % se ejecutan si expresion conjunto1

case conjunto2

sentencias % se ejecutan si expresion conjunto2

:

otherwise sentencias % se ejecutan si expresion no esta en ningún conjunto

end

Nótese que los conjuntos se delimitan con llaves y los elementos de este se separan por

comas tal como , , ,...a b c , si el conjunto solo tiene un elemento no necesita colocársele

llaves.

EJEMPLO

El siguiente programa determina la condición y tipo de estudiante según su promedio de

acuerdo a la siguiente tabla.

Promedio Condición Tipo 0..10

11..13

14..16

17..20

Desaprobado

Aprobado

Aprobado

Aprobado

Malo

Regular

Bueno

Excelente

Creando la función

Page 80: MLabLOLI

Matlab

80

Ejecución en la ventana de comandos:

>> [cond,tipo]=reporte(14)

cond =

Aprobado

tipo =

Bueno

>> [cond,tipo]=reporte(7)

cond =

Desaprobado

tipo =

Malo

>> [cond,tipo]=reporte(10.7)

??? Error using ==> reporte

Incorrecto, debe ser un numero entero

>> [cond,tipo]=reporte(24)

??? Error using ==> reporte

Nota incorrecta, debe ser de 0 .. 20

NOTA

Una variante donde es posible entrar notas decimales y que el programa lo redondee y

por ejemplo si Ud. Introduce 10.5 daría de resultado Aprobado – Regular, seria con el

siguiente código:

function [cond,tipo] = reporte(n);

if nargin ~= 1, error('Numero de argumentos incorrecto') ,end

if (n<0 | n>20), error('Nota incorrecta, debe ser de 0 .. 20') ,end

cond='Aprobado';

tipo='Malo';

n=round(n); %código que redondea la nota switch n

case {0,1,2,3,4,5,6,7,8,9,10}

cond='Desaprobado';

case {11,12,13}

tipo='Regular';

case {14,15,16}

tipo='Bueno';

case {17,18,19,20}

tipo='Excelente';

end

Así si se ejecuta en la ventana de comandos, se tendrá: >> [c,t]=reporte(10.5)

c =

Aprobado

t =

Regular

>>[c,t]=reporte(13.7)

c =

Aprobado

t =

Bueno

Page 81: MLabLOLI

Matlab

81

SENTENCIA try … catch

La sentencia try … catch … end permite gestionar los errores que se producen en

tiempo de ejecución. Su sintaxis es:

try

Instrucciones1

catch

Instrucciones2

end

En el caso de que durante la ejecución del bloque Instrucciones1 se produzca un error, el

control de la ejecución se transfiere al bloque Instrucciones2. Si la ejecución del bloque

Instrucciones1 transcurriera normalmente, Instrucciones2 no se ejecutaría.

La instrucción lasterr se utiliza para ver la causa del último error, es decir lasterr

devuelve una cadena de caracteres con el mensaje correspondiente al último error que se

ha producido.

EJEMPLO

Programa que adivina la edad.

Ejecución en la ventana de comandos: >> adivina

¿Qué edad tengo?

Primera oportunidad

edad=15

¡Felicitaciones! ... Adivinaste en la primera

>> adivina

¿Qué edad tengo?

Primera oportunidad

edad=14

Segunda oportunidad

edad=15

¡Felicitaciones! ... Adivinaste en la segunda

>> adivina

¿Qué edad tengo?

>> lasterr

ans =

Page 82: MLabLOLI

Matlab

82

Primera oportunidad

edad=14

Segunda oportunidad

edad=16

No adivinaste ... fue tu última oportunidad

Error using ==> adivina

je je

5. APROXIMACIONES Y PRECISIÓN EN LOS CÁLCULOS

Matlab representa los resultados con exactitud, pero aunque internamente siempre trabaja

con cálculos exactos para no arrastrar errores de redondeo, pueden habilitarse diferentes

formatos de representación aproximada, que en ocasiones facilitan la interpretación de

los resultados. A continuación se citan los comandos que permiten aproximaciones

numéricas.

format long Ofrece los resultados con 16 cifras decimales.

format short Ofrece los resultados con 4 cifras decimales. Se trata del formato por defecto de Matlab.

format long e Ofrece los resultados con 16 decimales más potencias de 10.

format short e Ofrece los resultados con 4 decimales más potencias de 10.

format bank Ofrece los resultados con 2 cifras decimales.

format rat Ofrece los resultados en forma de número racional aproximado.

format + Ofrece el signo de los resultados (+, - o 0).

format hex Ofrece los resultados en el sistema hexadecimal.

vpa ‘operaciones’ n Ofrece el resultado de las operaciones con n dígitos decimales exactos.

numeric(‘expr’) Ofrece el valor de la expresión de forma numérica aproximada según el formato actual

activo.

digits(n) Ofrece los resultados con n dígitos exactos.

SISTEMAS DE NUMERACIÓN

Matlab permite trabajar con sistemas de numeración de base cualquiera, siempre y

cuando se disponga del Toolbox extendido de matemáticas simbólica. Además, permite

expresar los números en las diferentes bases. Las funciones de trabajo con sistemas de

numeración en diferentes bases que implementa Matlab son las siguientes:

dec2bin Convierte en número decimal especificado a base 2 (binaria)

dec2hex Convierte el número decimal especificado a base 16 (hexadecimal)

dec2base Convierte el número decimal especificado a la base indicada

bin2dec Convierte el número binario especificado a base decimal

hex2dec Convierte el número hexadecimal especificado a base decimal

base2dec Convierte el número de la base especificada a base decimal

EJEMPLO FORMATO REPRESENTACIÓN

"formato largo" de 3 » sqrt(3);format long; ans

"formato racional" de 3 » format rat; ans

"con 10 cifras decimales" de 3 » vpa(ans,10)

"con 100 cifras decimales" de » vpa 'pi' 100

"con 20 cifras decimales" de » digits(20); vpa '173/13'

"Representación binaria" de 1234 » dec2bin(1234)

"Representación en base 10" de un valor en base 16 » base2dec(‟BF34A‟,16)

EJEMPLO

Page 83: MLabLOLI

Matlab

83

Para ver el formato actual usar get(0,'format') >> format bank;22/3

ans =

7.33

>> get(0,'format')

ans =

bank

VARIABLES ESPECIALES

En Matlab existen variables de uso común, cuyo valor viene ya preasignado.

pi 3.1415926535897932385…

i ó j Unidad imaginaria ( 1 )

inf Infinito, por ejemplo 1/0

eps Menor valor positivo que

sumado a la unidad tiene

representación diferente a 1.

Indica la distancia desde 1.0 al

siguiente número en coma

flotante.

NaN Indeterminación (Not a Number, por ejemplo 0/0)

realmin El menor número real positivo utilizable

realmax El mayor número real positivo utilizable

ans Variable creada automáticamente para representar

el último resultado procesado que no se ha

asignado a ninguna variable.

De igual forma, se puede interrogar al sistema sobre sus características o las

características de las variables que estamos manejando

finite(x) Devuelve 1 si x es finito, y cero en otro

caso isnan(x) Da 1 si x es indeterminado y cero en

otro caso

version Devuelve la versión actual de Matlab

clock Devuelve una lista con los 6 elementos

[año mes dia hora minutos segundos]

date Devuelve la fecha del calendario actual

diary Guarda el texto de la sesión actual de

Matlab

ver Da información sobre el programa y

sus Toolbox

isinf(x) Da 1 si x es infinito o – infinito, y cero

en otro caso

computer Devuelve el tipo de computador

why Devuelve un mensaje sucinto

whatsnew Informa acerca de características nueva

de Matlab

lasterr Devuelve el último mensaje de error

demo Ejecuta demostraciones sobre Matlab

pack Consolida el espacio de trabajo en

memoria

info Da información acerca de Matlab

hostid Identifica el número del host servidor

6. BUCLES

BUCLES SIMPLES: SENTENCIA for

Permite repetir un número determinado de veces un conjunto de instrucciones. Su

sintaxis es la siguiente:

Page 84: MLabLOLI

Matlab

84

for var = vector Instrucciones que deben ejecutarse end

El argumento vector puede ser efectivamente un vector, en cuyo caso la variable va

tomando los valores de las componentes del vector, o una estructura de la

forma inicio : incremento : fin, en cuyo caso la variable va tomando valores desde inicio

hasta fin con un determinado incremento. Si no se indica el valor del incremento, este se

toma como unidad. El número de veces que se repite el bucle viene dado por la

dimensión del vector o por la expresión 1fin inicio

nincremento

.

EJEMPLO

Calcular con for la suma M = 1(4)(2) + 2(5)(4) + 3(6)(6) + . . .+ 20(23)(40).

Solución:

Expresándolo a través del símbolo de sumatoria 20

1

( 3)(2 )k

M k k k

Creando el script. Guardarlo como:suma1.m

Ejecución en la ventana de comandos:

>> suma1

s =

105420

También el for se puede usar con una matriz

for var = matriz Instrucciones que deben ejecutarse end

En este caso la variable va pasando columna por columna de la matriz.

EJEMPLO

Page 85: MLabLOLI

Matlab

85

Hacer tres gráficos en tres ventanas de gráficos usando for.

Solución:

Creando el script. Guardarlo como: ploteos.m

C:\matlab7\work\ploteos.m

x1=[0:0.1:5]'; % 51 elementos

x2=[-2.5:0.1:2.5]'; % 51 elementos

x3=[-pi:pi/25:pi]'; % 51 elementos

A=[x1 x2 x3];

f=1;

for k=A

figure(f);

plot(k,sin(k));

f=f+1;

end

Ejecución en la ventana de comandos:

>> ploteos

Page 86: MLabLOLI

Matlab

86

BUCLES CONDICIONALES: SENTENCIA while

Permite repetir un conjunto de instrucciones, en tanto se satisfaga una condición lógica.

Su sintaxis es la siguiente:

while condición Instrucciones que deben ejecutarse mientras la condición sea cierta. end

EJEMPLO

Implemente la función elevapol(p,n) la cual eleve el polinomio “p” al exponente “n”.

C:\matlab7\work\elevapol.m

function y=elevapol(p,n);

%función elevapol(p,n) la cual eleva el polinomio 'p' al exponente 'n'

pro=1;

i=1;

while i<=n

pro=conv(pro,p);

i=i+1;

end

y=pro;

Ejecución:

Si queremos elevar 1x al exponente 4, ejecutamos en la ventana de comandos

Page 87: MLabLOLI

Matlab

87

>> p=[1 1] %definición del polinomio

p =

1 1

>> elevapol(p,4)

ans =

1 4 6 4 1

Si queremos elevar 2 2x x i al exponente 3, ejecutamos en la ventana de comandos

>> q=[1,-2,-i] %definición del polinomio

q =

1.0000 -2.0000 0 - 1.0000i

>> elevapol(q,3)

ans =

Columns 1 through 4

1.0000 -6.0000 12.0000 - 3.0000i -8.0000 +12.0000i

Columns 5 through 7

-3.0000 -12.0000i 6.0000 0 + 1.0000i

BREAK Y CONTINUE

La instrucción continue pasa el control a la iteración siguiente en el bucle for o while es

decir ignora las instrucciones que siguen al continue en el cuerpo del bucle.

La instrucción break finaliza la ejecución del bucle for o while y luego el programa

sigue fuera del bucle. Hay muchos usos para la instrucción break, uno de los bastante

usados es para salir de un bucle infinito, como por ejemplo

while (1)

…..

if (condicion)

break;

end

……

end

while (condición)

…..

if (condicion)

continue;

end

……

end

EJEMPLO

Crear una matriz aleatoria de tamaño aleatorio y dar la suma de sus columnas.

Se crea la función de suma aleatoria [A,suma]=srandom. Se graba como: srandom.m

function [A,s]=srandom;

n=1;A=[ ];s=sum(A);

while (1)

Bucle

infinito

Salida del

bucle

Bucle

infinito Hasta el

final

Page 88: MLabLOLI

Matlab

88

if (s>4)

break;

end

A=rand(n);

s=sum(A);

n=n+1;

end

Ejecución en la ventana de comandos: >> [A, s] = srandom

A =

0.8084 0.1506 0.1401 0.9466 0.1971 0.4071 0.4224

0.3179 0.7037 0.2376 0.8863 0.1945 0.8323 0.4557

0.3486 0.0738 0.8742 0.5377 0.5504 0.1927 0.6174

0.2536 0.0525 0.8607 0.8132 0.0184 0.6799 0.7427

0.9215 0.5236 0.6516 0.2425 0.1610 0.9183 0.9960

0.7035 0.6495 0.8741 0.3639 0.5352 0.0462 0.9279

0.7062 0.2334 0.9637 0.6775 0.4281 0.8809 0.0191

s =

4.0596 2.3872 4.6021 4.4677 2.0847 3.9574 4.1812

7. SUBFUNCIONES

Las funciones definidas mediante m – archivos pueden contener código para más de una

función. La función en el m – archivo se denomina función primaria, que es

precisamente la función que invoca el m – archivo. Pero adicionalmente pueden haber

subfunciones colgando de la función primaria y que sólo son visibles para dicha función

primaria o para otra subfunción dentro del mismo m – archivo. Cada subfunción

comienza con su propia línea de definición de función.

La estructura de un programa con subfunciones es como sigue:

function A=funprincipal(a,b,…);

function M1=subfun1(x1,y1,…);

function M2=subfun2(x2,y2,…);

.

:

function Mn=subfunn(xn,yn,…);

Page 89: MLabLOLI

Matlab

89

EJEMPLO

Implementación del programa que calcula el promedio de una colección de datos, es

decir:

[1] Media Aritmética

[2] Media Geométrica

[3] Media Armónica

C:\MATLAB7\WORK\medias.m

function r=medias(x);

n=length(x); %tamaño del vector

if ~isempty(find(x<0)) %validación de datos

error('No puede haber datos negativos');

end

disp(' PROMEDIOS ');

disp(' ========== ');

disp('[1] Media Aritmética ');

disp('[2] Media Geométrica ');

disp('[3] Media Armónica ');

disp('[4] Salir ');

op = input('Ingrese opcion ==> ');

switch (op)

case 1

disp('La Media Aritmética es:');

r=ma(x,n);

case 2

disp('La Media Geométrica es:');

r=mg(x,n);

case 3

disp('La Media Armónica es:');

r=mh(x,n);

case 4

r='Fin';return;

end

function rr=ma(x,n);

rr=sum(x)/n;

function rr=mg(x,n);

rr=prod(x)^(1/n);

function rr=mh(x,n);

rr=n/sum(1./x);

Ejecución:

>> x=[4,7,10,13] >> x=[2 -1 3 4]

Page 90: MLabLOLI

Matlab

90

x =

4 7 10 13

>> medias(x)

PROMEDIOS

=========

[1] Media Aritmética

[2] Media Geométrica

[3] Media Armónica

[4] Salir

Ingrese opcion:2

La Media Geométrica es:

ans =

7.7674

x =

2 -1 3 4

>> medias(x)

??? Error using ==> medias

No puede haber datos negativos

MANEJO DE FORMATOS DE SALIDA

USO DE fprintf PARA SALIDAS EN LA VENTANA DE COMANDOS

Las salidas de información en la ventana de comandos se pueden hacer mediante el comando

disp(dato), sin embargo este comando no tiene mucha versatilidad en el manejo de formatos de salida

especialmente con información numérica. Es por esto que podemos emplear el comando

fprintf(‘formato’,arg1,arg2,arg3,....) para sacar una presentación más adecuada en la ventana de

comandos. La ventaja es que dentro del ‘formato’ se pueden incluir los caracteres especiales del lenguaje

de programación C++

Caracteres especiales del C++ y el Matlab:

‘%c’ para caracter

‘%d’ para número entero

‘%f’ para número real

‘%s’ para cadena

‘%u’ para número entero positivo

‘%x’ para salida hexadecimal

‘%o’ para salida octal

‘\n’ para salto de línea

‘\t’ para tabulación

‘\b’ para retroceso (backspace)

‘\\’ para imprimir ‘\’

‘%%’ para imprimir ‘%’

EJEMPLO

>> N=14;nom='Carola';fprintf('El promedio de %s es de %d',nom,N)

El promedio de Carola es de 14

>> N=14;fprintf('%d en el sistema octal es %o',N,N)

14 en el sistema octal es 16

>> ape='Hermenegildo';nom='Bush';fprintf('mi apellido es %s\nmi nombre es %s',ape,nom)

mi apellido es Hermenegildo

mi nombre es Bush

>> fprintf('La tercera parte de 22 es %0.2f',22/3)

La tercera parte de 22 es 7.33

>> fprintf('La tercera parte de 22 es %10.2f',22/3)

Page 91: MLabLOLI

Matlab

91

La tercera parte de 22 es 7.33

EJEMPLO

Imprimir 10 números aleatorios y sus cuadrados.

Ejecución en la ventana de comandos

>> cuadra

k x x^2

-----------------------------

1 1.365187 1.863737

2 0.117567 0.013822

3 8.938980 79.905357

4 1.991381 3.965597

5 2.987230 8.923544

6 6.614426 43.750628

7 2.844086 8.088825

8 4.692243 22.017143

9 0.647811 0.419659

10 9.883349 97.680595

Page 92: MLabLOLI

Matlab

92

EJERCICIOS

SCRIPTS, FUNCIONES, PROGRAMACIÓN, M-FILES

1. Sea A una matriz de mxn y B una matriz de pxq. Implemente la función bloque(A,B)

la cual genere la matriz bloque diagonal (m+p)x(n+q).

2. Crear la función (programa) r = mmedad(n) que al ingresar la edad de la persona „n‟,

determine si es 1=„mayor de edad‟ o 0=„menor de edad‟ sin usar el comando if. Por

ejemplo cuando ejecute en la ventana de comandos:

>>r = mmedad(17)

debe dar:

r =

0

3. Escribir una función (programa) para calcular el mayor y menor lado de un triángulo

sin usar la sentencia if.

4. Implemente la función polysum(p,q) la cual sume los dos polinomios.

5. Implemente la función antidiag(A) la cual extraiga la antidiagonal de la matriz A.

Dicha función deberá mostrar un mensaje de error en caso que la matriz A no sea

cuadrada.

6. Implemente la función sgeo(x, n) para calcular la suma de los primeros n términos de

la serie 2 311 ...

1x x x

x

. Validar para que solo acepte valores de x tal que

1x .

7. Implemente una función aitken(n) que genere n términos de la sucesión definida por

2

1

2 1

( )

2

n nn n

n n n

x xy x

x x x

Siendo 1 1( ), ( ) 2 , 0.5x

n nx g x g x x