0% encontró este documento útil (0 votos)
90 vistas19 páginas

Generación y manejo de vectores y matrices

Este documento describe las funciones básicas para generar y manipular vectores y matrices en MATLAB. Explica cómo generar vectores y matrices directamente escribiendo sus elementos o usando el operador (:) para crear sucesiones numéricas. También describe cómo extraer subvectores y submatrices mediante índices y cómo realizar operaciones básicas como suma, resta y multiplicación entre matrices.

Cargado por

piero
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
90 vistas19 páginas

Generación y manejo de vectores y matrices

Este documento describe las funciones básicas para generar y manipular vectores y matrices en MATLAB. Explica cómo generar vectores y matrices directamente escribiendo sus elementos o usando el operador (:) para crear sucesiones numéricas. También describe cómo extraer subvectores y submatrices mediante índices y cómo realizar operaciones básicas como suma, resta y multiplicación entre matrices.

Cargado por

piero
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

2.1 Generación y manejo de vectores y matrices.

 Generación de vectores de forma directa

En el lenguaje M se va a trabajar habitualmente con los corchetes ([ ]) para la


generación de vectores y matrices. Su uso implica un ensamblado de los elementos que
aparecen en su interior para formar una construcción más compleja. Hacemos notar que no
tiene el significado matemático similar a los paréntesis.

Para definir un vector no hace falta establecer de antemano su tamaño (de hecho, éste
cambia de forma dinámica cuando es preciso). Simplemente, se disponen los valores de los
elementos que lo van a componer entre corchetes, separados por espacios o una coma, en el
caso de un vector fila, o por el carácter punto y coma (;) o pulsaciones intro, en el caso de un
vector columna.

Al teclear
>>b=[1 2 3 4 5]

o bien
>>b=[1,2,3,4,5]

se genera el vector fila b: 1 2 3 4 5,

que aparecerá como tal en la ventana Workspace.

Mientras que:
>>c=[1;2;3]

o bien
>>c=[1

3]

genera el vector columna c:


1

 Generación rápida de vectores. Operador (:)

Se van a analizar a continuación otras formas de generación de vectores que no


necesitan de la escritura explícita de todos sus elementos. Implícitamente se trabajará con el
operador (:) que sirve para crear sucesiones numéricas, por ejemplo:

1:4, es equivalente a 1,2,3,4


variable=[vin:vfin]

Define el vector cuyos primer y último elemento son los especificados por vin y vfin,
estando los componentes intermedios separados por una unidad. Está permitido no utilizar los
corchetes o sustituirlos por paréntesis.

variable=[vin:incr:vfin]

Define el vector cuyos primer y último elemento son los especificados por vin y vfin,
estando los componentes intermedios separados por incr. Está permitido no utilizar los
corchetes o sustituirlos por paréntesis.

variable=linspace (x1,x2,n)

Genera un vector con n valores igualmente espaciados entre x1 y x2.

Ejemplos:

>>v=[1:10]

v=

1 2 3 4 5 6 7 8 9 10

>>v=1:10

v=

1 2 3 4 5 6 7 8 9 10

>>v=(1:10)

v=

1 2 3 4 5 6 7 8 9 10

>>v=[Link]

v=

1 3 5 7 9

>> v=linspace(1,10,7)

v =

1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000


 Extracción de elementos de vectores

Para extraer uno o varios elementos de un vector se debe indicar después del nombre
de éste y entre paréntesis, los índices correspondientes a las posiciones a extraer. En lenguaje
M la numeración de los índices comienza en 1. Se puede utilizar la partícula end para indicar el
último elemento.

Sea el vector x:

x(n) devuelve el componente enésimo del vector x.

x(end) devuelve el último elemento del vector x.

x(a:b) devuelve los componentes del vector x situados entre el a-ésimo y el b-ésimo
respectivamente (a<b).

x(a:p:b) devuelve los elementos del vector x situados entre el a-ésimo y el b-ésimo
respectivamente (a<b), pero separados en p unidades.

x(b:-p:a) devuelve los componentes del vector x situados entre el b-ésimo y el a-


ésimo respectivamente (a<b), pero separados en p unidades,

Ejemplos:

>>v=[Link]

v=

2 4 6 8 10 12 14 16 18 20

>>v(7)

14

>>a=v(1:5)

a=

2 4 6 8 10

>>b=v([Link])

b=

4 10 16

>>c=v(10:-3:2)

c=

20 14 8
 Generación de matrices de forma directa

Se seguirá el mismo proceso estudiado en vectores. Los elementos se escribirán por


filas, separando una fila de la siguiente por el carácter punto y coma (;) o pulsaciones intro. Los
elementos de cada fila se separan por espacios o una coma.

Por ejemplo, el siguiente comando define una matriz A de dimensión (3x3):

A=[1 2 3; 4 5 6; 7 8 9]

La respuesta del programa es:

1 2 3

4 5 6

7 8 9

Sin embargo, aunque las matrices haya que introducirlas por teclado ordenadas por filas, M las
memoriza de forma lineal (a modo de vector), ordenando los elementos por columnas. Por
ejemplo, la matriz A del caso anterior tendría la siguiente disposición en memoria:

1 4 7 2 5 8 3 6 9

 Generación rápida de matrices. Operador (:)

Al igual que en el caso de vectores, se puede generar los elementos de las filas sin
tener que escribirlos uno a uno. Ejemplo:

>> A=[1:5;5:-1:1;linspace(0,11,5)]

A =

1.0000 2.0000 3.0000 4.0000 5.0000

5.0000 4.0000 3.0000 2.0000 1.0000

0 2.7500 5.5000 8.2500 11.0000

 Composición de matrices

Un caso especialmente interesante es el de crear una nueva matriz componiendo como


submatrices otras matrices definidas previamente. Se utiliza la misma técnica de ensamblado
vista en los apartados anteriores. A modo de ejemplo, ejecútense las siguientes líneas de
comandos y obsérvense los resultados obtenidos:
>> A=[0, 1; 1, 2];

>> B=[7, 3; 5, -8];

>> C=[A ; B]

C =

0 1

1 2

7 3

5 -8

>> D=[11; 12; 13; 14]

D =

11

12

13

14

>> X=[C, D]

X =

0 1 11

1 2 12

7 3 13

5 -8 14

La matriz C de tamaño 4x4 se forma por composición en vertical de las matrices A y B. La


matriz X se forma por composición en horizontal de las matrices C y D. Al igual que con simples
escalares, las submatrices que quieran unirse en horizontal se separan con blancos o comas,
mientras que las que se ensamblen en vertical se separan entre sí con el carácter intro o punto
y coma. Los tamaños de las submatrices deben de ser coherentes (igual número de filas para
ensamblado horizontal e igual número de columnas para ensamblado vertical).

Se pueden realizar varias uniones en la misma sentencia colocando las parejas de corchetes
adecuadamente:

>> X=[ [A ; B], D]

X =

0 1 11

1 2 12

7 3 13

5 -8 14
 Creación de submatrices

Para extraer uno o varios elementos de una matriz se procede igual que con los vectores
pero indicando las posiciones de filas y columnas de los elementos a extraer. Veamos a
continuación todas las posibilidades:

A(m,n) define el elemento (m,n) de la matriz A.

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

A(a:p:b,c:q:d) define la submatriz de A formada por la intersección de las filas que


hay entre la a-ésima y la b-ésima tomándolas de p en p, y las columnas que hay entre la c-
ésima y la d-ésima tomándolas de q en q.

A([a b],[c d]) 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([a b c …],[e f g …]) define la submatriz de A formada por la intersección de


las filas a,b,c, … y las columnas e,f,g,…….

A(:, c:d) define la submatriz de A formada por la intersección de todas las filas de A
y las columnas que hay entre la c y la d.

A(end, c:d) define la submatriz de A formada por la intersección de la última fila de


A y las columnas que hay entre la c y la d.

A(:,[c d e …]) define la submatriz de A formada por la intersección de todas las


filas de A y las columnas c,d,e,…..

A(a:b,:) define la submatriz de A formada por la intersección de todas las columnas


de A y las filas que hay entre la a y la b.
A([a b c],:) define la submatriz formada por la intersección de todas las columnas de
A y las filas a,b,c.

A(a,:) define la fila a-ésima de la matriz A.

A(:,b) define la columna b-ésima de la matriz A.

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


colocadas por orden una debajo de otra.

A(b) define el elemento b-ésimo al colocar una columna de la matriz a continuación de la


otra.

Ejemplos:

>>A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16];

>>A(3,4)

12

>>B1=A(1:3,2:4)

2 3 4

6 7 8

10 11 12

>> B2=A([1 3],[2 4])

2 4

10 12

>>B3=A(:,2:4)

2 3 4

6 7 8

10 11 12

14 15 16

>>B4=A(:,[1 3 4])

1 3 4

5 7 8

9 11 12

13 15 16
>>B5=A(2:4,:)

5 6 7 8

9 10 11 12

13 14 15 16

>>B6=A(3,:)

9 10 11 12

>>B7=A(:,3)

11

15

>>B8=A(:) El resultado es el siguiente vector (en columna):

1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16

>>B9=A(7)

10
2.2 Operaciones con matrices. Funciones específicas.

 Operaciones con matrices mediante operadores

M puede operar con matrices(1) por medio de operadores y por medio de funciones.

Sean A y B dos matrices y c un escalar. Los operadores matriciales del lenguaje M son los
siguientes:

 Operadores suma (+) y resta (-)


Utilizado entre matrices (siempre con el mismo tamaño) obtiene la suma/resta matricial
(elemento a elemento). Utilizado entre una matriz y un escalar, suma/resta el escalar a cada
elemento de la matriz. No existen los operadores (.+) y (.-).

 Operador producto (*)


Utilizado entre matrices resuelve el producto matricial. Las dimensiones de las matrices deben
ser congruentes. Utilizado entre una matriz y un escalar, multiplica el escalar por cada elemento
de la matriz.
 Operador producto elemento a elemento (.*)
A.*B da como resultado una matriz cuyo elemento ij es Aij*Bij.
 Operador potenciación (^)
Para utilizarlo, al menos uno de los operandos debe ser un escalar y la matriz debe ser
cuadrada.

A^c resuelve el producto matricial A*A*A .............. *A, c veces.

c^A se computa mediante autovalores y autofunciones.

 Operador potenciación elemento a elemento (.^)


A continuación aparecen todas las posibilidades de utilización:

A.^B da como resultado una matriz cuyo elemento ij es Aij^Bij.

A.^c da como resultado una matriz cuyo elemento ij es Aij^c.

c.^A da como resultado una matriz cuyo elemento ij es c^Aij.

 Operador división (/) (\)


La utilización entre una matriz y un escalar obtiene el cociente elemento a elemento. La
utilización entre matrices se verá más adelante.

 Operador división elemento a elemento (./) (.\)


A continuación aparecen todas las posibilidades de utilización:

A./B da como resultado una matriz cuyo elemento ij es Aij /Bij.

A.\B da como resultado una matriz cuyo elemento ij es Bij /Aij.

1
En esta sección, hablaremos de matrices de forma global, considerando también los vectores.
 Operador traspuesta (')
A' da como resultado la matriz traspuesta de A.

Algunos ejemplos:

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

>>a+b

ans= 5 7 9

>>a.*b

ans= 4 10 18

>>a-b

ans= -3 -3 -3

>>a.^b

ans= 1 32 729

>>a+c

ans= 4 5 6

>>a*c

ans= 3 6 9

>>a.^c

ans= 1 8 27

>>c.^a

ans= 3 9 27

 Operadores relacionales, lógicos y de igualdad

Son válidos los analizados en la sección 1.3. Aplicados entre matrices se emplean elemento a
elemento, luego el tamaño de las matrices debe coincidir. El resultado es una matriz de tipo
lógico.

>> A=1:9;

>>P=(A>2)&(A<6)

P=

0 0 1 1 1 0 0 0 0
 Operaciones con matrices mediante funciones

Además de los operadores analizados en la sección anterior, existen funciones M que


permiten realizar otro tipo de operaciones con vectores:

dot(v,w) producto escalar de los vectores v y w.

cross(v,w) producto vectorial de los vectores v y w (máximo tres componentes de


cada uno): [v2w3-v3w2 v3w1-v1w3 v1w2-v2w1].

length(v) calcula el número de componentes del vector v, o el máximo tamaño de las


dimensiones si v es una matriz.

[m,n]=size(A) devuelve el número de filas y de columnas de la matriz A. Si la matriz es


cuadrada basta recoger el primer valor de retorno.

size(A,1) devuelve el número de filas.

size(A,2) devuelve el número de columnas.

max(v) devuelve el valor de la mayor componente del vector v, o si v es una matriz


genera un vector fila con el máximo de cada columna de la matriz.

min(v) devuelve el valor de la menor componente del vector v, o si v es una matriz


genera un vector fila con el mínimo de cada columna de la matriz.

norm(v) obtiene el módulo del vector v

sum(v) devuelve la suma de las componentes del vector v. Si v es matriz genera un


vector fila, siendo cada elemento igual a la suma de la columna correspondiente de la matriz.

prod(v) devuelve el producto de las componentes del vector v. Si v es matriz genera un


vector fila, siendo cada elemento igual al producto de la columna correspondiente de la
matriz.

sort(v) ordena las componentes de v de menor a mayor. Si v es una matriz, ordena sus
columnas de menor a mayor. Por ejemplo, para ordenar un vector v, bastaría con ejecutar la
siguiente instrucción:

v=sort(v)

A continuación se detallan algunas funciones que operan con matrices:

inv(A) da como resultado la matriz inversa de A.

det(A) da como resultado el determinante de A.

trace(A) da como resultado la traza de A.


 Funciones para definir matrices particulares

Existen en el lenguaje M varias funciones orientadas a definir con gran facilidad matrices
de tipos particulares. Algunas de estas funciones son las siguientes:

eye(n) forma la matriz identidad de tamaño (nxn)

eye(m,n) forma la matriz identidad de tamaño (mxn)

zeros(m,n) forma una matriz de ceros de tamaño (mxn)

zeros(n) forma una matriz de ceros de tamaño (nxn)

ones(n) forma una matriz de unos de tamaño (nxn)

ones(m,n) forma una matriz de unos de tamaño (mxn)

Ejemplos:

>>eye(2)

1 0

0 1

>>zeros(2,3)

0 0 0

0 0 0

>>ones(4)

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

 Números y matrices aleatorios

Para la generación de números y matrices pseudoaleatorios, M dispone de las


siguientes funciones:

rand este comando genera números pseudoaleatorios distribuidos uniformemente entre


0 y 1. Cada llamada proporciona un nuevo número.

rand(n) genera una matriz de números pseudoaleatorios entre 0 y 1, con


distribución uniforme, de tamaño (nxn).

rand(m,n) igual que en el caso anterior pero de tamaño (mxn).


Ejemplos:

>>rand

0.9501

>>rand(3)

0.2311 0.8913 0.0185

0.6068 0.7621 0.8214

0.4860 0.4565 0.4447

 Borrado de elementos de matrices y vectores

Se pueden crear nuevas matrices eliminando elementos de otras ya existentes. Para


borrar elementos de una matriz o vector, se debe asignar a éstos el valor vacío entre corchetes
[ ]. Ejemplo:

A(3,:)=[ ];

con esta orden se elimina la fila 3 de la matriz A.

 Extracción de elementos de tablas mediante índices lógicos

Conocemos que para extraer elementos de una tabla, se deben indicar los índices
correspondientes a los elementos; sin embargo, si como índices de una tabla disponemos un
vector de tipo lógico, estamos indicando que se extraigan los elementos situados en las
posiciones de valor lógico 1. Ejemplo:

>>v=1:10

v =

1 2 3 4 5 6 7 8 9 10

>> in=v>=5

in =

0 0 0 0 1 1 1 1 1 1

>> v(in)

ans =

5 6 7 8 9 10

% se extraen los elementos de v que cumplen la condición, es decir los


elementos de v mayores o iguales a 5
 Reutilización del formato en escritura de matrices en pantalla

Cuando en lugar de un escalar se quiere escribir una matriz, se imprimirán los elementos en
orden columnas, necesitando por cada elemento un formato. Sin embargo, en lenguaje M, ya
conocemos que no es necesaria la disposición explícita de un formato por cada dato ya que
cuando se termina de usar el formato especificado se reutiliza éste al completo hasta
conseguir escribir el resto de datos. A continuación se escriben ejemplos relativos a esta
propiedad:

>> A=[1 2;3 4]; B=[3.56 7.89];

>> fprintf('%d %d\n',A,B);

1 3

2 4

3.560000e+000 7.890000e+000

>> fprintf('El dato es: %f\n',B);

El dato es: 3.560000

El dato es: 7.890000


2.3 Resolución de sistemas de ecuaciones.
En la mayor parte de problemas de ingeniería o ciencias aparecen sistemas de
ecuaciones. Llegado este momento tenemos todas las herramientas necesarias para poder
proceder a su resolución, siendo éste el objetivo de este tema.

Sea el sistema de ecuaciones que se expresa matricialmente de la forma Ax  b , siendo A la


matriz de coeficientes, y b el vector de términos independientes. Este sistema puede
resolverse en MATLAB y Octave utilizando simplemente el operador backslash o división
izquierda (\) de la forma:

x=A\b

siendo b un vector columna. El operador \ examina los coeficientes de A antes de intentar


resolver el sistema y actúa de la siguiente forma:

 Si A es triangular (superior o inferior), entonces se utiliza sustitución hacia atrás o


hacia delante.
 Si A es simétrica y los elementos diagonales de A son positivos, entonces se intenta
la factorización de Cholesky. No siempre es posible realizarla porque aunque la matriz
A cumpla las condiciones dichas podría no ser definida positiva.
 Si las condiciones anteriores no se cumplen, se realiza una factorización LU.
 Si A no es cuadrada, tiene tamaño M  N y se cumple que M  N , el sistema se
dice que es sobredeterminado. El sistema lineal resultante puede no tener solución. La
solución que se adopta consiste en encontrar valores que minimicen el error dado por
la siguiente expresión, lo que se denomina Método de los Mínimos Cuadrados:
M N
e   (bi   aij x j )2
i 1 j 1

Por ejemplo dado el sistema

2 x  3 y  1,
4 x  y  2,
x  y  3,
x  y  0,
el conjunto de instrucciones (programa) que finalizan con la resolución de éste
mediante el método de mínimos cuadrados es

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

b=[1 2 3 0];

x=A\b'

x=

0.6154

-0.2692
 Si A no es cuadrada, tiene tamaño M  N y se cumple que N  M , el sistema se
denomina infradeterminado. Estos sistemas tienen infinitas soluciones y el operador \
se limita a seleccionar una sin enviar ningún mensaje de advertencia. Por ejemplo, si
consideramos el sistema infradeterminado,
x  y  z  2,
2 x  3 y  4,

el siguiente programa obtiene la solución indicada.

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

b=[-2,-4];

x=A\b'

x=

-2.0000

0.0000

0.0000

Sin embargo, existen otras muchas soluciones, por ejemplo: x=1 ,y=2, z=-5.
2.4 Estructuras de control de tipo condicional.

Las sentencias de un programa son ejecutadas por el ordenador según su flujo natural,
es decir, de arriba hacia abajo y de forma consecutiva a no ser que, de alguna manera, se
altere este orden. Los comandos que realizan esta función se denominan comandos de control
de flujo y las sentencias a las que pertenecen sentencias de control de flujo.

Las sentencias condicionales permiten realizar ciertas instrucciones del programa sólo
si se cumple la condición asociada a ellas.

 Sentencia if simple
La forma básica de una sentencia condicional if es la siguiente:

if expresión_lógica

sentencias

end

o bien

if expresión_lógica , sentencias , end

Las sentencias se ejecutan sólo si la expresión lógica se evalúa como cierta, en el caso de que la
expresión sea evaluada como falsa, el programa continúa por la instrucción siguiente a end sin
realizar las sentencias asociadas al condicional.

 Bloque if unicondicional

Se trata de otro tipo de sentencia más compleja pero en la que sigue apareciendo una
única expresión lógica. La sintaxis se indica a continuación.
if expresión_lógica

bloque 1 sentencias

else

bloque 2 sentencias

end
Si la expresión lógica se evalúa como cierta se ejecuta el bloque 1 de sentencias, si se evalúa
como falsa se ejecuta el bloque 2. Nunca se ejecutan los dos bloques de sentencias a la vez, ni
ninguno de los dos. Se utiliza para elegir uno de dos 'caminos' en el programa.

 Bloque if multicondicional

A continuación mostramos la sintaxis de otra expresión condicional en la que se pueden


evaluar dos o más condiciones.

if expresión_lógica_1

bloque 1 sentencias

elseif expresión_lógica_2

bloque 2 sentencias

............

elseif expresión_lógica_n

bloque n sentencias

else

bloque n+1 sentencias

end

Su funcionamiento es simple, la primera expresión lógica que se evalúe como cierta provoca la
ejecución de sus sentencias asociadas y el posterior abandono de la estructura completa. Se
utiliza para elegir uno de varios 'caminos' en el programa.

La última rama (else) es opcional. Si se escribe, sólo se ejecuta el bloque perteneciente a ella
si todas las expresiones lógicas anteriores han resultado falsas.

Veamos unos ejemplos de estas estructuras.


En el siguiente programa se estudia si un número n es múltiplo de 2 y/o de 3.

n=input (‘Introduce un entero’);

if rem(n,2)== 0

disp('Es múltiplo de 2')

end

if rem(n,3)== 0

disp('Es múltiplo de 3')

end
Obsérvese que las dos condiciones a estudiar son independientes: el cumplimiento o no de la
primera no induce a que la segunda se cumpla o no. Cuando ocurra esto se deben estudiar los
casos de forma independiente usando if simples.

En el siguiente programa, se elige entre una de dos alternativas posibles (par o impar). Un
número es par o es impar, no puede ser las dos opciones a la vez ni ninguna de ellas. Cuando
ocurran estos casos se debe utilizar la estructura if /else .

n=input ('Introduce un entero positivo');

if rem(n,2)== 0

disp('n es par')

else

disp('n es impar')

end

A continuación se incorpora al programa anterior una tercera opción, número negativo, que
aumenta a tres las posibilidades de elección. Cuando tengamos más de dos posibilidades
excluyentes se debe usar la estructura if /elseif/else .

n=input (‘Introduce un entero’);

if n<0

disp(‘n es negativo’)

elseif rem(n,2)== 0

disp(‘n es par’)

else

disp(‘n es impar’)

end

También podría gustarte