Práctica 2: Aritmética de la máquina y´Algebra Lineal con MATLAB

Anuncio
Práctica 2: Aritmética de la máquina y Álgebra
Lineal con MATLAB
1.
1.1.
Aritmética de la máquina
Introducción
Recordemos que MATLAB realiza todos los cálculos siguiendo el estándar
IEEE en punto flotante, aunque a partir de la versión 7 se admiten valores
tanto en simple como en doble precisión. Por defecto (si no se especifica lo
contrario), todo valor se considera de doble precisión, pero esto se puede indicar por medio de modificadores single y double. Por ejemplo, el épsilon
de la máquina en doble precisión es M ≈ 10−16 , lo que se puede comprobar
con el comando
>> eps
ans =
2.2204e-016
A su vez eps(’single’) nos devuelve
ans =
1.1921e-007
Se pueden crear variables de simple o doble precisión por medio de los mismos comandos single y double:
>> x=single(1/3);
Podemos averiguar el tipo de variable usando la función class:
>> class(x)
ans =
single
El valor NaN (“Not-A-Number”) de MATLAB está en correspondencia
con el estándar mencionado, y es producido por cualquier “indeterminación”:
>> 0/0
ans =
NaN
Práctica de ordenador II
2
Una vez generado, es propagado a cualquier cálculo:
>> 0*NaN
ans =
NaN
1.2.
Trabajo de laboratorio
Resuelva, con la ayuda de MATLAB, los siguientes problemas:
1. El mayor (respectivamente, menor ) número real positivo con representación normalizada es almacenado por MATLAB en la variable
realmax (respectivamente, realmin).
a) Compruebe que esos valores coinciden con los estudiados en teorı́a,
tanto en simple como en doble precisión.
b) ¿Qué valor espera obtener usted como resultado de cada una de
las operaciones siguientes:
1.1*realmax, -2*realmax, eps*realmin, eps*realmin/2?
Conteste primero y ejecute las operaciones después; interprete el
resultado en cada caso.
2. MATLAB admite operaciones entre variables en punto flotante de
precisiones diferentes. ¿Qué resultado cree usted que se obtiene al
multiplicar un valor de doble y otro de simple precisión y por qué?
Experimente creando una variable de doble y otra de simple precisión.
3. Analice el siguiente script (utilice la ayuda de MATLAB para los
comandos nuevos):
n=0; x=1;
while x >0,
x=x/2;
n=n+1;
fprintf(’2^(-%d) = %e \n’, n, x)
end
Ejecútelo e interprete el resultado. ¿Qué relación tiene con lo que obtuvo en el ejercicio anterior?
4. (Opcional): Modifique el script anterior, asignando en cada ciclo while
el valor y=x+1 y haciendo que éste continúe mientras y > 1. Ejecútelo
y mire para qué valor de x se ha detenido. Compare el resultado con
el del ejercicio anterior y dé una interpretación del mismo.
Andrei Martı́nez Finkelshtein
Práctica de ordenador II
2.
2.1.
3
Álgebra Lineal
Introducción
A lo largo de la Práctica 1 hemos visto en particular cómo se crean
las matrices (y vectores) y algunas operaciones básicas entre ellos. Ahora
ahondaremos en algunos aspectos adicionales relacionados con el álgebra
lineal.
Muchas matrices especiales no es necesario especificar “a mano”, sino
que tienen funciones predefinidas para crearlas; entre ellas están
eye(m,n) devuelve la matriz m × n con 1 en la diagonal principal y 0
en las demás posiciones; en particular, ones(n) es la matriz identidad
n × n;
ones(m,n) devuelve la matriz m × n con 1 en todas las posiciones;
en particular, ones(n) de unos n × n. De manera análoga funciona
zeros(m,n) y zeros(n);
rand(m,n) devuelve la matriz m × n con valores aleatorios uniformemente distribuidos en [0, 1]; en particular, rand(n) es la matriz
aleatoria n × n. El comando randn(m,n) tiene una función análoga,
excepto que los números obedecen a la distribución normal con media
0 y desviación estándar σ = 1;
diag construye matrices diagonales o devuelve la diagonal de una matriz, en dependencia del contexto:
• si v es un vector de n componentes, diag(v,k) devuelve una
matriz cuadrada de orden n + |k|, con los elementos de v en la
k-ésima diagonal: k = 0 (por defecto) representa la diagonal principal, k > 0 son las que están por encima, y k < 0 las que están
por debajo de la diagonal principal. En particular, diag(v) crea
una matriz diagonal con v en la diagonal principal.
• si X es una matriz, diag(X,k) devuelve un vector columna, formado por los elementos de la k-ésima diagonal de X. En particular,
diag(X) devuelve el vector (columna) de la diagonal principal de
X.
Además de las habituales (*,+,-), MATLAB incorpora diversas funciones para utilizar con matrices; entre ellas,
inv calcula la inversa de una matriz;
det calcula el determinante de una matriz;
rank calcula el rango de una matriz.
Andrei Martı́nez Finkelshtein
Práctica de ordenador II
4
Por último, en MATLAB están definidas dos divisiones: izquierda y
derecha, que aplicadas a matrices o vectores tienen el siguiente sentido:
A/B ⇔ AB −1 ,
A\B ⇔ A−1 B .
En realidad, son operaciones mucho más versátiles de lo que se explica aquı́,
y que iremos descubriendo a lo largo del curso.
2.2.
Trabajo de laboratorio
Resuelva, con la ayuda de MATLAB, los siguientes problemas:
1. Escriba una función de MATLAB llamada menores,
function [y]=menores(A,k)
que tenga como variables A y k y que devuelva la submatriz cuadrada
k × k de la matriz A correspondiente al menor principal de ese orden.
2. Recuerde que un criterio suficiente para que una matriz A sea definida positiva es que todos sus menores principales sean estrictamente
positivos. Modifique la función menores del ejercicio anterior para
que devuelva la lista de todos los menores principales de la matriz
argumento. Use la función menores para verificar si las matrices




21
−13 −200
21 −13 2
 −13 133 14  y  −13 133
14 
−200 14
5
2
14
5
son definidas positivas.
3. Defina la matriz


1/2 1/3 1/4
 1/3 1/4 1/5 
1/4 1/5 1/6
y ası́gnela a la variable B. Calcule también su inversa y ası́gnela a C.
Realice la comprobación de la certeza del resultado.
4. Verifique si el siguiente sistema de ecuaciones es compatible:
3u + 4v − 6x + 5z = −8;
2u − 12v + z = 10;
−u + v − 14x + y + z = 20;
10v + 10x − y − 3z = 6;
2u − 3v + y = −5;
En caso de que lo sea, resuélvalo por dos vı́as:
a) por medio de la división matricial (operador \);
b) por medio de la inversa de la matriz.
Andrei Martı́nez Finkelshtein
Descargar