


















Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Algoritmo para el manejo de vectores en programación
Tipo: Diapositivas
1 / 26
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!



















Cuando finalice este tema, el alumno deber´a ser capaz de:
Definir vectores y matrices con Octave.
Comprender y utilizar la notaci´on de dos puntos para la creaci´on de listas.
Controlar el acceso y modificaci´on de elementos y conjuntos de elementos de vectores y matrices.
Realizar operaciones escalares con matrices.
Conocer los distintos tipos de matrices predefinidas por Octave.
Cuando finalice este tema, el alumno deber´a ser capaz de resolver problemas como el siguiente, cuya resoluci´on se indica a lo largo del propio tema.
Cin´etica de reacciones consecutivas
Algunas reacciones transcurren mediante la formaci´on de un intermediario, como en las reacciones consecutivas de primer orden A → B → C. Las ecuaciones que rigen estas reacciones, y que proporcionan la concentraci´on de cada especie en funci´on del tiempo t, son las siguientes:
[A] = [A] 0 e−k^1 t
[B] = k 1 [A] 0
{ e−k^1 t^ − e−k^2 t k 2 − k 1
}
[C] = [A] 0
{ 1 +
( k 1 e−k^2 t^ − k 2 e−k^1 t k 2 − k 1
)}
donde [A], [B] y [C] son las concentraciones de las respectivas especies, [A] 0 la concentraci´on inicial de A y k 1 y k 2 las constantes de velocidad. Escribe un programa que pida al usuario los valores de [A] 0 , k 1 y k 2 , y calcule las concentra- ciones de las tres especies en funci´on del tiempo. Comprueba el funcionamiento del programa cuando [A] 0 =1 mol/l, k 1 =0.1 s−^1 y k 2 =0.2 s−^1.
Ingenier´ıa Qu´ımica Programaci´on en Octave
2-4 Vectores y matrices
Octave tambi´en tiene definida la funci´on linspace(inicial,final,elementos) que permite crear un n´umero determinado de valores (elementos) distribuidos homo- g´eneamente entre dos l´ımites (inicial y final). Dicho de otra forma, en lugar de especificar el intervalo entre elementos (como se hac´ıa con la notaci´on de dos puntos) se indica el n´umero de elementos que queremos. Por ejemplo,
s = linspace(0,10,6) s = 0 2 4 6 8 10
crea un vector de 6 elementos equiespaciados entre 0 y 10. Tambi´en en este caso se podr´ıa crear un vector de valores decrecientes cambiando el orden de los valores inicial y final:
s = linspace(10,0,6) s = 10 8 6 4 2 0
Ejercicios
b I 1 ¿Qu´e vectores crean las siguientes instrucciones? Pi´ensalo antes de obtener el resultado con Octave.
a) [1:9] b) [-1:9] c) [1:2:9] d) [1:0.5:9]
e) [1:3:9] f) [9:-2:1] g) [9:-3:1] h) [9:-3:-1]
b I 2 Utiliza la funci´on linspace para crear los vectores del ejercicio anterior.
En ocasiones, nos interesa acceder a elementos determinados de un vector previamente definido, o bien modificar dichos elementos. Para ello, Octave permite el uso de ´ındices (expresados entre par´entesis), de forma que t(1) ser´ıa el primer elemento de t, t(2) el segundo, etc. Veamos un ejemplo:
t = [6 1 -1 12 4.4 -2.36 2 0.87 48 9 0] ; t(1) ans = 6 t(6) ans = -2.
Tambi´en puede utilizarse la notaci´on de dos puntos para acceder a un conjunto de elementos, en cuyo caso el resultado es un nuevo vector.
Universitat Jaume I Guillermo Peris Ripoll´es
r = t(1:3) r = 6 1 - s = t(10:-1:7) s = 9 48 0.87 2
En el ejemplo anterior, el vector r incluye los elementos de las posiciones 1-2-3 de t, y el vector s los elementos de las posiciones 10-9-8-7, en ese orden. De hecho, es posible acceder a elementos cualesquiera y en cualquier orden del vector mediante el uso de una lista de elementos. Por ejemplo, en las siguientes l´ıneas se crea un nuevo vector u eligiendo los elementos de las posiciones 3, 8, 1 y 6 de t, en este orden:
u = t([3 8 1 6]) u = -1 0.87 6 -2.
Mediante esta selecci´on de elementos de un vector, tambi´en podemos modificar vectores ya creados, mediante ´ordenes de asignaci´on. A continuaci´on se muestra un ejemplo a partir del vector t:
t(1) = 2 t = 2 1 -1 12 4.4 -2.36 2 0.87 48 9 0 t(4:6) = [5 4 3] t = 2 1 -1 5 4 3 2 0.87 48 9 0 t([11 7 10 8 9]) = [0 1 2 3 4] t = 2 1 -1 5 4 3 1 3 4 2 0
Fij´emonos en que en algunas de las instrucciones anteriores se realizan asignacio- nes m´ultiples. As´ı, en la segunda instrucci´on se asignan simult´aneamente 3 valores a 3 posiciones del vector t, mientras que en la tercera se realizan 5 asignaciones. Obvia- mente, si el n´umero de elementos a ambos lados del operador de asignaci´on es distinto, Octave no realizar´a ninguna asignaci´on, indic´andolo con un error.
t(4:6) = [5 4 3 2] error: A(I) = X: X must be a scalar or a vector with the same length as I ...........
Ingenier´ıa Qu´ımica Programaci´on en Octave
La funci´on size aplicada sobre una matriz (o vector) devuelve un vector de dos componentes con sus dimensiones en filas y columnas:
size(A) ans= 3 4
Podemos acceder a los elementos individuales de esta matriz indicando entre pa- r´entesis la fila y columna del elemento separadas por comas. As´ı,
ans = 7
De nuevo, la potente notaci´on de dos puntos de Octave puede utilizarse para crear submatrices a partir de una matriz original. Considera los siguientes ejemplos, en los que se utiliza la matriz A definida anteriormente:
b = A(2:3,3) b = 7 11 c = A(3,:) c = 9 10 11 12 d = A([2 3],[2 4]) d = 6 8 10 12
En la primera expresi´on, se crea un nuevo vector columna b tomando de las filas 2 y 3 los elementos de la tercera columna. En la segunda orden, utilizamos el operador ’:’ sin n´umeros que lo delimiten para indicar que nos interesan todos los elementos de la fila 3 de A. Por ´ultimo, en la expresi´on final creamos una nueva matriz tomando los elementos de las posiciones 2 y 4 de las filas 2 y 3.
Al igual que se vi´o en el caso de vectores, tambi´en podemos modificar los elementos de una matriz con la instrucci´on de asignaci´on =, siempre que las dimensiones a ambos lados del signo igual sean las mismas:
Ingenier´ıa Qu´ımica Programaci´on en Octave
2-8 Vectores y matrices
Por ´ultimo, tambi´en podemos construir nuevas matrices yuxtaponiendo matrices ya existentes, siempre que ´estas tengan las dimensiones adecuadas. F´ıjate en los si- guientes ejemplos:
error: number of columns must match (4 != 2)
Ejercicios
I 5 Define con Octave las siguientes matrices y comprueba sus dimensiones con la funci´on size.
A =
[ 1 2 3 4 5 6 7 8 9 10 11 12
] B =
1 7 2 8 3 9 4 10 5 11 6 12
C =
Universitat Jaume I Guillermo Peris Ripoll´es
2-10 Vectores y matrices
A = ones(3,2) A = 1 1 1 1 1 1
Matriz identidad : La funci´on eye crea una matriz en la que todos los ele- mentos son ceros a excepci´on de los elementos diagonales (aquellos en que los ´ındices de filas y columnas son iguales) que son unos. A esta matriz se le conoce como matriz identidad y se denota matem´aticamente como I. Los argumentos de esta funci´on son similares a los de las funciones anteriormente definidas. Aun- que, formalmente, las matrices identidad son cuadradas, esta funci´on de Octave permite la creaci´on de matrices identidad rectangulares.
A = eye(3) A = 1 0 0 0 1 0 0 0 1 B = eye(3,2) B = 1 0 0 1 0 0 C = [ 1 2 3 ; 4 2 5] C = 1 2 3 4 2 5 D = eye(size(C)) D = 1 0 0 0 1 0
Matriz diagonal: Se denomina as´ı a aquella matriz en la que todos los elemen- tos extradiagonales son ceros, es decir, ´unicamente presentan valores distintos de cero los elementos de la diagonal. Octave nos permite crear una matriz dia- gonal a partir de un vector, que situa en la diagonal de la matriz. Para ello utilizaremos la funci´on diag como sigue:
Y = diag(X) Y = 4 0 0 0 0 3 0 0 0 0 2 0 0 0 0 1
Por el contrario, si el argumento de la funci´on es una matriz, diag extrae el vector que contiene los elementos diagonales:
Universitat Jaume I Guillermo Peris Ripoll´es
2.5 Operaciones con matrices 2-
diag(A) ans = 1 5 9
Matriz aleatoria: La funci´on rand(n) crea una matriz de dimensi´on n × n con elementos aleatorios distribuidos uniformemente entre 0 y 1, mientras que con dos argumentos (rand(m,n)) crea una matriz de dimensiones m × n.
A = rand(4,5) A = 0.722684 0.678103 0.228702 0.648577 0. 0.336018 0.976399 0.458428 0.525437 0. 0.651192 0.483592 0.744526 0.952700 0. 0.464437 0.166825 0.163426 0.568459 0.
Ejercicios
I 7 Haciendo uso de las funciones vistas hasta ahora, define las siguientes matrices:
a)
1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
b)
1 0 0 0 0 1 0 0 0 0 1 1 0 0 1 1
c)
7 0 0 0 0 9 0 0 0 0 11 0 0 0 0 13
d)
2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2
b I 8 Dada una matriz A cualquiera, ¿a qu´e es igual la operaci´on diag(diag(A))? Para comprobar tu respuesta, apl´ıcalo a una matriz A aleatoria de dimensiones 3 × 3 creada con la funci´on rand.
La matriz transpuesta de una matriz A de dimensi´on m × n es una matriz de n × m en la que el elemento (i, j) ha pasado a la posici´on (j, i), o dicho coloquialmente, se han intercambiado las filas y columnas de A. Por ejemplo, la matriz transpuesta de
es
Ingenier´ıa Qu´ımica Programaci´on en Octave
2.5 Operaciones con matrices 2-
La matriz B se construye multiplicando por 2 cada uno de los elementos de A, mientras que C se define restando 2 a los elementos de B.
Pero, ¿qu´e ocurre si queremos multiplicar dos matrices de dimensiones semejantes elemento a elemento?. En ese caso no podemos utilizar el operador ’*’, ya que ´este realizar´ıa un producto matricial (explicado en una secci´on posterior), cuyo resultado ser´ıa distinto al esperado. En general, para realizar operaciones escalares con matrices utilizaremos los operadores antecedidos de un punto. Para entenderlo mejor, vamos a seguir una serie de ejemplos utilizando vectores:
Las sumas y restas de matrices (siempre que sus dimensiones sean las mismas) se consideran en el algebra matricial como operaciones elemento a elemento (al con- trario que las multiplicaciones y divisiones) por lo que, aunque podemos utilizar los operadores .+ y .-, el punto no es necesario.
ans = 4 8 11 A - B ans = 0 2 1
Tambi´en pueden realizarse exponenciaciones elemento a elemento, como se muestra en el siguiente ejemplo:
As´ı pues, en general, s´olo ser´a necesario anteceder el operador con un punto en el caso de multiplicaciones, divisiones y exponenciaciones cuando se pretenda realizar una operaci´on elemento a elemento.
Ingenier´ıa Qu´ımica Programaci´on en Octave
2-14 Vectores y matrices
Estas operaciones, adem´as de ser v´alidas para vectores, tambi´en lo son para ma- trices, como se observa en los siguientes ejemplos:
d = [1:5; -1:-1:-5] d = 1 2 3 4 5 -1 -2 -3 -4 - p = d.* p = 5 10 15 20 25 -5 -10 -15 -20 - q = d.∧ 3 q = 1 8 27 64 125 -1 -8 -27 -64 -
Ejercicios
I 9 Calcula los valores del vector C tras ejecutar las ´ordenes que se indican, utilizando los vectores A = [2 -1 5 0] y B = [3 2 -1 4]. Comprueba tus respuestas con Octave. a) C = B + A -3; b) C = A./B; c) C = A.∧B; d) C = 2A + A.∧B; e) C = 2.∧B + A; f) C = 2B/3.*A;
b I 10 Crea un vector x con los siguientes elementos: a) 1, 1 / 2 , 1 / 3 , 1 / 4 , 1 / 5 , 1 / 6 b) 0, 1 / 2 , 2 / 3 , 3 / 4 , 4 / 5
Las funciones matem´aticas de Octave actuan sobre las matrices del mismo modo que las operaciones escalares, es decir, se aplican elemento a elemento. Veamos un ejemplo:
x = pi*[0:0.1:0.9]; y = cos(x) y = Columns 1 through 5: 1.0000e+00 9.5106e-01 8.0902e-01 5.8779e-01 3.0902e- Columns 6 through 10: 6.1230e-17 -3.0902e-01 -5.8779e-01 -8.0902e-01 -9.5106e-
Universitat Jaume I Guillermo Peris Ripoll´es
2-16 Vectores y matrices
Utilicemos vectores y matrices concretos para entender mejor la acci´on de estas funciones.
v = [3 4 1 9 5 6] v = 3 4 1 9 5 6 M = [0.6 1.5 2.3 -0.5 ; 8.2 0.5 -0.1 -2.0; 5.7 8.2 9.0 1.5 ; ... 0.5 0.5 2.4 0.5 ; 1.2 -2.3 -4.5 0.5] M = 0.6 1.5 2.3 -0. 8.2 0.5 -0.1 - 5.7 8.2 9 1. 0.5 0.5 2.4 0. 1.2 -2.3 -4.5 0. max(v) ans = 9 max(M) ans = 8.2 8.2 9 1.
La funci´on max devuelve, al ser aplicada a un vector, el valor m´aximo del mismo, en este caso 9. Sin embargo, al tener como argumento una matriz devuelve un vector fila en el que cada elemento es el m´aximo de la columna correspondiente de la matriz original. La funci´on sum presenta un comportamiento similar con vectores y matrices, sumando las componentes de un vector y las componentes de cada columna en una matriz, como se muestra en el siguiente ejemplo:
sum(v) ans = 28 sum(M) ans = 16.2 8.4 9.1 0
La funci´on length calcula la longitud del vector, o sea, el n´umero de elementos que contiene. En el caso de una matriz, devuelve el n´umero m´aximo de filas o columnas, es decir, la dimensi´on de la matriz de mayor valor.
length(v) ans = 6
length(M) ans = 5
La funci´on mean calcula la media de los elementos del vector, es decir, la suma de sus elementos dividida por el n´umero de ellos. Esto se aplica sobre las columnas al tener como argumento una matriz.
Universitat Jaume I Guillermo Peris Ripoll´es
2.5 Operaciones con matrices 2-
mean(v) ans =
mean(M) ans = 3.24 1.68 1.82 0
Por ´ultimo, la funci´on sort ordena los elementos de un vector, mientras que en el caso de matrices ordena de forma independiente cada una de sus columnas.
sort(v) ans = 1 3 4 5 6 9 sort(M) ans = 0.5 -2.3 -4.5 - 0.6 0.5 -0.1 -0. 1.2 0.5 2.3 0. 5.7 1.5 2.4 0. 8.2 8.2 9 1.
Ejercicios
I 12 Determina las matrices devueltas por las siguientes llamadas a funci´on, verificando posteriormente tus respuestas con Octave. Deber´as definir previamente las siguientes variables:
w =
[ 0 3 − 2 7
] x =
[ 3 − 1 5 7
] y =
1 3 7 2 8 4 6 − 1 − 2
a) max(w) b) min(y) c) mean(y) d) median(w)
e) sort(2*w+x) f) sort(y) g) length(w) h) length(y)
I 13 En Octave, ¿es equivalente mean(x) y sum(x)/length(x)? Compru´ebalo con los si- guientes vector y matriz y trata de dar una explicaci´on a tus observaciones.
w =
[ 0 3 − 2 7
] y =
[ 1 3 7 2 8 4
]
b I 14 ¿C´omo calcular´ıas el valor m´aximo de entre todos los elementos de una matriz?
Ingenier´ıa Qu´ımica Programaci´on en Octave
antes del producto para convertirlo en un vector columna. Si no lo hubi´eramos hecho, habr´ıamos obtenido un mensaje de error^3 :
??? Error using ==>* Inner matrix dimensions must agree.
El producto escalar de dos vectores es muy importante en algebra vectorial y en f´ısica. Ejercicios
b I 15 A partir de los siguientes vectores, indica cu´ales de las siguientes operaciones son correctas, calculando su valor. A =
[ 5 3 − 1
] B = ones(1, 3) C =
[ 9 4 0
]
D = eye(1, 4) E =
[ − 1 3 − 5 7
]
a) AB b) AB’ c) BA’ d) AC’
e) B*C’
f) B*D’
g) E*D’
La multiplicaci´on de matrices no es una operaci´on elemento a elemento, es decir, no se efect´ua multiplicando los elementos correspondientes de las matrices operando. Si realizamos la multiplicaci´on C = A × B, el elemento cij no se calcula como aij × bij , sino como el producto escalar de los vectores correspondientes a la fila i de la matriz A y la columna j de la matriz B. En la figura 2.1 se muestra gr´aficamente esta operaci´on (^4). Aqu´ı se observa que si queremos multiplicar dos matrices A (m × n) y B (p × q), el n´umero de columnas de A debe coincidir con el n´umero de filas de B, es decir, n = p.
ij c fila i m
n
p
q
columna j m
q
= x
C = A x B
Figura 2.1: Multiplicaci´on de matrices.
Una forma sencilla de decidir si podemos multiplicar dos matrices es escribir las tallas de las dos matrices juntas. De esta forma, si las dos dimensiones interiores coinci- den, las matrices se pueden multiplicar y la dimensi´on de la matriz resultante coincide (^3) Podr´ıamos haber obtenido el resultado correcto utilizando la siguiente expresi´on: sum(A.*B). (^4) ¡Cuidado!. De esta definici´on se infiere que el producto de matrices no es conmutativo, es decir, A × B 6 = B × A.
Ingenier´ıa Qu´ımica Programaci´on en Octave
2-20 Vectores y matrices
con las dimensiones externas. Por ejemplo, supongamos que queremos multiplicar una matriz de 2 × 3 por otra de 3 × 3 (en ese orden). ︷ ︸︸ ︷ 2 × (^3) ︸︷︷︸ , 3 × 3
Al ser los dos n´umeros internos iguales, la multiplicaci´on es v´alida, y las dimen- siones de la matriz resultante son los n´umeros externos, es decir, 2 × 3. Consideremos las matrices siguientes:
El producto de estas matrices se realizar´ıa como sigue:
En Octave, esta operaci´on se realizar´ıa de forma sencilla con el operador de multipli- caci´on:
??? Error using ==>* Inner matrix dimensions must agree.
Fij´emonos en que Octave no permite el producto B × A por no ser adecuadas las dimensiones de las matrices. Recordemos que si A es una matriz, A.∧ 2 es la operaci´on que eleva al cuadrado cada elemento de la matriz. Si queremos calcular propiamente el cuadrado de la matriz, es decir, AA, podemos ejecutar la orden A∧ 2. De este modo, A∧ 4 es equivalente a AAAA. Si tenemos en cuenta que en el producto de matrices el n´umero de columnas del primer operando ha de ser igual al n´umero de filas del segundo, deducimos que unicamente podemos obtener potencias de matrices cuadradas.´
ans = 27 24 18 − 87 24 − 66 33 54 3
Universitat Jaume I Guillermo Peris Ripoll´es