Page 314 - Chapra y Canale. Metodos Numericos para Ingenieros 5edición_Neat
P. 314

290                     DESCOMPOSICIÓN LU E INVERSIÓN DE MATRICES

                                         Por lo contrario, la fase de sustitución requiere de un mayor trabajo. Así, el número
                                                                                      2
                                      de FLOP para la sustitución hacia adelante y hacia atrás es n . El trabajo total es, por lo
                                      tanto, idéntico al de la eliminación de Gauss
                                          n 3  n  2  conforme  n aumenta  n 3  2
                                            −  + n ⎯⎯⎯⎯⎯⎯      →    +  On (  )                        (10.16)
                                          3   3                   3

                                      10.1.3  Algoritmo para la descomposición LU
                                      En la figura 10.2 se presenta un algoritmo que implementa la descomposición LU con
                                      eliminación de Gauss. Vale la pena mencionar cuatro características de este algoritmo:



              FIGURA 10.2
              Seudocódigo para un algoritmo de descomposición LU.
                          SUB Ludecomp (a, b, n, tol, x, er)                  END IF
                                                                            END Decompose
                            DIM o n,  s n
                            er = 0
                            CALL Decompose(a, n, tol, o, s, er)             SUB Pivot(a, o, s, n, k)
                            IF er <> –1 THEN                                  p = k
                               CALL Substitute(a, o, n, b, x)                 big = ABS(a 0(k),k  /s 0(k) )
                            END IF                                            DOFOR ii = k + 1, n
                          END Ludecomp                                          dummy = ABS(a 0(ii),k  /s 0(ii) )
                                                                                IF dummy > big THEN
                          SUB Decompose (a, n, tol, o, s, er)                      big = dummy
                            DOFOR i = 1, n                                         p = ii
                              o i  = i                                          END IF
                              s i  = ABS(a i,1 )                              END DO
                              DOFOR j = 2, n
                                                                              dummy = o p
                                 IF ABS(a i,j )>s i  THEN s i  = ABS(a i,j )
                                                                              o p  = o k
                              END DO                                          o k  = dummy
                            END DO                                          END Pivot
                            DOFOR k = 1, n – 1
                              CALL Pivot(a, o, s, n, k)                     SUB Substitute (a, o, n, b, x)
                              IF ABS(a 0(k),k  /s 0(k) ) < tol THEN           DOFOR i = 2, n
                                 er = –1                                        sum = b 0(i)
                                                                                DOFOR j = 1, i –1
                                 PRINT a 0(k),k /s 0(k)
                                 EXIT DO                                          sum = sum – a 0(i),j  * b 0(j)
                               END IF                                                 END DO
                               D0FOR i = k + 1, n                               b 0(i)  = sum
                                                                              END DO
                                 factor = a 0(i),k  /a 0(k),k
                                 a 0(i),k  = factor                           x n  = b 0(n)  /a 0(n),n
                                 DOFOR j = k + 1, n                           DOFOR i = n – 1, 1, –1
                                                                                sum = 0
                                   a 0(i),j  = a 0(i),j  – factor * a 0(k),j
                                       END DO                                   DOFOR j = i + 1, n
                               END DO                                             sum + sum + a 0(i),j  * x j
                            END DO                                              END DO
                            IF ABS(a 0(k),k /s 0(k) ) < tol THEN                x i  = (b o(i)  – sum)/a o(i),i
                               er = –1                                        END DO
                                                                            END Substitute
                               PRINT a 0(k),k /s 0(k)




                                                                                                         6/12/06   13:53:08
          Chapra-10.indd   290                                                                           6/12/06   13:53:08
          Chapra-10.indd   290
   309   310   311   312   313   314   315   316   317   318   319