12.05.2013 Views

Práctica de resolución de sistemas de ecuaciones lineales con ...

Práctica de resolución de sistemas de ecuaciones lineales con ...

Práctica de resolución de sistemas de ecuaciones lineales con ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Índice<br />

<strong>Práctica</strong> <strong>de</strong> <strong>resolución</strong> <strong>de</strong> <strong>sistemas</strong> <strong>de</strong><br />

<strong>ecuaciones</strong> <strong>lineales</strong> <strong>con</strong> MATLAB<br />

J. Mas, X. Casabán y J. Marín<br />

1. Introducción 1<br />

2. La or<strong>de</strong>n \ <strong>de</strong> MATLAB para resolver <strong>sistemas</strong> <strong>de</strong> <strong>ecuaciones</strong><br />

<strong>lineales</strong> 2<br />

3. Las factorizaciones LU y <strong>de</strong> Cholesky en MATLAB 3<br />

3.1. La factorización LU . . . . . . . . . . . . . . . . . . . . . . . 4<br />

3.2. La factorización <strong>de</strong> Cholesky . . . . . . . . . . . . . . . . . . . 9<br />

4. Errores numéricos al aplicar el algoritmo <strong>de</strong> Gauss 13<br />

5. La or<strong>de</strong>n linsolve 13<br />

1. Introducción<br />

En toda la práctica tratamos <strong>de</strong> resolver el sistema<br />

Ax = b (1)<br />

don<strong>de</strong> suponemos que A es una matriz cuadrada <strong>con</strong> n filas y n columnas<br />

invertible.<br />

MATLAB dispone <strong>de</strong> varios programas para resolver <strong>sistemas</strong> <strong>de</strong> <strong>ecuaciones</strong><br />

<strong>lineales</strong> utilizando métodos directos o métodos iterativos basados en<br />

subespacios <strong>de</strong> Krylov. En esta práctica estudiaremos sólo métodos directos.<br />

1


2. La or<strong>de</strong>n \ <strong>de</strong> MATLAB para resolver <strong>sistemas</strong><br />

<strong>de</strong> <strong>ecuaciones</strong> <strong>lineales</strong><br />

Para resolver el sistema (1) utilizando un método directo <strong>con</strong> el programa<br />

MATLAB hay que utilizar el comando \. Descrito brevemente A\B es A −1 B,<br />

por tanto para resolver (1) basta escribir A\b, en realidad se pue<strong>de</strong> aplicar<br />

para obtener la solución <strong>de</strong>l sistema AX = B, don<strong>de</strong> B es una matriz <strong>con</strong> el<br />

mismo número <strong>de</strong> filas que A y un número cualquiera <strong>de</strong> columnas. El algoritmo<br />

que aplica MATLAB <strong>de</strong>pen<strong>de</strong> <strong>de</strong> la matriz A. Se proce<strong>de</strong> <strong>de</strong> la siguiente<br />

forma (traducción casi literal <strong>de</strong> la ayuda <strong>de</strong> MATLAB prescindiendo <strong>de</strong> las<br />

referencias a matrices dispersas):<br />

Si A es una matriz triangular o una permutación <strong>de</strong> una matriz triangular,<br />

entonces X pue<strong>de</strong> calcularse rápidamente por un algoritmo <strong>de</strong><br />

sustitución regresiva permutado.<br />

Si A es simétrica o hermítica y tiene elementos positivos en la diagonal<br />

principal, se intenta hacer una factorización <strong>de</strong> Cholesky. Si se encuentra<br />

que A es <strong>de</strong>finida positiva, el intento <strong>de</strong> calcular la factorización <strong>de</strong><br />

Cholesky tiene éxito y requiere menos <strong>de</strong> la mitad <strong>de</strong>l tiempo que una<br />

factorización general. Normalmente las matrices no <strong>de</strong>finidas positivas<br />

se <strong>de</strong>tectan casi inmediatamente, por tanto esta comprobación requiere<br />

poco tiempo. Si tiene éxito la factorización <strong>de</strong> Cholesky es A = R T R,<br />

don<strong>de</strong> R es triangular superior. La solución X se calcula resolviendo<br />

dos <strong>sistemas</strong> triangulares X=R\(R’\B)<br />

Si A es una matriz <strong>de</strong> Hessenberg (es <strong>de</strong>cir una matriz <strong>con</strong> los elementos<br />

situados por <strong>de</strong>bajo <strong>de</strong> la diagonal principal nulos, excepto los <strong>de</strong> la<br />

diagonal inmediatamente <strong>de</strong>bajo <strong>de</strong> la principal: aij = 0, si i > j +1), a<br />

partir <strong>de</strong> la versión 6 <strong>de</strong> MATLAB, la matriz se reduce a triangular superior<br />

y ese sistema se resuelve por sustitución regresiva. En versiones<br />

anteriores se sigue el procedimiento general, <strong>de</strong>scrito a <strong>con</strong>tinuación.<br />

Si A es cuadrada pero no es una permutación <strong>de</strong> una matriz triangular,<br />

o no es hermítica <strong>con</strong> elementos positivos en la diagonal principal, o<br />

la factorización <strong>de</strong> Cholesky fracasa entonces se calcula una factorización<br />

triangular general por el método <strong>de</strong> eliminación gaussiana <strong>con</strong><br />

pivotamiento parcial (ver la or<strong>de</strong>n lu en la sección 3). Esto da como<br />

resultado A = LU, don<strong>de</strong> L es una permutación <strong>de</strong> una matriz triangular<br />

inferior y U es una matriz triangular superior. Entonces X se<br />

calcula resolviendo dos <strong>sistemas</strong> triangulares permutados X=U\(L\B).<br />

2


La <strong>de</strong>scripción <strong>de</strong> la ayuda <strong>de</strong> MATLAB sigue puesto que \ también<br />

se utiliza para obtener la solución <strong>de</strong> mínimos cuadrados cuando A no es<br />

cuadrada.<br />

Como se pue<strong>de</strong> ver \ utiliza el mejor algoritmo directo posible en función<br />

<strong>de</strong> las propieda<strong>de</strong>s <strong>de</strong> la matriz A. Po<strong>de</strong>mos comprobar esta afirmación<br />

viendo que el tiempo necesario para resolver los diferentes <strong>sistemas</strong> cambia<br />

en función <strong>de</strong> cómo son (<strong>de</strong> todas formas <strong>con</strong>viene tener en cuenta que el<br />

tiempo <strong>de</strong> <strong>resolución</strong> <strong>de</strong>pen<strong>de</strong> <strong>de</strong> muchos factores, algunos <strong>de</strong> ellos externos<br />

a MATLAB, y por tanto es muy variable).<br />

Ejercicio 1 Ejecutar las siguientes ór<strong>de</strong>nes y comparar los tiempos, or<strong>de</strong>nándolos<br />

<strong>de</strong> mayor a menor. Tener en cuenta que A es una matriz sin<br />

ninguna propiedad especial, B es simétrica y <strong>de</strong>finida positiva (excepto en el<br />

improbable caso <strong>de</strong> que A no sea invertible) y T es triangular superior y H<br />

es una matriz <strong>de</strong> Hessenberg 1<br />

>> n = 1000;<br />

>> A = randn(n);<br />

>> T = triu(A);<br />

>> H = triu(A, -1);<br />

>> B = A’*A;<br />

>> b = randn(n,1);<br />

>> tic, A\b; toc<br />

>> tic, T\b; toc<br />

>> tic, H\b; toc<br />

>> tic, B\b; toc<br />

3. Las factorizaciones LU y <strong>de</strong> Cholesky en<br />

MATLAB<br />

Como se ha visto en la sección 2 la or<strong>de</strong>n \ <strong>de</strong> MATLAB utiliza la factorización<br />

LU <strong>con</strong> pivotamiento parcial o la factorización <strong>de</strong> Cholesky para<br />

resolver el sistema (1) según sea la matriz A. De todas formas se pue<strong>de</strong>n<br />

calcular estas factorizaciones.<br />

1 La or<strong>de</strong>n spy(H) mostrará los elementos no nulos <strong>de</strong> H.<br />

3


3.1. La factorización LU<br />

La or<strong>de</strong>n para calcular la factorización LU <strong>de</strong> la matriz A es lu. Sólo<br />

requiere un dato que es la propia matriz A, pero se le pue<strong>de</strong>n pedir como<br />

resultado una, dos o tres matrices.<br />

Si se pi<strong>de</strong>n tres matrices ([L, U, P] = lu(A)), L es una matriz triangular<br />

inferior <strong>con</strong> unos en la diagonal principal, U es triangular superior y P<br />

es una matriz <strong>de</strong> permutación tal que P A = LU. Para resolver (1) se pue<strong>de</strong><br />

utilizar la or<strong>de</strong>n U\(L\(P*b)).<br />

Si se le pi<strong>de</strong>n dos matrices ([L, U] = lu(A)), L es una matriz psicológicamente<br />

2 triangular inferior, en realidad es el producto <strong>de</strong> la inversa <strong>de</strong> la<br />

matriz <strong>de</strong> permutación que se ha aplicado por la matriz triangular inferior<br />

que proporciona la factorización, y U es triangular superior. Se pue<strong>de</strong><br />

resolver (1) <strong>con</strong> las ór<strong>de</strong>nes U\(L\b).<br />

Por último si sólo se pi<strong>de</strong> una matriz se obtiene una matriz <strong>con</strong> los<br />

elementos no nulos <strong>de</strong> U y los no nulos y que no correspon<strong>de</strong>n a un uno <strong>de</strong><br />

la diagonal principal <strong>de</strong> L. Esta matriz no es en realidad muy útil.<br />

Ejemplo 1 Vamos a utilizar la factorización LU para resolver un sistema<br />

<strong>de</strong> <strong>ecuaciones</strong> <strong>lineales</strong><br />

» A=[3 -1 2 4; 2 0 -1 3; 7 2 1 4; 0 -1 2 3];<br />

» b=[2 -1 3 9]’;<br />

» [L,U]=lu(A)<br />

L =<br />

U =<br />

0.42857 1 0 0<br />

0.28571 0.30769 1 0<br />

1 0 0 0<br />

0 0.53846 -0.65217 1<br />

7 2 1 4<br />

0 -1.8571 1.5714 2.2857<br />

0 0 -1.7692 1.1538<br />

0 0 0 2.5217<br />

2 Según la ayuda <strong>de</strong> MATLAB<br />

4


» sol=U\(L\b)<br />

sol =<br />

-3.2931<br />

5.7414<br />

3.0517<br />

2.8793<br />

» sol2=A\b<br />

sol2 =<br />

-3.2931<br />

5.7414<br />

3.0517<br />

2.8793<br />

» sol==sol2<br />

ans =<br />

1<br />

1<br />

1<br />

1<br />

se observa que L no es triangular inferior, pero es muy fácil reor<strong>de</strong>narla<br />

intercambiando filas para que lo sea. También se ha comprobado que la<br />

solución proporcionada por el comando \ <strong>de</strong> MATLAB coinci<strong>de</strong> exactamente<br />

<strong>con</strong> la calculada utilizando la factorización LU. Aunque en el cálculo <strong>de</strong> ésta<br />

se han realizado más operaciones que <strong>con</strong> \ se precisa menos tiempo, esto se<br />

<strong>de</strong>be a que \ realiza una serie <strong>de</strong> comprobaciones previas.<br />

Seguimos ahora calculando <strong>con</strong> la misma matriz, pero obteniendo la matriz<br />

<strong>de</strong> permutación.<br />

» [L,U,P]=lu(A)<br />

L =<br />

5


U =<br />

P =<br />

» P*A-L*U<br />

ans =<br />

1 0 0 0<br />

0.42857 1 0 0<br />

0.28571 0.30769 1 0<br />

0 0.53846 -0.65217 1<br />

7 2 1 4<br />

0 -1.8571 1.5714 2.2857<br />

0 0 -1.7692 1.1538<br />

0 0 0 2.5217<br />

0 0 1 0<br />

1 0 0 0<br />

0 1 0 0<br />

0 0 0 1<br />

0 0 0 0<br />

0 0 0 0<br />

0 0 0 0<br />

0 0 0 0<br />

» sol=U\(L\(P*b))<br />

sol =<br />

-3.2931<br />

5.7414<br />

3.0517<br />

2.8793<br />

6


ahora L es realmente triangular inferior. Nótese que para calcular la solución<br />

hay que reor<strong>de</strong>nar el vector b multiplicándolo por P .<br />

Por último<br />

» LU=lu(A)<br />

LU =<br />

7 2 1 4<br />

-0.28571 -1.8571 1.5714 2.2857<br />

-0.42857 -0.30769 -1.7692 1.1538<br />

0 -0.53846 0.65217 2.5217<br />

como pue<strong>de</strong> verse están los elementos <strong>de</strong> L y <strong>de</strong> U, pero es difícil re<strong>con</strong>struir<br />

ambas matrices, por lo que esta forma <strong>de</strong> utilizar la or<strong>de</strong>n lu no es<br />

recomendable.<br />

Ejercicio 2 Si A = LU es la factorización LU <strong>de</strong> A, entonces<br />

aij =<br />

n<br />

r=1<br />

lirurj,<br />

pero teniendo en cuenta la estructura triangular <strong>de</strong> las matrices L y U, la<br />

expresión anterior se reduce a<br />

aij =<br />

mín(i,j) <br />

r=1<br />

lirurj,<br />

que si se or<strong>de</strong>nan a<strong>de</strong>cuadamente, y recordando que lkk = 1 son sencillas <strong>de</strong><br />

resolver. Supongamos pues que A ∈ R m×n , don<strong>de</strong> m ≥ n y que L ∈ R m×n<br />

es trapezoidal inferior (lij = 0, si i < j) y que U ∈ R n×n . Si se <strong>con</strong>ocen las<br />

primeras k − 1 columnas <strong>de</strong> L y las primeras k − 1 filas <strong>de</strong> U, como lkk = 1,<br />

se tiene:<br />

akj = lkju1j + · · · + lk,k−1uk−1,j + ukj , j = k, k + 1, . . . , n.<br />

aik = li1u1k + · · · + lik ukk, i = k + 1, . . . , m.<br />

don<strong>de</strong> los elementos recuadrados pue<strong>de</strong>n calcularse fácilmente. Este proceso<br />

se <strong>con</strong>oce <strong>con</strong> el nombre <strong>de</strong> método <strong>de</strong> Doolittle y da lugar al algoritmo 1.<br />

Escribir un programa MATLAB que implemente el algoritmo <strong>de</strong> Doolittle.<br />

7


Algoritmo 1 Método <strong>de</strong> Doolittle<br />

Este algoritmo calcula la factorización LU, A = LU, A ∈ Rm×n , m ≥ n<br />

(suponiendo que existe) por el método <strong>de</strong> Doolittle.<br />

ENTRADA: La matriz A<br />

SALIDA: Las matrices L y U<br />

1: para k = 1 : n hacer<br />

2: para j = k : n hacer<br />

3: ukj = akj − k−1 i=1 lkiuij<br />

4: fin para<br />

5: para i = k + 1 : m hacer<br />

6: lik = aik − k−1 j=1 lijujk<br />

<br />

/ukk<br />

7: fin para<br />

8: fin para<br />

Nota: Los sumatorios <strong>de</strong> las líneas 3 y 6 son en realidad productos<br />

escalares. En el caso <strong>de</strong> la línea 3, es el producto escalar <strong>de</strong> parte <strong>de</strong> la<br />

fila k <strong>de</strong> L (los primeros k − 1 elementos) por parte <strong>de</strong> la columna j <strong>de</strong><br />

U (los primeros k − 1 elementos). Este producto escalar pue<strong>de</strong> hacerse en<br />

MATLAB <strong>con</strong> la or<strong>de</strong>n L(k, 1:k-1) * U(1:k-1, j), siendo ésta la forma<br />

más eficiente <strong>de</strong> calcularla.<br />

Ejercicio 3 Comprobar el funcionamiento <strong>de</strong>l programa <strong>con</strong> las siguientes<br />

matrices<br />

⎡ ⎤<br />

⎡<br />

⎤ 3 −1 2 ⎡<br />

⎤<br />

3 −1 2 ⎢ ⎥ 4 2 −1<br />

⎢<br />

⎥ ⎢ 7 −2 1 ⎥ ⎢<br />

⎥<br />

a) ⎢<br />

⎣ 5 7 8 ⎥<br />

⎦ , b) ⎢ ⎥<br />

⎢<br />

⎣ 4 5 0<br />

⎥ , c) ⎢<br />

⎣ 2 1 3 ⎥<br />

⎦<br />

⎦<br />

−1 0 4<br />

7 −1 0<br />

3 −1 2<br />

Ejercicio 4 ¿Qué ocurre al aplicar el programa a la matriz c) <strong>de</strong>l ejercicio<br />

anterior? Modificar el programa para que en caso <strong>de</strong> producirse esta situación<br />

se <strong>de</strong>tecte y se muestre un mensaje <strong>de</strong> error.<br />

✍Ejercicio 5 ¿Qué matrices tienen factorización LU? (Se entien<strong>de</strong> sin<br />

realizar ninguna permutación)<br />

Ejercicio 6 Calcular mediante el método <strong>de</strong> Doolittle la factorización LU<br />

8


<strong>de</strong> la matriz<br />

A =<br />

⎡<br />

⎢<br />

⎣<br />

4 −1 3<br />

8 5 1<br />

−16 −44 23<br />

aplicar el resultado para resolver el sistema Ax = b don<strong>de</strong> b =<br />

−37<br />

Calcular la solución utilizando la factorización LU <strong>con</strong> pivotamiento parcial<br />

(es <strong>de</strong>cir usando la or<strong>de</strong>n lu <strong>de</strong> MATLAB) y comparar los resultados sabiendo<br />

que la solución exacta es el vector <strong>con</strong> todas las componentes iguales a 1.<br />

3.2. La factorización <strong>de</strong> Cholesky<br />

La factorización <strong>de</strong> Cholesky <strong>de</strong> una matriz simétrica <strong>de</strong>finida positiva A<br />

pue<strong>de</strong> calcularse <strong>con</strong> MATLAB <strong>con</strong> la or<strong>de</strong>n chol. Esta función sólo precisa<br />

un dato que es la matriz <strong>de</strong> la que quiere calcularse la factorización. Debe<br />

tenerse en cuenta que chol no comprueba si la matriz es simétrica,<br />

sólo usa su parte triangular superior, esto pue<strong>de</strong> dar lugar a errores, como<br />

se ilustra en el siguiente ejemplo.<br />

Ejemplo 2<br />

» A=[ 5 -1 2 1; 0 4 2 -1; 0 0 5 1; 0 0 0 3];<br />

» spy(A)<br />

» R=chol(A)<br />

R =<br />

» R’*R<br />

ans =<br />

2.2361 -0.44721 0.89443 0.44721<br />

0 1.9494 1.2312 -0.41039<br />

0 0 1.6384 0.67462<br />

0 0 0 1.4753<br />

5 -1 2 1<br />

-1 4 2 -1<br />

9<br />

⎤<br />

⎥<br />

⎦<br />

⎡<br />

⎢<br />

⎣<br />

6<br />

14<br />

⎤<br />

⎥<br />

⎦ .


» spy(ans)<br />

» chol(ans)<br />

ans =<br />

2 2 5 1<br />

1 -1 1 3<br />

2.2361 -0.44721 0.89443 0.44721<br />

0 1.9494 1.2312 -0.41039<br />

0 0 1.6384 0.67462<br />

0 0 0 1.4753<br />

como pue<strong>de</strong> verse la matriz A no es simétrica y MATLAB sólo utiliza la parte<br />

triangular superior, por lo que obtiene un resultado incorrecto.<br />

Es por tanto necesario asegurarse <strong>de</strong> que la matriz sea simétrica. Si no<br />

estamos seguros <strong>de</strong> que la matriz A es simétrica po<strong>de</strong>mos comprobarlo escribiendo<br />

all(all(A==A’)), si el resultado es 1 es simétrica, si es 0 no lo<br />

es.<br />

Por otra parte, si la matriz A no es <strong>de</strong>finida positiva chol <strong>de</strong>vuelve un<br />

mensaje <strong>de</strong> error. En general no es fácil comprobar si una matriz simétrica<br />

es <strong>de</strong>finida positiva o no (una matriz simétrica <strong>de</strong>finida positiva tiene todos<br />

los elementos <strong>de</strong> la diagonal principal positivos, por tanto si alguno <strong>de</strong> ellos<br />

es negativo o nulo no se trata <strong>de</strong> una matriz <strong>de</strong>finida positiva, pero pue<strong>de</strong><br />

suce<strong>de</strong>r que todos los elementos <strong>de</strong> la diagonal principal sean positivos y<br />

la matriz no sea <strong>de</strong>finida positiva). Una <strong>de</strong> las formas <strong>de</strong> comprobar si una<br />

matriz simétrica es <strong>de</strong>finida positiva es intentar calcular su factorización <strong>de</strong><br />

Cholesky.<br />

Ejemplo 3 Dada la siguiente matriz (<strong>con</strong> elementos positivos en la diagonal<br />

principal) al intentar calcular su factorización <strong>de</strong> Cholesky se comprueba que<br />

no es <strong>de</strong>finida positiva.<br />

>> A=[2 -1 1;-1 2 2;1 2 2]<br />

A =<br />

2 -1 1<br />

-1 2 2<br />

1 2 2<br />

10


R=chol(A)<br />

??? Error using ==> chol<br />

Matrix must be positive <strong>de</strong>finite.<br />

Como se ha visto chol calcula el factor triangular superior. Si se quiere<br />

utilizar el resultado para resolver el sistema (1) se pue<strong>de</strong> utilizar el factor<br />

<strong>con</strong> la or<strong>de</strong>n R\(R’\b)<br />

Ejemplo 4<br />

» A=[ 10 -1 2 1; -1 8 2 -1; 2 2 10 1; 1 -1 1 6];<br />

» b=[3 -1 2 4]’;<br />

» R=chol(A)<br />

R =<br />

3.1623 -0.31623 0.63246 0.31623<br />

0 2.8107 0.78272 -0.32021<br />

0 0 2.9979 0.35046<br />

0 0 0 2.3822<br />

» sol=R\(R’\b)<br />

sol =<br />

0.2132<br />

-0.049392<br />

0.10673<br />

0.60511<br />

» sol2=A\b<br />

sol2 =<br />

0.2132<br />

-0.049392<br />

0.10673<br />

0.60511<br />

» sol==sol2<br />

11


ans =<br />

0<br />

0<br />

0<br />

0<br />

» sol-sol2<br />

ans =<br />

-5.5511e-017<br />

2.7756e-017<br />

-4.1633e-017<br />

1.1102e-016<br />

» R’*R-A<br />

ans =<br />

1.7764e-015 0 0 0<br />

0 0 0 0<br />

0 0 0 0<br />

0 0 0 -8.8818e-016<br />

Ejercicio 7 Decir cuáles <strong>de</strong> las siguientes matrices tienen factorización <strong>de</strong><br />

Cholesky. En caso afirmativo obtenerla y en caso negativo indicar las razones<br />

por las que no la tiene.<br />

⎡<br />

A = ⎣<br />

⎡<br />

D = ⎣<br />

4 1 2<br />

1 −1 0<br />

2 0 2<br />

7 1 2<br />

1 6 0<br />

2 0 3<br />

⎤<br />

⎤<br />

⎡<br />

⎦ , B = ⎣<br />

⎡<br />

⎦ , E = ⎣<br />

3 1 2<br />

1 5 −1<br />

2 −1 4<br />

3 1 3<br />

1 5 −1<br />

3 −1 4<br />

⎤<br />

⎤<br />

⎡<br />

⎦ , C = ⎣<br />

⎡<br />

⎦ , F = ⎣<br />

5 1 2<br />

1 6 1<br />

2 0 3<br />

5 4 −2<br />

4 6 1<br />

−2 1 1<br />

Ejercicio 8 Para las matrices anteriores que tienen factorización <strong>de</strong> Cholesky<br />

utilizarla para resolver el sistema <strong>con</strong> b = 1 1 1 ′ .<br />

12<br />

⎤<br />

⎦<br />

⎤<br />


4. Errores numéricos al aplicar el algoritmo<br />

<strong>de</strong> Gauss<br />

Ejecutando el fichero errGauss po<strong>de</strong>mos ver un ejemplo <strong>de</strong> sistema que<br />

si se resuelve sin usar ninguna técnica <strong>de</strong> pivotamiento da lugar a un error<br />

<strong>con</strong>si<strong>de</strong>rable, si en cambio se utiliza pivotamiento parcial el resultado<br />

obtenido es correcto.<br />

5. La or<strong>de</strong>n linsolve<br />

A partir <strong>de</strong> la versión 7 <strong>de</strong> MATLAB se incorpora la or<strong>de</strong>n linsolve.<br />

Esta or<strong>de</strong>n es similar a \. De hecho si A es una matriz cuadrada y b es un<br />

vector<br />

sol = linsolve(A, b)<br />

resuelve el sistema Ax = b por el algoritmo <strong>de</strong> Gauss <strong>con</strong> pivotamiento<br />

parcial.<br />

La diferencia entre usar \ y linsolve es que esta última or<strong>de</strong>n no hace<br />

las comprobaciones que mencionábamos en la sección 2. De hecho si la matriz<br />

tiene alguna propiedad que se pueda aprovechar se <strong>de</strong>be indicar a la or<strong>de</strong>n<br />

linsolve como una opción.<br />

Por ejemplo si la matriz es triangular inferior po<strong>de</strong>mos <strong>de</strong>finir<br />

opcion.LT = true<br />

y luego resolver<br />

sol = linsolve(A, b, opcion)<br />

Las opciones que se pue<strong>de</strong>n utilizar <strong>de</strong> esta forma son las <strong>de</strong>l cuadro 1.<br />

Todas ellas admiten los valores falso, false, que es el valor que tienen por<br />

<strong>de</strong>fecto y verda<strong>de</strong>ro, true. Aunque se pue<strong>de</strong>n indicar varias opciones como<br />

verda<strong>de</strong>ras hay restricciones lógicas. Es muy importante tener en cuenta que<br />

MATLAB no comprueba si la matriz tiene la propiedad en cuestión o no.<br />

Esto es lo que permite que esta or<strong>de</strong>n sea más rápida.<br />

13


Opción Propiedad <strong>de</strong> la matriz<br />

LT Triangular inferior<br />

UT Triangular superior<br />

UHESS Hessenber superior<br />

POSDEF Definida positiva<br />

RECT Rectangular<br />

TRANSA Indica si hay que resolver A ′ x = b<br />

Cuadro 1: Opciones <strong>de</strong> la or<strong>de</strong>n linsolve.<br />

14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!