Capítulo 9-Matrices PDF

Title Capítulo 9-Matrices
Course Fisica
Institution Universidad de la Sabana
Pages 89
File Size 2.3 MB
File Type PDF
Total Downloads 96
Total Views 148

Summary

Capitulo 9 en matlab...


Description

Capítulo 9 Cálculo Matricial en Matlab Msc. Ing. Jairo E. Márquez D.

9.1 Matrices Una matriz es un vector de vectores, o un arreglo bidimensional de números. Para digitar y visualizar una matriz A en Matlab es importante dejar un espacio entre los números y separar las filas mediante el símbolo del punto y coma “;” >> A=[4 A = 4 8

6

5;8

6 1

5 -3

1

-3]

También, puede colocar una coma entre los números si lo prefiere: >> A=[4,6,5;8,1,-3] A = 4 6 5 8 1 -3

Otra forma de realizar lo anterior es combinar dos vectores. >> C=[4

6

5];

>> D=[8 1 >> B=[C;D] B = 4 6 8 1

-3]; 5 -3

Como se aprecia, la matriz es un conjunto de vectores. Se pueden construir matrices mediante programación a través de un sencillo ciclo for, tal como se muestra a continuación: for i=1:5, for j=1:5, t(i,j) = i/j; end end

No se produce un resultado de salida puesto que la línea t(i,j) =i/j; termina en “;”. Al retirar el “;”, Matlab muestra en el espacio de trabajo una matriz 25 veces. Es importante señalar que en una matriz se pueden operar funciones directamente, sin tener en cuenta su tipo o clase, así: >> A=[pi, -4*j, sqrt(2); log(-1), sin(pi/2), cos(pi/2) asin(0.5), acos(0.8), exp(0.8)] A = 3.1416 + 0.0000i 0.0000 + 3.1416i 0.5236 + 0.0000i

0.0000 - 4.0000i 1.0000 + 0.0000i 0.6435 + 0.0000i

1.4142 + 0.0000i 0.0000 + 0.0000i 2.2255 + 0.0000i

Nota 13. Una vez definida la matriz esta pasa al espacio de trabajo o Workspace, por lo que estará disponible para realizar cualquier operación.

Sea la matriz A= [2 5 -9 8; -1 0 3 4; 0 4 -2 7].

Figura 9.1. Creación de una variable matricial que se almacena de forma temporal en el Workspace.

Como se observa al digitar la matriz en el command window y después de dar enter, en el workspace aparece la misma matriz (como lo indica la flecha) organizada en formato de celdas. Para mirar su contenido solo debe dar doble clic en la celda:

Figura 9.2. Matriz cargada en el Workspace de Matlab.

Se puede llamar la matriz almacenada en el workspace las veces que se desee, siempre y cuando esté cargada en el mismo. Es decir, se debe tener cuidado de no usar los comandos clear o clear all, porque automáticamente limpiará todo lo que esté almacenado en el workspace si no se ha guardado previamente. 9.2 Traspuesta de una matriz Se emplea un comilla sencilla que se adiciona a la matriz original A, quedando representada como A’ Ejemplo A = 2 -9 0

5 8 2

4 6 -6

>> A' ans = 2 5 4

-9 8 6

0 2 -6

Nota 14. Matlab introduce por defecto una variable llamada (ans) de “answer” sobre la cual también se puede operar. A=[2 5 4;-9 8 6;0 2 -6] A = 2 5 4 -9 8 6 0 2 -6 >> ans ans =

2 5 4

-9 8 6

0 2 -6

Matlab permite crear matrices vacías. >> A=[] A = [] >> whos A Name Size A 0x0

Bytes Class 0 double

Attributes

9.3 Acceder a valores puntuales de Matlab (indexación) Los elementos de una matriz se acceden colocando los dos índices (Indexación) entre paréntesis separados por coma, donde el primero indica la fila, y el segundo la columna. Esta es una herramienta muy importante, porque facilita mucho las operaciones matemáticas sin necesidad de realizar bucles. >> A=[2 5 4;-9 8 6;0 2 -6] A = 2 5 4 -9 8 6 0 2 -6 >> A(2,3) ans = 6 >> A(1,1) ans = 2

Para el caso en el cual se desee seleccionar una fila o columna, se procede de la siguiente manera: A=[2 5 4;-9 8 6;0 2 -6]; A(1,:) % se selecciona la primera fila ans = 2 5 4 A(3,:) ans = 0

% se selecciona la tercera fila 2

-6

A(:,2) % se selecciona la segunda columna ans = 5

8 2 A(:,1) ans = 2 -9 0

% se selecciona la primera columna

Cuando se desea suprimir filas y columnas, se pueden utilizar los paréntesis cuadrados, por ejemplo para suprimir la segunda columna de la matriz A: >> A(:,2)=[] A = 2 4 -9 6 0 -6

Para suprimir la segunda columna y tercera fila de la matriz A: >> A(3,:)=[] A = 2 4 -9 6

Para saber el tamaño de un matriz, se digita size (nombre de la matriz). >> A=[1 2 3;4 5 6;7 8 9]; >> size(A) ans = 3 3

Hacer una matriz aleatoria de 3 x 3 >> rand(3) ans = 0.8147 0.9058 0.1270

0.9134 0.6324 0.0975

0.2785 0.5469 0.9575

9.4 Elementos de variables matriciales MATLAB permite la selección de elementos de variables matriciales de dimensión mxn que permite evaluar y analizar mediante comandos de inserción, extracción, renumeración y manipulación de sus elementos. El uso de los comandos se resume en el siguiente cuadro:

Instrucción

A(m,n)

Descripción Define el elemento (m,n) de la matriz A (fila m y columna n). >> A = [1 -3 2 5;-8 5 1 -4;7 1 0 6;9 -2 4 7] A = 1 -3 2 5 -8 5 1 -4 7 1 0 6 9 -2 4 7 >> A (2,3) ans = 1

Define la submatriz de A formada por las filas que hay entre la a-ésima y la b-ésima y por las columnas que hay entre la c- ésima y la d-ésima. A(a:b,c:d)

>> A(2:2,2:3) ans = 5 1

Define la submatriz de A formada por la intersección de las filas a-ésima y b-ésima y las columnas c-ésima y d-ésima. A([ab],[c d])

>> A([1 3] , [1 3]) ans = 1 2 7 0

Define la submatriz de A formada por la intersección de las filias a, b, c, ...y las columnas e , f , g , . . . A([a b c ...], [e f g ...])

>> A([2 3],[1 2 4]) ans = -8 5 -4 7 1 6

Define la submatriz de A formada por todas las filas de A y por las columnas que hay entre la c-ésima y la d-ésima.

A(:,c:d)

>> A(:,1:3) ans = 1 -3 -8 5 7 1 9 -2

2 1 0 4

Define la submatriz de A formada por todas las filas de A y por las columnas c, d, e, ...

A(:,[c d e ...])

>> A(:, [3,4]) ans = 2 5 1 -4

0 4

6 7

Define la submatriz de A formada por todas las columnas de A y por las filas que hay entre la a-ésima y la b-ésima. A(a:b,:)

>> A(1:2, :) ans = 1 -3 -8 5

2 1

5 -4

Define la submatriz de A formada por todas las columnas de A y por las filas a, b, c, ...

A([a b c ...],:)

>> A([2,3], :) ans = -8 5 7 1

1 0

-4 6

Define la fila a-ésima de la matriz A.

A(a,:)

>> A(2, :) ans = -8 5

1

-4

Define la columna b-ésima de la matriz A

A(:,b)

>> A ( : , 4) ans = 5 -4 6 7

Define un vector columna cuyos elementos son las columnas de A situadas por orden una debajo de otra.

A(:)

> A(:) ans = 1 -8 7 9 -3 5 1 -2 2 1 0 4 5 -4 6 7

Equivale a toda la matriz A.

A(:,:)

>> A (:,:) ans = 1 -3 -8 5 7 1 9 -2

A(end,:)

Extrae todos los elementos de la última fila. >>A(end,:) ans = 9 -2

2 1 0 4

4

5 -4 6 7

7

Define la matriz formada por las submatrices A, B, C, ... >> A=[ 2 5; -9 8],B=[6 5;-9 3] A = 2 5 -9 8

[A,B,C,...]

B = 6 -9

5 3

>> [A,B] ans = 2 -9

5 8

6 -9

5 3

9.5 Práctica 1 Dadas las matrices =

=

4 1 9 5 -6

5 -3 1 6 5

-9 0 3 9 7

6 4 8 -3 4

8 -7 -1 -2 6

1 0 -5 8 0

2 -2 3 -1 1

3 7 8 6 3

4 9 -7 7 2

5 6 1 3 9

1. Aplicar cada instrucción citada en la tabla anterior.

2. Graficar A y B. 3. Emplee la instrucción isequal(A,B), que devuelve 1 si A y B son iguales. 4. Emplee la instrucción isempty(A), que devuelve 1 si la matriz A esta vacía. Nota 15. Subíndice: El elemento de la fila i y la columna j de una matriz puede ser llamado de la forma A(i,j). Por ejemplo, para calcular la suma de todos los elementos de la tercera columna de la matriz A se debe realizar la siguiente operación: 5. Calcular A(1,3)+A(2,3)+A(3,3)+A(4,3)+A(5,3) 6. Para la matriz B, calcular B(1,4)+B(2,4)+B(3,4)+B(4,4)+B(5,5) 7. A(:,4) 8. A(3,:) 9. B(:,3) 10. B(2,:) 9.6 Funciones matriciales específicas En Matlab se emplea un grupo de funciones matriciales predefinidas que facilitan el trabajo en determinados procesos matemáticos. Las más importantes son: Instrucción

diag(v)

Descripción Crea una matriz diagonal con el vector v en la diagonal. diag([2 6 4]) ans = 2 0 0 6 0 0

0 0 4

Extrae e introduce las diagonales en una matriz A como vector columna. >> A=[2 5 6;- 8 6 0;1 -7 4] A =

diag(A)

2 -8 1

5 6 -7

>> diag(A) ans =

6 0 4

2 6 4 >> m = 5; >> diag(-m:m) + diag(ones(2*m,1),1) + diag(ones(2*m,1),-1) ans = -5 1 0 0 0 0 0 0 0 0 0

1 -4 1 0 0 0 0 0 0 0 0

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

0 0 1 -2 1 0 0 0 0 0 0

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

0 0 0 0 1 0 1 0 0 0 0

0 0 0 0 0 1 1 1 0 0 0

0 0 0 0 0 0 1 2 1 0 0

0 0 0 0 0 0 0 1 3 1 0

0 0 0 0 0 0 0 0 1 4 1

0 0 0 0 0 0 0 0 0 1 5

Crea la matriz identidad de orden n. eye(n)

>> eye(3) ans = 1 0 0 1 0 0

0 0 1

Crea la matriz de orden mxn con unos en la diagonal principal y ceros en el resto. eye(m,n)

>> eye (2,3) ans = 1 0 0 0 1 0

zeros(m,n)

Crea la matriz nula de orden mxn.

Para una matriz >> zeros(3,2) ans = cuadrada 0 0 zeros(n) 0 0 0

ones(m,n)

0

Crea la matriz de orden mxn con todos sus elementos 1.

Para una matriz >> ones (3,2) ans = cuadrada 1 1 ones(n) 1 1

1 1

Devuelve la matriz cuyas filas están colocadas en orden inverso (de arriba abajo) a las filas de A.

flipud(A)

>> flipud(A) ans = 1 -7 4 -8 6 0 2 5 6

Devuelve la matriz cuyas columnas están colocadas en orden inverso (de izquierda a derecha) a las de A.

fliplr(A)

>> fliplr(A) ans = 6 5 2 0 6 -8 4 -7 1

Rota 90 grados la matriz A.

rot90(A)

>> rot90(A) ans = 6 0 4 5 6 -7 2 -8 1

Devuelve el orden (tamaño) de la matriz A. Se aplica tanto a vectores como matrices. Devuelve un vector de dos elementos: cantidad de filas y cantidad de columnas. size(A) >> size(A) ans = 3 3

Encuentra las filas y columnas donde están los elementos no nulos de A y los almacena en I y J, respectivamente. En V coloca el vector de elementos no nulos. >> [I,J,V]= find(A) I = 1 2 3 1 2 3 1 3

[I,J,V]=find(A)

J = 1 1 1 2

2 2 3 3 V = 2 -8 1 5 6 -7 6 4

Devuelve la longitud del vector v. Se aplica solo a vectores. Devuelve el largo del vector (es igual para filas y columnas). length(v)

>> v=[2 -5 6 8 7 0 1 6]; >> length(v) ans = 8

Devuelve la parte triangular inferior de la matriz A. tril(A)

>> tril(A) ans = 2 0 -8 6 1 -7

0 0 4

Devuelve la parte triangular superior de la matriz A.

triu(A)

>> triu(A) ans = 2 5 0 6 0 0

6 0 4

Devuelve la matriz transpuesta de A.

A’

>> A' ans = 2 5 6

-8 6 0

1 -7 4

Calcula la traspuesta (sin conjugar) de la matriz A. Si la matriz A es de números reales A.' y A' producen el mismo resultado. A.’ >> A.' ans = 2 5

-8 6

1 -7

6

0

4

Devuelve la matriz inversa de A.

inv(A)

>> inv(A) ans = 0.0472 0.0630 0.0984

-0.1220 0.0039 0.0374

-0.0709 -0.0945 0.1024

Devuelve la traza de la matriz cuadrada A. Trace(A)

>> trace(A) ans = 12 Devuelve el número de filas m y de columnas n de una matriz rectangular A.

[m,n]=size(A)

>> [m,n]=size(A) m = 3 n = 3

Devuelve el número de elementos de la matriz A. Numel(A) >> numel(A) ans = 9

A(:,n)=[]

Elimina la columna n de la matriz A. A=[2 5 6;- 8 6 0;1 -7 4]; A(1,:)=[] A = -8 6 0 1 -7 4

Elimina la n fila de la matriz A A(1,:)=[]

Repmat(A,m,n)

A(:,3)=[] A = 2 5 -8 6 1 -7

Replica la matriz A tres veces verticalmente y dos veces horizontalmente. A=[2 5 6;- 8 6 0;1 -7 4]; repmat(A,2,3) ans = 2 5 6 2 5 6 -8 6 0 -8 6 0 1 -7 4 1 -7 4 2 5 6 2 5 6 -8 6 0 -8 6 0

2 -8 1 2 -8

5 6 -7 5 6

6 0 4 6 0

1

-7

4

1

-7

4

1

-7

4

9.7 Instrucción rand El comando rand genera números aleatorios uniformemente distribuidos con valores que están en el rango de 0 y 1. El comando se puede utilizar para asignar estos números a un escalar, un vector o una matriz, como se muestra en el siguiente cuadro. Cuadro de la instrucción rand. Instrucción rand

Descripción Genera una solo valor aleatorio, cuyo número está entre 0 y 1. >> rand ans = 0.3816

rand(1,n)

Genera un vector fila de n números aleatorios entre 0 y 1. >> rand(1,4) ans = 0.7655 0.7952

rand(n)

0.1869

0.4898

Genera una matriz nxn de números aleatorios entre 0 y 1. >> rand(2) ans = 0.4456 0.6463

0.7094 0.7547

Crea una matriz aleatoria uniforme de orden mxn. rand(m,n) Para una matriz >> rand(3,3) cuadrada ans = aleatoria 0.8147 0.9134 0.2785 rand(n) 0.9058 0.6324 0.5469 0.1270

randperm(n)

0.0975

0.9575

Genera un vector de fila con n elementos que son permutación aleatoria de enteros entre 1 y n. >> randperm(5) ans = 3

randn(m)

2

4

1

5

Crea una matriz aleatoria cuyos valores pueden ser positivos y negativos. >> randn(2) ans = -0.2991 -0.2620

0.0229 -1.7502

Crea una matriz aleatoria normal de orden mxn >> randn(4,5) ans = 2.7694 -0.0631 -1.3499 0.7147 3.0349 -0.2050 0.7254 -0.1241

randn(m,n)

1.4897 1.4090 1.4172 0.6715

-1.2075 0.7172 1.6302 0.4889

1.0347 0.7269 -0.3034 0.2939

Se debe tener en cuenta que se pueden combinar operaciones siempre y cuando el orden de las matrices y/o vectores sean equivalentes. Ejercicios resueltos 1. Analice las siguientes operaciones, A= diag([6,2,3,5])+eye(4,4) A = 7 0 0 0 0 3 0 0 0 0 4 0 0 0 0 6 >> A = reshape(1:16,4,4)' A = 1 5 9 13

2 6 10 14

>> trace(A) ans = 34 >> diag(A) ans = 1 6 11 16 >> triu(A) ans =

3 7 11 15

4 8 12 16

1 0 0 0

2 6 0 0

3 7 11 0

4 8 12 16

0 6 10 14

0 0 11 15

0 0 0 16

>> tril(A) ans = 1 5 9 13

2. Cuál es el resultado de v=5*randn(2,5)+40 >> v=5*randn(2,5)+40 v = 39.6607 39.0239

38.9120 38.4845

40.1152 40.2565

44.1303 47.6349

42.3346 38.9514

3. Generar gráficos de datos aleatorios. Para ello se procede a crear una matriz de diagrama de dispersión plotmatrix. Esta función crea una matriz de subaxes que contienen diagramas de dispersión de las columnas de X contra las columnas de Y. x = randn(50,3); y = x*[-1 2 3;-2 3 1;0 -2 3;]'; plotmatrix(y,'*r') 10 0 -10 10 0 -10 20 10 0 -10 -10

0

10

-10

0

Figura 9.3

10

-10

0

10

20

4. Distribución Normal. Una distribución normal tiene dos parámetros asociados a ella: la media y la varianza. El comando randn genera números aleatorios que tienen una media de cero y una varianza de unidad. Por ejemplo. Crear un vector de 1x1000 de números aleatorios y graficar en un histograma x = randn(1,1000); hist(x,12), xlabel('x'),ylabel('y'), title('Histograma') Histograma

200 180 160 140 120 100 80 60 40 20 0 -3

-2

-1

0

1

2

3

x

Figura 9.4. Histograma aleatorio.

La mediana y varianza son respectivamente. mn = mean(x) v = var(x) mn = 0.01 v = 1.02

Estos son valores muy cercanos a lo que se esperaba. 5. Medición acerca del tiempo necesario que le toma a los procesadores en conjunto resolver un sistema de 1000 ecuaciones con 1000 incógnitas. n=1000; A=rand(n); b=rand(n,1); x=zeros(n,1); tini=clock; x=A\b; t=etime(clock, tini) time=cputime; x=A\b; time=cputime-time tic; x=A\b; toc

La salida por consola son los tiempos parciales y tiempo transcurrido. t = 0.0430 time = 0.1406 Elapsed time is 0.036127 seconds.

6. Existe un par de funciones en Matlab que permiten calcular el tiempo en segundos de una operación. Estas funciones son tic y toc. Veamos un ejemplo: Tomemos 5000 números aleatorios y calculemos sus inversas de manera recurrente. Con este simple ejercicio, se va evaluar cuánto tarda Matlab en hallar la solución. tic; inv(inv(inv(randn(5000)))); toc Elapsed time is 24.265223 seconds.

7. El tiempo de operaciones está relacionado directamente con la capacidad computacional del equipo. Por consiguiente, se puede establecer cuál es el tiempo que tarda los procesadores o CPU en realizar las operaciones, la sintaxis es cputime: t=cputime; inv(inv(inv(randn(5000)))); e=cputime-t e = 157.5000

9.8 Randi El comando randi genera un entero pseudoaleatorio uniformemente distribuido. Esta función devuelve un número entero escalar pseudoaleatorio entre 1 y max. También, se puede utilizar para asignar números a un escalar, un vector o una matriz, como se muestra en la siguiente tabla. Cuadro de instrucciones para el comando randi Instrucción X=randi(imax) imax es un entero. X=randi(imax,n)

Descripción Genera un solo número aleatorio entre 1 e imax. Genera una matriz aleatoria de nxn, cuyos valores son enteros que están entre 1 e imax.

Genera una matriz aleatoria de mxn, cuyos valores son enteros que están entre 1 e imax. Devuelve una matriz sz1-by -...- by-szN donde sz1,..., szN indica el tamaño de randi(imax,sz1,...,szN): cada dimensión. Por ejemplo, randi (10, 3, 4) devuelve un conjunto de 3 por 4 de números enteros pseudoaleatorios entre 1 y 10. Devuelve una matriz donde el tamaño del vector sz define el tamaño de (X). Por X = randi(imax,sz) ejemplo, randi (10, [3,4]) devuelve una matriz de 3 por 4 de números enteros pseudoaleatorios entre 1 y 10. Devuelve un entero pseudoaleatorio X = randi(imax,classname) donde classname especifica el tipo de datos. Classname puede ser de tipo 'single', 'doble', 'int8', 'uint8', 'int16', 'uint16', 'int32' o 'uint32'. Devuelve una matriz nxn del tipo de datos X = randi(imax,n,classname) classname. X = Devuelve una matriz sz1-by -...- by-szN randi(imax,sz1,...,szN,classname) del tipo de datos classname. X=randi(imax,m,n)

X = randi(imax,sz,classname) X = randi(imax,'like',p)

X = randi(imax,n,'like',p) X = randi(imax,sz1,...,szN,'like',p) X = randi(imax,sz,'like',p)

X = randi([imin,imax],___)

Devuelve una matriz donde el tamaño de vector sz define el tamaño de (X) y classname define la clase de (X). Devuelve un entero pseudoaleatorio como p; Es decir, con el mismo tipo de datos (clase). Devuelve un array nxn como p. Devuelve un array sz1-by -...- by-szN como p. Devuelve un array como p donde el tamaño del vector sz define el tamaño de (X). Devuelve una matriz que contiene números enteros extraídos de...


Similar Free PDFs