Práctica 7: Vectores y Matrices (II)

Anuncio
Fonaments d’Informàtica
1r curs d’Enginyeria Industrial
Práctica 7: Vectores y
Matrices (II)
Objetivos de la práctica
El objetivo de las prácticas 6 y 7 es introducir las estructuras de datos
vector y matriz en el lenguaje MATLAB.
MATLAB es fundamentalmente un programa para el cálculo matricial.
Matrices
Una matriz es, como el vector, una colección de elementos del mismo tipo.
Sin embargo, mientras el vector es unidimensional —una sóla fila o
columna— en la matriz los datos se organizan en dos o más dimensiones.
Por ejemplo, a continuación tenemos una matriz M de dimensión 3x4 (3
filas x 4 columnas):
1
2
3
1
2
3
4
-5
3
6
4
2
3
1
10
-1
-2
-5
0
Para acceder a los elementos de una matriz n-dimensional necesitamos n
índices. En el caso de la matriz anterior, para acceder a cualquiera de sus
elementos debemos escribir el nombre de la matriz y entre paréntesis la fila
y columna en la que está: matriz (fila, columna).
Por ejemplo: M(3, 2), M(1, 4), etc.
Definir matrices en MATLAB
En MATLAB, se puede definir la matriz anterior M del siguiente modo:
M = [-5, 4, 1, -2; 3, 2, 10, -5; 6, 3, -1, 0]
Es decir, los elementos de cada fila se separan por puntos y comas.
Mientras que los elementos de la misma fila están separados por comas (o
espacios en blanco).
MATLAB dispone de un gran número de funciones para construir matrices
predefinidas.
Se puede inicializar una matriz a ceros (todos los elementos son 0)
mediante la función zeros. Por ejemplo:
>> M=zeros(3)
% inicializa a 0'
s una matriz
M =
% cuadrada 3x3
0 0 0
0 0 0
0 0 0
>> A = zeros (3, 5) % inicializa a 0'
s una
A =
% matriz 3x5
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Se recomienda inicializar todas las matrices que se utilicen a ceros.
También está predefinida la matriz identidad llamando a la función eye:
>> eye(3)
ans=
1 0 0
0 1 0
0 0 1
Otra función muy útil es size(mat). Esta función devuelve un vector
con las dimensiones de la matriz. Por ejemplo, para las matrices anteriores
M y A devolverá:
>> [nfilasM, ncolsM]=size(M)
nfilasM =
3
ncolsM =
3
>>[nfilasA, ncolsA]=size(A)
nfilasA =
3
ncolsA =
5
Recorrido de un matriz
Para recorrer una matriz necesitamos dos bucles anidados. Por ejemplo, si
se desea recorrer todos los elementos de la matriz A por filas, se escribirán
dos sentencias for anidadas:
for i=1: nfilasA
% para cada fila
for j=1: ncolsA
sentencias
end
end
También es posible recorrer la matriz por columnas:
for j=1: ncolsA
% para cada columna
for i=1: nfilasA
sentencias
end
end
O recorrer la matriz triangular superior de una matriz cuadrada:
for i=1: nfilasM
for j=i: ncolsM
sentencias
end
end
Y de forma similar para la triangular inferior.
Ejercicio: ¿Qué instrucciones necesitaremos para escribir los elementos de
la diagonal de una matriz cuadrada? ¿Son necesarios dos bucles?
Ejercicios
1. Escribir una función que sume todos los elementos de una matriz
numérica de tamaño n x m.
2. Escribir una función que devuelva la media de los elementos de una
matriz numérica de tamaño n x m.
3. Un profesor quiere analizar los resultados de los exámenes que propone
a sus alumnos. Cada alumno se examina 3 veces en un curso. Y en cada
ocasión realiza dos tipos de examen: un test y uno de problemas. Por
tanto, en total son 6 exámenes por alumno.
a) Calcular la media por cada tipo de examen en cada convocatoria. La
función debe devolver un vector con las 6 medias.
b) Calcular la media por alumno. También se devolverá un vector con
todas las medias.
c) Escribir una función que indique el número de alumnos cuya nota
media es superior a la media de todos los exámenes para todos los
alumnos.
Ejemplo de matriz para este ejercicio:
Alu
mno
1
2
3
4
5
6
7
8
9
10
T1
1
9.3
3.5
9.1
4.5
8.2
3.5
7.4
2.5
8.6
6.2
P1
2
4.8
5.2
8.6
5.6
7.0
5.2
3.5
3.5
7.1
3.7
exámenes
T2
P2
3
4
5.3
6.9
5.9
7.5
5.6
8.4
6.0
6.5
7.9
9.5
4.5
6.5
6.5
5.4
4.3
3.1
9.4
6.5
4.5
6.9
T3
5
7.4
6.4
7.5
6.5
9.2
4.0
6.1
6.2
8.9
5.5
P3
6
8.8
3.9
6.9
8.0
9.4
6.0
6.5
4.1
7.5
5.5
En la página web de la asignatura tenéis un fichero de texto
examen.txt' con estos datos que podéis utilizar. Para leer los datos
'
del fichero en una matriz M, basta con escribir la instrucción:
M= load ('
nombre_fichero'
);
4. Tres en raya. Para jugar al 3 en raya se utiliza una matriz 3x3. Las
casillas ocupadas por el primer jugador tienen un 1, las ocupadas por el
segundo tienen un 2 y las que están libres un 0.
a) Escribir una función que indique si el jugador 1 tiene "3 en raya" en
horizontal.
b) Escribir una función que indique si el jugador 1 tiene "3 en raya" en
vertical.
c) Escribir una función que indique si el jugador 1 tiene "3 en raya" en
cualquiera de las dos diagonales del tablero.
d) Utilizando las funciones anteriores, escribir una función que indique
si el jugador 1 tienen 3 en raya (en cualquier posición).
5. Diseñar una función que multiplique dos matrices. Para ello, el número
de columnas de la primera debe ser igual al número de filas de la
segunda. La función debe mostrar un mensaje si esto no se cumple y,
por tanto, no es posible realizar la multiplicación.
Descargar