Clase 2: Operaciones con matrices en Matlabhamiltongalindo.com/uploads/14528058461.pdf · un...

37
Clase 2: Operaciones con matrices en Matlab Hamilton Galindo UP Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 1 / 37

Transcript of Clase 2: Operaciones con matrices en Matlabhamiltongalindo.com/uploads/14528058461.pdf · un...

Clase 2: Operaciones con matrices en Matlab

Hamilton Galindo

UP

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 1 / 37

Outline

1 Definicion de matrices desde teclado

2 Operaciones con matrices

3 Tipos de datosDatos numericosDatos logicosCaracteres y cadena de caracteresEstructurasVectores o matrices de celdas

4 Variables y expresiones matriciales

5 Otras formas de definir matrices

6 Operadores relacionales

7 Operadores logicos

8 Ejercicios

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 2 / 37

Definicion de matrices desde teclado I

Las matrices y vectores son variables que tienen nombres.Sugerencia: utilizar letras mayusculas para matrices y letras minusculaspara vectores y escalares.

1 Las matrices se definen por filas y se usan conchetes [...] paradefinirlas.

2 vector fila: cuando los numeros estan separados por espacios enblanco o comas.

Vector fila

Fila = [1 2 3]

3 vector columna: cuando los numeros estan separados por enters opunto y coma.

Vector columna

Columna = [1; 2; 3]

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 3 / 37

Definicion de matrices desde teclado II

4 Los elementos de una misma fila estan separados por espacios enblanco o comas, mientras que las filas estan separadas por unapulsacion enter o por punto y coma.

Matriz

A = [Fila1 ; Fila2]

A = [1 2 3; 4 5 6]

Se obtiene:

A =

[1 2 34 5 6

]5 Cuando “el resultado de una operacion” no ha sido asignado a una

variable, MATLAB utiliza un nombre de variable por defecto (ans, deanswer), que contiene el resultado de la ultima operacion.

6 Para acceder a los elementos de un vector se coloca el nombre delvector seguido de la ubicacion entre parentesis: v(3); muestra el tercerelemento del vector “v”.

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 4 / 37

Definicion de matrices desde teclado III

7 Para una matriz: A(i,j) muestra el elemento que se encuentra en lai-esima fila y en la j-esima columna de la matriz “A”.

8 Importante: las matrices se almacenan por columnas (aunque seintroduzcan por filas), entonces se puede acceder a cualquierelemento de una matriz con un solo subındice

A =

1 2 34 5 67 8 9

A(3, 2) = A(6) = 8

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 5 / 37

Operaciones con matrices

En Matlab existe tres principales operaciones con matrices:

operadores aritmeticos

operadores para la solucion de sistema de ecuaciones lineales

operadores elemento a elemento

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 6 / 37

Operadores aritmeticos IOperaciones con matrices

+ suma- resta* multiplicacion’ transpuestaˆ potenciacion/ division derecha

1 Matriz y escalar: los operadores anteriores se pueden aplicar entreun escalar y una matriz; en este caso, la operacion con el escalar seaplica a cada uno de los elementos de la matriz.

2 Division derecha: se usa para dividir por un escalar todos loselementos de una matriz o vector.

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 7 / 37

Operadores para la solucion de sistema de ecuaciones lineales IOperaciones con matrices

1 Division izquierda (\): este operador se usa para la solucion desistema de ecuaciones lineales como el siguiente:

Ax = b

Donde, x y b son vectores columna y A es una matriz invertible.

2 La solucion de este sistema se puede escribir en dos formas:

x = inv(A) ∗ b

x = A\b3 Este operador equivale a pre-multiplicar por la inversa de la matriz.

4 Este operador es aplicable aunque la matriz no tenga inversa e inclusono sea cuadrada, en cuyo caso la solucion se obtiene por medio delmetodo de mınimos cuadrados.

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 8 / 37

Operadores para la solucion de sistema de ecuaciones lineales IIOperaciones con matrices

5 Costo del operador: Matlab debe de emplear cierto tiempo endeterminar las caracterısticas de la matriz (triangular, simetrica, etc.).

6 Tambien se puede usar el operador division derecha es el siguientecaso:

xA = b

x = b ∗ inv(A)

x = A/b

7 En este caso el operador division derecha equivale a post-multiplicarpor la inversa de la matriz.

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 9 / 37

Operadores elemento a elementoOperaciones con matrices

.* producto elemento a elemento

./ y .\ division derecha-izquierda elemento a elemento

.ˆ potenciacion elemento a elemento

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 10 / 37

Tipos de datos

Lógico

(logical)

Texto

(char)

Numérico

(numeric)

Vector de celdas

(cell)

Estructura

(struct) Enteros

Sola

precisión

(single)

Doble

precisión

(double)

Punto

flotante

Referencia de

función

(function handle)

Contenedor

heterogéneo

Con signo Sin signo

(int8) <=8 bit=> (uint8)

(int16) <=16 bit=> (uint16)

(int32) <=32 bit=> (uint32)

(int64) <=64 bit=> (uint64)

15 TIPOS DE DATO

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 11 / 37

Datos numericos I

Por default Matlab almacena los valores numericos como punto flotantede doble precision.[1] Enteros:

Matlab dispone de 8 tipos de datos para numeros enteros: 4 consigno y 4 sin signo.

Con signo: permite trabajar con numeros negativos y positivos, peroel rango de numeros (positivos) que considera es limitado encomparacion con los enteros sin signo. Esto se debe a que el enterocon signo utiliza un bite para el signo.

Sin signo: utilizan un mayor rango de numeros que los enteros consigno, pero esta limitado a valores positivos y al cero.

[2] Punto flotante:

Es una forma de representar los numeros con decimales (no enteros)

Bajo esta forma un numero se representa mediante un exponente yuna mantisa

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 12 / 37

Datos numericos II

x = 23456.789En Matlab: x = 2.3457e+004

Donde: 2.3457 es la mantisa y “e” es la base (igual a 10).

Precision simple (single): el formato para los numeros de precisionsimple es de 32 bits:

Signo Exp. con signo Mantisa1 bit 8 bits 23 bits

Precision doble (double): el formato para los numeros de precisiondoble es de 64 bits:

Signo Exp. con signo Mantisa1 bit 11 bits 52 bits

Infinito: Matlab utiliza inf y -inf para representar el infinito positivo ynegativo.

NaN: con esta expresion Matlab representa valores que no sonnumeros reales ni complejos. NaN significa Not a Number (no es unanumero).

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 13 / 37

Datos logicos

Los datos logicos son aquellos que resultan de la comparacion de dosexpresiones numericas o de otro tipo.

Su resultado es 1 (verdadero) o 0 (falso).

El resultado puede ser un escalar, vector o matriz.

Ejemplo

[30 40 50 60] > 40ans=

0 0 1 1

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 14 / 37

Cadena de caracteres I

1 Caracterısticas:I Los caracteres de una cadena se almacenan en un vector, con un

caracter por elemento.I Las cadenas de caracteres van entre apostrofos o comillas simples

x = ‘miguel‘

I Una matriz de caracteres es una matriz cuyos elementos soncaracteres, o una matriz cuyas filas son cadenas de caracteres.

z = [‘miguel‘; ‘javier‘; ‘raquel‘]

z =migueljavierraquel

Donde “z” es una matriz de 3x6I Todas las filas de una matriz de caracteres debe de tener el mismo

numero de elementos, las filas mas cortas se completan con espacios enblanco.

z = [‘miguel‘; ‘juan ‘; ‘raquel‘]

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 15 / 37

Cadena de caracteres II

donde se ha dejado 2 espacios en blanco en “juan”

2 Funciones para operar con cadenas de caracteres:char(v) convierte un vector de numeros v en una cadena de carac-

tereschar(c1,c2) crea una matriz de caracteres, completando con blancos las

cadenas mas cortasdeblank(c) elimina los blancos al final de una cadena de caracteresdisp(c) imprime el texto contenido en la variable cstrcmp(c1,c2) comparacion de cadenas. Si las cadenas son iguales devuelve

un uno, y si nolo son, devuelve un ceros=[s,‘ y mas‘] concatena cadenas, anadiendo la segunda a continuacion de

la primera

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 16 / 37

Estructuras I

1 Definicion:Es una agrupacion de diferentes tipos de datos bajo un mismonombre. Estos datos se llaman campos (miembros). Una estructuraes un nuevo tipo de dato, del que luego se pueden crear muchasvariables (objetos).

2 Creacion:Se desea crear una estructura alumno con dos campos: nombre yedad

I Directa:

alumno.nombre = ‘Miguel‘

alumno.edad = 24

Se accede a los campos de una estructura por medio del operadorpunto (.), que une el nombre de la estructura y el nombre del campo(por ejemplo: alumno.nombre).Al escribir alumno en el command windows se obtiene:

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 17 / 37

Estructuras II

>> alumnonombre: ‘Miguel‘

edad: 24

I Usando una funcion:

alumno = struct(‘nombre‘,‘Miguel‘,‘edad‘,24)

3 Vectores y matrices de estructuras:Para crear un vector de estructuras se hace lo siguiente:

alumno(10) = struct(‘Nombre‘,‘‘,‘Edad‘,‘‘)

Esto crea un vector de 10 estructuras tipo alumno. Para acceder ala estructura cinco se escribe alumno(5).Para llenar el campo “nombre” de la estructura cinco:alumno(5).nombre = Miguel

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 18 / 37

Estructuras III

4 Funciones para operar con estructuras:fieldnames() devuelve un vector de celdas con cadenas de carac-

teres que recogen los nombres de los campos de unaestructura

isfield(ST,s) permite saber si la cadena s es un campo de unaestructura ST

isstruct(ST) permite saber si ST es o no una estructurarmfield(ST,s) elimina el campo s de la estructura STgetfield(ST,s) devuelve el valor del campo especificado. Si la es-

tructura es un array hay que pasarle los ındices comocell array (entre llaves {}) como segundo argumento

setfield(ST,s,v) da el valor v al campo s de la estructura ST. Si la es-tructura es un array, hay que pasarle los ındices comocell array (entre llaves {}) como segundo argumento

5 Estructuras anidadas:Una estructura anidada es una estructura con campos que son otrasestructuras.

clase=struct(’curso’,’primero’,’grupo’,‘A’,‘alumno’,

struct(‘nombre’,’Juan’, ‘edad’, 19))

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 19 / 37

Estructuras IV

Para acceder a los campos de la estructura mas interna se utiliza dosveces el operador punto (.), como puede verse en el ejemplo, en el quela estructura clase contiene un campo que es una estructura alumno.

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 20 / 37

Vectores o matrices de celdas ICell Arrays

1 Definicion:Es un vector (matriz) cuyos elementos son cada uno de ellos unavariable de cualquier tipo. En un vector de celdas, el primer elementopuede ser un numero, el segundo una matriz, el tercero unaestructura, etc.

2 Creacion:Un vector de celdas se crea usando llaves {}. Es importante que elnombre del vector de celda no haya sido utilizado anteriormente porotra variable, sino Matlab arroja un error.Ejemplo: a continuacion se crea el vector de celda “vc”.

I Primer elemento: un vector

vc(1) = {[1 2 3]} o vc{1} = [1 2 3]I Segundo elemento: un cadena de caracteres

vc(2) = {‘mi nombre’} o vc{2} = ‘mi nombre’I Tercer elemento: una matriz

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 21 / 37

Vectores o matrices de celdas IICell Arrays

vc(3) = {eye(3)} o vc{3} = eye(3)

Tambien se puede crear “vc” de forma directa:

vc = { [1 2 3] ‘mi nombre‘ eye(3)}3 Funciones para operar con vectores (matrices) de celdas:

MATLAB dispone de las siguientes funciones para trabajar con cellarrays (ca):cell(m,n) crea un cell array vacıo de m filas y n columnascelldisp(ca) muestra el contenido de todas las celdas de cacellplot(ca) muestra una representacion grafica de las distintas

celdasiscell(ca) indica si ca es un vector de celdasnum2cell() convierte un array numerico en un cell arraycell2struct() convierte un cell array en una estructurastruct2cell() convierte una estructura en un cell array

4 Conversion entre estructuras y vectores de celdas:

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 22 / 37

Vectores o matrices de celdas IIICell Arrays

I De vector de celdas −→a estructura:

F Sea el vector de celda “vc”:

vc = {[1 2 3], ‘Juan‘, eye(3)}El cual retorna un vector vc de 1x3

F La funcion de conversion:

st = cell2struct(vc,{‘vector‘,‘nombre‘,‘matriz‘},2)Donde: el numero 2 indica que es la segunda dimension del cell array laque va a dar origen a los campos de la estructura.

I De estructura −→a vector de celdas:Se usa la siguiente funcion de conversion

vvc = struct2cell(st)

Se transpone para obtener una fila

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 23 / 37

Variables y expresiones matriciales I

Variable

Una variable es un nombre que se da a una entidad numerica (matriz,vector o escalar).

1 La forma normal de cambiar el valor de una variable es colocandola ala izquierda del operador de asignacion (=)

2 Si una expresion termina en punto y coma su resultado se calcula,pero no se escribe en pantalla. Esto es importante por:

I Evita la escritura de resultados intermediosI Evita la impresion en pantalla de grandes cantidades de numeros

cuando se trabaja con matrices de gran tamano.

3 Si se desea que una expresion continue despues de colocar enter, sedebe de colocar tres puntos “...” antes de pulsar enter.

4 Matlab distingue entre mayusculas y minusculas en los nombres de lasvariables.

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 24 / 37

Variables y expresiones matriciales II

5 Los nombres de las variables siempre debe de empezar con una letra ypueden constar de hasta 63 letras y numeros.

6 El caracter guion bajo ( ) se considera como una letra.

7 Comando Who y WhosAmbos permiten obtener la relacion de variables que seesta utilizando. Whos proporciona mayor informacion (tamano,cantidad de memoria ocupada y el caracter real o complejo de cadavariable).

8 Comando Clear

clear elimina todas las variables creadas previamente (excepto lasvariables globales).

clear global borra las variables globales.clear A,b borra las variables indicadas.clear functions borra las funciones.clear all borra todas las variables, incluyendo las globales y las fun-

ciones.

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 25 / 37

Otras formas de definir matrices I

1 Matrices predefinidasI eye(n): matriz identidad de tamano nI zeros(n,m): matriz de ceros de tamano nxmI zeros(n): matriz cuadrada (nxn) de cerosI ones(n): matriz cuadrada (nxn) cuyos elementos son 1I ones(n,m): matriz nxm cuyos elementos son 1I rand(n): matriz cuadrada (nxn) de numeros aleatorios entre 0 y 1, con

distribucion uniformeI rand(n,m): matriz nxm de numeros aleatorios entre 0 y 1, con

distribucion uniformeI randn(n): matriz cuadrada (nxn) de numeros aleatorios, con

distribucion normal de valor medio 0 y varianza 1I magic(n): matriz cuadrada (nxn) cuyos elementos son 1,2,3...nxn; con

la propiedad de que todas las filas y columnas suman lo mismoI kron(n,m): produce una matriz que se obtiene del producto Kronecker

de n y m

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 26 / 37

Otras formas de definir matrices II

2 Formacion de matrices a partir de otrasSea la matriz A de orden nxm y el vector kx1, en base a ella enMatlab se pueden contruir otras matrices:

I [n,m] = size(A); devuelve el numero de filas y columnas de la matriz AI size(A,1): indica el numero de filas de la matriz AI size(A,2): indica el numero de columnas de la matriz AI n = lenght(x); devuelve el numero de elementos de una vector xI B = diag(x); forma una matriz diagonal B con los elementos del vector

xI y = diag(A); forma un vector y con los elementos de la diagonal de la

matriz A

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 27 / 37

Otras formas de definir matrices III

I Concatenacion de matrices: concatenar matrices es el proceso deunir una o mas matrices para crear una nueva.

Concatenacion horizontal

Sea A una matriz 2x2 y B 2x5, entonces:

C = [A B]

“C” sera una matriz de 2x7 (notar que A y B tienen el mismo numero de filas)

Concatenacion vertical

Sea A una matriz 2x5 y B 4x5, entonces:

C = [A; B]

“C” sera una matriz de 6x5 (notar que A y B tienen el mismo numero decolumnas)

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 28 / 37

Otras formas de definir matrices IV

Ejemplo:

A = rand(3)

B = diag(diag(A))

C = [A, eye(3); B, zeros(3)]

Esta matriz “C” 6x6 se forma por composicion de 4 matrices de 3x3. Donde lasfilas se han separado por “;” y los elementos de cada fila por “,”

3 Extraer elementos de una matriz y vector a partir de vectoresI Vectores para filas y columnas

F vector para filas: a = [1 3 5], fila 1,3 y 5F vector para columnas: b = [1 2], columna 1 y 2F Sea la matriz: A = magic(6)

35 1 6 26 19 243 32 7 21 23 25

31 9 2 22 27 208 28 33 17 10 15

30 5 34 12 14 164 36 29 13 18 11

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 29 / 37

Otras formas de definir matrices V

F A(a,b) nos dara: 35 131 930 5

I Un solo vector

F Dado que los elementos de una matriz estan numerados de arriba haciaabajo

F Se puede obtener elementos particulares de la matriz por medio de unvector que indique la posicion de dichos elementos

F A = magic(6), por tanto a tiene 36 elementosF Sea c = [1 3 14]F A(c), nos dara en un vector el elemento A(1), A(3) y A(14)

I Utilizando corchetes [] directamenteF A([1 2 4],[2 3]) 32 7

28 335 34

4 Operador dos puntos (:)

I Produce vector fila o columna

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 30 / 37

Otras formas de definir matrices VI

F Sea x=a:n:b, este comando produce un vector fila iniciando en “a” yterminando en “b”. El parametro “n” indica el incremento (positivo onegativo)

F Ejemplo:

x=1:2:10

Crea el vector:x = 1 3 5 7 9

I Extrae elementos de una matrizF Sea la matriz A = magic(6)F Extraer los 4 primeros elementos de la 5ta fila:

x = A(1:4,5)

F Extraer todos los elementos (:) de la 3era fila:

x = A(3,:)

F Extraer la ultima fila (end) de matriz A:

x = A(end,:)

5 Matriz vacia (borrado de filas o columnas)

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 31 / 37

Otras formas de definir matrices VII

I Para Matlab una matriz definida sin ningun elemento entre loscorchetes es una matriz que existe pero que esta vacıa; es decir, tienedimension cero.

I Utilidad:

A = magic(3)

8 1 63 5 74 9 2

Sea: A(:,3) = []

Esto eliminara la tercera columna de A:8 13 54 9

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 32 / 37

Operadores relacionales I

Operadores relacionales

Matlab dispone de los siguientes operadores relacionales:

< menor que> mayor que<= menor o igual que>= mayor o igual que== igual que∼= distinto que

1 En Matlab los operadores relacionales se pueden aplicar a vectores ymatrices.

2 Si una comparacion se cumple el resultado es 1 (true), mientras quesi no se cumple es 0 (false).

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 33 / 37

Operadores relacionales II

3 Cuando estos operadores se aplican a vectores y matrices del mismotamano, la comparacion se realiza elemento a elemento, y el resultadoes otra matriz de unos y ceros del mismo tamano.

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 34 / 37

Operadores logicos

Operadores logicos

Los operadores logicos de Matlab son los siguientes:

& and (funcion equivalente: and(A,B)). Se evaluan siem-pre

&& and breve: si el primer operando es false ya no se evaluael segundo, pues el resultado final ya no puede ser masque false.

| or (funcion equivalente: or(A,B)). Se evaluan siempreambos operandos, y el resultado es false solo si ambosson false.

|| or breve: si el primer operando es true ya no se evaluael segundo, pues el resultado final no puede ser mas quetrue.

∼ negacion logica (funcion equivalente: not(A))

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 35 / 37

Ejercicios I

1 Crear las siguientes matrices:I A = matriz identidad 5x5I B = matriz 5x4 cuyos elementos son unosI C = matriz 4x5 de numeros aleatorios entre 0 y 1 con distribucion

uniformeI D = matriz 4x4 de numeros aleatorios con distribucion normal (media

0 y varianza 4)I E = matriz que contiene a “B” y “D”I F = matriz inversa de “D”

2 Crear el vector de celda con nombre “encabezado” y que contenga:nombre1, nombre2,...,nombre4

3 Convierta la matriz F en una matriz de celda y llamela “G”

4 Concatenar G y “nombre” en una sola matriz llamada “Datos”5 Concatenar “C” y “D” en una matriz llamada “M”

I Extraer las filas 1,3 y 4 de MI Extraer las columnas 2,5 y 7 de M

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 36 / 37

Ejercicios II

I Construya una nueva matriz cuyos elementos esten determinados porlas filas 1,2,3 y por las columnas 3,7,8,9 de M

I Construya una matriz que contenga las 3 primeras filas y 5 primerascolumnas de M

6 Construya un vector fila (“x”) cuyos elementos sean numerosconsecutivos del 1 al 100

7 Construya un vector columna (“y”) cuyos elementos sean numerosque descienden de 2 en 2 desde el 200 hasta el 10

8 Eliminar desde la columna 12 a la ultima del vector x

9 Crear una estructura (Alumno) con tres campos (nombre,edad,nota)

Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 37 / 37