Está en la página 1de 961

Tecnicas

de Calculo
para Sistemas de Ecuaciones,
Lineal y Programacion

Programacion
Entera

C
odigos en FORTRAN y C con Aplicaciones de Sistemas de
Energa El
ectrica

Jose Luis de la Fuente OConnor


Profesor Titular
Universidad Politecnica de Madrid
Escuela Tecnica Superior de Ingenieros Industriales

A mi familia.

Indice General
Indice General
Indice de Figuras
Indice de Tablas
Prefacio

VII
XXIII
XXV
XXIX

I Sistemas de ecuaciones

DE SISTEMAS DE ECUACIONES
Captulo 1. METODOS
DIRECTOS DE SOLUCION
LINEALES

1.1
1.2
1.3
1.4

1.5

1.6
1.7

Planteamiento del problema a resolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Eliminaci
on de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Pivotaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2 N
umero de operaciones aritmeticas del metodo . . . . . . . . . . . . . . . . . . . .
Metodo de Gauss-Jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Descomposicion o factorizaci
on LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1 Metodos directos para la obtenci
on de factorizaciones LU . . . . . . . . . . . .
1.4.1.1 Metodo de Crout. Versi
on LU1 . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1.2 Metodo de Crout. Versi
on L1 U . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.1.3 Metodo de Doolittle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Factorizaci
on de matrices simetricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.1 Factorizaci
on LDLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.2 Factorizaci
on de Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.3 Matrices simetricas semidenidas positivas . . . . . . . . . . . . . . . . . . . . . . .
1.5.3.1 Pivotaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.4 Matrices simetricas indenidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.4.1 El metodo de Parlett y Reid . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.4.2 El metodo de Aasen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.4.3 Factorizaci
on de pivotaci
on diagonal . . . . . . . . . . . . . . . . . . . . .
1.5.4.3.1 El metodo de Bunch y Kaufman . . . . . . . . . . . . . . . . .
Condicionamiento de sistemas de ecuaciones lineales . . . . . . . . . . . . . . . . . . . . .
Mnimos cuadrados lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7.1 Fundamentos te
oricos del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7.1.1 Descomposicion en valores singulares . . . . . . . . . . . . . . . . . . . .
1.7.1.2 Sistemas incompatibles. Ecuaciones normales . . . . . . . . . . . . . .
1.7.1.3 Sistemas indeterminados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
VII

4
7
14
20
23
24
29
29
34
36
39
40
41
46
48
48
50
53
59
60
66
73
74
74
79
81

VIII

Indice General

1.7.2

Resoluci
on numerica del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7.2.1 Metodo de Gram-Schmidt . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7.2.2 Factorizaci
on QR o triangularizaci
on ortogonal. Transformaciones ortogonales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.7.2.2.1 Transformaciones de Householder . . . . . . . . . . . . . . . .
1.7.2.2.1.1
Resoluci
on numerica de Ax = b, Amn ,
m > n y rango completo . . . . . . . . . . . . . . . . . .
1.7.2.2.1.2
Resoluci
on numerica de Ax = b, Amn ,
n > m y rango completo . . . . . . . . . . . . . . . . . .
1.7.2.2.1.3
Resoluci
on numerica de Ax = b, Amn ,
m > n o m < n y rango incompleto . . . . . . . . .
1.7.2.2.2 Transformaciones de Givens . . . . . . . . . . . . . . . . . . . .
1.7.2.2.3 Transformaciones r
apidas de Givens . . . . . . . . . . . . . .
1.7.3 Descomposicion numerica en valores singulares. Metodo de Golub-Reinsch
1.8 El problema generalizado de mnimos cuadrados . . . . . . . . . . . . . . . . . . . . . . . . .
1.9 Mnimos cuadrados lineales con restricciones lineales . . . . . . . . . . . . . . . . . . . . .
1.9.1 Resoluci
on numerica del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.9.1.1 Metodo de eliminaci
on directa . . . . . . . . . . . . . . . . . . . . . . . . . .
1.9.1.2 Metodo de la base del subespacio n
ucleo de la matriz de
restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.9.1.3 Metodo de la ponderaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

81
83
88
90
94
98
98
105
110
115
128
131
132
132
137
138
138
139

DE SISTEMAS DE ECUACIONES
Captulo 2. METODOS
ITERATIVOS DE SOLUCION
LINEALES
143

2.1
2.2
2.3

2.4
2.5

Metodo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metodo de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Convergencia de los metodos de Jacobi y Gauss-Seidel . . . . . . . . . . . . . . . . . . . .
2.3.1 Matrices generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.2 Matriz de diagonal dominante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.3 Matriz simetrica denida positiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metodos de relajaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.1 Convergencia del metodo SOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.2 Metodo SSOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metodos de minimizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.1 Direcciones de descenso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.1.1 Relajaci
on en una variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.1.2 Relajaci
on SOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.1.3 M
axima pendiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2 Direcciones de descenso conjugadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.1 Determinaci
on de direcciones conjugadas . . . . . . . . . . . . . . . . .
2.5.2.2 Determinaci
on de direcciones conjugadas. Metodo de los
gradientes conjugados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.2.1 Convergencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.2.2 Interpretaci
on geometrica del metodo de los gradientes conjugados . . . . . . . . . . . . . . . . . . . . . . . . . . . .

145
149
152
152
156
159
163
166
168
169
171
171
172
173
177
179
179
182
186

Indice General

Implementaci
on pr
actica del metodo de los gradientes conjugados . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.2.4 Metodo de los gradientes conjugados con precondicionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 Comparaci
on numerica de los algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7 Mnimos cuadrados y metodos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.1 Metodo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.2 Metodo de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.3 Metodo de relajaci
on SOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.4 Metodo de los gradientes conjugados . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

IX

2.5.2.2.3

188
190
193
194
194
194
195
195
196
196

Captulo 3. SISTEMAS DE ECUACIONES LINEALES DE MATRIZ DE COEFICIENTES


DISPERSA
201

3.1

3.2

3.3
3.4

3.5

Almacenamiento en ordenador de matrices dispersas . . . . . . . . . . . . . . . . . . . . .


3.1.1 Almacenamiento por coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2 Almacenamiento por las o columnas . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3 Almacenamiento por perl o envolvente . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.4 Almacenamiento por listas encadenadas . . . . . . . . . . . . . . . . . . . . . . . . . .
Operaciones algebraicas elementales con matrices dispersas . . . . . . . . . . . . . . . .
3.2.1 Producto interior de dos vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.2 Multiplicaci
on de matrices por vectores . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.2.1 Multiplicaci
on de una matriz por un vector . . . . . . . . . . . . . . .
3.2.2.2 Multiplicaci
on de un vector por una matriz . . . . . . . . . . . . . . .
3.2.3 Suma de matrices dispersas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.1 Suma o resta simb
olica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3.2 Suma o resta numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.4 Multiplicaci
on de matrices dispersas . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.4.1 Multiplicaci
on AT A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Soluci
on de grandes sistemas lineales de matriz dispersa . . . . . . . . . . . . . . . . . . .
3.3.1 Ordenaci
on de las ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.2 Proceso de soluci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Matrices dispersas simetricas y eliminacion de Gauss . . . . . . . . . . . . . . . . . . . . .
3.4.1 Nociones b
asicas sobre teora de grafos . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.2 Interpretaci
on grafo-te
orica de la eliminaci
on de Gauss de matrices
dispersas de estructura simetrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.3 El algoritmo de grado mnimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.4 Reducci
on del ancho de banda de una matriz dispersa simetrica. El
algoritmo de Cuthill-McKee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.4.1 Seleccion del nudo inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.5 Reducci
on de la envolvente de una matriz dispersa simetrica. El
algoritmo inverso de Cuthill-McKee . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.6 Metodo de la diseccion anidada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.7 Metodo de la diseccion en un sentido . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Matrices dispersas no simetricas y eliminacion de Gauss . . . . . . . . . . . . . . . . . . .
3.5.1 Nociones b
asicas sobre grafos dirigidos . . . . . . . . . . . . . . . . . . . . . . . . . .

202
202
203
204
207
208
208
210
210
210
211
211
214
215
217
219
219
225
226
227
231
234
238
240
241
242
245
246
248

Indice General

3.5.2

Interpretaci
on grafo-te
orica de la eliminaci
on de Gauss de matrices
dispersas no simetricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.3 Obtenci
on de un transversal completo. Algoritmo de Hall . . . . . . . . . . . .
3.5.4 Permutaciones simetricas hacia una estructura triangular en bloques . . .
3.5.4.1 Algoritmo de Sargent y Westerberg . . . . . . . . . . . . . . . . . . . . . .
3.5.4.2 Algoritmo de Tarjan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.5 Pivotaci
on en matrices dispersas y eliminacion de Gauss . . . . . . . . . . . .
3.5.6 Metodo de los frentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 Problemas de mnimos cuadrados dispersos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1 El metodo de las ecuaciones normales . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1.1 Dispersidad parcial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.2 Metodos basados en transformaciones ortogonales. Metodo de GeorgeHeath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.2.1 Ordenaci
on de las . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.3 Otros metodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Captulo 4.

4.1
4.2

4.3

4.4

4.5
4.6

DE SISTEMAS DE ECUACIONES NO LINEALES


SOLUCION

Velocidad o rapidez de convergencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Problemas de una variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 Metodo de la biseccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.2 Metodo de Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.3 Convergencia del metodo de Newton para una variable . . . . . . . . . . . . . .
4.2.4 Variantes del metodo de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.4.1 Metodo de Newton por diferencias nitas . . . . . . . . . . . . . . . . .
4.2.4.2 Metodo de Newton modicado . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.5 Metodo de la secante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.6 Metodo de la falsa posici
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.7 Metodo de M
uller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sistemas de ecuaciones no lineales. Metodo de Newton-Raphson . . . . . . . . . . . .
4.3.1 Convergencia del metodo de Newton para sistemas de ecuaciones no
lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2 Modicaciones del metodo de Newton para sistemas de ecuaciones
no lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2.1 El metodo de Newton-Raphson por diferencias nitas para
sistemas de ecuaciones no lineales . . . . . . . . . . . . . . . . . . . . . . .
4.3.2.2 Newton modicado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2.3 Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2.4 Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2.5 Relajaci
on SOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metodos cuasi Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1 Metodo de Broyden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1.1 Convergencia del metodo de Broyden . . . . . . . . . . . . . . . . . . . .
4.4.1.2 Implementaci
on pr
actica del metodo de Broyden . . . . . . . . . . .
Metodos globalmente convergentes para sistemas de ecuaciones no lineales . . . .
Mnimos cuadrados no lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

250
251
254
256
257
261
263
266
267
268
270
271
272
273
274
279

281
284
284
286
291
293
295
299
300
302
302
306
310
312
313
316
316
318
318
320
321
326
329
331
335

Indice General

XI

Referencias teoricas del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Resolucion numerica del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.2.1 Metodo de Gauss-Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.2.1.1 Convergencia del metodo de Gauss-Newton . . . . . . . .
4.6.2.2 Metodos de Gauss-Newton globalmente convergentes . . . . . . . .
4.6.2.3 Metodos de region de conanza. Metodo de LevenbergMarquardt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.2.4 Metodos tipo Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

342
344
346
349
351

4.6.1
4.6.2

lineal
II Programacion
Captulo 5.

363

LINEAL. FORMULACION

PROGRAMACION

5.1 Conceptos y deniciones generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


5.2 Ejemplos de problemas de programaci
on lineal . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Captulo 6.

LINEAL
TEORIA BASICA
DE LA PROGRAMACION

6.1

Consideraciones geometricas sobre la programaci


on lineal . . . . . . . . . . . . . . . . .
6.1.1 Representacion geometrica del programa lineal en el subespacio de bienes
6.1.1.1 Factibilidad y condiciones de igualdad . . . . . . . . . . . . . . . . . . .
6.1.1.2 Factibilidad y condiciones de desigualdad . . . . . . . . . . . . . . . . .

6.1.1.3 Optimo
............................................
6.2 Politopos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 Puntos extremos y soluciones b
asicas factibles . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.1 Teorema de la representacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3.2 Teorema fundamental de la programaci
on lineal . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Captulo 7.

7.1
7.2
7.3

7.4
7.5

352
358
358
359

El METODO
SIMPLEX

Mejora de una soluci


on b
asica factible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Finalizaci
on. Soluci
on optima, soluci
on no acotada y soluciones optimas
alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
El algoritmo simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.1 Degeneracion y ciclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.1.1 La regla lexicogr
aca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.1.2 La regla de Bland . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Soluci
on b
asica factible inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.1 Variables articiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4.2 Metodo de penalizaci
on o de la gran M . . . . . . . . . . . . . . . . . . . . . . . . . .
Implementaciones pr
acticas del metodo simplex . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.1 El metodo simplex en forma de tableau . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.2 Forma producto de la inversa de la base . . . . . . . . . . . . . . . . . . . . . . . . .

365

366
368
371
372
379

379
382
384
386
386
389
391
397
402
406
406
411

412
417
418
428
429
429
429
431
441
441
442
444

XII

Indice General

7.5.3 Factorizaci
on LU de la base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.6 El metodo simplex para variables acotadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.7 Complejidad computacional del metodo simplex . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Captulo 8.

DUALIDAD Y ANALISIS
DE SENSIBILIDAD

8.1

Dualidad y condiciones de optimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


8.1.1 Condiciones de punto optimo de Karush-Kuhn-Tucker . . . . . . . . . . . . . .
8.2 Interpretaci
on econ
omica de la dualidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3 El algoritmo dual del simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3.1 El algoritmo dual del simplex para variables acotadas . . . . . . . . . . . . . . .
8.4 El metodo primaldual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5 An
alisis de sensibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Captulo 9.

PROGRAMAS LINEALES DE ESTRUCTURA ESPECIAL

9.1

Problemas de ujos en redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


9.1.1 Conceptos b
asicos de teora de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.2 Problemas tpicos de ujos en redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.3 El metodo simplex para problemas de ujos en redes . . . . . . . . . . . . . . .
9.1.3.1 Implementaci
on pr
actica del metodo simplex . . . . . . . . . . . . . .
9.1.3.1.1 Paso 1. Asignaci
on de precios. Comprobaci
on de
condiciones de optimo . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.3.1.2 Paso 2. Determinaci
on de la columna de pivotaci
on . .
9.1.3.1.3 Paso 3. Determinaci
on de la la de pivotaci
on.
An
alisis de ratios . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.3.1.4 Paso 4. Pivotaci
on. Actualizaci
on de las estructuras de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.3.1.4.1
Actualizaci
on de s() . . . . . . . . . . . . . . . . . . . . .
9.1.3.1.4.2
Actualizaci
on de p() y d() . . . . . . . . . . . . . . . .
9.1.3.2 Soluci
on b
asica factible inicial . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 El principio de descomposici
on de Dantzig-Wolfe . . . . . . . . . . . . . . . . . . . . . . . .
9.2.1 Implementacion pr
actica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2.2 Problemas con estructura en escalera . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3 El problema del corte de materiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Captulo 10.

METODOS
DE PUNTOS INTERIORES

10.1 Ideas b
asicas de los metodos de puntos interiores para programaci
on lineal . . . .
10.2 El metodo del escalado proyectivo de Karmarkar . . . . . . . . . . . . . . . . . . . . . . . .
10.2.1 Transformaci
on proyectiva en el simplex . . . . . . . . . . . . . . . . . . . . . . . . .
10.2.2 Complejidad computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3 Variantes y extensiones del metodo de Karmarkar . . . . . . . . . . . . . . . . . . . . . . .
10.4 El metodo primal de escalado afn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

447
450
459
460
461
465

466
475
476
479
482
486
492
494
494
499

499
500
502
505
512
512
515
515
516
517
520
527
527
535
545
546
550
551
557

558
561
562
570
571
571

Indice General

XIII

10.4.1 Transformaci
on afn del octante positivo . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.2 Soluci
on de partida del metodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.2.1 El metodo de la gran M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.2.2 El metodo en dos fases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.3 Reglas de parada del metodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.3.1 Factibilidad del programa primal . . . . . . . . . . . . . . . . . . . . . . .
10.4.3.2 Factibilidad del programa dual . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.3.3 Complementariedad de holguras . . . . . . . . . . . . . . . . . . . . . . . .
10.4.4 Complejidad computacional del metodo primal de escalado afn . . . . . . .
10.4.4.1 Metodo del empuje potencial . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4.4.2 Metodo de funci
on barrera logartmica . . . . . . . . . . . . . . . . . . .
10.5 El metodo dual de escalado afn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.1 Ideas b
asicas del metodo dual de escalado afn . . . . . . . . . . . . . . . . . . . .
10.5.2 Soluci
on de partida del metodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.2.1 El metodo de la gran M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.2.2 Metodo de la condici
on articial o del lmite superior . . . . . . . .
10.5.3 Reglas de parada del metodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.4 Mejora de la complejidad computacional del metodo dual de escalado afn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5.4.1 Metodo de funci
on barrera logartmica . . . . . . . . . . . . . . . . . . .
10.6 El metodo primal-dual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6.1 Direcci
on y amplitud de movimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6.1.1 Amplitud de movimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6.2 Ajuste del par
ametro de penalizaci
on y reglas de parada del metodo . . .
10.6.2.1 Reglas de parada del metodo . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6.3 Soluci
on de partida del metodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6.4 Complejidad computacional del metodo . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

entera
III Programacion
Captulo 11.

572
580
580
580
581
581
581
582
582
582
585
587
588
593
593
593
594
594
594
595
598
600
600
601
604
606
607
608

611

LINEAL EN VARIABLES ENTERAS


PROGRAMACION

11.1 Formulaci
on y ejemplos de programas lineales en variables enteras . . . . . . . . . . .
11.1.1 Problemas de estructura especial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.1.2 Modelizaci
on con variables binarias . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2 Resolucion gr
aca de programas enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3 Propiedades de la regi
on factible de los programas enteros . . . . . . . . . . . . . . . . .
11.4 Algunas relajaciones de la formulaci
on de programas enteros . . . . . . . . . . . . . . .
11.4.1 Relajaci
on lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.4.1.1 Generaci
on de desigualdades . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.4.2 Relajaci
on lagrangiana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.4.3 Descomposicion y separaci
on de costes . . . . . . . . . . . . . . . . . . . . . . . . . .
11.4.4 Descomposicion de Benders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

613

615
620
622
623
624
625
626
627
632
633
633
635
635

XIV

Indice General

Captulo 12.

ALGORITMOS GENERALES DE RELAJACION

639

12.1 El algoritmo de los planos cortantes de Gomory . . . . . . . . . . . . . . . . . . . . . . . . .


12.1.1 Extensi
on a programas enteros mixtos . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2 Algoritmos de ramicaci
on y acotamiento o branch and bound . . . . . . . . . . . . .
12.2.1 Algoritmos de ramicaci
on y acotamiento con relajaci
on lineal . . . . . . . .
12.2.1.1 Criterios de poda o rechazo de ramas del arbol enumerativo . .
12.2.1.2 Divisi
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2.1.3 Seleccion del nudo a estudiar . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2.1.4 Seleccion de la variable de ramicaci
on . . . . . . . . . . . . . . . . . . .
12.2.1.4.1 Selecci
on basada en penalizaciones . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

IV Apendices

639
645
645
648
649
650
652
654
654
664
664

669

Apendice
A. REPASO DE MATEMATICAS:
DEFINICIONES, NOTACIONES Y RELA
CIONES BASICAS
671

A.1 Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2 Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3 Espacios vectoriales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.1 Espacios normados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.2 Espacios con producto interior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3.3 Aplicaciones lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4.1 Normas de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.4.2 Matrices ortogonales, matrices de permutaci
on y matrices de proyeccion
A.5 Autovalores, valores singulares y formas cuadr
aticas . . . . . . . . . . . . . . . . . . . . . .
A.5.1 Autovalores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.5.2 Valores singulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.5.3 Formas cuadr
aticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.6 Topologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.7 Teorema de la proyeccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.8 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.8.1 Condiciones necesarias y sucientes de primer y segundo orden que
ha de cumplir un punto mnimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.9 Conjuntos convexos. Existencia de los hiperplanos separador y soporte . . . . . . .

Apendice
B.

FINITA
ERRORES DE REDONDEO Y ARITMETICA
DE PRECISION

B.1 Sistema de numeracion en un ordenador de c


alculo . . . . . . . . . . . . . . . . . . . . . . .
B.2 Precision de un ordenador. Errores de redondeo . . . . . . . . . . . . . . . . . . . . . . . . .
B.3 Aritmetica en un ordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.3.1 Soluci
on de una ecuaci
on cuadr
atica . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.3.2 M
as errores. Una suma de innitos sumandos . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

671
672
673
675
677
678
680
681
683
685
685
686
687
691
692
693
695
696
699

699
703
706
708
709
710

Indice General

XV

Apendice
C. REDES ELECTRICAS:
FLUJOS POR SUS ELEMENTOS Y POTENCIAS
INYECTADAS EN SUS NUDOS
711

C.1 Lnea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.1.1 Potencias inyectadas en los nudos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.1.2 Flujos de potencia entre los nudos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.2 Transformador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.2.1 Esquema equivalente con el regulador del transformador en el primario .
C.2.2 Esquema equivalente con el regulador del transformador en el secundario
C.2.3 Potencias inyectadas en los nudos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C.2.4 Flujos de potencia entre los nudos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LINEAL

Apendice
D. CASUISTICA DE PROGRAMACION

D.1 Gesti
on nanciera a corto plazo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.1.1 Modelo del problema a optimizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.1.2 An
alisis de sensibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.1.2.1 Cambio en las condiciones de la adquisici
on del pasivo no
crediticio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.1.3 Soluci
on factible inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.1.3.1 An
alisis de los valores duales de las condiciones . . . . . . . . . . . .
D.2 Gesti
on operativa de una renera de crudo de petr
oleo . . . . . . . . . . . . . . . . . . .
D.2.1 Producci
on de vapor de agua y electricidad en una renera de petr
oleo
D.2.2 Modelo del problema a optimizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.2.3 Formulaci
on del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.2.4 An
alisis de sensibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Apendice
E.

E.1 Datos
E.1.1
E.1.2
E.1.3

El PROGRAMA BBMI

del problema. Formato MPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Clave NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Secci
on ROWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Secci
on COLUMNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.1.3.1 Clave INT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.1.4 Secci
on RHS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.1.5 Secci
on RANGES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.1.6 Secci
on BOUNDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.2 Par
ametros y especicaciones de la resolucion . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.3 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.3.1 Programas lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.3.2 Programas enteros puros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.3.3 Programas enteros mixtos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E.4 Listado de BBMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

711
712
714
716
716
717
719
720
721
723

723
725
732
737
741
743
744
745
751
754
761
764
765

765
766
767
768
768
769
769
771
772
773
773
779
783
791

XVI

Indice General

Apendice
F.

F.1
F.2
F.3
F.4

EL PROGRAMA CCNET

Ejecuci
on del programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Datos del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Listado de CCNET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

813

814
814
816
819

Apendice
G. VERSIONES EN C y FORTRAN 90 DE LOS PROGRAMAS DEL TEXTO
EN FORTRAN 77
831

G.1 C
odigos en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.1.1 C
odigos del captulo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.1.2 C
odigos del captulo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.1.3 C
odigos del captulo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.1.4 C
odigos del captulo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.1.5 C
odigos del apendice B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.1.6 C
odigos del apendice H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.2 C
odigos en Fortran 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.2.1 C
odigos del captulo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.2.2 C
odigos del captulo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.2.3 C
odigos del captulo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
G.2.4 C
odigos del captulo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

832
832
840
842
847
856
856
858
858
866
868
868

DEL NUMERO

DE MATRICES CUADRA
Apendice
H. ESTIMACION
DE CONDICION
DAS
879

H.1 El estimador de Cline, Moler, Stewart y Wilkinson . . . . . . . . . . . . . . . . . . . . . . . 880


H.2 El algoritmo de Hager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889

Apendice
I.

I.1
I.2

SOFTWARE DISPONIBLE EN INTERNET

891

Software de pago . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892


Software de dominio p
ublico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893

Apendice
J.

EL SOFTWARE DEL LIBRO

895

Bibliografa

897

Indice de materias

913

Indice de Figuras
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
1.11
1.12
1.13
1.14
1.15
1.16
1.17
1.18
1.19
1.20

Casos posibles de sistemas de ecuaciones lineales Ax = b dependiendo del


tama
no y rango de la matriz A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Descripcion geometrica en dos dimensiones de la resolucion de un sistema de
ecuaciones lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Representacion geometrica en el subespacio Im(A) de dos dimensiones de la
resolucion de un sistema de ecuaciones lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Permutaciones elementales en una matriz triangular inferior . . . . . . . . . . . . . . . . . .
Ilustraci
on del proceso del algoritmo de Doolittle para la factorizaci
on LU por
columnas de una matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Partes ya calculadas y por calcular de la factorizaci
on de Cholesky for las
(etapa i) y por columnas (etapa j) de una matriz A . . . . . . . . . . . . . . . . . . . . . . . .
Ilustraci
on del buen y mal condicionamiento de dos sistemas de ecuaciones
lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de problema de mnimos cuadrados: ajuste de una funci
on a una nube
de puntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ilustraci
on en dos dimensiones de una transformaci
on lineal de la esfera unidad . .
Descripcion geometrica del problema minx2 Ax b2 , A 32 . . . . . . . . . . .
Interpretaci
on geometrica en 3 del problema x = minx3 {x2 : Ax = b} . . . .
Descripcion geometrica del proceso de ortonormalizaci
on de Gram-Schmidt . . . . . .
Representacion de la aplicaci
on a a de la transformaci
on de Householder denida por w . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Resultado de aplicar a x la transformaci
on de Householder que dene el vector
(x y)/x y2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Factorizaci
on de una matriz 6 4 por transformaciones de Householder . . . . . . . .
Representacion de como obtener las dos transformaciones de Householder posibles de un vector a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Resultado de la factorizaci
on de una matriz m n de rango r por transformaciones de Householder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Segundo proceso de transformaciones ortogonales para resolver un problema
general de mnimos cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Segundo proceso de transformaciones ortogonales para resolver un problema
general de mnimos cuadrados (continuaci
on) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo de una transformaci
on de Givens en el espacio eucldeo tridimensional . . .

XVII

5
7
8
25
39
47
68
74
76
80
82
84
91
92
92
93
100
101
101
106

XVIII

Indice de Figuras

1.21 Proceso de bidiagonalizaci


on de una matriz 6 4 mediante transformaciones
de Householder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
2.1
2.2
2.3
2.4
2.5
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
3.18

Movimiento a lo largo de un vector direcci


on de descenso . . . . . . . . . . . . . . . . . . . .
Minimizaci
on en la variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Relajaci
on SOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de convergencia del metodo de la m
axima pendiente aplicado a una
funci
on cuadr
atica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Interpretaci
on geometrica del metodo de los gradientes conjugados . . . . . . . . . . . .
Estructura simb
olica (simetrica) de una matriz 14 14 antes de proceder a su
factorizaci
on mediante eliminaci
on de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estructura simb
olica de la matriz de la gura 3.1 despues de proceder a su
factorizaci
on mediante eliminaci
on de Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estructura simb
olica de la matriz de la gura 3.1 despues de proceder a la
reordenaci
on de sus las y columnas mediante el algoritmo de grado mnimo
y a su posterior factorizaci
on mediante eliminaci
on de Gauss . . . . . . . . . . . . . . . . .
Matriz 3535, de estructura simb
olica simetrica, antes y despues de reordenar
sus las y columnas con el algoritmo de Cuthill-McKee . . . . . . . . . . . . . . . . . . . . .
Matriz triangular inferior en bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Matriz 1616, de estructura simb
olica no simetrica, antes de reordenar sus
las y columnas para reducirla a una de estructura triangular inferior en bloques .
Matriz de la gura 3.6 despues de reordenar sus las y columnas para reducirla
a una de estructura triangular inferior en bloques . . . . . . . . . . . . . . . . . . . . . . . . . .
Patr
on de elementos distintos de cero de una matriz simetrica 480 480 y el
de su factor L una vez efectuada la factorizaci
on LLT . . . . . . . . . . . . . . . . . . . . . .
Patr
on de elementos distintos de cero de una matriz simetrica 480 480 ordenada mediante el algoritmo de grado mnimo y el de su factor L una vez
efectuada la factorizaci
on LLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Patr
on de elementos distintos de cero de una matriz simetrica 480 480 ordenada mediante el algoritmo de Cuthill-McKee y el de su factor L una vez
efectuada la factorizaci
on LLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Matriz 11 11 de estructura simb
olica simetrica y su grafo numerado asociado . . .
Grafo no dirigido de 20 nudos, su estructura de niveles y su correspondiente
arbol cociente con numeraci
on mon
otona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Arbol maximal del grafo de la gura 3.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Tres primeras etapas de la eliminacion de Gauss de una matriz simetrica 11
11 y sus correspondientes grafos de eliminaci
on. Los elementos de relleno se
indican mediante el smbolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Resultado de la eliminaci
on simb
olica de Gauss en la matriz de la gura 3.11
mediante grafos de eliminaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Grafo asociado a una matriz 7 7 sobre el que se ilustra el algoritmo de grado
mnimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Matriz 7 7 y su grafo asociado con la numeraci
on resultado del algoritmo de
grado mnimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Grafo donde la renumeraci
on que resultara de aplicarle el algoritmo de grado
mnimo no es la optima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

171
172
173
175
187
220
220
221
223
223
224
224
227
228
228
229
231
232
233
234
236
236
236

Indice de Figuras

3.19 Grafo de 10 nudos antes y despues de aplicarle el algoritmo de Cuthill-McKee,


comenzando la numeraci
on en a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.20 Grafo de 10 nudos de la gura 3.19 una vez aplicado el algoritmo de CuthillMcKee, comenzando la numeracion en e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.21 Grafo de 10 nudos de la gura 3.19 al que se le aplica el algoritmo de la
tabla 3.6 para determinar que nudo ha de ser el de partida para el algoritmo
de Cuthill-McKee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.22 Ejemplo 3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.23 Ejemplo de la adaptaci
on del algoritmo de Cuthill-McKee al grafo de la gura 3.22
3.24 Resultado de la aplicaci
on del algoritmo inverso de Cuthill-McKee al grafo de
la gura 3.22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.25 Resultado del algoritmo inverso de Cuthill-McKee aplicado el grafo de la gura 3.19
3.26 Metodo de la diseccion anidada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.27 Metodo de la diseccion en un sentido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.28 Matriz no simetrica y su digrafo asociado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.29 Primera etapa de la eliminaci
on de Gauss y su correspondiente digrafo de
eliminaci
on de la matriz de la gura 3.28. El elemento de relleno se indica
mediante el smbolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.30 Resultado nal de la eliminaci
on de Gauss simb
olica de la matriz de la gura 3.28
3.31 Algoritmo de Hall para la b
usqueda de un transversal completo en una matriz
12 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.32 Digrafo con dos componentes fuertes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.33 Digrafo de una matriz triangular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.34 Digrafo sobre el que se aplica el algoritmo de Sargent y Westerberg . . . . . . . . . . . .
3.35 Digrafo en el que el algoritmo de Sargent y Westerberg presenta dicultades . . . . .
3.36 Ejemplo de digrafo con dos componentes fuertes no triviales . . . . . . . . . . . . . . . . .
3.37 Digrafo de la gura 3.36 una vez renumerado con el algoritmo de Tarjan . . . . . . . .
3.38 Etapa k = 3 de la eliminaci
on de Gauss de una matriz de orden 7 . . . . . . . . . . . . .
3.39 Pieza mecanica mallada para su an
alisis por elementos nitos . . . . . . . . . . . . . . . .
3.40 Matriz A despues de ensamblados los primeros seis elementos de la gura 3.39 . . .
3.41 Malla 2 4 y primeras tres las de la matriz a que da lugar el metodo de los frentes
3.42 Matriz A de un problema no de elementos nitos en el proceso de tratamiento
por el metodo de los frentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.43 Procesamiento simbolico de la la 9 de una matriz A 98 por el algoritmo
de George y Heath. Los smbolos designan los elementos de R8 involucrados
en la eliminaci
on de aT9 ; los que se crean en esa eliminacion . . . . . . . . . . . . . . . .
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9

Sistema electrico de generacion y transporte de 3 nudos, 3 lneas y 2 generadores .


Decisiones posibles en la primera iteraci
on del metodo de la biseccion . . . . . . . . . .
Proceso de obtenci
on de la soluci
on de x sen(x) 1 = 0 con el metodo de la
biseccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Telas de ara
na de g(x) = (sen(x))1/3 y g(x) = sen(x)/x2 . . . . . . . . . . . . . . . . . . . .
Aproximaci
on lineal de f (x) en x = x1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Obtenci
on de la soluci
on de x3 sen(x) = 0 con el metodo de Newton . . . . . . . . .
Metodo de Newton aplicado a f (x) = arctan(x) . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metodo de Newton con mecanismo de salvaguarda . . . . . . . . . . . . . . . . . . . . . . . . .
Metodo de Newton modicado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

XIX

239
240
241
242
243
243
243
244
245
249
250
251
253
254
256
257
257
259
260
262
263
264
266
266
271
282
285
287
288
289
290
294
295
299

XX

Indice de Figuras

4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.17
4.18

Metodo de la secante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metodo Regula Falsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ejemplo donde los metodos de la secante y regula falsi convergen muy lentamente
Primera aproximaci
on parab
olica del metodo de Muller . . . . . . . . . . . . . . . . . . . . .
Metodo de Broyden en una variedad lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Criterio de Armijo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Red electrica IEEE de 30 Nudos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Conjunto tpico de medidas para la estimaci
on del estado de un sistema electrico .
Geometra del ajuste de una funci
on no lineal con un par
ametro a dos puntos . . . .

5.1
5.2

Region factible del problema de programaci


on lineal del ejemplo 5.1 . . . . . . . . . . . 367
Representacion gr
aca del problema del transporte . . . . . . . . . . . . . . . . . . . . . . . . . 370

6.1
6.2

Resolucion geometrica del problema de programaci


on lineal del ejemplo 6.1 . . . . . .
Soluci
on optima u
nica nita: (a) regi
on factible acotada; (b) regi
on factible no
acotada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Soluciones optimas alternativas: (a) regi
on factible acotada; (b) regi
on factible
no acotada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
(a) Soluci
on optima no acotada. (b) Regi
on factible vaca . . . . . . . . . . . . . . . . . . . .
Conjuntos convexo y no convexo; cono convexo . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Interpretaci
on geometrica de la factibilidad de un programa lineal: (a) regi
on
factible no vaca; (b) regi
on factible vaca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Regiones factibles del ejemplo 6.2: (a) no vaca; (b) vaca . . . . . . . . . . . . . . . . . . . .
Programa lineal con condiciones de desigualdad: (a) regi
on factible no vaca;
(b) regi
on factible vaca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Descripcion geometrica del ejemplo 6.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Geometra del ejemplo 6.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Representacion del hiperplano x1 + 4x2 = 11, y los semiespacios que dene . . . .
Soluciones b
asicas/soluciones basicas factibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Soluciones b
asicas factibles degeneradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Direcciones en el politopo del ejemplo 6.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Puntos y direcciones extremos de un politopo P . . . . . . . . . . . . . . . . . . . . . . . . . . .
Representacion de un punto de un politopo (poliedro) como combinaci
on convexa de puntos extremos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Representacion del politopo del ejemplo 6.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Direcciones extremas y optimo: (a) soluci
on optima no acotada; (b) optimo acotado

6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
6.11
6.12
6.13
6.14
6.15
6.16
6.17
6.18
7.1
7.2
7.3
7.4
7.5
7.6

301
303
303
304
327
331
337
338
345

380
381
381
382
383
385
386
387
388
388
390
393
396
399
399
401
403
405

7.7

Soluci
on b
asica degenerada y direccion no factible . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de mejora de una soluci
on b
asica factible del problema del ejemplo 7.1 . . .
Representacion del proceso seguido hasta la soluci
on en el problema del ejemplo 7.2
Problema con soluci
on no acotada del ejemplo 7.3 . . . . . . . . . . . . . . . . . . . . . . . . .
El algoritmo simplex resolviendo un problema con soluciones optimas alternativas
Trayectoria seguida en la resoluci
on del ejemplo 7.8 empleando las fases I y II
del metodo simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B
usqueda de la soluci
on del problema de Klee y Minty para n = 2 y n = 3 . . . . . .

414
415
424
425
427

8.1

Geometra de las condiciones de optimo del ejemplo 8.2 . . . . . . . . . . . . . . . . . . . . . 468

441
460

Indice de Figuras

XXI

8.2
8.3
8.4

Descripcion geometrica de la existencia de un hiperplano separador . . . . . . . . . . . . 473


El sistema (I) del lema de Farkas no tiene soluci
on. La tiene (II) . . . . . . . . . . . . . . 474
El sistema (II) del lema de Farkas no tiene soluci
on. La tiene (I) . . . . . . . . . . . . . . 474

9.1
9.2
9.3
9.4
9.5
9.6
9.7
9.8

Grafo dirigido, o digrafo, de 4 nudos y 6 arcos . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Algunas estructuras b
asicas de un grafo dirigido . . . . . . . . . . . . . . . . . . . . . . . . . . .
Flujo m
aximo en una red y su formulaci
on como problema de coste mnimo . . . . .
El problema de la asignaci
on en forma de grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Determinaci
on del arbol maximal de una red . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Arbol maximal del ejemplo 9.2 con nudo cticio . . . . . . . . . . . . . . . . . . . . . . . . . . .


Digrafo o grafo correspondiente a los datos de la tabla 9.3 . . . . . . . . . . . . . . . . . . .

Arbol
maximal sobre el que se ilustra el proceso de adaptaci
on del vector s()
una vez efectuada una iteraci
on del metodo simplex . . . . . . . . . . . . . . . . . . . . . . . .

Arbol
maximal resultante del de la gura 9.8 una vez introducido el arco (3,20)
en la base. Sale el (8,9) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Arbol
maximal del ejemplo de la tabla 9.3 una vez introducido el arco (7,9)
en la base y retirado el (1,8) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Grafo correspondiente al problema del ejemplo 9.4 . . . . . . . . . . . . . . . . . . . . . . . . .

Arbol
maximal de la iteraci
on 1 del ejemplo 9.4 . . . . . . . . . . . . . . . . . . . . . . . . . . .
Iteracion 1 Paso 2: determinaci
on del camino para encontrar la la de pivotaci
on .

Arbol maximal de la iteraci


on 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Iteraci
on 2 Paso 2: determinaci
on del camino para encontrar la la de pivotaci
on .

Arbol maximal de la iteraci


on 3 del ejemplo 9.4 . . . . . . . . . . . . . . . . . . . . . . . . . . .
(a) Grafo de la gura 9.1 aumentado en el nudo articial 5 para obtener una

soluci
on factible inicial. (b) Arbol
maximal inicial . . . . . . . . . . . . . . . . . . . . . . . . . .
Estructura diagonal por bloques de la matriz del problema 9.6 . . . . . . . . . . . . . . . .
Politopos X1 y X2 que dene el problema 9.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Evoluci
on del valor de la funci
on objetivo del problema del ejemplo 9.5 y del
de su lmite inferior calculado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estructura en escalera de una matriz de condiciones . . . . . . . . . . . . . . . . . . . . . . . .
Digrafo del ejercicio 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9.9
9.10
9.11
9.12
9.13
9.14
9.15
9.16
9.17
9.18
9.19
9.20
9.21
9.22

10.1 Itinerarios hacia el optimo por el interior y exterior del poliedro que denen
las condiciones de un problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2 M
axima esfera (circunferencia en este caso) que se puede centrar en a dentro
de la regi
on factible x 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3 M
aximas elipses que se pueden inscribir en a y en b en la regi
on factible x 0 . .
10.4 Esferas de radio mnimo y m
aximo que pueden circunscribir un simplex e
inscribirse en el . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5 Transformaci
on proyectiva del ejemplo 10.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6 a. Regi
on factible original; b. Despues de la primera transformaci
on proyectiva
se convierte en e/n; c. Despues de la segunda transformaci
x
on . . . . . . . . . . . . . . .
10.7 Region factible del problema del ejemplo 10.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8 Descripcion geometrica de la transformaci
on afn en dos dimensiones . . . . . . . . . . .
10.9 Obtenci
on de la direcci
on en el subespacio n
ucleo de Ak . . . . . . . . . . . . . . . . . . . . .
10.10 Representacion de la idea en la que se basa el metodo de empuje potencial . . . . . .

500
501
504
505
507
509
513
518
519
521
522
523
524
525
525
526
528
529
539
545
545
553
559
560
561
562
564
565
568
573
574
583

XXII

Indice de Figuras

10.11 Funci
on barrera logartmica del problema: minimizar f (x) = 3 x/2 sujeta a
x 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
11.1
11.2
11.3
11.4
11.5
11.6
11.7
11.8

Funci
on objetivo c
oncava del problema de la localizaci
on de almacenes . . . . . . . . .
Funci
on de costes de un grupo de una central termica . . . . . . . . . . . . . . . . . . . . . .
Bucles en el problema del representante de comercio . . . . . . . . . . . . . . . . . . . . . . . .
Region factible del problema del ejemplo 11.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generaci
on de desigualdades por redondeo entero . . . . . . . . . . . . . . . . . . . . . . . . . .
Region factible del problema del ejemplo 11.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ilustraci
on del ejemplo 11.4 sobre desigualdades disyuntivas . . . . . . . . . . . . . . . . . .
Funciones del ejemplo 11.5 para generar desigualdades v
alidas . . . . . . . . . . . . . . . .

618
619
620
624
628
629
631
632

12.1 Resolucion del problema del ejemplo 12.1 mediante el algoritmo de los planos
cortantes de Gomory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2 Divisi
on recursiva de una regi
on factible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3 Divisi
on recursiva de una regi
on factible de un problema en variables 0 o 1 . . . . . .
12.4 Divisi
on recursiva de la regi
on factible del problema en variables 0 o 1 del
ejemplo 12.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5 Divisi
on, por dicotoma de la variable xj , en un arbol enumerativo . . . . . . . . . . . .
12.6 Dicotoma debida a la existencia de cotas superiores generalizadas . . . . . . . . . . . . .
12.7 Divisi
on del arbol enumerativo en tantas ramas como valores enteros puede
tomar la variable xj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.8 Seleccion de los nudos de un arbol enumerativo de acuerdo con la regla LIFO . . . .

12.9 Arbol
enumerativo del problema del ejemplo 12.3 . . . . . . . . . . . . . . . . . . . . . . . . . .
12.10 Region factible y arbol enumerativo del problema del ejemplo 12.4 . . . . . . . . . . . .

648
650
651

A.1
A.2
A.3
A.4

Representacion gr
aca de la regla del tri
angulo . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gr
aca de una de las funciones de una sucesi
on de Cauchy . . . . . . . . . . . . . . . . . .
Efecto de una aplicaci
on lineal sobre la bola unidad para diferentes normas . . . . . .
Representacion en dos dimensiones de una transformaci
on lineal de la esfera unidad

675
677
684
687

B.1

Conjunto F de n
umeros reales representables en un ordenador con = 2,
t = 3, L = 1 y U = 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700

C.1
C.2
C.3
C.4
C.5

Esquema en de una lnea entre dos nudos i y j . . . . . . . . . . . . . . . . . . . . . . . . . .


Transformador entre los nudos i y j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Esquema en del transformador entre i y j con el regulador conectado a i . . . . . .
Transformador entre i y j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Esquema en del transformador entre i y j con el regulador conectado a j . . . . .

712
716
718
718
719

D.1
D.2
D.3
D.4

Proceso productivo simplicado de una renera de crudo de petr


oleo . . . . . . . . . .
Esquema productivo de vapor de agua de una renera de crudo de petr
oleo . . . . .
Esquema productivo de las turbinas de vapor de la renera . . . . . . . . . . . . . . . . . .
Fluidos que se consumen y producen en la unidad de producci
on n
umero 11 y
esquema de ujos energeticos en la renera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

744
746
747

E.1

644
646
647

651
653
661
665

750

Estructura de elementos distintos de cero de un programa entero mixto para


prueba de Bbmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784

Indice de Figuras

J.1

XXIII

Representacion de la disposici
on del software del libro que se incluye en el
CD-ROM que se adjunta al mismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896

Indice de Tablas
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
1.11
1.12
1.13
1.14
1.15
1.16
1.17
1.18
1.19

Algoritmo para la resoluci


on de Ax = b mediante eliminaci
on de Gauss con
pivotaci
on parcial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Algoritmo para la factorizaci
on LU1 de una matriz Ann por el metodo de Crout . 30
Algoritmo de Crout con pivotaci
on parcial para la factorizaci
on LU1 de una
matriz Ann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Algoritmo para la factorizaci
on L1 U de una matriz Ann por el metodo de Crout . 36
Algoritmo para la factorizaci
on L1 U de una matriz Ann por el metodo de
Doolittle. Los coecientes de los factores se generan por columnas . . . . . . . . . . . . . 37
Algoritmo para la factorizaci
on LDLT de una matriz Ann simetrica . . . . . . . . . . 41
Algoritmo para la factorizaci
on GT G de Cholesky por las de una matriz Ann
simetrica denida positiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Algoritmo para la factorizaci
on GT G de Cholesky por columnas de una matriz
nn
A
simetrica denida positiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Variante del algoritmo de Cholesky de la tabla 1.7 para matrices Ann simetricas
semidenidas positivas. Sin pivotaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Algoritmo para la factorizaci
on GT G de Cholesky de una matriz Ann simetrica
semidenida positiva con pivotaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Algoritmo de Aasen sin pivotaci
on para la factorizaci
on LT LT de una matriz
nn
A
simetrica indenida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Algoritmo de Aasen con pivotaci
on para la factorizaci
on LT LT de una matriz
nn
A
simetrica indenida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Operaciones de la pivotaci
on en el metodo de Bunch y Kaufman . . . . . . . . . . . . . . 62
Algoritmo para la factorizaci
on U BU T de una matriz Ann simetrica indenida por el metodo de Bunch y Kaufman con pivotaci
on . . . . . . . . . . . . . . . . . . . . 63
Algoritmo cl
asico de Gram-Schmidt para la ortonormalizaci
on de los vectores
columna de una matriz Amn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Algoritmo modicado de Gram-Schmidt para la ortonormalizaci
on de los vecmn
tores columna de una matriz A
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Algoritmo modicado de Gram-Schmidt para la ortonormalizaci
on de los vectores columna de una matriz Amn . Version por las . . . . . . . . . . . . . . . . . . . . . . . 86
Algoritmo para la resoluci
on de minxn Ax b2 por transformaciones de
Householder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Algoritmo para la resoluci
on de minxn Axb2 mediante transformaciones
de Givens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

XXV

XXVI

Indice de Tablas

1.20 C
alculo de los elementos de las las i y j de las matrices D y P en las transformaciones r
apidas de Givens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.21 Algoritmo para la resoluci
on de minxn Ax b2 por transformaciones
r
apidas de Givens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.22 Algoritmo de Golub-Kahan: etapa k del procedimiento de Golub-Reinsch para
obtener los valores singulares de una matriz bidiagonal B nn . . . . . . . . . . . . . . . . .
1.23 Algoritmo de Golub-Reinsch para la obtenci
on de los valores singulares de una
mn
matriz A 
...................................................
1.24 N
umero de operaciones necesarias para efectuar las distintas variantes de una
descomposicion en valores singulares de una matriz A mn . . . . . . . . . . . . . . . .
1.25 N
umero de operaciones necesarias para resolver el problema de mnimos cuadrados minxn Ax b2 por distintos metodos . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1
2.2
2.3
2.4
2.5
2.6

112
113
121
122
127
129

Algoritmo de Jacobi para la resoluci


on de Ax = b . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo de Gauss-Seidel para la resoluci
on de Ax = b . . . . . . . . . . . . . . . . . . . . .
Algoritmo de relajaci
on SOR para la resoluci
on de Ax = b . . . . . . . . . . . . . . . . . .
Algoritmo de la m
axima pendiente para resolver Ax = b . . . . . . . . . . . . . . . . . . . .
Algoritmo de los gradientes conjugados para resolver Ax = b . . . . . . . . . . . . . . . . .
Proceso de convergencia de la resolucion de un sistema de ecuaciones lineales
mediante el metodo de los gradientes conjugados . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo de los gradientes conjugados con precondicionamiento para resolver
Ax = b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Resultados obtenidos por diversos metodos iterativos para resolver un problema lineal mal condicionado de 50 ecuaciones con 50 inc
ognitas . . . . . . . . . . . . . . .
Algoritmo de los gradientes conjugados para resolver AT (b Ax) . . . . . . . . . . . . .

147
150
165
176
188

Algoritmo para resolver sistemas de ecuaciones lineales Ax = b, siendo A dispersa


N
umero de operaciones a realizar con diversas variantes de la matriz de la gura 3.1 para, utilizando eliminaci
on de Gauss, resolver un sistema de ecuaciones
lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Algoritmo de grado mnimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Ejemplo de aplicaci
on del algoritmo de grado mnimo . . . . . . . . . . . . . . . . . . . . . . .
3.5 Algoritmo de Cuthill-McKee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 Algoritmo para determinar un nudo pseudoperiferico en un grafo (para obtener
el nudo de partida del algoritmo de Cuthill-McKee) . . . . . . . . . . . . . . . . . . . . . . . .
3.7 Pasos y camino trazado para renumerar el digrafo de la gura 3.33 . . . . . . . . . . . .
3.8 Pila correspondiente al digrafo de la gura 3.34 . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.9 Pila correspondiente al digrafo de la gura 3.36 . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10 Algoritmo de Tarjan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.11 Algoritmo para resolver mnimos cuadrados con matrices dispersas mediante
las ecuaciones normales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.12 Algoritmo de ortogonalizaci
on dispersa de George y Heath . . . . . . . . . . . . . . . . . . .

221

4.1
4.2
4.3
4.4

283
286
300
307

2.7
2.8
2.9
3.1
3.2

Convergencia de diversas sucesiones escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Convergencia del metodo de la biseccion aplicado a x sen(x) 1 = 0 . . . . . . . . . . .
Convergencia del metodo de Newton modicado aplicado a x3 sen(x) = 0 . . . . .
Algoritmo de Newton-Raphson para sistemas de ecuaciones no lineales . . . . . . . . .

190
191
193
196

222
235
237
238
241
256
258
259
260
269
272

Indice de Tablas

4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.17
4.18

XXVII

Proceso de convergencia del problema del ejemplo 4.3 mediante el metodo de


Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de convergencia del problema del ejemplo 4.3 mediante el metodo de
Newton-Raphson por diferencias nitas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de convergencia del problema del ejemplo 4.3 mediante el metodo de
Newton, variante Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de convergencia del problema del ejemplo 4.3 mediante el metodo de
Newton, variante SOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo cuasi Newton con la f
ormula de Broyden para la soluci
on de sistemas
de ecuaciones no lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de convergencia a la soluci
on del problema del ejemplo 4.5 con el
metodo cuasi Newton basado en la f
ormula de Broyden . . . . . . . . . . . . . . . . . . . . .
Algoritmo de Newton para sistemas de ecuaciones no lineales con el criterio
de salvaguarda de Armijo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de convergencia a la soluci
on del sistema de ecuaciones no lineales del
ejemplo 4.6 con el metodo de Newton y el criterio de Armijo . . . . . . . . . . . . . . . . .
Par
ametros del problema de la gura 4.17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo de Gauss-Newton para resolver problemas no lineales de mnimos
cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metodo de Gauss-Newton. Proceso de convergencia a la solucion del problema
del ejemplo 4.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo de Levenberg-Marquart para resolver problemas no lineales de mnimos
cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Datos del problema no lineal de mnimos cuadrados del ejemplo 4.9 . . . . . . . . . . . .
Metodo de Levenberg-Marquardt. Proceso de convergencia a la soluci
on del
problema del ejemplo 4.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

310
316
318
320
323
326
333
336
340
346
349
353
354
357

5.1

Par
ametros del problema de la planicaci
on de la generaci
on de energa de
una empresa electrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

6.1

Bases y soluciones basicas del poliedro del ejemplo 6.5 . . . . . . . . . . . . . . . . . . . . . . 394

7.1
7.2
7.3
7.4

El algoritmo simplex revisado (comienza a partir de una soluci


on factible) . . . . . . .
El metodo simplex en sus dos fases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo simplex revisado en la forma producto de la inversa de la base . . . . . . .
Algoritmo simplex revisado para variables acotadas . . . . . . . . . . . . . . . . . . . . . . . .

420
432
446
454

8.1
8.2
8.3
8.4

Combinaciones posibles primal-dual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Algoritmo dual del simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo dual del simplex para variables acotadas . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo primaldual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

471
481
483
489

9.1
9.2
9.3
9.4

Algoritmo para la obtenci


on de un arbol maximal de un grafo dirigido . . . . . . . . .
Algoritmo para la triangularizaci
on de una base . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estructura de datos del grafo de la gura 9.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo para la obtenci
on de los multiplicadores simplex en el algoritmo
simplex para ujos en redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

507
510
513
514

XXVIII
9.5
9.6
9.7
9.8
10.1
10.2
10.3
10.4
10.5
10.6

Indice de Tablas

Algoritmo para la actualizaci


on del vector s() en el metodo simplex especializado para optimizaci
on de ujos en redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Estructura de datos del arbol de la gura 9.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo de descomposicion de Dantzig-Wolfe . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Resultado del problema del ejemplo 9.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo de Karmarkar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo primal de escalado afn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmo dual de escalado afn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de convergencia del algoritmo dual de escalado afn aplicado al ejemplo 10.5
Algoritmo primal-dual de puntos interiores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proceso de convergencia del algoritmo primal-dual de puntos interiores aplicado al ejemplo 10.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

520
522
538
551
567
578
591
592
602
604

12.1 Algoritmo general para programas enteros basado en relajaciones sucesivas . . . . . . 640
12.2 El algoritmo de los planos cortantes de Gomory . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
12.3 El algoritmo de ramicaci
on y acotamiento o branch and bound . . . . . . . . . . . . . . . 649
A.1 Forma de la bola unidad para diferentes normas en 2 . . . . . . . . . . . . . . . . . . . . . . 676
B.1

Par
ametros de la aritmetica de precision nita de diversas m
aquinas . . . . . . . . . . . 701

D.1 Costes unitarios de la compra o venta de valores o productos nancieros . . . . . . . .


D.2 Balance equilibrado a partir del cual se obtiene una soluci
on factible inicial
del problema de la gesti
on nanciera a corto plazo . . . . . . . . . . . . . . . . . . . . . . . . .
D.3 Producci
on/consumo horario de agua, vapor de agua y condensados de las
diversas unidades de producci
on de la renera . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D.4 Requisitos horarios de energa electrica y combustibles en las distintas unidades
de producci
on, y consumos de vapor y potencias de las turbinas . . . . . . . . . . . . . .
D.5 Entalpas en kcal/kg de los diversos uidos de vapor de agua de la renera . . . . .
D.6 Soluciones optimas de los diversos modelos del problema de la renera . . . . . . . . .

725
742
748
749
752
762

E.1

Especicaciones numericas de un problema de dieta alimenticia como el introducido en el captulo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775

F.1

Segundos de c.p.u. invertidos en una estaci


on de trabajo HP APOLLO 9000 730
para resolver diversos problemas de optimizaci
on en redes . . . . . . . . . . . . . . . . . . . 817

H.1 Algoritmo para la estimaci


on del n
umero de condici
on 1 (T ) de una matriz
triangular superior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
H.2 El algoritmo de Hager para estimar el n
umero de condici
on 1 de una matriz A . . . 887

Prefacio
El contenido de este libro tiene que ver fundamentalmente con la tecnologa hoy en da disponible de lo que en sentido amplio se conoce como an
alisis numerico o calculo numerico. Por
precisar un poco m
as, se reere a aquellas tecnicas y procedimientos de computo que abordan
los problemas de resolver sistemas de ecuaciones lineales y no lineales, programas lineales (tambien denominados problemas de programaci
on lineal) y programas enteros (programas lineales
donde algunas o todas las variables est
an restringidas a tomar valores enteros). Constituye
la tercera edicion impresa de un esfuerzo tendente a estudiar los problemas mencionados con
cierta profundidad y a transmitir a los lectores las experiencias que de ello se han derivado en
los u
ltimos tiempos. El precedente m
as cercano es el publicado en 1993 en esta misma editorial
bajo el ttulo Tecnologas Computacionales para Sistemas de Ecuaciones, Optimizaci
on Lineal
y Entera, que merecio el honor de ser designado Premio Jose Morillo y Farfan por la Fundaci
on
2
2
F I del Ministerio de Industria y Energa y la Universidad Politecnica de Madrid.
Aun cuando los ejemplos y la casustica que se abordan en el libro con m
as enfasis son los
que se suscitan en la modelizacion, simulaci
on y optimizaci
on de sistemas de energa electrica
de generacion, transporte y distribuci
on, los metodos, tecnicas y algoritmos que se estudian
son universalmente aplicables. Si se utilizan como banco de pruebas los problemas que se
mencionan, es porque la experiencia profesional no academica del autor se ha desarrollado fundamentalmente en el sector energetico-electrico (primero en Hidroelectrica Espa
nola, despues
en Iberdrola), donde surgen con asiduidad.
El libro tiene un car
acter esencialmente practico. Antes de abordar un procedimiento o
algoritmo de c
alculo para resolver un problema, se estudian con rigor los fundamentos te
oricos
de lo que se va a proponer, el porque es ventajoso hacerlo de una u otra manera y cu
ales
son los resultados que cabe esperar de las operaciones que hay que llevar a cabo. En la gran
mayora de los casos, a todo lo expuesto le acompa
na un programa de ordenador, codicado
en Fortran 77 o 90 y C, el cual se incluye en un CD-ROM que se adjunta al libro, con el
n de que el lector pueda constatar la utilidad de lo expuesto y aplicarlo a alg
un problema
concreto si es el caso. Cuando la complejidad del algoritmo no aconseja listar su codicaci
on
por ser excesivamente larga, se indican cuales son las mejores libreras de software donde se
pueden recabar versiones adecuadas o aquellas direcciones de Internet donde se distribuyen
programas similares.
Los algoritmos que se listan en las tablas correspondientes utilizan como vehculo de expre
sion un lenguaje muy similar al del software Matlab. Este,
ya en su versi
on 5.0, constituye
sin duda uno de los instrumentos m
as usados y referenciados para ensayar, dise
nar o incluso codicar profesionalmente procedimientos numericos y algoritmos. Una recomendacion que
osamos hacer al lector interesado en los asuntos que trata este libro es que estudie en el los
XXIX

XXX

Prefacio

fundamentos te
oricos de los procedimientos que le interesen y su funcionamiento, y que si en el
futuro necesita de su concurso para cualesquiera sean las oportunidades, utilice el software que
se incluye en el libro o acuda a Matlab, pues aqu encontrar
a tratados de forma compacta
muchas de las posibilidades que hoy en da se ofrecen numericamente para resolver problemas
como los que aborda el libro. Una alternativa aceptable a Matlab es Mathematica. En
cualquiera de los casos, si de lo que se trata es construir un programa que resuelva de forma
robusta un problema de caractersticas profesionales, lo mejor siempre es dise
nar su esqueleto trozo a trozo, con herramientas como las que propone el libro, o proporcionan Matlab o
Mathematica, y luego codicar de forma optima lo que se sabe que funciona en un lenguaje
como Fortran 90 o C, ahorr
andose el tratamiento de casustica no necesaria.
El libro se ha escrito con la intenci
on de dirigirse a personas que deseen poner al da
sus conocimientos sobre tecnicas de calculo en ordenador para resolver los problemas que
habitualmente surgen de la modelizaci
on matematica de sistemas fsicos, tecnicos, economicos o
sociales: concretamente cuando se obtienen de ellos sistemas de ecuaciones lineales y no lineales,
de peque
no y gran tama
no, problemas de programaci
on lineal y problemas de programaci
on
entera o mixtos lineales-enteros, tambien de cualquier dimensi
on. Tambien esta dirigido a
alumnos de cursos avanzados de ingeniera, licenciatura, o incluso doctorado, como libro de
texto. En la Escuela Tecnica Superior de Ingenieros Industriales de Madrid este libro se utiliza
como texto ocial de la asignatura Matem
aticas de la Especialidad Electricidad-Electrotecnia,
en cuarto curso de la carrera.
C
omo estudiar el libro como texto
La primera parte, Sistemas de ecuaciones, puede constituir gran parte del programa de un
curso cuatrimestral sobre tecnicas de calculo numerico para resolver sistemas de ecuaciones
lineales y no lineales. Adem
as de los tradicionales y m
as novedosos procedimientos para llegar
a la soluci
on numerica de sistemas en los que la matriz de coecientes, o la matriz Jacobiana
correspondiente, se guarda y estudia en su totalidad, en esta primera parte tambien se estudian los algoritmos necesarios para resolver sistemas de matrices dispersas. En este sentido se
abordan todos los problemas anejos que esto representa: la reordenaci
on de las ecuaciones, las
operaciones elementales con matrices dispersas, etc.
La segunda y tercera partes del libro, enfocadas dentro de lo que se conoce como tecnicas
de optimizaci
on y dedicadas a la programaci
on lineal y a la programaci
on entera, pueden conformar el programa id
oneo de un curso cuatrimestral sobre tecnicas basicas y avanzadas de
metodos y algoritmos de optimizaci
on lineal (programaci
on lineal y entera). Lo incluido en
estas partes del libro son los procedimientos mas modernos y ables para resolver programas
lineales y enteros, cualesquiera sean sus dimensiones. Ademas de todas las variantes mas utilizadas del metodo simplex, se estudian en profundidad los algoritmos de puntos interiores m
as
extendidos: el primal y el dual de escalado afn y los primal-dual. Estos u
ltimos permiten, con
una sustancial ventaja respecto del simplex, resolver problemas de programaci
on lineal de muy
grandes dimensiones en tiempos polin
omicos.
Agradecimientos
El producto nal que representa este libro ha sido posible gracias al apoyo consciente o inconsciente de varias instituciones y particulares. La experiencia profesional de m
as de 20 a
nos en
Iberdrola, que duda cabe, es el hilo conductor que ha permitido plasmar en muchos apartados

Prefacio

XXXI

de el conocimientos, tecnicas y formacion. Mi aportaci


on docente a la Universidad Politecnica
de Madrid, m
as concretamente a la Escuela Tecnica Superior de Ingenieros Industriales, mi
autentica segunda casa, durante m
as de 10 a
nos, me ha enriquecido cientcamente muy notablemente a la vez que permitido conocer a un gran n
umero de excelentes profesores de los que
he aprendido mucho. Tambien deseo agradecer a la Editorial Reverte la oportunidad que me
brind
o en su momento para poder publicar esta obra en su prestigiosa empresa.
Nada de lo que se puede leer en estas paginas hubiese sido posible sin la existencia de los
modernos procesadores de texto cientcos LATEX y TEX, al igual que la facilidad que en los
u
ltimos a
nos ha supuesto poder acceder a los mismos y a otros muchos recursos a traves de
Internet. La comunidad cientco-tecnologica esta de enhorabuena con la amplia difusi
on
que esta esta experimentando en todos los ambitos de la sociedad.
Jose Luis de la Fuente OConnor
Madrid, Junio de 1997.

Primera parte
Sistemas de ecuaciones

Captulo

METODOS
DIRECTOS DE
DE SISTEMAS DE
SOLUCION
ECUACIONES LINEALES

BORDAMOS EN ESTE captulo uno de los problemas b


asicos del algebra lineal
numerica y de muchos procesos de la ingeniera y de la ciencia: la soluci
on de sistemas
de ecuaciones lineales. Muchos algoritmos metodos o procedimientos numericos
esencialmente orientados a su implementacion en un ordenador que buscan dar
solucion numerica a un determinado modelo matem
atico resultado de la representaci
on formal
del comportamiento de los elementos o procesos que denen o integran un proyecto, fen
omeno o
actividad, deben resolver sistemas de ecuaciones lineales de mayor o menor tama
no. Ejemplos
simples los constituyen la determinaci
on de las tensiones en unos nudos de una red electrica de
corriente continua mediante las leyes de Kirchho, o la evaluaci
on de las tensiones mecanicas
en las vigas que denen una estructura reticulada.
La resolucion de un sistema de ecuaciones lineales aparece tambien con mucha frecuencia
como un subproblema de un problema m
as complicado de an
alisis numerico; tal ocurre por
ejemplo cuando se resuelve iterativamente un sistema de ecuaciones no lineales por el metodo
de Newton-Raphson, donde en cada etapa de ese proceso iterativo se requiere resolver un
sistema de ecuaciones lineales, o en procesos de optimizacion tanto lineales como no lineales.
Los sistemas de ecuaciones presentan con frecuencia una estructura muy especial que puede
ser objeto de tratamiento particular. Por ejemplo, los problemas de interpolaci
on polinomial,
que conducen de manera natural a sistemas de ecuaciones con una matriz de coecientes de
Vandermonde, o los problemas derivados de la modelizaci
on de series temporales, que conducen
a sistemas de ecuaciones en los que la matriz de coecientes son del tipo de las denominadas de
Toeplitz. Algunos problemas lineales de ajuste de par
ametros por mnimos cuadrados tambien
conducen a sistemas de ecuaciones lineales con matrices simetricas denidas positivas, etc.
3

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

La resoluci
on de un sistema de ecuaciones lineales desde el punto de vista teorico no tiene
ninguna dicultad conceptual; llevarlo a la pr
actica, s. Esto es debido a que los sistemas a
resolver son frecuentemente de un tama
no considerable y, esencialmente, al hecho de que en
on nita, lo que introduce
el entorno fsico en que se resuelven la aritmetica1 opera con precisi
errores de redondeo en todas las operaciones efectuadas, amen de que cualquier singularidad
puede acarrear, si no se preve, consecuencias no deseadas.
En lo que sigue nos dedicamos a estudiar los metodos directos para dar soluci
on numerica a
los sistemas de ecuaciones lineales. Estos metodos proporcionan la respuesta al problema en un
n
umero jo de pasos; la bondad de la soluci
on que obtienen s
olo se ve afectada por los errores
de redondeo del sistema de numeraci
on en coma otante de la m
aquina u ordenador que lleva
a efecto esos pasos.

1.1

Planteamiento del problema a resolver

El problema que se plantea es la soluci


on de sistemas de ecuaciones lineales del tipo
a11 x1 + a12 x2 + + a1n xn = b1
a21 x1 + a22 x2 + + a2n xn = b2
..
..
..
.
.
.
.
..
am1 x1 + am2 x2 + + amn xn = bm ,
lo que signica determinar los valores de las variables x1 , . . . , xn que hacen que se cumplan
las igualdades. A los n
umeros aij se les denomina coecientes del sistema y a los bi terminos
independientes.
Si se introducen las matrices

a11 a12 a1n


a21 a22 a2n

A = ..
.. ,
...
.

.
am1 am2 amn

x1
x2

x = ..
.
xn

b1
b2

y b = .. ,
.
xm

el sistema se puede representar de forma mas compacta por


Ax = b.
En general se supondr
a que la matriz de coecientes A mn , x n y b m . Los casos
posibles que se pueden presentar con este planteamiento del problema, seg
un las dimensiones
y rango de la matriz A, son los de la gura 1.1. El caso 1a, la matriz A es cuadrada regular,
es el que estudiaremos inmediatamente; los demas los abordaremos posteriormente dentro del
contexto de los denominados problemas de mnimos cuadrados.
Antes de proseguir, recordemos brevemente algunos resultados importantes de algebra lineal
referidos a los sistemas objeto de nuestro interes.
1

En el apendice B se estudia la aritmetica con precisi


on nita de los ordenadores y sus consecuencias en los
procesos de c
alculo numerico.

1.1 Planteamiento del problema a resolver

m=n

m=n

rango(A) = m = n

rango(A) < m = n

1a

1b

m>n

m>n

rango(A) = n < m

rango(A) < n < m

2a

2b

m<n

m<n

rango(A) = m < n

rango(A) < m < n

3a

3b

Figura 1.1
Casos posibles de sistemas de ecuaciones lineales Ax = b dependiendo del tama
no y rango de
la matriz A

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Teorema 1.1 (Compatibilidad de un sistema de ecuaciones lineales) La ecuaci


on Ax = b
admite soluci
on si y s
olo si
rango(A|b) = rango(A).

Corolario 1.1 Si Amn tiene rango m, Ax = b siempre tiene soluci


on.
Teorema 1.2 Si x0 es una soluci
on de Ax = b, el conjunto de soluciones de la ecuaci
on
est
a dado por x0 + ker(A).
Corolario 1.2 Una soluci
on de Ax = b es u
nica si y s
olo si ker(A) = .
Teorema 1.3 La ecuaci
on Ax = 0, Amn , n > m, siempre tiene una soluci
on no trivial.
Teorema 1.4 Si A es una matriz cuadrada de orden n, las siguientes condiciones son
equivalentes:
1. rango(A) = n.
2. ker(A) = .
3. Los vectores columna de A son linealmente independientes.
4. Los vectores la de A son linealmente independientes.
5. Existe una matriz de orden n, A1 , tal que
A1 A = AA1 = I.

Interpretemos geometricamente el problema de resolver en dos dimensiones un sistema de


ecuaciones lineales cualquiera
a11 x1 + a12 x2 = b1
a21 x1 + a22 x2 = b2 .
Cada una de las ecuaciones que componen el sistema representa una recta del plano eucldeo
seg
un se describe en la gura 1.2. La resoluci
on del sistema tiene como objetivo la b
usqueda
de las coordenadas del punto donde se cortan esas dos rectas.
on de un sistema de ecuaciones lineales se puede interpretar
Generalizando a n , la resoluci
como la b
usqueda de las coordenadas del punto(s) de intersecci
on de los hiperplanos asociados
a cada una de las ecuaciones.
Tambien es posible interpretar geometricamente el problema en terminos de vectores en el
subespacio Im(A). Si escribimos el sistema anterior de dos ecuaciones con dos incognitas de la
forma




 
a11
a12
b
x +
x = 1 ,
a21 1
a22 2
b2

1.2 Eliminacion de Gauss

x2

a11 x1 + a12 x2 = b1

a21 x1 + a22 x2 = b2
x1

Figura 1.2
Descripcion geometrica en dos dimensiones de la resolucion de un sistema de ecuaciones
lineales
el problema es el de descomponer linealmente el vector b en los vectores columna que denen
las dos columnas de la matriz de coecientes. En la gura 1.3 se representa esta situacion.
En n el problema se reere a la b
usqueda de la descomposicion lineal de un vector de n
componentes seg
un n vectores dados.

1.2

Eliminaci
on de Gauss

Comenzamos el estudio de los procedimientos numericos directos para resolver el sistema Ax =


b, A nn , x n y b n , con el metodo por excelencia del algebra lineal numerica:
la eliminaci
on de Gauss. Supondremos que la matriz A es de rango completo, por lo tanto
invertible, y que si eventualmente no lo es el procedimiento deber
a detectarlo.
El metodo, aunque varios autores anteriores (Lagrange, Leibniz, Bezout y otros) ya haban
investigado sobre el mismo, se atribuye a Carl Friedrich Gauss (1777-1855) quien lo aplic
o por
primera vez en 1809 con motivo de unos estudios sobre orbitas de ciertos cuerpos celestes.
La idea en la que se basa el metodo es muy sencilla: aplicar al sistema
a11 x1 + a12 x2 + + a1n xn = b1
a21 x1 + a22 x2 + + a2n xn = b2
.
.
.
.
..
..
..
..
an1 x1 + an2 x2 + + ann xn = bn
una serie de transformaciones lineales de tal forma que al nal de n pasos se haya transformado
en uno mucho m
as facil de resolver: concretamente, en un sistema lineal triangular superior de
la forma
u11 x1 + u12 x2 + + u1n xn = b1
u22 x2 + + u2n xn = b2
.
..
..
.
unn xn = bn ,

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

a11
a21

b1
b2

a12
a22

Figura 1.3
Representacion geometrica en el subespacio Im(A) de dos dimensiones de la resoluci
on de un
sistema de ecuaciones lineales
o, escrito en forma matricial,

U x = b .

Todo ello tratando de evitar el c


alculo de la inversa A1 , lo que comporta, como veremos mas
adelante, un n
umero de operaciones signicativamente mayor.
Un sistema triangular superior, siempre y cuando se satisfagan las condiciones
uii = 0,

i = 1, . . . , n,

es facilmente resoluble de manera recurrente mediante las f


ormulas

n

1 
xk =
bk
uki xi ,
ukk
i=k+1

k = 1, . . . , n.

Este proceso se conoce como sustituci


on inversa o hacia atr
as.
La eliminaci
on de Gauss convierte un sistema de ecuaciones lineales cualquiera en uno triangular superior equivalente mediante una sucesi
on de etapas, cada una de las cuales comporta
las siguientes operaciones fundamentales:
a) Multiplicaci
on de una cualquiera de las ecuaciones del sistema por un n
umero distinto
de cero.
b) Sustituci
on de una ecuaci
on cualquiera del sistema por la que resulta de sumarle otra
cualquiera.
c) Permutaci
on del orden en que aparecen en el sistema dos ecuaciones cualesquiera del
mismo.

1.2 Eliminacion de Gauss

Comencemos la exposicion de la mecanica del metodo mediante un ejemplo que nos servir
a
como introducci
on.
Se desea resolver el sistema de cuatro ecuaciones lineales con cuatro incognitas
2x1 + x2
+ 4x4
4x1 2x2 + 3x3 7x4
4x1 + x2 2x3 + 8x4
3x2 12x3 x4

= 2
= 9
= 2
= 2.

Escrito en forma matricial, Ax = b, los distintos componentes son

2 1
0 4
4 2
3 7

,
A=
4 1 2 8
0 3 12 1

2
9

b=
2
2

(1.1)

x1
x2

.
y x=
x3
x4

Reconguremos inicialmente la matriz A aument


andola con la columna que dene el termino
es decir,
independiente b y llamemos a la nueva matriz resultante A;

2 1
0 4 2
4 2

3 7 9

A = [A|b] =
.
4 1 2 8 2
0 3 12 1 2
Etapa 1
Comprobemos que el elemento a
11 denominado elemento pivote no es cero. Si es distinto
de cero, eliminemos los elementos de la primera columna por debajo de ese a
11 . Para ello,
denamos para cada la 2, . . . , n los factores o multiplicadores
ri =

a
i1
,
a
11

i = 2, . . . , n.

A continuaci
on, restemos de las las i = 2, . . . , n, la primera multiplicada por ri : todos los
elementos debajo de la diagonal principal de la columna 1 se anular
an. Los dem
as elementos de
A debajo de la primera la tambien se veran afectados de acuerdo con la siguiente expresi
on:
ij ri a
1j ,
a
ij a

i = 2, . . . , n; j = 2, . . . , n + 1.

En el ejemplo que venimos manejando, los multiplicadores son


r2 = a
21 /
a11 = 4/2 = 2
r3 = a
31 /
a11 = 4/2 = 2
r4 = a
41 /
a11 = 0/2 = 0.
Los coecientes de la matriz A que cambian de valor son:
en la 2a la: a
21 0
a
22 a
22 r2 a
12 = 2
a
23 a
23 r2 a
13 = 3
a
24 a
24 r2 a
14 = 7
a
25 a
25 r2 a
15 = 9

+
+
+
+

21
20
24
22

= 0
= 3
= 1
= 5;

10

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

en la 3a la:

en la 4a la:

a
31
a
32
a
33
a
34
a
35
a
41
a
42
a
43
a
44
a
45

0
a
32 r3 a
12
a
33 r3 a
13
a
34 r3 a
14
a
35 r3 a
15
0
a
42 r3 a
12
a
43 r4 a
13
a
44 r4 a
14
a
45 r4 a
15

=
1 21
= 2 2 0
=
8 24
=
2 22

= 1
= 2
=
0
= 2;

= 3 0 1
= 12 0 0
= 1 0 4
=
2 02

= 3
= 12
= 1
=
2.

es:
La nueva matriz A1 , resultado de transformar A,

2 1
0 4 2
0 0

3 1 5

.
A1 =
0 1 2 0 2
0 3 12 1 2
Observese que se hubiese obtenido exactamente el mismo resultado o transformacion de
haber premultiplicado A por la denominada transformaci
on de Gauss que dene la matriz

1
2

L1 =
2
0

0
1
0
0

0
0
1
0

0
0
,
0
1

matriz triangular inferior unitaria, denominada a su vez matriz de transformaci


on de Gauss,
que tambien se puede escribir de la forma L1 = I e1T , donde

0
2

=
2
0
En efecto,

1
2

L1 A =
2
0

0
1
0
0

0
0
1
0

1
0
.
y e1 =
0
0

0
2 1
0 4 2
2 1
0 4 2

0 4 2
3 7 9 0 0
3 1 5
=
.

4 1 2 8 2
0 1 2 0 2
0
1
0 3 12 1 2
0 3 12 1 2

En resumen, A1 = L1 A.
La inversa de la matriz L1 , por otro lado, como se puede comprobar f
acilmente, es

L1
1

1
2

=
2
0

0
1
0
0

0
0
1
0

0
.

0
1

Observese que es identica a L1 salvo por lo que respecta al signo de los coecientes de la
primera columna debajo de la diagonal principal.

1.2 Eliminacion de Gauss

11

Etapa 2
Hagamos cero los elementos debajo de la diagonal principal de la 2a columna de A1 .
Al intentar hacerlo observamos que el elemento pivote a
122 es cero, lo que nos impide proceder
como en la etapa anterior. Para solventar esta eventualidad, comprobemos si alg
un elemento
de la columna 2 por debajo de a
122 es distinto de cero: si no hay ninguno, como se puede
demostrar, esta columna es combinacion lineal de la primera y por tanto la matriz es singular;
si existe alguno, escojamos el de mayor valor absoluto y procedamos a intercambiar la la
correspondiente con la segunda.
El elemento de mayor valor absoluto debajo de la diagonal principal en la segunda columna,
3, se encuentra en la la 4. Intercambiamos esa la 4 con la 2. Se obtendr
a

2 1
0 4 2

0 3 12 1 2 .
A1 =

0 1 2 0 2
0 0
3 1 5
Este mismo resultado, como se puede comprobar de forma inmediata, se obtiene premultiplicando la matriz A1 por la matriz de permutaci
on

1
0

P1 =
0
0

0
0
0
1

0
0
1
0

1
.

0
0

Recapitulemos, la matriz con la que vamos a operar a continuaci


on, A1 , es:

A1 = P1 L1 A.
Apliquemos a continuaci
on a la columna 2 la misma idea que a la columna 1 y hagamos cero
sus elementos 3 a n. Los nuevos multiplicadores saldr
an de la expresi
on


1
a
i2
ri = 1 ,
a
22

i = 3, 4.

an
Los nuevos valores de los elementos de la matriz A1 por debajo de la segunda la se obtendr
aplicando la expresi
on


1
1
1
a
ij
a
ij
ri a
2j
,

i = 3, 4; j = 3, . . . , 5.

Los valores numericos que se obtienen en el ejemplo son, para el caso de los multiplicadores,


1

1

1 /
1 = 1/3
r3 = a
32
a22

r4 = a
42 /
a22 =
Los nuevos elementos de la matriz A1 resultante:

en la 3a la: a
132 0


0.

1 r a
1
a
133 a
33
3 23 = 2 +


a
134

a
135

1
a
34
1
a
35

r3
r3

1
a
24
1
a
25

0 +

= 2

1
3
1
3
1
3

12 =

1 =

1/3

2 = 8/3;

12

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

en la 4a la:

1 0
a
42


1 a
1 r a
1
a
43
43
3 0 12 = 3
4 23 =



1
1
1
a
44 a
44 r4 a
24 = 1 0 1 = 1


1
1
1 = 5 0 2 = 5.
a
45 a
45 r4 a
25

Observese que, al ser r4 = 0, los calculos para adaptar la cuarta la podran haberse evitado.
La nueva matriz resultado de estas transformaciones es

2 1
0 4
2
0 3 12 1

.
A2 =
0 0
2 1/3 8/3
0 0
3 1 5
Razonando de forma similar a como lo hicimos en la etapa anterior, la u
ltima matriz A2 se
expresa a partir de la inicial por

A2 = L2 P1 L1 A,

donde

1
0 0
0
1 0

L2 =
0 1/3 1
0
0 0

0
0
.
0
1

Etapa 3
Para conseguir transformar el sistema original en uno triangular superior s
olo resta anular el
2
2
elemento a
43 . El elemento de la diagonal principal a
33 es distinto de cero, luego procedemos a
calcular el multiplicador r4 :
2 /
2 = 3/2.
r4 = a
43
a33
an
Los nuevos valores de los elementos de la matriz A2 por debajo de la tercera la se obtendr
aplicando la expresi
on
2
2
2
a
ij
a
ij
ri a
3j
,
i = 4; j = 4, 5.
En concreto, en la cuarta la:
a
243 0
2 r a
2
44
1
a
244 a
4 34 =
2
2
2
a
45 a
45 r4 a
35 = 5 +
La nueva matriz resultado de estas transformaciones es

3
2
3
2

1
3
8
3

= 1/2
= 1.

2 1
0 4
2
0 3 12 1

A3 =
.

0 0
2 1/3 8/3
0 0
0 1/2 1
A este resultado se ha llegado despues de aplicar a la matriz inicial A una serie de transformaciones; concretamente:

A3 = L3 L2 P1 L1 A,

1.2 Eliminacion de Gauss

donde

1
0

L3 =
0
0

0
0
1
0
0
1
0 3/2

13

0
0
.
0
1

Tenemos, en conclusion, que la matriz original que dena el sistema, A, se puede transformar
en la triangular superior U , tal como queramos, aplic
andole las mismas transformaciones que

a A. Es decir,
U = L3 L2 P1 L1 A.
Como al vector b tambien se le han efectuado las mismas transformaciones dando lugar a otro
b , resolver el sistema de ecuaciones original es equivalente a resolver
U x = b .
Es decir,

2 1
0 4
x1
2

0 3 12 1 x2
2

.
0 0
2 1/3 x3 8/3
x4
0 0
0 1/2
1
La soluci
on de este sistema de ecuaciones se lleva a cabo muy facilmente mediante sustitucion
inversa:
x4 = 2,
sustituyendo en la tercera ecuaci
on,
x3 =

8/3 (2)(1/3)
= 1,
2

y, a su vez, haciendolo en la segunda,


x2 =

2 (1)(2) (12)(1)
= 4.
3

Por u
ltimo, sustituyendo los valores de las variables ya calculados en la primera ecuaci
on se
obtiene
2 4(2) 1(4)
x1 =
= 3.
2
La soluci
on de nuestro ejemplo es pues

x1
3
x2 4

x3 = 1 .
x4
2

14

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

1.2.1

Pivotaci
on

Ya conocemos la mecanica de la eliminaci


on de Gauss. Ahora bien, veamos que ocurre si
resolvemos con el procedimiento esbozado el sistema,



104 1
1 1




x1
x2

   

1
,
=
2

  

en una m
aquina con tres dgitos signicativos que efect
ue redondeos.
Aplicando la mec
anica apuntada, en la primera etapa se obtendra la nueva matriz A1 y el
nuevo vector b1 ; son:


104
1
A1 =
0 1 104

1
y b1 =
.
2 104

aquina lo redondeara a 104 ; de la misma forma procedera


El n
umero 1 104 = 9999, la m
con 2 104 . La soluci
on del sistema sera
104
= 1
104
1 x2
= 0.
x1 =
104

x2 =

Desde un punto de vista meramente algebraico, es indiferente la elecci


on que se haga de los
pivotes, siempre y cuando sean distintos de cero. Esto es debido a que los sistemas que se van
obteniendo son equivalentes y tienen todos la misma soluci
on, sea cual sea el modo en que se
van construyendo. Desde esta idea, la elecci
on m
as simple consiste en escoger en cada etapa el
primer elemento no nulo debajo de la diagonal principal de la columna correspondiente.
No ocurre lo mismo, como acabamos de ver, si se analiza la eleccion del pivote teniendo
en cuenta los errores de redondeo que inevitablemente introduce el sistema de numeraci
on en
coma otante de la maquina donde se efect
uan los c
alculos.
Para paliar estos errores, aplicaremos la estrategia que utilizamos cuando nos encontramos
un elemento en la diagonal principal igual a cero, aunque este no sea el caso. Es decir, antes
de empezar cada etapa i que nos lleve a hacer cero los elementos por debajo de la diagonal
principal en una determinada columna i, se realizara una b
usqueda entre esos elementos y se
escogera aquel de mayor valor absoluto. A continuaci
on, se deber
an intercambiar las las que
determinan ese elemento y la i. Para el caso de este u
ltimo ejemplo, en la primera etapa, en
lugar de operar sobre la matriz anterior, como el valor absoluto del elemento a21 es mayor que
el del a11 , se intercambiara la la 1 con la 2, obteniendose


1 1
A =
104 1


2
y b =
.
1


Continuando con el procedimiento normal, despues de la primera etapa, se llegara a


A1

1
1
=
0 1 104

b1

2
=
.
1 2 104

1.2 Eliminacion de Gauss

15

Por redondeos internos, la m


aquina vera
A1

1 1
=
0 1

b1

2
=
,
1

siendo la soluci
on del sistema de ecuaciones correspondiente


x1
x2

1
=
,
1

solucion mucho mejor que la anterior pues la real es


x2 =

0,9998
= 0,99989999
0,9999

x1 = 1,00010001.
El proceso descrito se denomina pivotaci
on parcial. Su motivaci
on radica por un lado en
la aritmetica de precision nita con la que trabajan todos los ordenadores y m
aquinas calculadoras, y que por l
ogica sera en uno de estos soportes donde se implemente el metodo, y
por otro en el hecho de que los factores o multiplicadores antes introducidos son inversamente
proporcionales al elemento pivote, por lo que si este es demasiado peque
no puede amplicar
los errores de redondeo a lo largo del proceso de soluci
on. Lo ideal desde el punto de vista
numerico sera no escoger el elemento de mayor valor absoluto al que nos referamos antes sino
que el pivote no fuese demasiado peque
no (por ejemplo no menor que una decima parte del
elemento de mayor valor absoluto).
En la tabla 1.1 se describe el algoritmo completo para resolver el sistema Ax = b mediante
eliminaci
on de Gauss. Parte de la matriz A ampliada en el termino independiente.
Una segunda estrategia de pivotaci
on es la conocida como pivotaci
on total. La idea consiste
en alterar convenientemente el orden natural de eliminaci
on de las variables a base de buscar
en una etapa i no solo el elemento de mayor valor absoluto en la columna correspondiente,
sino en todo lo que queda de la matriz; es decir, el maxikn, ijn |akj |. Desde el punto de
vista de la minimizaci
on del efecto de los errores de redondeo, la pivotaci
on total proporciona
la estrategia optima. Puede demostrarse de hecho que, desde un punto de vista te
orico y en
un cierto sentido que habra que precisar, la eliminaci
on de Gauss con pivotaci
on total es con
caracter general un algoritmo numericamente estable. La eliminacion de Gauss con pivotaci
on
parcial, por el contrario, no tiene esa propiedad te
orica. Pese a los peque
nos inconvenientes
apuntados, sin embargo, es raro que se recurra a la pivotaci
on total en la pr
actica dada la
gran cantidad de comparaciones que es necesario efectuar para llevarla a cabo y los buenos
resultados y excelentes prestaciones numericas que la parcial proporciona.
La version en Fortran 77 del algoritmo de la tabla 1.1 para resolver el sistema del ejemplo
que nos ha servido de introducci
on al metodo es la que sigue.
PROGRAM Gauss
C
parameter (n = 4)
real a(n,n+1),x(n)
C
data a/2.,-4.,4.,0.,1.,-2.,1.,-3.,0.,3.,-2.,-12.,4.,-7.,8.,-1.,2.,
+
-9.,2.,2./
C

16

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Tabla 1.1
Algoritmo para la resoluci
on de Ax = b mediante eliminaci
on de Gauss con pivotaci
on parcial

n de la Matriz Aumentada [A|b]


Transformacio

for i = 1 to n 1
Determinar ndice p {i, i + 1, . . . , n} tal que |a(p, i)| = maxijn |a(j, i)|.
Intercambiar las p e i.
for j = i + 1 to n
= a(j, i)/a(i, i)
for k = i + 1 to n + 1
a(j, k) a(j, k) a(i, k)
end
end
end

n Inversa.
Sustitucio

for j = n to1


n

a(j, k) x(k)
a(j, j)
x(j) b(j)
k=j+1

end

C
C
C
C

*** Eliminaci
on de Gauss ***
* Triangularizaci
on *
do k = 1,n-1
l
= 0
smax = abs(a(k,k))
do i = k+1,n
if (abs(a(i,k)).gt.smax) then
l
= i
smax = abs(a(i,k))
endif
end do
if (l.ne.0) then
do i = k,n+1
t
= a(l,i)
a(l,i) = a(k,i)
a(k,i) = t
end do
endif
do i = k+1,n
r = a(i,k)/a(k,k)
do j = k+1,n+1
a(i,j) = a(i,j)-r*a(k,j)
end do
end do

1.2 Eliminacion de Gauss

17

end do
C
C
C

* Sustituci
on inversa *
x(n) = a(n,n+1)/a(n,n)
do i = n-1,1,-1
c = a(i,n+1)
do j = i+1,n
c = c-a(i,j)*x(j)
end do
x(i) = c/a(i,i)
end do

C
print *,x
C
end

De esta codicacion de la eliminaci


on de Gauss con pivotaci
on parcial conviene destacar dos
aspectos negativos. El primero se reere a que no es realmente necesario intercambiar las las
una vez elegido el elemento pivote de cada etapa (lo que cuando el sistema es de gran dimensi
on
puede alargar en demasa la resoluci
on); basta con tener constancia en cada momento de d
onde
esta la la que intercambiar. El segundo, a que tal como est
a estructurado el programa s
olo
se podra resolver un sistema el denido por el b dado y no, como es lo m
as habitual, por
ejemplo, distintos sistemas con la misma matriz A y diversos terminos independientes.
Estos dos inconvenientes se pueden paliar mediante unas sencillas modicaciones en la
forma en que estan dispuestos los calculos y con la introducci
on de un elemento muy com
un
en tecnicas numericas de todo tipo: un vector ndice o puntero. Este vector ndice, al que
denominaremos IPIV, cuya dimensi
on es el n
umero de ecuaciones del sistema, se inicializa de
tal forma que cada uno de sus elementos indique la posici
on inicial en el sistema de cada una
de las ecuaciones; es decir,

1
2


IPIV = 3 .
.
..
n
Cuando haya que intercambiar dos las en un etapa, no se har
a intercambiando fsicamente los
elementos de esas dos las, sino haciendolo en las correspondientes de IPIV. Si por ejemplo, en
la primera etapa hay que utilizar como pivote un elemento de la cuarta la, una vez efectuado
el cambio, el vector IPIV quedar
a:

4
2


3
IPIV = 1 .

..
.
n
Si al nal de un proceso de resoluci
on de un sistema de cinco ecuaciones con cinco incognitas,

18

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

el vector puntero resultase

4
2

5 ,
IPIV =

1
3
la matriz A que se obtendra no resultara ser estrictamente triangular superior sino que tendra
la forma que sigue.

Para resolver el sistema que dene Ax = b habra que aplicar esas mismas manipulaciones de
las al vector b o tenerlo en cuenta.
Para solventar el segundo inconveniente de los mencionados, lo m
as logico parece, en lugar
de operar sobre la matriz aumentada, hacerlo sobre A directamente. Lo que habr
a que hacer,
claro esta, es guardar de alguna manera la informaci
on relativa a las manipulaciones efectuadas
a A a n de poderselas tambien hacer al vector b, cualquiera que sea este. El vector ndice IPIV,
en este sentido, puede guardar la informaci
on relativa a las pivotaciones efectuadas. Respecto
a las transformaciones que se aplican a la matriz A, la forma de guardarlas para aplic
arselas
a cada termino independiente de interes se basa en recordar que esas transformaciones estaban perfectamente determinadas por unos multiplicadores recordemos tambien las matrices
elementales Li asociados a cada la de cada etapa. Si guardamos los i 1 multiplicadores
que denen cada etapa i en alg
un sitio, todo el proceso de eliminaci
on se podr
a reconstruir
f
acilmente. Ahora bien, que mejor sitio para guardar esos multiplicadores que los lugares vacos
o mejor dicho, que se hacen cero que provocan las transformaciones que denen: en la etapa
i, debajo de la diagonal principal en la columna i.
Recordando el sistema (1.1) que nos serva para introducir la mec
anica de la eliminaci
on
de Gauss, solo considerando la matriz A, con esta forma de proceder, al nal del proceso, esa
matriz sera:

2 1
0 4

2 3 12 1
A=
.
2 1/3
2 1/3
0 0 3/2 1/2
Los multiplicadores distintos de cero que se han calculado en todo el proceso son 2, 2, 1/3
y 3/2.
Un programa completo que implementa estas ideas y que permite resolver cualquier sistema
Ax = b, con pivotaci
on parcial, cualquiera que sea su termino independiente b, se lista a
continuaci
on.

1.2 Eliminacion de Gauss

PROGRAM Gaussc
C
parameter (m = 10)
integer ipvt(m),pi
C
real a(m,m),b(m),x(m)
C
character*12 fil
C
C
C
C

*** Resoluci
on de un sistema lineal regular cualquiera Ax=b
mediante eliminaci
on de Gauss ***
print *,Dimensi
on de la Matriz A?
read *,n
print *,Fichero de datos?
read (A),fil
open (10,file=fil)
read (10,*) ((a(i,j),i=1,n),j=1,n)
read (10,*) (b(i),i=1,n)
do i = 1,n
ipvt(i) = i
end do

C
C
C

* Triangularizaci
on *
do k = 1,n-1
l
= 0
smax = abs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (abs(a(ip,k)).gt.smax) then
l
= i
smax = abs(a(ip,k))
endif
end do
if (l.ne.0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip = ipvt(i)
r = a(ip,k)*r1
do j = k+1,n
a(ip,j) = a(ip,j)-r*a(pi,j)
end do
a(ip,k) = -r
end do
end do

C
do k = 1,n-1
ip = ipvt(k)
do i = k+1,n
pi
= ipvt(i)
b(pi) = b(pi)+a(pi,k)*b(ip)
end do
end do

19

20

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

C
C
C

* Sustituci
on inversa *
x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi = ipvt(i)
c = b(pi)
do j = i+1,n
c = c-a(pi,j)*x(j)
end do
x(i) = c/a(pi,i)
end do

C
print (Soluci
on:,(4f5.1)),(x(i),i=1,n)
C
end

1.2.2

N
umero de operaciones aritm
eticas del m
etodo

Para valorar las prestaciones de un algoritmo numerico se han de considerar diversos factores.
Dos de los mas importantes son sin duda su estabilidad numerica ante el efecto de los errores de
redondeo y la cantidad de tiempo necesaria para completar los c
alculos que conlleva. Ambos
factores dependen del n
umero de operaciones aritmeticas necesarias para la aplicacion del
algoritmo.
Los tiempos necesarios para realizar en un ordenador la multiplicaci
on y la divisi
on de dos
n
umeros son aproximadamente iguales y considerablemente mayores, en terminos relativos, que
los requeridos para realizar la suma o diferencia, que tambien son muy semejantes entre s. La
relacion entre el tiempo que requiere una multiplicaci
on o divisi
on y una suma o resta vara de
un ordenador a otro. En lo que resta del libro, al referirnos a las operaciones de multiplicaci
on
o divisi
on en un algoritmo lo haremos mediante la expresi
on multiplicaciones/divisiones y a
las sumas o restas mediante sumas/restas. Cuando mencionemos sumas/restas, por ejemplo,
nos estaremos reriendo al n
umero total de sumas mas restas que el correspondiente algoritmo
necesita para llevarse a efecto.
Determinemos el n
umero de operaciones aritmeticas que requiere el procedimiento de eliminaci
on de Gauss para resolver un sistema de ecuaciones lineales. En la primera etapa, las
operaciones que se realizan estan simb
olicamente representadas por el esquema que sigue.

..
.

.
..



.. ..
. .

0 2
.. .. ..
.
. .

0 2

0 2

2
..
.
2
2

2
..
.
2
2

2
.
..
2
2

El smbolo 2 designa los elementos de la matriz que se ven afectados en esa etapa y que, en
principio, son distintos de cero.
Si en la etapa i se esta transformando una matriz n n, las operaciones que en ella se

1.2 Eliminacion de Gauss

21

realizan son:
ni

divisiones para el c
alculo de los factores o multiplicadores;

(n i)(n i + 1)

multiplicaciones y restas para modicar los elementos de la


matriz por debajo de la la i que no est
an en la propia
columna i.

Si como hemos indicado, las multiplicaciones/divisiones y las sumas/restas emplean aproximadamente el mismo tiempo de calculo, podemos sumar sus n
umeros de operaciones con lo
que se obtienen para cada etapa,
(n i) + (n i)(n i + 1) = (n i)(n i + 2)
multiplicaciones/divisiones y
(n i)(n i + 1)
sumas/restas.
En n 1 etapas de que consta el proceso, se haran
n1

(n i)(n i + 2) =

(n2

+ 2n)

i=1

n1

1 2(n + 1)

i=1

n1

i+

i=1

= (n2 + 2n)(n 1) 2(n + 1)


(n 1)n(2n 1)
6
3
2
2n + 3n 5n
=
6

n1

i2

i=1

(n 1)n
2

multiplicaciones/divisiones y
n1

(n i)(n i + 1) =

(n2

+ 2n)

i=1

n1

1 (2n + 1)

i=1

n1

i=1

= (n2 + n)(n 1) (2n + 1)


(n 1)n(2n 1)
6
3
n n
=
3
+

sumas/restas.
El comportamiento de estos valores para n grande es como
1 3
n .
3

i+

n1

i=1

(n 1)n
2

i2

22

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

El proceso de sustituci
on inversa, por otro lado, requiere (ni) multiplicaciones y (ni1)
sumas, para cada termino del sumatorio, y una resta y una divisi
on. El n
umero total de
operaciones de todo el proceso es
n1

((n i) + 1) =

n2 + n
2

((n i 1) + 1) =

n2 n
2

1+

i=1

multiplicaciones/divisiones y
n1

i=1

sumas/restas. Contando la transformaci


on de la matriz del sistema y la sustituci
on inversa, la
eliminaci
on de Gauss requiere
2n3 + 3n2 5n n2 + n
n3 + n2 n
+
=
6
2
3
multiplicaciones/divisiones y
2n3 + 3n2 5n
n3 n n2 n
+
=
3
2
6
sumas/restas.
El comportamiento de estos u
ltimos n
umeros para valores grandes de n es como

1 3
n
3
lo que da idea de la complejidad que puede suponer resolver un sistema de varios miles de
ecuaciones mediante eliminacion de Gauss.2
Aunque la cantidad n3 /3 puede parecer muy grande, recordemos las f
ormulas de Cramer
para la soluci
on de un sistema de ecuaciones:

xi =

det(Bi )
,
det(A)

a11 a1i1
a21 a2i1

donde Bi = ..
.
.
..
an1 ani1

b1 a1i+1 a1n

b2 a2i+1 a2n
.
..
. .
..
.
..
bn ani+1 ann

Mediante estas f
ormulas se requieren:

(n + 1)!

(n + 2)!

n
2

sumas,
multiplicaciones y
divisiones.

En los c
alculos del n
umero de operaciones que necesita la eliminaci
on de Gauss no se han tenido en cuenta
las que se necesitan para realizar las pivotaciones: comparaciones y trueque de posiciones de memoria.

1.3 Metodo de Gauss-Jordan

23

Para un sistema de diez ecuaciones con diez incognitas se requerir


an:


740
500.000.000

operaciones en total utilizando eliminaci


on de Gauss, y
operaciones, aproximadamente, aplicando las f
ormulas de Cramer.

Evidentemente, las f
ormulas de Cramer superan en mucho al n
umero de operaciones equivalente
que requiere la eliminaci
on de Gauss.

1.3

M
etodo de Gauss-Jordan

Una extensi
on natural de la eliminaci
on de Gauss consiste en eliminar de cada columna de la
matriz de coecientes del sistema no solo los elementos no nulos que estan debajo de la diagonal
sino tambien los que estan encima. Al metodo que as procede se le conoce como metodo de
Gauss-Jordan.
Si recordamos que la transformaci
on que daba lugar a una etapa i en la eliminaci
on de
Gauss estaba denida por la matriz
Li = I i eiT ,
donde

0
.
..

i
i
a
i =
i+1 i /aii

..

la i + 1

i /ai
ani
ii

0
..

.
1 la i ,
y ei =

.
.
.
0

ahora, en la etapa equivalente i, la matriz de transformaci


on de Gauss-Jordan, esta dada por
Ti = I i eTi ,
donde, en este caso,

i /ai
a1i
ii
..

1/ai la i ,
i =
ii

.
..

i
i
ani /aii

siendo el vector ei igual que antes.


Si se tiene en cuenta que A0 = A y An = I, se tendr
a que
Tn1 T2 T1 A = I,
por lo que el metodo obtiene directamente la matriz inversa de A en forma factorizada (producto de matrices elementales) sin mas que observar que
A1 = Tn1 T2 T1 .

24

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Si de la misma forma que se proceda en el caso de la eliminacion de Gauss, en las posiciones


que se hacen cero se guardan los valores de los multiplicadores correspondientes, al nal del
proceso del metodo de Gauss-Jordan, en la propia matriz A se tendr
a su inversa.
El n
umero de multiplicaciones y divisiones que se llevan a cabo en el metodo de GaussJordan es O(n3 /2) . El de sumas y restas es el mismo. Para cuanticar totalmente las operaciones que realiza el metodo habra que a
nadir las comparaciones y el trueque de posiciones de
memoria necesarias para llevar a cabo las pivotaciones.

1.4

Descomposici
on o factorizaci
on LU

La descomposicion o factorizaci
on LU (tambien conocida en la literatura especializada como
factorizaci
on triangular) busca expresar una matriz cuadrada regular como producto de una
triangular inferior, L, y otra triangular superior, U . La denominaci
on LU esta motivada por
los terminos lower (inferior) y upper (superior) que adjetivan los factores triangulares.
Su utilidad inmediata, aparte de que bajo ciertas circunstancias almacenar una matriz,
dispersa por ejemplo, en forma factorizada necesita menos posiciones de memoria que en forma
compacta, radica en que para resolver un sistema de ecuaciones lineales Ax = b, si A = LU ,
el problema se reduce a resolver dos sistemas de ecuaciones triangulares:
Ly = b

y U x = y.

Este hecho tiene una importancia indudable cuando se requiere resolver sistemas de ecuaciones
en los que la matriz A es siempre la misma y lo u
nico que cambia es el termino independiente.
Una forma de conseguir esta factorizaci
on LU la constituye la propia eliminaci
on de Gauss
que se acaba de estudiar. En efecto, si recordamos, el metodo proceda reduciendo la matriz original a una triangular superior mediante unas permutaciones y unas transformaciones
denidas por matrices elementales triangulares inferiores, de la siguiente manera:
Ln1 Pn1 L1 P1 A = U.
De este proceso, haciendo
y

P = Pn1 P1
L = P (Ln1 Pn1 L2 P2 L1 P1 )1 ,

se obtiene la factorizacion
P A = LU.
Para demostrarlo, recordemos primero que las matrices de permutaci
on que se denen en
la eliminaci
on de Gauss, Pi , permutan siempre dos las i y j, j > i.
Lema 1.1 Sea Pi una matriz de permutaci
on (Pi = Pi1 ) de ndices i y j, j > i. Para un
k < i, se tiene que
Lk Pi = Pi Lk

o, lo que es lo mismo, que Pi Lk Pi = Lk ,

donde la matriz triangular inferior unitaria Lk se obtiene de la tambien triangular inferior
unitaria Lk sin m
as que permutar los coecientes de las las i y j (ver gura 1.4).

1.4 Descomposicion o factorizacion LU

1
..

..

Lk =

25

1
. .
.. . .
i

1
..
..
.
.
j

1
..
..
.
.

1
.. . .
.
.
= Lk

1
..
..
.
.

1
..
..
.
.

Figura 1.4
Permutaciones elementales en una matriz triangular inferior
n. Como i > k, la permutaci
Demostracio
on Pi aplicada al vector ek deja a este inalterado:
Pi ek = ek . Si lk es el vector columna k-esimo de la matriz elemental, Lk , lk = Pi lk . En
consecuencia,
Lk = Pi (I + lk ekT )Pi = Pi2 + lk eTk = I + lk ekT ,
donde el vector columna lk se obtiene a partir de lk permutando las componentes i y j.
Lema 1.2 Sea {lk }, 1 k n 1, una sucesi
on de n 1 vectores de dimensi
on n tales
que los k primeros componentes de lk son nulos. Se cumple que
T
(I + l1 e1T )(I + l2 eT2 ) (I + ln1 en1
) = I + l1 e1T + + ln1 eTn1 .

n. Para hacerlo es suciente efectuar el producto de las matrices del termino


Demostracio
de la izquierda, teniendo en cuenta que los terminos que contienen factores del tipo li eiT lj eTj ,
con i < j, son nulos ya que eTi lj = lji = 0.
Con estos resultados ya podemos formalizar lo antes dicho sobre la factorizaci
on triangular
o LU que se obtiene mediante eliminaci
on de Gauss.
Teorema 1.5 Sea A una matriz cuadrada regular de orden n. Existe una matriz de permutaci
on P y dos matrices, una triangular inferior y otra triangular superior, L y U ,
respectivamente, tales que
P A = LU.
La matriz L tiene todos los elementos de la diagonal principal igual a 1 (triangular inferior
unitaria).

26

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

n. Del proceso de eliminacion de Gauss se tiene que


Demostracio
Ln1 Pn1 L1 P1 A = U,
o, lo que es lo mismo, que

A = P1 L1 P2 L2 Pn1 Ln1 U,

(1.2)

Li

donde las matrices


son las correspondientes inversas de las Li obtenidas de estas sin mas
que cambiar el signo a los elementos de la columna i por debajo de la diagonal principal. Las
matrices de permutacion, recordemos, son iguales a sus inversas.
Hagamos P = Pn1 Pn2 P2 P1 y premultipliquemos los dos miembros de la ecuaci
on (1.2)
por P :
P A = Pn1 Pn2 P2 P1 P1 L1 P2 L2 P3 L3 Pn2 Ln2 Pn1 Ln1 U.
un el
De este producto de matrices se sabe que P1 P1 = I, que el producto P2 L1 P2 , seg


lema 1.1, da como resultado un matriz L1 triangular inferior obtenida a partir de L1 sin mas
que permutar los elementos 2 y j, j > 2, de la columna 1; que, seg
un el lema 1.2, L1 L2 es otra
matriz triangular inferior... En denitiva, que
Pn1 Pn2 P2 P1 P1 L1 P2 L2 P3 L3 Pn2 Ln2 Pn1 Ln1 = L.
De donde, como pretendamos,
P A = LU.
En terminos algebraicos, el proceso de eliminacion de Gauss proporciona una factorizaci
on
P A = LU . Para resolver la ecuaci
on Ax = b a partir de esta factorizaci
on habra que proceder
en dos etapas:
1. Resolviendo el sistema Ly = P b mediante un proceso de sustituci
on directa.
2. Resolviendo U x = y mediante otro proceso de sustituci
on inversa.
De acuerdo con esto, ya se dispone de una pseudoforma de factorizar numericamente la
matriz A de un sistema de ecuaciones lineales en la forma LU . Estudiemos a continuaci
on
las condiciones en las que una matriz cuadrada A admite este tipo de factorizacion y no sean
necesarias, en consecuencia, las permutaciones de las para conseguir la triangularizaci
on de
la matriz de coecientes.
Para enunciar estas condiciones introduzcamos, a partir de la matriz A, las matrices

a11 a1k
..
.
Ak = .
.. ,
ak1 akk

k = 1, . . . , n.

Cada matriz Ak es la submatriz principal de la matriz A obtenida con sus primeras k las y
columnas.
Lema 1.3 La matriz A admite una factorizaci
on LU si y s
olo si se cumple que
det(Ak ) = 0,

k = 1, . . . , n.

1.4 Descomposicion o factorizacion LU

27

n. La necesidad es facil de comprobar. Si la matriz admite la factorizaci


Demostracio
on LU ,
se cumplen las desigualdades
Ak = Lk Uk ,

k = 1, . . . , n,

donde Lk y Uk tienen respecto de las matrices L y U el mismo signicado que Ak respecto de


A. Esto es debido a la especial estructura triangular de L y de U . De estas desigualdades se
deduce que
det(Ak ) = det(Lk ) det(Uk )
= det(Uk )
= u11 ukk ,
k = 1, . . . , n.
En particular se cumple que det(A) = u11 unn por lo que, como estamos suponiendo que A
es una matriz no singular, se sigue que todos los n
umeros ukk son distintos de cero y por tanto
que todas las matrices Ak son no singulares.
Comprobemos la suciencia de lo enunciado. El razonamiento es por inducci
on sobre el
orden, n, de la matriz.
Para n = 1, la prueba es trivial ya que si A = [a11 ], basta tomar L = [1] y U = [a11 ].
Sea A una matriz de orden n + 1 estructurada en bloques de la forma


A =

A p
.
qT r

En esta matriz, A es la matriz de orden n formada con la primeras n las y columnas de A


(con la notaci
on anterior, A = An ), p y q designan dos vectores columna,

a1 n+1

p = ...
an n+1

an+1 1

y q = ... ,
an+1 n

y, por u
ltimo, r = an+1 n+1 .
Con la hip
otesis indicada de que la matriz A es regular, se puede escribir la identidad


I
0
q T A1 1



A p
A
p
=
.
qT r
0T r q T A1 p

Esta identidad, que se comprueba directamente con facilidad, es una generalizaci


on de la interpretaci
on matricial de la pivotaci
on, respecto de un elemento, en el algoritmo de eliminaci
on de
Gauss. Podramos decir que la f
ormula es la interpretaci
on matricial de la pivotaci
on respecto
de una submatriz principal de la matriz A. Es inmediato comprobar que


I
0
q T A1 1

1

I
0
=
.
q T A1 1

Con esto y la anterior identidad podemos escribir que




A =

I
0
T
1
q A
1



A
p
.
T
T
0 r q A1 p

28

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Por la hip
otesis inductiva podemos suponer que A admite la factorizaci
on triangular A = LU .
se tiene
Utilizando esta factorizaci
on en la representaci
on que acabamos de obtener para A,
que



LU
p
I
0

A =
0T r q T U 1 L1 p
q T U 1 L1 1


=


q T U 1 L1
L
0
T
1
q U
1

0
1





L 0
0T 1



L1 0
0T 1




LU
p
0T r q T U 1 L1 p

U
L1 p
.
0T r q T U 1 L1 p

Basta entonces tomar




=
L

L
0
q T U 1 1

=
y U

U
L1 p
,
T
T
0 r q U 1 L1 p

para con estas matrices poder escribir que


U

A = L

lo cual proporciona la factorizaci


on LU de A.
Es interesante destacar de esta u
ltima demostraci
on que si se conoce la factorizacion LU de
A, basta resolver los dos sistemas de ecuaciones triangulares Lx = p y U T y = q para tener la
En efecto, si las soluciones de estos sistemas son los vectores columna
factorizaci
on LU de A.
y , la factorizaci
on triangular de A se escribe:


A =

L 0
T 1



.
T
0 r T

Esta observaci
on es la base de algunos procedimientos para la obtenci
on directa de la factorizacion LU de una matriz.
Teorema 1.6 Si una matriz regular A de orden n admite una factorizaci
on A = LU , donde
L es una matriz triangular inferior de elementos diagonales 1 y U una triangular superior,
esa factorizaci
on es u
nica.
n. Razonemos por reduccion al absurdo. Supongamos que existen dos descompoDemostracio
siciones triangulares de la forma A = L1 U1 y A = L2 U2 , donde todas las matrices involucradas
son regulares. Si L1 U1 = L2 U2 , sea
1
X = L1
2 L1 = U2 U1 .

Como X = L21 L1 , esta matriz es triangular inferior de elementos diagonales 1; como adem
as
1
X = U2 U1 , tambien es triangular superior. Para que se puedan cumplir estas dos condiciones
simult
aneamente, X debe ser I. Es decir, L2 = L1 y U2 = U1 por lo que la descomposici
on es
u
nica.

1.4 Descomposicion o factorizacion LU

1.4.1

29

M
etodos directos para la obtenci
on de factorizaciones LU

Probado que una matriz admite la factorizaci


on triangular o LU , veamos otros metodos mas
directos para obtenerla que el basado en la eliminaci
on de Gauss.
1.4.1.1

M
etodo de Crout. Versi
on LU1

Supongamos que se desea obtener la factorizaci


on triangular de una matriz A en la forma LU1 ,
donde por U1 se designa una matriz triangular superior en la que todos los elementos de la
diagonal principal son 1. Si, por ejemplo, la matriz A es de orden 3 y se quiere factorizar de la
forma

a11 a12 a13


l11 0 0
1 u12 u13
a21 a22 a23 = l21 l22 0 0 1 u23 ,
l31 l32 l33
a31 a32 a33
0 0 1
efectuando el producto usando las reglas de multiplicaci
on de matrices se obtendra:
1a columna de L:
l11 = a11
l21 = a21
l31 = a31 ;
1a la de U :
l11 u12 = a12
l11 u13 = a13

2a columna de L:

l21 u12 + l22 = a22
l31 u12 + l32 = a32
2a la de U :
l21 u13 + l22 u23 = a23
a
3 columna de L:
l31 u13 + l32 u23 + l33 = a33

u1j = a1j /l11 ,

li2 = ai2 li1 u12 ,

u2j = (a2j l21 u1j )/l22 ,

li3 = ai3

i1

j = 2, 3;

i = 2, 3;

lij uji ,

j = 3;

i = 3.

j=1

En general, las f
ormulas de recurrencia que se pueden deducir de este proceso, denominado
factorizaci
on LU de Crout, son:
li1 = ai1 ,
u1j = a1j /l11 ,
lik = aik

ukj

i = 1, 2, . . . , n,
j > 1,

k1

p=1

= akj

i k,

lip upk ,

k1

p=1

lkp upj

lkk ,

j > k.

30

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

El algoritmo de Crout para factorizar una matriz regular Ann en la forma LU1 es el que
describe la tabla 1.2. Al nal del proceso las matrices L y U aparecen en las mismas posiciones
de memoria que ocupaban los coecientes de A.
Tabla 1.2
Algoritmo para la factorizaci
on LU1 de una matriz Ann por el metodo de Crout
for k = 1 to n
for i = k to n
l(i, k) a(i, k)

k1

l(i, p)u(p, k)

p=1

end
for i = k + 1 
to n
u(k, i)

a(k, i)

k1


l(k, p)u(p, i)

l(k, k)

p=1

end
end

La version en Fortran 77 de este algoritmo para factorizar la matriz

10 10 20
20 25 40
30 50 61
se lista a continuaci
on. El resultado es

10
1 1 2

1 0 .
LU = 20 5
30 20 1
1
PROGRAM Crout
C
parameter (n = 3)
real a(n,n)
data a/10.,20.,30.,10.,25.,50.,20.,40.,61/
C
C
C

*** Factorizaci
on LU1 por el m
etodo de Crout ***
do k = 1,n
do i = k,n
suma = 0.0
do l = 1,k-1
suma = suma+a(i,l)*a(l,k)
end do
a(i,k) = a(i,k)-suma
end do
do i = k+1,n
suma = 0.0
do l = 1,k-1
suma = suma+a(k,l)*a(l,i)

1.4 Descomposicion o factorizacion LU

31

end do
a(k,i) = (a(k,i)-suma)/a(k,k)
end do
end do
C
print 20,((a(i,j),j=1,n),i=1,n)
C
20 format(3f7.2)
C
end

La secuencia de operaciones asociadas al algoritmo de Crout son: determinar los elementos


de la primera columna de la matriz L; los de la primera la de la matriz U ; los de la segunda
columna de la matriz L; los de la segunda la de la matriz U , etc. Para una peque
na matriz
4 4, el orden en que se calculan los coecientes de las matrices L y U es el que se indica en
el esquema que sigue.
1 5 6 7
2 8 11 12
3 9 13 15
4 10 14 16
El m
etodo de Crout y la eliminaci
on de Gauss
Dado que consiguen el mismo objetivo, el algoritmo de Crout se puede comparar con el de
eliminaci
on de Gauss. En efecto, la ecuaci
on de la eliminaci
on de Gauss por la que se adaptaban
los elementos de la matriz se puede escribir de la forma
a(j, k) a(j, k) a(j, i)a(i, k)/a(i, i)
por lo que asociando
l(i, k) a(i, k)

y u(j, i) a(j, i)/a(i, i),

es decir, dividiendo la la de pivotaci


on por el elemento pivote a(i, i) en lugar de hacerlo en la
columna de pivotaci
on, los procedimientos son enteramente equivalentes. La u
nica diferencia
estriba, desde el punto de vista de c
omo se realizan las operaciones, en que en el metodo de
Crout los productos interiores l(i, p)u(p, k) y l(k, p)u(p, i) se pueden acumular en una operaci
on
evitando propagar errores de redondeo; en el de Gauss se calculan paso a paso.
Ejemplo 1.1 Se desea factorizar la matriz

0,001 2,000 3,000

A = -1,000 3,712 4,623


-2,000 1,072 5,643

en una m
aquina u ordenador con cuatro dgitos signicativos.
Las operaciones que se realizan en la maquina son:
l11 = 0,001;
l21 = -1,000;

32

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

l31 = -2,000;


u12

2,000
= fl
0,001


u13

3,000
= fl
0,001

= 2000;


= 3000;

l22 = f l [3,712 + (1,000)(2000)] = 2004;


l32 = f l [1,072 + (2,000)(2000)] = 4001;


u23

4,623 + (1,000)(3000)
= fl
2004

= 1,500 y

l33 = f l[5,643 + (2,000)(3,000) (4,001)(1,500)] = 5,642.


Observese que el calculo de l33 conlleva la perdida de tres dgitos signicativos: el valor que
debera obtenerse es 5,922.
Pivotaci
on
El u
ltimo ejemplo pone de maniesto que, aunque se sepa que una matriz no es singular y que su
factorizaci
on LU existe, e independientemente de que se use un procedimiento algortmicamente
adecuado, los errores de redondeo que se pueden producir al calcularla pueden dar al traste con
el resultado. En el procedimiento de Crout, en concreto, el efecto de esos errores de redondeo
pueden paliarse en gran medida recurriendo, como en el caso de la eliminaci
on de Gauss,
a la pivotaci
on parcial. El principal obst
aculo para incorporar intercambios de las en este
algoritmo es que no se sabe que un lkk es peque
no hasta que no se ha calculado. Una vez
hecho, un intercambio de las en la matriz A cambiara su descomposicion LU , por lo que
habra que rehacerla. Afortunadamente existe una relaci
on muy simple entre la descomposicion
LU obtenida con el algoritmo de Crout y la matriz que se obtendra intercambiando dos las
de esa factorizacion.
Para ver esta relaci
on, supongamos que se tiene una matriz de orden 5 a la que se le
intercambian la la 3 y la 5; resultar
a una A dada por

a11
a21

a51
a41
a31

a12
a22
a52
a42
a32

a13
a23
a53
a43
a33

a14
a24
a54
a44
a34

a15

a25
.
a55

a45
a35

Si a esta matriz se le aplica el algoritmo de Crout, par


andose, cuando k = 3, antes de calcular
los elementos de la matriz u34 y u35 , se llegara a

l11
l21

l51
l41
l31

u12
l22
l52
l42
l32

u13
u23
l53
l43
l33

u14
u24
a54
a44
a34

u15

u25
.
a55

a45
a35

1.4 Descomposicion o factorizacion LU

33

Es decir, la u
nica diferencia es la que resulta del intercambio de las las 3 y 5: la pivotacion
parcial por consiguiente no plantea ning
un problema signicativo en el metodo de Crout.
El algoritmo de Crout con pivotaci
on parcial se describe en la tabla 1.3.
El efecto de las pivotaciones es que, igual que en el caso de la eliminaci
on de Gauss, en
lugar de A, realmente se factoriza una matriz P A. La versi
on en Fortran 77 de este nuevo
algoritmo para factorizar otra vez la matriz

10 10 20
20 25 40 ,
30 50 61

se lista a continuaci
on. Al nal de este proceso, el vector IPVT(), que indica las pivotaciones
realizadas, es [3, 2, 1]T . Esto quiere decir que la matriz P A factorizada es

30 50 61
30
1 1,6667 2,0333

20 25 40 = 20 8,3333
1 0,0800 .
10 10 20
10 6,6667 0, 2
1

PROGRAM Croutp
C
parameter (n = 3)
real a(n,n)
integer ipvt(n)
C
data a/10.,20.,30.,10.,25.,50.,20.,40.,61/
C
do i = 1,n
ipvt(i) = i
end do
C
C

*** Factorizaci
on LU1 con pivotaci
on por el m
etodo de Crout ***

Tabla 1.3
Algoritmo de Crout con pivotaci
on parcial para la factorizaci
on LU1 de una matriz Ann
for k = 1 to n
for i = k to n
l(i, k) a(i, k)

k1

l(i, p)u(p, k)

p=1

end
Determinar ndice p {k, k + 1, . . . , n} tal que |a(p, i)| = maxijn |a(j, i)|.
Intercambiar las p y k.
for i = k + 1 
to n

k1

l(k, k)
l(k, p)u(p, i)
u(k, i) a(k, i)
p=1

end
end

34

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

C
do k = 1,n
l
= 0
smax = 0.0
do i = k,n
suma = 0.0
do l = 1,k-1
suma = suma+a(i,l)*a(l,k)
end do
a(i,k) = a(i,k)-suma
if (abs(a(i,k)).gt.smax) then
smax = abs(a(i,k))
l
= i
endif
end do
if (l.ne.0) then
do j = 1,n
aux
= a(l,j)
a(l,j) = a(k,j)
a(k,j) = aux
end do
iaux
= ipvt(l)
ipvt(l) = ipvt(k)
ipvt(k) = iaux
endif
do i = k+1,n
suma = 0.0
do l = 1,k-1
suma = suma+a(k,l)*a(l,i)
end do
a(k,i) = (a(k,i)-suma)/a(k,k)
end do
end do
C
print *,(ipvt(j),j=1,n)
print *,((a(i,j),j=1,n),i=1,n)
C
end

El algoritmo de Crout tambien requiere para la factorizaci


on de la matriz O(n3 /3) operaciones de multiplicaci
on/divisi
on y suma/resta.
1.4.1.2

M
etodo de Crout. Versi
on L1 U

Si en vez de querer obtener la factorizaci


on LU1 de una determinada matriz A, se desea una
L1 U por un metodo mas directo que la eliminaci
on de Gauss, una variante del metodo de
Crout permite llegar a ella f
acilmente.
Su desarrollo sigue las mismas ideas que en el caso LU1 . Si se pretende conseguir la descomposicion L1 U de una matriz de orden 3 de la forma

a11 a12 a13


1 0 0
u11 u12 u13
a21 a22 a23 = l21 1 0 0 u22 u23 ,
a31 a32 a33
l31 l32 1
0 0 u33

operando de acuerdo con las reglas de multiplicaci


on matricial se obtendr
a:

1.4 Descomposicion o factorizacion LU

35

1a la de U :
u11 = a11
u12 = a12
u13 = a13 ;
1a columna de L:

l21 u11 = a21


l31 u11 = a31

li1 = ai1 /u11 ,

u2j = a2j l21 u1j ,

2a columna de L:
l31 u12 + l32 u22 = a32
3a la de U :

li2 = (ai2 li1 u12 )/u22 ,

l31 u13 + l32 u23 + u33 = a33

u3j = a3j

2a la de U :
l21 u12 + u22 = a22
l21 u13 + u23 = a23

i = 2, 3;

j1

j = 2, 3;

l3i uij ,

i = 3.

j = 3.

i=1

Las f
ormulas de recurrencia que se pueden deducir de este proceso son:
u1j = a1j ,
li1 = ai1 /u11 ,
ukj = akj

lik

j = 1, 2, . . . , n,
j > 1,

k1

lkp upj ,
p=1
k1

= aik

j k,

lip upk

ukk ,

i > k.

p=1

El algoritmo para factorizar una matriz regular Ann en la forma L1 U por el metodo de
Crout se describe en la tabla 1.4. Como en la versi
on para factorizar una matriz en la forma
LU1 , las matrices L y U aparecen al nal del proceso en las mismas posiciones de memoria
que ocupaban los coecientes de A.
La version en Fortran 77 de este algoritmo para factorizar nuevamente la matriz

10 10 20
20 25 40 ,
30 50 61

es la que sigue a este parrafo. El resultado es

1
10 10 20
5 0 .
LU = 2 1
3 4 1
1

36

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Tabla 1.4
Algoritmo para la factorizaci
on L1 U de una matriz Ann por el metodo de Crout
for k = 1 to n
for j = k to n
u(k, j) a(k, j)

k1

l(k, p)u(p, j)

p=1

end
for i = k + 1 to n
l(i, k)

a(i, k)

k1


l(i, p)u(p, k)

u(k, k)

p=1

end
end

PROGRAM Croutl1u
C
parameter (n = 3)
real a(n,n)
C
data a/10.,20.,30.,10.,25.,50.,20.,40.,61/
C
C
C

*** Factorizaci
on L1U por el m
etodo de Crout ***
do k = 1,n
do j = k,n
sum = 0.0
do l = 1,k-1
sum = sum+a(k,l)*a(l,j)
end do
a(k,j) = a(k,j)-sum
end do
do i = k+1,n
sum = 0.0
do l = 1,k-1
sum = sum+a(i,l)*a(l,k)
end do
a(i,k) = (a(i,k)-sum)/a(k,k)
end do
end do

C
print 20,((a(i,j),j=1,n),i=1,n)
C
20 format(3f7.2)
C
end

1.4.1.3

M
etodo de Doolittle

El metodo de Doolittle es una variante del de Crout que obtiene las matrices de la factorizaci
on,
L y U , la a la o columna a columna. Resulta particularmente u
til para matrices de grandes

1.4 Descomposicion o factorizacion LU

37

dimensiones de las que solo se guardan, la a la o columna a columna, los elementos distintos
de cero, o para implementarse en ordenadores con arquitectura en paralelo.
Para la factorizaci
on de la matriz, el algoritmo de Doolittle tambien requiere O(n3 /3)
operaciones de multiplicaci
on/divisi
on y suma/resta.
andose L1 y U columna
La version de este algoritmo que obtiene una factorizaci
on L1 U , gener
a columna, es la que describe la tabla 1.5.
Tabla 1.5
Algoritmo para la factorizaci
on L1 U de una matriz Ann por el metodo de Doolittle. Los
coecientes de los factores se generan por columnas
for k = 1 to n
for i = 1 to k 1
u(i, k) a(i, k)

i1

l(i, p)u(p, k)

p=1

end
for i = k to n

l(i, k)

a(i, k)

k1


l(i, p)u(p, k)

u(k, k)

p=1

end
end

Su codicaci
on completa en Fortran 77, incluida la pivotaci
on parcial, para factorizar
directamente la matriz

1 4 1 1
1 0 1 3

2 0 1 0 ,
0 0 1 0
es la que sigue. La descomposicion resultante es

1
2 0 1 0
0,5 1

4 0,5 1

LU =
.

0 0 1
1 0
0,5 0 0,5 1
3
El vector IPVT() que indica las pivotaciones realizadas en el transcurso de esta factorizaci
on
es [3, 1, 4, 2]; la matriz P A realmente factorizada es por lo tanto

2 0 1 0
1 4 1 1

0 0 1 0 .
1 0 1 3

38

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

PROGRAM Dool
C
parameter (n = 4)
integer ipvt(n)
real a(n,n)
C
data a/1.,1.,-2.,0.,-4.,0.,0.,0.,1.,1.,-1.,1.,1.,3.,0.,0./
C
do i = 1,n
ipvt(i) = i
end do
C
C
C

*** Factorizaci
on L1U con pivotaci
on por el m
etodo de Doolittle ***
do j = 1,n
do i = 1,j-1
suma = a(i,j)
do k = 1,i-1
suma = suma-a(i,k)*a(k,j)
end do
a(i,j) = suma
end do
amax = 0.0
do i = j,n
suma = a(i,j)
do k = 1,j-1
suma = suma-a(i,k)*a(k,j)
end do
a(i,j) = suma
if (abs(suma).ge.amax) then
imax = i
amax = abs(suma)
endif
end do
if (j.ne.imax) then
do k = 1,n
dum
= a(imax,k)
a(imax,k) = a(j,k)
a(j,k)
= dum
end do
iaux
= ipvt(imax)
ipvt(imax) = ipvt(j)
ipvt(j)
= iaux
endif
if (j.ne.n) then
if (a(j,j).eq.0.0) a(j,j) = 1.0e-20
dum = 1.0/a(j,j)
do i = j+1,n
a(i,j) = a(i,j)*dum
end do
endif
end do
if (a(n,n).eq.0.0) a(n,n) = 1.0e-20

C
print *,ipvt
print 1,((a(i,j),j=1,n),i=1,n)
C
1 format(4f8.3)
C

! Se divide la columna j
!
por A(j,j)

1.5 Factorizacion de matrices simetricas

39

end

Observese lo poco que se complica el algoritmo, con respecto a los hasta ahora presentados, al
calcular los elementos de la factorizacion por columnas e incluir la pivotaci
on.
En la gura 1.5 se esquematiza la factorizaci
on de Doolittle por columnas: se indica c
omo
se van obteniendo los elementos de las matrices L y U y que elementos de los ya calculados
son utilizados para obtener uno nuevo.

1.5

Factorizaci
on de matrices sim
etricas

Como venimos insistiendo, uno de los principios b


asicos que debe presidir la resoluci
on numerica
de cualquier problema lineal o de optimizaci
on es sacar partido de la posible estructura especial
de que disponga el problema a tratar.
En algebra lineal numerica, y concretamente en la resolucion de sistemas de ecuaciones
lineales, este principio resulta si cabe m
as decisivo cuando alguna de las matrices a manipular
es simetrica, denida positiva, dispersa, resultante de la representaci
on de la estructura nudoarco de un grafo, etc. El n
umero de operaciones que resulte de tener en cuenta estos hechos
debe resultar sustancialmente inferior al de no hacerlo.
En lo que sigue nos ocupamos de la factorizaci
on de matrices simetricas y, cuando ese sea el
caso, denidas positivas. Casos mas particulares como matrices en banda, tridiagonales, etc, no
los estudiamos aunque ya se comprende la reducci
on potencial que puede acarrear el modicar
la mecanica de los procedimientos vistos hasta ahora y los que vamos a ver para tenerlos en
cuenta.

Figura 1.5
Ilustraci
on del proceso del algoritmo de Doolittle para la factorizaci
on LU por columnas de
una matriz

40

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

1.5.1

Factorizaci
on LDLT

Particularicemos alguno de los resultados obtenidos para matrices generales al caso de matrices
simetricas.
Lema 1.4 Si todas las submatrices principales de una matriz A nn son regulares,
existen dos matrices triangulares inferiores unitarias u
nicas, L y M , y otra diagonal tambien
u
nica, D = diag(d1 , . . . , dn ), tales que A = LDM T .
n. Seg
Demostracio
un el resultado del lema 1.3, A = LU , donde L es una matriz triangular
inferior unitaria y U una triangular superior. Sea D = diag(d1 , . . . , dn ), donde di = uii , i =
1, . . . , n. Observese que la matriz D es regular. Si se hace M T = D1 U , esta es una matriz
triangular superior unitaria. Ahora bien,
A = LU = LD(D1 U ) = LDM T .
La unicidad de L, M y D se deriva de la de la factorizaci
on A = LU seg
un el teorema 1.6.
Teorema 1.7 Si A admite una factorizaci
on LDM T y es simetrica, L = M .
n. La matriz M 1 AM T = M 1 LD es simetrica y triangular inferior, por
Demostracio
consiguiente es diagonal. Como D es regular, esto implica que M 1 L es tambien diagonal.
Ahora bien, M 1 L es triangular inferior unitaria, luego M 1 L = I.
Tambien se puede demostrar teniendo en cuenta que seg
un el teorema 1.6, si A admite la
factorizaci
on LDM T , esta es u
nica. Ahora bien, como es simetrica,
A = AT = M DLT = LDM T L = M.
La factorizaci
on LDLT resulta de gran utilidad cuando la matriz es simetrica pero no se
sabe con seguridad si es denida positiva o no. Para desarrollar un algoritmo para su obtenci
on
directa se puede proceder de la misma manera que cuando se estudi
o el algoritmo de Crout, es
decir, estableciendo unas f
ormulas de recurrencia del metodo a partir de un ejemplo simb
olico
de orden 3:

a11 a12 a13


1 0 0
d11
1 l21 l31
0 1 l32 .
a21 a22 a23 = l21 1 0
d22
a31 a32 a33
l31 l32 1
d33
0 0 1
Operando de acuerdo con las reglas de multiplicaci
on matricial se obtiene:
a11
a21
a31
a22
a32
a33

=
=
=
=
=
=

d11
l21 d11
l31 d11
2 d +d
l21
11
22
l31 l21 d11 + l32 d22
2 d + l2 d + d .
l31
11
33
32 22

Generalizando este proceso se obtiene el algoritmo que describe la tabla 1.6.


on/divisi
on y suma/resta.
Este algoritmo requiere O(n3 /6) operaciones de multiplicaci

1.5 Factorizacion de matrices simetricas

41

Tabla 1.6
Algoritmo para la factorizaci
on LDLT de una matriz Ann simetrica
for k = 1 to n
d(k) a(k, k)

k1

a2 (k, p)d(p)

p=1

if d(k) = 0 then stop


for i = k + 1 
to n
a(i, k)

a(i, k)

k1


a(i, p)a(k, p)d(p)

d(k)

p=1

end
end

1.5.2

Factorizaci
on de Cholesky

Los metodos expuestos hasta ahora pueden fallar si no se efect


uan pivotaciones parciales o
totales debido, por un lado, a la posible presencia de elementos pivote muy peque
nos, o a la
acumulaci
on de errores de redondeo importantes, por otro. Existe una clase muy importante
de matrices para las cuales no es necesario efectuar esas operaciones si se desean factorizar en
forma triangular: nos referimos a las matrices simetricas denidas positivas. En este caso las
matrices admiten una descomposicion de la forma
A = GT G,
donde G es una matriz triangular superior. Esta descomposici
on fue desarrollada por Andre
Louis Cholesky (1875-1918), comandante del ejercito frances de la epoca, durante la ocupaci
on
internacional de Creta entre 1906 y 1909. La utiliz
o por primera vez en unos trabajos sobre
estudios geodesicos para calcular la soluci
on de problemas de ajustes por mnimos cuadrados.
Las matrices simetricas denidas positivas se presentan habitualmente en problemas relacionados con el an
alisis de sistemas electricos de generacion y transporte de energa, ajuste
de funciones por mnimos cuadrados, an
alisis de estructuras mecanicas y en muchos procedimientos de optimizacion lineal y no lineal. En general aparecen en todas aquellas aplicaciones
donde al modelizar un sistema, la expresi
on xT Ax mide la energa presente o disponible en un
entorno determinado: esta energa habitualmente es una cantidad positiva.
Recordemos que una matriz se dice denida positiva si para todo x = 0 se cumple que
xT Ax > 0.
Tambien recordemos que todos los autovalores de una matriz denida positiva son positivos.
Lema 1.5 Las submatrices principales de una matriz denida positiva son denidas positivas.
n. Sea A la submatriz principal de A formada por sus r primeras las y columDemostracio

nas. Sea x = 0 un vector r-dimensional y x otro vector n-dimensional denido de la siguiente

42

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

manera:

xk = xk
xj = 0

k = 1, 2, . . . , r,
j = r + 1, . . . , n.

De esta denicion se deduce que x = 0 y que xT Ax = x T A x . Como A es denida positiva,


se tiene que
T
0 < xT Ax = x A x ,
por lo que la submatriz principal A es positiva denida.
Teorema 1.8 Si A es una matriz denida positiva de orden n, tiene una descomposici
on
T
de la forma LDM , siendo todos los elementos de la matriz diagonal D positivos.
n. Como todas las submatrices principales de una matriz denida positiva son
Demostracio
denidas positivas y por tanto regulares, de acuerdo con el resultado del lema 1.4, existen dos
matrices triangulares inferiores unitarias L y M y una diagonal D = diag(d1 , . . . , dn ) tales que
A = LDM T . Como la matriz S = L1 ALT = DM T LT es denida positiva (sus autovalores
son los mismos de A por ser L triangular unitaria) y triangular superior con sii = di , los di
han de ser positivos.
A continuaci
on se demuestra, de forma muy similar a como se hizo en el caso de la descomposicion LU , la existencia de la descomposicion de Cholesky de una matriz simetrica denida
positiva.
Teorema 1.9 Si A es una matriz simetrica denida positiva de orden n, existe una u
nica
matriz triangular superior, G, con todos sus elementos diagonales positivos, tal que A =
GT G.
n. Procederemos por inducci
Demostracio
on respecto al orden de la matriz A.
Si A es de
orden 1 y denida positiva, la matriz G esta denida de forma trivial por g11 = a11 .
Supongamos que lo enunciado se cumple para matrices de orden n 1 y que A es una
matriz denida positiva de orden n. Como es simetrica, se puede estructurar de la forma


A a
A =
.
aT


Seg
un el lema 1.5, esta matriz A es denida positiva.
Para encontrar una matriz G tal que A = GT G , denamos esa G como


G g
.
G =
0T


Como A = GT G, si desarrollamos el producto GT G , se tiene que




GT 0
G G =
gT
T



G g
GT G G T g
=
.
0
g T G g T g + 2

1.5 Factorizacion de matrices simetricas

43

Haciendola igual a A se tiene que




GT G G T g
g T G g T g + 2

A a
.
aT

Es decir, se requiere que


GT g = a,
g T G = aT

(1.3)
y

(1.4)

g T g + 2 = .
Por la hip
otesis de inducci
on, G es u
nica. Como G es no singular, g = GT a es el u
nico vector
que satisface
(1.3) y (1.4). Por u
ltimo, si g T g > 0, el valor de lo dene de forma u
nica
T
la expresi
on g g.
Para comprobar que efectivamente g T g > 0, observese en primer lugar que la regularidad
de la matriz G implica la regularidad de A. Sin perdida de generalidad, como A es regular,
para cualquier vector b, a se puede expresar de la forma a = Ab; por lo tanto b = A1 a.
Como A es denida positiva, se tiene que


0 <
=
=
=
=
=
=



A a
b
[b , 1]
1
aT
bT Ab 2bT a +
bT a
aT A1 a
aT (GT G)1 a
aT G1 GT a
g T g.

La demostracion de este u
ltimo teorema dene implcitamente un metodo para obtener la
descomposicion de Cholesky de una matriz simetrica denida positiva calculando sucesivamente
las descomposiciones de sus submatrices principales. Implcitamente contiene el algoritmo que
se obtendr
a a continuaci
on.
Para determinar el algoritmo de descomposici
on de Cholesky de una forma intuitiva y directa, procedamos como lo hemos hecho en factorizaciones anteriores simulando la descomposicion
simbolica de una matriz 3 3. Es decir, si se desea obtener la factorizacion

a11 a12 a13


g11 0 0
g11 g12 g13
a12 a22 a23 = g12 g22 0 0 g22 g23 ,
a13 a23 a33
g13 g23 g33
0 0 g33

44

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

operando de acuerdo con las reglas de multiplicaci


on matricial se obtiene que:
a11
a12
a13
a22
a23
a33

=
=
=
=
=
=

2
g11
g11 g12
g11 g13
2 + g2
g12
22
g12 g13 + g22 g23
2 + g2 + g2 .
g13
23
33

Generalizando este proceso se obtiene el algoritmo que describe la tabla 1.7.


Algoritmo para la factorizaci
on

Tabla 1.7
de Cholesky por las de una matriz Ann simetrica
denida positiva

GT G

for i = 1 to n
g(i, i) !a(i, i)

i1

g 2 (k, i)

k=1

for j = i + 1 
to n
g(i, j)

a(i, j)

i1


g(i, i)

g(k, i)g(k, j)

k=1

end
end

La codicaci
on completa de este algoritmo en Fortran 77, incluida la resoluci
on del sistema
GT Gx = b,
para resolver

5
1

2
0

1 2 0
x1
1
x2 5
2 0 0
=
,

0 4 1 x3 14
x4
0 1 3
15

es la que sigue. La parte triangular superior de la matriz original, A, se sustituye por el factor
G. La factorizaci
on que se obtiene es

2,2361 0,4472 0,8944


0

1,3416
0,2981
0

G=
.
1,7638 0,5669
1,6366
La soluci
on del problema es [1, 2, 3, 4]T .

1.5 Factorizacion de matrices simetricas

45

PROGRAM Chol
C
parameter (n = 4)
real a(n,n),b(n)
integer i,j,k
C
C
C
C

data a/5.,1.,-2.,0.,1.,2.,0.,0.,-2.,0.,4.,1.,0.,0.,1.,3./
data b/1.,5.,14.,15./
T
*** Factorizaci
on de Cholesky G G ***
do i = 1,n
suma = a(i,i)
do k = 1,i-1
suma = suma-a(k,i)**2
end do
a(i,i) = sqrt(suma)
do j = i+1,n
suma = a(i,j)
do k = 1,i-1
suma = suma-a(k,i)*a(k,j)
end do
a(i,j) = suma/a(i,i)
end do
end do

C
C
C

*** Sustituci
on directa
do i = 1,n
do j = 1,i-1
b(i) = b(i)-a(j,i)*b(j)
end do
b(i) = b(i)/a(i,i)
end do

C
C
C

*** Sustituci
on inversa
b(n) = b(n)/a(n,n)
do i = n-1,1,-1
do j = i+1,n
b(i) = b(i)-a(i,j)*b(j)
end do
b(i) = b(i)/a(i,i)
end do

C
print 1,((a(i,j),j=1,n),i=1,n)
print 1,b
C
1 format(4f9.4)
C
end

Recordemos que para resolver un sistema GT Gx = b, primero se resuelve GT y = b por


sustituci
on directa y luego Gx = y por sustituci
on inversa. En el programa presentado los
vectores y y x ocupan las mismas posiciones de memoria que el termino independiente b; la
matriz G ocupar
a la parte triangular superior de la matriz original A.
El algoritmo descrito en la tabla 1.7 es la versi
on la a la de la factorizaci
on de Cholesky.
Es posible tambien modicar la secuencia de operaciones que se realizan de tal forma que se

46

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

obtenga columna a columna. En efecto, volviendo a la descomposici


on simb
olica,

a11 a12 a13


g11 0 0
g11 g12 g13
a12 a22 a23 = g12 g22 0 0 g22 g23 ,
a13 a23 a33
g13 g23 g33
0 0 g33

operando para obtener columna a columna G se obtiene lo siguiente:


g11
g12
g22
g13
g23
g33

=
=
=
=
=
=

g11
a12 /g11
"
2
a22 g12
a13 /g11
(a23 g12 g13 ) /g22
"
2 g2 .
a33 g13
23

La generalizacion de este proceso se describe en la tabla 1.8.


Tabla 1.8
Algoritmo para la factorizaci
on
de Cholesky por columnas de una matriz Ann
simetrica denida positiva
GT G

for j = 1 to n
for i = 1 to j 1
g(i, j)

a(i, j)

i1


g(k, i)g(k, j)

g(i, i)

k=1

end

g(j, j) !a(j, j)

j1

g 2 (k, j)

k=1

end

La secuencia de las diferentes operaciones del algoritmo de Cholesky por las y por columnas
se describen en la gura 1.6.
El algoritmo para descomponer una matriz simetrica denida positiva en la forma de Cholesky requiere O(n3 /6) operaciones de multiplicaci
on/divisi
on y de suma/resta.

1.5.3

Matrices sim
etricas semidenidas positivas

Recordemos que una matriz A se dice semidenida positiva si para todo vector x = 0,
xT Ax 0.

1.5 Factorizacion de matrices simetricas

47

G
A

i
j

Figura 1.6
Partes ya calculadas y por calcular de la factorizaci
on de Cholesky for las (etapa i) y por
columnas (etapa j) de una matriz A
Teorema 1.10 Si A nn es simetrica semidenida positiva, se cumple que
|aij | (aii + ajj )/2

|aij | aii ajj (i = j)


max |aij | = max aii
i,j

(1.5)
(1.6)
(1.7)

aii = 0 aij = aji = 0, j = 1, . . . , n.

(1.8)

n. Si x = ei + ej entonces 0 xT Ax = aii + ajj + 2aij . Si por otro lado


Demostracio
x = ei ej , entonces 0 xT Ax = aii + ajj 2aij . La desigualdad (1.5) se deduce de estos
dos u
ltimos resultados. La ecuaci
on (1.7), que expresa el hecho de que el coeciente de mayor
valor absoluto de la matriz est
a en la diagonal principal, es consecuencia inmediata de (1.5).
Para demostrar la desigualdad (1.6), supongamos sin perdida de generalidad que i = 1 y
j = 2 y consideremos la desigualdad


a a
0 [x, y] 11 12
a21 a22



x
= a11 x2 + 2a12 xy + a22 y 2 ,
y

la cual se cumple dado que A es semidenida positiva. Para asegurar que esta ecuaci
on
cuadr
atica se cumple, descomponiendola de la forma


a11

a12
x+
y
a11

2

a2
+ a22 12
a11

y2 ,

2 sea positivo; es decir,


dado que a11 0 por ser A semidenida
positiva, basta que a11 a22 a12

se ha de cumplir que |a12 | a11 a22 .

48

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

La implicaci
on de (1.8) se deduce de (1.6).
Si el algoritmo de Cholesky de la tabla 1.7 se aplica a una matriz semidenida positiva,
encontr
andose a lo largo del proceso que un akk es cero, del teorema anterior se deduce que
ajk = 0, j = k, . . . n, por lo que no habra nada m
as que hacer en la columna k. Un algoritmo
parecido al de la tabla 1.7 que tuviese en cuenta esta eventualidad, se podra reescribir de
forma inmediata de la forma que describe la tabla 1.9. En la pr
actica, sin embargo, los errores
de redondeo imposibilitan la obtenci
on de ceros exactos por lo que se recurre a incorporar la
pivotaci
on para evitar problemas.
Tabla 1.9
Variante del algoritmo de Cholesky de la tabla 1.7 para matrices Ann simetricas
semidenidas positivas. Sin pivotaci
on
for i = 1 to n
if a(i, i) > 0
g(i, i) !a(i, i)

i1

g 2 (k, i)

k=1

for j = i + 1 
to n
g(i, k)

a(i, j)

i1


g(k, i)g(k, j)

g(i, i)

k=1

end
end
end

1.5.3.1

Pivotaci
on

Si se desea llevar a cabo pivotaciones en una matriz simetrica y mantener la simetra, es


necesario que esas pivotaciones se hagan simetricamente: si se intercambian dos las, tambien
hay que intercambiar las correspondientes columnas. Hay que recordar que una transformaci
on
T
on simetrica.
de la matriz A de la forma A P AP se denomina permutaci
Si en una etapa k del proceso que conduce a la factorizaci
on de Cholesky se determina
el elemento de mayor valor de la diagonal principal, maxkjn ajj , y se intercambia con el
akk , si el resultante akk = 0, el resto de la matriz a factorizar sera nula y no sera necesario
realizar mas operaciones. En la tabla 1.10 se describe el algoritmo de Cholesky para matrices
semidenidas positivas con pivotaci
on.

1.5.4

Matrices sim
etricas indenidas

Recordemos que una matriz A se dice indenida si para alg


un vector x = 0 la forma cuadr
atica
xT Ax es positiva y para otros negativa. Aunque una matriz simetrica indenida puede factorizarse de la forma LDLT , los elementos de L y D pueden tomar valores arbitrarios. En efecto,

1.5 Factorizacion de matrices simetricas

Algoritmo para la factorizaci


on

49

Tabla 1.10
de Cholesky de una matriz Ann simetrica semidenida
positiva con pivotaci
on

GT G

for i = 1 to n
Determinar ndice p {i, i + 1, n} tal que |a(p, p)| = maxijn {|a(j, j)|}
if a(p, p) > 0
Intercambiar
 las/columnas p y i.
g(i, i) !a(i, i)

i1

g 2 (k, i)

k=1

for j = i + 1 
to n
g(i, j)

a(i, j)

i1


g(k, i)g(k, j)

g(i, i)

k=1

end
end
end

sup
ongase la matriz

1
A=
1 0

y su factorizaci
on LDLT (de acuerdo con el algoritmo de la tabla 1.6 de la p
agina 41):


1 0
1/ 1



0
0 1/



1 0
1/ 1

T

donde 1  > 0. Dependiendo de la precisi


on de la m
aquina en la que se implemente este
metodo, el resultado puede llegar a ser cualquier cosa.
Para evitar estos problemas se puede recurrir, como venimos haciendo, a alg
un tipo de
pivotaci
on. Ahora bien, las pivotaciones normales destruiran la simetra de la matriz y, en
consecuencia, la velocidad O(n3 /6) obtenible con ella. Un tipo de pivotaci
on que podra
utilizarse en este caso, como hemos indicado anteriormente, sera la simetrica; es decir, la
denida por una matriz P tal que A P AP T siga siendo simetrica. Esta forma de proceder,
sin embargo, tampoco garantiza una estabilidad numerica completa en el calculo de LDLT .
Por ejemplo, si los valores de 1 y 2 son muy peque
nos, cualquiera que sea P , la matriz


A = P

1 1
PT,
1 2

seguir
a teniendo en la diagonal principal elementos muy peque
nos. Como los elementos pivote
siempre se escogen de esa diagonal principal, sus valores seran muy peque
nos si se comparan
con aquellos que no est
an en la diagonal principal que se han de hacer cero. La factorizaci
on
LDLT con pivotaciones simetricas tampoco es pues del todo deseable desde el punto de vista
numerico.

50

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

La idea de los dos metodos que estudiaremos a continuaci


on consiste en tener tambien en
cuenta los elementos de la matriz a factorizar que no estan en la diagonal principal y a la vez
conservar la simetra, no penalizando as la velocidad obtenible O(n3 /6).
Los dos metodos calculan una factorizaci
on
P AP T = LT LT ,

(1.9)

donde L, de coecientes lij , es una matriz triangular inferior con lii = 1, P representa una
permutaci
on tal que |lij | 1 y T es una matriz tridiagonal de la forma

1 1

..

.
1 2

.. ..
T =
. .

..

0
..

..

n1

n1 n
Mediante una factorizaci
on como esta, la resolucion del sistema Ax = b constara de las
siguientes etapas:
1. Lz = P b;
2. T w = z;
3. LT y = w
y
T
4.
x = P y.
Para resolver T w = z se utiliza la eliminaci
on de Gauss en su variante para matrices tridiagonales, proceso que requiere n operaciones de multiplicaci
on/divisi
on y suma/resta.
1.5.4.1

El m
etodo de Parlett y Reid

Este metodo Parlett y Reid [1970] se basa en la utilizaci


on de transformaciones de Gauss.
Para analizar su mec
anica, apliquemoslo a una matriz A55 , suponiendo que estamos en la
etapa k = 2.
Al comienzo de esta etapa, la matriz A tiene la forma

A(1)

1
1

0
= M1 P1 AP1T M1T =
0
0

1
2
v3
v4
v5

0
v3

0
v4

v5
,

donde P representa una permutaci


on tal que los m
odulos de los elementos de la transformaci
on
o eliminaci
on de Gauss M1 estan acotados superiormente por la unidad. En esta etapa k = 2
se busca el elemento del vector [v3 , v4 , v5 ]T de mayor valor absoluto y se determina una
permutaci
on, que representaremos por P2 , tal que

v3
v3

P2 v4 = v4 ,
v5
v5

donde |
v3 | = max{|v3 |, |v4 |, |v5 |}.

1.5 Factorizacion de matrices simetricas

51

Si v3 es cero, se hace M2 = P2 = I y se pasa a la etapa k = 3. Si no, se hace P2 = diag(I2 , P2 ),


es decir una matriz diagonal en dos bloques (el primero I2 y el segundo P2 ), y M2 = I5 2 eT3 ,
donde,

2 = 0 .
v4 /
v3
v5 /
v3
El resultado de esta etapa k = 2 sera una matriz A(2) de la forma

A(2)

1
1

0
= M2 P2 A(1) P2T M2T =
0
0

1
2
v3
0
0

0
v3

0
0

0
.

Este proceso se completa en n2 etapas al nal de las cuales se obtiene la matriz tridiagonal
que se deseaba:
T = A(n2) = (Mn2 Pn2 M1 P1 )A(Mn2 Pn2 M1 P1 )T .
Si se hace P = Pn2 P1 y L = (Mn2 Pn2 M1 P1 P T )1 , mediante un razonamiento
similar al del apartado 1.4, se puede comprobar que
P AP T = LT LT .
La primera columna de L es e1 ; las restantes k (k > 1) las forman los multiplicadores de Mk1 .
Ejemplo 1.2 Aplicar el metodo de Parlett y Reid a

0
1

A=
2
3

1
2
2
2

2
2
3
3

2
.

3
4

En la primera etapa se tiene que:


P1 = [e1 , e4 , e3 , e2 ]

0 [0, 1, 0, 0]
M1 = I4
2/3
1/3

0 3

3 4
A(1) = M1 P1 AP1T M1T =
0 1/3
0 2/3

0
0
1/3 2/3
.
7/9 5/9
5/9 10/9

52

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

En la segunda:
P2 = [e1 , e2 , e4 , e3 ]

0 [0, 0, 1, 0]
M2 = I4
0
1/2

A(2) = M2 P2 A(1) P2T M2T =


0
0

3
0
0

4 2/3 0
.
2/3 10/9 0
0
0 1/2

En resumen, P AP T = LT LT , donde:

1
0

P = P2 P1 =
0
0

0
0
1
0

0
0
0
1

1
0
0

L = (M2 P2 M1 P1 P T )1

0
3

T =
0
0

1
0

=
0
0

0
1
1/3
2/3

0
0
1
1/2

0
0
1

3
0
0

4 2/3 0
.

2/3 10/9 0
0
0 1/2

Para implementar de forma ecaz este metodo en ordenador hay que tener cuidado al
calcular
#
$
(1.10)
A(k) = Mk Pk A(k1) PkT MkT .
Para apreciar las operaciones que implica esta f
ormula, supongamos que B = B T es una matriz
de orden n k y que se desea obtener
#

B+ = I weT1 B I we1T

$T

(operaci
on clave en (1.10)), donde w nk y e1 es la primera columna de Ink . Si se hace
u = Be1

b11
w,
2

la matriz simetrica B+ es igual a B wuT uwT , la cual puede obtenerse realizando (n k)2
operaciones. Si esto se repite variando k de 1 a n 2, como es el caso del metodo de Parlett
y Reid, el n
umero total de operaciones que requiere el metodo es O(n3 /3) multiplicaciones/divisiones y sumas/restas: dos veces mas que las deseadas en principio.

1.5 Factorizacion de matrices simetricas

1.5.4.2

53

El m
etodo de Aasen

Este metodo Aasen [1971] calcula una factorizaci


on
P AP T = LT LT
igual que el metodo de Parlett y Reid, pero mediante un proceso que requiere O(n3 /6)
multiplicaciones/divisiones y sumas/restas. Para estudiarlo, partamos del de Parlett y Reid
y reconsideremos el calculo de las transformaciones de Gauss M1 , . . . , Mn2 . Ignoremos de
momento la pivotaci
on.
Supongamos que estamos en la etapa j y que ya se han calculado unas transformaciones
M1 , . . . , Mj1 tales que

0
j1
T11 T
T

1 ,
(Mj1 M1 )A(Mj1 M1 ) =
v
0 v T22 n j
donde

T11

1 1

1 2 . . .

.. ..
=
. .

..

0
..

..

. j1
j1 j

y que conocemos todos los elementos de T11 excepto j . El objetivo de la etapa j del metodo
de Aasen es el calculo de Mj , j y j (estos dos parametros forman la columna j-esima de T ).
Observese que


L11 0
j
1
1
M1 Mj1 =
L21 I n j
es una matriz triangular inferior unitaria, cuyos coecientes designaremos mediante lij , y cuya
primera columna es e1 pues
Mi = I [0, , 0, , , ]T eTi+1 .
  
i+1

Como

donde

se tiene que

L11 0
A=
L21 I



H11 H12
,
0 v H22

(1.11)

 

0  T
T
H
H
j
T
L
L
11
12
11
T
11
21

=
,
v
0 v H22 n j
0 I
0 v T22

vj+1
aj+1 j
.. ..
v = . = . L21 H11 ej .
vn
anj

(1.12)

54

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

En consecuencia, una vez que se conoce el vector

h1
..
H11 ej = . ,
hj
se pueden calcular
vi = aij

lik hk ,

i = j + 1, . . . , n

(1.13)

k=1

y, a continuaci
on,
Mj = I

1
vj+1

[0 . . . , 0, vj+2 . . . , vn ]T eTj+1 .

La idea clave del metodo de Aasen estriba en darse cuenta que la matriz H11 = T11 LT11 de
la expresi
on (1.12) es una matriz superior de Hessemberg; es decir, tiene la forma que se ilustra
a continuaci
on.

0
De acuerdo con esto, desarrollando ese producto matricial, se tiene que:
h1 = 1 lj2 ;
hi = i1 lj i1 + i lji + i lj i+1 ,
hj = j1 lj j1 + j .

i = 2, . . . , j 1 y

(1.14)
(1.15)

El problema con la u
ltima de estas f
ormulas es que j es desconocida. Para paliarlo se usa la
siguiente ecuacion, deducible f
acilmente de (1.11):
hj = ajj

j1

lji hi .

(1.16)

i=2

Esta f
ormula junto con (1.14), (1.15) y (1.13) sirve para calcular la transformaci
on Mj .
Para nalizar la etapa j se hace


j = vj+1

y j =

a11
si j = 1
hj j1 lj j1 si j > 1.

El algoritmo que se describe en la tabla 1.11 implementa el metodo de Aasen sin pivotacion. La matriz T de la factorizaci
on LT LT que se obtiene queda almacenada en 1 , . . . , n y
1 , . . . , n1 .
El metodo de Aasen, como ya indic
abamos, requiere O(n3 /6) multiplicaciones/divisiones
y sumas/restas.

1.5 Factorizacion de matrices simetricas

55

Tabla 1.11
Algoritmo de Aasen sin pivotaci
on para la factorizaci
on LT LT de una matriz Ann simetrica
indenida
for j = 1 to n
if j = 1
h(1) = a(1, 1)
else if j = 2
h(1) = (1); h(2) = a(2, 2)
else
(0) = 0; (1) = 0; (2: j 1) = l(j, 2: j 1); (j) = 1
h(j) = a(j, j)
for k = 1 to j 1
h(k) = (k 1)(k 1) + (k)(k) + (k)(k + 1)
h(j) = h(j) (k)h(k)
end
end
if j = 1 or j = 2
(j) = h(j)
else
(j) = h(j) (j 1)l(j, j 1)
end
if j n 1
v(j + 1: n) = a(j + 1: n, j) l(j + 1: n, 1: j)h(1: j)
(j) = v(j + 1)
end
if j n 2
l(j + 2: n, j + 1) = v(j + 2: n)/v(j + 1)
end
end

Pivotaci
on
Los vectores columna de la matriz L son m
ultiplos de los vectores v. Si alguno de esos m
ultiplos
es grande (vj+1 es peque
no), puede haber problemas de estabilidad numerica. Para soslayarlos,
se permuta el mayor componente vi , i = j + 1, . . . , n, con el vj+1 . Esta permutaci
on, por
supuesto, habr
a de hacerse tambien en la parte de la matriz A que todava no se haya tratado.
El algoritmo completo de Aasen con pivotaci
on es el que describe la tabla 1.12. Con este
algoritmo se obtiene una matriz de permutaci
on P vector PIV(), una matriz triangular
inferior L, tal que |lij | 1, y una matriz tridiagonal T , denida por i , i = 1, . . . , n y j ,
j = 1, . . . , n 1, tales que
P AP T = LT LT .
S
olo se calculan los elementos lij , i = 2, . . . , n, j = 2, . . . , n. La matriz P = P1 Pn2 , donde
Pj es la identidad con las las PIV(j) y j + 1 intercambiadas.

56

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Tabla 1.12
Algoritmo de Aasen con pivotaci
on para la factorizaci
on LT LT de una matriz Ann simetrica
indenida
for j = 1 to n
if j = 1
h(1) = a(1, 1)
else if j = 2
h(1) = (1); h(2) = a(2, 2)
else
(0) = 0; (1) = 0; (2: j 1) = l(j, 2: j 1); (j) = 1
h(j) = a(j, j)
for k = 1 to j 1
h(k) = (k 1)(k 1) + (k)(k) + (k)(k + 1)
h(j) = h(j) (k)h(k)
end
end
if j = 1 or j = 2
(j) = h(j)
else
(j) = h(j) (j 1)l(j, j 1)
end
if j n 1
v(j + 1: n) = A(j + 1: n, j) l(j + 1: n, 1: j)h(1: j)
Determinar q tal que |v(q)| = v(j + 1: n) .
piv(j) = q; v(j + 1) v(q); l(j + 1, 2: j) l(q, 2: j)
a(j + 1, j + 1: n) a(q, j + 1: n)
a(j + 1: n, j + 1) a(j + 1: n, q)
(j) = v(j + 1)
end
if j n 2
l(j + 2: n, j + 1) = v(j + 2: n)
if v(j + 1) = 0
l(j + 2: n, j + 1) = l(j + 2: n, j + 1)/v(j + 1)
end
end
end

1.5 Factorizacion de matrices simetricas

La codicaci
on completa de este algoritmo en Fortran 77 para factorizar la matriz

1 10 20
A = 10 1 30
20 30 1
es la que sigue.
PROGRAM Aasen
C

parameter (n = 3)
real a(n,n),alfa(n),beta(n),l(n,n),h(n),v(n),l0(0:n)
integer ipvt(n)
C
data a/1.,10.,20.,10.,1.,30.,20.,30.,1./
C
do i = 1,n
ipvt(i) = i
end do
C
C
C

T
*** FACTORIZACION LTL ***
do j = 1,n
if (j.eq.1) then
h(j) = a(1,1)
else if (j.eq.2) then
h(1) = beta(1)
h(2) = a(2,2)
else
l0(0) = 0.
l0(1) = 0.
do k = 2,j-1
l0(k) = l(j,k)
end do
l0(j) = 1
h(j) = a(j,j)
do k = 1,j-1
h(k) = beta(k-1)*l0(k-1)+alfa(k)*l0(k)+beta(k)*l0(k+1)
h(j) = h(j)-l0(k)*h(k)
end do
endif

C
if (j.eq.1.or.j.eq.2) then
alfa(j) = h(j)
else
alfa(j) = h(j)-beta(j-1)*l(j,j-1)
endif
C
if (j.le.n-1) then
smax = 0.
iq
= j
do k = j+1,n
suma = 0.
do k1 = 1,j
suma = suma-l(k,k1)*h(k1)
end do
v(k) = a(k,j)+suma
if (abs(v(k)).gt.smax) then
smax = abs(v(k))

57

58

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

iq
= k
endif
end do
aux
= v(j+1)
v(j+1) = v(iq)
v(iq) = aux
do k = 2,j
aux
= l(j+1,k)
l(j+1,k) = l(iq,k)
l(iq,k) = aux
end do
iaux
= ipvt(j+1)
ipvt(j+1) = ipvt(iq)
ipvt(iq) = iaux
do k = j+1,n
aux
= a(j+1,k)
a(j+1,k) = a(iq,k)
a(iq,k) = aux
end do
do k = j+1,n
aux
= a(k,j+1)
a(k,j+1) = a(k,iq)
a(k,iq) = aux
end do
beta(j) = v(j+1)
endif
if (j.le.n-2) then
do k = j+2,n
l(k,j+1) = v(k)
end do
if (v(j+1).ne.0.) then
do k = j+2,n
l(k,j+1) = l(k,j+1)/v(j+1)
end do
endif
endif
end do
C
print
print
print
print

*,alfa
*,(beta(i),i=1,n-1)
*,((l(j,i),j=i+1,n),i=1,n-1)
*,ipvt

C
end

La permutaci
on resultante es P = [e1 , e3 , e2 ], por lo que

P AP T

1 20 10
= 20 1 30 .
10 30 1

La factorizaci
on nal es

P AP T

1 0 0
1 20
0
1 0 0 T
T
29,5 0 1 0 .
= LT L = 0 1 0 20 1
0 0,5 1
0 29,5 28,75
0 0,5 1

1.5 Factorizacion de matrices simetricas

1.5.4.3

59

Factorizaci
on de pivotaci
on diagonal

La idea que preside estos metodos consiste en descomponer la matriz simetrica A de la forma
P AP T = LBLT ,
donde, como siempre, P es una matriz de permutaci
on y B una matriz diagonal en bloques,
el tama
no de los cuales no es superior a 2 2, y hacerlo de manera que se realicen el menor
n
umero de operaciones y comparaciones posible. La idea de utilizar pivotes 2 2 es tratar de
evitar las dicultades que se pueden presentar al factorizar una matriz simetrica indenida con
un proceso que s
olo tenga en cuenta pivotes individuales y encontrarse que estos son cero o
muy peque
nos.
Para exponer las caractersticas de estos metodos y su mecanica, supongamos que


P1 AP1T

B CT
s
C D
ns
s ns

donde P1 es una matriz de permutaci


on y s = 1 o 2. Si A no tiene todos sus elementos nulos
siempre es posible escoger los parametros s y P1 de tal forma que B sea no singular, pudiendose
entonces escribir


P1 AP1T

Is
0
=
1
CB
Ins



B
0
0 D CB 1 C T



Is B 1 C T
0 Ins

A los efectos de conseguir una buena estabilidad numerica en el proceso de factorizacion, el


pivote s s, B, se escoge de tal manera que los elementos de la matriz
D CB 1 C T ,
esten acotados convenientemente. En este sentido, si se tiene un
que denominaremos A,
(0, 1) y se denen
0 = max |aij |
y 1 = max |aii |,
i, j

la estrategia de pivotaci
on que usa uno de los metodos que realizan pivotaci
on diagonal, concretamente el de Bunch y Parlett [1971], es la siguiente (en una hipotetica etapa k del proceso):
if 1 0 then
s=1
Determinar una permutaci
on P de tal manera que |b11 | = 1
else
s=2
Determinar una permutaci
on P de tal manera que |b21 | = 0
end
que si s = 1,
Se puede comprobar f
acilmente de la denici
on de A,
#

|
aij | 1 + 1 0 ,

60

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

mientras que si s = 2,
|
aij |

3
0 .
1

Igualando (1 + 1 )2 , factor de crecimiento asociado a dos pivotaciones sucesivas s = 1, a


(3 )/(1 ), asociado a una pivotaci
on s = 2, se obtendra el valor optimo de que
minimiza el lmite de crecimiento de los elementos que se obtienen en la factorizacion. Ese
optimo se puede demostrar que es

1 + 17
=
.
8
Efectuadas las permutaciones convenientes de cada etapa mediante un proceso de pivotaci
on
T
diagonal, estos procedimientos a continuaci
on hacen cero las submatrices C y C de


B CT
C D

mediante transformaciones caracterizadas por matrices del tipo




Is
0
.
1
CB
Ins

El proceso comenzara otra vez en una etapa ulterior permutando convenientemente la


matriz Ans , y as sucesivamente.
El metodo de Bunch y Parlett requiere O(n3 /6) multiplicaciones/divisiones y sumas/restas
y entre O(n3 /12) y O(n3 /6) comparaciones. Su estabilidad numerica es comparable a la
eliminaci
on de Gauss con pivotaci
on total.
1.5.4.3.1

El m
etodo de Bunch y Kaufman

Este metodo de pivotaci


on diagonal Bunch y Kaufman [1977] es el m
as ecaz de los conocidos hasta la fecha para factorizar matrices simetricas indenidas. Est
a implementado por casi
todas las libreras de rutinas comercialmente disponibles, tanto para tratar matrices dispersas como densas. Es una mejora del de Bunch y Parlett que reduce mucho las comparaciones
necesarias inherentes a las pivotaciones; las multiplicaciones/divisiones y sumas/restas son las
mismas: O(n3 /6) .
En cada etapa k de este metodo (se procede desde la u
ltima columna a la primera con objeto
de conservar la orientaci
on de las columnas), s
olo se analizan dos columnas de la submatriz Ak
que queda por factorizar de


Ak 0
,
0 Bk
donde Ak es una matriz k k y Bk una diagonal en bloques (n k) (n k) con bloques 1 1
o 2 2.
En esa etapa k, analizando los elementos de la u
ltima columna, ak , de Ak no en la diagonal
principal con respecto al de la diagonal principal, y los de aquella la de Ak donde se registra

1.5 Factorizacion de matrices simetricas

61

en ak el maximo elemento, se determinan una matriz Pk y otra Bk (1 1 o 2 2), tales que

Dk Ck
0

Ak = Pk Ak Pk = CkT Bk
.
Bk
0
Posteriormente se eliminan los Ck y CkT mediante unas transformaciones Uk de tal manera que

Uk Ak UkT

D C
I
0
Iks Mk
0 Tk k 0 ks
0
MkT Is
= 0 Is
C k Bk
Ink
0
Bk
Ink
0
0

Dk Mk Bk MkT 0
0
.
0
Bk
=
Bk
0
Para obtenerlas se resuelve Mk Bk = Ck . Si Bk es 2 2, se hace Pk1 = I y Uk1 = I. Si
Bk resulta ser un bloque 2 2, resolver Mk Bk = Ck representa resolver k 2 sistemas de
ecuaciones lineales 2 2 donde cada uno de los pares de inc
ognitas de cada sistema son los
dos elementos de cada la de la matriz Mk . Estas inc
ognitas se obtienen f
acilmente teniendo
en cuenta que

Mk = Ck Bk1 ,
donde
 1

Bk

1


bk 11 bk22 bk221

bk22 bk21
.
bk21 bk11

Del proceso de factorizacion en su totalidad se llega a que


U1 P1 Un Pn APn UnT P1 U1T = B
o que
A = U BU T ,
donde

U = Pn Un1 P1 U11

Uk1

Iks Mk 0

0
Is
0 ,
=
0
0 Ink

con s, como siempre, 1 o 2.


Pivotaci
on
Aun cuando el criterio que se sigue para llevar a cabo las pivotaciones en el metodo de Bunch
y Kaufman es parecido al de Bunch y Parlett, ambos metodos dieren en cuanto al n
umero de
comparaciones necesarias: el de Bunch y Kaufman es sensiblemente inferior. Si A expresa, para
simplicar la notaci
on, la submatriz Ak que resta por factorizar en la etapa k, el proceso de

62

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Tabla 1.13
Operaciones de la pivotaci
on en el metodo de Bunch y Kaufman
Determinar = |ark | = max{|a1k |, . . . , |ak1 k |}
if > 0
if |akk | then
P = I; s = 1
else
Determinar = max{|a1k , . . . , |ar1 r |, |ar+1 r |, . . . , |akr |}
if |akk | 2 then
P = I; s = 1
else if |arr | > then
s = 1; determinar P tal que (P T AP )kk = arr
else
s = 2; determinar P tal que (P T AP )k1 k = ark
end
end
end

pivotaci
on parcial de este metodo, en el que solo se examinan los elementos de dos columnas
de A, es el que se describe en la tabla 1.13. El n
umero de comparaciones que se efect
uan de
esta manera es n2 1.
El algoritmo completo de Bunch y Kaufman se representa en la tabla 1.14. Requiere de
O(n3 /6) multiplicaciones/divisiones y sumas/restas y n2 1 comparaciones. Como en el
algoritmo de Bunch y Parlett,

1 + 17
=
.
8
La codicaci
on de este algoritmo en forma de rutina en Fortran 77 es la que sigue a
continuaci
on. Al nal del procedimiento numerico, la parte triangular superior de la matriz A
recoge los multiplicadores o matrices elementales Uk .
subroutine bunchkauf(a,n,ipvt)
C
integer ipvt(n)
real a(n,n),mulk,mulkm1
logical swap
C
C
C
C
C
C
C
C
C
C

a(-,-)

Al final de la factorizaci
on contiene la matriz
diagonal en bloques y los multiplicadores necesarios
para obtenerla.
T
Se puede escribir de la forma a=u*b*u , donde u es el
producto de matrices de permutaci
on y matrices triangular superior.

ipvt()

Indicador de la pivotaciones realizadas.

alpha = (1.0e0+sqrt(17.0e0))/8.0e0
k
= n
do while (k.gt.1)

1.5 Factorizacion de matrices simetricas

Tabla 1.14
Algoritmo para la factorizaci
on U BU T de una matriz Ann simetrica indenida por el
metodo de Bunch y Kaufman con pivotaci
on
while k > 1 do
%
%
%
%'
%
&%
% (k) %
% (k) %
% (k) %
Determinar k = %ark % = max %a1k % , . . . , %ak1 k %
%
%
% (k) %
if %akk % k then
Pk = I; s = 1
else

%
%
%
%
% (k) %
% (k) %
Determinar = max
max %ajr % , max %arj %
1jr1
r+1jk
%
%
% (k) %
2
if %akk % k then
Pk =%I; s %= 1
% (k) %
else if %arr % then
(k)

s = 1; determinar Pk tal que (Pk Ak Pk )kk = arr


for j = k 1 to 1
= a(j, k)/a(k, k)
a(j, k) =
for i = 1 to j
a(i, j) a(i, j) a(i, k)
end
end
else
(k)
s = 2; determinar Pk tal que (Pk Ak Pk )k1 k = ark
for j = k 2 to 1
a(k 1, k 1) a(j, k) a(k 1, k) a(j, k 1)
1 =
a(k 1, k) a(k 1, k) a(k, k) a(k 1, k 1)
a(k, k) a(j, k 1) a(k 1, k) a(j, k)
2 =
a(k 1, k) a(k 1, k) a(k, k) a(k 1, k 1)
a(j, k) = 1
a(j, k 1) = 2
for i = 1 to j
a(i, j) a(i, j) 1 a(i, k)
a(i, j) a(i, j) 1 a(i, k 1)
end
end
end
end
end

63

64

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

C
C *** Determinar pivotaci
on diagonal.
C
kstep indica el tama
no del bloque;
C
swap si se realizan intercambios de filas y columnas.
C
km1
= k-1
! Se determina el
absakk = abs(a(k,k))
! mayor elemento no
imax
= isamax(k-1,a(1,k))
! en la diagonal de
colmax = abs(a(imax,k))
! la columna k.
if (absakk.ge.alpha*colmax) then
kstep = 1
swap = .false.
else
! Mayor elerowmax = 0.0e0
! mento no
do j = imax+1,k
! en la
rowmax = amax1(rowmax,abs(a(imax,j)))! diagonal en
end do
! fila imax.
if (imax.ne.1) then
jmax
= isamax(imax-1,a(1,imax))
rowmax = amax1(rowmax,abs(a(jmax,imax)))
endif
if (abs(a(imax,imax)).ge.alpha*rowmax) then
kstep = 1
swap = .true.
else if (absakk.ge.alpha*colmax*(colmax/rowmax)) then
kstep = 1
swap = .false.
else
kstep = 2
swap = imax.ne.km1
endif
endif
if (amax1(absakk,colmax).eq.0.0e0) then
ipvt(k) = k
! La columna k es cero;
cycle
!
seguir a otra.
endif
if (kstep.eq.1) then
C
C * Bloque pivote 1 x 1 *
C
ipvt(k) = k
if (swap) then
call sswap (imax,a(1,imax),a(1,k))! Intercambiar filas
do j = k,imax,-1
! y columnas.
t
= a(j,k)
a(j,k)
= a(imax,j)
a(imax,j) = t
end do
ipvt(k) = imax
endif
C
do j = k-1,1,-1
! Eliminaci
on.
mulk = -a(j,k)/a(k,k)
call saxpy (j,mulk,a(1,k),a(1,j))
a(j,k) = mulk
end do
else
! KSTEP=2
C
C * Bloque pivote 2 x 2 *

1.5 Factorizacion de matrices simetricas

C
ipvt(k)
= 1-k
ipvt(k-1) = ipvt(k)
if (swap) then
call sswap (imax,a(1,imax),a(1,k-1))
do j = k-1,imax,-1
t
= a(j,k-1)
a(j,k-1) = a(imax,j)
a(imax,j) = t
end do
t
= a(k-1,k)
a(k-1,k) = a(imax,k)
a(imax,k) = t
ipvt(k)
= -imax
endif

! Intercambiar
! filas y
! columnas.
!
!
!
!
!
!
!
!

C
if (k-2.ne.0) then
! Eliminaci
on
ak
= a(k,k)/a(k-1,k)
akm1 = a(k-1,k-1)/a(k-1,k)
deno = 1.0e0-ak*akm1
do j = k-2,1,-1
bk
= a(j,k)/a(k-1,k)
bkm1
= a(j,k-1)/a(k-1,k)
mulk
= (akm1*bk-bkm1)/deno
mulkm1 = (ak*bkm1-bk)/deno
call saxpy (j,mulk,a(1,k),a(1,j))
call saxpy (j,mulkm1,a(1,k-1),a(1,j))
a(j,k)
= mulk
a(j,k-1) = mulkm1
end do
endif
endif
k = k-kstep
end do
ipvt(1) = 1
C
return
end
subroutine sswap(n,a,b)
real a(n),b(n)
do i = 1,n
aux = a(i)
a(i) = b(i)
b(i) = aux
end do
return
end
integer function isamax (n,a)
real a(n)
isamax = 1
dmax
= abs(a(1))
do i = 2,n
if (abs(a(i)).gt.dmax) then
isamax = i
dmax
= abs(a(i))
endif
end do

65

66

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

return
end
subroutine saxpy(j,t,a,b)
real a(1),b(1)
do i = 1,j
b(i) = b(i)+t*a(i)
end do
return
end

Ejemplo 1.3 Si el algoritmo de Bunch y Kaufman se aplica a la matriz

1 10 20
A = 10 1 30 ,
20 30 1
la matriz factorizada que se obtiene es

1 0,6562848 0,3114572
11,79199 0 0
1
0 0

1
0
0
1 30 0,6562848 1 0 .
A=0
0
0
1
0
30 1
0,3114572 0 1

Si se quiere usar la rutina anterior para factorizar la matriz A de este u


ltimo ejemplo, un
programa que se podra utilizar el que se lista a continuaci
on.
PROGRAM Bunch
C
parameter (n = 3)
real a(n,n)
integer ipvt(n)
C
data a/1.,10.,20.,10.,1.,30.,20.,30.,1./
C
call bunchkauf (a,n,ipvt)
print *,((a(i,j),j=1,n),i=1,n)
print *,ipvt
C
end

1.6

Condicionamiento de sistemas de ecuaciones lineales

El concepto de condicionamiento de un problema es algo a lo que se recurre a menudo aun


cuando su sentido sea tal vez difuso o vago. En un sentido general, se dice que un problema est
a
bien condicionado si peque
nos cambios en los par
ametros que lo denen producen peque
nos
cambios en los resultados. Para decidir si tal o cual problema est
a bien o mal condicionado
habra que determinar su sensibilidad a cada uno de sus par
ametros. Como ejemplo de condicionamiento podramos considerar el de una carga sujeta a una supercie rme mediante un
cable o una barra de hierro. Aumentando la carga en peque
nas cantidades, el cable o barra
sufre unos peque
nos estiramientos proporcionales a los incrementos de esa carga. Alcanzado
el umbral que dene la zona denominada de uencia, incrementos muy peque
nos de la carga

1.6 Condicionamiento de sistemas de ecuaciones lineales

67

suponen, proporcionalmente, grandes estiramientos del cable. Antes de este umbral, el problema estiramiento/carga se puede decir que esta bien condicionado; en la zona de uencia, por
el contrario, el problema est
a mal condicionado.
Un sistema de ecuaciones lineales, representado por Ax = b, como modelo matematico
de un determinado problema fsico, social, mecanico, etc, tambien puede estar bien o mal
condicionado. Su condicionamiento lo caracterizar
a la sensibilidad del vector soluci
on x a
peque
nos cambios, tanto en el termino de la derecha b, como en los coecientes que denen la
matriz A.
La cuestion del condicionamiento es particularmente interesante en un sistema de ecuaciones
lineales y en el proceso que conlleva su resolucion pues, como hemos visto, el ordenador o
maquina que lo ha de llevar a cabo, al no trabajar m
as que con una precisi
on determinada, no
resolvera el sistema
Ax = b
como tal, sino una aproximaci
on
(A + A)x = b + b.
Si el algoritmo utilizado es estable y el sistema tambien, cabe esperar que el resultado obtenido
sea muy parecido al real. Sin embargo, si el sistema esta mal condicionado, o el algoritmo no
es numericamente estable, la solucion puede diferir sustancialmente de la real.
De estas consideraciones se desprende la utilidad de cuanticar el condicionamiento de un
sistema de ecuaciones. Esto se consigue mediante el denominado n
umero de condici
on de una
matriz que veremos inmediatamente.
Antes, consideremos los dos sistemas de ecuaciones siguientes:


8 5
Ax = b
4 10



x1
x2

3
=
14

0,66 3,34
x = b
y A
1,99 10,01



1
x
2
x

4
=
.
12

La soluci
on de ambos es el vector [1, 1]T .
Si introducimos un b = [0,04, 0,06]T en el termino independiente del primer sistema,
su soluci
on pasar
a a ser [0,993, 0,9968]T . El cambio relativo en la norma eucldea del vector b
es
"
0,042 + 0,062
b2
=
0,0050.
b2
32 + 142
Por lo que respecta al vector soluci
on, ese cambio relativo en la norma eucldea es
x2
=
x2

(1 0,993)2 + (1 0,9968)2

0,0054.
12 + 12

Como se puede ver, un peque


no cambio en el vector b induce un cambio peque
no en el vector
soluci
on.
= [0,04, 0,06]T , en el vector en el termino indepenIntroduciendo el mismo cambio, b
su soluci
diente del segundo sistema, b,
on pasa a ser [6, 0]T . Es decir, un cambio relativo en la
igual a
norma eucldea de b
"
0,042 + 0,062

= 0,0057,
42 + 122

68

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

produce un cambio en el vector soluci


on igual a:

52 + 12

= 3,6055.
12 + 12
Evidentemente, el segundo sistema es mucho mas sensible a cambios en el termino independiente que el primero.
En la gura 1.7 se representan geometricamente estos dos sistemas de ecuaciones: en (a) el
primero; en (b) el segundo. Como se puede ver, las dos rectas que representan las ecuaciones
del primer sistema se cortan ntidamente en el punto [1, 1]T . En el caso del segundo sistema,
aun usando una resoluci
on gr
aca mayor, apenas se diferencian las dos rectas y mucho menos
d
onde se cortan.
Estudiemos a continuaci
on la forma de cuanticar la sensibilidad de un sistema de ecuaciones lineales a peque
nas modicaciones tanto en el termino independiente como en los elementos
de la matriz de coecientes.
Analicemos en primer lugar el caso de una modicaci
on b del termino independiente.
Veamos como se relaciona la solucion de
A(x + x) = b + b
con la de
Ax = b.
Designemos por  cualquier norma vectorial y su correspondiente norma matricial consistente.
De las igualdades
A(x + x) = b + b
y Ax = b,
se obtiene, restando y despejando x, que
x = A1 b.

x2

x2

x1
(a)

x1
(b)

Figura 1.7
Ilustraci
on del buen y mal condicionamiento de dos sistemas de ecuaciones
lineales

1.6 Condicionamiento de sistemas de ecuaciones lineales

69

De la denici
on de norma matricial consistente con una norma vectorial (ver apendice A) se
tiene que
x A1  b
(1.17)
y que b A x o, lo que es lo mismo, que
A
1

.
x
b

(1.18)

Combinando (1.17) y (1.18) se deduce que el error relativo, x/x, de la soluci


on del
sistema Ax = b al modicar el termino independiente de b a b + b es
b
x
A A1 
.
x
b
Denici
on 1.1 Sea  una norma matricial consistente con una norma vectorial. Asociado
a esa norma, el n
umero de condici
on de una matriz invertible A, (A), es:
(A) = A A1 .

El concepto de n
umero de condici
on de una matriz se generaliza a cualquier matriz A (no
necesariamente cuadrada) de rango completo mediante la expresi
on
(A) = A A ,
donde A es la matriz pseudoinversa de la matriz A.
El n
umero de condici
on de una matriz A es un indicador del error de amplicaci
on que
produce en un vector x el someterlo a la transformacion que dene dicha matriz A. Concretamente, si la esfera unidad se somete a esa transformacion, el n
umero de condici
on sera igual al
cociente de las longitudes de los semiejes mayor y menor del hiperelipsoide resultante de esa
transformaci
on.
De la misma forma que hemos analizado la sensibilidad de un sistema de ecuaciones a
peque
nos cambios en el termino independiente, se pueden estudiar cambios en los elementos
de la matriz de coecientes. En efecto, comparemos la solucion de
Ax = b

(A + A)(x + x) = b.

De la segunda igualdad, como Ax = b, haciendo x = A1 A(x+x) resulta, despreciando


el producto A x, que
x A1  A x.
Expresi
on que tambien se puede escribir como
A
x
A1  A
.
x
A
As pues, el error relativo que resulta de perturbar ligeramente los coecientes de la matriz del
sistema Ax = b esta acotado en terminos del n
umero de condici
on de la matriz A.

70

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Teorema 1.11 Para toda matriz A de rango completo:


1. Su n
umero de condici
on (A) 1.
2. (A) = (A ).
3. (A) = (A) para todo escalar = 0.
n (A)
, donde n y 1 son, respectivamente, los valores singulares mayor y
1 (A)
menor de la matriz A.

4. 2 (A) =

5. 2 (A) =

max |i (A)|
i

min |i (A)|

, si A es simetrica.

6. 2 (AT A) = 22 (A).
7. Su n
umero 2 (A) = 1 si la matriz es la identidad o se trata de una matriz ortogonal.
8. Su n
umero de condici
on 2 (A) es invariante frente a transformaciones ortogonales.

n.
Demostracio
1. AA = I 1 = I A A .
2. (A) = A A  = A  A = (A ).
3. (A) = A (A)1  = ||A| 1 |A1  = A A1  = (A).
4. Recordemos que si i , 1 i n, son los valores singulares de la matriz A y i , 1 i n,
sus valores propios,
#
$
A22 = max i AT A = max i2 = n2
i

1in

y
A 22

#

= max i
1in

$1 

A A

= max
i

1
1
1
=
= 2.
2
2
i
1
min i
i

Por lo tanto
n (A)
.
1 (A)

2 (A) =

%"
% %
%
%
% %" 2
%
T
%
%
%
%
5. Cuando A es simetrica i (A) = % i (A A)% = % i (A)% = |i (A)|. En consecuencia,

max |i (A)|
2 (A) =

min |i (A)|
i

1.6 Condicionamiento de sistemas de ecuaciones lineales

71

6. De la denici
on de valor singular, de acuerdo con el punto 4 de este teorema,


2 (A) = !

max i (AT A)
i

min i (AT A)

Como AT A es denida positiva, si B = AT A, B T B = B 2 y (B 2 ) = 2 (B). Se tiene


entonces que


2 (A A) = !
T

max i (B 2 )
i

=!

min i (B )
i

max 2i (B)
i

min i2 (B)
i

max i (B)
=

min i (B)

= 22 (A).

7. Si la matriz es ortogonal o la identidad, A22 = max i AT A = 1, lo que implica que


1in

su n
umero de condici
on 2 es 1.
8. Esta u
ltima propiedad se deduce inmediatamente recordando que QQT = I y que, por
tanto, QA2 = AQ2 = A2 .
El n
umero de condici
on de una matriz indica tambien lo cerca que esa matriz esta de la
singularidad.
Volvamos al ejemplo que utiliz
abamos para introducir estos conceptos. La matriz


A=
cuya inversa es
A

8 5
,
4 10

0,10 0,05
=
,
0,04 0,08

tiene un n
umero de condici
on 1 (A) = A1 A1 1 = 15 0,14 = 2,1. El de


0,66 3,34
,
A =
1,99 10,01
cuya inversa es

250,25 83,5
A1 =
,
49,75 16,5
= A
1 A1 1 = 13,35 300 = 4005: tres ordenes de magnitud superior.
es 1 (A)
Un error que se comete con frecuencia es asimilar el concepto de n
umero de condici
on de
una matriz con el de su determinante y que, en ese sentido, a mayor determinante, mayor
n
umero de condici
on; nada m
as lejos de la realidad.
Ejemplo 1.4 Sea A una matriz diagonal de orden 100 denida por
a11 = 1;

aii = 0,1

2 i 100.

De esta matriz, A2 = 1 y A1 2 = 10. El n


umero de condici
on 2 (A) = 10. Por el contrario,
99
99
su determinante es det(A) = 1 (0, 1) = 10 .

72

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Ejemplo 1.5 Sea A una matriz bidiagonal de la forma

1 2
1 2

1 2

.
.. ..

.
.

1 2
1
Su inversa es

1 2 4 (2)n1

1 2
(2)n2

1
..

.
..

.
..
1

Se tiene que
A = A1 = 3 y A1  = A1 1 = 1 + 2 + 4 + + 2n1 = 2n 1.
Los n
umeros de condici
on de A son:
(A) = 1 (A) 3 2n .
Su determinante en cambio es 1.
Los distintos n
umeros de condici
on de una matriz A nn asociados con las normas
matriciales mas habituales cumplen que:
2 (A)/n 1 (A) n 2 (A);
(A)/n 2 (A) n (A);
1 (A)/n2 (A) n2 1 (A).
Las matrices con n
umeros de condici
on peque
nos, pr
oximos a la unidad, se dicen bien
condicionadas; las que tienen n
umeros de condici
on altos, mal condicionadas.
Dado que muchos de los algoritmos para la resoluci
on directa de sistemas de ecuaciones
lineales basan su ecacia en la adecuada factorizaci
on de la matriz correspondiente y que la
representacion de esa matriz en el sistema de numeracion en coma otante de un ordenador
sufre errores de redondeo, el n
umero de condici
on de la matriz es tambien determinante, desde
un punto de vista cualitativo, a la hora de valorar la ecacia del algoritmo al factorizar y resolver
el sistema. Existen diversos algoritmos para estimar el n
umero de condici
on de una matriz sin
necesidad de invertirla. Aunque calcularlo o estimarlo es un proceso bastante complejo, por
lo que se reere al n
umero de operaciones a efectuar, a aquellos lectores interesados en como
obtener el n
umero de condici
on de una matriz, les sugerimos que consulten la bibliografa sobre
algebra lineal numerica indicada al nal del captulo.

1.7 Mnimos cuadrados lineales

1.7

73

Mnimos cuadrados lineales

Hasta ahora nos hemos ocupado de la resoluci


on de
Ax = b,
con A nn , b n , mediante metodos directos: el caso 1a de la gura 1.1 de la p
agina 5. En
lo que sigue de este captulo nos centraremos en la resoluci
on, tambien por metodos directos,
de los demas casos representados en esa gura.
Estudiaremos problemas sin soluci
on, debido a que rango(A|b) = rango(A), a los que sin
embargo se les puede encontrar una pseudosoluci
on siguiendo el criterio de minimizar la norma
Ax b2 , o problemas con muchas soluciones, de las que se escoge aquella x cuya norma
eucldea, x2 , es mnima.
El hecho de que para dar soluci
on a los problemas referidos se utilice el criterio de minimizar
la norma eucldea de una manera u otra es lo que engloba y da nombre a los procedimientos
para resolver esos problemas: mnimos cuadrados.
El problema lineal de mnimos cuadrados se plantea formalmente en los siguientes terminos:
Dada una matriz A mn , de rango k min(m, n), y un vector b m ,
encontrar un vector x n que minimice Ax b2 .
As enunciado, este es un problema de optimizacion no lineal sin condiciones, pudiendose
resolver con cualquiera de las tecnicas que la programacion no lineal proporciona. En este
apartado nos centraremos en metodos especcos que lo resuelven directamente.
La aplicaci
on m
as generalizada de las tecnicas que describiremos surge de forma natural
en todas las ramas de la ciencia y de la ingeniera en que se trate de estimar par
ametros de
funciones cuando el n
umero de datos disponibles es muy superior al de inc
ognitas a estimar.
El ejemplo paradigm
atico lo constituye el tratar de ajustar o aproximar a un conjunto de m
pares de puntos (ti , bi ) pudiendo representar unas mediciones, bi , obtenidas en unos tiempos,
ti una funci
on f (x, t) de n par
ametros independientes x1 , x2 . . . xn . Si la funci
on es lineal en
ametros
x1 , . . . , xn se tiene un problema de mnimos cuadrados lineales en el que si los n par
se disponen como los componentes de un vector n-dimensional x y los datos obtenidos en otro
vector m-dimensional b (usualmente m n), se llega a una relaci
on de la forma Ax = b, donde
los coecientes de la matriz A quedan determinados por las observaciones concretas a las que
se reere el experimento o situacion fsica estudiada.
Como ejemplo ilustrativo supongamos que queremos ajustar al conjunto de pares de puntos
{(ti , bi )} = {(1, 2), (2, 3), (3, 5), (4, 6)} la funci
on
f (x0 , x1 , x2 , t) = x0 + x1 t + x2 t2 ,
seg
un representa la gura 1.8.
Para los datos y par
ametros de este ejemplo el sistema Ax = b tiene la forma siguiente:

1
1

1
1


1
2
x0

4 3
x1 = .

9
5
x
16  2 
6

 x
  
A
b

1
2
3
4

74

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

b
f (x0 , x1 , x2 , t) = x0 + x1 t + x2 t2

5
4
3
2
1
1

Figura 1.8
Ejemplo de problema de mnimos cuadrados: ajuste de una funci
on a una nube de puntos

Este sistema de ecuaciones,3 as planteado, no tiene soluci


on; s es posible, sin embargo, determinar una pseudosoluci
on que mejor cumpla un criterio determinado, por ejemplo, minimizar
una norma Ax b. Si la norma que se emplea es la mas estandar en un espacio vectorial
de dimensi
on nita, es decir, la norma eucldea, el problema que se plantea es el que se conoce
habitualmente como el de estimacion por mnimos cuadrados.
Las aplicaciones de esta tecnica en las ciencias y en la ingeniera son muchsimas y de
muy diversa ndole entre las m
as modernas quiz
as esten las de determinar la posici
on de un
vehculo espacial en un momento dado o la de denir su trayectoria. En el captulo relativo
a sistemas de ecuaciones no lineales se describe una aplicacion muy interesante sobre la que se
profundiza en sus aspectos te
oricos y pr
acticos: la de analizar sistemas electricos de generacion
y transporte de energa, el problema a que da lugar y la forma de resolverlo mediante una
sucesion de subproblemas lineales de mnimos cuadrados como los que a continuaci
on pasamos
a estudiar.

1.7.1
1.7.1.1

Fundamentos te
oricos del problema
Descomposici
on en valores singulares

La descomposicion en valores singulares de una matriz constituye una gran ayuda para el
estudio te
orico y pr
actico de problemas de mnimos cuadrados.
3

La matriz de este ejemplo es del tipo Vandermonde.

1.7 Mnimos cuadrados lineales

75

Teorema 1.12 (Descomposici


on en valores singulares) Si A mn es una matriz de
rango r, existen matrices ortogonales U mm y V nn tales que
A = U V T ,


donde

(1.19)

r 0
=
,
0 0

mn y r = diag(1 , 2 , . . . , r ), con


1 2 r > 0.
Si las matrices U y V se escriben como
U = [u1 , . . . , um ]

V = [v 1 , . . . , v n ] ,

los ui y v i son los vectores singulares izquierdos y derechos, respectivamente, correspondientes a los valores singulares i , i = 1, . . . , r.
n. Sean x n e y m dos vectores tales que
Demostracio
x2 = y2 = 1

y Ax = y,

con

= A2 .

A2 es la norma espectral o norma matricial 2 inducida por la norma eucldea  2 . La


existencia de estos vectores x e y esta garantizada por la denici
on de A2 .
Sean las dos matrices ortogonales
V = [x, V1 ] nn

y U = [y, U1 ] mm

(recuerdese que siempre es posible ampliar un conjunto de vectores ortogonales hasta formar
una base ortonormal de n ). Como U1T Ax = U1T y = 0, la matriz U T AV tiene la siguiente
estructura:
 T 


y
wT
T
A1 = U AV =
A [x, V1 ] =
,
0 B
U1T
donde B = U1T AV1 (m1)(n1) y w T = y T AV1 . Dado que
(  (
( 2
(
T
(
(
(
(
(A1 ( = ( + w w ( 2 + w T w,
(
(
(
w (
Bw
2

como

(  (
( (
"
(
(
(
(
(A1 ( A1  ( ( = A1 
( 2 + w T w)2 ,
2( w (
2
(
w (
2

se cumple que A1 2 ( 2 + w T w)1/2 . Como las matrices U y V son ortogonales, A1 2 =
A2 = y, por consiguiente, w = 0. La argumentaci
on de la demostraci
on se completa por
inducci
on.

76

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

De (1.19) se tiene que


AT A = V T V T

y que AAT = U T U T .

En consecuencia, los i2 , i = 1, . . . , r, son los valores propios no nulos de las matrices simetricas
semidenidas positivas AT A y AAT ; los v i y ui los correspondientes vectores propios.
Los valores singulares de A son las longitudes de los semiejes del hiperelipsoide E denido
por:
E = {y : y = Ax, x2 = 1} .
Es decir, las longitudes de los semiejes del hiperelipsoide imagen de la esfera unidad resultante
de la aplicaci
on que caracteriza la matriz A mn . En la gura 1.9 se representa el caso en
que m = n = 2.
Los valores singulares de una matriz son u
nicos. Un vector singular v j , j r, es u
nico
2
T
solo cuando j es un autovalor u
nico de A A. Los vectores singulares correspondientes a
valores singulares m
ultiples se pueden utilizar como base ortonormal del subespacio que generan
o determinan. Elegidos los vectores singulares v j , 1 j r, los uj , 1 j r, quedan
determinados de forma u
nica de acuerdo con la relaci
on
Av j = j uj ,

j = 1, . . . , r.

De forma an
aloga, dados los vectores singulares uj , 1 j r, los v j , 1 j r, quedan
determinados de forma u
nica de acuerdo con
AT uj = j v j ,

j = 1, . . . , r.

Del teorema anterior se tiene que


A=

i ui v Ti = Ur r VrT ,

(1.20)

i=1

{x}

{Ax}

Figura 1.9
Ilustraci
on en dos dimensiones de una transformaci
on lineal de la esfera unidad

1.7 Mnimos cuadrados lineales

77

donde
Ur = [u1 , . . . , ur ]

y Vr [v 1 , . . . , v r ] .

A esta descomposicion se la denomina habitualmente descomposici


on en valores singulares de
rango completo. La expresi
on (1.20) pone de maniesto una descomposici
on de la matriz A, de
rango r, en suma de r matrices de rango 1.


Teorema 1.13 El vector


x=V
es la soluci
on del problema

r1 0
UT b
0 0

minimizar
Ax b2 ,
xn

donde A mn y rango(A) = r min(m, n), que hace mnima x2 .


n. Sean
Demostracio

z1
z=V x=
z2
T

c
y c=U b= 1 ,
c2
T

con z 1 , c1 r . Entonces, teniendo en cuenta la ortogonalidad de U y V , y que U T AV = ,


b Ax2 = U T (b AV V T x)2
(
(
 

(
(
( c1
( c 1 r z 1 (
(
r 0
z1 (
(
(
( .
=(

=
(
0 0
c2
z 2 (2 (
c2
2
La norma eucldea del vector de residuos b Ax sera mnima cuando
z 1 = r1 c1 ,
para cualquier z 2 . Es evidente que haciendo z 2 = 0 se minimizara z2 y, por tanto, tambien
x2 = V z2 = z2 .
Denici
on 1.2 A la matriz
A = V

r1 0
U T nn
0 0

se la denomina matriz pseudoinversa o inversa generalizada Moore-Penrose de A.


La denici
on de A no depende de las U y V que se escogen en la descomposicion de valores
singulares de A. Observese que (AT ) = (A )T ; en general, (AB) = B A .
Se puede comprobar f
acilmente que la matriz pseudoinversa satisface las denominadas condiciones de Penrose:
AA A = A
A AA = A
(AA )T = AA
(A A)T = A A.

78

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

La soluci
on de minxn Ax b2 es, de acuerdo con esta u
ltima denici
on, x = A b.
Ademas, cumple que
x ker(A)
y que Ax = PIm(A) b,
donde PIm(A) es la matriz de proyeccion ortogonal sobre Im(A) paralelamente a ker(AT ). El
vector PIm(A) b es la proyecci
on ortogonal de b sobre Im(A).
Dos casos de matriz pseudoinversa son de particular interes:
a) Si A mn , m n y rango(A) = n,
A = (AT A)1 AT .
b) Si A mn , m n y rango(A) = m,
A = AT (AAT )1 .
El caso a) representa el problema de mnimos cuadrados resultante de un sistema de ecuaciones
incompatible con matriz de rango completo. El b) el de un sistema de ecuaciones compatible
indeterminado con, tambien, matriz de rango completo. Este caso b) resuelve
minimizar x2 ,
xS

donde S = {x : Ax = b}.

on ortogonal sobre S si
Si S n es un subespacio, PS nn es la matriz de proyecci
Im(PS ) = S,

PS2 = PS

y PST = PS .

Si x n , se puede descomponer en dos componentes ortogonales de la forma


x = x1 + x2 = PS x + (I PS )x,
donde x1 S y x2 x1 .
La matriz pseudoinversa proporciona unas f
ormulas para la obtenci
on de las matrices de
proyeccion ortogonal sobre los cuatro subespacios fundamentales de A:
PIm(A)
Pker(AT )
PIm(AT )
Pker(A)

=
=
=
=

AA
I AA
A A
I A A

Si un subespacio S esta generado por los vectores ortogonales u1 , . . . , uk , se deduce inmediatamente que
PS = U U T ,
donde U = [u1 , . . . , uk ].

1.7 Mnimos cuadrados lineales

1.7.1.2

79

Sistemas incompatibles. Ecuaciones normales

Si se tiene una ecuaci


on Ax = b, con A mn , y no existe soluci
on a la misma si b
/ Im(A)
o rango(A|b) = rango(A), el problema se resolvera, como adelant
abamos en la introducci
on de
este captulo, buscando una pseudosoluci
on, x, que acerque Ax lo mas posible a b en el sentido
de la  2 , es decir, minxn Ax b2 . El siguiente resultado garantiza que el problema de
encontrar ese mnimo es equivalente a resolver un sistema lineal de ecuaciones.
Teorema 1.14 Sean X e Y dos espacios vectoriales de dimensiones nitas n y m sobre el
cuerpo  y A una transformaci
on lineal representada en dos bases de X e Y por la matriz A.
Para un vector dado b Y , el vector x X minimiza Ax b2 si y s
olo si AT Ax = AT b.
n. Sean Im(A) = {Ax : x n } y ker(A) = {x : Ax = 0}. El complemento
Demostracio
ortogonal del conjunto Im(A) sera:
(Im(A)) = {r : r T z = 0, z Im(A)} = {r : rT A = 0T } = {r : AT r = 0} = ker(AT ).
2 , donde b
Im(A).
El problema planteado es obviamente equivalente a minimizar b b
es un vector que minimiza la norma
Por el teorema de la proyecci
on (ver apendice A), b

(Im(A)) ; es decir, si b b
ker(AT ), o de forma equivalente,
anterior si y s
olo si b b
= AT b AT Ax.
0 = AT (b b)
Al sistema de ecuaciones que dene la relacion AT Ax = AT b se le denomina ecuaciones
normales.
El vector soluci
on x es u
nico si AT A es invertible (si y s
olo si la transformaci
on lineal A es
inyectiva: rango(A) = n); en este caso
x = (AT A)1 AT b.
La representacion geometrica del problema en tres dimensiones es la de la gura 1.10. Como
el vector de residuos, r = b Ax, es ortogonal al subespacio (en este caso es un plano) Im(A),
lo es a los vectores que lo denen: a1 y a2 ; es decir, AT (Ax b) = 0. Si la matriz AT A es
invertible,
r = b Ax = (I PIm(A) )b,
donde PIm(A) = A(AT A)1 AT es la matriz de proyeccion ortogonal sobre Im(A) paralelamente
a ker(AT ).
Las ecuaciones normales y el vector de residuos del problema se pueden combinar y formar
un sistema de ecuaciones ampliado, (m + n) (m + n):


I A
AT 0



r
b
=
.
x
0

Este sistema posee una matriz simetrica e indenida (a menos que A = 0). Se suele utilizar
para mejorar iterativamente la soluci
on numerica del problema original y en metodos donde A
es dispersa.

80

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

b
r = b Ax (Im(A)) AT (b Ax) = 0

a2
a2 x2

Ax
a1 x1
a1

Im(A)

Figura 1.10
Descripcion geometrica del problema minx2 Ax b2 , A 32
Antes de proseguir con la profundizaci
on te
orica del problema, hagamos una breve incursi
on
en el terreno de la estadstica que es donde mas frecuentemente se presenta la resolucion de
problemas de mnimos cuadrados.
Si los componentes del vector de datos b que venimos manejando, bi , i = 1, . . . , m, son
variables aleatorias independientes, normalmente distribuidas, de media i e igual varianza 2 ,
se tendr
a que
E[bi ] = i


E[(bi i )(bk k )] =

2 para i = k
0 para los dem
as

Haciendo = [1 , . . . , m ]T , las expresiones anteriores resultan:


E (b )(b )T = 2 I.

E[b] = ;

La matriz de covarianzas del vector aleatorio b es pues 2 I. El valor optimo antes obtenido,
x = (AT A)1 AT b, es tambien un vector aleatorio de media

E[x] = E (AT A)1 AT b


= (AT A)1 AT E[b]
= (AT A)1 AT
y de matriz de covarianzas

E (x E(x))(x E(x))T = E (AT A)1 AT (b )(b )T A(AT A)1

1.7 Mnimos cuadrados lineales


81

= (AT A)1 AT E (b )(b )T A(AT A)1


= 2 (AT A)1 .
1.7.1.3

Sistemas indeterminados

Si la ecuaci
on sistema de ecuaciones tiene mas de una soluci
on, como ocurre cuando se
pretende ajustar una funci
on a un conjunto de puntos y el n
umero de estos es menor que el
de par
ametros de la funci
on, o en problemas de optimizaci
on con condiciones lineales donde
el n
umero de condiciones es menor que el de variables del problema y se pretende encontrar
una buena soluci
on inicial factible, siempre se puede calcular aquella soluci
on que tiene menor
norma eucldea.
Teorema 1.15 Sean X e Y dos espacios vectoriales de dimensiones nitas n y m sobre el
cuerpo  y A una transformaci
on lineal representada en dos bases de X e Y por la matriz
A. El vector x de norma eucldea mnima que satisface la ecuaci
on Ax = b es el dado por
x = AT z, donde z es una soluci
on de la ecuaci
on AAT z = b.
n. Si x1 es una soluci
on de la ecuaci
on Ax = b, cualquier soluci
on de la misma
Demostracio
se puede expresar como x = x1 + u, donde u ker(A); es decir, estara en la variedad lineal
x1 + ker(A). El teorema de la proyecci
on garantiza la existencia en esta variedad lineal de un
as pertenece a (ker(A)) .
u
nico x tal que su norma x2 es mnima y adem
Como x (ker(A)) , pertenecera a Im(AT ), es decir, se podr
a expresar como x = AT z
para alg
un z Y . Como Ax = b, entonces
AAT z = b.

Cuando la matriz AAT es invertible, la soluci


on optima es
x = AT (AAT )1 b.
La interpretaci
on geometrica de este resultado en 3 se esquematiza en la gura 1.11.

1.7.2

Resoluci
on num
erica del problema

Como hemos visto en estos dos u


ltimos apartados, para resolver el problema de mnimos
cuadrados lineales podra utilizarse cualquiera de los metodos que se estudian para resolver
sistemas en los que la matriz es cuadrada y simetrica tanto las matrices AAT como AT A lo
son y aplicarlos a las ecuaciones normales AT Ax = AT b, en el caso de que el sistema fuese
incompatible, o al sistema AAT z = b, cuando se estuviese frente a un sistema indeterminado.
Como el n
umero de condici
on 2 de AAT y AT A es el cuadrado del de la matriz A (ver el
teorema 1.11 de la p
agina 70), puede ocurrir que si el problema originalmente no est
a bien condicionado, las dicultades numericas resulten insalvables al resolver el sistema correspondiente,

82

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

u
x1

x
x1+ker(A)

ker(A)

Interpretaci
on geometrica en

Figura 1.11
del problema x = minx3 {x2 : Ax = b}

3

por el metodo de Cholesky, por ejemplo, en una m


aquina donde la precisi
on de los calculos no
sea la adecuada. Como ejemplo de esta desfavorable circunstancia, consideremos la matriz

1 1 1 1 1

A=

El rango de esta matriz es 5, para = 0. La matriz

1 + 2
1
1
1
1
2
1

1
1
1
1
+

T
2

A A= 1
1
1+
1
1
1
1
1
1 + 2
1
1
1
1
1
1 + 2

tambien es de rango 5, para = 0. El n


umero de condici
on 2 (A)2 = 2 (AT A) = (5 + 2 )/2 .
2
Si es superior a la precisi
on de la m
aquina pero no (por ejemplo, si = 0,5 105 ,
on de la m
aquina = 1,0 1010 ), la representaci
on interna de
2 = 0,25 1010 y la precisi
T
la matriz A A sera

1 1 1 1 1
1 1 1 1 1

1 1 1 1 1

1 1 1 1 1
1 1 1 1 1
por lo que, a efectos numericos en esa maquina, esta matriz ser
a singular de rango 1: las
ecuaciones normales no podran ser resueltas.

1.7 Mnimos cuadrados lineales

83

Otro aspecto importante que hace poco aconsejable en general la utilizaci


on de las ecuaciones basadas en el calculo de AT A o AAT , nace del hecho de que aun cuando la matriz
original A sea muy dispersa, puede que aquellos productos no lo sean tanto e incluso pueden
ser totalmente densas. Un ejemplo sera

1 1 1 1
0

,
A= 0

0
0

1
AT A =
1
1

1
1
1
1

1
1
1
1

1
.

1
1

Veremos a continuacion como para resolver problemas de mnimos cuadrados se pueden


utilizar unas tecnicas que evitan estos problemas transformando directamente la matriz A y
reduciendola a otra m
as facil de manipular.
1.7.2.1

M
etodo de Gram-Schmidt

El procedimiento cl
asico de Gram-Schmidt obtiene una base ortonormalizada del subespacio
Im(A). Comienza normalizando el primer vector columna de A: e1 = a1 /a1 2 . A continuaci
on
se sustrae del vector a2 su componente en la direcci
on de e1 , a2 |e1 e1 , resultando un vector
ortogonal a e1 , el cual a su vez se normaliza. . . El proceso contin
ua con los dem
as vectores
columna de A. Los diversos vectores ortonormales que forman la base se van obteniendo de la
siguiente forma:
a1
;
e1 =
a1 2
e2 =

a2 a2 |e1 e1


;
a2 a2 |e1 e1 2

e3 =

a3 a3 |e1 e1 a3 |e2 e2


;
a3 a3 |e1 e1 a3 |e2 e2 2

.
..
En la gura 1.12 se describe esquem
aticamente el procedimiento de Gram-Schmidt en la fase
de obtenci
on de e3 .
El algoritmo de la tabla 1.15 describe, para una matriz general Amn , los pasos del procedimiento descrito.
Para la resoluci
on del problema de mnimos cuadrados que nos hemos propuesto, sin usar
las ecuaciones normales, el metodo de Gram-Schmidt, en principio, podra ser u
til. En efecto,
en el procedimiento podemos ver que si se hace
pj = aj

j1

ei |aj ei ,

i=1

cualquier vector ej = pj /pj 2 = pj /ujj . Deniendo uij = ei |aj ,


pj = ujj ej = aj

j1

i=1

uij ei .

84

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

a3

e3

a3

a

e 1
e1
|
3
a3 a3 |e1 e1 a3 |e2 e2
a3 |e2 e2

e2
e1

a3 |e1 e1

Figura 1.12
Descripcion geometrica del proceso de ortonormalizaci
on de Gram-Schmidt

Tabla 1.15
Algoritmo cl
asico de Gram-Schmidt para la ortonormalizaci
on de los vectores columna de
una matriz Amn
for j = 1 to n
for i = 1 to j 1
u(i, j) e(1 : m, i)T a(1 : m, j)
e(1 : m, j) a(1 : m, j) u(i, j) e(1 : m, i)
end

m

!
e(k, j)2
u(j, j)
k=1

e(1 : m, j) e(1 : m, j)/u(j, j)


end

1.7 Mnimos cuadrados lineales

85

Si se despeja aj ,
aj =

ei uij .

i=1

En notaci
on matricial esta expresi
on es A = EU ,4 donde E mn es la matriz de columnas ei y
nn
U
la matriz triangular superior formada por los uij . Las ecuaciones normales AT Ax = AT b,
sustituyendo A por EU , se transforman en
U T E T EU x = U T E T b
y, en denitiva, en
U x = E T b.

(1.21)

Resolver pues minxn Ax b2 es equivalente, despues de ortonormalizar los vectores columna de A, a resolver (1.21) por sustituci
on inversa.
En cada etapa j del algoritmo cl
asico de Gram-Schmidt se calculan la columnas j de E
y U . La explicaci
on geometrica de este proceso es la siguiente: primero se calcula una base
ortonormal del subespacio Im(A); luego se proyecta en esta base el vector b y, por u
ltimo, se
reere a la base que denen los vectores columna de A la proyecci
on resultante.
El metodo clasico de Gram-Schmidt puede resultar numericamente inestable pudiendo incurrirse en errores de cancelacion importantes si alguno de los vectores columna aj esta pr
oximo
al subespacio generado por los vectores e1 , . . . , ej1 . En este caso los componentes del vec)j1
tor aj i=1
aj |ei ei pueden llegar a ser muy peque
nos y su error relativo grande por lo
que, al dividirlo por su norma, se amplicar
an errores, propag
andose al resto de los calculos
desfavorablemente.
M
etodo de Gram-Schmidt modicado
Para solventar estos problemas se ha desarrollado, Rice [1966], el denominado metodo de GramSchmidt modicado. Resulta del cl
asico al reordenar determinados c
alculos. La diferencia estriba en que en vez de sustraer del vector ak sus componentes sobre los k 1 vectores ei
calculados en las etapas anteriores, el vector ek , que al principio de la etapa k se hace igual
a ak , se descompone paso a paso en cada uno de los vectores ei , i = 1, . . . , k 1, reactualizandose pues su valor k 1 veces una vez sustrado su componente en cada uno de esos ei . El
algoritmo que resulta es el que describe la tabla 1.16. Observese que para n = 2 los algoritmos
de Gram-Schmidt cl
asico y modicado coinciden.
Para tratar problemas de rango incompleto se introduce la pivotaci
on de columnas. Con este
n es conveniente intercambiar el orden de las operaciones del algoritmo al objeto de calcular
U la a la. El resultado, seg
un se describe en la tabla 1.17, es que en vez de calcular en cada
etapa j la columnas j de E y U , se calculan la columna j de E y la la j de U .
La codicaci
on en Fortran 77 del algoritmo de Gram-Schmidt modicado de la tabla 1.16
4

Como E es ortogonal y U triangular superior, el metodo de Gram-Schmidt dene una forma de conseguir
una factorizaci
on A = QR, que deniremos inmediatamente.

86

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Tabla 1.16
Algoritmo modicado de Gram-Schmidt para la ortonormalizaci
on de los vectores columna
mn
de una matriz A
for j = 1 to n
e(1 : m, j) a(1 : m, j)
for i = 1 to j 1
u(i, j) e(1 : m, i)T e(1 : m, j)
e(1 : m, j) e(1 : m, j) u(i, j) e(1 : m, i)
end

m

!
e(k, j)2
u(j, j)
k=1

e(1 : m, j) e(1 : m, j)/u(j, j)


end

Tabla 1.17
Algoritmo modicado de Gram-Schmidt para la ortonormalizaci
on de los vectores columna
mn
de una matriz A
. Version por las
for i = 1 to n
e(1 : m, i)
a(1 : m, i)
m

e(k, i)2
u(i, i) !
k=1

e(1 : m, i) e(1 : m, i)/u(i, i)


for j = i + 1 to n
u(i, j) e(1 : m, i)T e(1 : m, j)
e(1 : m, j) e(1 : m, j) u(i, j) e(1 : m, i)
end
end

1.7 Mnimos cuadrados lineales

para resolver el problema

87

1
1
x0
0
0
x1 = ,
0
0
x2
  
0
   x
  
A
b
es la que sigue a continuaci
on. Su soluci
on es
1

0
0

1
0

0,3333
x = 0,3333 .
0,3333
La suma de residuos al cuadrado es 0. Los componentes del vector de residuos son todos cero.
PROGRAM Grmsch
C
implicit double precision (a-h,o-z)
C
parameter (m=4,n=3)
dimension a(m,n),u(n,n),x(n),b(m),res(m)
C
data a/1.d0,0.,0.,0.,1.d0,0.,0.,0.,1.d0,0.,0.,0./
data b/1.d0,0.,0.,0./
C
C
C

*** Ortonormalizar columnas de A ***


epsi
= dsqrt(epsilon(1.d0))*10
a(2,1) = epsi
a(3,2) = epsi
a(4,3) = epsi
dmax
= 0.d0
do j = 1,n
do i = 1,j-1
u(i,j) = prod(m,a(1,i),a(1,j))
do k = 1,m
a(k,j) = a(k,j)-u(i,j)*a(k,i)
end do
end do
temp
= dsqrt(prod(m,a(1,j),a(1,j)))
u(j,j) = temp
do k = 1,m
a(k,j) = a(k,j)/temp
end do

C
C
C

C
C
C

* Comprobar dependencia lineal de los vectores columna *


dmax = dmax1(temp,dmax)
if (dmax+temp.eq.dmax) then
print *,Stop: dependencia lineal de columna ,k
stop
endif
end do
T
*** Resolver Ux=E b ***
x(n) = prod(m,a(1,n),b)/u(n,n)

88

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

do i = n-1,1,-1
temp = prod(m,a(1,i),b)
do j = i+1,n
temp = temp-u(i,j)*x(j)
end do
x(i) = temp/u(i,i)
end do
C
C
C
C

*** Residuos: sustraer del vector b sus componentes en la base


ortonormal que define E ***
res = b
do j = 1,n
temp = prod(m,a(1,j),res)
do i = 1,m
res(i) = res(i)-temp*a(i,j)
end do
end do

C
print *,x,res
C
end
double precision function prod (n,x,y)
double precision x(1),y(1),suma
C
suma = 0.d0
if (n.eq.0) then
prod = 0.d0
else
do i = 1,n
suma = suma+x(i)*y(i)
end do
prod = suma
endif
C
return
end

El n
umero de operaciones que realizan tanto el metodo clasico como el modicado es
2
O(mn ) sumas/restas y multiplicaciones/divisiones y O(n) races cuadradas.
1.7.2.2

Factorizaci
on QR o triangularizaci
on ortogonal. Transformaciones ortogonales

Recordemos que una propiedad importante de las transformaciones lineales ortogonales es


que conservan la norma eucldea; esto es, si Qnn es una matriz ortogonal y x un vector
n-dimensional, se cumple que
Qx2 = x2 .
En efecto:
Qx2 =

"

Qx|Qx =

"

xT QT Qx =

xT x = x2 .

Seg
un esto, si Q es una tal matriz ortogonal, al aplicar su transformaci
on correspondiente

1.7 Mnimos cuadrados lineales

89

a la norma Ax b2 , resulta que


Q(Ax b)2 = QAx Qb2 = Ax b2 .
Es decir, el resultado del problema que se quiere resolver, minxn Ax b2 , no se vera
afectado si se realizan una serie de transformaciones ortogonales a la ecuacion Ax = b.
Lo que pretendemos en este apartado es, deniendo convenientemente unas transformaciones ortogonales, reducir el problema de mnimos cuadrados a otro m
as sencillo de resolver
desde el punto de vista numerico. En concreto, en el caso que nos ocupa, si A mn , m > n,
b m , rango(A) = n y suponemos que se ha calculado una matriz ortogonal Q mm de
tal manera que la matriz


R1
n
QA = R =
0 mn
es triangular superior, si hacemos


c
Qb =
d

n
,
mn

entonces
(
(
"
( R1 x c (
( = R1 x c2 + d2 ,
Ax b2 = QAx Qb2 = (
2
2
(
(
d
2

para cualquier x n . La soluci


on de minxn Ax b2 sera aquella que haga mnimo
2
2
2
R1 x c2 + d2 . Como d2 es constante, la solucion resultar
a de resolver el sistema R1 x =
c por sustituci
on inversa. La suma de residuos al cuadrado vendr
a dada por el valor de la
expresion d22 y el vector de residuos, r = Ax b, por

T

r=Q

0
.
d

El proceso de reducci
on de A a R descrito se denomina factorizaci
on QR o triangularizaci
on ortogonal. Como hemos indicado anteriormente, el metodo de Gram-Schmidt obtiene una
factorizaci
on de este tipo.
Teorema 1.16 Sea la matriz A mn de rango n. El factor R1 de A tiene todos los
elementos de su diagonal principal positivos y es igual al que resulta de la factorizaci
on de
Cholesky, GT G, de AT A.
n. Si rango(A) = n, de acuerdo con el teorema 1.9 de la p
Demostracio
agina 42, la factoriT
nica. Por otro lado,
zacion de Cholesky de A A es u
T

A A=

R1T ,

Con esto se concluye la demostracion.


T

0 QQ

R1
0

= R1T R1 .

90

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

1.7.2.2.1

Transformaciones de Householder

Las transformaciones de Householder son las primeras que introducimos para reducir la matriz
A a una triangular superior R.
Denici
on 1.3 Se denomina transformaci
on de Householder a una transformaci
on lineal
n
n
nn
de  en  caracterizada por una matriz H
matriz de Householder de la forma
H = I 2wwT ,
donde w es un vector de n de norma eucldea 1 denominado vector de Householder.
Las transformaciones de Householder tambien se suelen denominar reexiones de Householder.
Teorema 1.17 Toda transformaci
on de Householder es simetrica y ortogonal.
n. Por denici
Demostracio
on
H T = I 2(ww T )T = I 2(w T )T w T = I 2wwT = H.
Como ademas wT w = w22 = 1,
H T H = H 2 = (I 2ww T )(I 2wwT ) = I 4wwT + 4w(wT w)w T = I.
Aplicar una transformaci
on de Householder a un vector cualquiera equivale a reejarlo en
el subespacio (Im(w)) , seg
un representa la gura 1.13. En efecto
Ha = (I 2wwT )a = a 2ww T a = a 2(w T a)w.
El vector (w T a)w es la proyeccion de a sobre w; es decir, Ha es igual al vector a menos dos
veces su proyeccion sobre w.
La importancia fundamental de estas transformaciones radica en su capacidad para modicar ortogonalmente eventualmente hacer cero determinados componentes de un vector
dado. En efecto, si x e y son dos vectores no nulos de igual norma eucldea y w se dene como
w=
entonces

1
(x y),
x y2

(I 2wwT )x = y.

En efecto:

(x

xy

xT x y T x
"
=x2
(x y)
x 2 "
(x y)T (x y)
(x y)T (x y)
(x y)T (x y)
y)T x

xT x y T x
=x2
2(xT x y T x)

(x y) = y.

1.7 Mnimos cuadrados lineales

91

+
*
wT a w
w

(Im(A))
Ha

*
+
wT a w

Figura 1.13
Representacion de la aplicaci
on a a de la transformaci
on de Householder denida por w

Esto es as pues, al tener x e y la misma norma eucldea,


(x y)T (x y) = xT x y T x xT y + y T y
= 2(xT x y T x),
pues xT x = y T y y y T x = xT y. Este resultado, geometricamente, se deduce inmediatamente
de la reexi
on antes mencionada. El vector w es colineal con el vector x y. Como x e y
tienen la misma longitud, la reexi
on de x respecto a (Im(w)) es y. Ver gura 1.14.
De acuerdo con estas consideraciones, eligiendo el vector w adecuadamente, se puede construir una transformaci
on de Householder que anule los componentes que se deseen de un vector
x cualquiera dejando los dem
as como estaban. Por ejemplo, la gura 1.15 representa los cuatro
pasos del proceso que se llevara a cabo para reducir una matriz A64 a una triangular superior
R64 . La matriz A1 resultara de la transformaci
on H1 A0 ; la A2 sera H2 A1 = H2 H1 A0 ; y as
sucesivamente hasta completar los cuatro pasos.
En un problema general, de cara a transformar la matriz original Amn de un problema
de mnimos cuadrados que se quiere resolver en una triangular superior, interesa aplicarle una
sucesion de n transformaciones de Householder que hagan cero los componentes k + 1, . . . , m,
para k = 1, . . . , n. Se pretende que la transformaci
on k-esima haga:


Hk ak =

aik para i = 1, 2, . . . , k 1
0 para i = k + 1, . . . , m.

Con este n, reriendonos a la construcci


on geometrica anterior, los componentes del vector y

92

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

xy
w

(Im(A))
y

Figura 1.14
Resultado de aplicar a x la transformaci
on de Householder que dene el vector
(x y)/x y2
correspondiente a la transformaci
on k seran:
y1
y2

= a1k
= a2k
..
.

yk

2
2
+ + amk
= a2kk + ak+1k
= 0
..
.
= 0.

"

yk+1
ym

2 = a2 + a2 + + a2 , los vectores y y a tienen la misma


Como y12 + y22 + + ym
k
1k
2k
mk
longitud, por lo que si se construye una transformaci
on de Householder basada en el vector
w = (ak y)/ak y2 se tendr
a que Hk ak = (I 2wwT )ak = y: los primeros k 1
componentes del vector y seran los mismos de ak y los k + 1 a m todos cero.

A0

2222
0 222
0 222
0 222
0 222
0 222
A1

2222
0
0 0
0 0
0 0
0 0
A2

2222
0
0 0 
0 0 0
0 0 0
0 0 0
A3

2222
0
0 0 
0 0 03
0 0 0 0
0 0 0 0
A4

Figura 1.15
Factorizacion de una matriz 6 4 por transformaciones de Householder

1.7 Mnimos cuadrados lineales

93

Observese que el componente k-esimo del vector y puede adoptar dos signos. Como el
calculo de w conlleva restar y de ak , el error relativo que se puede cometer en esa operacion
sera menor si los componentes k-esimos de ak e y tienen signo opuesto (recordemos que restar
dos n
umeros casi iguales en una maquina que trabaja con precisi
on limitada es peligroso pues
pueden presentarse errores de cancelacion), lo que dar
a como resultado un n
umero de valor
absoluto mayor que si tienen el mismo signo.
En la gura 1.16 se representa un caso en dos dimensiones. Se pretende transformar el
vector a en otro en el eje x1 : con coordenada por tanto nula en x2 . Como el vector a tiene
coordenada positiva en el eje x1 , siguiendo lo apuntado anteriormente, se deber
a coger aquel
y cuyo componente y1 (en este caso un vector en el eje x1 de igual norma que a) sea positivo.
El primer componente del vector w sera a1 (y1 ) = a1 + y1 ; el segundo, el de a en x2 .
La transformaci
on de Householder que dene este w transforma el vector x = a en y  ; la
alternativa, que dene w alt , en y.
En denitiva, en la transformaci
on de Householder k-esima que se aplica a la matriz A,
como se puede deducir f
acilmente, el vector w es:

..

akk + s signo(akk )
1


w=
,
ak+1k
2s(s + |akk |)

..

.
amk
"

donde s =

2 + a2
2
akk
k+1k + + amk .

Si la matriz a transformar, A, es de rango completo y el procedimiento esta en su etapa j,


x2

w
w alt

y

a1 y

a1

a1 + y

x1

Figura 1.16
Representacion de como obtener las dos transformaciones de Householder posibles de un
vector a

94

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

la matriz de Householder que hay que utilizar se puede expresar como




0 T
T =
Hj = I 0 , w
w


I 0
j
0 H

es un vector de orden m j + 1, = 2/w22 , I es la matriz identidad de orden j 1


donde w
j es una matriz simetrica de orden m j + 1 dada por
yH
j = I w
w
T.
H
Una vez evaluada Hj , supongamos que se aplica a un vector q (puede representar cualquiera
, de orden j 1
de las columnas j + 1, . . . , n de la matriz Aj1 ). Dividamos el vector q en dos: q
, de orden m j + 1. Transformemos q con Hj ; entonces
yq
,


q = Hj q =

I 0
j
0 H

-

q
=
.

Hj q

Es decir, como sabamos, los primeros j 1 componentes permanecen inalterados. El vector


j q
es
H
j q
= (I w
w
T )
H
q = z,
donde las componentes del vector z son
k
zk = qk w

w
i qi ,

i=j

para k = 1, . . . , m j + 1.
1.7.2.2.1.1

Resoluci
on num
erica de Ax = b, Amn , m > n y rango completo

Como mencionabamos en el apartado 1.7.2.2, mediante


transformaciones de
se


 Householder

c
R1
reduce la matriz A a una triangular superior
y el vector b a otro
. La soluci
on
0
d
de minxn Ax b2 se obtendr
a del sistema R1 x = c por sustituci
on inversa. La suma de
residuos al cuadrado ser
a d22 .
El algoritmo completo para resolver el problema es el que describe la tabla 1.18. La versi
on
Fortran 77 de este algoritmo para resolver el problema del apartado 1.7 es la que sigue a
este parrafo. Su soluci
on es

0,5
x = 1,4 .
0,0
La suma de residuos al cuadrado es 0,2. El vector de residuos,

0,1
0,3

.
r=
0,3
0,1

1.7 Mnimos cuadrados lineales

95

Tabla 1.18
Algoritmo para la resoluci
on de minxn Ax b2 por transformaciones de Householder

n de la Matriz Amn , columnas 1 a n


Transformacio

for j = 1 to n
if max
{|a(j, j)|, . . . ,
|a(m, j)|} = 0 then stop

m

a(k, j)2 signo(a(j, j))
= !
k=j

w(j : m) a(j : m, j)
w(j) w(j) +

m
w2 (k)
=2
k=j

a(j, j)
for l = j + 1 to n
s = wT (j : m) a(j : m, l)
a(j : m, l) a(j : m, l) w(j : m) s
end
n del vector b.
Transformacio
T
s = w (j : m) b(j : m)
b(j : m) b(j : m) w(j : m) s
end

n del sistema Rx = b.
Resolucio

for j = n to1
.
n

a(j, k) x(k) a(j, j)
x(j) b(j)
k=j+1

end

Residuos al cuadrado.

m

b2 (k)
rescua
k=n+1

96

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Observese que, a efectos practicos, en la etapa j, el vector w() se almacena en las posiciones
de memoria j a m del vector columna a(,j). Los valores de a(1,1), a(2,2),. . . , a(N,N) se
almacenan en el vector d(). La idea de estas manipulaciones es ahorrar el m
aximo n
umero
posible de posiciones de memoria.
PROGRAM Qrdes
C
parameter (m=4,n=3)
dimension a(m,n),b(m),d(n),x(n),betas(n)
C
data a/1.,1.,1.,1.,1.,2.,3.,4.,1.,4.,9.,16./
data b/2.,3.,5.,6./
C
C
C

*** Reducci
on QA=R ***
do j = 1,n
rmm = 0.0
do i = j,m
rmm = amax1(rmm,abs(a(i,j)))
end do
if (rmm.eq.0.0) stop Matriz A de rango incompleto
beta = 0.0
do i = j+1,m
beta = beta+a(i,j)**2
end do
wj
= a(j,j)
sigma
= sign(sqrt(beta+wj*wj),wj)
wj
= wj+sigma
beta
= 2.0/(beta+wj*wj)
a(j,j)
= wj
d(j)
= -sigma
betas(j) = beta
do l = j+1,n
s = 0.0
do k = j,m
s = s+a(k,j)*a(k,l)
end do
s = beta*s
do k = j,m
a(k,l) = a(k,l)-a(k,j)*s
end do
end do
s = 0.0
do k = j,m
s = s+a(k,j)*b(k)
end do
s = beta*s
do k = j,m
b(k) = b(k)-a(k,j)*s
end do
end do

C
C
C

*** Resoluci
on

Rx = b

x(n) = b(n)/d(n)
do i = n-1,1,-1
suma = 0.0
do k = i+1,n
suma = suma+a(i,k)*x(k)

1.7 Mnimos cuadrados lineales

97

end do
x(i) = (b(i)-suma)/d(i)
end do
C
C
C

*** Suma de residuos al cuadrado


s1 = 0.0
do i = n+1,m
s1 = s1+b(i)**2
end do

C
C
C

*** Vector de residuos


do i = n,1,-1
s = 0.0
do k = i+1,m
s = s+a(k,i)*b(k)
end do
s
= s*betas(i)
b(i) = -a(i,i)*s
do k = i+1,m
b(k) = b(k)-a(k,i)*s
end do
end do

C
print 50,x
print 60,s1
print 70,b
C
50 format(x=(,f6.4,,,f6.4,,,f6.4,))
60 format(Suma de residuos al cuadrado=,f9.6)
70 format(Vector de residuos,4f8.4)
C
end

El vector de residuos se obtiene, si el algoritmo ha transformado b en


hacer las siguientes operaciones.

c
, sin m
as que
d

0
r
d
for k = n to 1
r Hk r
end
El n
umero de operaciones que este algoritmo requiere para transformar la matriz A en
R es O(mn2 n3 /3) sumas/restas y multiplicaciones/divisiones y n races cuadradas, mas
O(n2 /2) multiplicaciones/divisiones y sumas/restas para efectuar la sustituci
on inversa.
Del proceso de obtencion Hn H1 A = R se puede llegar tambien f
acilmente a una factorizaci
on A = QR, caso de requerirse por cualquier circunstancia, sin m
as que hacer lo que
sigue.
QI
for k = n to 1
Q Hk Q

98

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

end
1.7.2.2.1.2

Resoluci
on num
erica de Ax = b, Amn , n > m y rango completo

Si el problema tiene soluci


on, es indeterminado; es decir, tiene muchas soluciones. La de menor
norma eucldea se puede calcular procediendo de acuerdo con los pasos siguientes:
Paso 1. Se aplica el algoritmo descrito hasta ahora a la matriz AT en vez de a A. Resultar
a


QT AT =


o, lo que es lo mismo,

AT

triangular superior m m.

R
,
0

R
, donde Q es una matriz ortogonal n n y R una
=Q
0

Paso 2. La matriz original A sera

A = RT , 0T QT .
Si se sustituye en la ecuacion Ax = b, se tendr
a que
/

RT , 0T QT x = b.

ltima ecuaci
on queda
Si se hace el cambio de variable z = QT x, la u
/

RT , 0T z = b.

an
Como z T z = (QT x)T (QT x) = xT QT Qx = xT x, las normas

 eucldeas de x y z ser
zR
iguales. Por consiguiente, estructurando el vector z en
y b de igual manera, la
z0
/ T
0
soluci
on de R , 0T z = b saldr
a de resolver
RT z R = bR ,
siendo los demas componentes del vector z, z 0 , nulos.
Paso 3. El vector soluci
on x que se busca resultar
a de deshacer el cambio de variable introducido:


zR
x=Q
.
0
1.7.2.2.1.3

Resoluci
on num
erica de Ax = b, Amn , m > n
o m < n y rango incompleto

Los procedimientos presentados en los dos apartados anteriores dan soluci


on al problema cuando la matriz A es de rango completo. Es conveniente disponer de un procedimiento robusto que
resuelva los casos anteriores y que contemple la posibilidad de que la matriz no sea de rango
completo e incluso que determine o informe sobre lo cerca que la matriz esta de ser de rango
incompleto.

1.7 Mnimos cuadrados lineales

99

Teorema 1.18 Dada una matriz A mn de rango r, r min(m, n), existen una permutaci
on, representada por la matriz P , y una matriz ortogonal Q mm , tales que


R11 R12
QAP =
0
0

r
,
mr

(1.22)

donde R11 rr es una matriz triangular superior en la que todos sus elementos de la
diagonal principal son positivos (observese que no se requiere que m n).
n. Como el rango de A es r, siempre sera posible elegir unas permutaciones,
Demostracio
que se representaran por una matriz P , tales que
AP = [A1 , A2 ],
donde los vectores columna de la matriz A1 mr son linealmente independientes. Sea


R11
QA1 =
0

la descomposicion QR de la matriz A1 , donde Q = [Q1 , Q2 ]. De acuerdo con el teorema 1.16


de la p
agina 89, las matrices Q y R11 estan denidas de forma u
nica y R11 tiene todos sus
elementos en la diagonal principal positivos. Ahora bien,


R11 R12
.
QAP = [QA1 , QA2 ] =
0 R22
Como rango(QAP ) = rango(A) = r, la matriz R22 = 0 pues, de lo contrario, QAP tendra
mas de r las linealmente independientes, lo cual es imposible. La estructura de QAP tendr
a
pues la forma de (1.22).
Para llevar a cabo las operaciones numericas necesarias para resolver el problema planteado
en este apartado, se procedera siguiendo los tres pasos siguientes.
Paso 1. Transformar la matriz A mediante transformaciones de Householder efectuando ademas permutaciones de columnas. El procedimiento para llevar esto adelante consiste en
evaluar en la etapa k del proceso la norma eucldea de los vectores columna k, . . . , n de la
matriz A, limit
andose a sus componentes activos: k, . . . , m. La columna que de un mayor
valor de esa norma se intercambiar
a con la que se iba a procesar, k, y se contin
ua el
procedimiento en esa columna k. Si, eventualmente, la matriz es de rango r, el resultado
de aplicar el proceso de factorizaci
on descrito sera el esquematizado en la gura 1.17.
La justicaci
on de esta forma de actuar radica en el proceso de ortonormalizaci
on
inherente a la factorizaci
on A = QR que se realiza. En efecto, en una etapa k, al elegir
aquella columna ai , i = k + 1, . . . , n, que tiene una mayor norma eucldea en sus componentes k a m, se esta eligiendo aquel vector m
as distante del subespacio Im(a1 , . . . , ak1 )
y, por ende, de Im(q 1 , . . . , q k1 ), donde q i son los k 1 primeros vectores columna de Q
(A = QR). Esta forma de actuar nos garantiza que cuando un a este en Im(a1 , . . . , a1 ),
los demas a+1 , . . . , an tambien estaran en ese subespacio.
Desde el punto de vista pr
actico, el procedimiento de triangularizaci
on con pivotaci
on
se detendr
a no cuando un akk sea cero sino cuando sea menor que una tolerancia 1 que
se elija al efecto (funci
on de la precisi
on de la m
aquina, , donde se trabaje).

100

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

mr

Figura 1.17
Resultado de la factorizaci
on de una matriz m n de rango r por transformaciones de
Householder
Paso 2. Del paso anterior se llegar
aa


r
R R
QAP = R = 11 12
0 R22 m r
r nr
en la que R22 2 1 A2 . Debido a los errores de redondeo asociados a los c
alculos de
matrices ortogonales, R sera ortogonalmente equivalente a una matriz A + Ek , donde
Ek 2 2 A2 ,
on de la m
aquina, , en donde se
siendo 2 del mismo orden de magnitud que la precisi
trabaje. En funci
on de esta precision tambien se elige, como se apuntaba antes, 1 .
Aplicando las mismas transformaciones al vector b quedar
a como sigue:


c
Qb =
d

r
.
mr

A partir de aqu se pueden presentar dos casos:


Que r = n. La soluci
on del problema saldr
a entonces de resolver el sistema triangular
superior R11 x = c.
Que r < n. Se deber
an construir unas transformaciones ortogonales tales que
[ R11 , R12 ] Q1 = [ W, 0 ] ,
donde Q1nn es una matriz ortogonal y W rr una triangular superior.
La aplicaci
on de estas u
ltimas transformaciones requiere alguna aclaraci
on. Si la matriz
[R11 , R12 ] se denomina W1 , el proceso a llevar a cabo busca convertir esta matriz, cuya
forma traspuesta es la de la gura 1.18-a), en otra de la forma de la gura 1.18-b).
Para ello, la idea es proceder en r etapas en cada una de las cuales, k, se construye una
transformaci
on de Householder que haga cero los elementos r + 1 a n de la columna
k y que deje inalterados, de esa columna k, los elementos 1 a k 1 y k + 1 a r. En

1.7 Mnimos cuadrados lineales

a)

101

b)

nr

r
Figura 1.18
Segundo proceso de transformaciones ortogonales para resolver un problema general de
mnimos cuadrados
la gura 1.19 se esquematiza como se procedera en cuatro etapas para transformar una
on de Householder
matriz W164 . El elemento que se utiliza para denir cada transformaci
y los elementos a hacer cero se indican, respectivamente, con una elipse y el signo .
Paso 3. De los pasos anteriores se tendra que
Ax b2 = (QAP )(P T x) Qb2 .
Ahora bien, (QAP )P T x se puede escribir (QAP )Q1 Q1T P T x y tambien,


W 0
c
QT1 P T x =
.
0 0
d

Si se hace QT1 P T x = y y se resuelve W y 1 = c, el vector solucion que se busca, x,


0
0


0 0
0 0

0
0


0 0
0 0

0
0

0
0


0 0
0 0

Figura 1.19
Segundo proceso de transformaciones ortogonales para resolver un problema general de
mnimos cuadrados (continuaci
on)

102

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales




resultar
a de
x = P Q1

y1
.
0

La codicaci
on en Fortran 77 de las ideas expuestas las recoge el programa que se lista a
continuaci
on. Este c
odigo resuelve el problema del ejemplo del apartado 1.7 de la p
agina 73; se
ha a
nadido una cuarta columna, identicamente igual a la tercera, a n de hacer la matriz A de
rango incompleto y poder comprobar el buen funcionamiento y las prestaciones del algoritmo.
PROGRAM Mincuad
C
implicit double precision (a-h,o-z)
C

C
C
C

parameter (m=4,n=4)
dimension a(m,n),a1(n,m),b(m),w(m),w1(n,m),x(n),beta1(m),
+
ipiv(n)
data a/1.,1.,1.,1.,1.,2.,3.,4.,1.,4.,9.,16.,1.,4.,9.,16./
data b/2.,3.,5.,6./
data tau/0.000001/
|R
R |
*** Reducci
on QAP=| 11 12| ***
|0
0 |
ira = min0(m,n)
do i = 1,ira
imax = i
rmax = 0.0
do j = i,n
! B
usqueda de columna con
h = 0.0
! mayor norma eucl
dea
do k = i,m
! en componentes I a N.
h = h+a(k,j)**2
end do
if (h.gt.rmax) then
rmax = h
imax = j
endif
end do
ipiv(i) = imax
if (imax.ne.i) then
do j = 1,m
! Intercambio de columnas.
tmp
= a(j,i)
a(j,i)
= a(j,imax)
a(j,imax) = tmp
end do
endif
if (i+1.le.m) then
call h1 (beta,i,i+1,m,w,a(1,i))
! Aplicar trans.
do j = i+1,n
! de Householder
call h2 (beta,i,i+1,m,w,a(1,j))! a columnas i a n.
end do
call h2 (beta,i,i+1,m,w,b)
! Aplicar trans. a b.
endif
end do

C
k = ira
do j = 1,ira
if (dabs(a(j,j)).le.tau) then
k = j-1

! Calc. rango de A.

1.7 Mnimos cuadrados lineales

exit
endif
end do
kp1 = k+1
C
s1 = 0.0
do i = kp1,m
s1 = s1+b(i)**2
end do

! Suma de residuos
! al cuadrado.

do i = 1,k
do j = 1,n
a1(j,i) = a(i,j)
end do
end do

! Trasponer A.

C
if (k.ne.n) then
C
C
C
C

Reducir R

a cero y R
12

a T.
11

do i = k,1,-1
call h1 (beta1(i),i,kp1,n,w1(1,i),a1(1,i))
do j = i-1,1,-1
call h2 (beta1(i),i,kp1,n,w1(1,i),a1(1,j))
end do
end do
endif
C
x(k) = b(k)/a1(k,k)
do i = k-1,1,-1
sum = 0.0
do k1 = i+1,k
sum = sum+a1(k1,i)*x(k1)
end do
x(i) = (b(i)-sum)/a1(i,i)
end do

! Resoluci
on de Tx=Qb.

C
if (k.ne.n) then
! Aplicar trans de
do j = kp1,n
! reducci
on de R
a
x(j) = 0.0
!
12
end do
! x.
do i = 1,k
call h2 (beta1(i),i,kp1,n,w1(1,i),x)
end do
endif
do j = ira,1,-1
if (ipiv(j).ne.j) then
! Deshacer permutaci
on introl
= ipiv(j)
! ducida por pivotaciones.
tmp = x(l)
x(l) = x(j)
x(j) = tmp
endif
end do
C
print ( Rango de A:,i3),k
print ( Soluci
on:,6f8.4),x
print ( Suma de residuos al cuadrado:,f9.6),s1
C

103

104

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

end
subroutine h1 (beta,i,j,m,w,x)
C
double precision beta,w(m),x(m)

! Construir transforma.
! de Householder.

C
beta = 0.0
do k = j,m
w(k) = x(k)
beta = beta+w(k)*w(k)
end do
w(i) = x(i)
sigma = sign(sqrt(beta+w(i)*w(i)),x(i))
w(i) = w(i)+sigma
beta = 2.0/(beta+w(i)*w(i))
x(i) = -sigma
C
return
end
subroutine h2 (beta,i,j,m,w,x)
C
double precision beta,w(m),x(m),s
C
s = w(i)*x(i)
do k = j,m
s = s+w(k)*x(k)
end do
s
= s*beta
x(i) = x(i)-w(i)*s
do k = j,m
x(k) = x(k)-w(k)*s
end do
C
return
end

! Aplicar transforma.
! de Householder.

1.7 Mnimos cuadrados lineales

1.7.2.2.2

105

Transformaciones de Givens

Denici
on 1.4 Se denomina transformaci
on de Givens a una transformaci
on lineal de n
n
nn
en  caracterizada por una matriz G(i, j)
matriz de Givens de la forma:

G(i, j) =

1
..

.
1
c

s
1
..

.
1

c
1
..

.
1

donde c2 + s2 = 1.
Las transformaciones de Givens tambien se denominan rotaciones de Givens. Es inmediato
demostrar que las transformaciones de Givens son ortogonales.
Si se tiene una transformaci
on de Givens de n en n representada por una matriz G(i, j)
de la forma antes denida, con c = cos y s = sen , al aplicarla a un vector x n se
producir
a el siguiente efecto:

x1
.
..

x
i1

xi cos + xj sen

xi+1

G(i, j)x =
..

xj1

xi sen + xj cos j

xj+1

..

xn
Es decir, se rota el vector x un angulo en el subespacio que generan los vectores ei y ej de
n .
Si se desea hacer cero alguno de los componentes i o j de un vector x, concretamente el j,
se debera escoger un tal que xi sen + xj cos = 0, es decir, habr
a que hacer
tan =

xj
,
xi

106

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

o, lo que es equivalente,
c = cos = "
y

xi
xi2 + x2j

xj
s = sen = "
.
x2i + xj2

Ejemplo 1.6 En la gura 1.20 se describe, en el espacio eucldeo tridimensional, la rotaci


on
del vector

1

x= 1
1
en el plano z y para anular el tercer componente. El angulo a rotar x es 45 ; la matriz de
Givens que hay que utilizar es, por tanto,

1 0
0
G(2, 3) = 0 2/2 2/2 .
0 2/2 2/2
El nuevo vector ser
a

1


x =
2 .
0

La norma eucldea de este y del original es 3.

....
....
....
....
....
....
...
...
...
...
...
...
...
..
..
...
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
...
..
..
..

1
............................
.....
...
...
...
.....
...
.
.
..
..
.
..
.
.
.
.
.............

x

Figura 1.20
Ejemplo de una transformaci
on de Givens en el espacio eucldeo tridimensional

1.7 Mnimos cuadrados lineales

107

Las transformaciones de Givens se pueden utilizar en un problema de mnimos cuadrados


para transformar la matriz A en n etapas en una triangular superior R. En cada una de esas
etapas, j, se han de hacer uno a uno cero los componentes j + 1 a m.
As, por ejemplo, las operaciones necesarias para transformar la matriz

A=

R=
0
0

0
0

son las siguientes:

2
0
A1 =

2
2

2
= G(1, 2)A;


0
A3 =
0
0


2
2
2


0

A5 =
0
0

 

 
= G(2, 4)A4
0
0


2
= G(1, 4)A2 ;
2
2

0 2 2

A2 =
0 2 2 = G(1, 3)A1 ;

  
0

= G(2, 3)A3 ;
A4 =

0 0
0 2 2


0

y A6 =
0
0



0
0


= G(3, 4)A5 .

0

Los smbolos 2, y  indican que el elemento al que se hace referencia ha experimentado


1, 2 o 3 transformaciones desde su valor inicial .
El algoritmo completo para resolver minxn Ax b2 mediante transformaciones de
Givens es el que representa la tabla 1.19. La versi
on en Fortran 77 de este algoritmo para
resolver el ejemplo de la gura 1.8, de la p
agina 74, es la que sigue a continuaci
on.
PROGRAM Givens
C
parameter (m=4,n=3)
dimension a(m,n),b(m),x(n)
data a/1.,1.,1.,1.,1.,2.,3.,4.,1.,4.,9.,16./
data b/2.,3.,5.,6./
C
C
C

*** Reducci
on QA=R ***
do i = 1,n
do k = i+1,m
if (1.0+abs(a(k,i)).ne.1.0) then
if (abs(a(k,i)).ge.abs(a(i,i))) then
t = a(i,i)/a(k,i)
s = 1.0/sqrt(1.0+t*t)
c = s*t
else
t = a(k,i)/a(i,i)
c = 1.0/sqrt(1.0+t*t)
s = c*t

108

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Tabla 1.19
Algoritmo para la resoluci
on de minxn Ax b2 mediante transformaciones de Givens

n de la Matriz Amn
Transformacio

for i = 1 to n
for k = i + 1 to m
Hacer nulo el elemento (k, i).
if a(k, i) = 0 then
if |a(k, i)| |a(i, i)| then
t = a(i, i)/a(k, i); s = 1/ 1 + t2 ; c = s t
else

t = a(k, i)/a(i, i); c = 1/ 1 + t2 ; s = c t


end
a(i, i) c a(i, i) + s a(k, i)
for j = i + 1 to n
aux = c a(i, j) + s a(k, j)
a(k, j) s a(i, j) + c a(k, j)
a(i, j) aux
end
n del vector b.
Transformacio
aux = c b(i) + s b(k)
b(k) s b(i) + c b(k)
a(i) aux
end
end
end

n del sistema Rx = b.
Resolucio

for j = n to1
.
n

a(j, k) x(k) a(j, j)
x(j) b(j)
k=j+1

end

Residuos al cuadrado.

m

b2 (k)
rescua
k=n+1

1.7 Mnimos cuadrados lineales

109

endif
a(i,i) = c*a(i,i)+s*a(k,i)
do j = i+1,n
q
= c*a(i,j)+s*a(k,j)
a(k,j) = (-s*a(i,j))+c*a(k,j)
a(i,j) = q
end do
q
= c*b(i)+s*b(k)
b(k) = (-s*b(i))+c*b(k)
b(i) = q
endif
end do
end do
C
C
C

*** Resoluci
on

Rx = b ***

x(n) = b(n)/a(n,n)
do i = n-1,1,-1
suma = 0.0
do k = i+1,n
suma = suma+a(i,k)*x(k)
end do
x(i) = (b(i)-suma)/a(i,i)
end do
C
C
C

*** Suma de residuos al cuadrado


s = 0.0
do i = n+1,m
s = s+b(i)*b(i)
end do

C
print 50,x
print 60,s
C
50 format( X=(,f6.4,,,f6.4,,,f6.4,))
60 format( Suma de residuos al cuadrado=,f9.6)
end

El n
umero de operaciones que requiere este algoritmo es O(2mn2 2n3 /3) sumas/restas
y multiplicaciones/divisiones y O(mn/2) races cuadradas para transformar la matriz A, mas
O(n2 /2) sumas/restas y multiplicaciones/divisiones para efectuar la sustituci
on inversa.
Comparando este u
ltimo n
umero de operaciones con las que requera el algoritmo basado en
transformaciones de Householder, asumiendo que la precisi
on de los resultados es semejante,
el metodo de Givens resulta ser el doble de caro que el de Householder. La pregunta que surge
entonces es: por que utilizar Givens y no Householder?
La respuesta a esta pregunta se basa en considerar la estructura de la matriz A del problema: si esta es densa, es decir, muchos de sus coecientes son distintos de cero, el metodo de
Householder es sin duda el m
as aconsejable; si, por el contrario, la estructura de A es dispersa,
convendr
a centrarse en hacer cero solo aquellos elementos no nulos en las columnas correspondientes, por lo que, a priori, si hay pocos de estos, el metodo de Givens deber
a ser mas
ventajoso.

110

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

1.7.2.2.3

Transformaciones r
apidas de Givens

Un metodo que palia la desventaja del de Givens respecto al de Householder, por lo que
respecta a la velocidad de calculo, y que incorpora la facilidad de hacer ceros determinados
elementos, es el denominado de transformaciones rapidas de Givens. Se basa en reordenar los
calculos del algoritmo de la tabla 1.19 para conseguir una velocidad pr
oxima a la del algoritmo
de Householder.
Antes de entrar en la descripci
on de estas transformaciones, esbocemos la idea basica que
las preside. Para ello, observese una vez mas que al aplicar a una matriz A una transformaci
on
de Givens, denida por una matriz G(i, j), los u
nicos elementos que se ven modicados son los
de las las i y j, de tal forma que
aik c aik + s ajk
ajk s aik + c ajk ,

(1.23)

para k = 1, . . . , n. Estas modicaciones conllevan, para cada k, cuatro multiplicaciones (4n


en total). Ahora bien, si alguno de los c o s se pudiese reemplazar por un 1, el n
umero de
multiplicaciones se reducira a la mitad. Este es el objetivo de las transformaciones r
apidas de
Givens.
Para resolver el problema de mnimos cuadrados con el metodo de las transformaciones de
Givens, a la matriz Amn se le aplican un conjunto de tales transformaciones para convertirla,
como se viene haciendo, en una matriz mas simple de manipular: una matriz triangular superior
R. Con las transformaciones r
apidas de Givens, en lugar de premultiplicar la matriz A por unas
G(i, j), se multiplica por unas matrices m
as simples, resultado de premultiplicar a su vez esas
G(i, j) por unos escalares a n de hacer uno el elemento s o c; esos escalares se almacenan en
unos vectores de tal forma que una vez que se haya conseguido transformar la matriz A a una
triangular superior, se multiplica cada la de esta por su correspondiente escalar obteniendose
la matriz R. M
as concretamente, el procedimiento basado en transformaciones r
apidas de
Givens almacena la matriz resultado de las transformaciones como producto DP , donde D es
una matriz diagonal que contiene los escalares mencionados. En cada una de las n etapas se
readaptan D y P . Al nal del proceso, P es triangular superior y R resulta del producto DP .
Para estudiar el proceso detalladamente, supongamos que estamos en la etapa j y que se
tiene que hacer cero el elemento i de la columna j (i > j) de DP . Dado que premultiplicar la
matriz P por una matriz diagonal equivale a multiplicar cada la de P por el correspondiente
elemento en la diagonal, el elemento de la columna j en la la i de la matriz DP que se quiere
hacer cero sera di pij , donde di es el elemento i-esimo de D. Como los elementos c y s que
denen la matriz G(i, j) de una transformaci
on de Givens, recordemos, estan dados por
xi
c= "
x2i + xj2
y
xj
s= "
,
2
xi + xj2
para hacer cero di pij con una transformaci
on de este tipo c y s deber
an ser:
c= "

dj pjj
(dj pjj )2 + (di pij )2

di pij
y s= "
.
(dj pjj )2 + (di pij )2

(1.24)

1.7 Mnimos cuadrados lineales

111

Denida la transformaci
on de Givens, en lugar de calcular el producto G(i, j) DP , se calcula
una nueva matriz D y otra P  , de tal manera que
D P  = G(i, j)DP.
A tal efecto, observese que
#

G(i, j)DP = DD1 G(i, j)DP = D D1 G(i, j)D P.


Como se comprueba de forma inmediata, D1 G(i, j)D es identica a la matriz G(i, j) excepto
en el elemento que ocupa la la i y la columna j y en el que ocupa la la j y la columna i. En
particular, la submatriz 2 2 de D1 G(i, j)D formada por la intersecci
on de la la i y la la
j con la columna i y la columna j es


c s1
,
(1.25)
s2 c
donde s1 = sd
i /dj y s2 = sdj /di .
Si |c| 1/ 2, a cada la de esta matriz se la multiplica por 1/c obteniendose
s1
1

s2 c ;
1
c

(1.26)

si |s| > 1/ 2, a la primera la se la multiplica por 1/s1 y a la segunda por 1/s2 , obteniendose
c
s
1

c .
1
s2

(1.27)

En cualquiera de los dos casos se consigue hacer la unidad dos de los cuatro elementos, por lo
que cualquier multiplicaci
on que afecte a (1.26) o (1.27) requerir
a la mitad de multiplicaciones
que hacerlo con (1.25). Las matrices de la forma (1.26) y (1.27) representan transformaciones
r
apidas de Givens 2 2.
Multiplicar por 1/c, 1/s1 o 1/s2 equivale a multiplicar la correspondiente matriz por una
diagonal. Designemos como E la matriz diagonal cuyos elementos
e1 , e2 , . . . , en son todos
2; y ei = 1/s1 y ej = 1/s2 ,
iguales a uno
excepto
el
i
y
el
j
que
son:
e
=
1/c
=
e
,
si
|c|

1/
i
j

1
si |s| > 1/ 2. Como EE = I, se tendr
a que
#

D P  = DEE 1 D1 G(i, j)D P = (DE) E 1 D1 G(i, j)D P.


Como el producto de dos matrices diagonales es otra matriz diagonal, el producto DE es la
nueva D. Por lo que respecta a la matriz E 1 D1 G(i, j)D, la submatriz 2 2 formada por
la interseccion de la la i y la la j con la columna i y la columna j, es de la forma (1.26) o
(1.27), por lo que el producto (E 1 D1 G(i, j)D)P es la nueva matriz P . En resumen:
D = DE

y P  = E 1 D1 G(i, j)DP.

112

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Tabla 1.20
Calculo de los elementos de las las i y j de las matrices D y P en las transformaciones
r
apidas de Givens

para |c| 1/ 2
r(1) (s d(i))/(c d(j))
r(2) (s d(j))/(c d(i))
d(j) c d(j); d(i) c d(i)
for k = j to n
t p(j, k) + r(1) p(i, k)
p(i, k) p(i, k) r(2) p(j, k)
p(j, k) t
end

para |s| > 1/ 2


r(1) (c d(j))/(s d(i))
r(2) (c d(i))/(s d(j))
d(i) d(j); d(j) s d(j); d(i) s d(i)
for k = j to n
t p(i, k) + r(1) p(j, k)
p(i, k) p(j, k) r(2) p(i, k)
p(j, k) t
end

De acuerdo con la denici


on de las matrices (1.26), (1.27) y E, los elementos de las las i y j
de las nuevas D y P se calculan como se describe en la tabla 1.20.
El proceso se inicia haciendo D = I y P = A. El algoritmo completo para resolver el problema minxn Ax b2 mediante transformaciones r
apidas de Givens es el que describe la
tabla 1.21. Como se puede comprobar f
acilmente, los par
ametros r1 y r2 solo dependen de di2 y
2
dj por lo que en el algoritmo se almacena el cuadrado de los elementos diagonales. Este algoritmo requiere O(n2 (m n/3)) multiplicaciones/divisiones y sumas/restas para transformar
la matriz del problema A y O(n2 /2) multiplicaciones/divisiones y sumas/restas para realizar
la sustituci
on inversa.
Cada una de las etapas del algoritmo de la tabla 1.21 multiplica dos componentes de d()
por un factor de magnitud c2 o s2 dependiendo cual es mayor. Dado que
1
max{c2 , s2 } 1,
2
al avanzar el algoritmo los componentes de d() tienden a cero a medida que los elementos de
la matriz A tienden a . Para evitar operaciones con overow o underow, tanto la matriz
A como d() se normalizan de vez en cuando. En particular, cuando haya peligro de overow
en la la k, se puede llevar a cabo la siguiente normalizaci
on al comienzo del bucle que afecta
a i:
a(k, l : n) d(k)1/2 a(k, l : n); d(k) 1.
La version en Fortran 77 de este algoritmo para resolver el ejemplo de la gura 1.8 es la
que sigue a continuaci
on.
PROGRAM Fastgivens
C
parameter (m = 4,n = 3)
dimension a(m,n),b(m),x(n),d(m)
C
data a/1.,1.,1.,1.,1.,2.,3.,4.,1.,4.,9.,16./
data b/2.,3.,5.,6./
C
C
C

*** Reducci
on QA=R ***

1.7 Mnimos cuadrados lineales

113

Tabla 1.21
Algoritmo para la resoluci
on de minxn Ax b2 por transformaciones r
apidas de Givens
d(i : m) = 1

n de la Matriz Amn
Transformacio

for j = 1 to n
for i = j + 1 to m
if a(i, j) = 0 then
c = d(j) a(j, j)2 ; s = d(i) a(i, j)2
if s c then
r(2) a(i, j)/a(j, j); r(1) d(i) r(2)/d(j); c c/(c + s)
d(j) c d(j); d(i) c d(i)
for k = j to n
t a(j, k) + r(1) a(i, k); a(i, k) a(i, k) r(2) a(j, k); a(j, k) t
end
t b(j) + r(1) b(i); b(i) b(i) r(2) b(j); b(j) t
else
r(2) a(j, j)/a(i, j); r(1) d(j) r(2)/d(i); s s/(c + s)
d(i) d(j); d(j) s d(j); d(i) s d(i)
for k = j to n
t a(i, k) + r(1) a(j, k); a(i, k) a(j, k) r(2) a(i, k); a(j, k) t
end
t b(i) + r(1) b(j); b(i) b(j) r(2) b(i); b(j) t
end
end
end
end
for i = 1 to m
for j = i to n
a(i, j) d(i)1/2 a(i, j)
end
b(i) d(i)1/2 b(i)
end

n del sistema Rx = b
Resolucio

for j = n to1


n

a(j, k) x(k)
x(j) b(j)
a(j, j)
k=j+1

end

114

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

do i = 1,m
d(i) = 1.0
end do
do j = 1,n
do i = j+1,m
if (1.0+abs(a(i,j)).ne.1.0) then
c = d(j)*a(j,j)**2
s = d(i)*a(i,j)**2
if (s.le.c) then
r2
= a(i,j)/a(j,j)
r1
= d(i)*r2/d(j)
c
= c/(s+c)
d(j) = c*d(j)
d(i) = c*d(i)
do k = j,n
t
= a(j,k)+r1*a(i,k)
a(i,k) = a(i,k)-r2*a(j,k)
a(j,k) = t
end do
t
= b(j)+r1*b(i)
b(i) = b(i)-r2*b(j)
b(j) = t
else
r2
= a(j,j)/a(i,j)
r1
= d(j)*r2/d(i)
s
= s/(s+c)
t
= d(j)
d(j) = d(i)
d(i) = t
d(j) = s*d(j)
d(i) = s*d(i)
do k = j,n
t
= a(i,k)+r1*a(j,k)
a(i,k) = a(j,k)-r2*a(i,k)
a(j,k) = t
end do
t
= b(i)+r1*b(j)
b(i) = b(j)-r2*b(i)
b(j) = t
endif
endif
end do
end do
C
do i = 1,m
sqrd = sqrt(d(i))
do j = i,n
a(i,j) = sqrd*a(i,j)
end do
b(i) = sqrd*b(i)
end do
C
C
C

*** Resoluci
on

Rx = b ***

x(n) = b(n)/a(n,n)
do i = n-1,1,-1
suma = 0.0
do k = i+1,n

1.7 Mnimos cuadrados lineales

115

suma = suma+a(i,k)*x(k)
end do
x(i) = (b(i)-suma)/a(i,i)
end do
C
C
C

*** Suma de residuos al cuadrado ***


s = 0.0
do i = n+1,m
s = s+b(i)*b(i)
end do

C
print 50,x
print 60,s
C
50 format( x=(,f6.4,,,f6.4,,,f6.4,))
60 format( Suma de residuos al cuadrado=,f9.6)
C
end

1.7.3

Descomposici
on num
erica en valores singulares. M
etodo de GolubReinsch

Como ya indic
abamos en el apartado te
orico dedicado a la descomposici
on en valores singulares,
esta tiene gran importancia para analizar un problema lineal de mnimos cuadrados e incluso
para resolverlo. La evaluaci
on numerica de la descomposicion en valores singulares de la matriz
A que caracteriza un problema de mnimos cuadrados puede resultar muy u
til. En este apartado
nos centraremos en el algoritmo de Golub y Reinsch [1970] para llevarla a cabo.
Teorema 1.19 (Descomposici
on Bidiagonal de una matriz) Sea la matriz A mn , m
n. Existen matrices ortogonales Q mm y P nn tales que


B1
Q AP =
,
0
T

(1.28)

donde B1 es una matriz triangular superior bidiagonal en la que todos los elementos de la
diagonal principal son positivos o cero (no negativos).
n. Procederemos por inducci
Demostracio
on. Para m = 1, se puede hacer Q = 1 y P = 1.
Para m > 1, sea A = [a1 , A2 ], con a1 m , y U = [y, U1 ] una matriz ortogonal tal que:


y=

a1 /a1 2 si a1 =
 0
e1
si a1 = 0.

Como U1T y = 0, entonces

rT
U A=
0 B
T

donde = a1 2 > 0, r = AT2 y y B = U1T A2 (m1)(n1) .

116

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

Sea ahora la matriz ortogonal V = [z, V1 ] con:




z=

r/r2 si r = 0
e1
si r = 0.

Como rT V1 = 0, entonces

cT
U AV =
0 C
T

donde cT = [, 0T ], V = diag(1, V ), = r2 y C = B V (m1)(n1) .


y P que reduzcan la matriz
Por la hip
otesis de inducci
on, existir
an matrices ortogonales Q
C a una bidiagonal. La igualdad (1.28) se cumplir
a si se escogen


1 0
Q=U

0 Q

y P =V

1 0
.
0 P

Algoritmo de Golub y Reinsch. Primera fase


Consiste en reducir la matriz A a una triangular superior bidiagonal mediante transformaciones ortogonales de Householder de acuerdo con el esquema usado para demostrar el teorema
anterior. Es decir, hacer


B1
T
QB AB = B =
,
0
donde

B=

d1 f2

d2 f3

.. ..

. .

..
,
. fn

dn

0
0

(1.29)

QB = Q1 Qn mm y B = 1 n2 nn . Estas matrices QB y B son el producto


de matrices elementales que caracterizan las mencionadas transformaciones de Householder.
La transformaci
on que dene Qk se escoge de tal manera que haga cero los elementos k + 1 a
m de la columna k. La transformaci
on que dene k , por otro lado, har
a cero los elementos
64
k + 2 a n de la la k. El esquema que se seguira con una matriz A
sera el de la gura 1.21.
Un algoritmo que implemente esta forma de actuaci
on requerir
a O(2mn2 32 n3 ) operaciones. La forma de proceder, por lo que respecta al almacenamiento de datos, es similar a la
que se viene utilizando.
Un procedimiento para bidiagonalizar la matriz A mas rapido que el propuesto por Golub
y Reinsch, cuando m  n, es el debido a Hanson y Lawson [1974] y [1995], implementado por

1.7 Mnimos cuadrados lineales

0
Q1 0 1

0
0
0
0
0

0
0
0
0

0
0
0
0
0

117

0 0
0

0
Q2 0 0

0 0

0 0

0 0

0 0
0 0
0
0
0 0
0 0
Q
Q
3
4

0 0
0 0

0 0 0
0 0 0

0 0 0
0 0 0 0

0 0 0
0 0 0 0

Figura 1.21
Proceso de bidiagonalizaci
on de una matriz 6 4 mediante transformaciones de Householder
Chan [1982]. Se basa en reducir inicialmente A de la forma


QT1 A =

R
,
0

donde R nn es una matriz triangular superior, y luego bidiagonalizar R. Es decir,


QT2 RB = B1 ,
donde Q2 , B nn son dos matrices ortogonales y B1 nn es triangular superior
bidiagonal. Si se dene la matriz UB = Q1 diag(Q2 , Imn ), se verica que


UBT AB

B1
=
0

= B.

Este procedimiento requiere O(mn2 + n3 ) operaciones. Cuando m 35 n, es mas rapido que


el de Golub y Reinsch.
Segunda fase
Una vez bidiagonalizada la matriz A, en una segunda fase se hacen cero los elementos que no
estan en la diagonal principal mediante un algoritmo que obtenga
QTS B1 S = = diag(1 , . . . , n ),

118

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

donde QS nn y S nn son matrices ortogonales. La descomposicion en valores


singulares de la matriz A sera
 

V T,
A=U
0
donde U = QB diag(QS , Imn ) y V = B S .
Antes de seguir con la explicaci
on de esta segunda fase, demostremos un resultado muy u
til
para lo que expondremos.
Teorema 1.20 (Teorema de la Q implcita) Sean dos matrices ortogonales Q = [q 1 , . . . , q n ]
y V = [v 1 , . . . , v n ] con la propiedad de que H = QT AQ y G = V T AV son matrices de
Hessenberg. Sea k el menor n
umero entero positivo tal que hk+1 k = 0 (se adopta el convenio
de que k = n si todos los elementos de la subdiagonal de H son distintos de cero). Si v 1 = q 1 ,
entonces v i = q i y |hi i1 | = |gi i1 |, para i = 2, . . . , k. Adem
as, si k < n, gk+1 k = 0.
n. Denamos la matriz ortogonal W = [w1 , . . . , w n ] = V T Q; observese que
Demostracio
GW = W H. Para i = 2, . . . , k se tendr
a que
hi i1 w i = Gw i1

i1

hj i1 w j .

j=1

Como w 1 = e1 , [w1 , . . . , w k ] es una matriz triangular superior y, por lo tanto, wi = ei para


i = 2, . . . , k. Como wi = V T q i y hi i1 = wiT Gwi1 , entonces v i = q i y |hi i1 | = |gi i1 |
para i = 2, . . . , k. Si hk+1 k = 0, ignorando los signos, se tiene que
T GW e = (eT W )(He )
gk+1 k = eTk+1 Gek = ek+1
k
k
k+1

= eTk+1

hik W ei =

i=1

hik eTk+1 ei = 0.

i=1

La idea esencial del algoritmo de la Q implcita es que si QT AQ = H y Z T AZ = G son


matrices de Hessenberg sin elementos nulos en la subdiagonal debajo de la diagonal principal
y Q y Z tienen todos los elementos de la primera columna iguales, G y H son esencialmente
iguales en el sentido de que G = D 1 HD, donde D = diag(1, . . . , 1). Veremos mas adelante
la utilidad de este resultado.
El algoritmo para obtener los valores singulares de la matriz bidiagonal B1 procede iterativamente haciendo
Bk+1 = UkT Bk Vk ,
k = 1, 2, . . . ,
donde Uk y Vk son matrices ortogonales, de tal forma que
= lim Bk .
k

Para llegar a obtener los valores singulares de B se podra proceder de forma an


aloga a
como lo hace el denominado Algoritmo QR con Desplazamiento Implcito ver el apartado
referencias de este mismo captulo, para obtener los valores propios de una matriz simetrica, y

1.7 Mnimos cuadrados lineales

119

manipular la matriz B T B pues, recordemos, los valores singulares de B son las races cuadradas
positivas de los valores propios de B T B. Ahora bien, debido a los errores numericos de redondeo
que se pueden producir en los valores singulares menores al actuar sobre B T B y no sobre B y a
que el metodo solo obtendra los vectores propios de B T B, es decir, solo los vectores singulares
derechos de B, no es aconsejable seguir ese procedimiento aunque s su principio de actuaci
on
y las propiedades de su convergencia.
En cada etapa k del proceso de obtenci
on de los valores singulares de la matriz bidiagonal
B, siguiendo la idea del metodo QR con desplazamiento implcito en el sentido de hacer lo m
as
peque
nos posibles los elementos que no estan en la diagonal principal de Bk , se determinan los
valores propios 1 y 2 de la submatriz 2 2 que forman los elementos (n 1, n 1), (n 1, n),
(n, n 1) y (n, n) de BkT Bk . Siguiendo la notaci
on de (1.29), esa submatriz es


2
d2n1 + fn1
dn1 fn
.
dn1 fn
dn2 + fn2

Posteriormente se obtiene un k cuyo valor es el del valor propio m


as pr
oximo al valor del
T
5
elemento (n, n) de Bk Bk . Este par
ametro es igual a


dn2
1

donde
t=
y

+ fn

dn1
fn
,
t

f (1 + f 2 )1/2 si f 0
f + (1 + f 2 )1/2 si f < 0

2
dn2 d2n1 + fn2 fn1
f=
.
2fn dn1

A continuaci
on se determina una transformaci
on de Givens, G(1, 2), que haga el elemento
T
(2, 1) de Bk Bk k In cero; es decir, tal que


d2 k
G(1, 2) 1
d1 f2

=
.
0

Esta transformaci
on de Givens se aplica posteriormente a Bk creandose en esta un elemento no
nulo en la posici
on (2, 1). Para anularlo se le aplica otra transformaci
on de Givens, simbolizada
por U1 , la cual a su vez crea otro elemento no nulo en la posici
on (1, 3) de Bk . Para anularlo se
aplica otra transformaci
on de Givens, V2 , la cual a su vez crea otro elemento distinto de cero . . .
As se procede sucesivamente hasta restaurar la condicion inicial de Bk de ser bidiagonal.
Si, por ejemplo, se parte de

Bk G(1, 2) = Bk =
,

Ver su deducci
on en Lawson y Hanson [1974] y [1995].

120

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

los sucesivos pasos de esta etapa k para conseguir que Bk siga siendo bidiagonal, seran:

U1T Bk =

U2T U1T Bk V2 =

U1T Bk V2 =
;

U2T U1T Bk V2 V3 =

;
+

y as sucesivamente hasta conseguir que


U5T U4T U3T U2T U1T Bk G(1, 2)V2 V3 V4 V5
sea bidiagonal.
En general, en cada etapa k, designando la transformaci
on de Givens inicial G(1, 2) mediante
k relacionada con la inicial de la etapa, Bk , mediante la expresi
G, se obtendr
a una matriz B
on
T Bk V .
k = (U T U T )Bk (GV2 Vn1 ) = U
B
n1
1
Como cada transformaci
on Vi es del tipo G(i, i+1), donde i = 2, . . . , n1, se puede comprobar
f
acilmente que V e1 = Qe1 , donde Q representa el conjunto de transformaciones de Givens que
se aplican en una etapa k del algoritmo QR con desplazamiento implcito para restaurar la
condici
on de matriz tridiagonal en BkT Bk una vez aplicado el desplazamiento k antes descrito.
Es decir, tal que QT (BkT Bk k In )Q sea tridiagonal. De acuerdo con el teorema de la Q
implcita se puede concluir que las matrices V y Q son esencialmente iguales por lo que el
efecto, con vistas a conseguir los valores singulares de B, de una etapa del algoritmo QR con
desplazamiento implcito sobre B T B es el mismo manipulando solamente B.
En la tabla 1.22 se describen los pasos de cada una de estas etapas k que acabamos de
describir. El algoritmo a que da lugar denominado de Golub-Kahan, dada una matriz bidiagonal B mn observese que hemos suprimido el subndice k para especicar la etapa a
la que hacamos referencia anteriormente sin ning
un elemento nulo ni en la diagonal principal
que reemplaza a B,
ni en la sobrediagonal inmediata a esa diagonal principal, calcula una B,
T

tal que B = U B V , donde U y V son matrices ortogonales siendo V esencialmente la que se


obtendra al aplicar el algoritmo QR con desplazamiento implcito a T = B T B para calcular
sus autovalores. La convergencia del metodo QR con desplazamiento implcito garantiza que
el valor de los elementos fi de la matriz B converger
an r
apidamente a cero.
Todo lo expuesto hasta ahora para obtener los valores singulares de la matriz bidiagonal
B en etapas sucesivas presupone que todos los elementos de la diagonal principal y de la
sobrediagonal m
as pr
oxima a esa diagonal principal son distintos de cero. Si alg
un fk+1 = 0,
entonces


k
B1 0
B=
0 B2 n k

1.7 Mnimos cuadrados lineales

121

Tabla 1.22
Algoritmo de Golub-Kahan: etapa k del procedimiento de Golub-Reinsch para obtener los
valores singulares de una matriz bidiagonal B nn
Paso 1 Determinar el autovalor de la submatriz 2 2 de T = B T B que forman tn1 n1 ,
tn1 n , tn n1 y tnn mas proximo en valor a tnn .
Hacer y = t11
z = t12 .
Paso 2 Para k = 1, . . . , n 1:
Determinar los parametros de G(k, k + 1), c = cos y s = sen , tales que


c s
[y z]
= [ 0 ].
s c
Hacer B = BG(k, k + 1)
y = bkk
z = bk+1 k .
Determinar los parametros de G(k, k + 1), c = cos y s = sen , tales que

T    
y

c s
=
.
z
0
s c
Hacer B = G(k, k + 1)T B.
Si k < n 1, hacer y = bk k+1 y z = bk k+2 .

y el procedimiento para calcular los valores singulares de B se podra descomponer en dos


subproblemas: uno para calcular los de B1 y otro para hacerlo de los de B2 .
Si alg
un dk fuese 0, la matriz se podra premultiplicar por una transformaci
on de Givens a n
de hacer cero el correspondiente fk+1 pr
oximo, buscando, como antes, subdividir el problema
en subproblemas. Si, en este sentido, por ejemplo, se supone

B=
0
0
0

0
0
0
0

0
0
0
0

0
0

0
0

0
0
0

0
,

(en este caso n = 6 y k = 3), construyendo unas transformaciones de Givens en los planos
(3,4), (3,5) y (3,6), se producir
a el siguiente efecto:

G(3,4) 0


0
0
0

0
0
0
0

0
0
0
0

0
0
0

0
0

0
0

G(3,5) 0


0
0
0

0
0
0
0

0
0
0
0

0
0
0

0
0

0
0
0

G(3,6) 0


0
0
0

0
0
0
0

0
0
0
0

0
0
0

0
0

0
0
0

0
.
0

122

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

El esquema completo del algoritmo que hemos descrito para obtener numericamente los
valores singulares de una matriz A es el que describe la tabla 1.23. Esta versi
on parte de una
matriz A mn (m n). La matriz A se reemplaza por U (D + E)V T , donde U mn ,
V nn , D mn y E cumple que E2 A2 . En la memoria de la m
aquina donde se
trabaje U reemplazara a A.
A continuaci
on se lista un programa en Fortran 77 que codica todos los pasos de este
algoritmo tal cual se describen en la tabla 1.23.
subroutine dcmsvd (a,m,n,sv,v)
C
dimension a(m,n),sv(n),v(m,n),rv1(20)
C
g
= 0.0
anorm = 0.0
C
C
C

*** Reducir matriz A a matriz bidiagonal.


do i = 1,n
l
= i+1
rv1(i) = g

Tabla 1.23
Algoritmo de Golub-Reinsch para la obtenci
on de los valores singulares de una matriz
mn
A
Paso 1 Bidiagonalizar la matriz A mediante transformaciones de Householder. Hacer
B (U1 Un )T A(V1 Vn2 ).
Paso 2 Realizar las siguientes operaciones:
a) Hacer ai i+1 = 0 si |ai i+1 | (|aii | + |ai+1 i+1 |) para todo i = 1, . . . , n 1.
b) Determinar el mayor q y el menor p tales que si
,
p
B11 0
0
n

pq ,
0
0
B
A=
22
q
0
0 B33
B33 es diagonal y B22 tiene todos sus elementos de la sobrediagonal proxima a
la diagonal principal distintos de cero.
c) Si q = n, pararse; el procedimiento ha concluido.
d) Si cualquier elemento en la diagonal de B22 es cero, anular el elemento en la
sobrediagonal de las misma la i y comenzar de nuevo en a).
e) Aplicar el algoritmo de la tabla 1.22 a B22 . Hacer
, Iq+mn )T B diag(Ip , V , Iq ).
B = diag(Ip , U
Comenzar de nuevo en a).

1.7 Mnimos cuadrados lineales

g
= 0.0
s
= 0.0
if (i.le.m) then
rmax = 0.0
do k = i,m
rmax = amax1(rmax,abs(a(k,i)))
end do
if (rmax.ne.0.0) then
do k = i,m
s = s+a(k,i)**2
end do
f
= a(i,i)
g
= -sign(sqrt(s),f)
h
= f*g-s
a(i,i) = f-g
do j = l,n
s = 0.0
do k = i,m
s = s+a(k,i)*a(k,j)
end do
f = s/h
do k = i,m
a(k,j) = a(k,j)+f*a(k,i)
end do
end do
endif
endif
sv(i) = g
g
= 0.0
s
= 0.0
if (i.le.m.and.i.ne.n) then
rmax = 0.0
do k = l,n
rmax = amax1(rmax,abs(a(i,k)))
end do
if (rmax.ne.0.0) then
do k = l,n
s = s+a(i,k)**2
end do
f
= a(i,l)
g
= -sign(sqrt(s),f)
h
= f*g-s
a(i,l) = f-g
do k = l,n
rv1(k) = a(i,k)/h
end do
do j = l,m
s = 0.0
do k = l,n
s = s+a(j,k)*a(i,k)
end do
do k = l,n
a(j,k) = a(j,k)+s*rv1(k)
end do
end do
endif
endif
anorm = amax1(anorm,abs(sv(i))+abs(rv1(i)))
end do

123

124

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

C
C
C
C

*** Acumular en la matriz V las transformaciones


por la derecha hechas a A. ***
do i = n,1,-1
if (i.lt.n) then
if (g.ne.0.0) then
do j = l,n
v(j,i) = (a(i,j)/a(i,l))/g
end do
do j = l,n
s = 0.0
do k = l,n
s = s+a(i,k)*v(k,j)
end do
do k = l,n
v(k,j) = v(k,j)+s*v(k,i)
end do
end do
endif
do j = l,n
v(i,j) = 0.0
v(j,i) = 0.0
end do
endif
v(i,i) = 1.0
g
= rv1(i)
l
= i
end do

C
C
C
C

*** Acumular en la matriz A las transformaciones


por la izquierda hechas a A.
do i = min(m,n),1,-1
l = i+1
g = sv(i)
do j = l,n
a(i,j) = 0.0
end do
if (g.ne.0.0) then
g = 1.0/g
do j = l,n
s = 0.0
do k = l,m
s = s+a(k,i)*a(k,j)
end do
f = (s/a(i,i))*g
do k = i,m
a(k,j) = a(k,j)+f*a(k,i)
end do
end do
do j = i,m
a(j,i) = a(j,i)*g
end do
else
do j = i,m
a(j,i) = 0.0
end do
endif

1.7 Mnimos cuadrados lineales

a(i,i) = a(i,i)+1.0
end do
C
C
C
C

*** Diagonalizar la matriz bidiagonal almacenada en sv(.) y en


rv1(.). S
olo se realizan 30 iteraciones como m
aximo.
do k = n,1,-1
do its = 1,30
do l = k,1,-1
nm = l-1
if (abs(rv1(l))+anorm.eq.anorm) exit
if (abs(sv(nm))+anorm.eq.anorm) then
c = 0.0
s = 1.0
do i = l,k
f
= s*rv1(i)
rv1(i) = c*rv1(i)
if (abs(f)+anorm.eq.anorm) exit
g
= sv(i)
h
= sqrt(f*f+g*g)
sv(i) = h
c
= g/h
s
= -f/h
do j = 1,m
y
= a(j,nm)
z
= a(j,i)
a(j,nm) = y*c+z*s
a(j,i) = (-y*s)+z*c
end do
end do
exit
endif
end do
z = sv(k)
if (l.eq.k) then
if (z.lt.0.0) then
sv(k) = -z
do j = 1,n
v(j,k) = -v(j,k)
end do
endif
exit
endif
if (its.eq.30) stop No hay convergencia
x = sv(l)
nm = k-1
y = sv(nm)
g = rv1(nm)
h = rv1(k)
f = ((y-z)*(y+z)+(g-h)*(g+h))/(2.0*h*y)
g = sqrt(f*f+1.0)
f = ((x-z)*(x+z)+h*(y/(f+sign(g,f))-h))/x
c = 1.0
s = 1.0
do j = l,nm
i
= j+1
g
= rv1(i)
y
= sv(i)
h
= s*g

125

126

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

g
= c*g
z
= sqrt(f*f+h*h)
rv1(j) = z
c
= f/z
s
= h/z
f
= x*c+g*s
g
= (-x*s)+g*c
h
= y*s
y
= y*c
do jj = 1,n
x
= v(jj,j)
z
= v(jj,i)
v(jj,j) = x*c+z*s
v(jj,i) = (-x*s)+z*c
end do
z
= sqrt(f*f+h*h)
sv(j) = z
if (z.ne.0.0) then
c = f/z
s = h/z
endif
f = c*g+s*y
x = (-s*g)+c*y
do jj = 1,m
y
= a(jj,j)
z
= a(jj,i)
a(jj,j) = y*c+z*s
a(jj,i) = (-y*s)+z*c
end do
end do
rv1(l) = 0.0
rv1(k) = f
sv(k) = x
end do
end do
return
end

El n
umero de operaciones que requiere el algoritmo de la tabla 1.23 depende de la cantidad
de informaci
on que se pretenda obtener de la descomposici
on en valores singulares
A = U V T
de la matriz A. Si lo que se pretende es simplemente resolver un problema de mnimos cuadrados
minxn Ax b2 , cuya soluci
on es


x=V

1
0
r
U T b,
0 0

no sera necesario calcular la matriz U T sino simplemente aplicar las transformaciones que la
originan a b. En otras ocasiones solo interesar
a calcular U1mn , donde
U = [ U1 , U2 ].
n mn
En cualquier caso, existen seis posibilidades distintas de obtener informaci
on relativa a una
descomposicion en valores singulares (SVD). El trabajo requerido para llevar a cabo estas seg
un

1.7 Mnimos cuadrados lineales

127

se utilice el metodo de Golub-Reinsch completo o su variante de Chan, es el que se indica en


la tabla 1.24.
Para la resoluci
on del problema de mnimos cuadrados hay que tener cuidado con los errores
de redondeo inherentes al proceso, sobre todo si los valores singulares son muy peque
nos. Si se
elige un par
ametro cualquiera = A , por ejemplo, donde como siempre es la precision
de la maquina donde se trabaja, y los valores singulares verican que
1 r > r+1 n ,
la soluci
on del problema de mnimos cuadrados con norma eucldea mnima ser
a
x=

r

uTi b
i=1

vi.

(1.30)

Los componentes r + 1 a n seran cero.


A continuaci
on se lista un programa en Fortran 77 para resolver el problema de mnimos
cuadrados minxn Ax b2 , en concreto,

1
2

3
4
5


6
7
8
9
10



  

11
5

12 x1
5

13 x2 = 5 ,
5
14 x3



15
5
x

utilizando la rutina DCMSVD presentada antes. La soluci


on del problema es

0,5
x = 0,0 .
0,5
Los valores singulares de la matriz A son 1 = 35,12723, 2 = 2,465397 y 3 = 0. El programa
tambien proporciona el rango de la matriz A.
Tabla 1.24
N
umero de operaciones necesarias para efectuar las distintas variantes de una descomposici
on
en valores singulares de una matriz A mn
Obtener

M
etodo de Golub-Reinsch

M
etodo de Golub-Reinsch-Chan

2mn2 32 n3

mn2 + n3

, V

2mn2 + 4n3

, U

2m2 n + 4mn2

, U1

7mn2 n3

, U, V

2m2 n + 4mn2 +

17 3
3 n
2
3
2m n + 19
3 n
3
3mn2 + 16
3 n
2m2 n + 11n3

, U1 , V

7mn2 +

3mn2 + 10n3

14 3
3 n
11 3
3 n

mn2 +

128

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

PROGRAM Svdre
C
parameter (m=5,n=3)
dimension a(m,n),sv(n),v(m,n),b(m),x(n),tmp(m)
C
data a/1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15./
data b/5.,5.,5.,5.,5./
C
call dcmsvd (a,m,n,sv,v)
C
ns = 0
sm = 0.0
do i = 1,n
sm = amax1(sm,sv(i))
end do
sp = sm*1.0e-6
do j = 1,n
s = 0.0
if (sv(j).gt.sp) then
ns = ns+1
do i = 1,m
s = s+a(i,j)*b(i)
end do
s = s/sv(j)
else
sv(j) = 0.0
endif
tmp(j) = s
end do
do j = 1,n
s = 0.0
do jj = 1,n
s = s+v(j,jj)*tmp(jj)
end do
x(j) = s
end do
C
print ( Rango de A:,i3),ns
print ( Soluci
on:, 3(f11.7:,)),x
print ( Valores singulares de A:,3(f11.7:,)),sv
C
end

Para nalizar este apartado, a modo de resumen, en la tabla 1.25, se comparan, por lo
que respecta al n
umero de operaciones involucradas en sus procesos, todos los metodos para
resolver el problema de mnimos cuadrados que hemos presentado en este captulo.

1.8

El problema generalizado de mnimos cuadrados

El denominado en la literatura problema generalizado de mnimos cuadrados consiste en determinar un vector x n que resuelva
minimizar (Ax b)T W 1 (Ax b),
x

(1.31)

129

1.8 El problema generalizado de mnimos cuadrados

Tabla 1.25
N
umero de operaciones necesarias para resolver el problema de mnimos cuadrados
minxn Ax b2 por distintos metodos
M
etodo

Operaciones

Ecuaciones Normales
Transformaciones de Householder
Transformaciones de Givens
Metodo de Gram Schmidt
Metodo de Gram Schmidt Modicado

n3
mn2
2 + 6
3
mn2 n3
2mn2 32 n3
mn2

mn2

Metodo de Golub-Reinsch (SVD)

2mn2 + 4n3

Metodo de Golub-Reinsch-Chan (SVD)

mn2 +

17 3
3 n

donde b m es un vector dado, A mn es una matriz conocida y W mm es una


matriz simetrica denida positiva, tambien conocida. Al problema as planteado tambien se le
denomina de ponderado de mnimos cuadrados.
Este problema surge frecuentemente al tratar de encontrar el estimador de mnimos cuadrados de un vector x relacionado con un conjunto de observaciones o muestra b mediante un
modelo lineal de la forma
Ax = b + ,
donde es un vector aleatorio desconocido de media cero y matriz de covarianzas 2 W . Si
W = I, cosa que ocurre cuando las componentes del vector no estan relacionadas, el estimador
de mnimos cuadrados coincide con el denominado de m
axima verosimilitud. Si W = B T B,
B mm , el problema (1.31) es equivalente a
minimizar B 1 (Ax b)2 ,
x

(1.32)

problema que, a su vez, se puede escribir en el formato tradicional de un problema de mnimos


cuadrados lineal; es decir, de la forma
2,
b
minimizar Ax
x
= B 1 b. Desafortunadamente, en la mayora de los problemas de este
donde A = B 1 A y b
tipo, A suele estar muy mal condicionada por lo que conviene tener cuidado con el metodo
que se utiliza para resolverlo numericamente; los basados en las ecuaciones normales o el de
Gram-Schmidt cl
asico, probablemente, no ser
an los mas adecuados.
Existe un metodo muy ecaz, dise
nado ex profeso para este caso, propuesto por Paige [1979
(las dos)]. Est
a basado en la idea de que (1.32) es equivalente a
minimizar
vT v
x, v
sujeta a Ax = b + Bv,

(1.33)

130

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

problema que est


a denido incluso cuando las matrices A y B no son de rango completo. En
lo sucesivo, con vistas a facilitar la exposici
on de la mecanica del metodo, supondremos que
ambas matrices s son de rango completo. El procedimiento a seguir en el caso de que A y B
no tuviesen rango completo vara muy poco.
Paige propone resolver (1.33) en tres pasos:
Paso 1. Transformar la matriz A mediante transformaciones ortogonales obteniendo:


R1
QA =
,
0
con R1 nn .
Aplicar las transformaciones ortogonales obtenidas a b y a B:


c
Qb = 1
c2

n
,
mn

C1
QB =
C2

n
.
mn

La condici
on de (1.33) de que Ax = b + Bv se puede entonces desdoblar y escribir de la
forma
R1 x = c1 + C1 v
0 = c2 + C2 v.

(1.34)
(1.35)

Por lo que respecta a la primera de estas ecuaciones, para cualquier vector v m , se


puede determinar uno, x, que la satisfaga.
Paso 2. Determinar una matriz ortogonal P mm tal que


P C2T

0
=
ST

n
,
mn

(1.36)

donde S (mn)(mn) es una matriz triangular superior. Si B no es singular, S


tampoco lo sera.
Expresando la ecuaci
on (1.35) de la forma
0 = c2 + C2 P T P v,
haciendo

u1
Pv = u =
,
u2

se obtiene la ecuacion
0 = c2 + Su2 .
Como P es ortogonal, v2 = u2 . El mnimo de (1.33) se obtendr
a haciendo
u1 = 0
u2 = S 1 c2
v = P2T u2 ,
donde

P1
P =
P2

n
.
mn

1.9 Mnimos cuadrados lineales con restricciones lineales

Paso 3. Resolver

131

R1 x = c1 C1 P2T S 1 c2

obteniendose as el vector buscado, x.


Un algoritmo que lleve a cabo estas ideas necesita O( 32 m3 m2 n mn2 + 32 n3 ) operaciones. Seg
un demuestra Paige, el procedimiento es numericamente estable.

1.9

Mnimos cuadrados lineales con restricciones lineales

Un problema lineal de mnimos cuadrados con restricciones se puede presentar de diversas


formas:
MCI (Mnimos Cuadrados con Restricciones de Igualdad). Dadas dos matrices,
A mn y B pn , y dos vectores, b m y d p , determinar un vector
x que resuelva
minimizar Ax b2
x
sujeta a Bx = d.

MCDQ (Mnimos Cuadrados con Restricciones Cuadr


aticas de Desigualdad). Dadas dos matrices, A mn y B pn , y dos vectores, b m y d p ,
determinar un vector x que resuelva
minimizar Ax b2
x
sujeta a Bx d2 ,
donde > 0.
MCLD (Mnimos Cuadrados con Restricciones Lineales de Desigualdad). Dadas
dos matrices, A mn y B pn , y un vector b m , determinar un vector
x que resuelva
minimizar Ax b2
x
sujeta a l Bx u,
donde l p y u p .
En este apartado nos centraremos en el mas frecuente de todos ellos: el de mnimos cuadrados con restricciones lineales de igualdad, MCI.
MCI tiene soluci
on si y s
olo si la ecuacion Bx = d es compatible. Si rango(B) = p,
recordemos, Bx = d es compatible para cualquier d.
De existir soluci
on de MCI, esta es u
nica si y s
olo si la interseccion de los conjuntos ker(A)
y ker(B) es el conjunto vaco; es decir, si
ker(A) ker(B) = ,

(1.37)

132

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

o, lo que es lo mismo, que

rango

A
B

= n.

Si no se cumple (1.37), existir


a un vector z = 0 tal que Az = Bz = 0, por lo que, si x es
una soluci
on de MCI, tambien lo sera x + z. En este caso, como venimos observando cuando
existe la posibilidad de que haya muchas soluciones, siempre es posible obtener una de norma
eucldea mnima.
Cualquier algoritmo que resuelva el problema MCI con un mnimo de robustez deber
a
comprobar la compatibilidad de Bx = d. Si no se sabe a priori si esto es as, MCI se puede
reformular de la siguiente manera:
minimizar Ax b2
xS
S = {x : Bx d2 = min}.

(1.38)

Este problema siempre tendr


a una soluci
on de norma eucldea mnima.

1.9.1

Resoluci
on num
erica del problema

Expondremos tres metodos: dos de ellos basados en la idea de transformar el problema original
en otro sin restricciones, y el u
ltimo en la conversi
on a un problema generalizado de mnimos
cuadrados como el descrito anteriormente.
1.9.1.1

M
etodo de eliminaci
on directa

Comienza reduciendo la matriz B mediante transformaciones ortogonales a otra triangular


superior o trapezoidal (ver el teorema 1.18 de la p
agina 99) de la forma


R11 R12
QB BPB =
0
0

r
,
pr

(1.39)

donde r = rango(B) p y R11 rr es una matriz triangular superior no singular.


Aplicando las transformaciones que representa la matriz QB al vector d, se tiene que

1 
d

QB d = d =
d2

y, por lo tanto, la restricci


on del problema, Bx = d, se puede escribir
1,
[R11 , R12 ]
x=d

(1.40)

2 = 0 si y solo si la restriccion es compatible.


= PBT x, siendo d
donde x
Si la permutaci
on que representa PB se aplica tambien a las columnas de la matriz A y se
reordena el resultado conforme a (1.39), se tiene que


1
x b = [A1 , A2 ] x
Ax b = A
b,
2
x

1.9 Mnimos cuadrados lineales con restricciones lineales

133

1 de esta u
donde A = APB . Eliminando la variable x
ltima expresi
on y utilizando (1.40), es
1
1 = R11
2 ), se obtiene que
(d1 R12 x
decir, que x

2 b,
Ax b = A2 x
donde

1
A2 = A2 A1 R11
R12
= b A1 R1 d

b
11 1 .

De acuerdo con todo este razonamiento, MCI es equivalente al siguiente problema:


2,
2 b
minimizar A2 x
2
x

(1.41)

donde A2 m(nr) .
Si se cumple la condici
on (1.37), el rango de la matriz A2 es n r y el problema (1.41) tiene
una u
nica soluci
on. En efecto, si rango(A2 ) < n r existir
a entonces un vector v = 0 tal que
1
R22 v = 0.
A2 v = A2 v A1 R11
1
R12 v, resulta que
Si se hace u = R11

R11 u + R12 v = 0
A1 u + A2 v = 0.
De acuerdo con esto, el vector

w = PB

u
= 0
v

pertenece al n
ucleo de A y B por lo que no se cumple (1.37).
Si se cumple (1.37), se puede efectuar la descomposicion QR de la matriz A2 obteniendose


R22
QA A2 =
0

c1
y QA b =
,
c2

donde R22 (nr)(nr) es una matriz triangular superior regular.


, resolviendo el sistema triangular
Calculando despues x




1 
R11 R12
d
=
x
,
0 R22
c1

.
se llega, nalmente, a la soluci
on del problema MCI, x, haciendo x = PB x
que satisface (1.40) es el mismo que minimiza Bx d2 .
El conjunto de vectores x = PB x
La forma de proceder que hemos descrito, por tanto, no s
olo resuelve MCI sino tambien su
forma equivalente (1.38).
Si no se cumple la condici
on (1.37), la soluci
on del problema (1.41) no es u
nica; para
conseguir una de norma eucldea mnima habra que efectuar permutaciones de columnas al
factorizar en la forma QR la matriz A2 y luego proceder de la misma forma que se haca en

134

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

el apartado 1.7.2.2.1.3 de la p
agina 98 al exponer c
omo resolver Ax = b con una matriz A de
rango incompleto.
El procedimiento que se ha descrito se puede codicar f
acilmente en un programa en Fortran 77 como el que sigue. Concretamente, el codigo que se lista resuelve
(
( 0,2113
(
( 0,0824

minimizar (
( 0,7599
x3
(
( 0,0087


sujeta a
La soluci
on de este problema es

0,4524
0,8075
0,4832
0,6135

(
0,6538
3,0775 (

(
0,4899
3,1671 (
x
(
0,7741
4,0485 (
(
0,9626
4,1237 2

4,3393
0,8096 0,2749 0,9933
x=
.
5,1169
0,8474 0,8807 0,8360

x = 2 .
3
PROGRAM Mci
C
implicit double precision (a-h,o-z)
parameter (m1=4,m2=2,n=3)
dimension a(m1,n),b(m1),c(m2,n),d(m2),w(m1),x(n),ipiv(n)
C
data
+
data
data
data
data

C
C
C

a/0.2113,0.0824,0.7599,0.0087,0.4524,0.8075,0.4832,
0.6135,0.6538,0.4899,0.7741,0.9626/
b/3.0775,3.1671,4.0485,4.1237/
c/0.8096,0.8474,0.2749,0.8807,0.9933,0.8360/
d/4.3393,5.1169/
tau/0.000001/
|R
R |
*** Reducci
on QCP=| 11 12| ***
|0
0 |
ira = min0(m2,n)
do i = 1,ira
imax = i
rmax = 0.0
do j = i,n
! B
usqueda de columna con
h = 0.0
! mayor norma eucl
dea
do k = i,m2
! en componentes I a N de
h = h+c(k,j)**2
! matriz C.
end do
if (h.gt.rmax) then
rmax = h
imax = j
endif
end do
ipiv(i) = imax
if (imax.ne.i) then
do j = 1,m2
! Intercambio de columnas:
tmp
= c(j,i)
!
c(j,i)
= c(j,imax)
!
en matriz C.
c(j,imax) = tmp
!
end do
!
do j = 1,m1
!
---------------tmp
= a(j,i)
!

1.9 Mnimos cuadrados lineales con restricciones lineales

a(j,i)
= a(j,imax)
!
en matriz A.
a(j,imax) = tmp
!
end do
!
endif
if (i+1.le.m2) then
call h1 (beta,i,i+1,m2,w,c(1,i))
! Aplicar transformaci
on
do j = i+1,n
! de Householder a columnas
call h2 (beta,i,i+1,m2,w,c(1,j)) ! i a n de la matriz C.
end do
call h2 (beta,i,i+1,m2,w,d)
! Aplicar trans. a vector d.
endif
end do
C
k = ira
do j = 1,ira
if (dabs(c(j,j)).le.tau) then
k = j-1
exit
endif
end do

! Determinar rango de C.

C
do i = 1,m1
!
a(i,1) = a(i,1)/c(1,1)
!
do j = 2,ira
!
s = 0.0
do k = 1,j-1
s = s+a(i,k)*c(k,j)
end do
a(i,j) = (a(i,j)-s)/c(j,j)
end do
do j = ira+1,n
s = 0.0
do k = 1,ira
s = s+a(i,k)*c(k,j)
end do
a(i,j) = a(i,j)-s
end do
s = 0.0
do k = 1,ira
s = s+a(i,k)*d(k)
end do
b(i) = b(i)-s
end do

Determinar A

y B
2

C
do i = ira+1,n
k = i-ira
call h1 (beta,k,k+1,m1,w,a(1,i))
do j = i+1,n
call h2 (beta,k,k+1,m1,w,a(1,j))
end do
call h2 (beta,k,k+1,m1,w,b)
end do

! Aplicar transformaci
on
! de Householder a columnas
! IRA+1 a N de matriz A; es
! decir a
!
A
!
2
! Aplicar trans. a vector B.

n1
= n-ira
x(n) = b(n1)/a(n1,n)
do i = n1-1,1,-1
s = 0.0
do j = i+1,n1
s = s+a(i,j+ira)*x(j+ira)

! Resolver el sistema
!
!
|R
R || | |D |
!
| 11 12||x|=| 1|
!
|0
R || | |C |
!
|
22|| | | 1|

135

136

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

end do
x(i+ira) = (b(i)-s)/a(i,i+ira)
end do
do i = ira,1,-1
s = 0.0
do j = i+1,n
s = s+c(i,j)*x(j)
end do
x(i) = (d(i)-s)/c(i,i)
end do
C
do j = ira,1,-1
if (ipiv(j).ne.j) then
l
= ipiv(j)
tmp = x(l)
x(l) = x(j)
x(j) = tmp
endif
end do

! Deshacer permutaci
on intro! ducida por pivotaciones.

C
print ( Rango de C:,i3),k
print ( Soluci
on:, 6(f8.4:,)),x
C
end
subroutine h1(beta,i,j,m,w,x)
C
double precision beta,w(m),x(m)
C
beta = 0.0
do k = j,m
w(k) = x(k)
beta = beta+w(k)*w(k)
end do
w(i) = x(i)
sigma = sign(sqrt(beta+w(i)*w(i)),x(i))
w(i) = w(i)+sigma
beta = 2.0/(beta+w(i)*w(i))
x(i) = -sigma
C
return
end
subroutine h2(beta,i,j,m,w,x)
C
double precision beta,w(m),x(m),s
C
s = w(i)*x(i)
do k = j,m
s = s+w(k)*x(k)
end do
s
= s*beta
x(i) = x(i)-w(i)*s
do k = j,m
x(k) = x(k)-w(k)*s
end do
C
return
end

1.9 Mnimos cuadrados lineales con restricciones lineales

1.9.1.2

137

M
etodo de la base del subespacio n
ucleo de la matriz de restricciones

En este apartado supondremos que rango(B) = p. El metodo inicialmente calcula una sucesi
on
de transformaciones ortogonales, representadas por la matriz QB nn , tales que


T T
QB
B

RB
,
=
0

donde RB pp es una matriz triangular superior regular. Si se hace


QB = [Q1 , Q2 ],

Q1 np

con

y Q2 n(np) ,

entonces, ker(B) = Im(Q2 ); es decir, los vectores columna de Q2 forman una base del subespacio
n
ucleo de B. Cualquier vector x n que satisfaga la restriccion Bx = d se puede representar
como
x = x1 + Q2 y 2 ,
(1.42)
T
d. En consecuencia,
donde x1 = B d = Q1 RB

Ax b = Ax1 + AQ2 y 2 b,
donde y 2 np , por lo que resolver MCI es equivalente a
minimizar (AQ2 )y 2 (b Ax1 )2 .
y2

(1.43)

on de este u
ltimo problema de norma eucldea mnima; es decir,
Sea y 2 la soluci
y 2 = (AQ2 ) (b Ax1 ),
y sea x un vector de la forma (1.42). Como x1 Q2 y 2 , entonces
x22 = x1 22 + Q2 y 2 22 = x1 22 + y 2 22
siendo x precisamente el vector solucion de MCI de norma eucldea mnima.
Supongamos ahora que se cumple la condici
on (1.37). La matriz


RB
B
0
C=
QB =
A
AQ1 AQ2

debe tener rango n. Si esto es as, todas las columnas de C son linealmente independientes por
lo que rango(AQ2 ) = n p. Se puede entonces calcular la descomposicion QR,


T
(AQ2 )
QA

RA
=
,
0

donde RA es una matriz triangular superior regular. La u


nica soluci
on de (1.43) se puede
calcular de
RA y 2 = c1 ,
donde

c1
c=
c2

= QTA (b Ax1 ),

obteniendose, nalmente, x = x1 + Q2 y 2 , la u
nica soluci
on de MCI.

138

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

1.9.1.3

M
etodo de la ponderaci
on

Se basa en una idea muy simple. Sup


ongase que se desea que en un problema de mnimos
cuadrados se satisfagan exactamente alguna de las ecuaciones. Una forma de conseguirlo consiste en asignar un peso, , a esas ecuaciones mucho mayor que al resto y resolver el problema
resultante sin condiciones mediante alguno de los metodos estudiados. Es decir, para resolver
MCI, calcular la soluci
on de
(


(
( B
(
d (
(
x
.
minimizar (
A
b (
x()

(1.44)

Observese que si se cumple la condicion (1.37), este es un problema de mnimos cuadrados de


rango completo.
Para resolver (1.44) se puede aplicar el metodo sugerido en el apartado relativo al problema
generalizado de mnimos cuadrados, puesto que este problema es como el introducido entonces.

Referencias
Todo el material incluido en este captulo es bastante estandar en la literatura de an
alisis
numerico, algebra lineal numerica e incluso de algebra lineal. Las referencias b
asicas esenciales
en las que se puede encontrar casi todo lo expuesto son: Ciarlet [1988]; Forsythe, Malcolm y
Moler [1977]; Golub y Van Loan [1983] y [1989]; Lascaux y Theodor [1986]; Stewart [1973];
Stoer y Bulirsch [1980]; Strang [1976] y Wilkinson [1965]. M
as especializado solo en mnimos
cuadrados pero tambien esencial, Lawson y Hanson [1974] y [1995]. Muy recientemente, Gill,
Murray y Wright [1991] y Bj
ork [1996].
Todos los programas de ordenador son del autor; est
an basados en los correspondientes
algoritmos. El que plasma el de Bunch y Kaufman sigue el programa SSIFA de Dongarra,
Bunch, Moler y Stewart [1979]. El relativo a la descomposici
on en valores singulares de una
matriz esta basado en el de Forsythe, Malcolm y Moler [1977] y en el de Press, Flannery,
Teukolsky y Vetterling [1986]. Otros libros donde se pueden encontrar programas parecidos son:
Atkinson, Harley y Hudson [1989]; Forsythe, Malcolm y Moler [1977]; Hager [1988]; Lascaux y
Theodor [1986]; Lawson y Hanson [1974] y [1995]; Longley [1984] y Press, Flannery, Teukolsky
y Vetterling [1986]. En Pascal en Phillips y Cornelius [1986]. Una buena revisi
on del software
existente de este tipo hasta la fecha de su publicaci
on puede encontrarse en Rice [1983] y [1993],
y More y Wright [1993]. Paquetes como LINPACK, EISPACK y LAPACK incluyen variantes
de todos los algoritmos presentados.
El apartado 1.5 sigue enteramente a Golub y Van Loan [1983] y [1989], con algunas consideraciones de Stewart [1973], Bunch y Kaufman [1977] y Dongarra, Bunch, Moler y Stewart
[1979].
El material del apartado 1.6 es tambien estandar. Est
a basado en este caso en Dennis y
Schnabel [1983], Forsythe, Malcolm y Moler [1977] y Lascaux y Theodor [1986].
Los resultados teoricos del apartado 1.7 se pueden encontrar en Lawson y Hanson [1974] y
[1995], Luenberger [1969], Golub y Van Loan [1983l y [1989] y Bj
ork [1990] y [1996]. Algunas
de las consideraciones son de Stoer y Bulirsch [1980]. Como hemos dicho, Golub y Van Loan
[1983] y [1989] son esenciales para estudiar las cuestiones numericas relativas a los problemas
lineales de mnimos cuadrados. Una buena descripci
on del problema se puede encontrar en
Hager [1988]. Los metodos numericos del problema de rango incompleto o indeterminado son

Ejercicios

139

de Hager [1988] y Lascaux y Theodor [1986]. El metodo de las transformaciones r


apidas de
Givens se ha obtenido de Hager [1988].
Referencias de los comienzos historicos de los asuntos estudiados en este captulo se pueden
encontrar en Longley [1984] y Schrijver [1986].

Ejercicios
1.1. Demostrar que la matriz A nn es regular si y solo si la ecuacion Ax = 0 tiene solucion
distinta de x = 0.
1.2. Demostrar que:
a) Si A tiene rango completo, AT A es regular.
b) Si A tiene vectores columna linealmente dependientes, AT A es singular.
c) El sistema AT Ax = AT b es siempre compatible para cualquier b (de dimension adecuada);
incluso si AT A es singular.
1.3. Una matriz cuadrada, T , es triangular en bloques si se puede reordenar de la forma

T11 T12 T1m


0 T22 T2m
.
T =
.
. ,
..
..
..
0

1.4.
1.5.
1.6.
1.7.

0 Tmm

donde cada bloque Tii es cuadrado. Demostrar que T es regular si y solo si sus bloques diagonales
on de
Tii son regulares, y que su inversa tambien es triangular en bloques con la misma partici
columnas que T .
Deducir una forma ecaz del algoritmo de eliminaci
on de Gauss para reducir una matriz de
Hessenberg.
Igual que en el ejercicio anterior para el caso de una matriz tridiagonal.
Igual que los dos ejercicios anteriores para el caso de una matriz en banda con ancho de banda
igual a 2k + 1, donde k indica la la.
Sea A una matriz simetrica con a11 = 0. Despues de la primera etapa de la eliminacion de Gauss,
A tiene la forma


a11 aT1
.
0 A2

Demostrar que A2 es simetrica.


1.8. Sea A una matriz de diagonal dominante. Despues de la primera etapa de la eliminacion de Gauss,
A tiene la forma


a11 aT1
.
0 A2
Demostrar que A2 es diagonal dominante.
1.9. Demostrar que si las matrices B y C son regulares, (BC) (B) (C).
1.10. Demostrar que 2 (AT ) = 2 (A). Se cumple este resultado con la condicion uno e innito?
1.11. Dada la matriz


0,550 0,423
A=
:
0,484 0,372

140

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

a) Encontrar unos vectores b y b tales que la solucion de


A(x + xb ) = b + b

(1.45)

satisfaga

b
xb 
(A)
.
x
b
b) Encontrar unos vectores b y b tales que la solucion de (1.45) satisfaga
b
xb 
 (A)
.
x
b
c) Se puede encontrar una A tal que la solucion exacta de
(A + A)(x + xA ) = b
satisfaga

xA 
A
?
(A)
x + xA 
A
1.12. Sea la siguiente matriz triangular superior con un pico en la primera columna,

.
V =

a) Describir como se llevara a cabo, mediante rotaciones elementales, la transformacion de


esta matriz en otra que tuviese la primera columna situada en la u
ltima.
b) Sea A una matriz simetrica denida positiva cuya factorizaci
on de Cholesky es GT G y sea P
la matriz de permutacion que reeja un u
nico intercambio de las o columnas. Basandose en
el resultado del punto anterior, describir un metodo que calcule la factorizacion de Cholesky
de P T AP a partir de G.
1.13. Resolver el sistema lineal

2x1 + x2 2x3 = 4
4x1 + x2 x3 = 7
6x1 x2 + 6x3 = 8.
Despues, cambiar el elemento 8 del termino independiente por un 7 y volverlo a resolver. Que
pasa?
1.14. Resolver el sistema lineal
5x1 + 3x2 + 10x3 = 5
2x1 + 0,2x2 + 3x3 = 1
x1 0,4x2 + 3x3 = 6.
Resolverlo despues usando pivotacion total.
1.15. Descomponer la matriz
,
1 2 3
A= 2 8 7
2 16 12
en la forma L1 U . Obtener la solucion del sistema Ax = b, donde
,
2
b= 7 .
10

Ejercicios

141

1.16. Considerese la matriz de Hessenberg

1,2113 0,8096 0,4832 0,6538


0,0824 1,7424 0,6135 0,4899
A=
.
0,6524 1,2749 0,7741
0,8807 1,9626
Encontrar una matriz triangular superior U y matrices elementales L1 , L2 y L3 tales que
A = L1 L2 L3 U.


1.17. Considerese la matriz


=

0 1
1


:

a) Calcular explcitamente la inversa de .


b) Deducir una f
ormula de () respecto a cualquier norma.
c) Supongase que || 1 y considerese el producto k de k (k > 1) matrices de la forma de
. Dar un lmite superior de la condicion de k .
1.18. Resolver los siguientes sistemas lineales:
1/4x1 + 1/5x2 + 1/6x3 = 9
a) 1/3x1 + 1/4x2 + 1/5x3 = 8
x2 +
2x3 = 8.
1/2x1 +
b)

3,333x1 + 15920x2 10,333x3 = 15913


2,222x1 + 16,71x2 + 9,612x3 = 28,544
1,5611x1 + 5,1791x2 + 1,6852x3 = 8,4254.

4,01x1
1,23x1
c)
1,43x1
0,73x1
1x1
1/2x1
d)
1/3x1
1/4x1

+
+
+
+

+
+
+
+

1,23x2
7,41x2
2,41x2
3,02x2

1/2x2
1/3x2
1/4x2
1/5x2

+
+
+
+

+
+
+

1,43x3
2,412x3
5,792x3
1,11x3

1/3x3
1/4x3
1/5x3
1/6x3

+
+
+
+

0,73x4
3,02x4
1,11x4
6,41x4

1/4x4
1/5x4
1/6x4
1/7x4

=
=
=
=

= 5,94
= 14,07
= 8,52
= 7,59.

1/6
1/7
1/8
1/9.

1.19. Repetir el ejercicio anterior usando el metodo de Gauss-Jordan.


1.20. Comparar las operaciones necesarias para resolver un sistema lineal de ecuaciones 10.000 10.000
por los metodos de eliminacion de Gauss, Gauss-Jordan y Cholesky (supuesto que se pueda, claro).
1.21. Considerese la matriz
,
, 2 4
3
A= 1 2
y el vector b = 2 :
1 2
1
a) Cual es el rango de la matriz A? Obtener una expresion general de los vectores del subespacio Im(A).
b) Demostrar que la dimension del subespacio ker(AT ) es 2. Obtener dos vectores linealmente
independientes de este u
ltimo subespacio. Deducir una expresi
on general de dicho subespacio.
c) Encontrar dos vectores bI Im(A) y bK ker(AT ) tales que b = bI + bK .

142

Captulo 1. Metodos directos de solucion de sistemas de ecuaciones lineales

1.22. Resolver el sistema

1.23. Resolver el sistema

x1 + 5x2 = 36
2x1 x2 = 45
3x1 + x2 = 0.
x1 + 2x2 3x3 = 42
5x1 x2 + 3x3 = 54.

1.24. Resolver el siguiente problema de optimizacion:


minimizar 4x12 + 9x22
s. a
8x1 + 9x2 = 15.
1.25. Cual es el punto del plano y = 2x1 + x2 12 mas cerca del origen?
1.26. Deducir la transformaci
on de Householder que anula el segundo elemento del vector [5, 12]T .
1.27. Calcular la factorizacion QR de la matriz

A=


5 13
.
12 26

1.28. Igual que el ejercicio anterior usando transformaciones de Givens.


1.29. Demostrar que cualquier matriz de Householder 2 2 tiene la forma


a b
H=
,
b a
donde a2 + b2 = 1.
1.30. Dada la matriz

,
A=

0,6 0,8 0
0,8 0,6 0
0
0 1

- ,

1 1
0 2
0 0

a) Determinar la solucion del sistema Ax = b, donde b = [10, 20, 10]T .


b) Determinar la solucion del sistema AT x = b, donde b = [20, 40]T .

Captulo

METODOS
ITERATIVOS DE
DE SISTEMAS DE
SOLUCION
ECUACIONES LINEALES

N EL CAPITULO dedicado a los metodos directos de solucion de sistemas de ecuaciones lineales dejabamos entrever las dicultades con que se puede encontrar un
usuario de esos metodos a la hora de resolver problemas grandes o muy grandes
(miles, decenas o cientos de miles de ecuaciones e incognitas). Como ejemplo, si se
desea modelizar la temperatura en las distintas partes de un cuerpo tridimensional con forma
de paraleleppedo, suponiendo que la temperatura de una partcula de ese cuerpo depende de
su posici
on, su valor se puede aproximar discretizando cada una de las tres dimensiones del
cuerpo en unos intervalos determinados y considerando cada uno de los peque
nos trocitos de
la malla que se obtiene. Si cada lado del paraleleppedo se divide en 100 intervalos la malla
resultante tendr
a 100100 100 = 1.000.000 de elementos o peque
nos cuerpos. A pesar de que
en este caso existe un solo parametro fsico a considerar, la temperatura, el modelo adoptado
involucra c
alculos con un mill
on de variables o inc
ognitas: la temperatura en cada elemento.
Tal como se han expuesto, los metodos directos no se deben aplicar a sistemas de muy
grandes dimensiones, como el del ejemplo anterior, a no ser que se disponga de grandes y potentes ordenadores o que la matriz del sistema presente una estructura que permita, utilizando
o desarrollando tecnicas ad hoc, su reduccion o transformaci
on a otra sencilla de manipular.
Afortunadamente, muchos de los grandes sistemas de ecuaciones lineales que se plantean habitualmente en la industria y en la tecnica presentan unas matrices de coecientes en las que los
elementos distintos de cero son muy pocos. Tal es el caso, por ejemplo, de los que surgen en el
an
alisis y planicaci
on de sistemas electricos de generacion y transporte de energa, en problemas de contorno para ecuaciones en derivadas parciales, en an
alisis de estructuras mecanicas
mediante elementos nitos, en problemas de transmisi
on de calor, y en muchos otros. En el
143

144

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

caso del ejemplo anterior se puede llegar a una tal matriz sin m
as que asumir que la temperatura en cada uno de los elementos denidos s
olo esta ntimamente relacionada con la de los
mas pr
oximos a el. El lmite mas o menos amplio de esa proximidad denir
a una matriz de
coecientes mas o menos llena de elementos.
En los u
ltimos veinticinco a
nos se han venido desarrollado tecnicas especiales, sencillas al
principio y cada da mas sosticadas, para manipular matrices con pocos elementos no nulos
matrices dispersas y poder aplicar en ellas los procedimientos numericos directos a los que
nos hemos referido.
Una forma cl
asica de resolver ciertos sistemas de ecuaciones lineales de grandes dimensiones,
sin utilizar los metodos directos, la conforman los metodos iterativos. A ellos y a las condiciones
en las cuales se pueden aplicar se dedica este captulo.
La idea b
asica de los metodos iterativos consiste en llegar a la solucion del problema mediante una sucesi
on de soluciones que converja a aquella. Estos metodos no proporcionan,
teoricamente, la soluci
on exacta aunque s permiten, cuando funcionan bien, acercarse a ella
tanto como se desee.
Si consideramos que el problema a resolver es el de determinar un vector x tal que Ax = b,
la idea com
un de todos los metodos iterativos estriba en descomponer la matriz de coecientes
A de la forma
A = R S,
(2.1)
de tal manera que R sea invertible y con inversa f
acilmente calculable (lo cual ocurre, por
ejemplo, si R es diagonal o triangular). Con esta descomposici
on la ecuaci
on Ax = b se puede
escribir
Rx = Sx + b,
o
x = R1 (R A)x + R1 b
(2.2)
= (I R1 A)x + R1 b
= M x + c,
donde M = I R1 A y c = R1 b.
La ecuacion x = M x + c sugiere la denici
on de un esquema iterativo del tipo
x(k+1) = M x(k) + c

(2.3)

con el que, partiendo de un vector inicial arbitrario, x(0) , se obtenga una sucesion de vectores
que converja a la soluci
on de la ecuaci
on Ax = b. El metodo iterativo ser
a convergente si
lim x(k) = x.

Un caso particular de esquema iterativo es el que dene el denominado de Richardson,


x(k+1) = (I A)x(k) + b,
al que se llega escribiendo la ecuacion Ax = b como x = (I A)x + b.
Los metodos basados en esquemas iterativos como los expuestos se denominan metodos
iterativos estacionarios pues la transici
on del punto x(k) a x(k+1) no depende de lo que ocurre
en iteraciones precedentes. Las tecnicas iterativas rara vez se emplean para resolver sistemas
de ecuaciones lineales de peque
na dimensi
on pues el tiempo y n
umero de iteraciones requerido
para lograr una precisi
on suciente en la soluci
on exceden a los de los metodos directos.

2.1 Metodo de Jacobi

2.1

145

M
etodo de Jacobi

El primero de los metodos que consideramos es el que Carl Gustav Jacobi (1804-1851) desarroll
o
en 1845. Su mecanica es muy simple: supongamos que se desea resolver el sistema de tres
ecuaciones lineales con tres incognitas
a11 x1 + a12 x2 + a13 x3 = b1
a21 x1 + a22 x2 + a23 x3 = b2
a31 x1 + a32 x2 + a33 x3 = b3 .
Admitiendo que los coecientes a11 , a22 y a33 son distintos de cero, se puede despejar de la
primera ecuacion la inc
ognita x1 , de la segunda x2 y x3 de la tercera, resultando
1
(b1 a12 x2 a13 x3 )
a11
1
x2 =
(b2 a21 x1 a23 x3 )
a22
1
x3 =
(b3 a31 x1 a32 x2 ).
a33

x1 =

Estas expresiones y la ecuacion general (2.3) sugieren emplear como metodo iterativo el que
denen las siguientes relaciones de recurrencia:
(k+1)

x1

(k+1)

x2

(k+1)

x3

1
a11
1
=
a22
1
=
a33

#
#

(k)

(k)

(k)

(k)

(k)

(k)

b1 a12 x2 a13 x3
b2 a21 x1 a23 x3
b3 a31 x1 a32 x2

La generalizacion de esta idea es la base del metodo iterativo de Jacobi. La relaci


on general de
recurrencia para un sistema n n es:

(k+1)

xi

1
(k)
b

aij xj
;
i

aii
j=1

i = 1, . . . , n.

(2.4)

j
=i

Razonando tal y como se haca al principio de este captulo, si se descompone la matriz de


coecientes del sistema, A, de la forma sugerida en (2.1) haciendo
A = D (D A),
donde D es la matriz diagonal formada con los elementos de la diagonal principal de A, es

146

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

decir,

a11
0

D = ...

0
0

0
a22
.
..
0
0

0
0

0
0

..
..
..
.
.
. ,
an1 n1 0

0
ann

(2.5)

el esquema iterativo del metodo de Jacobi escrito en forma matricial, a partir de las expresiones
(2.2) y (2.3), resulta
*

x(k+1) = I D1 A x(k) + D1 b.
Si todos los elementos aii , i = 1, . . . , n, son no nulos, la matriz D es invertible. A la matriz
J = I D1 A
que caracteriza el metodo de Jacobi se la denomina matriz de Jacobi.
Ejemplo 2.1 Resolvamos el sistema de ecuaciones lineales
10x1 x2 + 2x3
=
6
x1 + 11x2 x3 + 3x4 = 25
2x1 x2 + 10x3 x4 = 11
3x2 x3 + 8x4 = 15.
Aplicando la relaci
on general de recurrencia (2.4) a este caso, partiendo del punto inicial
a:
x(0) = [0, 0, 0, 0]T , se tendr
(1)

(1)

(1)

(1)

x1
x2
x3
x4

1 (0)
10 x2
1 (0)
11 x1
(0)
51 x1

1 (0)
10 x2
3 (0)
8 x2

1 (0)
5 x3

1 (0)
11 x3

3 (0)
11 x4
1 (0)
10 x4

1 (0)
8 x3

3
5

0,6000

25
11

2,2727

11
10

= 1,1000

15
8

1,8750.

Las iteraciones que siguen se generan de forma similar obteniendose los resultados de la siguiente tabla.
k

(k)
x1
(k)
x2
(k)
x3
(k)
x4

0,0000
0,0000
0,0000
0,0000

0,6000
2,2727
-1,1000
1,8750

1,0473
1,7159
-0,8052
0,8852

0,9326
2,0533
-1,0493
1,1309

1,0152
1,9537
-0,9681
0,9739

9
0,9997
2,0004
-1,0009
1,0006

2.1 Metodo de Jacobi

147

La decision de parar el proceso iterativo se puede basar en cualquier criterio que se estime
adecuado. En este caso hemos forzado a que la parada se produzca cuando
x(k) x(k1) 
< 103 .
x(k) 
En k = 9 se cumple que
x(9) x(8) 
8,0 104
= 0,0003999 < 103 .
=
2,0004
x(9) 
La cantidad 103 se ha considerado suciente como aproximaci
on a la soluci
on de este ejemplo.
El algoritmo que representa el procedimiento iterativo de Jacobi para resolver la ecuaci
on
Ax = b, partiendo de un punto inicial x(0) dado, es el que se describe en la tabla 2.1. Observese
que para llegar a la soluci
on solo es necesario efectuar el producto de una matriz por un vector
y restar al resultado otro vector.
Tabla 2.1
Algoritmo de Jacobi para la resoluci
on de Ax = b
while x(k+1) x(k)  /x(k+1)  > T ol do
for i = 1 to n

n

1

a(i, j)x(j)
x(i)
b(i)
a(i, i)
j=1
j=i

end
end

La codicaci
on en Fortran 77 de ese algoritmo para resolver el ejemplo 2.1 es la que sigue.
PROGRAM Jacobi
C
parameter (n = 4)
real a(n,n),b(n),x(n),y(n),s1,su,sm
C
data a/10.,-1.,2.,0.,-1.,11.,-1.,3.,2.,-1.,10.,-1.,0.,3.,-1.,8./
data b/6.,25.,-11.,15./
data sm/1.0/
C
x = 0.
C
C
C

*** Proceso iterativo ***


do while (sm.ge.0.001)
s1 = 0.0
do i = 1,n
su = b(i)

148

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

do j = 1,i-1
su = su-a(i,j)*x(j)
end do
do j = i+1,n
su = su-a(i,j)*x(j)
end do
y(i) = su/a(i,i)
s1
= amax1(s1,abs(y(i)))
end do
sm = 0.0
do i = 1,n
sm
= amax1(abs(x(i)-y(i))/s1,sm)
x(i) = y(i)
end do
print *,x
end do

! Salida de resultados

C
end

Ejemplo 2.2 Resolvamos con el metodo de Jacobi el sistema


10x1 + x2 = 11
2x1 + 10x2 = 12
partiendo del punto x(0) = [0, 0]T . Los puntos que se generan en el proceso iterativo son los
de la tabla que sigue.
k
(k)

x1
(k)
x2

0,0000
0,0000

1,1000
1,2000

0,9800
0,9800

1,0020
1,0040

0,9996
0,9996

1,00004
1,00008

La soluci
on exacta es [1, 1]T .
Resolvamos ahora el sistema
x1 + 10x2 = 11
10x1 + 2x2 = 12
cuya soluci
on es tambien [1, 1]T . Partiendo de x(0) = [0, 0]T , los cinco primeros puntos que
se generan utilizando el esquema iterativo de Jacobi son esta vez los que recoge la tabla que
sigue.
k
(k)

x1
(k)
x2

0,0000
0,0000

11
6

-49
-49

501
251

-2499
-2499

25001
12501

Los dos sencillos sistemas de este ejemplo nos permiten constatar que la sucesion de puntos
que genera el metodo de Jacobi puede converger a la soluci
on o diverger de esta. Para poderlo
aplicar con garanta, por tanto, se hace necesario denir en que condiciones converge y se puede
aplicar. Volveremos sobre esta cuestion m
as adelante.

2.2 Metodo de Gauss-Seidel

2.2

149

M
etodo de Gauss-Seidel

En el metodo de Jacobi cada una de las componentes del vector soluci


on en la iteraci
on k +1 se
determina a partir de las de la iteraci
on k. En el de Carl Friedrich Gauss (1777-1855) y Phillip
Ludwig Seidel (1874) se modica el de Jacobi utilizando en el c
alculo de cada componente de la
solucion en una iteraci
on el valor de aquellos ya calculados en esa misma iteracion. Volviendo
al sistema de tres ecuaciones que considerabamos para introducir el metodo de Jacobi,
a11 x1 + a12 x2 + a13 x3 = b1
a21 x1 + a22 x2 + a23 x3 = b2
a31 x1 + a32 x2 + a33 x3 = b3 ,
suponiendo una vez m
as que a11 , a22 y a33 son distintos de cero, el esquema iterativo del
metodo de Gauss-Seidel es el siguiente:
$
1 #
(k)
(k)
(k+1)
b1 a12 x2 a13 x3
x1
=
a11
$
1 #
(k+1)
(k+1)
(k)
b2 a21 x1
x2
=
a23 x3
a22
$
1 #
(k+1)
(k+1)
(k+1)
x3
b3 a31 x1
=
a32 x2
.
a33
Si en el metodo de Jacobi las relaciones de recurrencia que conformaban su esquema iterativo
se obtenan de despejar cada variable en su correspondiente ecuaci
on, en el metodo de GaussSeidel esas relaciones surgen de hacer esto mismo pero de una forma que podramos denominar
escalonada. En efecto, no es difcil comprobar que el metodo de Gauss-Seidel tiene una relaci
on
directa con escribir el sistema original en la forma
a11 x1 = b1 a12 x2 a13 x3
a21 x1 + a22 x2 = b2 a23 x3
a31 x1 + a32 x2 + a33 x3 = b3 .
La relacion de recurrencia general para un sistema n n es la siguiente:

(k+1)

xi

i1

1
(k+1)
(k)
bi
aij xj
aij xj ;

aii
j=1
j=i+1

Si se introducen las matrices

0
0
0
a21
0

..
.
.
..
E = .
.
.

an1 1 an1 2
0
an1
an2 an n1

..
.
0
0

0
0

y F = ...

0
0

i = i, . . . , n.

a12
0
..
.
0
0

(2.6)

a1 n1 a1 n

a2 n1 a2n

..
..
.
.
0 an1 n
0
0

y volvemos a considerar la descomposicion de la matriz del sistema A seg


un el esquema general
(2.1), el metodo iterativo de Gauss-Seidel descompone la matriz A de la forma
A = (D E) F,

150

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

donde D es la misma matriz diagonal (2.5) que en el caso del metodo de Jacobi.
Recordando las expresiones (2.2) y (2.3), el esquema iterativo del metodo de Gauss-Seidel
escrito en forma matricial resulta
x(k+1) = (I (D E)1 A)x(k) + (D E)1 b.

(2.7)

La matriz que caracteriza al metodo es en este caso


I (D E)1 A.
Como A = (D E) F , la expresi
on (2.7) tambien se puede representar de la siguiente forma
x(k+1) = (D E)1 [(D E) A] x(k) + (D E)1 b
= (D E)1 F x(k) + (D E)1 b.
A la matriz
G = (D E)1 F
se la denomina habitualmente matriz de Gauss-Seidel.
El algoritmo para resolver la ecuaci
on Ax = b con el metodo de Gauss-Seidel, suponiendo
que se dan las condiciones para poderlo aplicar que veremos m
as adelante, es el que se describe
en la tabla 2.2.
Tabla 2.2
Algoritmo de Gauss-Seidel para la resoluci
on de Ax = b
while x(k+1) x(k)  /x(k+1)  > T ol do
for i = 1 to n

i1
n


1
b(i)
x(i)
a(i, j)x(j)
a(i, j)x(j)
a(i, i)
j=1
j=i+1
end
end

Ejemplo 2.3 Resolvamos por el metodo de Gauss-Seidel el sistema lineal de ecuaciones del
ejemplo 2.1:
=
6
10x1 x2 + 2x3
x1 + 11x2 x3 + 3x4 = 25
2x1 x2 + 10x3 x4 = 11
3x2 x3 + 8x4 = 15.
Aplicando la relaci
on general de recurrencia (2.6) a este caso, partiendo del punto inicial

2.2 Metodo de Gauss-Seidel

151

x(0) = [0, 0, 0, 0]T , se tiene


(1)

(1)

(1)

(1)

x1
x2
x3
x4

1 (0)
10 x2
1 (1)
11 x1
(1)
51 x1

1 (1)
10 x2

3 (1)
8 x2

1 (0)
5 x3
1 (0)
11 x3

3 (0)
11 x4
1 (0)
10 x4

1 (1)
8 x3

3
5

0,6000

25
11

2,3273

11
10

= 0,9873

15
8

0,8789.

Las iteraciones que siguen se generan de forma similar obteniendose los resultados de la
siguiente tabla.
k

(k)
x1
(k)
x2
(k)
x3
(k)
x4

0,0000
0,0000
0,0000
0,0000

0,6000
2,3273
-0,9873
0,8789

1,0302
2,0369
-1,0145
0,9843

1,0066
2,0036
-1,0025
0,9984

1,0009
2,0003
-1,0003
0,9998

1,0001
2,0000
-1,0000
0,9999

El criterio para parar el proceso de este ejemplo es el mismo que el del ejemplo 2.1. Observese
que con este metodo el problema converge a su soluci
on en 5 iteraciones; el de Jacobi lo haca
en 9.
La codicaci
on en Fortran 77 del algoritmo de la tabla 2.2 para resolver este u
ltimo
ejemplo es la que sigue.
PROGRAM GaussSeidel
C
parameter (n = 4)
real a(n,n),b(n),x(n),s1,su,sm,xi
C
data a/10.,-1.,2.,0.,-1.,11.,-1.,3.,2.,-1.,10.,-1.,0.,3.,-1.,8./
data b/6.,25.,-11.,15./
data sm/1.0/
C
x = 0.
C
C
C

*** Proceso iterativo ***


do while (sm.ge.0.001)
s1 = 0.
sm = 0.
do i = 1,n
su = b(i)
do j = 1,n
su = su-a(i,j)*x(j)
end do
xi
= x(i)+su/a(i,i)
sm
= amax1(abs(x(i)-xi),sm)
x(i) = xi
s1
= amax1(s1,abs(x(i)))
end do
sm = sm/s1
print *,x

! Salida de resultados

152

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

end do
C
end

Como se puede observar de la aplicaci


on directa del algoritmo de la tabla 2.2, el metodo de
Gauss-Seidel requiere menos posiciones de memoria que el de Jacobi: en este exista un vector
y(*); aqu, no.
Como es logico pensar, al tener inmediatamente en cuenta los nuevos componentes del
vector solucion una vez calculados, el proceso iterativo del metodo de Gauss-Seidel converger
a
mas rapidamente que el de Jacobi. La realidad es que esto ocurre as generalmente aunque no
siempre.

2.3
2.3.1

Convergencia de los m
etodos de Jacobi y Gauss-Seidel
Matrices generales

Para que un esquema iterativo que genere una sucesi


on de vectores construidos mediante una
f
ormula de recurrencia del tipo
x(k+1) = M x(k) + c,
comenzando con un determinado vector x(0) , sea ecaz, es necesario que la sucesion generada
converja a la soluci
on de la ecuaci
on que se desea resolver, cualquiera que sea ese vector inicial
x(0) .
Diremos que un esquema como el anterior es convergente si para cualquier vector inicial,
x(0) , la sucesion obtenida converge a un mismo lmite.
En este apartado estudiaremos las condiciones generales de convergencia para los esquemas
iterativos que denen los metodos de Jacobi y Gauss-Seidel. Los resultados son extensibles a
cualquier otro esquema. Los teoremas obtenidos dependen de algunos resultados b
asicos sobre
series de matrices que expondremos como paso previo al enunciado y demostracion de esos
teoremas.
Antes de entrar en ello, recordemos algunos conceptos y resultados de algebra que nos
ayudar
an en ese analisis.
El espectro de una matriz A, (A), lo constituyen el conjunto de soluciones de su ecuaci
on
caracterstica, es decir:
(A) = {z C : det(zI A) = 0}.
El radio espectral, (A), de una matriz A de orden n se dene como el valor maximo de los
modulos de los valores propios de la matriz. En otros terminos:
(A) = max |i |.
i (A)

Notese que el signicado geometrico del radio espectral de una matriz, que justica la
denominaci
on, es el de proporcionar el radio del menor crculo del plano complejo centrado en
el origen que contiene a todos los valores propios de la matriz A. La noci
on de radio espectral
de una matriz es muy importante en el estudio de la convergencia de los metodos iterativos
para la resoluci
on de sistemas de ecuaciones lineales.
Supongamos que consideramos una norma matricial consistente con una cierta norma vectorial. Utilizaremos el mismo signo para ambas normas.

2.3 Convergencia de los metodos de Jacobi y Gauss-Seidel

153

De la denici
on de valor propio de una matriz A, para x = 0, se tiene que
Ax = x.
Por consiguiente

x = ||x = Ax Ax.

De aqu que

|| A.
De este resultado se sigue inmediatamente que
(A) A.

Dicho en otros terminos, cualquier norma matricial proporciona una cota superior del radio
espectral. Basta por tanto que una cierta norma matricial, por ejemplo la inducida por una
norma vectorial, sea menor que 1 para que el radio espectral sea necesariamente menor que 1.
Veremos la importancia de esta conclusion m
as adelante.
Las relaciones entre radio espectral y normas matriciales son a
un m
as profundas. De hecho,
puede probarse que el radio espectral de una matriz es el nmo de los valores que pueden
tomar las normas de esa matriz.
Lema 2.1 Sea T una matriz no singular, la norma vectorial xT = T x y AT =
supx
=0 (AxT /xT ) su correspondiente norma matricial inducida. Se cumple que:
a) AT = T AT 1  .
b) Para todo > 0 y toda matriz A, existe una matriz no singular T tal que
AT = (A) + .

El lema anterior pone de maniesto que existen normas matriciales arbitrariamente pr


oximas
al radio espectral de una matriz pero no implica la existencia de una norma matricial cuyo
valor sea justamente el del radio espectral. As, por ejemplo, la matriz cuadrada de orden 2,


0 1
A=
,
0 0
tiene claramente radio espectral nulo ya que sus dos valores propios son iguales a 0. Sin embargo,
al ser una matriz no nula, es imposible que una norma matricial cualquiera tome el valor 0 en
esa matriz.
La nueva norma matricial introducida toma en A el valor de la norma inicial en la matriz
semejante a A, tomando como matriz de semejanza la matriz T . Con esta denici
on se tiene
el siguiente resultado.
Teorema 2.1 Si el radio espectral de una matriz A es menor que 1, existe una matriz
invertible T tal que para la norma eucldea se cumple que
AT < 1.

154

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

Dicho en otras palabras, el teorema arma que si el radio espectral de una matriz es menor
que 1, existe una matriz semejante cuya norma espectral es tambien menor que 1.
Dado un n
umero complejo z, es sabido que la sucesion formada con sus potencias z k converge
a 0 si y solo si el modulo de z es estrictamente menor que 1. Un hecho ntimamente ligado con
este es que la serie geometrica
1 + z + z2 +
es convergente si y solo si |z| < 1. Ademas, en caso de convergencia, se cumple que
1 + z + z2 + =

1
1z

A continuaci
on generalizaremos estos resultados para la sucesion formada por las potencias de
una matriz cuadrada.
Proposici
on 2.1 Sea M una matriz cuadrada de n
umeros complejos. La sucesi
on X (k) =
k
olo si el radio espectral de M es
M de potencias de M converge a la matriz nula si y s
estrictamente menor que 1.
n. Probemos primero la necesidad de la condici
Demostracio
on. Si el radio espectral de M
fuese mayor que 1 existira un valor propio de modulo mayor o igual que 1. Sea v su vector
propio asociado. De la igualdad
M v = v
se deduce que
M k v = k v.
Se tendra as un vector para el que
lim M k v = 0,

lo cual contradice que


lim M k = 0.

Comprobemos la suciencia. Seg


un hemos visto con anterioridad, si el radio espectral de
M es menor que 1, existe una norma matricial para la que la norma de la matriz es tambien
menor que 1. Como para toda norma matricial se cumple que
M k  M k ,
se sigue que
lim M k  lim M k = 0,

lo cual fuerza a que


lim M k = 0

El siguiente resultado es una generalizaci


on al caso matricial de la f
ormula para la suma de
una serie geometrica.

2.3 Convergencia de los metodos de Jacobi y Gauss-Seidel

155

Proposici
on 2.2 La serie matricial
I + M + M2 +
es convergente si y s
olo si el radio espectral de la matriz M es menor que 1. En este supuesto,
su suma es la matriz
(I M )1 .

n. Para la convergencia de la serie es necesario que


Demostracio
lim M k = 0,

lo que s
olo puede ocurrir si el radio espectral es menor que 1, seg
un acabamos de demostrar.
Esto prueba la necesidad de la condici
on.
Para probar la suciencia comencemos vericando que si el radio espectral de M es menor
que 1, la matriz I M es invertible. Esto es as porque los valores propios de I M vienen
dados por los n
umeros de la forma 1 , donde es un valor propio de M . Como al ser
el radio espectral de M menor que 1 ninguno de estos n
umeros puede ser cero, la matriz es
forzosamente invertible. De la identidad matricial
(I M )(I + M + M 2 + + M n ) = I M n+1
se deduce entonces la igualdad
#

(I + M + M 2 + + M n ) = (I M )1 I M n+1 .
Pasando al lmite
I + M + M 2 + = (I M )1 ,
como queramos demostrar.
La proposici
on anterior permite afrontar el estudio de las condiciones de convergencia de
un determinado esquema iterativo para la soluci
on de un sistema de ecuaciones lineales. El
resultado fundamental es el que sigue.
Teorema 2.2 El esquema iterativo
x(k+1) = M x(k) + c
es convergente si y s
olo si el radio espectral de la matriz M es menor que 1. En ese caso la
(k)
sucesi
on x converge a la soluci
on de la ecuaci
on
x = M x + c.

156

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

n. Para que el esquema iterativo converja a un x que cumpla x = M x + c,


Demostracio
es necesario y suciente que el error en cada iteracion, x(k) x, converja a cero. Ahora bien,
recordemos de (2.2) que
x(k+1) = (I R1 A)x(k) + R1 b.
El error x(k+1) x, e(k+1) , es:
e(k+1) = (I R1 A)x(k) + R1 b (I R1 A)x R1 b
= (I R1 A)(x(k) x)
= M e(k) .
De aqu que, en general,
e(k) = M k e(0) .
Para que el error converja a cero pues, de acuerdo con la proposici
on 2.1, es necesario y
suciente que (M ) < 1.

2.3.2

Matriz de diagonal dominante

Recordemos que se dice que una matriz compleja, A = (aij ), cuadrada y de orden n, es de
diagonal estrictamente dominante por las, o simplemente de diagonal dominante, cuando
cumple que

|aii | >
|aij |, i = 1, . . . , n.
j
=i

An
alogamente se dene una matriz de diagonal dominante por columnas. En lo que sigue
entenderemos por matriz de diagonal dominante una matriz de diagonal dominante por las.
Una importante propiedad de las matrices de diagonal dominante la establece el siguiente
teorema.
Teorema 2.3 Toda matriz de diagonal dominante es una matriz invertible.
n. Si la matriz A no fuese invertible, la ecuaci
Demostracio
on Ax = b admitira una soluci
on
no nula. Si
x = [x1 , . . . , xn ]T
es una soluci
on, podemos suponer sin perdida de generalidad que
max |xi | = 1.

1in

Sea r un ndice para el que es |xr | = 1. Tomando m


odulos en la ecuaci
on
ar1 x1 + + arr xr + + arn xn = 0
se concluye que
|arr |

|ari | |xi |

i
=r


i
=r

|ari |,

2.3 Convergencia de los metodos de Jacobi y Gauss-Seidel

157

desigualdad que contradice la hip


otesis de que la matriz A tiene diagonal estrictamente dominante. Esto permite dar por demostrado el teorema.
A continuaci
on probaremos que cuando se tiene una ecuaci
on Ax = b en la que la matriz
de coecientes A es de diagonal estrictamente dominante, al aplicar los metodos de Jacobi y
GaussSeidel para obtener una soluci
on, estos convergen.
Teorema 2.4 Si la matriz A es de diagonal dominante, el metodo de Jacobi para resolver
Ax = b converge a su soluci
on.
n. Recordemos que si expresamos la matriz de coecientes del sistema de la
Demostracio
forma
A = (D E) F,
la matriz de iteraci
on de Jacobi es
J = I D1 A = D1 (E + F ) = D1 E + D1 F
y la de GaussSeidel,
Si hacemos

G = (D E)1 F = (I D1 E)1 D1 F.
L = D1 E

se puede escribir que

y U = D1 F,
y G = (I L)1 U.

J =L+U

Notese ahora que el hecho de que la matriz A sea de diagonal dominante supone1 que
L + U  < 1
Esto se sigue de la denici
on de matriz de diagonal dominante la cual se puede escribir
|aij |
j
=i

|aii |

< 1;

i = 1, . . . , n.

En notaci
on matricial esto equivale a
D1 (E + F ) < 1.
La matriz de iteracion de Jacobi tiene por tanto norma innito inferior a 1. Puede entonces
asegurarse que la matriz J tiene radio espectral menor que 1 ya que una de sus normas es menor
que 1. El metodo iterativo de Jacobi es por consiguiente convergente en el caso de matriz de
coecientes de diagonal dominante.
Proposici
on 2.3 Si la matriz A es de diagonal dominante entonces se cumple que
G J .
Recordemos adem
as que la norma matricial   de una matriz viene dada por el m
aximo de las sumas
de los valores absolutos de los elementos de cada la de la matriz.
1

158

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

n. Si M es una matriz compleja arbitraria, introduzcamos la notaci


Demostracio
on
|M |
para designar la matriz que tiene por elementos los m
odulos de los elementos de M . Siendo M
y N dos matrices de las mismas dimensiones, la notacion
|M | < |N |
se entendera como que cada elemento de la matriz M es en modulo menor que el correspondiente
elemento de la matriz N .
Es f
acil comprobar que si M = M1 M2 ,
|M | |M1 ||M2 |.
Usando este resultado, de la denici
on de la matriz G, se tiene que
|G| |(I L)1 ||U |.
Dado que, como se comprueba f
acilmente,
Ln = 0,
se cumple que

(I L)1 = I + L + L2 + + Ln1 .

Tomando m
odulos resulta la siguiente desigualdad:
|(I L)1 | I + |L| + |L|2 + + |L|n1 = (I |L|)1 .
Por otro lado, es claro que

(2.8)

|U | = |J| |L|.

Utilizando estos dos resultados podemos escribir:


|D| (I |L|)1 (|J| |L|)
= (I |L|)1 [(I |L|) (I |J|)]
= I (I |L|)1 (I |J|).
Hasta ahora no hemos utilizado la propiedad de que A es de diagonal dominante, que
sabemos implica que J < 1. Si introducimos el vector

1
..
u = . ,
1
podemos reejar esta propiedad en la desigualdad
(I |J|)u > 0.
La f
ormula (2.8) antes obtenida permite escribir que
(I |L|)1 I.

2.3 Convergencia de los metodos de Jacobi y Gauss-Seidel

159

Podemos entonces armar que


(I |L|)1 (I |J|)u (I |J|)u
y de ah que

|G|u = u (I |L|)1 (I |J|)u


u (I |J|)u
= |J|u.

Obviamente esto implica que, en el caso de tratar con una matriz A de diagonal dominante,
se cumple lo enunciado: G J .
Teorema 2.5 El metodo de GaussSeidel para resolver Ax = b converge a su soluci
on para
el caso de una matriz de coecientes de diagonal dominante.
n. Como antes se vio, bajo la hip
Demostracio
otesis de que A es de diagonal dominante,
J < 1
y por tanto tambien se cumple que

G < 1

por lo que el radio espectral de G sera tambien menor que 1.

2.3.3

Matriz sim
etrica denida positiva

En muchos casos de interes se plantea el problema de resolver un sistema de ecuaciones en el


que la matriz de coecientes es una matriz simetrica y denida positiva. En este apartado se
estudia la convergencia de los metodos iterativos de Jacobi y de Gauss-Seidel en este supuesto.
Comencemos por el metodo de Jacobi. La matriz de iteraci
on se puede escribir
J = D1 (D A) = I D1 A,
donde D es la matriz diagonal formada con los elementos de la diagonal principal de la matriz
A. Dado que estamos suponiendo que la matriz A es denida positiva, la matriz D tambien es
denida positiva. Designemos con la notaci
on D1/2 la matriz diagonal cuyos elementos son las
races cuadradas de los elementos de la matriz D. Con este convenio podemos escribir que la
matriz
#
$
J = I D1/2 D1/2 AD1/2 D1/2
#

= D1/2 I D1/2 AD1/2 D1/2 .


Se aprecia entonces que J es una matriz semejante a la matriz simetrica
I D1/2 AD1/2
y por tanto sus valores propios, que coinciden con los de esta matriz, son n
umeros reales. Para
que su radio espectral sea menor que 1, esos valores propios han de pertenecer al intervalo
abierto (1, 1). Esto es equivalente a armar que las dos matrices
#

I I D1/2 AD1/2

160

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

han de ser denidas positivas. Si tomamos el signo negativo resulta la matriz


D1/2 AD1/2
que es congruente con la matriz A, y por tanto tambien denida positiva. Si se toma el signo
positivo, resulta la matriz
2I D1/2 AD1/2 = D1/2 (2D A)D1/2
que, como se deduce de la expresion del segundo miembro de la igualdad anterior, es congruente
con la matriz
2D A
y sera denida positiva si y s
olo si esta matriz lo es. Hemos obtenido as un resultado para
caracterizar la convergencia del metodo de Jacobi para una matriz denida positiva.
Teorema 2.6 Sea A una matriz simetrica y denida positiva. El metodo iterativo de Jacobi
para un sistema de ecuaciones con matriz de coecientes A es convergente si y s
olo si la
matriz
2D A
es una matriz denida positiva.
A diferencia de lo que ocurre con el metodo de Jacobi, el metodo de Gauss-Seidel va a ser
siempre convergente en el caso de un sistema con matriz denida positiva. La demostraci
on
de este resultado es bastante mas laboriosa debido a que los valores propios de la matriz G
no son, en el caso de matriz simetrica, necesariamente reales, propiedad que s tienen en las
mismas circunstancias los valores propios de la matriz de Jacobi.
Para analizar la convergencia del metodo de Gauss-Seidel en este caso resulta muy u
til el
siguiente resultado.
Teorema 2.7 (Stein) Una matriz compleja M tiene radio espectral menor que 1 si y s
olo
si existe una matriz hermtica2 Q denida positiva tal que la matriz3 dada por
P = Q M QM
es tambien una matriz denida positiva.
n. Comencemos probando que la existencia de una tal matriz Q es suciente
Demostracio
para que el radio espectral sea menor que 1. Sea un valor propio de M y v su vector propio
asociado. De la igualdad
M v = v
se sigue que
y que

v M QM v = ||2 v Qv
#

v (Q M QM ) v = 1 ||2 v Qv,

2.3 Convergencia de los metodos de Jacobi y Gauss-Seidel

161

introduciendo en ambos miembros v Qv. Como tanto Q como Q M QM son matrices denidas positivas y v un vector no nulo,
#

1 ||2 > 0

y, por lo tanto,

|| < 1.

As pues, todos los valores propios tienen m


odulo inferior a 1 y el radio espectral es, por tanto,
tambien menor que 1.
Probemos que la existencia de Q es necesaria. Seg
un sabemos, si el radio espectral de la

matriz M es menor que 1, existe una matriz M , semejante a M , cuya norma espectral es menor
tal que la matriz
que 1. Dicho de otro modo, existe M
M
,
P = I M
se relacionan de la forma
es denida positiva. Si las matrices M y M
= T M T 1
M
se tiene que
P = I (T )1 M T T M T 1 = (T 1 ) [T T M T T M ] T 1 .
La matriz

P = T P T = T T M T T M,

por consiguiente, es congruente con una matriz denida positiva, y por tanto, es ella misma
denida positiva. Basta tomar
Q = T T
para tener una matriz denida positiva que satisface la condici
on.
Puede suceder que una matriz M tenga radio espectral menor que 1 y que la matriz
P = Q M QM
no sea denida positiva para una cierta matriz denida positiva Q. Un ejemplo lo proporcionan
las matrices




1 0
0 2
M=
y Q=
.
0 1
0 0
Es claro que (M ) = 0, en tanto que


1 0
Q M QM =
,
0 3

no es una matriz denida positiva. Comprobemos, en cambio, siempre en el supuesto de que


el radio espectral de M es menor que 1, que si la matriz P es denida positiva, la matriz Q
tambien ha de ser denida positiva. En efecto, de la relaci
on entre P y Q se obtiene f
acilmente
que
Q (M )k+1 QM k+1 = P + M P M + + (M )k P M k .

162

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

Como el radio espectral de M es menor que 1, las potencias de M convergen a la matriz nula,
por lo que al pasar al lmite
Q = P + M P M + (M )2 P M 2 + .
Siendo P denida positiva, es claro que la suma de esta serie es denida positiva. Por tanto Q
resulta ser denida positiva.
Apliquemos el teorema anterior a la siguiente cuesti
on. Siendo A una matriz real, simetrica
y denida positiva, queremos obtener condiciones sucientes para que la descomposici
on
A=RS
conduzca a un esquema iterativo convergente. La matriz R es una matriz invertible no necesariamente simetrica. Seg
un ya sabemos, que el esquema sea convergente equivale a que el radio
espectral de la matriz M dada por
M = R1 S = I R1 A,
sea menor que 1.
La idea es aplicar el teorema de Stein tomando como matriz hermtica Q la propia matriz
A. Con esta motivacion, consideremos las igualdades
A M AM = A (I M I) A (I M I)
= A [(I M ) A (I M ) A (I M ) (I M ) A + A]
= A (I M ) + (I M ) A (I M ) A (I M ) .
Si utilizamos que

I M = R1 A,

podemos armar que la matriz I M es una matriz invertible cuya inversa es


(I M )1 = A1 R.
De donde deducimos adem
as que

A(I M )1 = R.

De acuerdo con esto, podemos escribir que


A M AM = (I M ) (I M )1 A + A (I M )1 A (I M )
= (I M ) (R + R A) (I M ) .
El c
alculo anterior hace ver que las matrices
A M AM

y R + R A

son congruentes. Aplicando el teorema de Stein ser


a suciente que la segunda de estas matrices
sea denida positiva para que el radio espectral de la matriz M sea menor que 1.

2.4 Metodos de relajacion

163

Teorema 2.8 Sea A una matriz real, simetrica y denida positiva, y sea R una matriz
invertible tal que la matriz
R + R A
sea denida positiva. El radio espectral de la matriz
M = I R1 A
es entonces menor que 1.
Este teorema puede aplicarse para desarrollar una nueva demostraci
on de la condici
on de
convergencia del metodo de Jacobi con matriz denida positiva.
A continuaci
on pasamos a aplicarlo para demostrar la convergencia del metodo de GaussSeidel.
Teorema 2.9 El metodo iterativo de GaussSeidel es convergente para todo sistema de
ecuaciones cuya matriz de coecientes es simetrica denida positiva.
n. Con el teorema anterior la demostraci
Demostracio
on es muy sencilla. Si A es una matriz
simetrica que se descompone seg
un
A = D E ET
y la matriz de iteraci
on del metodo de Gauss-Seidel es
G = (D E)1 E T ,
aplicando el teorema anterior, tomando
R = D E,
se tiene que
RT + R A = (D E)T + (D E) (D E E T ) = D.
Como la matriz A es denida positiva, todos los elementos de su diagonal principal son positivos, lo que equivale a decir que la matriz diagonal D es denida positiva.

2.4

M
etodos de relajaci
on

Los dos metodos iterativos que hemos estudiado hasta ahora, Jacobi y Gauss-Seidel, se pueden
generalizar. En efecto, las relaciones de recurrencia de estos dos metodos se pueden escribir de
la forma
(k+1)
(k)
(k)
xi
= xi + ri ,
i = 1, . . . , n.
En el caso del metodo de Jacobi,
bi
(k)

ri

(k)

aij xj

j=1

aii

164

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

en el de Gauss-Seidel,
bi
(k)

ri

i1

(k+1)
aij xj

j=1

(k)

aij xj

j=i

.
aii
Visto as, estos dos procedimientos iterativos llegan a la soluci
on a traves de un n
umero de
(k)
pasos, en cada uno de los cuales se avanza una cantidad r .
La idea de los metodos de relajaci
on consiste, en cada iteracion, en aplicar la relaci
on de
recurrencia,
(k+1)
(k)
(k)
xi
= xi + ri ,
i = 1, . . . , n,
de tal forma que se mejoren las prestaciones del procedimiento avanzando un paso m
as amplio,
> 1, o mas corto, < 1. Al par
ametro se le conoce como par
ametro de relajaci
on.
El metodo de relajaci
on m
as conocido es el SOR, Successive Overrelaxation: resulta de
aplicar esta idea sobre la base del metodo de Gauss-Seidel. Su relaci
on de recurrencia es:

(k+1)

xi

i1


(k+1)
(k)
(k)
bi
aij xj
aij xj + (1 )xi ,

aii
j=1
j=i+1

i = 1, . . . , n.

Una eleccion adecuada del valor de puede mejorar la convergencia del metodo. La idea
que debe dirigir esa eleccion es que si la correccion que introduce cada iteraci
on en la soluci
on
es excesiva, se puede disminuir con un factor < 1. Por el contrario, si la correcci
on tiende a
quedarse corta, se puede aumentar con un factor > 1.
La eleccion del par
ametro plantea dos problemas: en primer lugar, que ha de estudiarse
el conjunto de valores del par
ametro que hacen que el metodo SOR converja; en segundo, que
hay que determinar el valor del par
ametro que haga que la convergencia sea lo mas rapida
posible.
Si la matriz de coecientes del sistema de ecuaciones lineales que hay que resolver se representa como antes de la forma
A = D E F,
el esquema iterativo del metodo SOR en forma matricial es el que sigue:
x(k+1) = (D E)1 ((1 )D + F ) x(k) + (D E)1 b.
La matriz que caracteriza la iteracion del metodo y, por tanto, su convergencia es:
G() = (D E)1 ((1 )D + F ) .
Si introducimos las matrices

L = D1 E

y U = D1 F,

a
un podemos escribir que esa matriz caracterstica es
G() = (I L)1 [(1 )I + U ] .

2.4 Metodos de relajacion

165

Tabla 2.3
Algoritmo de relajaci
on SOR para la resoluci
on de Ax = b
while x(k+1) x(k)  /x(k+1)  > T ol do
for i = 1 to n

i1
n



b(i)
x(i)
a(i, j)x(j)
a(i, j)x(j) + (1 )x(i)
a(i, i)
j=1
j=i+1
end
end

El algoritmo para resolver la ecuaci


on Ax = b con el metodo SOR es el que se describe en
la tabla 2.3.
Ejemplo 2.4 Resolvamos por el metodo SOR el sistema de ecuaciones lineales
4x1 + 3x2
= 24
3x1 + 4x2 x3 = 30
x2 + 4x3 = 24.
Aplicando la relaci
on general de recurrencia del metodo, partiendo del punto inicial x(0) =
T
[1, 1, 1] , con = 1,25, se obtienen los resultados de la siguiente tabla.
k
(k)

x1
(k)
x2
(k)
x3

1,0000
1,0000
1,0000

6,3125
3,5195
-6,6501

2,6223
3,9585
-4,6004

3,1333
4,0102
-5,0966

2,9570
4,0074
-4,9734

3,0037
4,0029
-5,0057

2,9963
4,0009
-4,9982

3,0000
4,0002
-5,0003

Por el contrario, partiendo del mismo punto pero esta vez con = 2,25, los resultados que
se obtienen son los de la siguiente tabla.
k

(k)
x1
(k)
x2
(k)
x3

1,0000
1,0000
1,0000

10,5625
-1,6367
-15,6706

3,0588
4,9442
8,8695

1,3328
13,4344
-17,0300

-10,8367
8,7895
12,7316

12,2136
-7,5608
-33,6674

10,9919
-11,1607
22,3064

18,5938
11,9961
-34,6352

Como se puede ver, en este caso la solucion diverge.


La codicaci
on en Fortran 77 del algoritmo de la tabla 2.3 para resolver este u
ltimo
ejemplo es la que sigue.
PROGRAM Sor
C
parameter (n = 3)
real a(n,n),b(n),x(n),s1,su,sm,xi,w
C

166

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

data a/4.,3.,0.,3.,4.,-1.,0.,-1.,4./
data b/24.,30.,-24./
data sm/1.0/
C
x = 1.
w = 1.25
C
C
C

*** Proceso iterativo ***


do while (sm.ge.0.001)
s1 = 0.
sm = 0.
do i = 1,n
su = b(i)
do j = 1,i-1
su = su-a(i,j)*x(j)
end do
do j = i+1,n
su = su-a(i,j)*x(j)
end do
xi
= (1-w)*x(i)+w*su/a(i,i)
sm
= amax1(abs(x(i)-xi),sm)
x(i) = xi
s1
= amax1(s1,abs(x(i)))
end do
sm = sm/s1
print *,x
end do

C
end

2.4.1

Convergencia del m
etodo SOR

Para estudiar la convergencia del metodo hay que analizar, como ya sabemos, el radio espectral
de la matriz G().
Teorema 2.10 (Kahan) Para toda matriz A, el radio espectral de la matriz G() del
metodo de relajaci
on SOR satisface la desigualdad
(G()) | 1|.

n. Utilizaremos que el determinante de una matriz es el producto de los valores


Demostracio
propios de la matriz. Para la matriz G() se tiene que
#

det(G()) = det (I L)1 [(1 )I + U ]

= det (I L)1 det [(1 )I + U ] .


Siendo L una matriz triangular inferior con ceros en la diagonal principal,
det (I L) = 1

2.4 Metodos de relajacion

167

y por tanto tambien sera 1 el determinante de la matriz inversa de I L. La matriz


(1 )I + U es a su vez una matriz triangular superior y los elementos de su diagonal principal son todos iguales a 1 . As pues,
det [(1 )I + U ] = (1 )n .
Se tiene por consiguiente, para el producto de los valores propios de la matriz G(), la
expresion
n
4

k = (1 )n .

k=1

De la denici
on de radio espectral de una matriz se tiene obviamente que
(G()) |k |,

k = 1, . . . , n,

de manera que tomando m


odulos en la f
ormula anterior se llega a la desigualdad
(G())n

n
4

|k | = | 1|.

k=1

Sin m
as que tomar races n-esimas resulta la desigualdad dada en el enunciado del teorema.
Corolario 2.1 Una condici
on necesaria para la convergencia del metodo de relajaci
on SOR
es que el par
ametro de relajaci
on cumpla las desigualdades
0 < < 2.

n. La prueba es una aplicaci


Demostracio
on directa del teorema anterior. En efecto, si el
metodo es convergente se cumple que (G()) < 1. Utilizando la desigualdad que se establece
en el teorema, el valor de debe cumplir que
| 1| < 1,
siendo un par
ametro real. Esto es equivalente a decir que
1 < 1 < 1
o bien que (0, 2).
Pasemos a estudiar condiciones sucientes de convergencia. Mencionaremos sin demostracion el resultado de que si la matriz de coecientes del sistema es de diagonal dominante, el
metodo de relajaci
on SOR converge si (0, 1). Esta armaci
on prolonga el resultado anteriormente obtenido para el metodo de Gauss-Seidel con matriz de diagonal dominante; su
demostracion se puede hacer del mismo modo que se hizo entonces.
Mayor interes tiene el hecho de que cuando se tiene una matriz simetrica denida positiva,
el metodo de relajaci
on SOR converge para todos los valores permisibles del par
ametro , es
decir para (0, 2). En este caso la condicion que antes se dio como necesaria se convierte en
suciente.

168

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

Teorema 2.11 (Ostrowski-Reich) Para un sistema de ecuaciones con matriz simetrica y


denida positiva, el metodo iterativo de relajaci
on SOR converge si y s
olo si el par
ametro
de relajaci
on cumple que 0 < < 2.
n. Notese que el teorema extiende aquel que garantizaba la convergencia de
Demostracio
Gauss-Seidel en este mismo caso de matriz denida positiva. Su demostraci
on se basa tambien
en el teorema de Stein. Si
A = D E ET ,
la matriz de iteraci
on G() corresponde, como sabemos, a la descomposicion


A=

1
DE +



Tomando
R() =

1
1
D ET .

1
DE

se tiene que
2
D (E + E T ) A



2
1 D.
=

R + RT A =

Para (0, 2) se cumple que

2
1>0

y al ser todos los elementos de la diagonal de una matriz denida positiva n


umeros positivos,
es de aplicacion el teorema de Stein.
Queda por estudiar la cuesti
on de la seleccion del valor del par
ametro de relajaci
on de forma
que la velocidad de convergencia sea maxima. Esta cuesti
on es en general difcil y no existen
teoremas generales aplicables para la determinacion del par
ametro optimo. En ciertos casos
particulares como es el caso que habitualmente se analiza en la literatura referido a estos
metodos para matrices tridiagonales se dispone de resultados parciales que lo facilitan.

2.4.2

M
etodo SSOR

Una modicaci
on interesante de los metodos de relajaci
on la constituye el metodo simetrico
SOR. La idea del mismo consiste en realizar cada una de las iteraciones del SOR en dos
pasos: uno siguiendo el mismo orden de obtenci
on de los componentes del vector x y otro
calculandolos en sentido inverso. Analicemos que ocurre si se aplica esta idea directamente al
metodo de Gauss-Seidel. El primer paso de cada iteraci
on lo dene la f
ormula de recurrencia
x(k+1/2) = (D E)1 F x(k) + (D E)1 b.
El segundo paso determina el valor de x(k+1) de acuerdo con la siguiente expresi
on:

(k+1)

xi

i1

1
(k+1)
(k+1/2)
bi
aij xj

aij xj
;
aii
j=i+1
j=1

i = n, n 1, . . . , 1.

2.5 Metodos de minimizacion

169

Utilizando las matrices D, E y F , esta u


ltima expresi
on se puede escribir
Dx(k+1) = F x(k+1) + Ex(k+1/2) + b
o
x(k+1) = (D F )1 Ex(k+1/2) + (D F )1 b.
Es decir, en este paso el papel de las matrices E y F se invierte. Una iteraci
on del metodo
SGS (Symmetric Gauss-Seidel ) combinara los dos pasos descritos. El esquema iterativo del
metodo en forma matricial es

x(k+1) = (D F )1 E(D E)1 F x(k) + d


donde
= (D F )1 E(D E)1 b + (D F )1 b.
d
El metodo SSOR simplemente inserta el par
ametro de relajaci
on en los dos pasos de cada
iteraci
on. Su esquema iterativo en forma matricial es

x(k+1) = (D F )1 [(1 )D + E](D E)1 [(1 )D + F ]x(k) + d


donde ahora,
= (D F )1 {[(1 )D + E](D E)1 + I}b.
d
Esta u
ltima expresi
on solo pretende representar en forma matricial una iteraci
on del metodo:
no quiere decir que haya que calcular su resultado en cada iteraci
on. Desde el punto de vista
de los calculos, el metodo SSOR se lleva a efecto mediante f
ormulas de recurrencia an
alogas a
las vistas con anterioridad.
Una variante del teorema 2.11 de Ostrowski-Reich permite concluir que el metodo SSOR,
si A es simetrica denida positiva y (0, 2), converge para cualquier x(0) .
Debido a que el n
umero de iteraciones requeridas en cada iteraci
on del metodo SSOR es el
doble de las que necesita el metodo SOR, su utilizaci
on como tal metodo iterativo no est
a muy
extendida. Su ventaja fundamental radica en que los autovalores de su matriz de iteraci
on son
reales por lo que se utiliza en combinaci
on con otros metodos para acelerar la convergencia.

2.5

M
etodos de minimizaci
on

La idea clave de estos metodos para resolver el problema Ax = b se basa en el siguiente


resultado.

170

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

de la ecuaci
Teorema 2.12 Sea A una matriz simetrica denida positiva. La soluci
on x
on
Ax = b es el vector para el cual la forma cuadr
atica
1
Q(x) = xT Ax bT x
2

(2.9)

alcanza su mnimo. Este mnimo es:


1
bT A1 b.
2

n. Por el teorema de Taylor, ver apendice A en la p


Demostracio
agina 695, desarrollando la
expresion (2.9), se tiene que
Q(
x + d) Q(
x) =

1 T
d Ad + O(d2 ).
2

Como la matriz A es denida positiva, para cualquier d = 0, 1/2dT Ad > 0. Como tambien,
para peque
nas d, el segundo termino de la derecha es positivo, Q(
x + d) Q(
x) > 0. Es
es u
decir, el mnimo x
nico.

Por las condiciones de mnimo de una funci


on como Q(x), ver apendice A, p
agina 695, x
debe cumplir que
Q(
x) = g(
x) = A
x b = 0.
Es decir, sera la soluci
on de Ax = b.
El optimo (mnimo) de Q(x) es
1 T
1 T
1
1 T
A
= x
A
A
T AT x
T A
xx
xx
x= x
x = bT A1 b.
Q(
x) = x
2
2
2
2

De acuerdo con este resultado, es posible utilizar cualquiera de los metodos que existen
para minimizar funciones como Q(x) y resolver as Ax = b. Muchos de esos metodos se basan
en un esquema iterativo de descenso del tipo
x(k+1) = x(k) + k p(k) ,

k = 0, 1, . . .

(2.10)

on de descenso y el escalar k (factor de avance) determina la


donde p(k) es un vector direcci
distancia que se desplaza el punto a lo largo de p(k) (ver gura 2.1).
Existen gran variedad de metodos de descenso; se diferencian unos de otros en la forma de
calcular la direcci
on p(k) .
as mas natural de calcularlo es aquella que
Por lo que respecta al factor k , la forma quiz
(k)
minimiza Q(x) a lo largo de p . Es decir
#

Q x(k) + k p(k) = min Q x(k) + p(k) .

(2.11)

2.5 Metodos de minimizacion

171

k p(k)

(k+1)

p(k)
x(k)

Figura 2.1
Movimiento a lo largo de un vector direcci
on de descenso
Para unos x(k) y p(k) jos, (2.11) es un problema de optimizaci
on en una sola variable,
4
denominado c
alculo de la amplitud de paso, pudiendo resolverse explcitamente. Si para
facilitar la notaci
on suprimimos los superndices, se tiene que
q() = Q(x + p) =
=
=

T
1
T
2 (x + p) A(x + p) b (x + p)
T
1 T
1 2 T
T
T
2 x Ax + p Ax + 2 p Ap p b b x
1 T
1 T
2
T
2 p Ap + p (Ax b) + 2 x (Ax 2b).

(2.12)

Como hemos supuesto que la matriz A es denida positiva, pT Ap > 0. De acuerdo con las
condiciones de existencia de un mnimo, la forma cuadr
atica q() se minimiza cuando q  () = 0.
Es decir, en terminos de x(k) y p(k) , cuando
#

p(k)
#

k =

$T #
(k)

b Ax(k)

$T

(k)

Ap

El problema del c
alculo de la amplitud de paso (a veces tambien denominado determinaci
on
del factor de avance) se ilustra en la gura 2.2.

2.5.1
2.5.1.1

Direcciones de descenso
Relajaci
on en una variable

Sea el vector unitario ei (cuyo componente i es uno y todos los demas cero). Uno de los
procedimientos de minimizaci
on m
as sencillos de b
usqueda a lo largo de una direcci
on es el
que hace que las sucesivas direcciones sean los vectores e1 , . . . , en , e1 , . . . Es decir,
p(0) = e1 ,

p(1) = e2 ,

...,

p(n1) = en ,

Observese que en este caso eTi Aei = aii y que


eiT (Ax

b) =

n

j=1

Tambien de b
usqueda lineal o linesearch.

aij xj bi .

p(n) = e1 , . . .

172

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales


q()
(k)

Q(x

x(k) + k p(k)

x(k)

Figura 2.2
Minimizaci
on en la variable
Si en una iteraci
on k, p(k) = ei y k se elige con el criterio de minimizacion en una variable
de (2.12), el siguiente punto del proceso iterativo, x(k+1) , estara dado por

x(k+1)

n
1
(k)
= x(k) + k ei = x(k)
aij xj bi ei .
aii j=1

(2.13)

En esta u
ltima expresi
on los vectores x(k+1) y x(k) dieren solamente en su componente i. En
efecto, (2.13) es equivalente a minimizar la funci
on Q de (2.9) s
olo en la componente i-esima
(k)
as en los valores que tomaban en x(k) .
del vector x , permaneciendo las dem
Consideremos ahora los n primeros pasos de este proceso y escribamos solo los componentes
(k)
(0)
que cambian (observese que xj = xj hasta que vara el componente j-esimo):

(i)

xi

(0)

(0)

= xi + i = xi

i1

1
(j)
(0)
aij xj +
aij xj bi
aii j=1
j=i

i1
n


1
(j)
(0)
=
bi
aij xj
aij xj ;
aii
j=1
j=i+1

i = 1, . . . , n.

Esta expresi
on es la misma que la de recurrencia del metodo de Gauss-Seidel. El metodo de
Gauss-Seidel, por tanto, es equivalente a combinar n pasos sucesivos de relajacion univariable,
llamando al producto de esos pasos el siguiente punto del proceso iterativo de Gauss-Seidel.
2.5.1.2

Relajaci
on SOR

nadir
A cualquier metodo de direcci
on de descenso del tipo x(k+1) = x(k) + k p(k) se le puede a
un par
ametro de relajaci
on de tal forma que se escoja como amplitud de paso
k =
k ,

2.5 Metodos de minimizacion

173

donde
k es el valor de que minimiza la funci
on cuadr
atica Q de (2.9) a lo largo de la
(k)
direccion p .
El valor de la funci
on Q(x(k) +
k p(k) ) es menor que Q(x(k) ), siempre y cuando > 0,
hasta que se alcanza un determinado para el cual Q(x(k) +
k p(k) ) = Q(x(k) ). Por la simetra
existente en una funci
on cuadr
atica en una variable respecto al eje que pasa por su mnimo,
este valor de es 2 (ver gura 2.3). En consecuencia, Q(x(k+1) ) < Q(x(k) ) si 0 < < 2;
en cualquier otro caso, Q(x(k+1) ) Q(x(k) ). Recordemos en este punto el teorema 2.11 de
Ostrowski-Reich, base de la demostracion de la convergencia del metodo de relajaci
on SOR.
Q(x(k) )

Q(x(k) + 2
p(k) )

x(k) +
(k) p(k) x(k) + 2
(k) p(k)

x(k)

Figura 2.3
Relajacion SOR

2.5.1.3

M
axima pendiente

un conjunto abierto de n .
Sea f una funci
on, f : n , continua y diferenciable en alg
Consideremos la aproximaci
on de esta funci
on en un punto x(k) que se deriva del desarrollo en
serie de Taylor truncado en primer orden,
#

f x(k) + p f x(k) + g (k)

$T

p,

on en x(k) : f . Si de lo que se trata, alrededor de x(k) ,


donde g (k) es el gradiente de la funci
es determinar una direcci
on p(k) a lo largo de la cual la funci
on decrece lo mas posible, la idea
es hacer el termino
#
$T
g (k) p
(2.14)
lo mas grande y negativo posible. A tal efecto es obvio que habr
a que normalizar p de alguna
tal que
manera pues si no, para cualquier p
#

g (k)

$T

< 0,
p

y bastara. Se trata, sin embargo, de


se podra escoger p igual a un m
ultiplo muy grande de p
(k)
encontrar la p que cualitativamente m
as minimiza (2.14). Es decir, dada cualquier norma

174

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

 , p(k) sera la soluci


on al problema:
gT p
.
minimizar
pn
p
La soluci
on de este problema depende de la norma que se elija. Si se dene por una matriz
A simetrica denida positiva, es decir,
pA =

"

p|Ap,

la soluci
on al problema de minimizaci
on es:
p(k) = A1 g (k) .


Si se determina a partir de la norma eucldea, p = p|p, apoy


andose en la desigualdad de
Cauchy-Schwarz, que para cualesquiera dos vectores x e y obedece a la expresion
x2 y2 xT y x2 y2 ,
y que cuando y = x se verica la igualdad en el lmite inferior, la soluci
on es entonces el
negativo del gradiente:
p(k) = g (k) .
A esta direccion se la conoce como la de la m
axima pendiente.
Volviendo al problema de b
usqueda de direcciones que minimicen la funci
on cuadr
atica
(k)
(k)
Q(x ), la direcci
on de m
axima pendiente en x es
#

p(k) = Q x(k) = Ax(k) b .

(2.15)

El procedimiento iterativo que en cada nuevo punto del proceso utiliza esta direcci
on de
b
usqueda se denomina metodo de la m
axima pendiente o metodo de Cauchy, pues fue el ingeniero frances Augustin Louis Cauchy (1789-1857) quien lo introdujo en 1847.
En el caso de la funci
on cuadr
atica Q(x), la f
ormula de recurrencia que se obtiene aplicando
este metodo es
x(k+1)

x(k)

b .

Ax(k)

(2.16)

El valor de k que minimiza Q(x) a lo largo de Q(x(k) ) es


#

k = #

g (k)

g (k)

$T

$T

g (k)
.

Ag (k)

El gran inconveniente del metodo de Cauchy es su lenta convergencia en cierto tipo de


funciones. En efecto, como en general,
#

Qk x(k) + k g (k) = g (k)

$T

Q x(k) + k g (k) = g (k)

$T

Q x(k+1) = 0,

2.5 Metodos de minimizacion

de donde se deduce que

p(k)

$T

175

p(k+1) = 0,

el n
umero de iteraciones que seran necesarias para minimizar una Q(x) con una matriz A mal
condicionada ser
a elevado. Como ejemplo, en la gura 2.4 se describe el proceso iterativo que
este metodo seguira para alcanzar el mnimo de una funci
on cuadr
atica relativamente mal
condicionada. Como se puede ver, el procedimiento atraviesa el valle que dene la funci
on de
un lado al otro del mismo, en vez de ir directamente por el valle como sera lo ideal. Este
hecho lo conrma el estudio de la velocidad de convergencia del metodo. Est
a denida por la
desigualdad

 #

$ 1
#
$ 1
1
T
(k1)
T
(k)
Q x
+ b Ab .
+ b Ab 1
Q x
2
2
2 (A)
Cuanto m
as grande sea 2 (A), m
as lenta sera la convergencia del metodo.
En la tabla 2.4 se describe el algoritmo de la m
axima pendiente para resolver el sistema de
ecuaciones lineales Ax = b.
Para probar la efectividad del metodo se ha construido articialmente un problema forzando
a que la matriz, adem
as de ser simetrica y denida positiva, este mal condicionada. La matriz
A proviene de multiplicar una matriz de Hilbert 5050 por su traspuesta. La respuesta del
problema se ha forzado que sea x = 1. Para evitar que el n
umero de condici
on de A sea muy
malo, se ha mejorado sumando a algunos elementos de la diagonal principal un uno. El n
umero
de condici
on resultante es aproximadamente 5 104 .
La codicaci
on del metodo en Fortran 77 para resolver este problema es la que sigue a
continuaci
on. Para conseguir llegar a la soluci
on el programa necesita 112 iteraciones.

x(0)

Figura 2.4
Proceso de convergencia del metodo de la m
axima pendiente aplicado a una funci
on
cuadr
atica

176

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

Tabla 2.4
Algoritmo de la m
axima pendiente para resolver Ax = b
x(0) 0; r(0) b; k = 1
(
(
while (r (k) (2 > b2 do
+T
+T
*
*
k r(k1) r (k1) / r (k1) Ar(k1)
x(k) x(k1) + k r (k1)
r (k) b Ax(k)
k k+1
end

PROGRAM Steep
C
parameter (n=50)
double precision a(n,n),b(n),x(n),r(n),prod,ro1,xnormb,rar
C
open(10,file=stp.dat)
C
read (10,*) a,b
C
x
r
ro1
C
C
C

= 0.0
= b
= prod(r,r,n)

*** Proceso iterativo ***


xnormb = epsilon(1.0)*dsqrt(ro1)*5
k
= 1
do while (dsqrt(ro1).gt.xnormb)
rar = 0.0
do i = 1,n
rar = rar+r(i)*prod(a(1,i),r,n)
end do
x = x+(ro1/rar)*r
do i = 1,n
r(i) = b(i)-prod(a(1,i),x,n)
end do
ro1 = prod(r,r,n)
k
= k+1
print *,k,ro1
end do

! Resultados de iteraciones

C
print (10f8.5),x
end
double precision function prod (x,y,n)
C
double precision x(n),y(n)
C
prod = 0.0
do i = 1,n

! Soluci
on

2.5 Metodos de minimizacion

177

prod = prod+x(i)*y(i)
end do
C
return
end

Observese que si k = 1, el esquema iterativo del metodo de la m


axima pendiente coincide
con el de Richardson. Tambien, que si A es diagonal con todos sus elementos iguales a uno y
k = 1, la f
ormula (2.16) dene una iteraci
on del metodo de Jacobi.

2.5.2

Direcciones de descenso conjugadas

Una importante clase de metodos de minimizacion es aquella en que se consideran como direcciones de descenso vectores p(0) , . . . , p(n1) que cumplen
#

p(i)

$T

Ap(j) = 0,

i = j.

(2.17)

Tales vectores son ortogonales con respecto al producto interior x|Ay = xT Ay, denido por
la matriz A, diciendose de ellos que son A ortogonales. Tambien se dicen conjugados respecto
a A.

Proposici
on 2.4 Si A es una matriz simetrica denida positiva y el conjunto de vectores
(0)
(1)
p , p , . . . , p(k) son A ortogonales, o conjugados con respecto a A, esos vectores son
linealmente independientes.

n. Supongamos que existen constantes i , i = 0, 1, 2, . . . , k, tales que


Demostracio
0 p(0) + + k p(k) = 0.
Multiplicando por A y efectuando el producto escalar por p(i) ,
#

(i)

i p
#

Ahora bien, dado que


i = 0.

p(i)

$T

$T

Ap(i) = 0.

Ap(i) > 0, pues A es denida positiva, se debe cumplir que

178

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

Teorema 2.13 (Teorema de las Direcciones Conjugadas) Si A es una matriz simetrica


denida positiva y p(0) , p(1) , . . . , p(n1) son conjugados con respecto a A, para todo x(0)
on de vectores que dene la expresi
on
n , la sucesi
x(k+1) = x(k) + k p(k)
donde

k =

b
#

Ax(k)

p(k)

$T

$T

(2.18)

p(k)
,

Ap(k)

obtenida seg
un el principio de minimizaci
on, converge a la soluci
on exacta de Ax = b en
no m
as de n iteraciones.
n. Como los p(0) , p(1) , . . . , p(n1) son linealmente independientes, cualquier vecDemostracio
n
tor en  se puede expresar como combinacion lineal de ellos. En particular, se puede escribir
que
x(0) = 0 p(0) + 1 p(1) + + n1 p(n1) ,
x
x designa la soluci
on exacta de Ax = b). Si se multiplica por A
para un conjunto 0 , 1 , . . . (
(k)
y efect
ua el producto escalar por p , se obtiene que
#

p(k)
#

k =

$T

x(0)
A x

p(k)

$T

(2.19)

Ap(k)

Siguiendo el proceso iterativo (2.18) desde x(0) hasta x(k) , se llegara a que
x(k) x(0) = 0 p(0) + 1 p(1) + + k1 p(k1) .
Al ser los vectores p conjugados con respecto a A, se cumple que
#

p(k)

$T

A x(k) x(0) = 0.

ltima expresi
on en (2.19) se obtiene
Sustituyendo el valor de (p(k) )T Ax(0) que resulta de esta u
la expresi
on de k :
#

k =

p(k)
#

$T

x(k)
A x

(k)

$T

(k)

Ap

p(k)

$T

A
x

(k)

$T

p(k)

$T

Ax(k)
=

(k)

Ap

b
#

Ax(k)

(k)

$T

$T

p(k)
.
(k)

Ap

2.5 Metodos de minimizacion

179

Este teorema garantiza no solo que las iteraciones convergen sino que, en ausencia de errores
de redondeo, lo hacen en un n
umero nito de ellas. Es decir, te
oricamente, los metodos de
minimizacion basados en el calculo de direcciones conjugadas son metodos directos aunque se
usen como iterativos.
Si la matriz A es diagonal con todos sus elementos positivos, las direcciones e1 , e2 , . . . , en
son direcciones conjugadas con respecto a esa matriz por lo que, en este caso, la relajacion
univariable es equivalente al metodo de minimizacion basado en el c
alculo de direcciones conjugadas.
Si P es la matriz cuyas columnas son los vectores p(0) , p(1) , . . . , p(n1) , la propiedad (2.17)
es equivalente a P T AP = D, donde D es una matriz diagonal. Haciendo el cambio de variable
x = P y, la funci
on cuadr
atica Q(x) de (2.9) queda
1
1
(P y)T AP y bT P y = y T Dy (P T b)T y
2
2
por lo que el metodo basado en el c
alculo de direcciones conjugadas en las variables originales
x es equivalente a una relajaci
on univariable en las variables y. La funci
on Q(x) alcanzar
a su
mnimo en, como maximo, n pasos.
El teorema y las consideraciones anteriores permiten concluir que el metodo basado en el
calculo de direcciones conjugadas puede ser adecuado para obtener la soluci
on del problema
en un n
umero de pasos conveniente. Ahora bien, c
omo se pueden determinar esas direcciones
conjugadas?
2.5.2.1

Determinaci
on de direcciones conjugadas

Un metodo inmediato sera elegir los vectores propios de la matriz A. Si x1 , x2 , . . . , xn son


esos vectores propios, con valores propios correspondientes 1 , 2 , . . ., n , se cumple que
(xi )T Axj = j (xi )T xj = 0,

i = j.

El problema est
a en que encontrar los vectores propios de A es una labor incluso m
as complicada
que resolver el sistema Ax = b.
Otra posibilidad sera ortogonalizar un conjunto de vectores linealmente independientes
1
y , y 2 , . . . , y n con respecto al producto interior x|Ay = xT Ay. Esta tambien es una tarea
complicada y que implica muchas operaciones.
2.5.2.2

Determinaci
on de direcciones conjugadas. M
etodo de los gradientes conjugados

La forma m
as ecaz de obtener un conjunto de direcciones conjugadas para resolver la ecuaci
on

Ax = b la constituye el metodo de los gradientes conjugados. Este genera una sucesion de


direcciones tratando de que sean pr
oximas a la de maxima pendiente en cada punto del proceso,
que de acuerdo con (2.15) es el negativo del gradiente, g = (Ax b) = b Ax = r, y
que se cumpla la condici
on de ser conjugadas. Si se elige p(0) = r(0) , y un punto cualquiera
como x(0) , a continuaci
on las direcciones, p(k) , seran las que denan una combinaci
on de r (k)
(k1)
(k)
(k)
(k1)
y direcciones previas p
, es decir p = r + k p
, de tal forma que se cumpla la

180

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales


T

condici
on de que p(k) Ap(k1) = 0. Para que esto sea as, el par
ametro k ha de ser:
#

k = p

(k1)

$T

Ar

(k)

#

p(k1)

$T

Ap(k1) .

Ademas, r(k) = b Ax(k) = b A(x(k1) k p(k1) ) = r(k1) + k Ap(k1) . Ordenando los


calculos, el esquema basico de recurrencia de cada punto del proceso es el que sigue.
Escoger un x(0) . Hacer p(0) = r (0) = b Ax(0)
for k = 0, 1, . . .
#
$T
$T
#
(k)
(k)
p
k = r
p(k) Ap(k)
x(k+1) = x(k) + k p(k)
(2.20)

r (k+1) = r (k) + k Ap(k)


#
#
$T
$T
(k)
(k+1)
k = p
Ar
p(k) Ap(k)
p(k+1) = r (k+1) + k p(k)
end

En el algoritmo que se deriva de este esquema, el primer paso sera identico al de maxima
pendiente. Como se puede observar, las u
nicas operaciones que requiere este esquema son
productos de matrices por vectores y de vectores entre s.
Para vericar que este procedimiento es un algoritmo de direcciones conjugadas, veriquemos que los vectores p(k) que se generan en el proceso son A ortogonales.
la soluci
Teorema 2.14 Sea A una matriz n n simetrica denida positiva y x
on de la
(k)
ecuaci
on Ax = b. Los vectores p generados por el algoritmo de los gradientes conjugados
(2.20) satisfacen:
#

p(k)

$T

Ap(j) = 0,

0 j < k,

k = 1, . . . , n 1,

(2.21)

. De esta manera, x(m) = x


para alg
un m n.
siendo p(k) = 0 a menos que sea x(k) = x
n. De las deniciones de k , k , r (k+1) y p(k+1) en (2.20) se tiene que
Demostracio
#

y que

p(j)

p(j)

$T

$T

r(j+1) = p(j)
#

Ap(j+1) = p(j)

$T
$T

r(j) + j p(j)

$T

Ap(j) = 0,

Ar(j+1) + j p(j)

$T

Ap(j) = 0,

j = 0, 1, . . .

j = 0, 1, . . .

(2.22a)

(2.22b)

Ademas de la relacion de la expresi


on (2.21), probaremos que los vectores residuo r (j) =
b Ax(j) satisfacen
#

r(k)

$T

r(j) = 0,

0 j < k,

k = 1, . . . , n 1.

(2.23)

2.5 Metodos de minimizacion

181

Es decir, son ortogonales.


Supongamos por inducci
on que las igualdades de las expresiones (2.21) y (2.23) se cumplen
para alg
un k < n 1. Probemos que se cumplen para k + 1.
Como p(0) = r (0) , se cumplen para k = 1. Para todo j < k, de las deniciones de r (k+1) y
p(k+1) de (2.20), se cumple que
#

r(j)

$T

r (k+1) =

#
#

r(j)

r(j)

$T #
$T

r (k) + k Ap(k) = r(j)


#

r (k) + k p(k)

$T

$T

r(k) + k p(k)

$T

Ar (j)

A p(j) j1 p(j1) = 0

pues, por la hip


otesis de inducci
on, los tres sumandos son cero. M
as aun, usando la denici
on
de p(k+1) , k y r(k+1) de (2.20),
#

r(k)

$T

r (k+1) =

p(k) k1 p(k1)
#

= k1 p(k1)

$T

$T

r(k+1)
#

r(k+1) = k1 p(k1)

$T #

r(k) + k Ap(k) = 0

pues los u
ltimos dos sumandos son cero de acuerdo con (2.22). Con esto hemos probado que
(2.23) se cumple para k + 1.
Para todo j < k, de la denici
on de p(k+1) y r (k+1) de (2.20), por la hip
otesis de induccion
y de (2.21) se tiene que
#

p(j)

$T

Ap(k+1)

p(j)

$T

r (k+1)

= j1 r(j+1) r(j)

+ k

$T

p(k)

p(j)

$T

Ar (k+1)

r (k+1) = 0.

Observese que hemos supuesto que j = 0; volveremos sobre este asunto mas adelante.
Como por (2.22b) se tiene que
#

p(k)

$T

Ap(k+1) = 0,

se concluye que la expresion (2.21) tambien se cumple para k + 1 completandose as el razonamiento inductivo.
Probemos a continuaci
on que los vectores p(k) son distintos de cero a no ser que se haya
llegado a la soluci
on. Para ello, supongamos que p(m) = 0 para alg
un m < n. De la denici
on
(k+1)
de p
de (2.20) se tiene que
#

0 =
#

=
dado que

p(m)
r (m)

$T
$T

p(m) = r(m) + m1 p(m1)


#

r (m) + 2m1 r (m)

$T

$T #

r(m) + m1 p(m1)
#

2
p(m1) + m1
p(m1)

r(m)

$T

p(m1) = 0,

$T

$
#

p(m1) r(m)

$T

r(m)

182

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

. Por otro
de acuerdo con (2.22a). De aqu que r (m) = b Ax(m) = 0, por lo que x(m) = x
(0)
(1)
(n1)
lado, si los vectores p , p , . . . , p
son todos distintos del cero, por el teorema 2.13 de
.
las direcciones conjugadas, se cumple que x(n) = x
Por u
ltimo, volvamos sobre el supuesto mencionado anteriormente de que j = 0. De la
denici
on de p(k+1) en (2.20) se tiene que
#

r(j)

$T

p(j) = r (j)

$T #

r(j) + j1 p(j1) = r(j)

$T

r(j) .

(2.24)

De aqu y de acuerdo con la denici


on de j en (2.20), esta se puede expresar como
#

j = #

r (j)

p(j)

$T

$T

r(j)
.

(2.25)

Ap(j)

, por lo que el proceso se parara


Por consiguiente, si j = 0, r(j) = 0 y, como antes, x(j) = x
en xj .
De las deniciones de x(k+1) , r(k+1) y p(k+1) en (2.20) y de (2.23) se cumple que
#

r (k+1)

$T

p(k+1) =

r (k) + k Ap(k)

r (k)

$T #

$T

p(k+1) = r(k)
$

$T

p(k+1)

r(k+1) + k p(k) = k r (k)

$T

p(k) .

De esta manera, usando (2.24), k se puede expresar de esta otra forma:


#

k =

r(k+1)
#

(k)

$T
$T

p(k+1)
=
(k)

r (k+1)
#

(k)

$T
$T

r(k+1)
.
r

(k)

(2.26)

Las nuevas deniciones de y de las expresiones (2.25) y (2.26) son las que se usan
habitualmente en los c
alculos de los algoritmos que implementan el metodo de los gradientes
conjugados. Las de (2.20) se emplean con nes te
oricos.

2.5.2.2.1

Convergencia

El siguiente resultado es fundamental para determinar la velocidad de convergencia del metodo


de los gradientes conjugados. Para formularlo, introducimos la notaci
on [p(0) , p(1) , . . . , p(k) ]
(0)
(1)
(k)
para designar el subespacio generado por los vectores p , p , . . . , p .

2.5 Metodos de minimizacion

183

Teorema 2.15 Sean p(0) , p(1) , . . . , p(n1) los vectores de direcci


on que genera el algoritmo
de los gradientes conjugados y r(0) , r(1) , . . . , r(n1) los vectores residuo. Se cumple que

Ap(i) p(0) , p(1) , . . . , p(i+1) ,


r(i) p(0) , p(1) , . . . , p(i) ,

i = 0, . . . , n 2;

p(0) , p(1) , . . . , p(i) = p(0) , Ap(0) , . . . , Ai p(0)

(2.27)

i = 0, . . . , n 1;

(2.28)

i = 0, . . . , n 1.

= r (0) , Ar (0) , . . . , Ai r(0) ,

(2.29)

n. Probaremos las expresiones (2.27) y (2.28) por inducci


Demostracio
on. De la denici
on de
(k+1)
(k+1)
r
yp
en (2.20) se tiene que
p(1) = r(1) + 0 p(0) = r(0) + 0 Ap(0) + 0 p(0) .
De aqu que, como r (0) = p(0) ,
(0)

Ap

01

(1)

(0)

0 p

(0)

on (2.28) tambien se cumple


por lo que se cumple (2.27) para i = 0. Como r(0) = p(0) , la expresi
para i = 0.
Supongamos ahora que lo expresado en (2.27) y (2.28) se cumple para i = 0, . . . , k < n 2.
De la denici
on de r (k+1) de (2.20) y de la hip
otesis de induccion,
r(k+1) = r (k) + k Ap(k) =

j p(j) + k

j=0

k+1

j p(j) .

j=0

De aqu que r (k+1) [p(0) , . . . , p(k+1) ]. De la denici


on de r(k+1) y p(k+1) en (2.20) se llega a
que
p(k+2) = r (k+2) + k+1 p(k+1) = r (k+1) + k+1 Ap(k+1) + k+1 p(k+1) .
Como r (k+1) [p(0) , . . . , p(k+1) ], entonces Ap(k+1) [p(0) , . . . , p(k+2) ]. Con esto se completa
la inducci
on salvo en lo que respecta a que (2.28) tambien se cumple para r (n1) ; esto, no
obstante, se deduce de la misma manera.
Para probar la expresi
on (2.29) usamos inducci
on una vez m
as. Es evidente que se cumple
(0)
(0)
para i = 0 puesto que p = r . Supongamos que se cumple para k < n 1. Por la hip
otesis
de inducci
on y la expresi
on (2.27) se tiene que
k+1 (0)

k (0)

=A A p

= A

(j)

j p

j=0

(j)

j Ap

j=0

Para cualquier j se verica que


k+1

j=0

j (0)

j A p

k+1 (0)

= k+1 A

k

j=0

j Aj p(0) .

(0)

(k+1)

,..., p

184

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

El primer sumando de la derecha de esta u


ltima expresi
on pertenece a [p(0) , . . . , p(k+1) ], de
acuerdo con la ecuaci
on anterior; el segundo tambien por la hip
otesis de inducci
on. De esta
manera hemos probado que

p(0) , Ap(0) , . . . , Ak+1 p(0) p(0) , p(1) , . . . , p(k+1) .

Para probar la inclusi


on opuesta primero escribamos
k+1

j p(j) = k+1 p(k+1) +

j=0

j p(j) .

j=0

El segundo termino de esta expresion pertenece a [p(0) , . . . , Ak p(0) ] por la hip


otesis de induc(k+1)
(k+1)
cion; el primero, de acuerdo con la denici
on de r
yp
en (2.20), se puede escribir
como
#
$
#
$
(k+1)
(k+1)
(k)
(k)
(k)
(k)
k+1 p
= k+1 r
+ k p
= k+1 r + k Ap + k p
.
Los terminos primero y tercero de la expresi
on entre parentesis del miembro de la dere(0)
cha de esta ecuacion pertenecen a [p , . . . , p(k) ], de acuerdo con (2.28), y por lo tanto a
[p(0) , . . . , Ak p(k) ], por la hip
otesis de inducci
on. Usando (2.27) y la hip
otesis de inducci
on,
(k)
Ap se puede escribir
(k)

Ap

=A

j (0)

j A p

j=1

j Aj+1 p(0) ,

j=1

por lo que pertenece a [p(0) , . . . , Ak+1 p(0) ]. De esta manera hemos probado que

(0)

(k+1)

,..., p

(0)

k+1 (0)

,..., A

y, por consiguiente, la primera igualdad de (2.29). La segunda es trivial puesto que r (0) = p(0) .
Un subespacio de la forma [p(0) , . . . , Ai p(0) ] se denomina subespacio de Krylov.
Teorema 2.16 El punto obtenido en la iteraci
on k del metodo de los gradientes conjugados
cumple que
(
(
(
(
(
(
(
(
x(k) ( 2k (x
x(0) (
(2.30)
(x
A

(
(
(
(

(
(
(
(
x(0) ( ,
x(k) ( 2 2 k (x
(x
2

donde xA =
= ( 2 1)/( 2 + 1) y 2 es el n
umero de condici
on (n
umero
de condici
on 2) de A asociado a  2 de A.
xT Ax,

Este resultado es una consecuencia del siguiente teorema.

2.5 Metodos de minimizacion

185

Teorema 2.17 Los puntos obtenidos en las iteraciones del metodo de los gradientes conjugados cumplen
(
(
(
(
(
(
(
(
x(k) ( < (x
x(k1) (
(x
2

.
a menos que x(k1) = x
n. Observemos primero que
Demostracio
(
(2
#
$T #
$
(
(
x(k1) ( = x
x(k) + x(k) x(k1)
x(k) + x(k) x(k1)
x
(x
2
5
6
5
6

x(k) |
x(k) |x(k) x(k1)
x
x x(k) + 2 x
5

+ x(k) x(k1) |x(k) x(k1) .


o que
(
(2
(
(2
(2
5
6 (
(
(
( (k)
(k1) (
(k) (
(k) (k)
(k1)
(k1) (

x
=
x

x
+
2
x

x
|x

x
+
x

x
(
(
(
(
(
( .
2

(2.31)

La u
ltima cantidad del termino de la derecha de esta ecuacion es positiva a no ser que x(k) =
x(k1) . Como venimos diciendo, el hecho de que x(k) sea igual a x(k1) implica que x(k1) es
. De aqu que, si x(k) = x(k1) , es suciente probar que el segundo
la soluci
on del problema, x
termino del miembro de la derecha de (2.31) es no negativo.
. Como
Sea x(m) = x
x(m) x(k) = x(m) x(m1) + x(m1) x(k+1) + x(k+1) x(k)
se tiene, usando la denici
on de x(k+1) en (2.20), que
#

$
(k) T

x
x

(k)

(k1)

$
(m1) T

= m1 p

(k1)

$
(k) T

+ + k p


(k1)

k1 .

De la redenici
on de j de (2.25) se sabe que todos los i son no positivos por lo que es
suciente probar que
#

$
(j) T

p(k1) 0,

j k.

Aplicando repetidamente la denici


on de p(k+1) de (2.20) se tiene que
p(j) = r(j) + j1 r (j1) + + (j1 k )r (k) + (j1 k1 )p(k1) .

(2.32)

En particular, para k = 1, la expresi


on (2.32) indica que p(j) [r(0) , . . . , r(j) ], por lo que,
junto con la ortogonalidad de r(i) recordemos (2.23), p
agina 180, se tiene que
#

r (j)

$T

p(k1) = 0,

j k.

186

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

En consecuencia, de (2.32) y de la redenici


on de k de (2.26), se obtiene que
#

p(j)

$T

$T

$ #

$T

p(k1) = j1 k1 p(k1)
=

#*

+T
rj

rj

p(k1)

p(k1)
p(k1)

  #

r (k1)

$T

r(k1)

0.

Los resultados anteriores no tienen en cuenta ninguna propiedad de la matriz A. El siguiente


s.
Teorema 2.18 Si A tiene s
olo m valores propios distintos, el metodo de los gradientes
conjugados converge en un m
aximo de m iteraciones.
2.5.2.2.2

Interpretaci
on geom
etrica del m
etodo de los gradientes conjugados

En dos dimensiones, el metodo de los gradientes conjugados se puede interpretar geometricamente con la ayuda del problema que se representa en la gura 2.5 en el que se resuelve
Ax = b, donde


 
2 0
4
y b=
.
A=
0 3
1
En dos dimensiones, la ecuaci
on f (x1 , x2 ) = z representa un paraboloide elptico en 3 . Las
curvas de nivel f (x1 , x2 ) = cte. son elipses centradas en el mismo punto.
El metodo de los gradientes conjugados procede de la siguiente manera:
1. Desde el punto x(0) = 1 se determina la curva de nivel de la funci
on
f (x(0) ) =

#
$
1 # (0) $T
3 # (0) $2
(0) 2
(0)
(0)
x
Ax(0) bT x(0) = x1
+
x2
4x1 x2 = cte.
2
2

La constante sera 2,5.


2. Se traza la tangente en x(0) a esta elipse y su normal en este punto p(0) :


(0)

1
=
.
1

3. Se determina el punto medio, x(1) , del segmento de recta que va desde x(0) hasta el punto
donde p(0) corta a esa elipse. Ese punto medio es


(1)

1,8
=
.
0,2

4. Desde x(1) se determina la nueva elipse:


#

$
(1) 2

f (x(1) ) = x1

3 # (1) $2
(1)
(1)
x2
4x1 x2 = 4,1.
2

2.5 Metodos de minimizacion

187

x2

...... ...... ...... ...... ..... ...... ...


.
.
.
.
.
.
... ..
..
...
. ...
.
.
.
....
.
(0) .
x ...
....
..
...
.
..
...
..
...
....................
p(0)
..
.... x(2) .....
...
...
.
...
.
(1)
.
.
.....p ....
.
..
...
x(1) ..............
..
...
.
2
3 ..
.... 1
...
.....
.
.
.
.....
.
....
.....
.
.
.
.
..
...... ...
... ..... ...... ..... ...... ...... .

x1

Figura 2.5
Interpretaci
on geometrica del metodo de los gradientes conjugados
5. Desde x(1) se determina la direccion p(1) que es A conjugada con respecto a p(0) . Esta
direccion pasar
a por el centro de la nueva elipse uniendo el punto x(1) con el diametralmente opuesto por el que se podra trazar una tangente a esta elipse que fuese paralela
on es
a p(0) . La nueva direcci
 
3
p(1) =
.
2
#

Comprobar que p(1)

$T

Ap(0) = 0 es inmediato:


2 0
[3, 2]
0 3



1
= 0.
1

6. Se determina el punto medio, x(2) , de ese diametro. La soluci


on del problema es este
nuevo punto:


2
(2)
x =
.
1/3

188

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

2.5.2.2.3

Implementaci
on pr
actica del m
etodo de los gradientes conjugados

Los errores de redondeo inherentes a la implementaci


on en cualquier ordenador del metodo de
los gradientes conjugados tienden a hacer perder la ortogonalidad (2.23) de los vectores residuo.
Como consecuencia de ello la propiedad de que el metodo converge en un n
umero jo de pasos
no se cumple en la pr
actica. Este hecho hace que el metodo de los gradientes conjugados se
considere mas un metodo iterativo que uno directo.
Todas las implementaciones practicas del metodo de los gradientes conjugados siguen un
esquema como el de la tabla 2.5. Dado un b n , una matriz simetrica denida positiva
A nn y una tolerancia (la precisi
on de la m
aquina donde se trabaje), ese algoritmo
calcula un vector x n tal que b Ax2
b
.
Obs
ervese que esta implementacion parte
=
2
(0)
de x = 0; si se comenzase desde otro punto habra que hacer al principio r(0) = b Ax(0) .
La codicaci
on en Fortran 77 de este algoritmo para resolver el problema
4x1 x2
x4
x1 + 4x2 x3
x2 + 4x3
x1
+ 4x4
x2
x4
x3

= 0
= 5
x6 = 0
x5
= 6
+ 4x5 x6 = 2
x5 + 4x6 = 6
x5

es la que sigue.
PROGRAM Cg
C

Tabla 2.5
Algoritmo de los gradientes conjugados para resolver Ax = b
x(0) 0; r (0) b; 0 r (0) 22 ; k = 1

while k1 > b2 do


if k = 1 then
p(1) r (0)
else
k k1 /k2
p(k) r (k1) + k p(k1)
end
w Ap(k)
*
+T
k k1 / p(k) w
x(k) x(k1) + k p(k)
r(k) r (k1) k w
(2
(
k (r (k) (
k k+1
end

2.5 Metodos de minimizacion

189

parameter (n = 6)
real a(n,n),b(n),x(n),r(n),p(n),w(n)
C
data a/4.,-1.,0.,-1.,0.,0.,-1.,4.,-1.,0.,-1.,0.,0.,-1.,4.,0.,0.,
+
-1.,-1.,0.,0.,4.,-1.,0.,0.,-1.,0.,-1.,4.,-1.,0.,0.,-1.,0.,-1.,
+
4./
data b/0.,5.,0.,6.,-2.,6./
C
x
r
ro0
ro1
C
C
C

=
=
=
=

0.
b
prod(r,r,n)
ro0

*** Proceso iterativo ***


xnormb = epsilon(1.0)*sqrt(ro0)*5
k
= 0
do while (sqrt(ro1).gt.xnormb)
betak = ro1/ro0
if (k.eq.0) betak = 0
p = r+betak*p
do i = 1,n
w(i) = prod(a(1,i),p,n)
end do
alfak = ro1/prod(p,w,n)
x
= x+alfak*p
r
= r-alfak*w
ro0
= ro1
ro1
= prod(r,r,n)
k
= k+1
print *,k,x
end do

C
end
real function prod (x,y,n)
real x(n),y(n)
C
prod = 0.0
do i = 1,n
prod = prod+x(i)*y(i)
end do
C
return
end

Los puntos del proceso iterativo que se obtienen con este codigo son los de la tabla 2.6.
Si este mismo codigo se utiliza para resolver el problema al que aludamos en el apartado
dedicado al metodo de la m
axima pendiente, aquel en el que la matriz A era una matriz de
Hilbert 50 50, el n
umero de iteraciones que necesita es solo 7.
Si tambien se resuelve el problema que ha permitido ilustrar geometricamente el metodo de
los gradientes conjugados con el c
odigo anterior, al que se le han de efectuar las modicaciones
obvias pues no se parte de x(0) = 0 sino de x(0) = 1, el resultado que se obtiene es el que sigue.
1
2

1.800000
2.000000

2.000000E-01
3.333333E-01

2.000000
4.800000E-01

-2.000000
3.200000E-01

Las dos u
ltimas columnas indican los componentes del vector p(k) . Como se puede comprobar

190

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

Tabla 2.6
Proceso de convergencia de la resolucion de un sistema de ecuaciones lineales mediante el
metodo de los gradientes conjugados
k

(k)
x1
(k)
x2
(k)
x3
(k)
x4
(k)
x5
(k)
x6

0,000000
0,000000
0,000000
0,000000
0,000000
0,000000

0,000000
1,069915
0,000000
1,283898
-0,427966
1,283898

1,022376
1,686452
1,022376
2,060920
0,831099
2,060920

0,990783
1,991635
0,990783
2,005324
1,011825
2,005324

1,000000
2,000000
1,000000
2,000000
1,000000
2,000000

f
acilmente haciendo las simplicaciones oportunas, p(1) y p(2) coinciden con las que se vieron
con anterioridad:

 

3
1
(1)
(0)
; p =
.
p =
2
1
Los pasos que sigue la resolucion del problema son pues identicos a los que se estudiaron
geometricamente.
2.5.2.2.4

M
etodo de los gradientes conjugados con precondicionamiento

Ya vimos al estudiar la velocidad de convergencia del metodo de los gradientes conjugados que
esta la dena la expresi
on
(
(
(
(

(
k(
(0) (
(k) (
x ( ,
x ( 2 2 (x
(x
2

representa la soluci
umero de condici
on
donde x
on exacta, = ( 2 1)/( 2 + 1) y 2 es el n
2 de la matriz A. Como esta es simetrica y positiva denida, 2 = n /1 , donde n indica
el mayor valor propio de A. De acuerdo con esta expresion, cuanto m
as grande sea 2 mas
lentamente convergera el proceso.
El estudio de estas u
ltimas consideraciones ha llevado a considerar el que se conoce en la
literatura como el metodo de los gradientes conjugados con precondicionamiento. La idea que
subyace en el es muy sencilla: sustituir la b
usqueda de la soluci
on de la ecuaci
on Ax = b por

la de A
x = b de tal forma que la condici
on de la nueva matriz A sea mejor que la de A. Esto
se suele hacer encontrando una matriz no singular simetrica C tal que A = C 1 AC 1 . En este
la soluci
x = b,
.
caso, una vez resuelto A
on original se obtendra sin m
as que hacer x = C 1 x
1/2

Observese que la mejor matriz C posible es A , pues en ese caso A = I.


Haciendo
M = C2

p = C 1 p

x = C 1 x
1
z = C r
r = C
r = b Ax

191

2.5 Metodos de minimizacion

y sustituyendo estas expresiones en el algoritmo de la tabla 2.5, se tiene el algoritmo de los


gradientes conjugados con precondicionamiento que describe la tabla 2.7.
Se puede comprobar que los residuos y las direcciones verican que
#

y que

p(j)

r(j)

$T

$T #

M 1 r(i) = 0,
$

i = j,

C 1 AC 1 p(i) = 0,

i = j.

Para que el algoritmo sea ecaz es necesario resolver rapidamente el sistema M z (k1) =
r(k1) pues de lo contrario otros metodos resultaran m
as ventajosos. Ahora bien, resolver
ecazmente ese sistema esta ntimamente relacionado con la eleccion de un buen precondicionador, M .
Existen muchos precondicionadores en la literatura especializada. Van desde los sencillos,
#

1/2

M = diag d1 , . . . , dn1/2 ,

dj = aj 22 ,

(2.33)

o un poco mas complicados,


M = (D + L)D1 (D + L)T ,
tambien llamado SSOR (recordemos el metodo SSOR en s mismo), a los mas sosticados
basados en factorizaciones incompletas de Cholesky de la matriz A. Como se puede intuir,
Tabla 2.7
Algoritmo de los gradientes conjugados con precondicionamiento para resolver Ax = b
x(0)
0; r (0) b; 0 r (0) 22 ; k = 1
while k1 > b2 do
if k = 1 then
p(1) r(0)
else
Resolver M z (k1) = r (k1)

* (k1) +T (k1) * (k2) +T (k2)
k z
r
r
z
p(k) z (k1) + k p(k1)
end
w Ap(k)

* (k1) +T (k1) * (k) +T
k z
r
w
p
x(k) x(k1) + k p(k)
r (k) r (k1) k w
k r (k) 22
k k+1
end

192

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

muchos precondicionadores est


an dise
nados para resolver sistemas especiales en los que la
matriz surge de alg
un tipo de problema concreto o posee una estructura determinada.
En lo que sigue se ilustra con un programa codicado en Fortran 77 el algoritmo de los
gradientes conjugados con precondicionamiento para resolver un problema que se genera con
n
umeros aleatorios [0, 1]. El precondicionador que se utiliza es el de la expresi
on (2.33).
PROGRAM Cgp
C
implicit double precision (a-h,o-z)
C
parameter (n=40)
real ra
double precision a(n,n),b(n),x(n),r(n),p(n),w(n),m(n),z(n),zm2(n),
+
rm2(n),aux(n,n),baux(n)
C
do i = 1,n
do j = 1,n
call random (ra)
aux(i,j) = dble(ra)
end do
baux(i) = dble(i)
end do
do i = 1,n
do j = 1,n
a(i,j) = prod(aux(1,i),aux(1,j),n)
end do
end do
do i = 1,n
b(i) = prod(a(1,i),baux,n)
end do

! Generaci
on aleatoria
! de un problema con
! soluci
on = | 1|
!
| 2|
!
| 3|
!
| .|
!
| .|
!
T
|40|
! A=AUX *AUX

do i = 1,n
m(i) = dsqrt(prod(a(1,i),a(1,i),n))
end do

! Obtenci
on del
! precondicionador

C
C
C

*** Proceso iterativo ***


xnormb = epsilon(1.D0)*1000.*sqrt(prod(b,b,n))
x
= 0.
r
= b
k
= 1
ro1
= prod(b,b,n)
do while (dsqrt(ro1).gt.xnormb)
z
= r/m
betak = prod(z,r,n)/prod(zm2,rm2,n)
if (k.eq.1) betak = 0
p = z+betak*p
do i = 1,n
w(i) = prod(a(1,i),p,n)
end do
alfak = prod(z,r,n)/prod(p,w,n)
x
= x+alfak*p
rm2
= r
r
= r-alfak*w
zm2
= z
ro1
= prod(r,r,n)
k
= k+1
print *,k,x,ro1
! Salida de resultados

2.6 Comparacion numerica de los algoritmos

193

end do
C
end
double precision function prod (x,y,n)
double precision x(n),y(n)
prod = 0.0D0
do i = 1,n
prod = prod+x(i)*y(i)
end do
return
end

El proceso converge en 65 iteraciones. Si para resolver este problema no se utiliza precondicionador, el proceso tambien converge en un n
umero de iteraciones muy semejante, aunque
mayor.

2.6

Comparaci
on num
erica de los algoritmos

Para poder comparar las prestaciones numericas de los algoritmos iterativos que hemos presentado para resolver un sistema de ecuaciones lineales, Ax = b, hemos utilizado el problema
al que nos hemos referido anteriormente: el generado a partir de una matriz de Hilbert 50 50.
La matriz del sistema A proviene de multiplicar esa matriz de Hilbert por su traspuesta. La
respuesta del problema se fuerza que sea x = 1. Para evitar que el n
umero de condici
on de A
sea muy malo, se mejora sumando a algunos elementos de la diagonal principal el n
umero 1.
El n
umero de condici
on resultante es aproximadamente 5 104 .
Los resultados que se obtienen con los metodos de Gauss-Seidel, SOR, m
axima pendiente y
gradientes conjugados, partiendo del punto x = 0, se describen en la tabla 2.8. El metodo de
Jacobi no puede resolver este problema pues diverge. Para que los resultados sean coherentes,
el criterio de nalizaci
on para todos los procedimientos es conseguir que b Ax2 < 105 .
Tabla 2.8
Resultados obtenidos por diversos metodos iterativos para resolver un problema lineal mal
condicionado de 50 ecuaciones con 50 inc
ognitas
Metodo

N
umero de iteraciones

Gauss-Seidel
w = 1,5
SOR w = 1,75
w = 1,863
M
axima pendiente
Gradientes conjugados

2673
1450
827
344
112
7

194

2.7

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

Mnimos cuadrados y m
etodos iterativos

Cuando los problemas de mnimos cuadrados son de grandes dimensiones o dispersos, una
buena alternativa a la de utilizar metodos directos como los estudiados en el captulo 1, o los
que se estudian en el captulo 3, consiste en utilizar los metodos iterativos. La idea consiste en
resolver iterativamente las ecuaciones normales,
AT (b Ax) = 0,

(2.34)

sin tener que obtener explcitamente el producto AT A pues, como sabemos, puede presentar
dicultades numericas.

2.7.1

M
etodo de Jacobi

El metodo de Jacobi calcula una sucesi


on x(k) , k = 1, 2, . . ., cuya relaci
on de recurrencia est
a
dada por la expresi
on
(k+1)

xi

(k)

= xi

+ aTi b Ax(k) /di ,

i = 1, . . . , n,

donde A = [a1 , . . . , an ] mn y di = ai 22 . Designando en este caso como D la matriz
diagonal diag(d1 , . . . , dn ), el metodo de Jacobi para problemas de mnimos cuadrados tiene
como esquema iterativo en forma matricial el siguiente:
#

x(k+1) = x(k) + D1 AT b Ax(k) .


Como se puede observar, no es necesario calcular el producto AT A explcitamente.

2.7.2

M
etodo de Gauss-Seidel

El metodo de Gauss-Seidel calcula una sucesi


on x(k) , k = 1, 2, . . ., cuyo esquema iterativo en
forma matricial es
#

x(k+1) = x(k) + AT b Lx(k+1) (D + LT )x(k) ,


donde AT A = L + D + LT . En Bj
ork y Elfving [1979] se expone una forma pr
actica de utilizar
el metodo de Gauss-Seidel para resolver (2.34) trabajando s
olo con la matriz A. En el, cada
iteraci
on se divide en n pasos o iteraciones menores: haciendo z (1) = x(1) , se calcula
#

z (j+1) = z (j) + ej aTj b Az (j) /dj ;

j = 1, 2, . . . , n,

donde ej , como siempre, es el vector unitario cuyo componente j es uno y dj es el mismo que
antes. De esta manera se tiene que x(k+1) = z (k+1) . Observese que en cada iteracion menor, j,
(j)
solo se modica zj .

2.7 Mnimos cuadrados y metodos iterativos

195

El vector de residuos, r(j) = bAz (j) , se puede obtener f


acilmente de iteracion en iteraci
on.
En efecto, si r(1) = b Ax(1) ,
z (j+1) = z (j) + j ej ,

donde j = aTj r(j) /dj .

por lo que
r(j+1)

= b
=bA
+ j ej
(j)
(j)
= b Az Aj ej = r j aj .
Az (j+1)

z (j)

(2.35)

En cada iteraci
on menor j, de esta forma, solo es necesario acceder a la columna j de la matriz
A.

2.7.3

M
etodo de relajaci
on SOR

Este metodo se obtiene de (2.35) sin m


as que hacer
j = aTj r(j) /dj ,

0 < < 2.

Bj
ork [1990] explica c
omo generalizar la aplicaci
on de los metodos iterativos para resolver
problemas de mnimos cuadrados al caso de matrices no cuadradas. Para ello se descompone
la matriz A de la forma A = M N de tal forma que los subespacios imagen y n
ucleo de A y
M sean iguales. El esquema iterativo en forma matricial que se obtiene es
x(k+1)

N x(k)

+b .

El proceso converge a x = A b para todo x(0) si y solo si (M N ) < 1.

2.7.4

M
etodo de los gradientes conjugados

El metodo de los gradientes conjugados aplicado a las ecuaciones normales es el que se describe
en la tabla 2.9. Tambien se puede aplicar cuando A no tiene rango completo. Si x(0) Im(AT ),
lo que ocurre cuando x(0) = 0, x(k) converge a AT b. El algoritmo requiere almacenar dos
vectores de dimension n, x y p, y dos vectores de dimension m, r y q. Cada iteraci
on requiere
alrededor de 2nz(A) + 3n + 2m sumas/restas y multiplicaciones (nz(A) designa el n
umero de
elementos distintos de cero de A).
Como en el caso general y en este de los mnimos cuadrados con mayor raz
on pues la
condici
on de AT A suele ser mala, para mejorar las prestaciones del metodo de los gradientes
conjugados se recurre al precondicionamiento. Si el precondicionador, M , se hace igual a R, el
factor de Cholesky de AT A, la condici
on (AM 1 ) = (Q) = 1: el precondicionador ideal es,
por tanto, R. Cualquier precondicionador debe tratar de conseguir aproximar bien R realizando
el menor n
umero de operaciones posible.
Existen muchos precondicionadores en la literatura. El m
as utilizado por su ecacia, aunque
el mas complicado de calcular, es
M = U PcT ,

196

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

Tabla 2.9
Algoritmo de los gradientes conjugados para resolver AT (b Ax)
r (0) b Ax(0) ; p(0) = s(0) = AT r (0) ; 0 = s(0) 22

while ( k > AT b2 ) do


q (k) Ap(k)
k k /q (k) 22
x(k+1) x(k) + k p(k)
r (k+1) r(k) k q (k)
s(k+1) AT r (k+1)
k+1 s(k+1) 22
k k+1 /k
p(k+1) s(k+1) + k p(k)
end

donde U resulta de la factorizaci


on
Pf APc = LU.
Con la notaci
on Pf se indica un conjunto de permutaciones de las; Pc indica unas permutaciones de columnas. El lector interesado en estos aspectos puede consultar Bjork [1990].

Referencias
Todo lo que se expone en este captulo relativo a los metodos de Jacobi, Gauss-Seidel y Relajaci
on se puede encontrar en Axelsson [1996], Varga [1962], Young [1971], Lascaux y Theodor
[1987], Stoer y Bulirsch [1980] y Ciarlet [1988]. El metodo SSOR est
a basado en Ortega [1988].
Todos los programas de ordenador del captulo son del autor. Parecidos, a excepci
on de los
relativos a gradientes conjugados, se pueden encontrar en Hager [1988], Atkinson, Harley y
Hudson [1989] y Lascaux y Theodor [1987].
Seg
un se expone, el metodo de los gradientes conjugados y su teora es de Ortega [1988].
Tambien se pueden encontrar enfoques muy similares en Stoer y Bulirsch [1980], Lascaux y
Theodor [1987], Hestenes [1980], Golub y Van Loan [1983] y [1989] y Ortega y Rheinboldt
[1970]; lo relativo a optimizaci
on en Gill, Murray y Wright [1981] y Luenberger [1984]; lo
relativo a precondicionamiento en Golub y Van Loan [1989]. La interpretaci
on geometrica es
de Engeln-M
ullges y Uhlig [1996].
Todo lo que hace referencia a procesos iterativos y mnimos cuadrados se puede estudiar en
Bj
ork [1990] y [1996].

Ejercicios
2.1. Que se puede decir de un metodo iterativo para resolver un sistema lineal si la matriz de ese
metodo tiene un radio espectral igual a cero?
2.2. El objetivo de este ejercicio es demostrar que, en general, dos metodos iterativos son difcilmente
comparables.

Ejercicios

a) Sea la matriz

,
A=

197

1 2 2
1 1 1 .
2 2 1

Demostrar que (J) < 1 < (G), donde J es la matriz del metodo de Jacobi y G la del de
Gauss-Seidel que poder aplicar en este caso.
b) Sea ahora

,
A=

2 1 1
2 2 2 .
1 1 2

Demostrar que (G) < 1 < (J).


2.3. Sea el sistema lineal

2 1
x1
1 2 1
x2

1 2 1 x3
x4
1 2

  

x
A

19
19
= 3 .
12
   
b

a) Calcular la solucion exacta de este sistema mediante eliminacion de Gauss.


(k)

(k)

(k)

(k)

b) Calcular los vectores x(k) = [x1 , x2 , x3 , x4 ], k 6, que se obtienen aplicando los


metodos iterativos de Jacobi, Gauss-Seidel y SOR para = 1.1, 1.2, . . . , 1.9, partiendo del
punto inicial x(0) = 0.
2.4. Se considera la matriz

1
2 + 1
1
2 + 2

.
.
.

..
..
..
A=
,

1
2 + n1
1
1
2 + n

i 0,

1 i n,

y la descomposicion A = M N , donde
N = diag( i ),
siendo un parametro 0. Estudiar la convergencia del metodo iterativo asociado a esta descomposicion seg
un el valor del par
ametro (existencia de un intervalo I  tal que (M1 N )
< 1, para I y existencia de un parametro optimo).
2.5. Considerese el sistema lineal de ecuaciones
  


x1
10 25
5
.
=
x2
1 10
7

      

x
A
b
La matriz de Jacobi J = I D1 A correspondiente a este sistema es


0 2,5
J=
.
0,1 0

198

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales


a) Como J1 = 2, 5 nos dice la desigualdad e(k) 1 J1k e(0) 1 algo respecto a la convergencia del metodo de Jacobi en este caso?
b) Comprobar que e(k) 1 5 0,5k e(0) 1 . Las iteraciones del metodo de Jacobi aplicado a
este problema, convergeran o divergeran?

2.6. Considerese la matriz

3 1 0 0 0 1
1 3 1 0 1 0

0 1 3 1 0 0
A=
.

0 0 1 3 1 0
0 1 0 1 3 1
1 0 0 0 1 3

a) Comprobar que los metodos de Jacobi, Gauss-Seidel y SOR convergeran al aplicarlos a un


sistema lineal que deniese esta matriz.
b) Si hubiese que decidirse por aplicar uno de los tres, cu
al se debera elegir?
c) Escribir una iteracion completa del metodo elegido para un b cualquiera.
2.7. Considerese la matriz

,
A=

a)
b)
c)
d)
e)
f)
g)

1 a a
a 1 a
a a 1

con

a .

Para que valores de a, A es denida positiva?


Para que valores de a converge el metodo de Gauss-Seidel?
Escribir la matriz J de la iteracion del metodo de Jacobi.
Para que valores de a converge el metodo de Jacobi?
Escribir la matriz G de la iteracion del metodo de Gauss-Seidel.
Calcular el radio espectral de G.
Para que valores de a el metodo de Gauss-Seidel converge mas rapidamente que el de
Jacobi?



5 1
B=
y el vector
0 21
Considerese el metodo iterativo denido por

2.8. Sean la matriz


b=

5
12


.

x(k+1) = Bx(k) b.
= [1, 1]T es la solucion de la ecuacion x = Bx b. Si se escoge como punto
Comprobar que x
para iniciar el proceso iterativo x(0) = [1 + , 1]T , calcular x(k) en funcion de . Converge la
.
sucesion {x(k) } a x
Si se escoge ahora como punto para iniciar el proceso iterativo x(0) = [1+2, 19]T , calcular
(k)
? Por que?
x en funcion de . Converge la sucesion {x(k) } a x
2.9. Sea A la matriz denida por D E F , donde
,
,
0 2 0
0 0 0
E= 1 0 0
y F = 0 0 0 .
0 0 0
1 1 0
Considerese la matriz de la iteracion del metodo SOR, es decir
G() = (I L)1 [(1 )I + U ] .

Ejercicios

199

a) Calcular, en funci
on de , los autovalores de la matriz G(); deducir posteriormente el radio
espectral (G()).
b) Cuales son los valores de para los que el metodo de relajacion converge?
c) Determinar el valor de para el cual (G()) alcanza su mnimo.


2.10. Sea
A=

a b
c d

una matriz de coecientes reales y positivos. Probar que el radio espectral (A) es una funcion
creciente de cada unos de los coecientes de A.
2.11. Sea B una matriz cuadrada de orden n. Se supone que B < 1.
I. Considerese la sucesion
a)
b)
c)
d)

e)

x(0) Cn .
x(k+1) = Bx(k) + c,
?
Comprobar que esta sucesion es convergente. Que relacion verica el lmite x
(k)
(k)
(k)
(k+1)
x(k)
Se dene el vector residuo por r = c(IB)x . Comprobar que r = x
(k+1)
(k)
(k+1)
(0)
k (0)
y que r
= Br . Deducir que x
= x + (I + B + + B )r .
(0)
1 (0)
= x + (I B) r y que x
= x(k) + B k (I B)1 r (0) .
Probar que x
Probar que
1
(I B)1 
1 B
y que

x x(k)  Bk r (0) 
.
1 B
Si

2 1 0 0
1 3 2 0 1
B=

:
10 0 1 2 1
2 1 1 1

(a) Escoger una norma matricial cualquiera para B.


(b) Hacer una estimacion de tal que B < 1 y deducir una cota del n
umero n
(n)
de iteraciones para que 
x x  , con dado.
II. Considerese ahora la sucesion
(0)
+c
y (1) = By
+
* (n)
y
= By + c y (n1) + y (n1)
(n+1)

para

n 1 y = 0.

El punto inicial y (0) es dado.


a) Demostrar que esta sucesion converge.
b) Determinar la constante para la cual la velocidad de convergencia de esta sucesion
es la mayor posible.
2.12. Sea A = I L LT una matriz simetrica denida positiva. Escribir la matriz S() de la iteracion
del metodo SSOR aplicado a Ax = b.
2.13. Demostrar el teorema 2.18.
2.14. Sea A una matriz simetrica y denida positiva. Considerese la descomposicion A = M N con
M simetrica y denida positiva. Sea B = M 1 N , suponiendose que (B) < 1.

200

Captulo 2. Metodos iterativos de solucion de sistemas de ecuaciones lineales

a) Comprobar que
2 (M 1 A)

1 + (B)
.
1 (B)

b) Probar que el n
umero de iteraciones k1 para obtener

x(k) x
<
(0)

x x
= Bx
+ c) y el n
por el metodo iterativo x(k+1) = Bx(k) + c (cumpliendose x
umero
de iteraciones k2 para obtener la misma precision mediante el metodo de los gradientes
conjugados con precondicionado con C = M , con el mismo x(0) , verican que
ln(2/) ln(1/k2 (M 1 A))
k1
.

k2
ln(1/) 2 ln(1/(B))
2.15. Sea A una matriz n n simetrica y d(0) , d(1) , . . . , d(n1) vectores o direcciones A conjugadas.
Encontrar una matriz E tal que E T AE sea diagonal.

Captulo

SISTEMAS DE ECUACIONES
LINEALES DE MATRIZ DE
COEFICIENTES DISPERSA

masiva de los ordenadores en los u


A UTILIZACION
ltimos a
nos y el aumento de su
potencia y capacidad de c
alculo, han permitido que la ciencia, tecnica e ingeniera
utilicen cada vez mas modelos matematicos para comprender, simular y optimizar
fen
omenos de diversa complejidad, y que esos modelos crezcan extraordinariamente
en magnitud y exactitud. Muchos de estos modelos conllevan enfrentarse con matrices de
un tama
no tal que hace s
olo unos pocos a
nos era casi inimaginable que se pudiesen tratar
(cientos de miles de las y columnas). Campos de la ciencia y de la tecnologa donde surgen
habitualmente matrices de grandes dimensiones son:
Optimizaci
on lineal y no lineal.
An
alisis de sistemas electricos de generacion y transporte de energa.
Estudios geodesicos.
Fotometra.
An
alisis estructural de moleculas.
An
alisis de campos gravitatorios.
Tomografa.
Prospecciones petrolferas.
Calculo y an
alisis de estructuras mecanicas.
201

202

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Ajuste de supercies, etc.


Las matrices dispersas son aquellas matrices de gran tama
no en las que muchos de los
elementos que las conguran son cero. Aunque el termino muchos conere ambig
uedad a la
denici
on y los autores especializados en esta cuestion lo cuantican de forma dispar, cabe
aceptar Alvarado [1979] que una matriz n n es dispersa si el n
umero de elementos no
nulos es n+1 , donde < 1. Valores tpicos de este parametro suelen ser: 0,2 para problemas
de an
alisis de sistemas electricos de generacion y transporte de energa; 0,5 para matrices en
banda asociadas a problemas de an
alisis de estructuras, etc.
A pesar de estas apreciaciones, si aplicamos el mas estricto sentido com
un a la cuesti
on, una
matriz se debe considerar en general dispersa, sea cual sea su n
umero de elementos distintos
de cero, si merece la pena manipularla mediante procedimientos ad hoc dise
nados con ese
prop
osito.
En este captulo nos proponemos estudiar las matrices dispersas y c
omo resolver por
metodos directos sistemas de ecuaciones lineales de grandes dimensiones cuyas matrices de
coecientes son dispersas. Este estudio, grosso modo, se divide en tres grandes areas:
Almacenamiento de las matrices dispersas en un ordenador.
Ordenaci
on de las ecuaciones e incognitas del sistema a resolver con el n de reducir el
n
umero de elementos no nulos que se crean al factorizar la matriz.
Adaptaci
on e implementacion ecaz de los metodos numericos directos tradicionales con
el n de resolver sistemas de ecuaciones lineales con matriz de coecientes dispersa.

3.1

Almacenamiento en ordenador de matrices dispersas

La efectividad del trabajo con matrices dispersas se mide no s


olo en terminos de la de los
algoritmos que las manipulan sino tambien por la forma en que el ordenador se integra dentro
del proceso que generan esos algoritmos. En este sentido, cuanto m
as ecaz es el esquema seg
un
el cual se almacenan las matrices dispersas en un ordenador y cuanto m
as agilmente se pueda
recuperar la informaci
on relativa a las mismas, mejores seran las prestaciones de los algoritmos
que las manipulan.
Las estructuras de datos y los fragmentos de programas de ordenador que se presentan
en este apartado y el siguiente estan pensados para su codicaci
on en Fortran 77. En el
apendice G, apartado G.1.3, se estudian los equivalentes para su codicaci
on en C.
Los esquemas de almacenamiento que se presentan a continuacion no son los u
nicos, aunque
s los mas usados. Una buena revisi
on de estos y muchos otros se pueden estudiar en Saad [1994].

3.1.1

Almacenamiento por coordenadas

La forma m
as intuitiva de almacenar en un ordenador los elementos no nulos de una matriz
dispersa es haciendolo mediante un conjunto ordenado o desordenado de triples (aij , i, j),
donde aij = 0.

3.1 Almacenamiento en ordenador de matrices dispersas

203

Por ejemplo, si se quiere almacenar la matriz

1 0 0 1 0
2 0 2 0 3

A=
0 3 0 0 0
0 4 0 4 0
5 0 5 0 6

seg
un este esquema, en Fortran 77 se podra hacer mediante la denici
on de tres vectores, ifi,
ico y val: los dos primeros basta que sean integer; val debe ser real. En la siguiente tabla se
pueden ver los valores de estos tres vectores para denir por las, completa y ordenadamente,
la matriz A.
Vector
ifi
ico
val

1
1
1
1

2
1
4
-1

3
2
1
2

4
2
3
-2

Elementos
5 6 7
2 3 4
5 2 2
3 -3 4

8
4
4
-4

9
5
1
5

10
5
3
-5

11
5
5
6

Esta forma de almacenamiento, aunque en su variante desordenada todava se usa en alguno


de los paquetes de software para manejo de matrices dispersas, presenta un inconveniente muy
importante: la dicultad de recuperar f
acilmente un vector columna o la de la matriz. En
su forma ordenada, el conjunto de instrucciones en Fortran 77 para recuperar en vec() el
vector la i podra ser el que sigue.
vec = 0
do ii=1,nelem
if (ifi(ii).eq.i) then
ia = ii
do while (ifi(ia).eq.i)
vec(ico(ia)) = val(ia)
ia = ia+1
end do
exit
endif
end do

El ndice ii que dene el bucle principal de este programa podra tambien variar de n a 1, o en
el rango que se considerase oportuno, buscando optimizar el tiempo de b
usqueda del comienzo
de la la i.
En el caso de hacerse un almacenamiento ordenado, una dicultad a
nadida surge cuando
se quiere hacer distinto de cero un valor que originalmente es cero.

3.1.2

Almacenamiento por las o columnas

Esta forma de almacenar matrices dispersas es una de las mas usadas para matrices sin ninguna
estructura particular. Si nos referimos a la variante de almacenamiento por las (por columnas
sera igual con los cambios obvios), consiste en denir tres vectores: el primero, por ejemplo
val, debe contener todos los elementos distintos de cero de la matriz, agrupados por las;
el segundo, ico por ejemplo, de la misma dimensi
on de val, los subndices columna de los
elementos de val; el tercero, un vector de punteros, ia por ejemplo, de dimensi
on n + 1, las

204

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

posiciones en val y ico del primer elemento no nulo de las las que se corresponden con el
orden de los elementos de ia.
Si consideramos de nuevo la matriz A denida en el apartado anterior, sus elementos, seg
un
este nuevo esquema, se almacenaran como indica la tabla siguiente.

Vector
ia
ico
val

1
1
1
1

2
3
4
-1

3
6
1
2

4
7
3
-2

Elementos
5
6 7 8
9 12
5
2 2 4
3 -3 4 -4

10

11

1
5

3
-5

5
6

Observese que, como hemos indicado, la dimension de ia debe ser n + 1, pues es necesario
denir el n
umero de elementos no nulos de la u
ltima la n.
Los valores de los elementos de cada la da igual guardarlos en orden o en desorden. En
general, la informaci
on relativa a la la r de una matriz A estara en las posiciones ia(r) a
ia(r + 1)-1 de ico y val, excepto cuando ia(r + 1)=ia(r), en cuyo caso la la r estara vaca.
La parte de un programa en Fortran 77 que recuperase en vec() la la i de una matriz
dispersa denida por los vectores ia, ico y val podra ser como la que sigue.
vec = 0
in = ia(i)
if = ia(i+1)-1
do ii=in,if
vec(ico(ii)) = val(ii)
end do

Observese lo sencillo que resulta recuperar una la con este esquema si se compara con el del
apartado anterior.
Un programa para recuperar la columna k sera un poco m
as complicado.
vec = 0
do j=1,m
do ii=ia(j),ia(j+1)-1
if (ico(ii).gt.k) exit
if (ico(ii).lt.k) cycle
vec(j) = val(ii)
exit
end do
end do

Por lo que respecta al almacenamiento de un nuevo elemento no nulo que se cree a lo largo
de un proceso de manipulaci
on de una matriz dispersa, las dicultades son grandes: habra que
redenir toda la estructura.

3.1.3

Almacenamiento por perl o envolvente

Uno de los tipos de matrices dispersas mas habituales lo constituye el denominado matrices
en banda. Son matrices cuyos elementos estan contenidos en una estrecha banda, normalmente
alrededor de la diagonal principal de la matriz.

3.1 Almacenamiento en ordenador de matrices dispersas

205

Denici
on 3.1 Una matriz A mn se dice tiene un ancho de banda de las w si
w = max wi ,
1im

wi = (li fi + 1),

donde wi es el ancho de banda de la la i, fi = min{j : aij = 0} y li = max{j : aij = 0}.


Para que sea de interes tener en cuenta que una matriz dispersa dispone de esta estructura,
se ha de cumplir que w  n. Matrices de estas caractersticas surgen muy frecuentemente en
modelos que plasman situaciones fsicas donde solo se inuyen las variables que representan
magnitudes cercanas en el espacio, en el tiempo, etc.
El almacenamiento de perl o envolvente est
a dise
nado para sacar partido de esa estructura
en banda. De cada la i se almacenan todos los elementos de subndice ij tales que fi j li .
Denici
on 3.2 El conjunto de elementos que forman la envolvente de una matriz A,
Env(A), es
Env(A) = {(i, j) : fi j li , 1 i n}.
La envolvente de la matriz
1
2
3
A= 4
5
6
7

1 2 3 4 5 6 7

0 0

es la que forman los elementos inscritos en el polgono, es decir,


Env(A) = {(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4),
(3, 3), (3, 4), (3, 5), (3, 6), (4, 2), (4, 3), (4, 4),
(5, 4), (5, 5), (5, 6), (5, 7), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (7, 7)}.
El esquema de almacenamiento por perl guarda todos los elementos de la envolvente mediante tres vectores: el primero, val, contiene todos los elementos de la envolvente; el segundo,
ifa, los ndices fi de cada la i; el tercero, un vector de punteros, ia, de dimensi
on m + 1 si
mn
A
, las posiciones en val del primer elemento no nulo de las las que se corresponden
con el orden de los elementos de ia.
Por ejemplo, si se quiere almacenar seg
un su perl o envolvente la matriz

1 0 2 0 0
2 3 0 0 0

0 0 6 0 0

,
A=

0 4 0 4 0
0 0 0 3 1
0 0 0 0 6

206

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

los vectores que habra que denir son los de la siguiente tabla.
Vector
ia
ifa
val

1
1
1
1

2
4
1
0

3
6
3
-2

4
7
2
2

5
10
4
3

Elementos
6 7 8
12
5
6 -4 0

10

11

12

Observese que, con respecto al esquema por las o columnas, se ha reducido el n


umero de
posiciones de memoria necesarias, pues la dimension del vector ifa debe ser sensiblemente
inferior a la de ico de aquel.
La parte de un programa en Fortran 77 que recuperase una la de la matriz A almacenada
seg
un este esquema podra ser como la que sigue.
vec = 0
in = ia(i)
if = ia(i+1)-1
j
= 0
do ii=in,if
vec(ifa(i)+j) = val(ii)
j = j+1
end do

Si la matriz dispersa que hay que guardar con el esquema envolvente es simetrica, solo sera
necesario guardar la parte triangular inferior o superior (incluida la diagonal principal).
Denici
on 3.3 El ancho de banda (o de semibanda) de una matriz simetrica B nn ,
, se dene como
= max i ,
i = i fi ,
1in

donde i es el ancho de banda de la la i (o, simplemente, el ancho de banda i-esimo) de


B.
De forma similar a como lo hacamos anteriormente, la envolvente de una matriz simetrica
B, Env(B), se dene como
Env(B) = {(i, j) : fi j i, 1 i n}.
Para almacenar en un ordenador una matriz simetrica seg
un el esquema de perl o envolvente no sera necesario el vector ifa. Por ejemplo, la matriz

10
2

3
B=
0
0

2
4
0
3
0

3
0
6
0
0

0
3
0
1
8

0
8
3

se podra almacenar mediante los vectores de la tabla que sigue.

3.1 Almacenamiento en ordenador de matrices dispersas

Vector
ib
val

1
1
10

2
4
2

3
7
3

4
8
4

Elementos
5 6 7
10
0 3 6

10

207

Observese que en este caso la dimension del vector ib es n.


Si los anchos de banda, i , de las las de una matriz simetrica son iguales, el vector ib,
incluso, no sera necesario: solo val y el n
umero i .

3.1.4

Almacenamiento por listas encadenadas

La idea b
asica de esta forma de almacenamiento radica en que a cada elemento no nulo de una
la o columna se le asocia un puntero o eslab
on que indica donde est
a el siguiente elemento
no nulo de esa la o columna. Si este puntero es cero, el mencionado elemento es el u
ltimo no
nulo de la la o columna.
Para almacenar una matriz dispersa con este esquema se utilizan varios vectores (hasta siete
distintos seg
un el autor). Con car
acter general podran ser: val, en donde se almacenan, en
cualquier orden, los valores de los elementos no nulos de la matriz; ico, de la misma dimension
de val, donde se guardan los subndices columna de los elementos de val; ifi donde se guardan
las posiciones en ico y val de los primeros elementos no nulos de cada la o columna de la
matriz; por u
ltimo, link, de dimensi
on igual a ico y val, donde se almacenan los punteros
antes mencionados, es decir, la posicion en val e ico del siguiente elemento no nulo de la
misma la, si es que existe; si no es as, el puntero se hace cero.
Si se quiere guardar la matriz

1
0

B=
2
3

6
0
0
0

0
0
3
0

2
0
0
1

0
0
0
0

1
0

siguiendo el esquema de la listas encadenadas, unos posibles valores de los vectores antes
indicados seran los de la siguiente tabla.
Vector
val
ico
ifi
link

1
6
2
4
3

2
2
1
6
7

3
2
4
2
0

Elementos
4 5 6
-1 3 1
1 1 6
5
1 8 0

7
3
3

8
1
4

9
1
6

Como se puede observar, el n


umero de posiciones de memoria que este esquema necesita es
bastante superior al requerido por los presentados en apartados anteriores.
Recuperar en vec() la la i de una matriz dispersa almacenada seg
un este esquema mediante un programa en Fortran 77 sera tan sencillo como sigue.
vec = 0
ii = ifi(i)
do while (ii.ne.0)

208

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

vec(ico(ii)) = val(ii)
ii = link(ii)
end do

La gran ventaja de las listas encadenadas radica en lo relativamente f


acil que resulta introducir en sus estructuras de datos elementos distintos de cero en posiciones de la matriz que
previamente ocupaban ceros. En efecto, para insertar un nuevo elemento no nulo en la posici
on
(i, j) habra que llevar a cabo las siguientes sencillas operaciones:
1. A
nadir ese elemento al nal de val.
2. A
nadir el subndice j al nal de ico.
3. Comprobar si ese elemento va a ser el primero de la la i: si es as, hacer ifi(i) igual a
la posici
on en val que ocupar
a el nuevo elemento; si no, dejar ifi como estaba.
4. Si el nuevo elemento va a ser el u
ltimo de la la, cambiar el valor de link del u
ltimo
elemento anterior por el del que ocupar
a el nuevo elemento en val y asignar el correspondiente link a cero; si no, cambiar el valor de link del anterior elemento distinto de
cero por el de la posici
on que ocupar
a el nuevo elemento en val y asignar al link de este
el del siguiente elemento en la la distinto de cero.
Estas operaciones son facilmente implementables en cualquier lenguaje de programaci
on.

3.2

Operaciones algebraicas elementales con matrices dispersas

En este apartado vamos a estudiar c


omo se pueden realizar operaciones algebraicas elementales
entre matrices y vectores tratados como dispersos. Nos interesaremos solo por aquellas operaciones que realizan habitualmente los algoritmos que estudiamos en este libro: producto interior
de dos vectores, multiplicaci
on de matrices por vectores y suma, trasposicion y multiplicaci
on
de matrices (AT A como caso particular).

3.2.1

Producto interior de dos vectores

Supongamos que se desea calcular el producto interior,


h=

n


ai bi ,

i=1

de dos vectores a y b almacenados como dispersos seg


un el esquema de las del apartado 3.1.2.
Al tratarse de vectores (una sola la), el vector ia que all se dena no sera necesario; s lo
seran ico y val. Habr
a que conocer tambien el n
umero de componentes no nulos de a y b.
Una forma directa de llevar este producto interior a cabo sera comprobando, para cada
componente no nulo de a, si el correspondiente componente de b es cero, y caso de no serlo, multiplicando esos componentes y acumulando el resultado en h. Llevar esto a efecto en
Fortran 77, suponiendo que el almacenamiento es ordenado, sera como sigue.

3.2 Operaciones algebraicas elementales con matrices dispersas

209

h = 0.0
do i=1,na
do j=1,nb
if (icob(j).gt.icoa(i)) exit
if (icob(j).lt.icoa(i)) cycle
h = h+vala(icoa(i))*valb(icob(j))
exit
end do
end do

Proceder de esta forma es sumamente inecaz pues hay que inspeccionar el vector a o el b
un n
umero de veces proporcional al producto de elementos no nulos de a y de b.
Una forma mucho m
as ecaz de hacer ese producto interior, v
alida incluso cuando el almacenamiento es desordenado, consiste en denir un nuevo vector ip, de dimensi
on n, en el
que se guarden los punteros de los elementos no nulos de, seg
un se desee, vala o valb. Por
ejemplo, si el vector a esta denido por
Vector
icoa
vala

Elementos
2
3
4
3
7
4
0,3 0,4 -0,5

1
10
0,2

el vector ip, una vez almacenados los punteros, quedara


Vector
ip

1
0

2
0

3
2

4
4

5
0

Elementos
6 7 8 9
0 3 0 0

10
1

11
0

lo cual quiere decir que a3 esta en la posici


on 2 de vala, a4 en la posici
on 4, a7 en la 3, etc.
A continuaci
on, conocidos los elementos no nulos de b, se usa ip y, si ha lugar, se multiplican
los componentes acumulando el resultado en h. Si, por ejemplo, el vector b esta denido por
Vector
icob
valb

Elementos
1
2
3
5
4 10
0,6 0,7 0,5

el primer componente no nulo de b es b5 = 0,6. Ahora bien, ip(5)=0, por lo que a5 b5 = 0,


no siendo necesario efectuar esta u
ltima operaci
on . . . Estas ideas expresadas en Fortran 77
daran lugar a un conjunto de instrucciones como el que sigue.
ip = 0
do i=1,na
ip((icoa(i)) = i
end do
h = 0.0
do i=1,nb
if (ip(icob(i)).ne.0) h=h+vala(ip(icob(i)))*valb(i)
end do

Es importante tener en cuenta que hacer ip( )=0 es caro: es necesario realizar muchas
operaciones, aunque triviales, si n es grande. Si un vector se multiplica por otros muchos (caso
por ejemplo de productos de matrices), evidentemente, s
olo es necesario inicializar ip a cero
una vez.

210

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

3.2.2

Multiplicaci
on de matrices por vectores

En este apartado supondremos que el vector por el que se ha de multiplicar la matriz dispersa
esta almacenado en toda su extensi
on. Para llegar a tal vector se pueden aplicar las ideas
apuntadas para recuperar un vector al introducir los distintos modos de almacenar matrices
dispersas. En cualquier caso, lo que se expone a continuaci
on se puede extender sin ninguna
dicultad al caso en que el vector por el que se multiplica la matriz este almacenado tambien
en forma dispersa. Casos particulares, como el que se presenta cuando la matriz por la que
multiplicar es simetrica, facilitaran las operaciones; nos ocuparemos, sin embargo, del caso
mas general posible.
3.2.2.1

Multiplicaci
on de una matriz por un vector

Nos interesamos en primer lugar por la operaci


on
c = Ab,
donde A mn , b n y c m .
Si suponemos que el vector c se guarda en toda su extensi
on y la matriz A seg
un el esquema
por las, para realizar la operaci
on basta saber que elementos son no nulos en cada la de la
matriz A, multiplicarlos por el correspondiente de b y acumular el resultado. En Fortran 77
esto sera tan sencillo como lo que se lista a continuaci
on.
do i=1,m
s = 0.
do ii=ia(i),ia(ii+1)-1
s = s+val(ii)*b(ico(ii))
end do
c(i) = s
end do

3.2.2.2

Multiplicaci
on de un vector por una matriz

En este caso queremos efectuar la operacion


cT = bT A,
donde A mn , b m y c n .
Consideremos el siguiente ejemplo simbolico de este producto,


a a a
[c1 c2 c3 ] = [b1 b2 ] 11 12 13 .
a21 a22 a23
Efectuando las operaciones del producto de un vector por una matriz, se tiene que,
c1 = b1 a11 + b2 a21
c2 = b1 a12 + b2 a22
c3 = b1 a13 + b2 a23 .

3.2 Operaciones algebraicas elementales con matrices dispersas

211

Usar estas ecuaciones resultara altamente inecaz si la matriz esta almacenada por las.
Reescribamos las ecuaciones de la siguiente manera,
c1
c2
c3
c1
c2
c3

b1 a11
b1 a12
b1 a13
c1 + b2 a21
c2 + b2 a22
c3 + b2 a23 .

En este caso se puede acceder a los elementos secuencialmente por las e ir acumulando los
resultados de las operaciones en los propios elementos de c
En Fortran 77, teniendo en cuenta que la matriz A se almacena por las, este producto
se hara como sigue.
c = 0
do i=1,n
bi = b(i)
do ii=ia(i),ia(i+1)-1
j = ico(ii)
c(j) = c(j)+val(ii)*bi
end do
end do

3.2.3

Suma de matrices dispersas

La suma o resta de matrices dispersas es una de la operaciones algebraicas mas utilizada. Para
efectuar la suma vamos a utilizar un procedimiento basado en dos etapas: la etapa simb
olica y
la numerica. En la primera se determinar
a la estructura de la matriz resultante, en este caso la
matriz suma, y en la segunda, una vez reservada la memoria correspondiente en la etapa anterior
para almacenar el resultado, los valores de los elementos no cero. Aunque evidentemente estas
operaciones se pueden realizar de una sola vez, se gana poco procediendo as mientras que
haciendolo en dos etapas, si s
olo cambian los datos numericos y se conserva la estructura
(como por ejemplo en un proceso iterativo o cuando hay que ordenar las posiciones de los
elementos no nulos independientemente del valor que tengan), solamente es necesario realizar
la segunda etapa, reduciendose en gran medida el n
umero global de operaciones a llevar a cabo.
En lo que sigue vamos a suponer que las dos matrices a sumar o restar, A mn y
B mn , estan almacenadas por las.
3.2.3.1

Suma o resta simb


olica

Para llevar a cabo la etapa simb


olica se suele utilizar, como se hizo para efectuar el producto
interior de dos vectores, un vector auxiliar, ip, de dimensi
on n, inicializado a cero, en el que
se reejan que elementos de cada la en la matriz resultante C van a ser distintos de cero.
Una forma de proceder, la por la, sera la siguiente: 1. examinar los componentes del
vector icoa de la matriz A, la i; 2. hacer igual a i los componentes de ip que indiquen los
icoa anteriores; 3. examinar los componentes del vector icob de la matriz B, la i; 4. hacer
igual a i, si no lo estan ya por haberlos hecho en 2., los componentes de ip que indiquen los
icob anteriores; 5. denir, a partir de los componentes de ip que sean igual a i, el vector icoc

212

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

y, por u
ltimo, 6. denir ic(i+1) de acuerdo con el n
umero de componentes que van a ser no
nulos en la matriz C.
Ejemplo 3.1 Sumemos las dos matrices

0
4

A=
2
0

0
0
0
1

2
3
0
0

0 1 0

3 7 0

0 0 1
1 0 0

1 0 1 0 0 5
0 0 0 0 2 0

.
y B=
4 6 0 2 0 0
0 1 1 0 0 0

Almacenadas por las, las matrices A y B estan representadas por los vectores de las dos tablas
siguientes.
ia
icoa
vala

ib
icob
valb

1
3
2

3
5
-1

1
1
1

4
3
-1

Matriz A
7 9 11
1 3
4 5
4 3
3 7
Matriz
5 8
6 5
5 -2

B
10
1
4

1
-2

2
6

6
-1

4
2

2
-1

2
1

4
1

3
1

Efectuemos la suma de A y B en un n
umero de pasos o etapas igual al n
umero de las de
ambas matrices: 4.
Paso 1
Examinemos los componentes de icoa correspondientes a la la 1 y hagamos igual a 1 dichos
componentes de ip. Resultar
a lo que sigue.
Vector
ip

1
0

Elementos
2 3 4 5
0 1 0 1

6
0

Examinemos los componentes de icob correspondientes a la la 1 y hagamos, igual a 1, si no


lo estan ya, dichos componentes de ip.
Vector
ip

1
1

Elementos
2 3 4 5
0 1 0 1

6
1

Despues de analizadas la la 1 de las dos matrices A y B, los vectores ic y icoc de la matriz


resultante C seran los que se indican en la siguiente tabla.
Matriz C
ic
1 5
icoc 1 3 5

3.2 Operaciones algebraicas elementales con matrices dispersas

213

Paso 2
Examinemos los componentes de icoa correspondientes a la la 2 y hagamos igual a 2 dichos
componentes de ip.
Vector
ip

1
2

Elementos
2 3 4 5
0 2 2 2

6
1

Repasemos los componentes de icob correspondientes a la la 2 y hagamos igual a 2, si no lo


estan ya, dichos componentes de ip. Resultar
a lo que sigue.
Vector
ip

1
2

Elementos
2 3 4 5
0 2 2 2

6
1

Observese que los valores de ip iguales a uno que no se han modicado permanecen inalterados
al no reinicializarse en cada paso el vector ip.
Despues de analizadas la la 2 de las dos matrices A y B, los vectores ic y icoc de la
matriz resultante C seran los que se indican en la siguiente tabla.

ic
icoc

1
1

Matriz C
5 9
3 5 6 1

Paso 3
Examinemos los componentes de icoa correspondientes a la la 3 y hagamos igual a 3 dichos
componentes de ip.
Vector
ip

1
3

Elementos
2 3 4 5
0 2 2 2

6
3

Examinemos luego los componentes de icob correspondientes a la la 3 y hagamos igual a 3,


si no lo estan ya, dichos componentes de ip.
Vector
ip

1
3

Elementos
2 3 4 5
3 2 3 2

6
3

Despues de analizadas la la 3 de las dos matrices A y B, los vectores ic y icoc de la


matriz resultante C seran los siguientes.

ic
icoc

1
1

5
3

9
5

Matriz C
13
6 1 3 4

214

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Paso 4
Examinemos los componentes de icoa correspondientes a la la 4 y hagamos igual a 4 dichos
componentes de ip.
Vector
ip

1
3

Elementos
2 3 4 5
4 2 4 2

Vector
ip

1
3

Elementos
2 3 4 5
4 4 4 2

6
3

6
3

Hagamos lo mismo con icob.

Despues de analizadas la la 4 de las dos matrices A y B, los vectores ic y icoc de la


matriz resultante C seran los que se indican a continuaci
on.
Matriz C
ic
icoc

1
1

5
3

9
5

13
6

16
1

Observese que el componente 2 de la u


ltima la resultar
a cero, aunque seg
un lo expuesto
gure como distinto de cero.
Un programa en Fortran 77 que lleve a cabo las operaciones descritas para efectuar la
suma simbolica de dos matrices dispersas puede ser como el que sigue.
ip = 0
nu = 1
do i=1,m
ic(i) = nu
do ii=ia(i),ia(i+1)-1
j
= icoa(ii)
icoc(nu) = j
nu
= nu+1
ip(j)
= i
end do
do ii=ib(i),ib(i+1)-1
j = icob(ii)
if (ip(j).eq.i) cycle
icoc(nu) = j
nu
= nu+1
end do
end do
ic(m+1) = nu

3.2.3.2

Suma o resta num


erica

Efectuada la suma o resta simb


olica, la parte numerica no representa mayor dicultad. Se
utiliza un vector auxiliar x, de dimensi
on igual al n
umero de las de las matrices a sumar o
restar, m, en el que se acumulan la suma de los elementos no nulos. Las posiciones de este

3.2 Operaciones algebraicas elementales con matrices dispersas

215

vector que designan los valores de los elementos de icoc se inicializan a cero antes de realizar
esa acumulacion.
Una implementaci
on en Fortran 77 de esta suma o resta numerica es la que sigue a
continuaci
on.
do i=1,m
do ii=ic(i),ic(i+1)-1
x(icoc(ii)) = 0.0
end do
do ii=ia(i),ia(i+1)-1
x(icoa(ii)) = vala(ii)
end do
do ii=ib(i),ib(i+1)-1
j = icob(ii)
x(j) = x(j)+valb(ii)
end do
do ii=ic(i),ic(i+1)-1
valc(ii) = x(icoc(ii))
end do
end do

3.2.4

Multiplicaci
on de matrices dispersas

Analicemos de que forma se puede calcular ecazmente el producto de dos matrices dispersas
cualesquiera, A mp y B pn . Los elementos de la matriz producto, C mn , son,
como es sabido,
cij =

p


aik bkj ,

para i = 1, . . . , m; j = 1, . . . , n.

k=1

Esta f
ormula indica que cualquier elemento de la matriz resultante, cik , es el producto interior
de un vector la de la matriz A, la i, por un vector columna de la matriz B, columna k.
Si, como venimos considerando, las matrices A y B se almacenan por las, llevar a cabo ese
producto interior, seg
un la f
ormula, presenta ciertas inecacias numericas. Para abordar este
producto utilizaremos las mismas consideraciones del apartado 3.2.2.2, cuando estudi
abamos
el producto de un vector por una matriz. Analicemos el producto simb
olico:


c11 c12
c21 c22

a11 a12
=
a21 a22

b11 b12
.
b21 b22

Efectuando las operaciones de acuerdo con las reglas de producto de matrices, se tiene que,
c11
c12
c21
c22

=
=
=
=

a11 b11 + a12 b21


a11 b12 + a12 b22
a21 b11 + a22 b21
a21 b12 + a22 b22 .

216

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Con vistas a su implementacion en ordenador, reordenemos los c


alculos de la siguiente manera,
x1
x2
x1
x2
c11
c12
x1
x2
x1
x2
c21
c22

a11 b11
a11 b12
x1 + a12 b21
x2 + a12 b22
x1
x2
a21 b11
a21 b12
x1 + a22 b21
x2 + a22 b22
x1
x2 .

Observese que con esta forma de proceder cada elemento de la matriz A se multiplica secuencialmente por todos los elementos de un vector la de la matriz B; estos u
ltimos son f
acilmente
accesibles de acuerdo con el esquema de almacenamiento que se utiliza.
Para llevar a efecto el producto de matrices tambien se utiliza la estrategia introducida en
el p
arrafo anterior, es decir, hacerlo en dos etapas: una simb
olica y otra numerica. La parte
simbolica obtendr
a la estructura de la futura matriz C, de la que se servir
a con posterioridad
la parte numerica.
Un programa en Fortran 77 que permite obtener el producto simb
olico de dos matrices
mp
pn
A
yB
, denidas por los vectores ia, icoa y vala y ib, icob y valb, podra
contar con instrucciones como las que se listan a continuaci
on.
ip = 0
nu = 1
do i=1,m
ic(i) = nu
do ii=ia(i),ia(i+1)-1
j = icoa(ii)
do iii=ip(j),ib(j+1)-1
k = icob(iii)
if (ip(k).eq.i) cycle
icoc(nu) = k
nu
= nu+1
ip(k)
= i
end do
end do
end do
ic(m+1) = nu

La dimensi
on del vector auxiliar ip es p, el n
umero de columnas de B.
Otro programa para efectuar posteriormente el producto numerico es el siguiente.
do i=1,m
do ii=ic(i),ic(i+1)-1
x(icoc(ii)) = 0.0
end do
do ii=ia(i),ia(i+1)-1
j = icoa(ii)
a = vala(ii)

3.2 Operaciones algebraicas elementales con matrices dispersas

217

do iii=ib(j),ib(j+1)-1
k
= icob(iii)
x(k) = x(k)+a*valb(iii)
end do
end do
do ii=ic(i),ic(i+1)-1
valc(ii) = x(icoc(ii))
end do
end do

Otra alternativa para efectuar el producto de dos matrices dispersas es la siguiente: si la


matriz A se escribe como un conjunto de p vectores columna, esto es,
A = [a1 , a2 , . . . , ap ],
y la B como otro conjunto de p vectores la, es decir,

bT1
T
b2
B=
..
.

bTp

el producto C = AB se puede expresar como la suma de p matrices de rango uno, de la forma


C = AB =

p


ai bTi .

i=1

Para llevar este producto a la pr


actica en ordenador, supuestas A y B almacenadas por las,
habra que extraer cada vector columna de A y multiplicarlo por todos los vectores la de B,
llevando constancia de que resultados son cero.
3.2.4.1

Multiplicaci
on AT A

Un caso particular de producto de dos matrices dispersas lo constituye AT A. Para llevarlo a


efecto ecazmente se puede proceder de varias formas. La mas extendida es aquella que utiliza
las ideas apuntadas al nal del p
arrafo anterior. Es decir, servirse de matrices de rango uno,
haciendo
m
AT A =

ai aTi ,

i=1

donde ai es el vector la i-esimo de la matriz A mn .


En este apartado, sin embargo, utilizaremos un enfoque distinto: trasponer la matriz A
mediante un algoritmo general y multiplicar el resultado por la propia matriz A utilizando los
algoritmos anteriores.
Trasposici
on de A
La sencilla operacion de trasponer una matriz A en el caso general, se complica cuando se trata
de una matriz dispersa. En lo que sigue, supondremos que la matriz A esta almacenada por
las.

218

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Para llevar a cabo la trasposici


on de A se denen tantas listas, o vectores lista, como
columnas tiene A, apunt
andose en ellas secuencialmente los ndices de las columnas que ocupan
los elementos distintos de cero. Por ejemplo, si
1
2
A= 3
4
5

1 2 3 4 5 6

0 0 0

0 0 0 0
0 0 0 0

0 0 0

0 0 0

estas listas, despues de analizados que elementos de la primera la son distintos de cero,
contendr
an
1:
2:
3: 1
4:
5: 1
6 : 1.
Despues de analizada la segunda la,
1:
2:
3:
4:
5:
6:
Al nal ser
an

1:
2:
3:
4:
5:
6:

2
5
1
2
1
1

2
1
2
1
1.
4
3 4
3 4
5
5

de donde se deducira inmediatamente un vector icoat con los ndices columna de los elementos
no nulos de cada la de la matriz AT .
En la pr
actica, estas listas se denen directamente en los vectores icoat y valat; en el
vector iat se guardan los punteros del primer elemento de cada lista.
El algoritmo completo en Fortran 77 para llevar a cabo esta trasposici
on se lista a continuaci
on.
1
2
3
4
5
6
7
8
9

iat = 0
do i=1,ia(m+1)-1
j = icoa(i)+2
if (j.le.n+1) iat(j)=iat(j)+1
end do
iat(1) = 1
iat(2) = 1
do i=3,n+1
iat(i) = iat(i)+iat(i-1)

! Determinaci
on del n
umero de
!
elementos en cada lista.
!

! Determinaci
on para I donde comienza
!
en JAT y valat la lista I-1.

3.3 Solucion de grandes sistemas lineales de matriz dispersa

10111213141516171819-

end do
do i=1,m
do ii=ia(i),ia(i+1)-1
j
= icoa(ii)+1
k
= iat(j)
icoat(k) = i
valat(k) = vala(k)
iat(j)
= k+1
end do
end do

219

! Incorporar elementos a cada lista


!
!
!
!
!
!
!

En las lneas 8 a 10 se determinan los punteros; iat(i) dene la posici


on en jat y valat
donde comienza la lista i-1, desde 1 a n. De esta forma, cuando se a
naden elementos a la lista
i-1 y se incrementa su correspondiente puntero iat(i), autom
aticamente iat(i) se convierte
en el puntero del primer elemento de la lista i, la cual sigue a la i-1 en los vectores icoat y
valat.
El bucle que comienza en la lnea 11 a
nade elementos a cada lista. A partir de la lnea 12,
en la lnea 13 se encuentra el elemento de la matriz de la la i, columna j-1. En la lnea
siguiente, k apunta a la posici
on de icoat y valat correspondiente a la primera posici
on libre
de la lista j-1. En las dos lneas siguientes, 15 y 16, el ndice de la i y el valor vala(ii) se
a
naden a las listas icoat y valat, respectivamente.

3.3

Soluci
on de grandes sistemas lineales de matriz dispersa

Como vimos al comienzo del captulo, resolver sistemas de ecuaciones lineales de matriz de
coecientes dispersa lleva aparejadas tres tareas esenciales: el almacenamiento ecaz de la
matriz, la ordenaci
on de la ecuaciones para mantener la estructura de dispersidad al factorizar
la matriz y la implementaci
on ecaz del proceso de solucion.
En los apartados anteriores nos hemos ocupado del almacenamiento en ordenador y de las
operaciones algebraicas numericas que se realizan en los algoritmos de forma que se tenga
en cuenta el caracter disperso de las matrices afectadas. Como hemos podido comprobar,
cualquiera de esas operaciones se puede adaptar con m
as o menos dicultad para tener en
cuenta ese hecho.
En general, si las tres tareas apuntadas se estructuran convenientemente en un algoritmo,
este constara de los pasos que se indican en la tabla 3.1.

3.3.1

Ordenaci
on de las ecuaciones

Al resolver un sistema de ecuaciones lineales en el que la matriz de coecientes que lo dene es


dispersa, el orden en que se disponen las las o las columnas tiene una importancia fundamental.
Por ejemplo, si consideramos la matriz simetrica A de un sistema de ecuaciones lineales cuyo
patr
on de elementos distintos de cero es el de la gura 3.1, y se utiliza la eliminaci
on de Gauss
para resolver dicho sistema, en el transcurso de dicha factorizaci
on se har
an distintos de cero 46
elementos elementos de relleno (ll-in en la literatura anglosajona): los que en la gura 3.2
aparecen sombreados.
Si las las y las columnas del mismo sistema se reordenan de acuerdo con un criterio que
veremos mas adelante algoritmo de grado mnimo, obteniendose un patr
on de elementos

220

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Figura 3.1
Estructura simb
olica (simetrica) de una matriz 14 14 antes de proceder a su factorizaci
on
mediante eliminaci
on de Gauss

Figura 3.2
Estructura simb
olica de la matriz de la gura 3.1 despues de proceder a su factorizacion
mediante eliminaci
on de Gauss

3.3 Solucion de grandes sistemas lineales de matriz dispersa

221

Tabla 3.1
Algoritmo para resolver sistemas de ecuaciones lineales Ax = b, siendo A dispersa
Paso 1 Determinar la estructura simbolica de A.
Paso 2 Determinar unas permutaciones P y Q tales que P AQ tenga una estructura dispersa
ventajosa en relacion con el tipo de sistema a resolver.
Paso 2 Factorizar simbolicamente la matriz P AQ y generar las estructuras de datos y memoria necesarias para L y U .
Paso 3 Obtener numericamente LU = P AQ y c = P b.
Paso 4 Resolver Lz = c, U y = z y, por n, x = Qy.

distintos de cero como el de la gura 3.3, y esta matriz se factoriza tambien mediante eliminaci
on de Gauss, el n
umero de elementos cero que se hacen distintos de cero en este caso es
cero. El vector que dene las permutaciones que hay que efectuar simult
aneamente en las las
y columnas de la matriz original para llegar a la de la gura 3.3 se puede ver en la siguiente
tabla.
Vector
Permutaci
on

1
14

2
12

3
10

4
9

5
7

6
6

Elementos
7 8 9 10
4 5 8
1

11
2

12
3

13
11

14
13

Compruebese como la la 1 original, la 10 en la matriz reordenada, sigue teniendo 4 elementos


no nulos, la la 2 original, la 11 en la reordenada, 5 elementos, etc. A las permutaciones que

Figura 3.3
Estructura simb
olica de la matriz de la gura 3.1 despues de proceder a la reordenaci
on de
sus las y columnas mediante el algoritmo de grado mnimo y a su posterior factorizaci
on
mediante eliminaci
on de Gauss

222

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

act
uan simult
aneamente sobre las y columnas se las denomina, como es sabido, permutaciones
simetricas.
Trabajar con matrices reordenadas en las que el n
umero de elementos de relleno se reduce
considerablemente presenta tres ventajas fundamentales:
Una disminuci
on del n
umero de posiciones de memoria que se han de reservar para los
nuevos elementos que se haran distintos de cero en un proceso de factorizaci
on.
Una disminuci
on del n
umero de operaciones a realizar y, por lo tanto, del tiempo total
de calculo para factorizar la matriz y resolver el correspondiente sistema.
Una mejora de la estabilidad numerica del proceso global de resoluci
on del sistema al
disminuir el n
umero de elementos a considerar y por tanto disminuir la probabilidad de
encontrar grandes diferencias entre ellos, errores de cancelaci
on, etc.
En la tabla 3.2 se resume en n
umeros las operaciones que habra que realizar para transformar la matriz presentada mediante eliminaci
on de Gauss y, posteriormente, resolver el sistema
lineal correspondiente, si se operase con esta matriz como si fuese densa, como si fuese dispersa
pero sin reordenar las y columnas y como si fuese dispersa reordenando las y columnas, tal
cual hemos visto.
Para denir una ordenaci
on optima es necesario tener en cuenta la estructura de la matriz,
el esquema que dene como se almacena la matriz y el tipo de operaciones que con ella se van
a realizar. Si, como suele ser muy habitual, las matrices son simetricas y se almacenan seg
un
un esquema de perl o envolvente (por dar lugar una vez ordenadas a matrices con estructura
en banda), tambien interesa poder disponer de un procedimiento de ordenaci
on que compacte
los elementos precisamente cerca de la diagonal principal de la matriz. Este es el caso del
algoritmo de Cuthill-Mckee que veremos mas adelante. El resultado de aplicar a una matriz
simetrica 35 35 este algoritmo se ilustra en la gura 3.4. La soluci
on de sistemas con este
tipo de matrices dispersas en banda es extremadamente ecaz.
Tambien existen diversas formas de ordenar matrices dispersas de estructura simb
olica
no simetrica1 para resolver r
apida y ecazmente sistemas lineales de ecuaciones en los que
esten presentes. Para tratar matrices generales sin ninguna caracterstica particular, entre los
metodos mas usados estan los que buscan ordenar los elementos de la matriz A de tal forma que
se consiga una estructura triangular inferior en bloques del tipo que se indica en la gura 3.5.
Si de acuerdo con esta estructura se dividen de la misma forma los vectores x y b de Ax = b,
1

Pueden existir matrices no simetricas numericamente hablando aunque de estructura simb


olica simetrica
por lo que se reere a la posici
on de los elementos distintos de cero. La ordenaci
on casi siempre se centra en la
estructura simb
olica.

Tabla 3.2
N
umero de operaciones a realizar con diversas variantes de la matriz de la gura 3.1 para,
utilizando eliminaci
on de Gauss, resolver un sistema de ecuaciones lineales
Operaci
on
Factorizacion
Sustituci
on Inversa

Matriz
Densa
1911
196

Matriz
Dispersa sin Ordenar
408
94

Matriz
Dispersa Ordenada
105
48

3.3 Solucion de grandes sistemas lineales de matriz dispersa

223

Figura 3.4
Matriz 3535, de estructura simb
olica simetrica, antes y despues de reordenar sus las y
columnas con el algoritmo de Cuthill-McKee

el sistema se resolvera mucho mas ecazmente resolviendo los subsistemas


Aii xi = bi

i1


Aij xj ,

i = 1, 2, 3.

j=1

Esta forma de manipular la matriz A hace que solo sea necesario factorizar las submatrices
Aii (los bloques o submatrices que no estan en la diagonal principal, Aij , i > j, solo se han de
multiplicar por los subvectores xj ), y, por tanto, que cualquier nuevo elemento distinto de cero
solo se pueda crear en esas submatrices. Cualquier otra reordenaci
on que sea necesaria para
garantizar la dispersidad y la estabilidad numerica del proceso, habr
a de efectuarse u
nicamente
a los bloques Aii .
Si como ejemplo consideramos la matriz simetrica 16 16 de la gura 3.6, la reordenaci
on
triangular inferior en bloques que de ella se puede obtener es la de la gura 3.7.

A11

A =

A21 A22
A31 A32 A33

Figura 3.5
Matriz triangular inferior en bloques

224

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Figura 3.6
Matriz 1616, de estructura simb
olica no simetrica, antes de reordenar sus las y columnas
para reducirla a una de estructura triangular inferior en bloques

Figura 3.7
Matriz de la gura 3.6 despues de reordenar sus las y columnas para reducirla a una de
estructura triangular inferior en bloques

3.3 Solucion de grandes sistemas lineales de matriz dispersa

3.3.2

225

Proceso de soluci
on

La implementacion ecaz del proceso de solucion de un sistema de ecuaciones lineales de gran


dimensi
on depende, como es obvio, de bastantes factores. Los mas importantes, y en los que la
literatura especializada centra fundamentalmente las metodologas y algoritmos, se reeren a
si la matriz es denida positiva, semidenida positiva o indenida y a si la estructura simb
olica
y numerica que presenta es simetrica o no.
Si la matriz es de estructura simetrica y denida positiva, la mejor forma de proceder para
obtener la soluci
on del sistema correspondiente consiste en ordenar primero la matriz mediante,
por ejemplo, el algoritmo de grado mnimo, o cualquier otro para estructuras particulares, y
luego, una vez sabido que elementos se haran distintos de cero, utilizar la factorizaci
on de
Cholesky. Llevar esto a la pr
actica es relativamente sencillo y muy ecaz desde los puntos de
vista de las operaciones a realizar y el tiempo de calculo invertido. Casi todos los paquetes
de rutinas matem
aticas especializados en matrices dispersas poseen procedimientos dedicados
a este caso. En concreto, el paquete de software SPARSPAK de la Universidad de Waterloo,
Canad
a, se centra esencialmente en este tipo de sistemas. Otros paquetes que tambien resuelven
estos problemas son YSMP de la Universidad de Yale, EE.UU., Harwell Subroutine Library,
Reino Unido: rutinas MA28, MA17, etc. y NAG, Numerical Algorithms Group, Reino Unido.
Matlab tambien dispone de procedimientos especializados en sistemas de este tipo.
Si la matriz es de estructura simetrica y casi denida positiva, se puede proceder separ
andola
seg
un
A = M N,
donde M es de estructura simetrica y denida positiva y N simetrica, y resolver Ax = b
mediante un proceso iterativo del tipo
M x(k+1) = N x(k) + b.
Este sistema lineal se puede resolver por Cholesky o cualquier otro metodo. Otra forma de
actuar consiste en olvidarse de la simetra y utilizar la eliminaci
on de Gauss, o triangularizar
por bloques la matriz resolviendo seg
un indic
abamos en el apartado 3.3.1.
Si la matriz es de estructura simetrica e indenida y se desea conservar la simetra, la mejor
forma de proceder es utilizar el metodo de pivotaci
on diagonal por bloques, que describamos
en el captulo de metodos directos para matrices densas, especializandolo para matrices dispersas. La rutina MA32 del paquete Harwell Subroutine Library procede de esa manera. Matlab
tambien puede resolver estos sistemas sin ninguna dicultad.
Si la matriz no es simetrica se puede proceder de dos formas: utilizando eliminaci
on de
Gauss con pivotaci
on de acuerdo con el criterio de Markowitz que veremos m
as adelante, o
triangularizando por bloques tal como hemos mencionado con anterioridad. En el paquete de
Harwell se pueden encontrar diversas rutinas para hacer frente a este problema operando de
las dos formas indicadas.
En lo que resta de captulo nos centraremos en la forma m
as general de resolver un sistema
lineal de ecuaciones, y a la que mayor cantidad de software dedican los paquetes ya mencionados
y casi todos los existentes de matrices dispersas: la eliminacion de Gauss. En torno a el,
analizaremos los metodos mas utilizados para la reordenaci
on previa de la estructura de la
matriz, tanto si es simetrica como si no, as como las estrategias de pivotacion de los metodos
que proceden directamente a factorizar la matriz.

226

3.4

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Matrices dispersas sim


etricas y eliminaci
on de Gauss

En este apartado estudiamos diversas ordenaciones para matrices dispersas de estructura simb
olica simetrica, y como afectan a la eliminaci
on de Gauss en ellas.
La factorizaci
on que se obtiene como consecuencia del proceso de eliminacion de Gauss de
una matriz A simetrica es, como sabemos,
A = L1 DLT1 ,
donde L1 es una matriz triangular inferior con todos los elementos de su diagonal principal
igual a uno y D una matriz diagonal. Esta factorizaci
on tambien se puede escribir,
A = L LT .
El patr
on de elementos distintos de cero de L es identico al de L1 .
Como sabemos, en el transcurso de la eliminacion de Gauss en una matriz se pueden crear
elementos de relleno; si son muchos, no solo pueden destruir cualquier estructura de dispersidad
que poseyese la matriz, sino tambien dar al traste con la consideraci
on hecha a priori de que era
dispersa, pues el n
umero de operaciones que requieren los metodos que tratan tales matrices es
sensiblemente superior, a igualdad de n
umero de elementos no nulos, al de los tradicionales para
matrices densas. Para evitar esto se recurre a efectuar una reordenaci
on de las y columnas,
materializadas por un conjunto de permutaciones, de tal forma que al factorizar la matriz
resultante aparezcan muchos menos elementos de relleno que en la original.
Si el sistema que hay que resolver es
Ax = b
y se le aplican a A un conjunto de permutaciones elementales, representadas por la matriz de
permutaci
on P , el sistema se puede reescribir,
P A P T P x = P b,
pues P T P = I. Haciendo y = P x y c = P b, se tiene que
By = c,
donde B = P AP T es la matriz A reordenada. La matriz B es tambien dispersa y simetrica. Si
A es tambien denida positiva, lo mismo ocurre con B.
La idea alrededor de la que centraremos este apartado es encontrar una P adecuada que
produzca el menor relleno posible al factorizar B. Si la matriz A es de orden n, el n
umero
posible de ordenaciones es n!: evidentemente, resulta imposible analizar todas. Aun cuando
de esas n! una al menos ser
a optima, no existe ning
un algoritmo que garantice su obtenci
on.
Existen, no obstante, bastantes algoritmos heursticos para tratar de llegar a un resultado
optimo o cercano a el. A continuaci
on describiremos alguno de ellos.
Para ilustrar la diferencia que supone utilizar una ordenaci
on u otra, o incluso ninguna, en
las guras 3.8, 3.9 y 3.10 se representan los patrones de elementos distintos de cero de una
matriz 480 480 antes y despues de, orden
andola de determinadas maneras, factorizarla de
la forma LLT . La gura 3.8 representa la matriz sin reordenar y el resultado que producira
factorizarla de la forma LLT . La 3.9 describe el mismo caso cuando se reordena la matriz

3.4 Matrices dispersas simetricas y eliminacion de Gauss

227

original mediante el algoritmo denominado de grado mnimo, que veremos mas adelante en
este apartado. Por u
ltimo, en 3.10 se representa la matriz reordenada mediante el algoritmo de
Cuthill-McKee y el factor L correspondiente. Observese que L tiene en el primer caso 30.366
elementos distintos de cero, 9.196 en el segundo y 24.226 en el tercero. Elegir un buen metodo
de reordenaci
on de la matriz, como se puede apreciar, es esencial.

3.4.1

Nociones b
asicas sobre teora de grafos

La teora de matrices dispersas y la de grafos son dos disciplinas con vnculos y resultados
com
unmente aplicables. El patr
on de elementos distintos de cero de una matriz dispersa cuadrada se puede representar mediante un grafo; en consecuencia, muchos resultados de la teora
de grafos pueden aplicarse para estudiar y obtener mejoras en las prestaciones numericas de
las matrices dispersas. De la teora de grafos vamos a introducir, tanto en este apartado como
en el que dedicaremos a matrices dispersas no simetricas, aquellos conceptos y resultados que
nos seran u
tiles para agilizar la comprensi
on de los procedimientos que explicaremos o mejorar
la visualizaci
on de los mismos.
Un grafo, G = (V, E), es un par formado por un conjunto nito, V , de elementos denominados vertices o nudos del grafo, y por otro tambien nito, E, de arcos o aristas. Un arco es
un par de nudos. Si los arcos de un grafo son ordenados, el grafo se denomina digrafo o grafo
dirigido; si no, grafo a secas o grafo no dirigido. Un grafo no dirigido se puede ver como un
digrafo en el que si el arco e = (u, v) E, tambien e = (v, u) E. Si e = (i, j) E, este arco
une un nudo de origen o cola i = t(e) con otro de destino, nal o cabeza j = h(e). El n
umero
de elementos, o cardinal de V o E, se designa |V | o |E|. Un grafo G = (V, E) se dice numerado
si existe una biyeccion : {1, 2, . . . , |N |} V . En lo sucesivo, cuando hablemos de un grafo,
0

50

50

100

100

150

150

200

200

250

250

300

300

350

350

400

400

450

450

100

200
300
el = 7551

400

100

200
300
el = 30366

400

Figura 3.8
Patr
on de elementos distintos de cero de una matriz simetrica 480 480 y el de su factor L
una vez efectuada la factorizaci
on LLT

228

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

50

50

100

100

150

150

200

200

250

250

300

300

350

350

400

400

450

450

100

200
300
el = 7551

400

100

200
300
el = 9196

400

Figura 3.9
Patr
on de elementos distintos de cero de una matriz simetrica 480 480 ordenada mediante
el algoritmo de grado mnimo y el de su factor L una vez efectuada la factorizaci
on LLT

50

50

100

100

150

150

200

200

250

250

300

300

350

350

400

400

450

450

100

200
300
el = 7551

400

100

200
300
el = 24226

400

Figura 3.10
Patr
on de elementos distintos de cero de una matriz simetrica 480 480 ordenada mediante
el algoritmo de Cuthill-McKee y el de su factor L una vez efectuada la factorizaci
on LLT

3.4 Matrices dispersas simetricas y eliminacion de Gauss

229

lo supondremos numerado.2
Un grafo se puede asociar a cualquier matriz A. Si A es cuadrada de orden n, de estructura
simbolica simetrica, con todos sus elementos diagonales distintos de cero, se dene el grafo
asociado a A, GA = (V A , E A ), como el grafo no dirigido numerado de nudos V A = {v1 ,
v2 , . . . , vn } y arcos o aristas E A denidas de tal forma que
(vi , vj ) E A aij = 0, aji = 0.
La suposici
on de que los elementos diagonales son distintos de cero hace que no sea necesario
representar los bucles que unen cada nudo consigo mismo. En la gura 3.11 se puede ver una
matriz 1111 de estructura simb
olica simetrica y su grafo numerado asociado.
Al igual que se dene un grafo no dirigido para matrices simetricas, para matrices no
simetricas se dene un digrafo; volveremos sobre esta cuestion al hablar de matrices no simetricas.
El grafo asociado a una matriz simetrica permanece invariable, salvo la numeraci
on de sus
nudos, al aplicarle a dicha matriz una permutaci
on simetrica (se la pre y postmultiplica por
una misma matriz de permutaci
on P ). Esta es una de las propiedades que hacen de los grafos
un instrumento muy u
til para estudiar matrices dispersas. Si B = P AP T , los grafos asociados
a B y a A son identicos salvo en lo que respecta a su numeracion.
Un subgrafo G = (V  , E  ) de un grafo G = (V, E) es un grafo formado por algunos o todos
los nudos y por algunos de los arcos del grafo G: V  V , E  E. Un subgrafo se dice subgrafo
secci
on cuando V  contiene solo algunos nudos de G y E  todos los arcos (u, v) de G tales que
u y v pertenecen a V  ; ese decir: V  V y E  = {(u, v) E : u V  y v V  }. En el grafo de
la gura 3.11, los nudos 3, 5, 7, 8 y 11 junto con los arcos (3,5), (5,8), (8,11), (11,7), (3,7) y
(3,11) constituyen un subgrafo secci
on.
Si (u, v) es un arco de un grafo, los nudos u y v se dicen adyacentes. El grado de un nudo
es el n
umero de arcos que tienen uno de sus extremos en ese nudo. Si W es un subconjunto
de los nudos de un grafo G, el conjunto adyacente de W , Adj(W ), es el conjunto formado por
los nudos de G que no pertenecen a W y son adyacentes a nudos de W . Es decir, Adj(W ) =
2

En algunas referencias bibliogr


acas un grafo numerado se designa por G = (V, E, ).

1
2
3
4
5
A= 6
7
8
9
10
11

1 2 3 4 5 6 7 8 9 10 11

10

9
2

11
4

5
3

Figura 3.11
Matriz 11 11 de estructura simb
olica simetrica y su grafo numerado asociado

230

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

{u V W : (u, v) E para alg


un v W }. El grado de un nudo es por consiguiente el n
umero
de elementos (cardinal) del conjunto adyacente de ese nudo. En el caso de la matriz 11 11 y
de su grafo asociado de la gura 3.11, los nudos 1 y 6 son adyacentes; ambos de grado 2. Si W
fuese el conjunto formado por los nudos 1 y 6, su conjunto adyacente sera el formado por los
nudos 9 y 10.
Un camino de un nudo u1 a otro um+1 , es un conjunto ordenado de nudos {u1 , u2 , . . . , um+1 }
tal que ui y ui+1 son adyacentes para i = 1, 2, . . . , m. La longitud de ese camino es m. El nudo
inicial de un camino se suele denominar de partida; el nal, de llegada. Un camino tambien
se puede denir como un conjunto ordenado de m arcos (u1 , u2 ), (u2 , u3 ), . . . , (um , um+1 ). Dos
nudos dados, u y v, se dicen unidos por un camino, si existe un camino de u a v. Un camino
es un ciclo cuando u1 = um+1 . La distancia, d(u, v), entre dos nudos, u y v, es la longitud
del camino mas corto entre ambos nudos. Dado un nudo u, a la mayor distancia entre ese
nudo y cualquier otro del grafo se la denomina excentricidad, e(u), del nudo u. La mayor
excentricidad de un grafo se denomina di
ametro del grafo. Un nudo periferico de un grafo es
aquel cuya excentricidad es igual al di
ametro del grafo. Volviendo a nuestra matriz 11 11 y
su grafo asociado de la gura 3.11, los nudos 1 y 3 est
an unidos por los caminos {1, 10, 11, 3},
de longitud 3, y {1, 6, 9, 11, 3}, de longitud 4. La distancia entre los nudos 1 y 3 es, por
consiguiente, 3. El camino {5, 8, 11, 3, 5} es un ciclo. El di
ametro de este grafo es 4. Los nudos
perifericos: 1, 2, 4, 5 y 6; su excentricidad es igual a 4.
Un grafo se dice conexo si cada par de nudos distintos se puede unir por un camino; inconexo
en cualquier otro caso. Un grafo inconexo est
a formado por varios componentes conexos. Un separador o conjunto separador es un conjunto de nudos tal que quitando los nudos que pertenecen
a el y los arcos a ellos unidos en un grafo conexo o componente conexo, resulta un grafo no
conexo. Un separador es mnimo si cualquier subconjunto de el no es un separador. El grafo
de la gura 3.11 es conexo. El conjunto de nudos de este grafo formado por el 7 y el 11 es un
separador mnimo: al quitar esos nudos del grafo resultan los componentes conexos {3, 5, 8} y
{10, 1, 6, 9, 2, 4}.
Dado un grafo y un subconjunto S de sus nudos, si u y v son dos nudos distintos que
no pertenecen a S, se dice que v es accesible desde u a traves de S cuando u y v estan
unidos por un camino de longitud igual a 1 (u y v son adyacentes) o ese camino esta formado
enteramente por nudos pertenecientes a S (excepto, por supuesto, u y v). Dado ese subconjunto
S y u
/ S, el conjunto accesible, Acc(u, S), de u a traves de S, es el conjunto de todos los
nudos accesibles desde u a traves de S. Observese que cuando S es el vaco o u no pertenece
a Adj(S), Acc(u, S) = Adj(u). En el grafo de la gura 3.11, si se escoge S = {7, 3}, entonces
Acc(5, S) = {8, 11, 4} y Acc(8, S) = Adj(8) = {5, 11}. Observese que el propio u no pertenece
a Acc(u, S).
Los grafos se pueden dividir de acuerdo con diversos criterios. Cuando los nudos se agrupan
en subconjuntos disjuntos S0 , S1 , . . . , Sm , se obtiene una partici
on. Cuando un grafo se divide
de acuerdo con los niveles de los nudos se obtiene una partici
on por niveles, o estructura de
niveles.
Un grafo conexo que no tiene ciclos se denomina
arbol. Los arboles juegan un papel muy
importante en el contexto de las matrices dispersas pues una matriz cuyo grafo asociado es un
arbol se puede reordenar de tal forma que, al factorizarla mediante eliminaci
on de Gauss, no
experimente ning
un relleno. En un arbol s
olo existe un camino entre cualquier par de nudos.
Un arbol se dice enraizado cuando uno de sus nudos se designa como nudo raz. El camino
u
nico que existe entre ese nudo raz y cualquier nudo u del arbol dene las relaciones ascendiente/descendiente entre nudos: si u y v pertenecen a un camino y la distancia de v al nudo

3.4 Matrices dispersas simetricas y eliminacion de Gauss

231

raz es menor que la de u, v se dice es un ascendiente de u y u un descendiente de v. Si u y


v son adyacentes, v es el padre de u y u el hijo de v. Como en el caso del grafo, un arbol lo
supondremos numerado. La numeraci
on se dice mon
otona si cada nudo se numera antes que
su padre.
La partici
on de un grafo que no es un arbol se puede usar para generar un grafo cociente.
Cuando un grafo cociente es un arbol, este se denomina
arbol cociente; a la partici
on correspondiente,
arbol partici
on.
En la gura 3.12 se puede ver un grafo de 20 nudos, su estructura de niveles y su correspondiente arbol cociente. En este arbol tambien se indica una numeraci
on mon
otona.
Dado un grafo conexo G = (V, E), un
arbol maximal es un subgrafo de G que contiene todos
los nudos de G y es ademas un arbol. En la gura 3.13 se puede ver un arbol maximal del
grafo de la gura 3.12.

3.4.2

Interpretaci
on grafo-te
orica de la eliminaci
on de Gauss de matrices
dispersas de estructura sim
etrica

Profundizando en el objetivo de determinar algoritmos para ordenar la numeraci


on del grafo
asociado a una matriz dispersa de tal forma que al factorizarla mediante eliminaci
on de Gauss
se produzca el menor n
umero posible de rellenos, estudiemos el efecto que esa eliminacion
produce en la matriz a traves de su grafo asociado.
Al comienzo de una etapa k de un proceso de eliminaci
on de Gauss, todos los elementos
distintos de cero debajo de la diagonal principal en las columnas 1, 2, . . . , k 1 ya se han hecho
cero. En esta etapa k, como es sabido, se determinan unos multiplicadores y se restan, de las

N0
12

13

15

17

18

14

16

10

11

19

20

N1
N2
N3
N4
N5
N6

12

8
9, 19, 3

19

10

17

18

11

14

16

13

15

20

2, 10
7

17, 18, 11
6




12, 4 5
14, 16, 1, 7

4



13, 15
5, 20 2
3

Figura 3.12
Grafo no dirigido de 20 nudos, su estructura de niveles y su correspondiente arbol cociente
con numeraci
on mon
otona

232

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

12

19

10

17

18

11

14

16

13

15

20
6

Figura 3.13

Arbol maximal del grafo de la gura 3.12


las que tienen un elemento distinto de cero en la columna k debajo de la diagonal principal, la
la k multiplicada por el multiplicador correspondiente. Al hacer esto se pueden crear nuevos
elementos distintos de cero en la submatriz que denen las las y columnas k + 1, . . . , n.
Consideremos la submatriz activa en la etapa k3 sin tener en cuenta que se pueden producir
cancelaciones, como resultado de las cuales elementos que se supone se van a hacer distintos
de cero siguen siendo cero. Sea Gk el grafo asociado a esa submatriz activa a este grafo se
le denomina grafo de eliminaci
on. Los nudos de este grafo son los n k + 1 u
ltimos del
grafo asociado a la matriz original A, GA . El grafo Gk contiene todos los arcos que unen esos
nudos, y estaban presentes en GA , mas unos arcos adicionales correspondientes a los rellenos
producidos en las k 1 etapas anteriores del proceso. La sucesion de grafos G1 = GA , G2 , . . .
se obtiene aplicando la siguiente regla:
Para obtener Gk+1 a partir de Gk , borrar en este el nudo k y a
nadir todos los
posibles nuevos arcos entre nudos que sean adyacentes al nudo k de Gk .
Los arcos que se a
naden determinan que elementos de relleno se produciran en la matriz
como consecuencia del proceso de eliminacion de Gauss. Como ejemplo de aplicaci
on de estas
ideas, en la gura 3.14 se ilustra su adaptaci
on a la matriz 11 11 de la gura 3.11 y a su
grafo asociado.
Al nal del proceso la matriz simb
olica que indica que elementos seran distintos de cero
una vez completada la factorizaci
on tendr
a la forma de la gura 3.15.
Mediante los grafos de eliminaci
on, introducidos por Parter [1961], se puede realizar, independientemente de los valores numericos que adopten los elementos de la matriz, una eliminacion de Gauss simb
olica, pudiendose determinar a partir de ella que nuevos elementos distintos
3

Esa tal submatriz activa contiene los elementos akij , donde i, j k.

3.4 Matrices dispersas simetricas y eliminacion de Gauss

1
2
3
4
5
A2 = 6
7
8
9
10
11

1
2
3
4
5
3
A = 6
7
8
9
10
11

1
2
3
4
5
A4 = 6
7
8
9
10
11

233

1 2 3 4 5 6 7 8 9 10 11

10

9
2

11
4

5
3

G2

1 2 3 4 5 6 7 8 9 10 11

10

9
2

11
4

5
3

G3

1 2 3 4 5 6 7 8 9 10 11

10

9
2

11
4

5
3

G4

Figura 3.14
Tres primeras etapas de la eliminacion de Gauss de una matriz simetrica 11 11 y sus
correspondientes grafos de eliminaci
on. Los elementos de relleno se indican mediante el
smbolo

234

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

1
2
3
4
5
6
7
8
9
10
11

1 2 3 4 5 6 7 8 9 10 11

Figura 3.15
Resultado de la eliminaci
on simb
olica de Gauss en la matriz de la gura 3.11 mediante grafos
de eliminaci
on
de cero se van a crear en el proceso numerico. Reservando posiciones de memoria para esos
nuevos elementos, se puede pasar a realizar la eliminacion o factorizaci
on numerica.
Llevar el procedimiento de los grafos de eliminaci
on a la pr
actica en un ordenador es muy
sencillo; la u
nica dicultad reside en c
omo esta almacenada la matriz. Para hacerlo, en cualquier
caso, es interesante tener en cuenta el siguiente resultado.
Teorema 3.1 Sea u un nudo del grafo de eliminaci
on Gk y Qk el conjunto de nudos v1 ,
v2 , . . . , vk1 del grafo original ya eliminados. El conjunto de nudos adyacentes a u en Gk
es el conjunto Acc(u, Qk ) en el grafo original GA .
En el ejemplo de la gura 3.14, grafo G4 , Q4 = {1, 2, 3}. Del grafo original se obtiene:
Acc(6, Q4 ) = {9, 10}, conjunto de los nudos adyacentes al 6 en G4 .

3.4.3

El algoritmo de grado mnimo

Este algoritmo (Tinney y Walker [1967]) es el de reordenaci


on de uso m
as extendido para
reducir el n
umero de rellenos que produce la eliminaci
on de Gauss o la factorizaci
on de
Cholesky en una matriz dispersa de estructura simb
olica simetrica. Es el que presenta unas
caractersticas de ecacia, sencillez y facilidad de implementacion en ordenador m
as destacadas.
El algoritmo de grado mnimo es la version para matrices de estructura simb
olica simetrica
del de Markowitz [1957] para matrices no simetricas; comentaremos este en detalle mas adelante.
La idea en que se basa es muy sencilla. Como en cada etapa k del proceso de eliminacion
de Gauss, debido a las manipulaciones inherentes al proceso que se efect
ua en la submatriz
activa, si en la la k hay elementos no cero a la derecha del elemento de la diagonal principal,
al sumar un m
ultiplo de esta la a cualquiera de las las k + 1 a n donde se quiera hacer cero
un elemento de la columna k por debajo de la diagonal principal, se pueden producir elementos
no nulos en esas las. Si se examina que la de la submatriz activa, , tiene el menor n
umero

3.4 Matrices dispersas simetricas y eliminacion de Gauss

235

de elementos distintos de cero y se intercambian las las  y k y las columnas  y k, en esa


submatriz activa se crearan el mnimo de elementos de relleno posible.
El nombre de grado mnimo viene de que al realizar ese intercambio de las y columnas en
la etapa k, el elemento de la diagonal principal en la la k representar
a el nudo que est
a unido
al menor n
umero grado mnimo de otros en el grafo de eliminaci
on Gk .
El algoritmo completo de grado mnimo es el de la tabla 3.3 Observese que esta implementacion, al trabajar con los grafos de eliminaci
on, permite tambien conocer al nal del proceso
que nuevos elementos se haran distintos de cero al efectuar la correspondiente factorizaci
on.
Para ilustrar el proceso del algoritmo, consideremos el grafo de la gura 3.16 asociado a
una matriz simetrica 7 7.
En la tabla 3.4 se describen las 7 etapas de que consta la aplicaci
on del algoritmo de grado
mnimo a este grafo.
La matriz simbolica que indica que elementos seran distintos de cero una vez completada la
reordenaci
on/factorizaci
on simb
olica que lleva a cabo el algoritmo de grado mnimo, y el grafo
con la numeraci
on optima, se indican en la gura 3.17.
La estrategia que sigue el algoritmo de grado mnimo produce en general muy buenos resultados pr
acticos. Como ya apunt
abamos anteriormente, cuando el grafo que se quiere reordenar
es un arbol, el resultado de aplicarlo no producir
a elementos de relleno al efectuar la eliminacion de Gauss o la factorizaci
on ulterior correspondiente. No obstante, no siempre da lugar a
una ordenaci
on que produzca el menor n
umero posible de elementos de relleno. En efecto, si
se aplica al grafo de la gura 3.18, el algoritmo elegir
a el nudo n
umero 5 como el inicial, lo
que traer
a como consecuencia que se produzca un relleno posterior en las posiciones (4, 6) y
(6, 4). Utilizando por el contrario la numeraci
on de la gura no se producira ning
un elemento
de relleno.
La implementacion en ordenador de este algoritmo es muy sencilla. Normalmente es necesario incluir, adem
as de las estructuras de datos de la matriz a ordenar, un vector, ng por
ejemplo, en el que inicialmente se indican el grado4 de cada uno de los nudos del grafo asociado a la matriz, GA . En la etapa k, el nudo de grado mnimo se selecciona inspeccionando las
posiciones k a n de ng. Luego, al construir el grafo de eliminaci
on, Gk , solo se deben modicar
las posiciones de ng correspondientes a los nudos en Acc(vk , Qk ). Si u Acc(vk , Qk ), su nuevo
grado ser
a | Acc(u, Qk+1 )|, donde Qk+1 = Qk {vk } = {v1 , . . . , vk }.
4

Si la matriz se almacena por las, por ejemplo, este grado lo determinar


a simplemente el n
umero de elementos
en la la correspondiente menos 1.

Tabla 3.3
Algoritmo de grado mnimo
Paso 1 Inicializaci
on. Hacer i 1.
Paso 2 Selecci
on del nudo de grado mnimo. Seleccionar en el grafo de eliminacion Gk1 =
k1
(V
, E k1 ) aquel nudo vk de grado mnimo.
Paso 3 Transformaci
on. Formar el nuevo grafo de eliminaci
on Gk = (V k , E k ) eliminando vk
k1
de G
.
Paso 4 Bucle. Hacer i i + 1. Si i > |V |, parar. Si no, ir al paso 2.

236

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

c
b

Figura 3.16
Grafo asociado a una matriz 7 7 sobre el que se ilustra el algoritmo de grado mnimo

1
2
3
A= 4
5
6
7

1 2 3 4 5 6 7

Figura 3.17
Matriz 7 7 y su grafo asociado con la numeraci
on resultado del algoritmo de grado mnimo

2
1

7
4

9
8

1
2
3
4
5
6
7
8
9

1 2 3 4 5 6 7 8 9

Figura 3.18
Grafo donde la renumeraci
on que resultara de aplicarle el algoritmo de grado mnimo no es
la optima

3.4 Matrices dispersas simetricas y eliminacion de Gauss

Tabla 3.4
Ejemplo de aplicaci
on del algoritmo de grado mnimo
Etapa k

Grafo de Eliminaci
on Gk1
a

Nudo Seleccionado

Grado

c
b

1
e

c
b

2
e

e
g

f
b

e
g

f
b

5
g

6
7

f
g

237

238

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Existen diversas variantes del algoritmo de grado mnimo para tratar de mejorar alguna
de sus prestaciones, concretamente en lo que se reere a como actuar en el caso de que los
posibles nudos iniciales sean varios. Tambien se han desarrollado otros procedimientos distintos
para tambien determinar la ordenaci
on que produce el mnimo n
umero de rellenos posible en
una eliminaci
on de Gauss. Al lector interesado en todo ello le remitimos a cualquiera de las
referencias que sobre matrices dispersas se mencionan en la bibliografa al nal del captulo.

3.4.4

Reducci
on del ancho de banda de una matriz dispersa sim
etrica. El
algoritmo de Cuthill-McKee

Recordemos las deniciones relativas al ancho de banda de una matriz simetrica, deniciones
3.1 y 3.3 de las p
aginas 205 y 206.
Como hemos venido diciendo, en muchos problemas con matrices dispersas la estructura
de la matriz que los caracteriza hace aconsejable su almacenamiento mediante el esquema de
perl o envolvente, pues se sabe que todos los elementos no nulos pueden estar pr
oximos a la
diagonal principal. La existencia de tales problemas y la importancia que los mismos tienen
en la ciencia y en la ingeniera, ha motivado que durante los u
ltimos a
nos se hayan dedicado
muchos esfuerzos al objetivo de desarrollar algoritmos de reordenaci
on para conseguir que en
la matriz con la que se va a operar, los elementos distintos de cero esten lo mas cerca posible
de la diagonal principal.
De los algoritmos dedicados a este n, el de utilizaci
on m
as extendida es el de CuthillMcKee [1969]. La idea en la que basa su estrategia es muy sencilla: como de lo que se trata es
de que los elementos distintos de cero esten lo mas cerca posible de la diagonal principal, una
vez numerado un nudo k, si se numeran inmediatamente despues los que estan unidos a el que
no han sido numerados previamente, se conseguir
a que en la la k se cumpla ese objetivo.
El algoritmo que plasma esta idea es el de la tabla 3.5.

Denici
on 3.4 Se dice que una matriz simetrica tiene un perl mon
otono si para todo k
y , donde k < , lk l .
A continuaci
on se presentan dos matrices con perles monotono y no mon
otono, respectivamente.
Tabla 3.5
Algoritmo de Cuthill-McKee
Paso 1 Inicializaci
on. Seleccionar un nudo inicial r. Hacer vi r.
Paso 2 Bucle. Para i = 1, . . . , n, determinar todos los nudos adyacentes al vi no numerados
y numerarlos en orden creciente de grado (de menor a mayor).

3.4 Matrices dispersas simetricas y eliminacion de Gauss

1 2 3 4 5 6 7

1 2 3 4 5 6 7

Perl Mon
otono

Perl No Mon
otono

239

Teorema 3.2 La numeraci


on dada por el algoritmo de Cuthill-McKee conduce a un perl
mon
otono.
A modo de ejemplo, apliquemos el algoritmo de Cuthill-McKee al grafo de la gura 3.19.
Empezando a numerar por el nudo superior izquierdo, a, en la misma gura se puede ver
la numeraci
on nal que se obtiene con el algoritmo. Con esta numeraci
on, la distribuci
on
simbolica de elementos distintos de cero y ceros en la matriz asociada que habra que incluir
en el esquema de almacenamiento de envolvente, considerando solo la parte triangular inferior,
sera
1 2 3 4 5 6 7 8 9 10

0
5
.

0
6

0 0
8

0 0 0
9

10
El ancho de banda de esta matriz es 5. El n
umero de elementos cero en la envolvente, 7. El
n
umero de elementos de la envolvente, 33.
Ahora bien, si se comienza a numerar el grafo por el nudo e, el resultado de aplicar el
algoritmo de Cuthill-McKee es el de la gura 3.20. La distribuci
on simb
olica de elementos
a

10

Figura 3.19
Grafo de 10 nudos antes y despues de aplicarle el algoritmo de Cuthill-McKee, comenzando la
numeraci
on en a

240

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

10

Figura 3.20
Grafo de 10 nudos de la gura 3.19 una vez aplicado el algoritmo de Cuthill-McKee,
comenzando la numeraci
on en e
distintos de cero y ceros de la parte triangular inferior de la matriz sera en este caso,
1
2
3
4
5
6
7
8
9
10

1 2 3 4 5 6 7 8 9 10

0
0

0
0

0
0
0
0

0
0

0
0

0
0 0
0 0

El ancho de banda de esta matriz es 6. El n


umero de elementos cero en la envolvente, 20. El
n
umero total de elementos en la envolvente, 46
Como se puede observar, la eleccion del nudo de partida para comenzar la numeraci
on es
una cuesti
on crtica para el resultado del algoritmo.
3.4.4.1

Selecci
on del nudo inicial

Para abordar el problema de determinar con que nudo se ha de comenzar el algoritmo de


Cuthill-McKee, recordemos los conceptos de excentricidad, di
ametro y nudo periferico de un
grafo, introducidos en el apartado 3.4.1.
La idea del procedimiento para determinar el mejor nudo de partida se basa en el hecho de
que tal nudo es casi siempre uno periferico. Para obtener un nudo periferico o pseudoperiferico5
se han desarrollado diversos procedimientos. En la tabla 3.6 se puede ver una modicaci
on de
George y Liu [1979] de un algoritmo originalmente debido a Gibbs, Poole y Stockmeyer [1976]
para determinar un nudo pseudoperiferico en un grafo no dirigido. Tal como se describe es el
mas usado y referenciado en la literatura especializada.
Apliquemos este procedimiento para determinar que nudo se debe usar para iniciar el algoritmo de Cuthill-McKee en el grafo de la gura 3.19. Las tres etapas de que consta se
esquematizan en la gura 3.21. Los n
umeros al lado de los nudos del grafo indican su excentricidad tomando como raz el que se indica como 0. El algoritmo comienza en cualquier nudo,
5

Un nudo pseudoperif
erico se dene por la condici
on de que si v es un nudo para el cual d(u, v) = e(u),
entonces e(u) = e(v).

3.4 Matrices dispersas simetricas y eliminacion de Gauss

241

Tabla 3.6
Algoritmo para determinar un nudo pseudoperiferico en un grafo (para obtener el nudo de
partida del algoritmo de Cuthill-McKee)
Paso 1 Inicializaci
on. Seleccionar un nudo arbitrario, r, del grafo.
Paso 2 Generar estructura de niveles. Construir la estructura de niveles del grafo tomando
como nudo raz el nudo r: L(r) = {L0 (r), L1 (r), . . . , L(r) (r)}.
Paso 3 Bucle. Escoger un nudo v en L(r) (r) todava no tratado de grado mnimo:
a) Si e(v) > e(r), hacer r v e ir al Paso 2.
b) Si e(v) e(r), escoger otro nudo de L(r) (r) y volver al paso 3; si no hay mas
nudos, parar.

por ejemplo, en e. Observese que del resultado del algoritmo se desprende que tanto el nudo a
como el h podran utilizarse como nudos de partida pues tienen la misma excentricidad: 4.

3.4.5

Reducci
on de la envolvente de una matriz dispersa sim
etrica. El algoritmo inverso de Cuthill-McKee

George [1971] descubri


o que, utilizando el algoritmo de Cuthill-McKee para ordenar la numeracion del grafo asociado a una matriz dispersa de estructura simb
olica simetrica, pero
invirtiendo el orden de la numeraci
on nal, es decir, asignando el n
umero 1 + n i al nudo numerado como i, se consegua una matriz con el mismo ancho de banda pero con una envolvente
con un n
umero de elementos menor o igual.
Teorema 3.3 Sea A una matriz cuyo perl es mon
otono. El n
umero de elementos de
Env(A), numerando el grafo asociado a A de acuerdo con el resultado obtenido de aplicar
el algoritmo inverso de Cuthill-McKee, es a lo sumo el mismo que el de la matriz asociada
al grafo numerado de acuerdo con el resultado del algoritmo ordinario de Cuthill-McKee.
2
a

1
b

1
c

1 d

2 f

h
2

i
1

0
a

1
b

2
c

3 d

3 f

h
4

i
3

4
a

3
b

3
c

1 d

3 f

h
0

i
1

g 2

g 3

g 3

Figura 3.21
Grafo de 10 nudos de la gura 3.19 al que se le aplica el algoritmo de la tabla 3.6 para
determinar que nudo ha de ser el de partida para el algoritmo de Cuthill-McKee

242

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Ejemplo 3.2 Considerese el grafo asociado a una matriz de la gura 3.22. Si se reordena de
acuerdo con el algoritmo de Cuthill-McKee, el patr
on de elementos distintos de cero y ceros
que habra que guardar y la numeraci
on que se obtendra son los que describe la gura 3.23.
Por el contrario, utilizando el algoritmo de Cuthill-McKee inverso se conseguira el efecto
que representa la gura 3.24.
Como se puede observar, desaparecen todos los ceros que aparecan antes, ahorr
andose las
correspondientes posiciones de memoria para guardarlos.
Si al grafo que se utilizaba para introducir el algoritmo de Cuthill-McKee, gura 3.19, se
le aplicada el algoritmo inverso, el resultado que se obtiene es el que describe la gura 3.25.
El ancho de banda sigue siendo el mismo que el que obtena el algoritmo de Cuthil-McKee, 5,
pero el n
umero de elementos de la Env(A) ha disminuido de 33 a 28.

3.4.6

M
etodo de la disecci
on anidada

Este metodo, conocido en la literatura especializada como Nested Dissection, tiene sus races
en las tecnicas de elementos nitos. Se basa en establecer unas particiones, usando separadores,
para dividir sistem
aticamente el grafo asociado a una matriz de estructura simb
olica simetrica.
Cuando se encuentra uno de estos separadores, se numeran sus nudos y se retiran del grafo,
dej
andolo dividido en dos o m
as componentes (si se retiran del grafo de la gura 3.26-a los nudos
11 al 15, resultan dos subgrafos sin conexiones comunes). En los componentes que resultan de
la primera transformaci
on tambien se buscan separadores, continuando el proceso hasta que se
numeren todos los nudos del grafo. La numeraci
on obtenida posee propiedades muy interesantes
en lo que se reere tanto a las operaciones necesarias que habr
a que realizar para factorizar
mediante eliminaci
on de Gauss la matriz asociada como a los elementos de relleno que produce
esa factorizacion.
Suponiendo que el conjunto de los nudos del grafo se puede representar por un rect
angulo
R0 , en el se escoge un separador, S0 , formado por un subconjunto de nudos de R0 . Al retirar
estos del grafo, R0 queda dividido en dos subgrafos o componentes, R11 y R12 . Los nudos de R11
se numeran primero y luego los de R12 y S0 . El patr
on de elementos distintos de cero al que da
lugar esta numeraci
on se representa mediante sectores sombreados en la gura 3.26-b. Si esta
matriz se factorizase mediante eliminacion de Gauss, los posibles rellenos solo se produciran
en las zonas destacadas.
g
c

e
a

d
f

Figura 3.22
Ejemplo 3.2

3.4 Matrices dispersas simetricas y eliminacion de Gauss

1
2
3
A= 4
5
6
7

1 2 3 4 5 6 7

0
0

0
0
0

0
0

0
0

0
0
0

0
0

243

1
3

7
2

6
5

Figura 3.23
Ejemplo de la adaptaci
on del algoritmo de Cuthill-McKee al grafo de la gura 3.22

1
2
3
A= 4
5
6
7

1 2 3 4 5 6 7

7
5

1
6

2
3

Figura 3.24
Resultado de la aplicaci
on del algoritmo inverso de Cuthill-McKee al grafo de la gura 3.22

1
2
3
4
5
6
7
8
9
10

1 2 3 4 5 6 7 8 9 10

0 0

10

Figura 3.25
Resultado del algoritmo inverso de Cuthill-McKee aplicado el grafo de la gura 3.19

244

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

a)

R0

11

16

21

12

17

22

13

18

23

14

19

24

10

15

20

25

R11

R12

S0

R11
R11 S0 R12

b)
R12
S0

R21 R22 S11 R23 R24 S12 S0


R21

R21
S11
R22

R23
S0

S12
R24

c)

R22
S11
R23
R24
S12
S0

Figura 3.26
Metodo de la diseccion anidada

3.4 Matrices dispersas simetricas y eliminacion de Gauss

245

Si se sigue el proceso y se divide el componente R11 , mediante un separador S11 , en R21 y R22 ,
y R12 , mediante otro S12 , en R23 y R24 , numerando primero R21 , luego R22 , S11 , R23 , R24 , S12 y, por
u
ltimo, S0 , la nueva numeraci
on producira un patr
on de elementos cero y distintos de cero
seg
un se representa en la gura 3.26-c por las zonas en blanco y sombreadas, respectivamente.
El procedimiento continuara hasta que no se pudiesen encontrar separadores en los subgrafos R.

3.4.7

M
etodo de la disecci
on en un sentido

Conocido en la literatura especializada como One Way Dissection, este metodo fue dise
nado
por George [1980] para problemas de elementos nitos de dos dimensiones. Posteriormente se
ha aplicado tambien a problemas generales.
La idea en la que se basa se ilustra en la gura 3.27. El rect
angulo esquematiza un grafo
asociado a un problema de elementos nitos en dos dimensiones como, por ejemplo, el de la
gura 3.26-a. Si se toman separadores ( = 3 en la gura) y se disecciona el grafo en + 1
bloques R1 , R2 , . . . de parecido tama
no, considerando que los separadores forman un u
nico
bloque, se obtiene un arbol partici
on como el arbol cociente que muestra la gura 3.27-b. Si
posteriormente se numeran los nudos de cada bloque R comenzando por los de la u
ltima la
de izquierda a derecha, luego la pen
ultima, etc, y a continuaci
on los nudos de los separadores

S1 + S2 + S3

R1

S1

R2

S2

R3

S3

R4

a)

b)

R1

R1

R2

R3

R4

R2

S1 S2 S3

R1
R2
R3
R4
S1
S2
S3

Figura 3.27
Metodo de la diseccion en un sentido

c)

R3

R4

246

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

S, el patr
on de elementos cero/distintos de cero que se obtendra en la matriz asociada al
grafo sera el de la gura 3.27-c. Si esta matriz se factorizase mediante eliminacion de Gauss,
los elementos de relleno se daran s
olo en las zonas reticuladas o en las cruzadas. Las zonas
reticuladas, en cualquier caso, no suelen ser totalmente densas sino con forma de banda.

3.5

Matrices dispersas no sim


etricas y eliminaci
on de Gauss

En este apartado estudiamos diversas ordenaciones y c


omo factorizar de forma adecuada mediante eliminaci
on de Gauss matrices dispersas de estructura general.
La factorizaci
on que se obtiene como consecuencia del proceso de eliminacion de una matriz
general, A, es,
A = L1 DU1 ,
donde L1 es una matriz triangular inferior con todos los elementos de su diagonal principal
iguales a 1, D una matriz diagonal y U1 una matriz triangular superior, tambien con todos los
elementos de su diagonal principal iguales a 1. El producto L1 D tambien se suele englobar en
una sola matriz triangular inferior, L, cuyo patr
on de elementos distintos de cero es identico
al de L1 .
Como se indico en el caso de matrices simetricas, en el transcurso de la eliminaci
on o
factorizaci
on de la matriz se pueden crear elementos de relleno; si son muchos, no solo pueden
destruir cualquier estructura de dispersidad sino que tambien pueden dar al traste con la
consideracion hecha a priori de que la matriz era dispersa, pues se puede aumentar en exceso
el n
umero de operaciones a realizar. Para evitar esto, si es posible, se efect
ua una reordenaci
on
de las y columnas, materializadas por un conjunto de permutaciones, de tal forma que en la
matriz resultante, al factorizarla, la estructura de elementos cero/distintos de cero sea mucho
mas facil de manipular, o aparezcan muchos menos elementos de relleno que al factorizar la
original.
Si el sistema a resolver es
Ax = b
y se le aplican a A un conjunto de permutaciones elementales a la izquierda y a la derecha
representadas por las matrices de permutaci
on P y Q, respectivamente, el sistema se puede
reescribir,
P A Q QT x = P b,
pues QT Q = I. Haciendo y = QT x y c = P b, se tiene que,
By = c,
donde B = P AQ es la matriz A reordenada. En general Q = P T por lo que B se obtiene de A
mediante un conjunto de permutaciones no simetricas de sus las y de sus columnas. El objetivo
de manipulaciones como estas, como decamos, es conseguir que B tenga una estructura de
dispersidad m
as facil de tratar que A, que su factorizaci
on sea lo mas numericamente estable
posible y que el n
umero de rellenos sea el menor posible.
Comenzaremos estudiando (cuando la matriz A no posea ninguna propiedad particular) la

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

247

forma de conseguir en A una estructura triangular inferior en bloques:

A11
x1
b1
A21 A22
x2 b2

..
.. = .. ,
.
.
.
. .
.
xn
bn
An1 An2 Ann

(3.1)

donde los coecientes


Aij designan matrices, siendo las Aii matrices cuadradas de orden ni ;

evidentemente, ni=1 ni = n. Como indicamos en el apartado 3.3.1, el sistema (3.1) se resuelve


mediante una sucesion de n subproblemas m
as peque
nos: el subproblema i sera de orden ni y
su matriz de coecientes Aii . Para resolver esos subproblemas sera necesario factorizar solo las
Aii por lo que el relleno de elementos cero solo ocurrir
a dentro de esas Aii . El procedimiento
de esta resolucion lo describen los siguientes pasos:
ognitas, A11 x1 = b1 , con A11 como matriz de
a) Resolver el primer subsistema en n1 inc
coecientes: se obtendra x1 .
b) Restar los vectores Aj1 x1 del termino independiente, bj , para j = 2, . . . , n, obteniendose
una matriz triangular inferior en bloques de orden nn1 . Repetir a) y b) hasta completar
la soluci
on.
Para llevar a cabo este proceso, evidentemente, se supone que los bloques de la diagonal
principal son regulares.
Las siguientes consideraciones son fundamentales para la consecucion de la triangularizaci
on
en bloques de la matriz A.
Denici
on 3.5 Una matriz se dice que tiene un transversal completo cuando todos los
elementos de su diagonal principal son distintos de cero.
Cualquier matriz regular se puede reordenar mediante permutaciones no simetricas P y Q,
de tal forma que P AQ tenga un transversal completo. Si la matriz es singular esto puede no
cumplirse.
Si una matriz tiene un transversal completo, puede reordenarse de tal forma que se consiga
una estructura triangular inferior en bloques como la indicada en (3.1). Esta reordenaci
on se
consigue mediante permutaciones simetricas de la forma P AP T . Si esa estructura de bloques
existe, se dice que A es una matriz reducible. Si una matriz no tiene transversal completo pero
puede reordenarse de tal forma que entonces s lo tenga, y as reordenada es reducible, se dice
birreducible.
Para conseguir triangularizar por bloques una matriz A dispersa cualquiera se procede,
pues, en dos fases:
Fase 1.
Fase 2.

Encontrando un transversal completo de esa matriz.


Reordenando el resultado de la fase 1 mediante permutaciones simetricas.

Estas dos fases se materializan mediante sendos algoritmos. Para explicarlos recurrimos una
vez mas al concurso de los grafos; esta vez en su faceta de grafos dirigidos.

248

3.5.1

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Nociones b
asicas sobre grafos dirigidos

Como ya hemos apuntado, la teora de matrices dispersas y la de grafos son dos disciplinas con
muchos vnculos y resultados com
unmente aplicables. El patr
on de elementos no nulos de una
matriz dispersa no simetrica cuadrada tambien se puede representar mediante un grafo.
Algunos de los conceptos que introducimos en este apartado ya se presentaron en el correspondiente a grafos no dirigidos; si se vuelve a hacer es para facilitar el seguimiento de lo
referente a grafos dirigidos.
Un grafo, G = (V, E), es un par formado por un conjunto nito, V , de elementos denominados vertices o nudos del grafo, y por otro tambien nito, E, de arcos o aristas. Un arco es
un par de nudos. Si los arcos de un grafo son ordenados, el grafo se denomina digrafo o grafo
dirigido. Si e = (i, j) E, este arco une un nudo de origen o cola i = t(e) con otro de destino,
nal o cabeza j = h(e). El n
umero de elementos o cardinal de V o E se designa |V | o |E|.
Un grafo G = (V, E) se dice numerado si existe una biyeccion : {1, 2, . . . , |N |} V . En lo
sucesivo, cuando hablemos de un grafo dirigido o digrafo, lo supondremos numerado.
A cualquier matriz general cuadrada, A, se le puede asociar un digrafo. El digrafo asociado
a una matriz A de orden n, GA = (V A , E A ), es un grafo numerado dirigido de nudos V A =
{v1 , v2 , . . . , vn } y arcos E A denidos de tal forma que
(vi , vj ) E A aij = 0.
Los arcos de un digrafo tambien se designan por (u v). A cualquier elemento diagonal aii = 0
tambien le corresponde un arco (bucle) que parte y llega a vi . Cuando todos los elementos de
la diagonal principal de la matriz asociada al digrafo son distintos de cero, estos arcos o bucles
no se suelen representar. Al conjunto de elementos de la diagonal principal de una matriz que
no son cero se le denomina transversal.
En la gura 3.28 se describe la estructura simb
olica de una matriz no simetrica 15 15 y
su digrafo asociado.
Si a una matriz A se le efect
uan una serie de permutaciones simetricas, su digrafo asociado
permanece inalterado: s
olo se modica la numeraci
on de sus nudos.
Un arco de un grafo dirigido (u, v) o (u v) se dice que sale o parte del nudo u y llega o
entra a/en el nudo v. Tambien se dice que el arco (u v) lleva del nudo u al nudo v. El grado
de entrada o llegada de un nudo es el n
umero de nudos que a el llegan; el grado de salida, el
n
umero de nudos que de el salen. Un nudo de un digrafo se dice de oferta cuando tiene un
grado de entrada cero y un grado de salida positivo. Se dice de demanda, si tiene grado de
entrada positivo y cero de salida.
Si (u v) es un arco de un digrafo, el nudo v se dice adyacente al u. Si W es un subconjunto
del de nudos del digrafo G, el conjunto adyacente de W , Adj(W ), es el conjunto de todos los
nudos, no en W , adyacentes a los nudos de W . Es decir, Adj(W ) = {v V W : (u v) E
para todo u W }.
Un camino dirigido o camino de un digrafo, es un conjunto ordenado de nudos {u1 , u2 ,
. . . , um+1 } tal que ui+1 es adyacente a ui para i = 1, 2, . . . , m. La longitud de ese camino es m.
Cuando existe un camino de un nudo u a otro v, se dice que v es accesible desde u. La matriz de
accesibilidad de un digrafo, A, es una matriz Booleana denida de la siguiente manera: aij = 1
si el nudo vj es accesible desde vi ; si no, aij = 0. Un ciclo de un digrafo o ciclo dirigido es
un camino, con al menos dos arcos, que sale y llega al mismo nudo. Si el nudo v es accesible
desde u en un digrafo, la distancia desde u a v es la longitud del camino m
as corto de u a v (la
distancia desde v a u puede ser distinta o incluso indenida por no existir camino de v a u).

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

249

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

12

13

10

11

14

15

Figura 3.28
Matriz no simetrica y su digrafo asociado
Un digrafo se dice conexo si lo es el grafo no dirigido que se obtiene al suprimir las direcciones
en los arcos del digrafo.
Resumiendo estos conceptos en el digrafo de la gura 3.28, este es conexo; los nudos 6, 7 y
9 son adyacentes al nudo 8; si W = {8, 13}, Adj(W ) = {6, 7, 9, 12, 14}; el nudo 5 tiene un
grado de entrada de 2 y de salida de 1; el nudo 4 es accesible desde el 8; no hay nudos oferta
ni nudos demanda.
Dado un digrafo conexo, G = (V, E), el digrafo se dice fuertemente conexo si para cada par
de nudos u, w V existe un camino de u a w y otro de w a u, es decir, u y w son mutuamente
accesibles. Como un camino de u a w seguido de otro de w a u constituye un ciclo, un digrafo
se dice fuertemente conexo, por consiguiente, si para cada par de nudos existe un ciclo al que
pertenecen. La matriz de accesibilidad de un digrafo fuertemente conexo es totalmente llena.
El digrafo de la gura 3.28 no es fuertemente conexo.
Un subgrafo secci
on6 fuertemente conexo de un grafo G se denomina componente fuertemente conexo o componente fuerte. De la denici
on de subgrafo secci
on y de la de componente
fuerte se deriva que cualquier ciclo del grafo G deber
a estar compuesto en su totalidad por
nudos del componente fuerte o por ninguno del componente fuerte, pues si existiese un ciclo
que contuviese un nudo u del componente fuerte y otro w no en ese componente fuerte, se
podra a
nadir w al componente fuerte sin perder su car
acter, lo cual contradira la hip
otesis.
Debido a estas propiedades, un grafo conexo se puede dividir en un conjunto de componentes
fuertes disjuntos C1 , C2 , . . . , Cs . Si G es fuertemente conexo, s = 1. Un arco (v w) se dice
que sale de un componente fuerte C = (Vc , Ec ), si v Vc y w
/ Vc . El arco (v w) entra
/ Vc y w Vc . Como un componente fuerte es
en el componente fuerte C = (Vc , Ec ), si v
6
Recordemos la denici
on de subgrafo secci
on del apartado 3.4.1 (v
alida tambien para grafos dirigidos): Un
subgrafo G = (V  , E  ) de un grafo G = (V , E) se dice subgrafo secci
on cuando V  contiene s
olo algunos

nudos de G y E todos los arcos (u, v) de G tales que u y v pertenecen a V  ; es decir: V  V y E  =
{(u, v) E : u V  y v V  }.

250

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

un subgrafo secci
on, los arcos de entrada y salida no pertenecen evidentemente al componente
fuerte.
Cuando un grafo G es divisible en sus componentes fuertes, es facil ver que al menos uno
de ellos debe salir de otro sin tener a su vez salida pues si cada componente la tuviese sera
posible trazar un camino de un componente a otro hasta, eventualmente, llegar a uno de los
ya visitados, lo que contradira la denici
on de componente fuerte. En general, en un digrafo
puede haber varios componentes fuertes sin salida. Con las ideas de entradas y salidas se puede
construir la denominada estructura de niveles de conexi
on de un digrafo.

3.5.2

Interpretaci
on grafo-te
orica de la eliminaci
on de Gauss de matrices
dispersas no sim
etricas

En digrafos tambien existe el concepto de grafo de eliminacion. En una etapa k de la eliminaci


on de Gauss, el digrafo de eliminaci
on (o, indistintamente, tambien, grafo de eliminaci
on)
correspondiente, relativo a la submatriz activa, se forma eliminando del de la fase k 1 el nudo
vk , todos los arcos que a el llegan o de el parten, y a
nadiendo un arco (u w) cuando existe
un camino dirigido {u, v, w}. Por ejemplo, en el digrafo de la gura 3.28, en la primera etapa,
el grafo de eliminaci
on se obtiene quitando del original el nudo 1 y a
nadiendo el arco (5 2),
seg
un se representa en la gura 3.29. Al nal del proceso, la matriz simb
olica que indica que
elementos seran distintos de cero una vez completada la factorizaci
on tendr
a la forma que se
describe en la gura 3.30.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

12

13

10

11

14

15

Figura 3.29
Primera etapa de la eliminaci
on de Gauss y su correspondiente digrafo de eliminaci
on de la
matriz de la gura 3.28. El elemento de relleno se indica mediante el smbolo

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

251

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Figura 3.30
Resultado nal de la eliminaci
on de Gauss simb
olica de la matriz de la gura 3.28

3.5.3

Obtenci
on de un transversal completo. Algoritmo de Hall

Siguiendo el objetivo de conseguir en Ax = b una estructura de la matriz de coecientes


triangular en bloques, de acuerdo con el esquema en dos etapas apuntado en la p
agina 247, la
primera tarea a realizar consiste en reordenar la matriz de tal forma que, si no lo tiene ya, se
consiga un transversal completo; es decir, que todos los elementos de la diagonal principal de
la matriz de coecientes reordenada sean distintos de cero.
Si la matriz es regular siempre es posible conseguir un transversal completo; si es singular,
no siempre. Si no se puede dar ese transversal completo, la matriz se dice simb
olicamente
singular. Si el m
aximo transversal conseguible es k < n, a k se le denomina rango simb
olico.
El algoritmo que describimos a continuaci
on para conseguir un transversal completo es una
modicaci
on del de Hall [1956]. Requiere n etapas; el objetivo de cada una, k, es colocar un
elemento distinto de cero en la posici
on k de la diagonal principal.
Funciona de la siguiente manera. Supongamos que se han realizado k etapas del algoritmo
y que los k primeros elementos de la diagonal principal son distintos de cero. En la etapa k + 1
podr
a ocurrir:
a) Que ak+1 k+1 = 0 con lo que se naliza la etapa k + 1.
b) Que ak+1 k+1 = 0 pero que exista en la submatriz activa, es decir la submatriz de ndices
de las y columnas k + 1 a n, un elemento distinto de cero. En este caso, realizando los
intercambios de las y columnas necesarios, se puede llevar ese elemento distinto de cero
a la posici
on (k + 1, k + 1). La submatriz que forman los elementos de subndices 1 a
k no se vera afectada por estos intercambios por lo que los k primeros elementos de la
diagonal principal seguir
an siendo distintos de cero.
c) Que solo existan elementos cero en la submatriz activa. En este caso tambien puede ser
posible conseguir colocar un elemento distinto de cero en la posici
on k + 1 de la diagonal

252

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

principal. Para ello se recurre al trazado de un denominado camino creciente a traves de


los elementos de la matriz. Si no se puede concluir con exito, la matriz ser
a singular y no
se podr
a conseguir un transversal completo.
El camino creciente comienza (si suponemos que estamos en la etapa k + 1) en la posici
on
(k + 1, k + 1) de la matriz A; contin
ua por la la k + 1 hasta que se encuentra con un elemento
distinto de cero en una columna, por ejemplo, la  (tal columna debe existir pues de lo contrario
todos los elementos de la la k+1 seran cero y la matriz, por tanto, singular); de aqu al elemento
(, ) a lo largo de la columna ; a continuaci
on, por la la  hasta encontrar un elemento distinto
de cero, por ejemplo en la columna m, etc. El camino va por tanto alternativamente de un
elemento diagonal a otro distinto de cero no en la diagonal. Este camino no puede atravesar
una misma la y columna m
as de una vez y, en consecuencia, tampoco un mismo elemento de
la diagonal principal. Terminar
a en un elemento distinto de cero en la submatriz que denen
las las de ndices 1 a k y las columnas de ndices k + 1 a n.
Si en el trazado del camino a lo largo de una la no es posible encontrar un elemento distinto
de cero no diagonal en una columna no visitada previamente, se borra la la del camino (no de
la lista de posiciones visitadas) y se vuelve a la la anterior. Si en un momento dado, habiendose
visitado r posiciones entre las las/columnas 1 a k, el camino no puede visitar ning
un nuevo
elemento no visitado previamente, la matriz A es singular. En este caso r + 1 las (las visitadas
y la la k + 1) solo tienen elementos distintos de cero en r columnas.
Una vez trazado el camino, por ejemplo k + 1, 1 , 2 , . . . , r , donde r > k, se intercambian
r + 1 las y dos columnas a n de llevar el u
ltimo elemento distinto de cero encontrado en el
camino a la posici
on (k + 1, k + 1) de la matriz A. Estos intercambios de las se hacen de la
siguiente manera:
la la k + 1
la la 1
..
.
la la r1

se intercambia con la 1
se intercambia con la 2
..
.
se intercambia con la k + 1.

Como las las se seleccionan de tal manera que la la 1 tiene un elemento distinto de cero
en la posici
on i+1 , mediante estos intercambios ese elemento distinto de cero se trasladara a
la posici
on diagonal (i+1 , i+1 ) cuando la la i reemplace a la la i+1 . En consecuencia, la
estructura de elementos distintos de cero en la diagonal principal en las posiciones 1 a k no
se vera afectada por esos intercambios de las. Adem
as, el u
ltimo elemento distinto de cero
encontrado en el camino, una vez efectuados los intercambios, acabar
a en la posici
on (k +1, r );
un u
ltimo intercambio de las columnas k + 1 y r lo llevar
a a la posici
on deseada, (k + 1, k + 1).
Obviamente, si r = k + 1, este u
ltimo intercambio de columnas no ser
a necesario.
Para aclarar el procedimiento, consideremos una matriz 12 12 y el procedimiento descrito
es su etapa 9 ver gura 3.31. Esta etapa 9 comienza en la posici
on (9, 9). La submatriz
que forman los elementos de ndices de las y columnas 9 a 12 son todos cero por lo que se

trata de trazar un camino creciente. Este


comienza en la posicion (9, 9), sigue por la la 9
hasta encontrar el elemento distinto de cero de la columna 5; contin
ua por la columna 5 hasta
encontrar el correspondiente elemento distinto de cero de la diagonal principal; sigue por la
la 5 hasta encontrar el elemento distinto de cero de la columna 2; contin
ua por la columna 2
hasta encontrar el elemento distinto de cero de la diagonal principal en la la 2; sigue por la
la 2 hasta encontrar el elemento distinto de cero de la columna 4; contin
ua por la columna

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

253

1 2 3 4 5 6 7 8 9 10 11 12

7
8

9
10
0
11
12
Figura 3.31
Algoritmo de Hall para la b
usqueda de un transversal completo en una matriz 12 12
4 hasta alcanzar el elemento distinto de cero de la diagonal principal en la la 4; sigue por la
la 4 hasta encontrar el elemento distinto de cero de la columna 7; contin
ua por la columna 7
hasta alcanzar el elemento distinto de cero de la diagonal principal en la la 7; sigue por la la
7 encontr
andose que el u
nico elemento distinto de cero de esta la esta en la columna 5 que
ya se ha visitado. Esto obliga a borrar las las 7 y 4 del camino (no de la lista de posiciones
ya visitadas) y reemprender la marcha all donde se abandon
o en la la 2. Por la la 2 se llega
hasta la columna 6 donde est
a el siguiente elemento distinto de cero; contin
ua en la columna
6 hasta la diagonal principal en la la 6; sigue por esa la 6 hasta llegar al elemento distinto
de cero de la columna 1; contin
ua por la columna 1 hasta alcanzar el elemento distinto de cero
de la diagonal principal en la la 1; sigue por la la 1, par
andose al llegar al primer elemento
distinto de cero que encuentra en la columna 12 por estar en la submatriz que nos interesa. El
camino es pues
{9, 5, 2, 6, 1, 12}.
Una vez encontrado el camino, se efect
uan los siguientes intercambios de las:
la la 9

con la 5;

la la 5

con la 2;

la la 2

con la 6;

la la 6

con la 1;

la la 1

con la 12 y

la la 12 con la 9.
Estos intercambios trasladan el elemento distinto de cero (1, 12) a la posici
on (9, 12). Por u
ltimo
se intercambian las columnas 9 y 12.

254

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Si el elemento (6, 1) fuese cero, hubiesemos encontrado que las las 9, 5, 2, 4, 7 y 6 tienen
elementos distintos de cero solo en las columnas 5, 2, 4, 7 y 6, lo que signicara que la matriz
es singular.
La implementacion de este algoritmo en ordenador es relativamente f
acil; el camino es muy
sencillo de construir en memoria pues s
olo es necesario almacenar en un vector los ndices de
los elementos diagonales en el orden en que se visitan. Como no se pueden visitar m
as de una
vez las posiciones de la diagonal principal y puede ocurrir que se supriman del camino, tambien
es necesario guardar en otro vector las posiciones ya visitadas.

3.5.4

Permutaciones sim
etricas hacia una estructura triangular en bloques

Una vez obtenida una permutaci


on P1 de la matriz A de manera que P1 A tenga un transversal
completo, la siguiente fase de un proceso de triangularizaci
on en bloques de esa matriz consiste
en encontrar otra permutaci
on, esta vez simetrica, Q, de tal manera que al aplicarla a P1 A se
consiga la deseada estructura triangular en bloques, es decir,

B11
B21 B22

T
Q (P1 A)Q = ..
,
..
.

.
Bn1 Bn2 Bnn
donde cada bloque diagonal, Bii , no se pueda reducir a una forma triangular inferior.
Para conseguir la matriz Q nos apoyaremos una vez mas en la teora de grafos dirigidos
(concretamente en el digrafo asociado a P1 A). En concreto, en la parte que hace referencia a
los componentes fuertes de un digrafo. Recordemos una vez m
as que al aplicar permutaciones
simetricas a un digrafo lo u
nico que vara es la numeracion asociada a los nudos.
Los dos algoritmos que vamos a estudiar se basan en encontrar en el digrafo asociado a
una matriz los ciclos que denen sus componentes fuertes. Si, por ejemplo, existiesen dos de
estos componentes fuertes y se reordenase la numeracion de los nudos de tal forma que los
del primero fuesen los nudos 1 al k y los del segundo del k + 1 al n, se obtendra una matriz
triangular inferior en dos bloques, el primero con k columnas y el segundo con n k. En el
grafo dirigido de la gura 3.32 existen dos componentes fuertes, el formado por los nudos 1 y

Figura 3.32
Digrafo con dos componentes fuertes

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

255

2 y el que denen 3, 4 y 5. La estructura simb


olica de su matriz asociada es


.

Estructura triangular inferior en 2 bloques.


Una matriz triangular inferior se puede ver como el caso lmite de la triangular inferior en
bloques cuando cada bloque diagonal tiene un tama
no 1 1. Recprocamente, la triangular
inferior en bloques se puede ver como una generalizaci
on de la triangular inferior en la que
cada componente fuerte hace las veces de un supernudo o nudo generalizado.
Los algoritmos para reducir una matriz A cualquiera a una estructura triangular inferior
se basan en la siguiente observaci
on: si se pudiese reordenar A y transformarla en triangular
inferior, debera haber un nudo en su digrafo asociado del cual no partiese ning
un camino,
pues a ese nudo solo llegaran arcos en virtud de la estructura de la matriz. Si existiese un tal
nudo debera numerarse el primero en el digrafo renumerado y efectuarse las correspondientes
permutaciones de la y columna en la matriz a n de llevarlo a la primera posici
on. Una
vez hecho esto, eliminando ese nudo y todos los arcos que a el llegasen se conseguira un
subgrafo en el cual, en virtud de nuevo de la estructura de la matriz, existira otro nudo al
cual solo llegaran arcos. Continuando con esta forma de actuaci
on se llegara a conseguir una
permutaci
on simetrica que dara como resultado una matriz triangular inferior.
Para llevar esta forma de proceder a la pr
actica, se puede comenzar desde cualquier nudo
del digrafo asociado correspondiente y trazar un camino hasta que se encuentre un nudo desde
el que no parta ning
un otro. Esto es f
acil de implementar pues, dado que sabemos que la
matriz es triangularizable, no existen ciclos: cualquier camino s
olo puede tener una longitud
como maximo igual a n 1, donde n es el orden de la matriz. Una vez encontrado ese nudo,
se numera con el n
umero 1 y se elimina del digrafo inicial as como todos los arcos que a el
llegan. Del camino trazado se coge el nudo inmediatamente anterior al ya eliminado, u otro
cualquiera, hasta encontrar uno del que como antes no parta ning
un arco. Repitiendo esta forma
de proceder hasta agotar los nudos se consegua la estructura triangular inferior esperada.
El digrafo de la gura 3.33 y la tabla 3.7 ilustran este proceso. Los nudos que se van
seleccionando para ser numerados se indican en negrita de izquierda a derecha. El digrafo
renumerado resultar
a de atribuir, al nudo 3 el n
umero 1, al 5 el 2, al 4 el 3, al 2 el 4, al 1 el
5, al 7 el 6 y al 6 el 7. Observese como en el paso 5 no existe camino alguno desde el nudo 5
puesto que el nudo 3 ya haba sido eliminado. En el paso 9 hay que trazar un nuevo camino
pues el anterior se haba agotado de nudos. Las matrices original y reordenada de este ejemplo
son
1 2 3 4 5 6 7
1 2 3 4 5 6 7
1

1

2
2

.
4

4

256

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Figura 3.33
Digrafo de una matriz triangular
3.5.4.1

Algoritmo de Sargent y Westerberg

Sargent y Westerberg [1964] generalizaron la idea expuesta en el apartado anterior para los
casos donde en vez de tener solo nudos se tienen nudos y bloques de nudos. Para ello parten de
una generalizaci
on del concepto de nudo, que denominan nudo compuesto, que denen como
aquel que determina un conjunto de nudos tal que a traves de ellos se puede denir un ciclo.
El procedimiento que sugieren para triangularizar en bloques una matriz con transversal
completo, mediante permutaciones simetricas, consiste en comenzar por cualquier nudo del
digrafo asociado a esa matriz y trazar un camino hasta que:
a) se dena un ciclo (identicable por haber encontrado el nudo de partida o el mismo nudo
compuesto dos veces); o
b) se encuentre un nudo, o nudo compuesto, del que no salga ning
un arco.
En el primero de los casos todos los nudos del ciclo pertenecer
an a un mismo componente
fuerte se crea un nuevo nudo compuesto que agrupe todos los nudos o nudos compuestos
del ciclo. Los arcos internos de este nuevo nudo compuesto se ignoran; los que a el entran o
salen de el se suponen que lo hacen a un u
nico nudo: el nuevo nudo compuesto. El camino se
continuara desde este nuevo nudo compuesto.
En el caso b), al igual que se haca cuando se saba con certeza que la matriz se poda
triangularizar, el nudo o nudo compuesto que se encuentra ser
a el pr
oximo a numerar. Como
antes, ese nudo y todos los que a el llegan se eliminan del digrafo y se contin
ua el proceso.
El metodo descrito obtiene secuencialmente los diversos bloques de la diagonal principal de
la matriz triangular inferior a obtener como una generalizaci
on del metodo de triangularizaci
on
esbozado en el apartado anterior.
El digrafo de la gura 3.34 ilustra el metodo de Sargent y Westerberg. El camino empieza
en el nudo 1, contin
ua en el 2, 3, 4, 5, 6 y vuelve al 4. En este punto se identica el camino {4, 5,
6, 4} como un ciclo y se renumera el conjunto de nudos que lo forman como el nudo compuesto
Tabla 3.7
Pasos y camino trazado para renumerar el digrafo de la gura 3.33
Paso

1 2 3 4 5
5
Camino
3 4 4
Trazado
2 2 2 2
1 1 1 1 1

6 7 8 9 10 11
4
2 2
7
1 1 1 6 6 6

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

257

Figura 3.34
Digrafo sobre el que se aplica el algoritmo de Sargent y Westerberg
4 . El camino contin
ua desde este nudo 4 al 7 y de nuevo al 3. Se identica la existencia del

ciclo {3, 4 , 7, 3}, renumer
andose el conjunto que forman estos tres nudos como el nudo 3 .
Como el nudo (nudo compuesto) 3 naliza el camino, se numera como el nudo 1 en el digrafo
renumerado y se elimina del digrafo original. El nudo 2 se numera tambien como 2 para el
futuro digrafo renumerado y, por u
ltimo, el nudo 1 como nuevo 3. Las matrices originales y
reordenadas que corresponden a este proceso son las siguientes:
1
2
3
4
5
6
7
3.5.4.2

1 2 3 4 5 6 7

1
2
3
4
5
6
7

1 2 3 4 5 6 7

Algoritmo de Tarjan

El algoritmo de Tarjan [1972] se basa en la misma idea que el de Sargent y Westerberg: trazar
caminos en el digrafo asociado a la matriz e identicar los componentes fuertes. La ventaja
fundamental de este frente al de Sargent y Westerberg, radica en que evita la gran cantidad
de renumeraciones que puede llegar a ser necesario hacer en aquel. Por ejemplo, al aplicar el
algoritmo de Sargent y Westerberg al digrafo de la gura 3.35, los nudos compuestos que se
van creando son {4, 5}, {3, 4 , 6}, {2, 3 , 7} y {1, 2 , 8}; en general, para un digrafo de estas
caractersticas, con n nudos, se producir
an 2 + 4 + 6 + + n = n2 /4 + n/2 reasignaciones de
n
umeros de nudos.
El algoritmo propuesto por Tarjan evita esas renumeraciones constantes mediante el ingenioso uso de unas denominadas pilas de n
umeros parecidas a las usadas en la tabla 3.7.
1

Figura 3.35
Digrafo en el que el algoritmo de Sargent y Westerberg presenta dicultades

258

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Utilicemos dos ejemplos sencillos para ilustrar las caractersticas de su mecanica.


El primero se basa en el digrafo de la gura 3.34. En la tabla 3.8 se describen los pasos que
necesita el algoritmo de Tarjan para tratar este caso y las pilas de n
umeros correspondientes.
En los primeros seis pasos del proceso se van registrando los distintos nudos de un camino. En
ese paso 6, sin embargo, se detecta la existencia de un arco que une el nudo 6 con otro del
camino: el 4. Esta circunstancia se registra mediante la inclusi
on de un vnculo en el nudo 6
con respecto al 4: en la tabla 3.8 se indica a
nadiendo el subndice 4 al n
umero 6. Sabido que
existe un ciclo, {4, 5, 6}, se sigue el proceso sin borrar ni eliminar nada. De igual manera, en
el paso 7 del proceso se vincula el nudo 7 al 3 mediante el correspondiente subndice; de esta
forma se sabe que el camino {3, 4, 5, 6, 7} es un ciclo. Del nudo 7 no salen m
as arcos por lo
que se elimina este nudo del camino; en realidad, como forma parte de un ciclo, no se elimina
fsicamente de la pila, sino que se indica tal circunstancia de alguna manera en la tabla 3.8,
por ejemplo, escribiendo el nudo en negrita. A continuaci
on se estudia el nudo 6, u
ltimo del
camino e inmediatamente debajo del nudo 7 en la pila. En este punto se atribuye el vnculo del
nudo 7 al propio 6. A continuaci
on se comprueba si existe alg
un arco que salga de ese nudo 6 o
entre en el y que no haya sido tenido todava en cuenta; como se constata que no hay ninguno,
se elimina el nudo 6 del camino: como antes, escribiendolo en negrita para tener en cuenta la
existencia de un ciclo (paso 9). En el siguiente paso se estudia el nudo 5 de forma similar y en
el siguiente el 4; en este, ademas de eliminar el nudo 4, se le desvincula l
ogicamente del 3. El
procedimiento contin
ua eliminando normalmente los nudos 2 y 1. Los nudos 3 a 7 constituyen
un componente fuerte.
El algoritmo funciona igual partiendo de cualquier nudo del digrafo. Observese como el
componente fuerte se va perlando gradualmente al ir indicando en negrita sus nudos una vez
analizados estos: no es necesario, por tanto, renumerar como haca el algoritmo de Sargent y
Westerberg.
El ejemplo que hemos utilizado es uno de los m
as simples que se pueden presentar, pues el
camino que se va trazando consta de nudos adyacentes en la pila.
Consideremos ahora el digrafo de la gura 3.36 y sus correspondientes pilas tal como indica
la tabla 3.9.
Se comienza a trazar el camino por el nudo 1. En el paso 4, el nudo 3 se elimina del camino;
como forma parte de un ciclo se indica esta circunstancia escribiendolo en negrita. Su vnculo
se le pasa al nudo 2. En el paso siguiente se a
nade el nudo 4 al camino {1, 2} debido a la
existencia del arco (2, 4). En el paso 9 se hace lo mismo con el nudo 7, pues existe un arco
que lo une con el 5, que es el nudo que en ese momento se esta estudiando. En el paso 10 se
Tabla 3.8
Pila correspondiente al digrafo de la gura 3.34
Paso 1 2 3 4 5 6 7
73
64 64
5 5 5
4 4 4 4
Pila
3 3 3 3 3
2 2 2 2 2 2
1 1 1 1 1 1 1

8
7
63
5
4
3
2
1

9
7
6
53
4
3
2
1

10
7
6
5
43
3
2
1

11 12 13
7
6
5
4
3
2 2
1 1 1

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

259

Figura 3.36
Ejemplo de digrafo con dos componentes fuertes no triviales
identica el nudo 8 como un componente fuerte pues no existen arcos que salgan de el y no
tiene ning
un vnculo con ning
un nudo debajo de el en la pila. En el paso 11, el nudo 7 no
tiene mas arcos no estudiados y se le reconoce como integrante de un componente fuerte pues
tiene un vnculo con el nudo 6: se le elimina escribiendolo en negrita. En los pasos 13 y 15 se
identican los componentes fuertes: {4, 5, 6, 7} y {1, 2, 3}, respectivamente.
El grafo renumerado despues de aplicar el algoritmo es el de la gura 3.37. La estructura
simbolica de la matriz resultante, ya en bloques, es la siguiente:
1
2
3
4
5
6
7
8

1 2 3 4 5 6 7 8

La expresion formal del algoritmo de Tarjan es la que describe la tabla 3.10. Requiere
O(|V |, |E|) operaciones elementales.
Lo que denomin
abamos vnculos, en la pr
actica determinan el vector lowlink(), que indica
el nudo en la pila con el cual el que apunta forma un ciclo o componente fuerte y se ha numerado
previamente. Este lowlink() se inicializa con las posiciones en la pila de cada nudo. El vector
Tabla 3.9
Pila correspondiente al digrafo de la gura 3.36
Paso 1 2 3 4 5 6 7 8 9 10
8
7 7
64 6 6 6
5 5 54 54 54
Pila
4 4 4 4 4 4
31 3 3 3 3 3 3 3
2 2 21 21 21 21 21 21 21
1 1 1 1 1 1 1 1 1 1

11 12 13 14 15
76
6
54
4
3
21
1

7
6
54
4
3
21
1

7
6
5
4
3 3 3
21 21 2
1 1 1

260

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Figura 3.37
Digrafo de la gura 3.36 una vez renumerado con el algoritmo de Tarjan
Tabla 3.10
Algoritmo de Tarjan
Paso 0 Inicializaci
on. Hacer Ae , Vv y i 0. Ir al paso 1.
Paso 1 Selecci
on del nudo de partida. Seleccionar cualquier nudo v
/ Vv . Si no hay ninguno,
parar.
Paso 2 Visitar un nudo. A
nadir el nudo v a la pila y al camino. Hacer:
Vv
i
num(v)
lowlink(v)

Vv {v}
i+1
i
i.

Paso 3 Explorar arcos. Mirar entre los arcos que salen de v si hay (v w)
/ Ae :
a) si hay un tal arco y el nudo w
/ Vv , hacer Ae Ae (v w), v w e ir al
paso 2.
b) si hay un tal arco y el nudo w Vv , hacer Ae Ae (v w) e ir al paso 4
para ajustar lowlink(v).
c) si no hay un tal arco y lowlink(v) < num(v), ir al paso 5.
d) si no hay un tal arco y lowlink(v) = num(v), ir al paso 6 para formar el
componente fuerte correspondiente.
Paso 4 Ajustar el vector lowlink. Si num(w) < num(v) y w esta en la pila, hacer
lowlink(v) min{lowlink(v), lowlink(w)} e ir al paso 3. Si no, ir al paso 3 directamente.
Paso 5 Retroceder. Retirar v del camino. Hacer:
w nudo al nal del camino
lowlink(u) min .{lowlink(u), lowlink(v)}
v u.
Ir al paso 3.
Paso 6 Denir un componente fuerte. Retirar v y todos los nudos por encima de este en la
pila y formar con ellos un componente fuerte. Retirar v del camino.
Si el camino esta vaco, ir al paso 1. Si no, hacer v el u
ltimo nudo del camino e ir
al paso 3.

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

261

num() indica el n
umero asignado a un nudo una vez renumerado. El conjunto Ae contiene los
arcos ya explorados; Vv es el conjunto de nudos ya visitados.
El algoritmo consiste esencialmente en una serie de pasos principales cada uno de los cuales
tiene otros varios secundarios. Uno de esos pasos principales comienza colocando en la pila y
en el camino un nudo de los todava no estudiados en pasos principales previos. A continuaci
on
se llevan a cabo los pasos secundarios, cada uno de los cuales consiste en ampliar o reducir en
un nudo el camino que se est
a trazando. El paso principal termina cuando la pila y el camino
se agotan.
Un paso secundario comienza con la b
usqueda de, entre los arcos que no han sido estudiados,
aquellos que salen del nudo v de nal de camino. Si uno de esos arcos lleva a un nudo w cuyo
vnculo/puntero indica un nudo m
as abajo en la pila que el del propio v, el de este se hace
igual al de w. Esta estrategia contin
ua hasta que:
1. Se encuentre un arco que llegue a un nudo que no est
a en la pila; en este caso se a
nade
ese nudo a la pila y se aumenta el camino a
nadiendo ese nudo al mismo.
2. La lista de nudos que salen del de nal del camino se vace; en este caso puede ocurrir
que:
(a) El vnculo de ese u
ltimo nudo apunte al propio nudo v del nal del camino. En este
caso al nudo v se le designa como raz de un bloque formado por el mismo y por
todos los que estan por encima en la pila. Este bloque se elimina en su totalidad de
la pila, y de cualquier ulterior consideraci
on, numerando sus nudos a continuaci
on.
El paso secundario se completa volviendo al nudo anterior al nudo v en el camino,
a menos que el camino y la pila ya esten vacos.
(b) El vnculo indique un nudo m
as abajo en la pila que el nudo v del nal del camino.
En este caso se completa el paso volviendo al nudo w anterior al v en el camino. El
vnculo de w se hace igual al de v si el de w indica uno m
as abajo en la pila que el
de v.
Si se han renumerado todos los nudos del camino se comienza un nuevo paso principal.
La implementacion de este algoritmo en ordenador es muy sencilla. En las referencias bibliogr
acas se pueden encontrar breves y ecaces programas en Fortran 77 (alguno con menos
de 70 instrucciones) que lo llevan a efecto.

3.5.5

Pivotaci
on en matrices dispersas y eliminaci
on de Gauss

Si el sistema de ecuaciones lineales que se quiere resolver no presenta ninguna estructura en la


matriz de coecientes digna de ser tenida en cuenta desde el punto de vista de su dispersidad,
y ni siquiera interesa triangularizarla por bloques, la forma de abordar su resoluci
on consiste
en utilizar directamente la eliminaci
on de Gauss; eso si, teniendo en cuenta que esa matriz es
dispersa y que por tanto conviene proceder con cierta cautela para beneciarse en lo posible
de esta circunstancia.
La forma m
as universalmente aceptada de llevar esto a cabo consiste en hacerlo siguiendo
el criterio de Markowitz [1957]. La idea de este autor consiste en factorizar la matriz mediante
eliminaci
on de Gauss con pivotaci
on, escogiendo como elemento pivote en una etapa k aquel
k de A que sea num
aij
ericamente aceptable y que minimice el producto
(rik 1)(cjk 1),

262

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

donde rik es el n
umero de elementos distintos de cero en la la i de la submatriz activa, Ak , y
k
umero de elementos distintos de cero en la columna j de esa submatriz activa. Observese
cj el n
que es mas conveniente usar (rik 1)(cjk 1) que rik cjk pues de esta manera se fuerza a que se
k tal que en su la o columna s
elija un coeciente aij
olo exista el como elemento distinto de
cero. El criterio numerico de aceptabilidad requiere que
|akij | u max |akil |
lk

o que
k
|akij | u max |alj
|,
lk

donde u es un par
ametro, 0 < u 1, que se ja previamente.
Para comprender m
as facilmente el alcance del criterio de Markowitz, supongamos que
estamos en la etapa k y que, como siempre en estos casos, la submatriz activa, Ak , es la que
determinan las columnas k a n y las las k a n de A. En la gura 3.38 se ilustra la situaci
on
para el caso en que n = 7 y k = 3. Para facilitar la notaci
on, sin perdida de generalidad,
suponemos que los elementos de la diagonal principal se van haciendo 1. Los vectores r y c son
de orden n k. Si consideramos la matriz cuadrada de rango 1 y orden n k, cr T , la etapa
k de la eliminaci
on de Gauss consiste en restar la matriz cr T de la que determinan las las
y columnas k + 1 a n de A. El vector c se convierte en la subcolumna k de L y [1, rT ] en la
subla k de U . El criterio de Markowitz consiste en elegir un akij y llevarlo a la posici
on (k, k),
por medio de los intercambios de las y columnas oportunos, de tal forma que el producto del
n
umero de elementos del vector c menos 1, cjk 1, por el del vector r menos 1, rik 1, sea
mnimo.
El criterio (heurstico) de Markowitz, combinado con alg
un criterio como el sugerido que
garantice la estabilidad numerica del proceso de factorizacion de la matriz, produce excelentes
resultados: muchas veces mejor que otros mas sosticados.
El objetivo que persigue el criterio de Markowitz consiste en encontrar aquel elemento
pivote que modique el menor n
umero posible de coecientes en la submatriz que resta por
factorizar. Tambien se puede ver como una forma de satisfacer el criterio de minimizar el
n
umero de multiplicaciones, rik (cjk 1), a efectuar en la etapa k de la factorizaci
on y como una
forma de producir el menor n
umero de elementos de relleno en la etapa k: en el peor de los
casos este n
umero de rellenos sera precisamente (rik 1)(cjk 1).
Para llevar a la pr
actica la eliminacion de Gauss con el criterio de Markowitz hay que tener
cierto cuidado pues, por ejemplo, si en una etapa k la submatriz activa es de orden 10.000 y
1

rT

L c

Figura 3.38
Etapa k = 3 de la eliminaci
on de Gauss de una matriz de orden 7

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

263

existen en ella 40.000 elementos distintos de cero, si el pivote elegido cumple que ri = cj = 3,
se habr
an efectuado 40.000 comprobaciones para llevar a cabo una etapa que s
olo comporta 10
operaciones aritmeticas. Para evitar esto se suele utilizar dos vectores, nr y nc, inicializados
con el n
umero de elementos no nulos no en la diagonal principal en cada la y en cada columna;
sus valores se adaptan seg
un evoluciona la factorizaci
on.
En la literatura especializada en matrices dispersas, y en las referencias bibliogr
acas del
nal de este captulo, se pueden encontrar diversas formas y estrategias para llevar a efecto la
eliminaci
on de Gauss con el criterio de Markowitz. Los paquetes de rutinas matem
aticas de
Harwell (MA28), SPARSPAK, YSMP y SMMS (FACTORNS), resuelven sistemas lineales de
matrices dispersas de estructura no simetrica de la forma explicada en este apartado.

3.5.6

M
etodo de los frentes

Los esquemas de frentes para resolver sistemas de ecuaciones lineales con matriz dispersa
tienen su origen en la soluci
on de problemas de elementos nitos para an
alisis de estructuras
mecanicas. En estos problemas, las matrices con las que se opera son simetricas y denidas
positivas. En los u
ltimos a
nos se han adaptado de forma generalizada para tratar problemas
muy diversos de grandsimas dimensiones debido a la poca memoria de ordenador que necesitan.
La rutina MA32 del AERE Harwell es quiz
as la mas conocida y usada de las que implementan
esta tecnica.
Para describir el procedimiento que se sigue y las ideas que subyacen en ellos nos referiremos
a un problema de elementos nitos. En la gura 3.39 se presenta un ejemplo. En cada tri
angulo
se consideran 7 variables: tensiones en los vertices, en los puntos medios de los lados y en el
centroide. La matriz que resulta del problema se va congurando en el mismo orden que dene
la numeraci
on de la gura 3.39. En este sentido, la matriz A sera
A=

A[] ,

donde cada A[] tiene solo elementos distintos de cero en las submatrices donde estan presentes

Figura 3.39
Pieza mecanica mallada para su an
alisis por elementos nitos

264

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

las variables que tienen que ver con el elemento . El proceso que tiene lugar al efectuar la
suma se denomina ensamblaje de los elementos. Despues de ensamblado el elemento n
umero 6
de la gura 3.39, la matriz A tiene la forma de la gura 3.40. Lo m
as importante que resaltar
de esta son los dos bloques cero situados en la parte superior derecha e inferior izquierda de
la matriz. Su situaci
on quiere decir que si se eligen los elementos pivote para la eliminaci
on de
Gauss de entre los del bloque superior izquierdo, la parte de la matriz no ensamblada todava
(parte reticulada) no se ver
a afectada por esa eliminaci
on; s se modicar
an, por supuesto,
la parte superior izquierda, las zonas sombreadas y el denominado frente, de acuerdo con las
f
ormulas de la eliminaci
on de Gauss:
aij aij aik (akk )1 akj ,

(3.2)

donde el elemento pivote es el que se designa por akk .


Una vez efectuadas estas operaciones, las variables involucradas en las zonas sombreadas y
el bloque superior izquierdo estar
an ya totalmente ensambladas; las involucradas en el frente se
ver
an afectadas por la incorporaci
on de los elementos 7 a 13. La contribuci
on de esos elementos
sera de la forma
[]
aij aij + Eij ,
(3.3)
[]

donde Eij indica el valor del componente ij del elemento , por lo que da igual el orden en
que se efect
uen las operaciones (3.2) y (3.3) siempre que los valores de aik , akk y akj se hayan
sumado en su totalidad y tengan un valor denitivo antes de efectuar (3.2).
Si no es necesario realizar pivotaci
on (por ejemplo cuando la matriz ensamblada es denida
positiva), el bloque superior izquierdo se puede eliminar de la memoria principal del ordenador
en el que se lleva a cabo el proceso y guardarse donde se considere oportuno para una posterior
manipulaci
on. Como la parte reticulada de la gura 3.40 todava no se ha ensamblado, una
vez hecho esto, solo sera necesario guardar moment
aneamente las variables involucradas en
el frente. En el caso de la gura 3.39, las variables en el frente, una vez ensamblados los seis
primeros elementos, seran la siete variables en los tri
angulos cuyos lados se indican con doble
raya.

Elementos
1a6

Frente

No Ensamblados

0
Figura 3.40
Matriz A despues de ensamblados los primeros seis elementos de la gura 3.39

3.5 Matrices dispersas no simetricas y eliminacion de Gauss

265

El tama
no del frente juega un papel primordial en el procedimiento y vara seg
un progresa
el ensamblaje de los distintos elementos. En el ejemplo, despues de ensamblado el elemento
19 y efectuada la subsiguiente eliminaci
on de Gauss, el frente estar
a formado por las variables
de los tri
angulos cuyos cuatro lados se indican con triple raya. Para un orden dado de los
elementos existe un tama
no m
aximo de frente; en el caso de la gura 3.39, despues de ensamblado el elemento n
umero 10, el frente estar
a formado por once variables. Es evidente que una
ordenaci
on adecuada puede reducir de forma apreciable el tama
no m
aximo de los frentes.
El metodo de los frentes evita, si se guarda la matriz que dene el frente como una matriz
totalmente llena, los problemas inherentes a utilizar matrices dispersas: operar por las o
columnas (no con ambas a la vez) seg
un el esquema de almacenamiento elegido, manejos
continuos de subndices, etc.
El metodo de los frentes se puede aplicar tambien a sistemas cuya matriz de coecientes
no es denida positiva, requiriendo en este caso pivotaciones. Para escoger el pivote se puede
recurrir a cualquiera de los elementos situados en el bloque superior izquierdo de la matriz ya
ensamblada, requiriendosele ademas que cumpla, por ejemplo, que
|alk | u max |aik |,

(3.4)

donde, 0 < u < 1, es un umbral adecuado al problema. Observese que si se efect


uan intercambios no simetricos, la lista de ndices de las en el frente diferir
a de la de columnas y se
requerir
a memoria adicional. En el caso de que la matriz sea simetrica se puede seguir conservando esa simetra eligiendo como pivote un elemento diagonal que cumpla (3.4) o realizar
pivotaciones en bloques 2 2 como las estudiadas al analizar el metodo de Bunch y Kaufman
en el apartado 1.5.4.3.1 de la p
agina 60; es decir, del tipo


aii aij
,
E=
aji ajj
donde todos los elementos de E deben pertenecer al bloque superior izquierdo ya ensamblado
y cumplirse que


E 1 11 u max max |ali |, max |alj | .
l=i,j

l=i,j

Si el pivote, o bloque pivote, no puede elegirse de entre los elementos del bloque superior
izquierdo, se pueden realizar uno o m
as nuevos ensamblajes. La u
nica penalizaci
on que esto
puede traer consigo es el aumento del tama
no del frente.
Problemas generales
La tecnica de los frentes no es exclusiva de las tecnologas aplicables a elementos nitos: se
puede generalizar. Para ello, en lugar de ensamblar bloques, se hace la a la como si se tratase
de bloques o matrices no simetricas. Esta forma de proceder se ilustra en la gura 3.41, donde
se presenta la matriz una vez ensamblada la tercera ecuacion de una discretizaci
on en cinco
puntos del operador de Laplace en una malla 2 4. Hecho este u
ltimo ensamblaje, en este
caso, ninguna otra ecuaci
on producir
a nuevos elementos en la columna 1 por lo que una vez
factorizada se puede suponer que los c
alculos con ella se han completado y, si as se desea,
eliminarla.
La version de la gura 3.40 para el caso en que se traten problemas que no son de elementos
nitos es la 3.42. La generalizaci
on del metodo de los frentes capaz de tener en cuenta esquemas

266

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

4 1 1
1 4 0 1
1 0 4 1

Figura 3.41
Malla 2 4 y primeras tres las de la matriz a que da lugar el metodo de los frentes
de ordenaci
on (basados en la estructura de la matriz) como los de grado mnimo o diseccion
anidada se denomina metodo multifrentes. Una implementaci
on comercial muy aceptada para
el tratamiento de sistemas de muy grandes dimensiones con matriz simetrica o casi simetrica
la constituye la rutina MA37 del paquete de software de matrices dispersas del AERE Harwell.

3.6

Problemas de mnimos cuadrados dispersos

Con este nombre se designan aquellos problemas de mnimos cuadrados lineales,


Ax b2 ,
minimizar
xn

(3.5)

en los que la matriz A es de grandes dimensiones y dispersa. Los metodos que vamos a estudiar
en este apartado son especializaciones de los vistos en el captulo 1 para cuando la matriz A
presenta unas caractersticas de dispersidad tales que hacen aconsejable su explotaci
on por
procedimientos ad hoc.

Columnas
Sumadas

Frente

Filas no
Ensambladas

Figura 3.42
Matriz A de un problema no de elementos nitos en el proceso de tratamiento por el metodo
de los frentes

3.6 Problemas de mnimos cuadrados dispersos

3.6.1

267

El m
etodo de las ecuaciones normales

Como se recordara, si S = {x n : Ax b2 = min},


x S AT (Ax b) = 0.
El segundo miembro de esta u
ltima expresi
on dene las ecuaciones normales. Como es sabido,

para resolver (3.5) se pueden utilizar las ecuaciones normales. Estas


no son sino un sistema
7
lineal de ecuaciones en el que si A es de rango completo, cosa que supondremos en lo que
sigue, la matriz AT A es simetrica y denida positiva.
En el caso que nos ocupa, cuando A es dispersa, si se quiere utilizar las ecuaciones normales,
hay que tener en cuenta que, de la misma forma que al factorizarla, al formar la matriz AT A
se pueden crear elementos de relleno.
Si ai designa el vector la i-esimo de la matriz A mn , entonces,
T

A A=

m


ai aTi .

(3.6)

i=1

Esto expresa la matriz AT A como suma de m matrices de rango 1. Si suponemos que en (3.6)
no se producen errores numericos de cancelaci
on, esto es, al sumar o restar dos cantidades
distintas de cero el resultado es distinto de cero, la estructura de dispersidad de AT A es la
suma de las estructuras de ai aTi , i = 1, 2, . . . , m.
Teorema 3.4 Sup
ongase que no se producen errores numericos de cancelaci
on en el c
alculo
T
de A A. Entonces,


T
= 0 aij = 0 y aik = 0
A A
jk

para al menos una la i = 1, 2, . . . , m.


Este teorema permite determinar muy f
acilmente la posicion de los elementos distintos de
T
cero de A A, a partir de los de A, sin necesidad de calcularlos numericamente. Si el supuesto
de no cancelacion numerica no fuese cierto, el n
umero de elementos que se estimase para AT A
podra ser mucho mayor que el real. Por ejemplo, si A es ortogonal, AT A = I, por lo que AT A
es dispersa aun cuando A fuese muy densa o totalmente llena.
Del teorema 3.4 se desprende que si A tiene una sola la completamente ocupada, aunque
el resto de las las fuesen dispersas, AT A sera totalmente densa. Por ejemplo, si

A=
,

AT A sera totalmente densa.


7

Si A no es de rango completo, AT A es simetrica pero semidenida positiva

(3.7)

268

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Tambien se presentaran dicultades cuando siendo A dispersa o muy dispersa, AT A esta


pr
acticamente llena de elementos distintos de cero. Tal es el caso, por ejemplo, cuando cada
elemento aij es una variable aleatoria independiente y Prob{aij = 0} = p  1. En este caso,
Prob{aij aik = 0, j = k} = 1 p2 .
Como

A A
entonces

Prob

A A

jk

jk

m


aij aik ,

i=1

= 0 = 1 1 p2

m

emp .
2

Si el valor esperado del n


umero de elementos distintos de cero en una columna cualquiera
1/2
1/2
es m , entonces p = m
y mp2 = 1, por lo que AT A estara pr
acticamente llena de
elementos distintos de cero. Estos problemas suelen presentarse habitualmente en reconstruccion de im
agenes, prospecciones petrolferas, etc. Se resuelven mediante procesos iterativos
como los estudiados en el captulo 2.
Si P y Q son matrices de permutacion m m y n n (de las y columnas), se tiene que
(P AQ)T (P AQ) = QT AT P T P AQ = QT AT AQ,
es decir, una reordenaci
on de las las de A no afecta a la matriz AT A (este resultado se deduce
inmediatamente de (3.6)). La reordenaci
on de las columnas de A, por el contrario, equivale a
T
una permutaci
on simetrica de A A.
Partiendo de estas consideraciones, un algoritmo que utilizase las ecuaciones normales para resolver el problema de mnimos cuadrados dispersos, basado en el de la tabla 3.1 de la
p
agina 221, sera el de la tabla 3.11. El algoritmo a utilizar para determinar la permutaci
on
Q que requiere el paso 2 puede ser el de grado mnimo. Si este es el caso, usando las ideas
apuntadas en el apartado 3.4.3 y los grafos de eliminaci
on correspondientes, los pasos 2 y 2 se
podran refundir en uno.
Aparte de las dicultades numericas apuntadas en el captulo 1 al exponer los problemas
generales de mnimos cuadrados, y que hay que tener en cuenta en cualquier caso, si la matriz
del problema est
a relativamente bien condicionada, para resolver un problema de mnimos
cuadrados en el que esa matriz es dispersa siguiendo el esquema de la tabla 3.11, se puede
usar cualquiera de los paquetes de software de matrices dispersas que existen en el mercado.
En este sentido volvemos a citar la librera de rutinas matem
aticas de AERE de Harwell y
los paquetes SPARSPAK (George y Liu [1981]), YSMP (Eisentat, Schultz y Sherman [1981])
SMMS (Alvarado [1990]), NAG [1992 y 1993] y Matlab.
3.6.1.1

Dispersidad parcial

Si la matriz A es dispersa en casi su totalidad salvo algunas pocas las llenas, consideremos el
problema




 As
bs 

 ,
x
(3.8)
minimizar 
Ad
bd 2
x

3.6 Problemas de mnimos cuadrados dispersos

269

Tabla 3.11
Algoritmo para resolver mnimos cuadrados con matrices dispersas mediante las ecuaciones
normales
Paso 1 Determinar la estructura simbolica de AT A.
Paso 2 Determinar una permutacion de columnas Q tal que QT AT AQ tenga una estructura
dispersa ventajosa en relacion con el tipo de sistema a resolver: es decir, que su factor
de Cholesky, G, sea disperso.
Paso 2 Factorizar simbolicamente por Cholesky la matriz QT AT AQ y generar las estructuras
de datos y memoria necesarias para G.
Paso 3 Calcular numericamente B = QT AT AQ y c = QT AT b; almacenar B en la estructura
de datos correspondiente a G.
Paso 4 Calcular numericamente la factorizacion de Cholesky, GT G, de B. Resolver GT z = c,
Gy = z y, por n, x = Qy.

donde As m1 n es la parte dispersa y Ad m2 n , m2  n, la parte densa o llena.


Supondremos que rango(As ) = n. Sea xs la soluci
on del problema disperso
minimizar As x bs 2
x
y Gs el factor de Cholesky de AsT As . Los vectores de residuos de (3.8) correspondientes a xs
son rs (xs ) = bs As xs y rd (xs ) = bd Ad xs . La soluci
on del problema completo, x = xs + z,
sera aquella que minimice
r s (x)22 + rd (x)22 ,
(3.9)
T
donde rs (x) = rs (xs ) As z y r d (x) = rd (xs ) Ad z. Como se cumple que As rs (xs ) = 0 y
rs (xs ) es constante, (3.9) es equivalente a


minimizar As z22 + Ad z rd (xs )22 .


z

(3.10)

1
T
1
Haciendo u = Gs z y Bd = Ad G1
s se tiene que As z2 = As Gs u2 = Q Gs Gs u = u2
por lo que (3.10) se reduce a

minimizar u22 + Bd u r d (xs )22 .


u


Si se hace v = r d (xs ) Bd u, C = [ Bd , Im2 ] y w = uT , v T


escribir de la siguiente manera:

T

, la expresi
on anterior se puede

minimizar w2
s. a
Cw = rd (xs ).

(3.11)

on de (3.11) es pues
Como C tiene rango completo, su pseudoinversa es C T (CC T )1 . La soluci

w = C T CC T

1

rd (xs ) = C T GTd Gd

1

r d (xs ),

donde Gd es el factor de Choleky de CC T . Una vez calculado el vector w y de el u, z se obtiene


resolviendo Gs z = u. Con z se llega luego a la solucion x = xs + z.

270

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

3.6.2

M
etodos basados en transformaciones ortogonales. M
etodo de GeorgeHeath

Como se recordara del captulo 1, apartado 1.7.2.2, p


agina 88, los metodos basados en transformaciones ortogonales evitan los problemas que surgen del posible mal condicionamiento de la
matriz AT A de las ecuaciones normales. Estas transformaciones utilizan una matriz ortogonal
Q mm para reducir A mn (que supondremos de rango n) y b m de la forma


R1
QA =
0

c
,
y Qb =
d

donde R1 nn es una matriz triangular superior y c n . La soluci


on del problema de
mnimos cuadrados se obtiene resolviendo el sistema R1 x = c; la suma de residuos al cuadrado
es d22 .
De acuerdo con el teorema 1.16 de la p
agina 89, la matriz R1 es la misma que la que resulta
nica, su estructura
de la factorizaci
on de Cholesky, GT G, de AT A. Como esta factorizacion es u
de elementos cero/distintos de cero es tambien u
nica. Siguiendo la estrategia de actuaci
on con
matrices dispersas que venimos propiciando a lo largo de todo este captulo, esto es, prever en
cada procedimiento que elementos distintos de cero se van a crear al manipular una matriz,
en este caso habra que conocer, antes de calcularlos numericamente, los de la matriz R1 . Una
forma de hacerlo de hecho la m
as extendida es usar los pasos 2 y 2 del algoritmo de
la tabla 3.11 para determinar una buena reordenaci
on de columnas, Q ,8 de tal forma que el

factor R1 de AQ sea lo mas disperso posible. Esta forma de actuar, sin embargo, no est
a exenta
de peculiaridades poco satisfactorias como es, por ejemplo, que puede resultar excesivamente
generosa al reservar espacios para futuros elementos de relleno. En efecto, si A tiene la forma
que veamos en (3.7), el factor R1 sera igual a A; ahora bien, AT A es totalmente llena por lo
que la forma de actuar apuntada reservara muchas mas posiciones de memoria para elementos
de relleno que las necesarias.
Otra forma de actuar consiste en llevar a cabo simb
olicamente los algoritmos basados en
transformaciones de Givens o de Householder que estudi
abamos en el captulo 1. En este
sentido, George y Ng [1985] demuestran el siguiente resultado.
Teorema 3.5 La estructura de R1 que predice la factorizaci
on simb
olica de AT A por Cholesky incluye la de R1 que predice el metodo simb
olico basado en transformaciones de Givens.
Tambien Manneback [1985] demuestra lo mismo para el caso en que se apliquen transformaciones de Householder.
El algoritmo que proponen George y Heath [1980], al que denominan ortogonalizaci
on secuencial de las, procesa las las de A secuencialmente. Si Ri1 designa la matriz triangular
T , al procesar la la aT =
superior que se obtiene despues de procesar las las a1T , . . . , ai1
i
[ai1 , ai2 , . . . , ain ] se buscan de izquierda a derecha los elementos distintos de cero; para cada
aij = 0, se dene una rotaci
on o transformaci
on de Givens simb
olica que involucre a la la j
de Ri1 y anule aij . Procediendo as se pueden crear nuevos elementos distintos de cero tanto
en Ri1 como en la la aTi . El proceso contin
ua hasta conseguir Ri .
Si en el transcurso del tratamiento de la la i, al llegar al elemento j, este, rjj , querr
a decir
que la la j en Ri1 todava no se ha visto afectada por ninguna rotaci
on y la totalidad de la
8

No confundir esta matriz de permutaci


on de columnas con la matriz ortogonal Q.

3.6 Problemas de mnimos cuadrados dispersos

271

la j debe ser cero. Cuando esto ocurre se intercambian la la j con la i. En la gura 3.43 se
ilustra este proceso al actuar sobre los elementos de la la 9 de una matriz 9 8. Observese
que los tres u
ltimos elementos de esta la 9, una vez anulados del 1 al 5, se intercambiaran
con la la 6.
Una vez efectuada la factorizaci
on simb
olica y determinada por tanto la estructura de
elementos distintos de cero de R1 , se procede con la factorizacion numerica.
3.6.2.1

Ordenaci
on de las

A pesar de que la matriz R1 que se obtiene es independiente del orden en que se tratan las
las de A, lo cierto es que el n
umero de elementos de relleno en los pasos intermedios, y por
tanto el n
umero global de operaciones que necesita el algoritmo de George y Heath, depende
mucho de ese orden. Por ejemplo, las matrices

m
..


A=

..

y PA =

requieren, respectivamente, O(mn2 ) y O(n2 ) operaciones para reducirlas.


Supuesto que los vectores la de A no tienen normas muy distintas, el orden en que se
disponen no afecta a la estabilidad numerica del procedimiento y puede escogerse el que dena
un patr
on de dispersidad mejor. En cualquier caso, teniendo en cuenta esto, es deseable obtener
una ordenaci
on de las las de la matriz por transformar que reduzca al mnimo los rellenos
intermedios. Una regla que se puede aplicar con este objetivo es la siguiente:
0 0
0
0

0
0
0

0
0
0
0
0
0

0 0 0

Figura 3.43
Procesamiento simbolico de la la 9 de una matriz A 98 por el algoritmo de George y
Heath. Los smbolos designan los elementos de R8 involucrados en la eliminaci
on de a9T ;
los que se crean en esa eliminacion

272

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Si el ndice de columna del u


ltimo elemento distinto de cero de la la aiT es i
y el primero fi , ordenar primero las las de tal forma que los ndices f i , i = 1,
2, . . ., cumplan que fi fk si i < k y luego, para cada grupo de las tales que
fi = k, k = 1, . . . , maxi fi , ordenar las las seg
un i crecientes.
Si se aplica la regla anterior a la matriz A representada m
as arriba, se obtendra la reordenaci
on que se esquematizaba como P A. Esta regla no produce una u
nica reordenaci
on. Para
resolver las situaciones donde se presentan varias posibilidades por existir empate se puede
considerar el coste de rotar simb
olicamente el vector la aiT en todas las las donde hay un
elemento no nulo en la columna i . Este coste sera el n
umero de elementos distintos de cero
que se crearan. Las columnas se ordenaran en orden creciente de ese coste. De acuerdo con
este criterio, las las 1, . . . , fi 1 de Ri no se veran afectadas cuando se procesen las las
restantes.
Otra forma de ordenar las las que suele dar tambien buenos resultados consiste en simplemente hacerlo de acuerdo con los valores crecientes de i . Con esta regla, al procesar la la
aTi solo se veran afectados las columnas fi a i de Ri1 , pues las las anteriores solo tendran
elementos distintos de cero hasta como mucho la columna i . La matriz Ri1 tendra ceros en
las columnas i+1 , . . . , n y no se produciran rellenos en esas columnas de la la aiT .
El procedimiento de George y Heath en la pr
actica resulta mas ventajoso si la determinaci
on
de la estructura de R1 se hace como en el caso de las ecuaciones normales: esto es, mediante
los pasos 2 y 2 de la tabla 3.11. El algoritmo completo de George y Heath se describe en la
tabla 3.12.

3.6.3

Otros m
etodos

Un metodo mas para resolver problemas de mnimos cuadrados dispersos, relacionado con
los vistos hasta ahora para sistemas cuadrados generales, consiste en reordenar la matriz A
Tabla 3.12
Algoritmo de ortogonalizaci
on dispersa de George y Heath
Paso 1 Determinar la estructura simbolica de AT A.
Paso 2 Determinar una permutacion de columnas Q tal que QT AT AQ tenga una estructura
dispersa ventajosa en relacion con el tipo de sistema a resolver: que su factor de
Cholesky, G, sea disperso.
Paso 2 Factorizar simbolicamente por Cholesky, GT G, la matriz QT AT AQ y generar las
estructuras de datos y memoria necesarias para G.
Paso 3 Determinar una permutacion de las P tal que las las de P AQ tengan unos i
crecientes.
Paso 4 Calcular numericamente R1 y c procesando las las de [P AQ, P b] mediante transformaciones de Givens.
Paso 5 Resolver Ry = c. Hacer x = Qy.

3.6 Problemas de mnimos cuadrados dispersos

273

mediante permutaciones P y Q de tal forma que se obtenga

M1 U12 U1k U1 k+1

M2 U2k U2 k+1

.
.
..
P AQ =
,
. ..
..

Mk Uk k+1
Mk+1

(3.12)

donde los bloques Mi , i = 1, 2, . . . , k, son cuadrados.


Denici
on 3.6 Sea A mn , m n. Si para todos los subconjuntos formados por k
columnas de A, k = 1, 2, . . . , n, las correspondientes submatrices tienen elementos distintos
de cero en al menos k + 1 las, se dice que la matriz A posee la propiedad fuerte de Hall.
De las dos matrices siguientes,

A=

y A =

A posee la propiedad fuerte de Hall y A no.


Coleman, Edenbrand y Gilbert [1986] prueban que si la matriz A de
Ax b2
minimizar
xn

(3.13)

tiene la propiedad fuerte de Hall, se puede reordenar seg


un (3.12). En este caso, los bloques
Mi , i = 1, 2, . . . , k + 1, tambien tienen esa propiedad. La reordenaci
on que conduce a la forma
triangular en bloques de (3.12) se puede lograr mediante una sencilla variante del algoritmo
de Tarjan estudiado en el apartado 3.5.4.2. El sistema reordenado correspondiente conduce a
la siguiente formulaci
on del problema 3.13:
k+1 2 ,
k+1 b
minimizar Mk+1 x
k+1
x
= P b se dividen de la misma forma que P AQ en (3.12). Si rango(A) = n,
= QT x y b
donde x
k , . . . , x1 se pueden obtener mediante la
los bloques Mi , i = 1, 2, . . . , k, son regulares y x
siguiente sustituci
on inversa en bloques:
i
i = b
Mi x

k+1


j,
Uij x

i = k, . . . , 2, 1.

j=i+1

Referencias
Existen pocas referencias bibliogr
acas recientes sobre matrices dispersas y los u
ltimos adelantos de sus metodos y procedimientos (que son muchos).

274

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

Todo lo expuesto relativo a formas de almacenar en ordenador matrices dispersas trata


de reejar las u
ltimas tendencias y, por supuesto, las m
as usadas; en este sentido, se pueden
consultar los siguientes libros: Du, Erisman y Reid [1986]; George y Liu [1981], Lascaux y
Theodor [1986]; Pissanetzky [1984]; Saad [1994]; Schendel [1989] y Tewarson [1973].
Para la elaboraci
on del apartado sobre operaciones algebraicas elementales en matrices
dispersas, se ha seguido a Du, Erisman y Reid [1986] y Pissanetzky [1984]; los programas de
ordenador son del autor y se basan en los que propone Pissanetzky [1984].
Muchos de los gr
acos y guras de matrices dispersas del texto se han confeccionado con
el paquete de software SMMS de Alvarado [1990]. Otro paquete muy interesante similar, m
as
moderno y completo, es el de Youcef Saad [1994], SPARSKIT. Las direcciones de Internet y
Ftp donde se puede encontrar toda la informaci
on relativa a este u
ltimo son las siguientes:

http://www.cs.umn.edu/Research/arpa/SPARSKIT/sparskit.html
y

ftp://ftp.cs.umn.edu/dept/sparse/
Existe un banco de datos de matrices dispersas denominado Harwell/Boeing, Du y otros
[1989]. En este, con un formato universal, se pueden encontrar multitud de matrices dispersas
de caractersticas, tama
no y dicultad de tratamiento diversos.
Las nociones sobre grafos, tanto dirigidos como no dirigidos, est
an basadas en las propuestas por Pissanetzky [1984] pero adaptadas y completadas para ser coherentes con las que se
exponen en las partes del texto relativas a programaci
on lineal y entera.
La interpretaci
on mediante grafos de la eliminaci
on de Gauss en matrices simetricas dispersas sigue a Pissanetzky [1984]. El algoritmo de grado mnimo para reordenar ese tipo de
matrices esta basado en George y Liu [1981]; el de Cuthill-McKee en George y Liu [1981] y
Lascaux y Theodor [1986]; el de Cuthill-McKee inverso utiliza la descripci
on de Du, Erisman
y Reid [1986]. Los metodos de diseccion aparecen muy bien descritos en Du, Erisman y Reid
[1986] y en Pissanetzky [1984]; en la exposici
on presentada se ha hecho un resumen de la de
este u
ltimo.
El algoritmo de Hall se puede encontrar en varias de las referencias mencionadas; la exposicion hecha en el texto se ha basado parcialmente en la de Pissanetzky [1984]. La descripci
on
de los algoritmos de Sargent y Westerberg y Tarjan sigue a Du, Erisman y Reid [1986] y a
Du y Reid [1978].
Lo relativo al metodo de los frentes se ha basado en Du [1981].
Lo que hace referencia a mnimos cuadrados dispersos se puede encontrar muy bien tratado
en Bj
ork [1990] y [1996], George y Heath [1980] y George y Ng [1985].

Ejercicios
3.1. Escribir los vectores necesarios para almacenar

0 2 0 1 0 1
0 3 1 0 0 2

0 0 0 0 4 3
A=
0 0 0 0 0 0
1 0 0 0 0 0
0 0 0 0 0 0

la matriz
2
0
0
0
0
0

1
1
0
0
0
0

0
0
3
3
1
0

0
0
1
0
1
0

1
1
1
1
0
0

0
0
1
0
0
0

0
0
0
1
0
0

0
0
0
0
1
0

0
0

0
0

0
1

Ejercicios

275

en un ordenador:
a) Por coordenadas.
b) Por las.
c) Por listas encadenadas.
3.2. Numerar el grafo

y escribir la matriz dispersa correspondiente.


3.3. Determinar el grafo asociado a la matriz A cuya estructura
siguiente:

A=

de elementos distintos de cero es la

3.4. Cual es el ancho de banda de la matriz del ejercicio anterior? Y su envolvente? Cuantos
elementos tiene la envolvente?
3.5. Como habra que reordenar la matriz

A=

para conseguir el menor n


umero de elementos de relleno al factorizarla por Cholesky o Gauss?
3.6. Que numeracion se debe dar al grafo

para que al factorizar la matriz asociada mediante eliminacion de Gauss no se produzcan elementos
de relleno?
3.7. Que algoritmo de los estudiados para reordenar la numeraci
on de los nudos del grafo asociado a
una matriz dispersa habra que utilizar antes de factorizar la matriz del ejercicio 3? Por que?
3.8. Cual es la permutacion P tal que P AP T produce el efecto indicado en la matriz A1414 de la
pagina 220?

276

Captulo 3. Sistemas de ecuaciones lineales con matrices dispersas

3.9. Probar que el ancho de banda o de semibanda de las las, i , que produce la numeraci
on directa
de Cuthill-McKee cumple que i 1, para i 2, si la matriz no es reducible.
3.10. Estudiar cu
al debe ser la numeracion idonea del grafo

y analizar su perl, envolvente y los elementos de relleno.


3.11. Obtener un transversal completo de la matriz cuya estructura de elementos distintos de cero es
la siguiente

3.12. Dada una matriz triangular inferior en bloques, determinar unas permutaciones P y Q tales que
P AQ sea triangular superior en bloques.
3.13. Aplicar el algoritmo de Tarjan al digrafo de la gura 3.34 comenzando por el nudo 7.
3.14. Construir una matriz dispersa para la cual la factorizaci
on mediante eliminacion de Gauss no
produce ning
un elemento de relleno y s muchos la factorizacion QR mediante transformaciones
ortogonales de Givens.
3.15. Estudiar la aplicaci
on del metodo de los frentes a la siguiente estructura.

9 11 13 15 17 19 21 23 25 27 29

8 10 12 14 16 18 20 22 24 26 28 30

y determinar el tama
no maximo del frente indicando en que paso(s) se produce.
3.16. Indicar que trabajo y que cantidad de memoria son necesarios para aplicar el metodo de los frentes
si este es uniformemente igual a lo largo de todo el proceso y de tama
no d d.

Ejercicios

3.17. Describir una sucesion de operaciones a realizar en la matriz





A=

277

de tal forma que la resolucion del sistema lineal correspondiente sea optima en cuanto a n
umero
de operaciones a realizar y posiciones de memoria a emplear.

Captulo

DE SISTEMAS DE
SOLUCION
ECUACIONES NO LINEALES

dedicado al estudio de los metodos de solucion de sistemas


STE CAPITULO ESTA
de ecuaciones no lineales. Es decir, a dar respuesta al problema:
dada f : n m ,

hallar un x tal que f (x ) = 0.

La funci
on vectorial f se supone continua y diferenciable en alg
un conjunto abierto de n , con
derivadas parciales continuas en ese abierto.
Los metodos que estudiaremos se basan en procedimientos iterativos en los que en cada una
de sus etapas se resuelve un sistema de ecuaciones lineales, resultante de una aproximacion del
no lineal original en el entorno del punto que dene el comienzo de una nueva etapa. Como
el problema que planteamos est
a ntimamente relacionado con problemas de optimizaci
on, los
metodos que se expondr
an en el captulo son una especializaci
on de otros m
as generales para
minimizar funciones en n .
Estudios de cargas en sistemas el
ectricos de generaci
on y transporte de energa
Los estudios de cargas en un sistema electrico de generacion y transporte de energa se reeren
a la determinaci
on de, a partir de un patr
on denido de demanda y generaci
on de potencia en
cada uno de los nudos que conguran ese sistema, las tensiones en m
odulo y argumento en los
nudos, los ujos de potencia activa y reactiva por todos los elementos del sistema y cualquier
otra magnitud de interes relativa al estado estacionario de ese sistema: intensidad por las
lneas, perdidas en estas, etc. Como tal, un estudio de cargas no consiste en determinar con
que generacion de potencia activa se puede satisfacer una demanda dada, sino hallar el estado
en que ha de funcionar el sistema y que par
ametros lo caracterizan. Como estudio de cargas
o ujo de cargas tambien se designa el programa de ordenador que resuelve este problema.
279

280

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Constituye una de las herramientas de an


alisis de sistemas electricos mas potentes de entre
las que disponen los ingenieros para estudiar aspectos relativos a la explotaci
on, planicaci
on
o mantenimiento del sistema. En cualquier empresa u organismo encargado del control de un
sistema electrico son decenas las veces que se efect
uan autom
atica o manualmente estudios de
cargas en un da normal de trabajo.
Si se supone que los par
ametros fsicos de un sistema electrico permanecen constantes,
existen cuatro variables asociadas a cada nudo i de ese sistema: la tension, en m
odulo, Vi ,
y argumento, i ; la potencia activa inyectada, Pi , y la potencia reactiva inyectada, Qi . Las
potencias inyectadas dependen de la tensi
on en el propio nudo i y en los a el unidos. Las
1
expresiones que las relacionan, si no hay transformadores conectados al nudo i, estan denidas
por
Pi = |Vi

|2

n

j=1
j=i

Qi = |Vi

|2

Gpij + Gsij |Vi |

n


n

j=1
j=i

Bpij + Bsij |Vi |

j=1
j=i

|Vj | Gsij cos(i j ) + Bsij sen(i j )

n


|Vj | Gsij sen(i j ) Bsij cos(i j )

j=1
j=i

donde: Vi es el modulo de la tensi


on en el nudo i;
i el argumento de la tensi
on en el nudo i;
Gsij la conductancia serie (constante) de la lnea que une el nudo i con el nudo j;
Gpij la conductancia a tierra (constante) de la lnea que une el nudo i con el j;
Bsij la susceptancia serie (constante) de la lnea que une el nudo i con el nudo j; y
Bpij la susceptancia a tierra (constante) de la lnea que une el nudo i con el j.
Si el nudo tiene alg
un condensador o reactancia conectado, Bpij deber
a englobar la del
condensador/reactancia y las de tierra de las lneas conectadas a ese nudo.
Como las tensiones se miden con respecto a una determinada referencia, esta se elige en
un nudo cualquiera siempre y cuando sus caractersticas fsicas as lo aconsejen asignando
a la tensi
on en el el valor de referencia 1 para el m
odulo y 0 para el argumento. Al nudo de
referencia se le suele denominar nudo holgura. Al suponer V1 = 1 y 1 = 0, para caracterizar
un sistema electrico de n nudos se necesitaran conocer 2n 2 variables.
En un sistema electrico de generacion y transporte de energa se pueden dar distintos tipos
de nudos. Cu
ales son estos y que variables e incognitas deniran cada uno de ellos se recogen
en la siguiente tabla.
Tipo de nudo
Carga o PQ
Generaci
on o PV
Holgura

Variables dadas
P, Q
P, V
V,

Inc
ognitas
V,
Q,
P, Q

Si de un nudo, por ejemplo, se conoce el m


odulo de la tensi
on y la potencia activa inyectada,
para caracterizarlo totalmente habr
a que calcular la potencia reactiva inyectada en el y el
argumento de su tensi
on.
1

La deducci
on de estas expresiones se puede ver en el apendice C.

4.1 Velocidad o rapidez de convergencia

281

Para caracterizar un sistema general habr


a que resolver un sistema de 2n 2 ecuaciones no
lineales de la forma
f1 (x1 , x2 , . . . , x2n2 ) = b1
f2 (x1 , x2 , . . . , x2n2 ) = b2
(4.1)
..
.
f2n2 (x1 , x2 , . . . , x2n2 ) = b2n2 .
Las potencias activa y reactiva inyectadas en el nudo de referencia se calculan una vez resuelto
el sistema, pues hasta entonces no se saben las perdidas reales en el sistema y por lo tanto el
balance global de potencia generada/demandada.
Consideremos como ejemplo el peque
no sistema electrico de la gura 4.1. Si se elige como
nudo de holgura el 1, el 2 es PV y el 3 PQ. La funci
on vectorial f (x) que denira el sistema
no lineal de ecuaciones con el que determinar el estado de funcionamiento de ese sistema es la
siguiente:

V2




V
(G
+
G
)

V
Vj (G2j cos(2 j ) + B2j sen(2 j ))
p
s
2
2
2j
2j

j=1,3
j=1,3




2
f (x) =
(Gp3j + Gs3j ) V3
Vj (G3j cos(3 j ) + B3j sen(3 j ))
V3
.

j=1,2
j=1,2



V 2

(BC + Bp3j + Bs3j ) V3


Vj (G3j sen(3 j ) B3j cos(3 j ))
3
j=1,2

j=1,2

La susceptancia del condensador conectado al nudo 3 es BC . El termino independiente del


sistema de ecuaciones, el b de (4.1), lo constituir
an los valores de V2 , P2 , P3 y Q3 , datos del
problema.

4.1

Velocidad o rapidez de convergencia

Muchos de los metodos para resolver sistemas de ecuaciones lineales y no lineales, y la mayora
de los relativos a procesos de optimizacion, son iterativos, esto es, generan una sucesion de
puntos para aproximar tanto como se desee o sea posible el valor de la soluci
on. El estudio de
la velocidad o rapidez con que esa sucesion converge a la soluci
on es de gran importancia desde
los puntos de vista te
orico y pr
actico. En los sucesivo supondremos que la sucesion converge a
la soluci
on y que esta se designa x .
Para facilitar la notaci
on, en lo que sigue de captulo designaremos con un subndice el
n
umero de la iteraci
on, de tal forma que xk designar
a el valor de x en la iteraci
on k.
Denici
on 4.1 Sea una sucesion {xk }, xk n , convergente a x . Se dene el orden de
convergencia de {xk } como el maximo de los n
umeros no negativos r que satisface
xk+1 x 
< .
k xk x r

0 lim

282

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Figura 4.1
Sistema electrico de generacion y transporte de 3 nudos, 3 lneas y 2 generadores
Si r = 1, la sucesion se dice que converge linealmente; si r = 2, se dice que lo hace
cuadr
aticamente.
Si la sucesion {xk } tiene una convergencia de orden r, el valor que satisface
xk+1 x 
.
k xk x r

= lim

se denomina tasa de convergencia o relaci


on de convergencia. Cuando r = 1, para que exista
convergencia, debe ser estrictamente menor que 1.
Si = 0 y r = 1, la sucesion {xk } se dice que converge superlinealmente. Observese que un
orden de convergencia mayor que 1 implica convergencia superlineal pues si
xk+1 x 
<
k xk x r

= lim
entonces

xk+1 x 
xk+1 x 
=
lim
xk x r1 = lim xk x r1 = 0.
k xk x 
k xk x r
k
lim

Los conceptos de orden de convergencia y velocidad de convergencia se suelen utilizar indistintamente. En opini
on del autor es m
as exacto orden de convergencia, pues velocidad abarca
algo mas que lo expresado en la denici
on de orden. En cualquier caso, velocidad es un termino
generalmente mas usado.
Para ilustrar los conceptos introducidos, analicemos varios ejemplos sencillos. En primer
lugar, consideremos la sucesion escalar denida por
k

xk = c2 ,

4.1 Velocidad o rapidez de convergencia

283

donde la constante c cumple 0 c < 1. La sucesion converge a cero. Calculemos su orden de


convergencia:
k+1
|xk+1 0|
c2
lim
= lim 2k+1 = 1.
k |xk 0|2
k c
Es decir, converge cuadr
aticamente a 0. La convergencia cuadr
atica quiere decir, grosso modo,
que en las proximidades del lmite o solucion el n
umero de dgitos signicativos que aporta cada
paso del proceso al valor de ese lmite o solucion es el doble que el anterior. En la columna 2
de la tabla 4.1 se pueden ver los distintos puntos de la sucesi
on del primer ejemplo analizado
para c =0,99.
Tabla 4.1
Convergencia de diversas sucesiones escalares
k
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

c2
(c = 0, 99)
0,9900000000000000
0,9801000000000000
0,9605960099999999
0,9227446944279201
0,8514577710948755
0,7249803359578534
0,5255964875255620
0,2762516676992083
0,0763149839065938
0,0058239767686636
0,0000339187054019
0,1150478576143195E-08
0,1323600954164474E-17
0,1751919485865107E-35
0,3069221884953861E-71
0,9420122979079730E-143
0,8873871694098596E-286

1/k k
1,000000000000000
0,250000000000000
0,037037037037037
0,003906250000000
0,000320000000000
0,000021433470507
0,000001214265678
0,000000059604644
0,000000002581174
0,100000000000000E-10
0,350493899481392E-12
0,112156654784615E-13
0,330169095523011E-15
0,899927452978128E-17
0,228365826052116E-18
0,542101086242752E-20
0,120883864830239E-21

c2
(c = 2, 2)
2,200000000000000
1,483239697419133
1,217883285630907
1,103577494166543
1,050512967157732
1,024945348376065
1,012395845692812
1,006178833852518
1,003084659364561
1,001541142122759
1,000770274400054
1,000385063063246
1,000192513000995
1,000096251868287
1,000048124776146
1,000024062098581
1,000012030976918

Consideremos ahora la sucesion que dene


k

xk = c2 ,
donde c 0. Esta sucesion converge a 1. Analicemos su orden de convergencia:
(k+1)

|xk+1 1|
c2
1
= lim
lim
k
k |xk 1|
k c2
1
= lim
k

c2
2(k+1)

(k+1)

1
2(k+1)

 = lim

+1

(k+1)
k c2

1
= .
2
+1

La sucesion presenta una convergencia lineal. En la columna 3 de la tabla 4.1 se representan


sus dieciseis primeros puntos.
Analicemos por u
ltimo la sucesion que dene
xk =

1
.
kk

284

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Converge a cero. Estudiemos su orden de convergencia:


1
|xk+1 |
1
(k + 1)k+1
= 0.
= lim
lim
= lim

1
k |xk |
k
k
1 k+1
k 1+
kk
k
Es decir, converge superlinealmente a cero. En la columna 4 de la tabla 4.1 se pueden ver los
primeros puntos de esta sucesion.

4.2

Problemas de una variable

Comencemos el estudio de los metodos para resolver sistemas de ecuaciones no lineales con el
caso en que solo se tiene una ecuacion y una inc
ognita.

4.2.1

M
etodo de la bisecci
on

Para estudiar este metodo, atribuido a Bernhard Bolzano (1781-1848), recordemos previamente
el teorema del valor intermedio.
Teorema 4.1 Si f :   es una funci
on continua en [a, b] y f (a) x f (b) o
f (b) x f (a), existe un punto c tal que a c b en el cual f (c) = x.
La idea en la que se basa el metodo de la biseccion es muy simple: si la funci
on f :  
es continua en un intervalo [a, b] y f (a)f (b) < 0, existir
a un a < c < b en el que f (c) = 0.
Reduciendo convenientemente el intervalo [a, b] se llegara a acotar el valor de c tanto como se
desee.
El procedimiento parte de [a, b] y, sucesivamente, va dividiendo el intervalo en dos mitades,
qued
andose para la siguiente iteraci
on con aquella en cuyos extremos la funci
on toma valores de
signo contrario. Si al comienzo u = f (a) y v = f (b), tales que uv < 0, se determina c = 12 (a+b)
y se calcula w = f (c). Si f (c) = 0 se ha llegado a la soluci
on buscada; si no, se cumplir
a que
wu < 0 o wv < 0. Si wu < 0, la soluci
on estar
a en [a, c]; si wv < 0, en [c, b]. De acuerdo con el
resultado obtenido se comienza a estudiar el nuevo intervalo, procediendose iterativamente de
la misma forma hasta que se estreche lo que se desea el intervalo que contenga el valor de la
solucion. En la gura 4.2 se representan los dos casos que se pueden presentar en la primera
iteraci
on del metodo.
Si el intervalo con que se empieza el proceso iterativo, [a0 , b0 ], contiene una soluci
on r,
usando como estimacion de esta c0 = (a0 + b0 )/2, se tendr
a que
|r c0 |

b0 a0
.
2

En cualquier iteraci
on, razonando de forma similar,
|r ci |

bi ai
,
2

i = 0, 1, 2, . . .

4.2 Problemas de una variable

285

f (a)

f (a)
f (x)

f (c)
f (x)

f (c)

f (b)

]
b
f (b)

Figura 4.2
Decisiones posibles en la primera iteracion del metodo de la biseccion
Teorema 4.2 Si se aplica el metodo de la bisecci
on a una funci
on f :   continua en
un intervalo [a, b], donde f (a)f (b) < 0, despues de n iteraciones se habr
a obtenido un valor
de la soluci
on cn tal que
ba
|r cn | n+1 ,
2
donde r es el valor real de la soluci
on.
A continuaci
on se lista un c
odigo en Fortran 77 que calcula mediante este metodo la
solucion de x sen(x) 1 = 0 en el intervalo [1, 2].
PROGRAM Bisec
C
C
C

*** Resoluci
on de la ecuaci
on x*sin(x)-1=0 ***
data a/1.0/,b/2.0/

C
fa = fx(a)
fb = fx(b)
if (fa*fb.gt.0) stop El intervalo [a,b] no contiene la soluci
on
C
tol = epsilon(1.0)*10
do while (abs(a-b).gt.tol)
c = (a+b)/2.
fc = fx(c)
if (fc.eq.0) then
a = c
b = c
else if (fb*fc.gt.0) then
b = c
fb = fc
else
a = c
fa = fc
endif
print (2f10.7),a,b

286

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

end do
C
end
real function fx (x)
fx = x*sin(x)-1
return
end

Los valores de los extremos del intervalo [a, b] que se obtienen con este codigo en las distintas
iteraciones son los que describe la tabla 4.2. En la gura 4.3 se representa c
omo procede el
metodo para llegar a la soluci
on.
Tabla 4.2
Convergencia del metodo de la biseccion aplicado a x sen(x) 1 = 0
k
1
2
3
4
5
6
7
8
9
10

4.2.2

a
1,000000
1,000000
1,000000
1,062500
1,093750
1,109375
1,109375
1,113281
1,113281
1,113281

b
1,500000
1,250000
1,125000
1,125000
1,125000
1,125000
1,117188
1,117188
1,115234
1,114258

k
11
12
13
14
15
16
17
18
19
20

a
1,113770
1,114014
1,114136
1,114136
1,114136
1,114151
1,114151
1,114155
1,114157
1,114157

b
1,114258
1,114258
1,114258
1,114197
1,114166
1,114166
1,114159
1,114159
1,114159
1,114158

M
etodo de Newton-Raphson

Consideremos la ecuacion

x3 sen(x) = 0.

Al ser una funci


on senoidal, ser
an varias sus races o puntos para los cuales f (x) = 0. Calcularemos el mas pr
oximo a x = 1.
Escribamos la ecuacion en la forma x = g(x) y procedamos a aplicar un procedimiento
iterativo para resolver el problema bas
andonos en la relaci
on de recurrencia xk+1 = g(xk ). La
primera forma x = g(x) que podemos utilizar es


x=

sen(x).

La relacion de recurrencia ser


a, por tanto,


xk+1 =

sen(xk ).

Si comenzamos el proceso iterativo desde2 x0 = 1, se tendr


a que:


x1 =
2

Radianes.

sen(x0 ) = 0,944; x2 =

sen(0,944) = 0,932; x3 =

sen(0,932) = 0,929;

4.2 Problemas de una variable

287

Mtodo de la Biseccin
1
0.8
0.6
Solucin

0.4
0.2
f(x)

0
x=a

0.2

x=b

0.4
0.6
0.8
1
0

0.5

1.5

2.5

Figura 4.3
Proceso de obtencion de la soluci
on de x sen(x) 1 = 0 con el metodo de la biseccion
y as sucesivamente. La solucio
n converge a x =0,92862.
Si en lugar de utilizar x = 3 sen(x), hubiesemos hecho
x=

sen(x)
,
x2

utilizando, por tanto, la relaci


on de recurrencia
xk+1 =

sen(xk )
,
x2k

partiendo de x0 = 1, se hubiesen obtenido los puntos de la siguiente tabla.


k
0
1
2
3
4
.
..

xk
1,000
0,841
1,053
0,783
1,149
..
.

El proceso diverge.
Analicemos gracamente que ocurre en estos dos procesos iterativos. El que dene la relacion
de recurrencia xk+1 = g(xk ) genera lo que se ha dado en llamar una tela de ara
na entre la recta

288

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

y = x y la curva y = g(x). En la gura 4.4 se pueden ver las dos telas de ara
na que generan
los dos procesos iterativos anteriores.

Figura 4.4
Telas de ara
na de g(x) = (sen(x))1/3 y g(x) = sen(x)/x2
Si se experimenta con diversas relaciones de recurrencia se puede observar que el comportamiento del proceso iterativo que generan est
a ntimamente relacionado con las pendientes de

g en las proximidades de la raz x . Si |g (x )| < 1 y el punto de partida est


a cerca de x , el


proceso converge. Si |g (x)| > 1, diverge.


En el caso de xk+1 = 3 sen(xk ),
(sen(x))2/3
cos(x);
3
en x 0,929, g  (0,929) 0,23. Por el contrario, en el caso de xk+1 = sen(xk )/xk2 ,
g  (x) =

g  (x) =

cos(x)
sen(x)
2
;
2
x
x3

en x 0,929, g  (0,929) 1,23.


Estas consideraciones nos sirven para constatar una necesidad: disponer de una va sistematica y able de construir un modelo x = g(x), caso de utilizar esta forma de resolver el
problema, para, comenzando desde cualquier x0 , hallar la soluci
on de la ecuaci
on f (x) = 0.
Isaac Newton (1642-1727) fue el primero que ide
o esa va y la forma de llevarla a la pr
actica
sencillamente. Expresado en terminos simples e intuitivos, su metodo consiste en reemplazar
la funci
on f (x) en cada punto del proceso iterativo por el modelo de ella que dene la recta
tangente a f (x) en ese punto lo que se ha dado en llamar linealizar la funci
on en un punto.
on f (x) es
En un punto dado, x = x1 , la ecuacion de la recta tangente a una funci
y = f (x1 ) + f  (x1 )(x x1 ).

(4.2)

4.2 Problemas de una variable

289

En x = x1 , y = f (x1 ) por lo que la ordenada de (4.2) en x1 es la misma que la de f . La


pendiente de f en x1 es la misma que la de y: f  (x1 ).
El siguiente punto del proceso iterativo que dene el metodo de Newton lo determina la
solucion de y(x) = 0, es decir, d
onde esa recta tangente corta al eje x:
0 = f (x1 ) + f  (x1 )(x x1 ).

(4.3)

La soluci
on de (4.3) es mucho mas f
acil de calcular que directamente la de f (x). En concreto,
esa solucion es
f (x1 )
.
x = x1 
f (x1 )
En la gura 4.5 se describe gr
acamente este paso del proceso iterativo de Newton.
La relacion general de recurrencia que dene el metodo de Newton tambien denominado
Newton-Raphson para encontrar una soluci
on de la ecuaci
on f (x) = 0 es, por consiguiente,
xk+1 = xk

f (xk )
.
f  (xk )

(4.4)

Si aplicamos el metodo de Newton al problema anterior,


x3 sen(x) = 0,
la relaci
on de recurrencia es
xk+1 = xk

x3k sen(xk )
.
3xk2 cos(xk )

En los terminos en que nos expresabamos al comienzo de este apartado (recordemos la relacion
x = g(x)), el metodo de Newton hace
gN (x) = x

x2

x3 sen(x)
.
3x2 cos(x)

x1
f (x)

Figura 4.5
Aproximaci
on lineal de f (x) en x = x1

290

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

A continuaci
on se lista un peque
no codigo en Fortran 77 que implementa el metodo de
Newton para resolver x3 sen(x) = 0 partiendo de x0 = 1,4.
PROGRAM Newt
tol = epsilon(1.0)
x0 = 0
x = 1.4
do while (abs(x-x0).gt.tol)
x0 = x
x = x0-(x0**3-sin(x0))/(3*x0*x0-cos(x0))
print (f10.7),x
! Salida de resultados
end do
end

Los puntos que se obtienen con el c


odigo son los de la tabla que sigue.
k
1
2
3
4
5

xk
1,0920240
0,9589750
0,9299978
0,9286293
0,9286263

La representacion gr
aca del proceso que lleva a la soluci
on se describe en la gura 4.6.
Tradicionalmente, el metodo de Newton-Raphson se explica partiendo del modelo lineal de
la funci
on f (x) que resulta de su aproximaci
on alrededor de un punto xk mediante el desarrollo
Mtodo de Newton

2.5

f(x)

1.5

Solucin
0.5

32
0.5

0.6

0.7

0.8

0.9

1
1
x

1.1

0
1.2

1.3

1.4

1.5

Figura 4.6
Obtenci
on de la soluci
on de x3 sen(x) = 0 con el metodo de Newton

4.2 Problemas de una variable

291

en serie de Taylor,3
f (x) = f (xk ) + f  (xk )(x xk ) + f  (xk )
+

f r (xk

(x xk )2
+
2!

(x xk )r
+ (x xk ))
,
r!

(4.5)

0 1,

siempre y cuando f C r , truncando ese desarrollo a partir de los terminos de segundo orden.
Es decir, construir un modelo de la forma
Mk (x) = f (xk ) + f  (xk )(x xk ),

(4.6)

y utilizarlo en una iteraci


on k en lugar de la propia funci
on f (x).
Otros enfoques preeren basar su desarrollo en el teorema de Newton:


f (x) = f (xk ) +

f  (z) dz,

xk

y aproximar la integral de la forma




x
xk

f  (xk )(x xk ),
f  (z) dz =

obteniendose la misma aproximacion de f (x) de (4.6).

4.2.3

Convergencia del m
etodo de Newton para una variable

En lo que sigue se usar


a el concepto de continuidad de Lipschitz que se dene en el apendice A,
p
agina 693.
Lema 4.1 Sea la funci
on f : D  con dominio de denici
on en un intervalo abierto D
cumpliendose que f  Lip (D). Para todo x, y D,
|y x|2
.
|f (y) f (x) f (x)(y x)|
2


n. De calculo, f (y) f (x) =


Demostracio

y

f  (z) dz, o, de forma equivalente,

f (y) f (x) f (x)(y x) =

z = x + t(y x),
Ver el teorema de Taylor en el apendice A.

f  (z) f  (x) dz.

Haciendo el cambio de variable

(4.7)

dz = dt(y x),

(4.8)

292

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

la expresi
on (4.8) queda,


f (y) f (x) f (x)(y x) =

1
0

f  (x + t(y x)) f  (x) (y x) dt.

Por la regla del tri


angulo aplicada a la integral y la continuidad Lipschitz de f  se tiene que


|f (y) f (x) f (x)(y x)| |y x|

1
0

|t(y x)| dt = |y x|2 /2.

Observese que la expresion (4.7) se asemeja al error de la aproximaci


on de f por desarrollo
en serie de Taylor, (4.5), truncando ese desarrollo en r = 2, con la constante en lugar de
f  (), D. La ventaja de usar la continuidad Lipschitz es que no se necesita tener en cuenta
los terminos que involucran las derivadas segundas. Como veremos posteriormente, esto es
particularmente u
til en m
as de dos dimensiones.
Hechas estas consideraciones, probemos a continuacion la convergencia del metodo de
Newton-Raphson para ecuaciones no lineales en una variable.
Teorema 4.3 Sea la funci
on f : D  con dominio de denici
on en un intervalo abierto
D cumpliendose que f  Lip (D). Sup
ongase que para alg
un > 0, |f  (x)| para todo
x D. Si f (x) = 0 tiene soluci
on, x , existe alg
un > 0 tal que si |x0 x | < la sucesi
on
{xk } que genera la relaci
on de recurrencia
xk+1 = xk

f (xk )
;
f  (xk )

k = 0, 1, 2, . . .

as,
converge a x . Adem
|xk+1 x |

|xk x |2 ;
2

k = 0, 1, 2, . . .

(4.9)

n. Sea (0, 1) y el radio del intervalo m


Demostracio
as grande alrededor de x contenido
en D; hagamos = min{
, (2/)}. Para k = 0,
x1 x = x0 x
=

f (x0 )
f (x0 ) f (x )

=
x

0
f  (x0 )
f  (x0 )


1 

f
(x
)

f
(x
)

f
(x
)(x

x
)
.
0
0
0
f  (x0 )

El termino entre corchetes es f (x ) M0 (x ),4 el error en x del valor de Mk (x) en x = x .


De acuerdo con el lema anterior,
|x1 x |
4

Recordemos la expresi
on (4.6).

2|f  (x0 )|

|x0 x |2 .

4.2 Problemas de una variable

293

De los supuestos atribuidos a f  (x),


|x1 x |

|x0 x |2 .
2

Como |x0 x | (2/), entonces |x1 x | |x0 x | < . Procediendo de igual


forma, por inducci
on para k > 0, quedara probado el teorema.
La condici
on expuesta en el teorema de que f  (x) este acotada inferiormente en D, signica


que f (x ) debe ser distinta de cero para que el metodo de Newton converja cuadr
aticamente
a ese valor x . Si f  (x ) = 0, entonces x es una raz m
ultiple y el metodo solo convergera
linealmente. Para apreciar la diferencia, si aplicamos el metodo de Newton para resolver f1 (x) =
x2 1 = 0 y f2 (x) = x2 2x + 1 = 0, partiendo de x0 = 2, los primeros puntos que resultan
son los de la tabla que sigue.
f1 (x) = x2 1 = 0
2
1,25
1,025
1,0003048780488
1,0000000464611
1,0

f2 (x) = x2 2x + 1 = 0
x0
x1
x2
x3
x4
x5

2
1,5
1,25
1,125
1,0625
1,03125

Es tambien interesante analizar la constante /2 de la expresi


on (4.9). El numerador ,

la constante Lipschitz de f en D, se puede considerar como el par
ametro que mide de alguna
manera el grado de no linealidad de la funci
on f . Ahora bien, es una magnitud que depende de
la escala adoptada; multiplicando f o cambiando las unidades de x por una constante, f  se vera
multiplicada por una constante sin ver afectada su no linealidad. Una magnitud independiente
de esa escala sera el ndice relativo de variaci
on de f  (x) y podra obtenerse dividiendo por

f (x). De esta manera, como es un lmite inferior de los valores que puede tomar f (x), para
x D, / es un lmite superior de la no linealidad relativa de f (x). El teorema 4.3 dice, en
este sentido, que cuanto mas peque
na sea esa cantidad, mas rapido converger
a el metodo de
Newton. Si f es lineal, = 0 y x1 = x .
El teorema 4.3 garantiza la convergencia del metodo de Newton solo si se inicia el proceso
desde un punto x0 aceptable. Es f
acilmente comprobable que el metodo puede no funcionar

si |x0 x | es grande. Por ejemplo, considerese el problema clasico de hallar la soluci


on de
arctan(x) = 0. Partiendo de cualquier punto del intervalo [1,39, 1,40], el metodo cicla obteniendose x1 = x0 , x2 = x0 , x3 = x0 , . . . Si x0 < 1,39, el procedimiento converge; si
x0 > 1,40, diverge. En la gura 4.7 se representan estas circunstancias.
Se puede concluir pues que el metodo de Newton es u
til para resolver ecuaciones no lineales de una variable siempre y cuando se tengan en cuenta ciertas precauciones y se escoja
adecuadamente el punto de partida.

4.2.4

Variantes del m
etodo de Newton

Una de las primeras variantes del metodo de Newton para calcular la raz de una ecuaci
on
que se puede sugerir es aquella que resulta de incorporar alg
un mecanismo que impida que
ocurran los problemas mencionados en el apartado anterior. A tal efecto conviene recordar que
la resoluci
on de la ecuaci
on de Newton (4.4) en cada paso del proceso iterativo del metodo no

294

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

f (x) = arctan(x)

x0

x0

Figura 4.7
Metodo de Newton aplicado a f (x) = arctan(x)
on, f  (xk ), a lo largo de
solo dene el nuevo punto del proceso iterativo, xk+1 , sino una direcci
la cual se da un paso (determinado por xk+1 xk ). A pesar de que es probable que ese paso
sea el adecuado y la funci
on f (x) en el nuevo punto adquiera un valor menor que el que tena
en xk , puede ocurrir lo contrario, como veamos anteriormente, y el proceso diverja, siendo
en cualquier caso buena la direcci
on calculada, pues a lo largo de ella la funci
on decrece en
ciertos puntos. Una idea muy intuitiva que se suele aplicar es la siguiente: si la direcci
on que
determina la soluci
on de la ecuaci
on de Newton promete un descenso del valor de la funci
on
a lo largo de ella, incorporemos un mecanismo de salvaguarda que permita, a lo largo de esa
direccion, moviendose un paso adecuado, disminuir siempre el valor de la funci
on; si el paso
completo xk+1 xk produce un aumento, disminuirlo hasta que |f (xk+1 )| < |f (xk )|. Ese posible
mecanismo lo plasma el algoritmo que sigue.

xk+1 = xk

f (xk )
f  (xk )

while (|f (xk+1 )| |f (xk )|) do


xk+1 + xk
xk+1
2
end

(4.10)

En la gura 4.8 se ilustra un caso en el que ocurre lo que acabamos de indicar y c


omo el
mecanismo apuntado salva las dicultades que surgiran de aplicar el procedimiento de Newton
sin el. El punto xk+1 , que sera el que determinara el paso de Newton, no valdra. Tampoco
(xk+1 + xk )/2. S, por n,
xk+1

xk + (xk+1 + xk )/2
=
.
2

Esta forma de proceder, como veremos mas adelante, es particularmente u


til en problemas de
mas de una variable.

4.2 Problemas de una variable

295

xk+1
(xk+1 + xk )/2

xk
xk+1

Figura 4.8
Metodo de Newton con mecanismo de salvaguarda
4.2.4.1

M
etodo de Newton por diferencias nitas

Hasta ahora hemos supuesto que se conoce la expresion de la derivada de la funci


on f (x), y
por tanto, es f
acilmente evaluable en un determinado punto. Ahora bien, en muchas aplicaciones pr
acticas esto no es as, bien porque su determinaci
on analtica es muy complicada la
funci
on f (x) surge de un procedimiento experimental, por ejemplo, o, sencillamente, porque
el usuario del metodo no desea obtenerla.
Previendo estas eventualidades, es conveniente modicar el metodo de tal forma que se
soslaye esta dicultad. La primera modicaci
on que se puede emplear surge de la aplicaci
on
inmediata de la denici
on de derivada de una funci
on f (x) en un punto: esto es,
f (xk + h) f (xk )
.
h0
h

f  (xk ) = lim

En lugar de tener que saber la derivada de la funci


on, se calcula su valor en un punto mediante
la f
ormula anterior utilizando un par
ametro h adecuado. A la variante del metodo que surge
de esta idea se la conoce como metodo de Newton por diferencias nitas.
Dos preguntas surgen al plantearse aplicar esta idea: funciona?, c
omo se escoge el parametro h? La respuesta a la primera esta relacionada con la de la segunda: el metodo de Newton
por diferencias nitas, escogido h adecuadamente, insistimos, debe funcionar tan bien como el
propio metodo de Newton.
La eleccion de h es crtica para el buen funcionamiento del procedimiento. Si se hace
ak = (f (xk + h) f (xk ))/h,
la relaci
on de recurrencia del metodo de Newton queda
xk+1 = xk

f (xk )
.
ak

296

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

De aqu que,
xk+1 x = xk x

f (xk )
ak

= a1
k [f (x ) f (xk ) ak (x xk )]

= a1
k [f (x ) Mk (x )]

= a1
f (x ) f (xk ) f  (xk )(x xk ) + f  (xk ) ak (x xk )
k
=

a1
k

"

xk

f (z) f (xk ) dz + f (xk ) ak (x xk ) .

Si denimos ek = |xk x | y ek+1 = |xk+1 x |, teniendo en cuenta el mismo supuesto de


continuidad Lipschitz de f  que hacamos en el lema 4.1, se tiene que
ek+1 |a1
k |

2
e + |f  (xk ) ak |ek .
2 k

(4.11)

Esta u
ltima expresi
on (que relaciona los errores entre dos iteraciones) es muy similar a la que se

1
obtena en el teorema 4.3: |a1
ermino que expresa
k | reemplaza a |f (xk ) | y se incorpora un t

la diferencia entre f (xk ) y su aproximaci
on por ak .
Corolario 4.1 Sea la funci
on f : D  con dominio de denici
on en un intervalo abierto

D siendo f Lip (D). Si xk , xk+1 + h D, y ak = (f (xk + h) f (xk ))/h, entonces
|ak f  (xk )|

|h|
.
2

(4.12)

n. De acuerdo con el lema 4.1,


Demostracio
|f (xk + h) f (xk ) hf  (xk )|

|h|2
.
2

Dividiendo ambos miembros por |h| se obtiene el resultado enunciado.


Sustituyendo (4.12) en (4.11) se tiene que
ek+1

(ek + |h|)ek .
2|ak |

En el supuesto de que |f  (x)| > 0 en un entorno de x, es facilmente comprobable


que, para un |h| sucientemente peque
no y para un xk D, se tiene que |ak |1 21 . En
denitiva,

ek+1 (ek + |h|)ek .

Con estos resultados queda pr


acticamente probado el siguiente teorema.

4.2 Problemas de una variable

297

Teorema 4.4 Sea la funci


on f : D  con dominio de denici
on en un intervalo abierto
D siendo f  Lip (D). Sup
ongase que, para todo x D, |f  (x)| para alg
un > 0. Si


f (x) = 0 tiene soluci
on x D, existen unas constantes positivas y tales que si {hk }
es una sucesi
on de n
umeros reales tales que 0 < |hk |  y si |x0 x | < , la sucesi
on
{xk } que dene
xk+1 = xk

f (xk )
,
ak

con ak =

f (xk + hk ) f (xk )
,
hk

k = 0, 1, . . . ,

converge linealmente a x . Si limk hk = 0, la convergencia es superlineal. Si existe alguna


constante c1 tal que
|hk | c1 |xk x |,
o, de forma equivalente, una constante c2 tal que
|hk | c2 |f (xk )|,
la convergencia es cuadr
atica. Si existe alguna constante c3 tal que
|hk | c3 |xk xk1 |,
la convergencia es al menos cuadr
atica cada dos pasos.
Desde un punto de vista pr
actico, la convergencia del metodo de Newton por diferencias
nitas es muy buena. Si se tienen en cuenta las consideraciones del apendice B correspondientes
a errores de redondeo y aritmetica en un ordenador, el par
ametro h se debe escoger no muy
peque
no de tal manera que no ocurra que f l(xk + h) = f l(xk ), o que, aun siendo f l(xk + h) =
f l(xk ), dado que f es continua y su derivada tambien, al evaluar la funci
on en dos puntos
muy pr
oximos, que f l(f (xk + h)) = f l(f (xk )). Si |h| es peque
no, bastantes de los dgitos mas
signicativos de f (xk + h) y de f (xk ) seran iguales. Supongamos por ejemplo que estuviesemos
trabajando en una m
aquina5 con = 10 y t = 5. Si f (xk ) =1,0001 y f (xk + h) =1,0010, con
h =0,0001, f (xk + h) f (xk ) sera igual a 9 104 , por lo que ak sera 9: se habran perdido
casi todos los dgitos signicativos al calcular la diferencia de f (xk + h) y f (xk ).
La forma m
as obvia de calcular ak lo mas precisamente posible consiste en escoger un |h|
lo sucientemente grande como para que los dgitos mas signicativos de f (xk + h) y de f (xk )
no sean iguales. Ahora bien, existe un lmite en la magnitud atribuible a ese |h| dado que el
objetivo de usar ak es utilizarla en lugar de f  (xk ); ese lmite es el denido en la expresi
on
(4.12). Un compromiso consiste en intentar ponderar el error introducido en la aproximaci
on
de la no linealidad de la funci
on eligiendo un |h| grande y el resultante de la evaluaci
on de las
funciones al elegir un |h| muy peque
no.
Una regla sencilla que se suele usar habitualmente en casi todos los codigos comerciales que
implementan estas tecnicas consiste en elegir

|h| = max{tip x, |xk |},


donde tip x indica la magnitud tpica de x y es la precision de la m
aquina en la que se utiliza
5

Recordemos: base de numeraci


on 10; n
umero de dgitos signicativos, 5.

298

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

el correspondiente codigo (ver apendice B). Para un problema bien escalado bastara hacer
|h| =

Cuando existen problemas de precisi


on, tambien es posible recurrir a la aproximaci
on de
f  (xk ) dada por
f (xk + h) f (xk h)
.
ak =
2h
En este caso conviene tener en cuenta que el n
umero de veces que se eval
ua la funci
on se
duplica con respecto al anterior.
Ejemplo 4.1 Calculemos la solucion de f (x) = x2 1, partiendo de x = 2, mediante los
metodos de Newton y Newton por diferencias nitas.
Los codigos en Fortran 77 para calcularlos son los que siguen.
PROGRAM Newtondf

PROGRAM Newton

C
double precision fx,derfx,eps,
+
x1/2./,x0/0./
parameter (eps=epsilon(1.d0))

double precision fx,derfx,eps,h,


x1/2./,x0/0./
parameter (eps=epsilon(1.d0))

h = dsqrt(eps)
do while (dabs(fx(x1)).gt.eps)
x0 = x1
x1 = x0-fx(x0)/derfx(x0,h)
print *,x1
end do

do while (dabs(fx(x1)).gt.eps)
x0 = x1
x1 = x0-fx(x0)/derfx(x0)
print *,x1
end do
C

end

end

double precision function fx(x)


double precision x
fx = x**2-1.
return
end

double precision function fx(x)


double precision x
fx = x**2-1.
return
end

double precision function derfx(x)


double precision x
derfx = 2.0*x
return
end

double precision function derfx(x,h)


double precision fx,x,h
derfx = (fx(x+h)-fx(x))/h
return
end

Los resultados obtenidos con uno y otro c


odigo son los de las siguiente tabla.
Newton
1,250000000000000
1,025000000000000
1,000304878048780
1,000000046461147
1,000000000000001
1,000000000000000

Newton Dif. Fin.


x0
x1
x2
x3
x4
x5

1,250000000000000
1,025000001341104
1,000304878259699
1,000000046463482
1,000000000000001
1,000000000000000

Como se puede observar, son pr


acticamente los mismos.

4.2 Problemas de una variable

299

Conviene resaltar que, aunque en la pr


actica el metodo de Newton y el de Newton por
diferencias nitas pueden funcionar casi igual, si se dispone de la expresi
on de la derivada,
es mejor utilizar el metodo tradicional pues de la otra forma el n
umero de evaluaciones de
la funci
on se duplica, pudiendo ello hacer que el tiempo de convergencia sea sustancialmente
peor.
4.2.4.2

M
etodo de Newton modicado

Este metodo utiliza como direcci


on de b
usqueda no aquella que determina f  (xk ) en cada
iteracion k, sino siempre la misma: f  (x0 ). La gura 4.9 ilustra la mec
anica de esta variante.

x3 x2 x1

x0

f (x)

Figura 4.9
Metodo de Newton modicado
Como se puede intuir, si la pendiente de f en x0 diere de una forma apreciable de la de f
en la soluci
on, la convergencia puede ser muy lenta o no existir. Para evitar esta dicultad, la
derivada de la funci
on se puede reevaluar con una periodicidad ja de iteraciones.
Si se utiliza el metodo de Newton modicado para resolver x3 sen(x) = 0, partiendo de
x0 = 1, los puntos del proceso que se obtienen son los de la tabla 4.3.
La convergencia en este caso es razonablemente rapida, aunque un poco peor que la del

metodo de Newton. Este


llegaba a una soluci
on con 6 dgitos signicativos en 6 iteraciones, el
modicado lo hace en 7.
El c
odigo en Fortran 77 que se ha utilizado para obtener la soluci
on es el que se lista a
continuaci
on. Observese que, a diferencia de la implementaci
on del metodo de Newton, aqu
se ha utilizado precisi
on doble.
PROGRAM Newtonmod
C
implicit double precision (a-h,o-z)
parameter (eps=epsilon(1.d0))
C
C
C

*** Resoluci
on de la ecuaci
on x**3-sen(x)=0 ***
x1 = 1.
dx = 3.0*x1*x1-dcos(x1)
x2 = x1-fx(x1)/dx

300

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Tabla 4.3
Convergencia del metodo de Newton modicado aplicado a x3 sen(x) = 0
k

xk

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

1,0000000000000000
0,9355493906546692
0,9298914189436776
0,9288667910316998
0,9286723408941727
0,9286351316207878
0,9286280002218482
0,9286266330332931
0,9286263709091434
0,9286263206528520
0,9286263110173409
0,9286263091699481
0,9286263088157520
0,9286263087478429
0,9286263087348229
0,9286263087323265
0,9286263087318479
0,9286263087317562
0,9286263087317386
0,9286263087317352

do while (dabs(fx(x2)).gt.eps)
print *,x1
x1 = x2
x2 = x1-fx(x1)/dx
end do

! Salida de resultados

C
end
double precision function fx(x)
double precision x
fx = x**3-dsin(x)
return
end

4.2.5

M
etodo de la secante

Este nuevo metodo se basa en utilizar como direccion de b


usqueda, en vez de la tangente que
dene el metodo de Newton, la que determina una recta secante a la funci
on en dos puntos
sucesivos del proceso iterativo. Es decir, si en una iteraci
on k del proceso la ecuacion de Newton
es
f (xk )
xk+1 = xk 
,
f (xk )
la idea es emplear, en vez de f  (xk ),
f (xk ) f (xk1 )
.
xk xk1

4.2 Problemas de una variable

301

La relacion de recurrencia del proceso iterativo queda


xk+1 = xk

xk xk1
f (xk ).
f (xk ) f (xk1 )

La gura 4.10 ilustra esta aproximaci


on. Las consideraciones hechas anteriormente en el caso
del metodo por diferencias nitas son v
alidas para esta aproximaci
on puesto que este metodo
es un caso particular de aquel.

xk+1

xk

xk1

f (x)

Figura 4.10
Metodo de la secante
El metodo de la secante converge superlinealmente siendo el orden (1 +
denominada raz
on
aurea.

5)/1 = 1, 618: la

Ejemplo 4.2 Resolvamos x3 sen(x) = 0 mediante el metodo de la secante.


El c
odigo en Fortran 77 que implementa la resoluci
on para este caso del metodo de la
secante es el que sigue.
PROGRAM Newtonsecante
C
implicit double precision (a-h,o-z)
parameter (eps=epsilon(1.d0))
C
C
C

*** Resoluci
on de la ecuaci
on x**3-sen(x)=0 ***
x0 = 1.1
x1 = 1.0
x2 = x1-fx(x1)/secfx(x0,x1)

C
do while (dabs(fx(x2)).gt.eps)
x0 = x1
x1 = x2
x2 = x1-fx(x1)/secfx(x0,x1)
print *,x2
end do
C
end

! Salida de resultados

302

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

double precision function fx (x)


double precision x
fx = x**3-dsin(x)
return
end
double precision function secfx (x0,x1)
double precision x0, x1, fx
secfx = (fx(x1)-fx(x0))/(x1-x0)
return
end

El proceso de convergencia partiendo de x0 = 1,1 y x1 = 1,0 es el que describe la siguiente


tabla.

4.2.6

xk

1
2
3
4
5

0,9301746079136645
0,9286627955397819
0,9286263990904702
0,9286263087370180
0,9286263087317345

M
etodo de la falsa posici
on

Este metodo, conocido como Regula Falsi, al igual que el de la secante, en vez de la tangente
que dene el metodo de Newton, utiliza como direcci
on de b
usqueda una recta secante a la
funci
on en dos puntos sucesivos del proceso iterativo. Lo que le diferencia del de la secante es
que esa direccion de b
usqueda, siguiendo una estrategia similar a la del metodo de la biseccion,
la deben determinar los dos u
ltimos puntos del proceso iterativo en los que la funci
on toma
valores de signo opuesto.
La gura 4.11 describe esta forma de abordar el problema. La convergencia de este metodo
es tambien superlineal de orden 1,618: la raz
on aurea.
En determinadas circunstancias desfavorables, tanto el metodo de la secante como el de la
falsa posici
on pueden presentar problemas de convergencia. En la gura 4.12 se representa un
caso de convergencia lenta.

4.2.7

M
etodo de M
uller

Este metodo, presentado por primera vez por D.E. M


uller en 1956, es una generalizaci
on del
metodo de la secante. Utiliza una interpolaci
on cuadr
atica de tres puntos del proceso iterativo
que busca la soluci
on para, a partir de las races de esa interpolacion, denir un nuevo punto
del proceso.
La gura 4.13 describe el proceso que sigue el metodo de M
uller en una iteraci
on generica.
Si se consideran los puntos x0 , x1 y x2 , el procedimiento aproxima a estos puntos el polinomio
cuadr
atico
p(x) = a(x x2 )2 + b(x x2 ) + c

4.2 Problemas de una variable

x3

x2

f (x)

x4
x

x1

Figura 4.11
Metodo Regula Falsi

x2
f (x)

x
x1 x3

Figura 4.12
Ejemplo donde los metodos de la secante y regula falsi convergen muy lentamente

303

304

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

f (x)

p(x)

x1

x0

x2

x3

Figura 4.13
Primera aproximaci
on parab
olica del metodo de Muller
que pasa por (x0 , f (x0 )), (x1 , f (x1 )) y (x2 , f (x2 )). Los par
ametros a, b y c de ese polinomio se
determinan a partir de las siguientes condiciones:
f (x0 ) = a(x0 x2 )2 + b(x0 x2 ) + c,
f (x1 ) = a(x1 x2 )2 + b(x1 x2 ) + c
y
f (x2 ) = c.
Resolviendo el sistema de 2 ecuaciones con 2 incognitas


(x0 x2 )2 (x0 x2 )
(x1 x2 )2 (x1 x2 )

a
f (x0 ) f (x2 )
=
b
f (x1 ) f (x2 )

se obtiene la expresion de los par


ametros a y b. Es


1
a
=
b
(x0 x2 )(x1 x2 )(x0 x1 )

(x1 x2 ) (x0 x2 )
(x1 x2 )2 (x0 x2 )2

f (x0 ) f (x2 )
.
f (x1 ) f (x2 )

Para determinar el nuevo punto del proceso iterativo, x3 , se aplica la f


ormula cuadr
atica
z=

2c

,
b b2 4ac

(4.13)

con el n de calcular las races de p(x), escogiendose para garantizar la estabilidad numerica
del metodo, de las dos posibles, aquella que tiene un menor valor absoluto. Para ello, si b > 0
se usa el signo positivo en la expresi
on (4.13); si b < 0, el negativo. El nuevo punto x3 sera
entonces
x3 = x2 + z.

4.2 Problemas de una variable

305

Una vez obtenido este punto, el procedimiento se reinicia utilizando como nuevos tres puntos
x3 y, de entre x0 , x1 y x2 , los dos mas pr
oximos a el.
Evidentemente, cuando sea necesario, el metodo deber
a aproximar races complejas.
A continuaci
on se lista un c
odigo en Fortran 77 que describe el metodo de M
uller para
resolver x3 sen(x) = 0. La versi
on programada s
olo calcula races reales.
PROGRAM Muller
C
C
C

*** Resoluci
on de la ecuaci
on x**3-sen(x)=0 ***
implicit double precision (a-h,o-z)
double precision x0/1.5/,x1/1.2/,x2/1.0/

C
fx0 = fx(x0)
fx1 = fx(x1)
fx2 = fx(x2)
C
eps = epsilon(1.0d0)
do while (dabs(fx2).gt.eps)
c
= fx2
d0 = x0-x2
d1 = x1-x2
det = d0*d1*(x0-x1)
b
= (d0*d0*(fx1-fx2)-d1*d1*(fx0-fx2))/det
a
= (d1*(fx0-fx2)-d0*(fx1-fx2))/det
di = 0.
if (b*b-4*a*c.gt.0) di = dsqrt(b*b-4*a*c)
z
= (-2)*c/(b+dsign(1.0,b)*di)
x3 = x2+z
if (dabs(x3-x1).lt.dabs(x3-x0)) then ! Escoger como nuevos
u
= x1
!
x0, x1 y x2 los
x1 = x0
!
m
as pr
oximos a
x0 = u
!
x3.
u
= fx1
fx1 = fx0
fx0 = u
endif
if (dabs(x3-x2).lt.dabs(x3-x1)) then
u
= x2
x1 = u
u
= fx2
fx1 = u
endif
x2 = x3
fx2 = fx(x2)
print *,x2,fx2
end do
C
end
double precision function fx (x)
double precision x
fx = x**3-dsin(x)
return
end

El proceso de convergencia de la resoluci


on del problema partiendo de x0 = 1,5, x1 = 1,2 y
x2 = 1,0 es el que describe la siguiente tabla. Observese que el n
umero de iteraciones, para la

306

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

precision que se obtiene, decrece apreciablemente comparandolo con el de otros metodos.

4.3

xk

f (xk )

1
2
3
4
5

0,9218014997385994
0,9286993319308728
0,9286263283651378
0,9286263087317398
0,9286263087317345

-1,342038198649549E-002
1,451948415762639E-004
3,903328569669932E-008
1,066665202345551E-014
7,199102425303749E-017

Sistemas de ecuaciones no lineales. M


etodo de NewtonRaphson

El metodo de Newton-Raphson para sistemas de ecuaciones no lineales es una generalizacion


del analizado para el caso de una variable. Estudiaremos funciones vectoriales f : n m
cuando n = m.
Recurriendo a la forma tradicional de introducirlo, si se supone que f C 1 y en un punto
xk de un proceso iterativo tendente a resolver f (x) = 0 se aproxima la funci
on mediante el
modelo, Mk (xk ), que dene el desarrollo en serie de Taylor alrededor de ese punto, trunc
andolo
a partir de los terminos de segundo orden, se tiene que
Mk (xk ) = f (xk ) + J(xk )(x xk ),
donde J(xk ) es la matriz Jacobiana del sistema en xk :

J(xk ) =

f1 (x)
f1 (x)

x1
xn
..
..
...
.
.
fn (x)
fn (x)

x1
xn

x= xk

Si se utiliza esa aproximaci


on lineal de la funci
on y se resuelve el sistema de ecuaciones lineales
que dene
f (xk ) + J(xk )(x xk ) = 0,
su soluci
on

x = xk J(xk )1 f (xk )

determinar
a un nuevo punto del proceso iterativo.
La relacion de recurrencia del metodo de Newton-Raphson para sistemas de ecuaciones no
lineales es pues
xk+1 = xk J(xk )1 f (xk ).

(4.14)

El paso de Newton es xk+1 xk : una aproximaci


on de x xk .
Volviendo a considerar las ideas que se expusieron al analizar el caso de una sola variable,
en el metodo de Newton-Raphson para sistemas de ecuaciones no lineales cada ecuacion, fi :
n , se reemplaza o aproxima por el hiperplano tangente en xk a la curva que dene esa

4.3 Sistemas de ecuaciones no lineales. Metodo de Newton-Raphson

307

fi . La soluci
on del sistema de ecuaciones lineales de la expresion (4.14) determina el punto de
interseccion de todos los hiperplanos resultantes.
El algoritmo de Newton-Raphson para resolver sistemas de ecuaciones no lineales es el
que describe la tabla 4.4. El paso 1 de este algoritmo comporta la resoluci
on de un sistema de
ecuaciones lineales nn. Ni que decir tiene que todas las consideraciones que hacamos al hablar
de los metodos para resolver sistemas lineales de ecuaciones referentes a estabilidad numerica,
condicionamiento, etc, tienen, si cabe, una mayor trascendencia aqu puesto que de su buen
tratamiento o toma en consideraci
on depende que el procedimiento funcione adecuadamente.
Tabla 4.4
Algoritmo de Newton-Raphson para sistemas de ecuaciones no lineales
Paso 0 Denir un x0 n ; hacer k = 1 y xk x0 .
Paso 1 Determinar la solucion de J(xk )(xk+1 xk ) = f (xk ).
Paso 2 Si f (xk+1 )2 < T ol, parar: el problema esta resuelto.
Si no, hacer k = k + 1, xk = xk+1 e ir al paso 1.

Ejemplo 4.3 Resolvamos, utilizando el metodo de Newton y partiendo del punto [1, 1, 1]T ,
el sistema de ecuaciones no lineales
3x1

x21

cos(x2 x3 )

1
81 x2 +
10

ex1 x2

+ sen(x3 ) +
+

20x3

1
2

= 0

1,06

= 0

10 3
= 0.
3

A continuaci
on se lista un c
odigo en Fortran 77 que implementa el metodo de Newton
que acabamos de presentar, particularizado para este problema. La soluci
on de los sistemas de
ecuaciones lineales de cada iteracion se realiza mediante la eliminaci
on de Gauss de acuerdo
con el algoritmo propuesto en la p
agina 832.
PROGRAM Newtrp
C
parameter (n=3)
double precision f(n),j(n,n),x(n),x1(n),s(n),tol,dnor,dnr
C
tol = dsqrt(epsilon(1.0d0))
x
= 1.0
call fx (f,x,n)
dnr = dnor(f,n)
C
C *** Proceso iterativo ***
C
do while (dnr.ge.tol)
call derfx (j,x,n)
call gauss (j,f,s,n)

308

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

x1 = x-s
call fx (f,x1,n)
dnr = dnor(f,n)
print *,x1,dnr
x = x1
end do

! Salida de resultados

C
end
subroutine fx (f,x,n)
double precision f(n),x(n)
C
f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20*x(3)+(10*dacos(-1.0d0)-3)/3
C
return
end
subroutine derfx (j,x,n)
double precision j(n,n),x(n)
C
j(1,1)
j(1,2)
j(1,3)
j(2,1)
j(2,2)
j(2,3)
j(3,1)
j(3,2)
j(3,3)

=
=
=
=
=
=
=
=
=

3.0
dsin(x(2)*x(3))*x(3)
dsin(x(2)*x(3))*x(2)
2.0*x(1)
-162.0*(x(2)+0.1)
dcos(x(3))
-dexp((-x(1)*x(2)))*x(2)
-dexp((-x(1)*x(2)))*x(1)
20.0

C
return
end
c
double precision function dnor (x,n)
double precision x(n)
C
dnor = 0.d0
do i = 1,n
dnor = dnor+x(i)**2
end do
C
dnor = dsqrt(dnor)
return
end
subroutine gauss(a,b,x,n)
C
C
C

*** Resoluci
on del sistema lineal mediante eliminaci
on de Gauss
integer ipvt(10),pi
double precision a(n,n),b(n),x(n),smax,r,r1,c

C
do i = 1,n
ipvt(i) = i
end do
C
C

*** Triangularizaci
on ***

4.3 Sistemas de ecuaciones no lineales. Metodo de Newton-Raphson

C
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k)).gt.smax) then
l
= i
smax = dabs(a(ip,k))
endif
end do
if (l.ne.0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip = ipvt(i)
r = a(ip,k)*r1
do j = k+1,n
a(ip,j) = a(ip,j)-r*a(pi,j)
end do
a(ip,k) = -r
end do
end do
C
do k = 1,n-1
ip = ipvt(k)
do i = k+1,n
pi
= ipvt(i)
b(pi) = b(pi)+a(pi,k)*b(ip)
end do
end do
C
C
C

*** Sustituci
on inversa ***
x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi = ipvt(i)
c = b(pi)
do j = i+1,n
c = c-a(pi,j)*x(j)
end do
x(i) = c/a(pi,i)
end do

C
return
end

El proceso de convergencia es el que se describe en la tabla 4.5.

309

310

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Tabla 4.5
Proceso de convergencia del problema del ejemplo 4.3 mediante el metodo de
Newton-Raphson
k
1
2
3
4
5
6
7

4.3.1

x1
0,919687213390398
0,501000485375849
0,500542935515392
0,500104436279313
0,500005510372763
0,500000016655606
0,500000000000152

x2
0,46082245461787
0,18743347575308
6,11534507694258E-2
1,16171016280123E-2
6,05610802953016E-4
1,82133920264085E-6
-5,01225376366101E-9

x3
-0,503387635514082
-0,520869233062834
-0,522000964266343
-0,523295146222630
-0,523582936446523
-0,523598727952539
-0,523598775723585

f (xk )2
24,087256
5,878800
1,291680
1,987617E-01
9,821480E-03
2,952947E-05
2,701800E-10

Convergencia del m
etodo de Newton para sistemas de ecuaciones no
lineales

La forma de probar la convergencia del metodo para sistemas de ecuaciones es muy similar a
la empleada para hacerlo en el caso de una sola variable.

Lema 4.2 Sea la funci


on f : n n , continua y diferenciable en un conjunto convexo
n
abierto D  . Para todo x y x + p D,
f (x + p) f (x) =


0

J(x + tp)p dt

 x+ p

f  (z) dz.

Lema 4.3 Sea la funci


on f : n n , continua y diferenciable en un conjunto convexo
abierto D n , x D y J Lip (S(x, r)), usando una norma vectorial y una norma
matricial inducida y la constante . Entonces, para todo x + p D,
f (x + p) f (x) J(x)p

p2 .
2

n. De acuerdo con el lema anterior,


Demostracio
f (x + p) f (x) J(x)p =

1
0

=
0

J(x + tp)p dt J(x)p


(J(x + tp) J(x)) p dt.

4.3 Sistemas de ecuaciones no lineales. Metodo de Newton-Raphson

311

Usando la denici
on de norma matricial inducida y la continuidad Lipschitz de J en S(x, r),
se tiene que
f (x + p) f (x) J(x)p

1
0

1
0

J(x + tp) J(x) p dt


tp p dt


p2

t dt
0

p2 .
2

Teorema 4.5 Sea la funci


on f : n n , continua y diferenciable en un conjunto convexo
n
ongase que existe un x n y r, > 0 tales que la bola abierta
abierto D  . Sup

S(x , r) D, que f (x ) = 0 y que J(x )1 existe con J(x )1  y J Lip (S(x , r)).
Existe entonces un > 0 tal que para todo x0 S(x , r), la sucesi
on x1 , x2 , . . . generada
por
xk+1 = xk J(xk )1 f (xk ),
k = 0, 1, . . .
andose que
converge a x veric
xk+1 x  xk x 2 ,

k = 0, 1, . . .

(4.15)

n. Escojamos un de tal manera que la matriz J sea regular para todo x


Demostracio

S(x , r) y probemos entonces que, dado que el error que produce el modelo lineal
Mk (xk ) = f (xk ) + J(xk )(x xk )
es O(xk x 2 ), la convergencia es cuadr
atica.
Sea

= min r,

1
.
2
Esbocemos la prueba, por inducci
on en k, de que se cumple (4.15) y, tambien, que
xk+1 x 
por lo que

(4.16)

1
xk x 
2

xk+1 S(x , ).

Primero comprobemos que J(x0 ) es regular. De x0 x  , la continuidad Lipschitz de


J en x y (4.16), se tiene que
J(x )1 (J(x0 ) J(x ))  J(x )1  J(x0 ) J(x )
x0 x 

1
.
2

312

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

De aqu y de la continuidad de la norma de matrices se deduce que J(x0 ) es regular, pudiendo


deducirse que la norma de su inversa cumple que
J(x )1 
1 J(x )1 (J(x0 ) J(x )) 
2J(x )1 

J(x0 )1 

(4.17)

2.
Es decir, x1 esta denido, cumpliendose que
x1 x = x0 x J(x0 )1 f (x0 )
= x0 x J(x0 )1 (f (x0 ) f (x ))
= J(x0 )1 [f (x ) f (x0 ) J(x0 )(x x0 )] .
Observese que el termino entre corchetes es la diferencia entre f (x ) y el modelo M0 (x ). En
consecuencia, de acuerdo con el lema 4.3 y la ecuacion (4.17), se tiene que
x1 x  J(x0 )1  f (x ) f (x0 ) J(x0 )(x x0 )

2 x0 x 2
2
= x0 x 2 .
Lo que prueba (4.15). Como x0 x  1/2, entonces x1 x  1/2x0 x , lo que
prueba que x1 S(x , ), complet
andose el caso de k = 0. Para probar los dem
as pasos de la
inducci
on se procede de forma identica.
Las constantes y se pueden combinar en una sola rel = , siendo esta entonces una
constante de Lipschitz que mide la no linealidad relativa de f en x , pues
J(x )1 (J(x) J(x ))  J(x )1 J(x) J(x )
x x 
= rel x x ,
para x S(x , r). El u
ltimo teorema viene a decir que el orden de convergencia del metodo
de Newton es inversamente proporcional a la no linealidad relativa de f en x .

4.3.2

Modicaciones del m
etodo de Newton para sistemas de ecuaciones no
lineales

Existen diversas variantes del metodo de Newton; dieren unas de otras en la forma de resolver
el sistema de ecuaciones lineales inherente al mismo. El objetivo de todas ellas es reducir
al maximo la duraci
on de esa fase del algoritmo simplicando la factorizaci
on de la matriz
Jacobiana o el proceso de eliminaci
on de Gauss correspondiente.

4.3 Sistemas de ecuaciones no lineales. Metodo de Newton-Raphson

4.3.2.1

313

El m
etodo de Newton-Raphson por diferencias nitas para sistemas de
ecuaciones no lineales

Es esta una variante del metodo de Newton para cuando no se conoce, o no se desea calcular, la

expresion analtica de la matriz Jacobiana del sistema. Esta


se reemplaza por su aproximaci
on
en diferencias nitas, siguiendo el mismo principio que veamos en el apartado 4.2.4.1.
Teorema 4.6 Sea la funci
on f : n n , continua y diferenciable en un conjunto convexo
n
abierto D  . Sup
ongase que existe un x n tal que f (x ) = 0 y unos > 0 y h > 0
tales que si {hk } es una sucesi
on de n
umeros reales 0 < |hk | h y x0 S(x , ), la sucesi
on
generada por
f (xk + hk ej ) f (xk )
(ak )j =
,
j = 1, . . . , n,
hk
xk+1 = xk A1
k f (xk ),

k = 0, 1, . . . ,

converge linealmente a x . Si
lim hk = 0,

k0

la convergencia es superlineal. Si existe una constante c1 tal que


|hk | c1 xk x ,
o, equivalentemente, una constante c2 tal que
|hk | c2 f (xk ),
entonces la convergencia es cuadr
atica.
n. Se efect
Demostracio
ua de una forma muy similar a como se hizo la del teorema 4.5
combin
andola con la del teorema 4.4.
Para escoger el par
ametro h se pueden seguir las directrices dictadas en el apartado 4.2.4.1.
Una forma razonable de hacerlo, cuando f (x) se puede calcular con t dgitos correctos, consiste
en tomar un h tal que f (x + hej ) diera de f (x) en la mitad menos signicativa de esos t
dgitos. M
as concretamente, si el error relativo del calculo de f (x) es , habra que conseguir
que
f (x + hej ) f (x)
,
j = 1, . . . , n.
f (x)
La forma m
as adecuada de conseguir este objetivo sera modicar cada componente xj del
vector x por separado, de acuerdo con la f
ormula

hj = xj ,
y luego calcular cada columna aj de la matriz Jacobiana aproximada mediante la expresi
on
aj =

f (x + hj ej ) f (x)
.
hj

314

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Cuando el problema est


a bien escalado, el par
ametro h puede elegirse igual a para todos
los xj . Es importante tener siempre en cuenta que si el valor de los componentes del vector
x dieren mucho unos de otros, si se elige un mismo h para todos, el resultado puede ser un
desastre.
Ejemplo 4.4 Partiendo desde el punto [1, 1, 1]T , resolvamos mediante el metodo de NewtonRaphson por diferencias nitas el problema del ejemplo 4.3.
La version en Fortran 77 de un programa para implementar el procedimiento particulariz
andolo para este ejemplo es la que sigue.
PROGRAM Newtrpdf
C
parameter (n = 3)
integer ipvt(n)
double precision f(n),j(n,n),x(n),f1(n),s(n)
double precision tol,dnor,dnr,h
C
tol = dsqrt(epsilon(1.0d0))
h
= tol
x
= 1.0
call fx (f,x,n)
dnr = dnor(f,n)
C
C *** Proceso iterativo ***
C
do while (dnr.gt.tol)
call derfxdf (j,x,n,f,f1,h)
call gauss (j,f,s,ipvt,n)
x = x-s
call fx (f,x,n)
dnr = dnor(f,n)
print *,x,dnr
end do
C
end

! Salida de resultados

subroutine fx (f,x,n)
double precision f(n),x(n)
C
f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81.0*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20.0*x(3)+(10.0*dacos(-1.0D0)-3.0)/3.0
C
return
end
subroutine derfxdf (j,x,n,f,f1,h)
double precision j(n,n),x(n),f(n),f1(n),h
C
do i = 1,n
x(i) = x(i)+h
call fx (f1,x,n)
do k = 1,n
j(k,i) = (f1(k)-f(k))/h
end do
x(i) = x(i)-h
end do
C

4.3 Sistemas de ecuaciones no lineales. Metodo de Newton-Raphson

return
end
double precision function dnor (x,n)
double precision x(n)
C
dnor = 0.d0
do i = 1,n
dnor = dnor+x(i)*x(i)
end do
C
dnor = dsqrt(dnor)
return
end
subroutine gauss (a,b,x,ipvt,n)
C
C
C

*** Resoluci
on del sistema lineal mediante eliminaci
on de Gauss ***
integer ipvt(n),pi,i,k,l,ip,iaux
double precision a(n,n),b(n),x(n),smax,r,r1,c

C
do i = 1,n
ipvt(i) = i
end do
C
C
C

*** Triangularizaci
on ***
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k)).gt.smax) then
l
= i
smax = dabs(a(ip,k))
endif
end do
if (l.ne.0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip = ipvt(i)
r = a(ip,k)*r1
do j = k+1,n
a(ip,j) = a(ip,j)-r*a(pi,j)
end do
a(ip,k) = -r
end do
end do

C
do k = 1,n-1
ip = ipvt(k)
do i = k+1,n
pi
= ipvt(i)

315

316

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

b(pi) = b(pi)+a(pi,k)*b(ip)
end do
end do
C
C
C

*** Sustituci
on inversa ***
x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi = ipvt(i)
c = b(pi)
do j = i+1,n
c = c-a(pi,j)*x(j)
end do
x(i) = c/a(pi,i)
end do

C
return
end

El proceso de convergencia que resulta de la ejecuci


on de este codigo es el que describe la
tabla 4.6.
Tabla 4.6
Proceso de convergencia del problema del ejemplo 4.3 mediante el metodo de
Newton-Raphson por diferencias nitas
k
1
2
3
4
5
6
7

x1
9,196872128331276E-1
5,010004854055197E-1
5,005429355625435E-1
5,001044363153647E-1
5,000055103830903E-1
5,000000166560779E-1
5,000000000001537E-1

4.3.2.2

x2
4,608224593269510E-1
1,874334808918119E-1
6,115345636598238E-2
1,161710564942230E-2
6,056119366203792E-4
1,821390815254557E-6
-5,012116500463980E-9

x3
-5,033876338748984E-1
-5,208692328288063E-1
-5,220009641201370E-1
-5,232951461173050E-1
-5,235829364168181E-1
-5,235987279511862E-1
-5,235987757235823E-1

f (xk )2
24,087257011001890
5,878800956736615
1,291680877269570
1,987617768874427E-1
9,821499305243949E-3
2,953031350981317E-5
2,723994307877944E-10

Newton modicado

Esta variante resulta de considerar la misma matriz Jacobiana, J(x0 ), durante todo el proceso
iterativo o, al menos, durante un n
umero jo de iteraciones. Se la conoce, como en el caso de
una variable, como metodo de Newton modicado.
4.3.2.3

Jacobi

Esta otra variante surge de aproximar la matriz Jacobiana s


olo por los elementos de su diagonal
principal.
El esquema iterativo lo dene la relaci
on de recurrencia
xk+1 = xk Dk1 f (xk ),

(4.18)

4.3 Sistemas de ecuaciones no lineales. Metodo de Newton-Raphson

317

k = J k . A esta forma de aproximar el procedimiento de Newton se la conoce como


donde dii
ii
esquema Jacobi, debido a la semejanza de (4.18) con la relaci
on de recurrencia del metodo de
Jacobi para la resoluci
on iterativa de sistemas de ecuaciones lineales.
Si los elementos que no estan en la diagonal principal de la matriz J son peque
nos comparados con los de la diagonal principal esta estrategia puede resultar muy buena.
El siguiente c
odigo en Fortran 77 resuelve el problema del ejemplo 4.3 con esta variante
del metodo de Newton-Raphson.

PROGRAM Newjac
C
parameter (n=3)
double precision f(n),j(n),x(n),x1(n),tol,dnor,dnr
C
tol = dsqrt(epsilon(1.0d0))
x
= 1.0
call fx (f,x,n)
dnr = dnor(f,n)
C
do while (dnr.gt.tol)
call derfx (j,x,n)
x1 = x-f/j
call fx (f,x1,n)
dnr = dnor(f,n)
print *,x1,dnr
x = x1
end do
C
end
subroutine fx (f,x,n)
double precision f(n),x(n)
C
f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81.0*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20.0*x(3)+(10.0*dacos(-1.0D0)-3.0)/3.0
C
return
end
subroutine derfx (j,x,n)
double precision j(n),x(n)
C
j(1) = 3.0
j(2) = -162.0*(x(2)+0.1)
j(3) = 20.0
C
return
end
c
double precision function dnor (x,n)
double precision x(n)
C
dnor = 0.D0
do i = 1,n
dnor = dnor+x(i)**2
end do
C
dnor = dsqrt(dnor)

318

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

return
end

El proceso de convergencia que resulta de la ejecuci


on de este codigo es el que describe la
tabla 4.7.
Tabla 4.7
Proceso de convergencia del problema del ejemplo 4.3 mediante el metodo de Newton,
variante Jacobi

4.3.2.4

x1

x2

x3

f ( xk )2

1
2
3
4
5
6
7
8
9
10

3,4676743528937E-1
4,9126710684223E-1
4,9838400645741E-1
4,9982415676754E-1
4,9999331854835E-1
4,9999997637742E-1
4,9999999998487E-1
4,9999999999995E-1
5,0000000000000E-1
5,0000000000000E-1

4,6628210320363E-1
1,9085722828697E-1
6,2572952480534E-2
1,2127977333769E-2
7,1943457186973E-4
1,8194817561808E-5
9,5631482748073E-7
1,9297729277228E-8
-3,7441679487420E-9
-4,9964526465087E-9

-4,9199274765687E-1
-5,1613395807175E-1
-5,1912375290199E-1
-5,2206357004560E-1
-5,2329659959512E-1
-5,2358079320878E-1
-5,2359832072995E-1
-5,2359875169043E-1
-5,2359877511585E-1
-5,2359877569190E-1

25,275175
6,044943
1,329867
2,086958E-1
1,277583E-2
4,482211E-4
1,745616E-5
5,990302E-7
2,333013E-8
8,005792E-10

Gauss-Seidel

Esta variante aproxima la matriz Jacobiana mediante la que resulta de tener en cuenta s
olo
los elementos de su parte triangular inferior (incluidos los elementos de la diagonal principal).
El esquema iterativo queda denido por la relaci
on de recurrencia
xk+1 = xk L1
k f (xk ),

(4.19)

k = J k , i j. A esta variante se la conoce como esquema Gauss-Seidel. Como


donde Lij
ij
se puede observar, para resolver la ecuaci
on (4.19) s
olo es necesario realizar una sustituci
on
directa; muchas menos operaciones, por tanto, que las propias de la factorizaci
on y posterior
sustituci
on inversa del metodo de Newton tradicional.

4.3.2.5

Relajaci
on SOR

El esquema iterativo en forma matricial que se utiliza en este caso es


xk+1 = xk (Dk + Lk )1 f (xk ).
El par
ametro de relajaci
on es = 1/( + 1). La convergencia de este esquema iterativo y la
del de Gauss-Seidel dependen de diversos factores. A aquel lector interesado en su estudio le
aconsejamos consultar las referencias citadas al nal del captulo; en particular las de Hager
[1988] y Ortega y Rheinboldt [1970].
A continuaci
on se lista la implementacion en Fortran 77 del metodo de relajaci
on para
resolver el ejemplo anterior. El par
ametro se puede variar a voluntad.

4.3 Sistemas de ecuaciones no lineales. Metodo de Newton-Raphson

PROGRAM Newsor
C
parameter (n=3)
double precision f(n),j(n,n),x(n),x1(n),s(n),tol,dnor,dnr,omega,ro
C
tol = dsqrt(epsilon(1.0d0))
x
= 1.0
print (A\), Valor de OMEGA --->
read (bn,f9.0),omega
ro = (1-omega)/omega
call fx (f,x,n)
dnr = dnor(f,n)
C
do while (dnr.gt.tol)
call derfx (j,x,n,ro)
call sustdi (j,f,s,n)
x1 = x-s
call fx (f,x1,n)
dnr = dnor(f,n)
print *,x1,dnr
x = x1
end do
C
end
subroutine fx (f,x,n)
double precision f(n),x(n)
C
f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81.0*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20.0*x(3)+(10.0*dacos(-1.0D0)-3.0)/3.0
C
return
end
subroutine derfx (j,x,n,ro)
double precision j(n,n),x(n),ro
C
j(1,1)
j(2,1)
j(2,2)
j(3,1)
j(3,2)
j(3,3)

=
=
=
=
=
=

3.0*(1.0+ro)
2.0*x(1)
-162.0*(x(2)+0.1)*(1.0+ro)
-dexp((-x(1)*x(2)))*x(2)
-dexp((-x(1)*x(2)))*x(1)
20.0*(1.0+ro)

C
return
end
double precision function dnor (x,n)
double precision x(n)
C
dnor = 0.D0
do i = 1,n
dnor = dnor+x(i)**2
end do
C
dnor = dsqrt(dnor)
return
end

319

320

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

subroutine sustdi (a,b,x,n)


double precision a(n,n),b(n),x(n),c
C
C
C

*** Sustituci
on directa ***
x(1) = b(1)/a(1,1)
do i = 2,n
c = b(i)
do j = 1,i-1
c = c-a(i,j)*x(j)
end do
x(i) = c/a(i,i)
end do

C
return
end

El proceso de convergencia que resulta de la ejecuci


on de este codigo con = 1,001 es el que
describe la tabla 4.8.
Tabla 4.8
Proceso de convergencia del problema del ejemplo 4.3 mediante el metodo de Newton,
variante SOR
k
1
2
3
4
5
6
7

x1
3,461142027246693E-1
4,908811949155542E-1
4,984378248196516E-1
4,998315939999299E-1
4,999940202065573E-1
4,999999891681415E-1
5,000000000106393E-1

4.4

x2
4,584022609276468E-1
1,876309366498080E-1
6,115261671271569E-2
1,160081481603464E-2
6,062869047825676E-4
2,052083782429779E-6
-5,018110351151697E-9

x3
-5,154964208593540E-1
-5,174321885631722E-1
-5,219702905590197E-1
-5,232927679798938E-1
-5,235830701687643E-1
-5,235987374862628E-1
-5,235987757619615E-1

f (xk )2
24,573867038246120
5,895091340346604
1,293741548952080
1,987384037123210E-1
9,844104464408518E-3
3,330434571219442E-5
7,900883617860966E-10

M
etodos cuasi Newton

El objetivo de los metodos que se agrupan bajo esta denominaci


on consiste en aproximar la
matriz Jacobiana de cada iteraci
on mediante f
ormulas de recurrencia que la relacionen con el
valor que toma en iteraciones precedentes. Se pueden interpretar, en cierta medida, como la
extension de la idea del metodo de la secante a n dimensiones.
Para explicarlos de forma simple, supongamos que f (x) = 0 es un sistema de ecuaciones
lineales como, por ejemplo, Ax b = 0. Si se restan los valores de f (x) en dos puntos sucesivos
del proceso iterativo, k 1 y k, se tiene que
f (xk ) f (xk1 ) = A(xk xk1 ).
En el caso no lineal esta igualdad no se cumple aunque puede hacerse, eligiendo Ak adecuadamente, que
Ak (xk xk1 ) f (xk ) f (xk1 ).6
(4.20)
6

Recordemos la aproximaci
on en el de una variable de f  (xk ) por

f (xk )f (xk1 )
.
xk xk1

4.4 Metodos cuasi Newton

321

Cuando la dimensi
on del sistema, n, es mayor que 1, la matriz Ak no esta determinada:
la expresi
on (4.20), en el caso de hacerse igualdad, es un sistema de n ecuaciones con n2
inc
ognitas.
Los metodos cuasi Newton construyen una sucesi
on {Ak } de tal forma que Ak aproxime lo
mejor posible la matriz Jacobiana J(xk ).

4.4.1

M
etodo de Broyden

Broyden [1965] utiliz


o una idea muy simple para obtener una aproximaci
on satisfactoria de
J(xk ): escogerla de tal forma que se minimice el valor de la funci
on que se obtendra en
un mismo punto mediante las dos aproximaciones Ak y Ak1 y que se cumpla a la vez que
Ak (xk xk1 ) = f (xk ) f (xk1 ).
Con la aproximaci
on mencionada, partiendo de xk y xk1 , la diferencia de los valores de la
funci
on en un punto x n que habra que minimizar sera
f (xk ) + Ak (x xk ) f (xk1 ) Ak1 (x xk1 ).
Desarroll
andola queda
f (xk ) f (xk1 ) Ak (xk xk1 ) + (Ak Ak1 )(x xk1 ).
Sustituyendo (4.20) en esta u
ltima expresi
on, la diferencia a minimizar resulta
(Ak Ak1 )(x xk1 ).

(4.21)

Si para todo x n , la diferencia x xk1 la expresamos como


x xk1 = sk1 + t,
donde sk1 designa la diferencia xk xk1 y se cumple que tT sk1 = 0, la expresi
on a minimizar
(4.21) queda
(Ak Ak1 )sk1 + (Ak Ak1 )t.
Sobre el primer termino de esta expresion no se puede actuar puesto que, seg
un (4.20), (Ak
Ak1 )sk1 = y k1 Ak1 sk1 , donde y k1 = f (xk ) f (xk1 ). El segundo termino se puede
hacer cero para todo x n escogiendo Ak de tal manera que (Ak Ak1 )t = 0, para todo t
ortogonal a sk1 . Esto requiere que la matriz Ak Ak1 sea de rango uno, es decir, de la forma
usTk1 , con u n . Ahora bien, para que se cumpla que Ak (xk xk1 ) = f (xk ) f (xk1 ),
lo que equivale como acabamos de ver a que (Ak Ak1 )sk1 = y k1 Ak1 sk1 , el vector u
debe ser igual a (y k1 Ak1 sk1 )/sTk1 sk1 . La matriz
(y k1 Ak1 sk1 )sTk1
Ak = Ak1 +
sTk1 sk1

(4.22)

es, por consiguiente, la que cumple ese prop


osito de minimizar la diferencia indicada, vericandose ademas que Ak sk1 = y k1 .
La f
ormula de Broyden, (4.22), es la que propuso este autor para aproximar la matriz
Jacobiana en cada iteraci
on del metodo de Newton.

322

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

En el lema siguiente se demuestra que la f


ormula de Broyden es la que introduce un menor
cambio en Ak1 , en un sentido que veremos inmediatamente, siendo consistente con que Ak sk1
=
y
. Antes sin embargo, recordemos la norma de Frobenius de una matriz A: AF =

k1
2
en, que se cumple que
1i, jn aij . Tambi

y que

AB AB

(4.23)

ABF min {A2 BF , AF B2 }

(4.24)





vw T 







= vwT  = v2 w2 .

(4.25)

Tambien introducimos la notaci


on Q(y, s) para designar:
Q(y, s) = {B nn : Bs = y}.
Lema 4.4 Sean la matriz A nn y los vectores s, y n , s = 0. Para cualesquiera
normas matriciales   y |||||| tales que
AB A |||B|||
y

(4.26)

$$$
$$$
$$$ T $$$
$$$ vv $$$
$$$ = 1,
$$$
$$$ v T v $$$

la soluci
on del problema

(4.27)

minimizar B A
BQ(y ,s)

(4.28)

es

(y As)sT
.
(4.29)
A+ = A +
sT s
En particular, (4.29) es la soluci
on de (4.28) cuando   es la norma espectral, siendo la
soluci
on u
nica cuando la norma   es la de Frobenius.
n. Sea B Q(y, s); se tiene entonces que
Demostracio


 
 (y As)sT   (B A)ssT

 
A+ A = 
=

 
sT s
sT s
$$$
$$$
$$$ T $$$
$$$ ss $$$
= B A $$$ T $$$ B A.
$$$ s s $$$







Si   y |||||| son ambas la norma espectral, las expresiones (4.26) y (4.27) se deducen inmediatamente de (4.23) y (4.25). Si   y |||||| son, respectivamente, las normas de Frobenius y la
espectral, las expresiones (4.26) y (4.27) se deducen de (4.24) y (4.25). Para probar que (4.29)
es la u
nica soluci
on de (4.28), recordemos que la norma de Frobenius es estrictamente convexa
puesto que es la norma eucldea de una matriz escrita como un vector de dimensi
on n2 . Como
nn
Q(y, s) es un subconjunto convexo de 
(es una variedad lineal), la soluci
on de (4.28) es
u
nica.

4.4 Metodos cuasi Newton

323

El usar en este lema la norma de Frobenius parece razonable ya que esa norma mide el
cambio en cada componente de la aproximaci
on de la matriz Jacobiana. La norma espectral
sera menos precisa.
El algoritmo para resolver un sistema no lineal de ecuaciones, f : n n , mediante el
metodo cuasi Newton que se deriva de utilizar la f
ormula de Broyden, partiendo de un punto
x0 , es el que describe la tabla 4.9.
Tabla 4.9
Algoritmo cuasi Newton con la f
ormula de Broyden para la soluci
on de sistemas de
ecuaciones no lineales
Paso 0 Denir un x0 n y una A0 nn ; hacer k = 1 y xk x0 .
Paso 1 Determinar la solucion de Ak sk = f (xk ).
Paso 2 Si |f (xk )2 < T ol, parar: el problema esta resuelto.
Si > T ol, hacer: xk+1 xk + sk
y k f (xk+1 ) f (xk )
(y Ak sk )sTk
Ak+1 Ak + k T
s k sk
k k+1
y volver al paso 1.

Para determinar la A0 que se cita en el algoritmo se puede emplear cualquier aproximaci


on,
por ejemplo, diferencias nitas.
Ejemplo 4.5 Resolvamos una vez mas, partiendo del punto [1, 1, 1]T , esta vez utilizando el
metodo de Newton con la f
ormula de Broyden, el siguiente sistema de ecuaciones no lineales:
3x1

x21
ex1 x2

cos(x2 x3 )

1
81 x2 +
10

+ sen(x3 ) +
+

20x3

1
2

= 0

1,06

= 0

10 3
= 0.
3

El c
odigo en Fortran 77 que implementa el metodo cuasi Newton basado en la f
ormula
de Broyden es el que sigue a continuaci
on. Como matriz inicial A0 se utiliza la que tiene como
u
nicos elementos distintos de cero los de la diagonal de la Jacobiana en el punto de partida.
PROGRAM Broyden
C
parameter (n=3)
integer ip(n)
double precision f(n),j(n,n),ja(n,n),x(n),x1(n),f1(n),y(n),s(n),
+
tol,dnor,dnr
C

324

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

tol
= dsqrt(epsilon(1.0d0))
x
= 1.d0
j(1,1) = 3.d0
j(2,2) = -178.2d0
j(3,3) = 20.d0
call fx (f,x,n)
dnr = dnor(f,n)
C
C *** Proceso iterativo ***
C
do while (dnr.gt.tol)
f1 = f
ja = j
call gauss (ja,f,s,ip,n)
x1 = x-s
call fx (f,x1,n)
dnr = dnor(f,n)
print *,x1,dnr
y = f-f1
call broyd (j,y,s,n)
x = x1
end do
C
end

! Salida de resultados

subroutine fx (f,x,n)
double precision f(n),x(n)
C
f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81.0*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20.0*x(3)+(10.0*dacos(-1.0d0)-3.0)/3.0
C
return
end
double precision function dnor (x,n)
double precision x(n)
C
dnor = 0.d0
do i = 1,n
dnor = dnor+x(i)**2
end do
C
dnor = dsqrt(dnor)
return
end
subroutine broyd (a,y,s,n)
integer i,j,n
double precision a(n,n),y(n),s(n),sum,prod
C
prod = 0.d0
do i = 1,n
prod = prod+s(i)**2
end do
C
do i = 1,n
sum = 0.d0
do j = 1,n

4.4 Metodos cuasi Newton

sum = sum+a(i,j)*s(j)
end do
y(i) = (y(i)+sum)/prod
end do
C
do i = 1,n
do j = 1,n
a(i,j) = a(i,j)-y(i)*s(j)
end do
end do
C
return
end
subroutine gauss (a,b,x,ipvt,n)
C
C
C
C

*** Resoluci
on del sistema lineal de ecuaciones mediante eliminaci
on
de Gauss
integer ipvt(n),ip,pi,l,i,j,k,n,iaux
double precision a(n,n),b(n),x(n),smax,r,r1,c

C
do i = 1,n
ipvt(i) = i
end do
C
C
C

*** Triangularizaci
on ***
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k)).gt.smax) then
l
= i
smax = dabs(a(ip,k))
endif
end do
if (l.ne.0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip = ipvt(i)
r = a(ip,k)*r1
do j = k+1,n
a(ip,j) = a(ip,j)-r*a(pi,j)
end do
b(ip) = b(ip)-r*b(pi)
end do
end do

C
C
C

*** Sustituci
on inversa ***
x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1

325

326

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

pi = ipvt(i)
c = b(pi)
do j = i+1,n
c = c-a(pi,j)*x(j)
end do
x(i) = c/a(pi,i)
end do
C
return
end

El proceso de convergencia hasta la soluci


on que se registra con este codigo es el de la tabla 4.10.
Comparense estos resultados con los obtenidos en el ejemplo 4.3, pagina 307.
Tabla 4.10
Proceso de convergencia a la solucion del problema del ejemplo 4.5 con el metodo cuasi
Newton basado en la f
ormula de Broyden
k
1
2
3
4
5
6
7
8
9
10
11

x1
3,467674352893799E-1
4,921232306763561E-1
4,993486752210201E-1
5,011649166344201E-1
5,003080441638231E-1
5,001066711564305E-1
5,000183047478762E-1
5,000009846717887E-1
5,000000108711760E-1
5,000000000415024E-1
4,999999999986228E-1

4.4.1.1

x2
4,662821024806326E-01
3,236527849976335E-01
2,131483731754155E-01
9,690341763001632E-02
4,279330810076126E-02
1,172102964534057E-02
2,032314047074978E-03
1,115674463108231E-04
1,033227841870006E-06
6,118437770431628E-10
-5,059011531347285E-09

x3
-4,919927476568708E-1
-5,162769886149683E-1
-5,166714279059975E-1
-5,210585843043458E-1
-5,224749127576461E-1
-5,232913081815899E-1
-5,235457794542374E-1
-5,235958520108367E-1
-5,235987485509558E-1
-5,235987755897009E-1
-5,235987757245316E-1

f (xk )2
25,275175252053120
13,729480399369230
7,127754268893964
2,327087146316625
8,403043972608411E-01
2,006362866054586E-01
3,319399780484372E-02
1,804970096278442E-03
1,678549255880026E-05
9,122344458875651E-08
4,849895176081806E-10

Convergencia del m
etodo de Broyden

Para estudiar la convergencia del metodo se utiliza una estrategia muy similar a la utilizada
para estudiar la del metodo de Newton para sistemas de ecuaciones no lineales.
Si f (x ) = 0, de la ecuacion de una iteraci
on,
xk+1 = xk Ak1 f (xk ),
se tiene que
o, tambien, que

xk+1 x = xk x A1
k [f (xk ) f (x )],

Ak (xk+1 x ) = Ak (xk x ) f (xk ) + f (x ).

Si se dene el vector ek = xk x y se suma y resta el vector J(x )ek al segundo miembro de


la ecuacion anterior, se tiene que
Ak ek+1 = f (xk ) + f (x ) + J(x )ek + (Ak J(x ))ek .
De acuerdo con las hip
otesis que venimos adoptando,
 f (xk ) + f (x ) + J(x )ek  = Oek 2 ,

4.4 Metodos cuasi Newton

327

por lo que la clave del an


alisis de la convergencia del metodo de Broyden estar
a en el termino
(Ak J(x ))ek .
Enunciaremos un teorema que prueba la convergencia, al menos lineal, de la sucesi
on {ek } a

cero, viendo como la sucesion {Ak J(x )} permanece acotada por una constante. Tambien
enunciaremos otro teorema mediante el que se prueba, aun cuando puede que no sea cierto que
lim Ak J(x ) = 0,

la convergencia superlineal de la sucesi


on viendo que
(Ak J(x ))ek 
= 0.
k
ek 
lim

Estos resultados garantizar


an que el paso que se obtiene aplicando el metodo de Broyden, esto
es, A1
f
(x
),
converge
al
paso de Newton, J(xk )1 f (xk ), en magnitud y direcci
on.
k
k
Comencemos preguntandonos cuan adecuadamente la f
ormula de Broyden aproxima la matriz Jacobiana J(x ). Si f (x) es una variedad lineal7 , con matriz Jacobiana igual a J, esa
matriz satisfar
a la ecuaci
on secante,
Ak (xk xk1 ) = f (xk ) f (xk1 ),
oximo en Q(y k , sk ) a Ak1 , en el
es decir, J Q(y k , sk ). Como Ak es el elemento mas pr
sentido de la norma de Frobenius, del teorema de Pit
agoras se tiene que
Ak J2F + Ak Ak1 2F = Ak1 JF2 ,
es decir, que Ak JF Ak1 JF (ver gura 4.14). De aqu que la f
ormula de Broyden
Ak1

Q(y k1 , sk1 )
Ak
J

Figura 4.14
Metodo de Broyden en una variedad lineal
no puede hacer que la norma de Frobenius del error en la aproximaci
on de la matriz jacobiana
empeore. Este hecho, desafortunadamente, puede no ser necesariamente cierto para el caso no
7

La funci
on ser
a en este caso f (x) = Jx + b.

328

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

lineal de f (x). Por ejemplo, podra darse que Ak1 = J(x ) pero ocurrir que Ak1 sk1 = y k1 ,
lo que conllevara que Ak J(x ) > Ak1 J(x ).
En el siguiente lema se prueba que si la aproximaci
on de la matriz Jacobiana es cada vez
peor, su deterioro es tan lento que no impide probar la convergencia de {xk } a x .
Lema 4.5 Sea D n un conjunto convexo abierto que contiene a xk1 y xk , xk1 = xk .
Sea f : n n , J(x) Lip (D), Ak1 nn y
Ak = Ak1 +

(y k1 Ak1 sk1 )sTk1


.
T s
sk1
k1

Entonces, para las normas de Frobenius o la espectral,


Ak J(xk ) Ak1 J(xk1 ) +

3
xk xk1 2 .
2

(4.30)

Adem
as, si x D y J(x) cumple la condici
on de Lipschitz,
J(x) J(x ) x x 

para todo x D,

entonces
Ak J(x ) Ak1 J(x ) +

(xk x 2 + xk1 x 2 ).
2

(4.31)

n. Probemos primero la expresi


Demostracio
on (4.31). Sea J = J(x ). Restando J de ambos
miembros de la expresion que dene Ak , se tiene que
Ak J = Ak1 J +

(y k1 Ak1 sk1 )sTk1


T s
sk1
k1

T
(J sk1 Ak1 sk1 )sk1
(y k1 J sk1 )sTk1
= Ak1 J +
+
sTk1 sk1
sTk1 sk1

&

T
sk1 sTk1
(y k1 J sk1 )sk1
= (Ak1 J ) I T
+
.
sk1 sk1
sTk1 sk1

Para las norma de Frobenius o la espectral, de (4.24) o (4.23) y de (4.25), se tiene que


T


sk1 sk1
y k1 J sk1 2


Ak J  Ak1 J  I T
.
 +

sk1 2
sk1 sk1 2

Usando el hecho de que



T


sk1 sk1


I T
 =1

sk1 sk1 2

4.4 Metodos cuasi Newton

pues I

sk1 sTk1

'

329

sTk1 sk1 es una matriz de proyeccion, y que

y k1 J sk1 2

(xk x 2 + xk1 x 2 )sk1 2 ,


2

resultado inmediato del lema 4.3, se concluye la demostraci


on de (4.31). La prueba de (4.30)
es muy similar.
Para el siguiente teorema supondremos que xk+1 = xk , k = 0, 1, . . . Como ademas, seg
un se
comprueba a continuaci
on, bajo unos ciertos supuestos, Ak es regular, k = 0, 1, . . . y dado que
xk+1 xk = A1
k f (xk ), el supuesto de que xk+1 = xk es equivalente a suponer que f (xk ) = 0,
k = 0, 1, . . . De esta forma se evita el caso simple en el que el algoritmo encuentra la solucion
del sistema en un n
umero nito de pasos.
Teorema 4.7 Sea la funci
on f : n n , continua y diferenciable en un conjunto convexo
ongase que existe un x n y r, > 0 tales que la bola abierta
abierto D n . Sup

S(x , r) D, que f (x ) = 0 y que J 1 (x ) existe con J 1 (x ) y J Lip (S(x , r)).


Existen entonces unas constantes positivas y tales que si x0 x  y A0 J(x )2
, cumpliendose (4.31), la sucesi
on {xk } generada de la aplicaci
on recursiva de la f
ormula
de Broyden converge a x al menos linealmente.
Teorema 4.8 (Dennis-More) Sea un conjunto convexo abierto D n , una funci
on f :
n n , J Lip (D), x D, siendo J(x ) regular. Sea {Ak } una sucesi
on de matrices
regulares en nn y sup
ongase que para un x0 D, la sucesi
on de puntos generada por la
f
ormula de recurrencia
xk+1 = xk A1
k f (xk )
permanece en D satisfaciendo que xk = x para todo k y que limk xk = x . Entonces,
{xk } converge superlinealmente a x en alguna norma   y f (x ) = 0, si y s
olo si
(Ak J(x ))sk 
= 0,
k
sk 
lim

donde sk = xk+1 xk .
La demostracion detallada de estos dos teoremas se puede seguir en Dennis y Schnabel
[1983] y [1996].
4.4.1.2

Implementaci
on pr
actica del m
etodo de Broyden

Para llevar numericamente a la pr


actica el metodo de Broyden son varios los aspectos importantes que hay que considerar. El primero consiste en determinar una buena aproximaci
on
inicial de A0 . Para ello, lo que se suele hacer (as act
uan de hecho la mayor parte de los c
odigos
comerciales) es utilizar la aproximacion por diferencias nitas de J(x0 ).
Otro se reere a que, dado que las modicaciones de la matriz A de una iteraci
on a otra son
de rango uno, en lugar de proceder a modicar la matriz A con la f
ormula de Broyden y luego

330

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

factorizar toda ella de nuevo a n de resolver el sistema lineal de ecuaciones correspondiente,


se puede proceder directamente a modicar la factorizaci
on de la A en curso mediante las
operaciones mas adecuadas de acuerdo con las f
ormulas estandar conocidas.
Otra cuesti
on importante a tener en cuenta nace del hecho de que el metodo de Broyden
adapta de iteraci
on en iteraci
on la matriz A y no la A1 , con la que se operara mucho m
as
ecazmente. En este sentido y sin tener en cuenta otras consideraciones, por que no partir
de una A01 y readaptar A1 ? Se reduciran el n
umero global de operaciones necesarias para
resolver el sistema de ecuaciones. A tal efecto se utiliza el siguiente resultado.
Lema 4.6 (F
ormula de modicaci
on de Sherman-Morrison-Woodbury) (a) Si A es una
matriz regular n n y u y v dos vectores cualesquiera de n , A + uv T es regular si y s
olo
si w = 1 + v T A1 u = 0. (b) En este caso, adem
as,

A + uv

1

=A

1
A1 uv T A1 .
w

n. Como A + uv T = (I + uv T A1 )A y uv T es una matriz de rango 1, el punto


Demostracio
(a) resulta del hecho de que la matriz I + uv T A1 tiene n 1 valores propios iguales a la
unidad y el restante es 1 + v T A1 u.
La f
ormula del punto (b) se comprueba f
acilmente sin mas que multiplicar el primer miembro
por A + uv T . En efecto,

A+

uv T

A+

uv T

1

AA1

1
AA1 uv T A1 + uv T A1
w

1
1
T 1
u (v T A
)* u+ v A
w

= I

w1

1
uv T A1 + uv T A1
w

w1
uv T A1
w

= I.

La aplicaci
on inmediata de este lema lleva a deducir la f
ormula de adaptaci
on de Broyden
para las sucesivas matrices Ak1 . Es la siguiente:

1
Ak+1
= Ak1 +

T 1
sk A1
k y k sk Ak

sTk Ak1 y k

Hasta hace relativamente poco tiempo en que se han empezado a utilizar en codigos comerciales factorizaciones de A muy ecaces (del tipo QR por ejemplo), a las que resulta f
acil
aplicar modicaciones de rango uno, esta u
ltima expresi
on era la m
as usada por los metodos
cuasi Newton, y ello a pesar de ciertas dicultades numericas que se pueden presentar, como
por ejemplo, la de no detectar el mal condicionamiento de Ak .

4.5 Metodos globalmente convergentes para sistemas de ecuaciones no lineales

4.5

331

M
etodos globalmente convergentes para sistemas de ecuaciones no lineales

Una cuestion pr
actica importante de los metodos para resolver sistemas de ecuaciones no
lineales es su robustez: su facilidad para obtener la soluci
on de problemas de diversa ndole y
llegar a ellas partiendo de cualquier punto. Para conseguir esto, puesto que como ya hemos
visto los metodos presentados solo convergen a la soluci
on deseada si el punto de partida es
adecuado, se recurre a alg
un mecanismo de salvaguarda que asegure que en cada iteraci
on el
proceso mejora la solucion, es decir, que las iteraciones son mon
otonamente convergentes.
Con tal objetivo, si el metodo particular que se utiliza establece una determinada direcci
on
1
1
de movimiento d (el metodo de Newton J f (x), los cuasi Newton A f (x)), la idea es, desde
un xk , moverse a lo largo de esa direccion un paso que no sea estrictamente 1 sino un factor
de este, de tal forma que siempre se mejore el valor de la funci
on de acuerdo con alg
un criterio.
Si a partir de este se dene la funci
on
y() = xk + dk ,
donde dk = J(xk )1 f (xk ) o A1
k f (xk ). Para = 0, evidentemente, y(0) = xk ; para = 1,
y(1) = xk+1 . La funci
on norma de f (y()), que designaremos por r(), suele tener la forma de
la gura 4.15. En las proximidades de una soluci
on de f (x) = 0, el mnimo de r() se alcanza
pr
oximo a = 1. Es decir, ese paso hace que f (xk+1 ) < f (xk ). Como f (x) se hace cero
en la soluci
on, f (xk ) se aproxima a cero monotonamente cuando el punto de partida est
a
sucientemente pr
oximo a la soluci
on.
Cuando el punto xk esta lejos de la soluci
on, el mnimo de r() se alcanza en un valor de
menor que 1, por lo que es concebible que f (y(1)) > f (y(0)), o que f (xk+1 ) > f (xk ).
Conseguir que f (xk+1 ) < f (xk ) conllevar
a una reducci
on de .
Para determinar c
omo reducir de forma adecuada se han estudiado diversos procedimientos. Uno de los mas usados es el conocido como regla de Armijo. Establece que se eval
ue
r()

pendiente

1 
r (0)
2

tangente

Figura 4.15
Criterio de Armijo

332

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

f (y()) en = 1, 12 , 41 , . . . hasta que

f (xk ).
f (y()) 1
2

(4.32)

Cuando se cumpla esta condici


on, el nuevo punto del proceso iterativo ser
a
xk+1 = xk + dk .

(4.33)

El criterio de Armijo surge de la teora de optimizaci


on. La norma que se utiliza en (4.32)
es la eucldea.
Para estudiar, con el apoyo de la gura 4.15, que representa la regla de Armijo, consideraremos la norma eucldea:
,
- n
-
r() = f (y())2 = . (fi (y()))2 .
i=1

La derivada de r() en = 0 es:

dr $$
= f (xk )2 .
d $=0

(4.34)

Esto quiere decir que la pendiente de r() en = 0 es negativa. Si se rehace la expresion (4.32),
teniendo en cuenta (4.34), y el hecho de que
r(0) = f (y(0))2 = f (xk )2 = r  (0),
se tiene que

r() r(0)
1
1
f (xk ) r  (0).
(4.35)

2
2
Como el termino de la izquierda de esta u
ltima expresi
on es la pendiente de una secante de la
funci
on r() que pasa por 0 y por , el criterio de Armijo es equivalente a decir que la pendiente
de esa secante es a lo sumo la mitad de la de la pendiente en = 0. Como se ve en la gura,
aquellas que satisfacen la expresion (4.35) pertenecen al intervalo [0, a], donde la pendiente
de la secante es como mucho r  (0)/2. Utilizando el criterio de Armijo, se va reduciendo hasta
que este en [0, a]. En las proximidades de la soluci
on se suele vericar que un = 1 hace que
se cumpla esto u
ltimo, por lo que el paso de la expresi
on (4.33) es el de Newton, supuesta
dk = J(xk )1 . En cambio, lejos de la soluci
on, el valor de es menor que 1.
El algoritmo para resolver sistemas de ecuaciones no lineales mediante el metodo de Newton
con el criterio de Armijo es el de la tabla 4.11.
Ejemplo 4.6 Resolvamos el siguiente sistema de tres ecuaciones no lineales con tres incognitas:
6 arctan(x1 10) 2ex2 2ex3 + 2x2 + 2x3 9 = 0
2 arctan(x1 10) 4ex2 ex3 + 7x2 2x3 3 = 0
2 arctan(x1 10) ex2 3ex3 x2 + 5x3 3 = 0.
Apliquemos el metodo ne Newton-Raphson con el criterio de Armijo. Partamos del punto
[0, 0, 0]T .
El c
odigo en Fortran 77 que implementa el algoritmo correspondiente para resolver este
problema es el siguiente.

4.5 Metodos globalmente convergentes para sistemas de ecuaciones no lineales

333

Tabla 4.11
Algoritmo de Newton para sistemas de ecuaciones no lineales con el criterio de salvaguarda
de Armijo
Paso 0 Denir un x0 n . Hacer k = 1 y xk x0 .
Paso 1 Determinar la solucion de J(xk )(xk+1 xk ) = f (xk ).
Paso 2 Si f (xk+1 )2 < T ol, parar: el problema esta resuelto.
Si > T ol, hacer: = 1
while (f (xk+1 ) > (1 /2)f (xk )) do
/2
xk+1 xk + sk
end
k k + 1.
Ir al paso 1.

PROGRAM Newtarmijo
C
parameter (n=3)
double precision f(n),j(n,n),x(n),x1(n),s(n),tol,dnr,dnx,alfa,dnor
C
tol = dsqrt(epsilon(1.0d0))
x
= 0.d0
call fx (f,x,n)
dnx = dnor(f,n)
C
do while (dnx.gt.tol)
call derfx (j,x,n)
call gauss (j,f,s,n)
x1 = x-s
call fx (f,x1,n)
dnr = dnor(f,n)
alfa = 1.d0
do while(dnr.gt.(1.d0-alfa/2.)*dnx)
alfa = alfa/2.
x1
= x-alfa*s
call fx (f,x1,n)
dnr = dnor(f,n)
end do
print *,x1,alfa,dnr
x
= x1
dnx = dnr
end do

! Salida de resultados

C
end
subroutine fx (f,x,n)
double precision f(n),x(n)
C
f(1) = 6*datan(x(1)-10)-2*dexp(-x(2))-2*dexp(-x(3))+2*x(2)+

334

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

+
2*x(3)-9
f(2) = 2*datan(x(1)-10)-4*dexp(-x(2))-dexp(-x(3))+7*x(2)+
2*x(3)-3
f(3) = 2*datan(x(1)-10)-dexp(-x(2))-3*dexp(-x(3))-x(2)+5*x(3)-3
C
return
end
subroutine derfx (j,x,n)
double precision j(n,n),x(n)
C
j(1,1)
j(1,2)
j(1,3)
j(2,1)
j(2,2)
j(2,3)
j(3,1)
j(3,2)
j(3,3)

=
=
=
=
=
=
=
=
=

6/(1+(x(1)-10)**2)
2*dexp(-x(2))+2
2*dexp(-x(3))+2
2/(1+(x(1)-10)**2)
4*dexp(-x(2))+7
dexp(-x(3))-2
2/(1+(x(1)-10)**2)
dexp(-x(2))-1
3*dexp(-x(3))+5

C
return
end
double precision function dnor (x,n)
double precision x(n)
C
dnor = 0.d0
do i = 1,n
dnor = dnor+x(i)**2
end do
dnor = dsqrt(dnor)
C
return
end
subroutine gauss (a,b,x,n)
C
C
C
C

** Resoluci
on del sistema lineal de ecuaciones mediante eliminaci
on
de Gauss
integer ipvt(10),pi
double precision a(n,n),b(n),x(n),smax,r,r1,c

C
do i = 1,n
ipvt(i) = i
end do
C
C
C

*** Triangularizaci
on ***
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k)).gt.smax) then
l
= i
smax = dabs(a(ip,k))
endif

4.6 Mnimos cuadrados no lineales

335

end do
if (l.ne.0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip = ipvt(i)
r = a(ip,k)*r1
do j = k+1,n
a(ip,j) = a(ip,j)-r*a(pi,j)
end do
a(ip,k) = -r
end do
end do
C
do k = 1,n-1
ip = ipvt(k)
do i = k+1,n
pi
= ipvt(i)
b(pi) = b(pi)+a(pi,k)*b(ip)
end do
end do
C
C
C

*** Sustituci
on inversa ***
x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi = ipvt(i)
c = b(pi)
do j = i+1,n
c = c-a(pi,j)*x(j)
end do
x(i) = c/a(pi,i)
end do

C
return
end

El proceso iterativo que conlleva la resoluci


on del problema, y los sucesivos pasos son los
que describe la tabla 4.12.

4.6

Mnimos cuadrados no lineales

El problema no lineal de mnimos cuadrados consiste en encontrar el mnimo global de la suma


de los cuadrados de m funciones no lineales; es decir,
m
1
1
minimizar
f
(x)
=
ri2 (x) = r(x)22 ,
n
x
2 i=1
2

(4.36)

donde r(x) : n m = [r1 (x), . . . , rm (x)]T es el vector de residuos y cada ri (x), i = 1, . . . , m,


m n, es una funci
on no lineal de n en . Este problema surge de la imposibilidad de

336

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Tabla 4.12
Proceso de convergencia a la solucion del sistema de ecuaciones no lineales del ejemplo 4.6
con el metodo de Newton y el criterio de Armijo
k
1
2
3
4
5
6
7
8
9
10
11

x1
300,083895104677200
211,530753313613000
127,971241379208900
73,759896400087980
45,746086585685560
32,053990425823070
25,843790295333550
23,887131421604770
24,098180028741330
24,101419206498890
24.101419947171680

x2
5,000000000000001E-1
5,010361094249567E-1
5,030767540185261E-1
5,070335953663429E-1
5,144640981917619E-1
5,275063585640013E-1
5,471809743227869E-1
5,670707461673926E-1
5,671432894574930E-1
5,671432904097838E-1
5.671432904097838E-1

x3
5,000000000000001E-1
5,010361094249567E-1
5,030767540185261E-1
5,070335953663429E-1
5,144640981917619E-1
5,275063585640013E-1
5,471809743227869E-1
5,670707461673926E-1
5,671432894574930E-1
5,671432904097838E-1
5.671432904097838E-1

1,0000
1,5625E-2
3,1250E-2
6,2500E-2
1,2500E-1
2,5000E-1
5,0000E-1
1,0000
1,0000
1,0000
1,0000

f (xk )2
4,937E-1
4,874E-1
4,768E-1
4,580E-1
4,205E-1
3,431E-1
1,958E-1
7,955E-3
1,075E-4
2,458E-8
1,599E-15

encontrar la soluci
on al sistema de ecuaciones no lineales r(x) = 0 y, en consecuencia, tratar
de encontrar una pseudosoluci
on que mejor la aproxime de acuerdo con la norma eucldea.8 Si
m = n se tiene un caso especial de sistemas de ecuaciones no lineales como los que acabamos
de ver en apartados anteriores de este captulo.
El campo donde m
as aplicaciones encuentran las tecnicas que describimos a continuacion
para resolver estos problemas es el del ajuste de funciones a datos diversos. Se trata de aproximar a unos datos dados, denidos por ejemplo por un par yi (valor) y ti (tiempo), (yi , ti ),
i = 1, . . . , m, una funci
on o modelo f (x, t). Si ri (x) representa el error en la predicci
on que
hace el modelo de la observacion i,
ri (x) = yi f (x, ti ),

i = 1, . . . , m,

y se quiere minimizar la suma de los cuadrados de las desviaciones entre los valores reales y
los predichos con el modelo, se llega a un problema del tipo (4.36).
Estimaci
on del estado de sistemas el
ectricos
La estimaci
on del estado es, en sentido abstracto, el proceso por el cual se determina el valor
del vector de variables de estado de un sistema, bas
andose en unas medidas efectuadas al
mismo conforme a criterios diversos. Estas medidas no se realizan, usualmente, con precision
absoluta, debido a la imperfecci
on operativa de los aparatos encargados de llevarlas a efecto,
si bien suelen tener un grado de redundancia apreciable por lo que el aludido proceso de
estimacion se basa en maximizar o minimizar unos criterios estadsticos determinados. El m
as
usado por cientcos y tecnicos es sin duda el de minimizar la suma de los cuadrados de las
desviaciones entre los valores reales medidas y los estimados.
En el an
alisis, la operaci
on y planicaci
on de sistemas electricos de energa (un esquema
muy sencillo de uno de estos sistemas se puede ver en la gura 4.16), uno de los problemas
de mas relevancia tecnica y economica y que con mayor frecuencia se estudia en los departamentos de explotacion y centros de control de empresas electricas, es el de la estimacion
del estado de funcionamiento del sistema de generaci
on y transporte. Conocido este estado, es
8

Recordemos las ideas introducidas en este sentido al hablar de mnimos cuadrados lineales

4.6 Mnimos cuadrados no lineales

337

posible analizar multitud de par


ametros sobre si su funcionamiento es correcto o no, tecnica
o economicamente, si conviene efectuar alguna maniobra para mejorarlo o para planicar su
evoluci
on a tenor de cambios que se avecinen o presuman en el corto o medio plazo, etc.
Para estimar el estado del sistema se instalan unos aparatos de medida que proporcionan
el valor de una serie de magnitudes fsicas relativas al mismo: tensiones en diversos puntos,
ujos de potencia activa y reactiva por elementos de transporte, potencias activa y reactiva
inyectadas por generadores, etc. Si todas estas medidas fuesen correctas con precision total y
dado que el sistema funciona, las relaciones matematicas que plasman las leyes fsicas que rigen
su funcionamiento permitiran determinar la soluci
on a ese estado de funcionamiento de forma
u
nica. Los errores aleatorios que incorporan los aparatos de medida en estas, sin embargo,
introducen una incompatibilidad matem
atica en aquellas relaciones, por lo que el c
alculo de
la soluci
on no es posible teniendo que sustituirse por una estimaci
on. El n
umero de medidas
que se efect
ua suele ser varias veces superior al estrictamente necesario para determinar el
estado con el n de aumentar la bondad de la estimaci
on as como poder identicar mediciones
err
oneas.
En la gura 4.17 se ha aumentado el detalle de la 4.16, en lo que hace referencia a tres de
sus nudos, a n de ilustrar una disposici
on tpica de aparatos de medida en un sistema electrico

Figura 4.16
Red electrica IEEE de 30 Nudos

338

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

de generacion y transporte con objeto de estimar su estado de funcionamiento.


Como apunt
abamos al hablar de los estudios de cargas en sistemas electricos de generacion y
transporte de energa, si se supone que los par
ametros fsicos del sistema electrico permanecen
constantes, existen cuatro variables asociadas a cada nudo i del referido sistema electrico: la
tension, en m
odulo, Vi , y argumento i ; la potencia activa inyectada, Pi , y la potencia reactiva
inyectada, Qi . Las potencias inyectadas dependen de la tensi
on en el propio nudo i y en los a el
unidos. Las expresiones ver apendice C que las relacionan, en ausencia de transformadores
conectados al nudo i, estan denidas por:

Pi = |Vi |2

n

j=1
j=i

Qi = |Vi |2

n

j=1
j=i

Gpij + Gsij |Vi |




n

j=1
j=i

Bpij + Bsij |Vi |

|Vj | Gsij cos(i j ) + Bsij sen(i j )

n


|Vj | Gsij sen(i j ) Bsij cos(i j )

j=1
j=i

Figura 4.17
Conjunto tpico de medidas para la estimaci
on del estado de un sistema electrico

4.6 Mnimos cuadrados no lineales

339

donde: Vi es el modulo de la tensi


on en el nudo i;
i el argumento de la tensi
on en el nudo i;
Gsij la conductancia serie (constante) de la lnea que une el nudo i con el nudo j;
Gpij la conductancia a tierra (constante) de la lnea que une el nudo i con el j;
Bsij la susceptancia serie (constante) de la lnea que une el nudo i con el nudo j; y
Bpij la susceptancia a tierra (constante) de la lnea que une el nudo i con el j.
Si un nudo tiene alg
un condensador o reactancia conectado a el, Bpij deber
a englobar la
del condensador/reactancia y las de tierra de las lneas conectadas a ese nudo.
El resto de las variables del sistema se pueden expresar en funci
on de las ya mencionadas.
As, por ejemplo, entre los nudos i y j de una red, los ujos de potencias activa y reactiva
estan dados por:
Pij = |Vi |2 Gsij |Vi ||Vj |Gsij cos(i j ) |Vi ||Vj |Bsij sen(i j ) + |Vi |2 Gpij
Qij = |Vi |2 Bsij |Vi ||Vj |Gsij sen(i j ) + |Vi ||Vj |Bsij cos(i j ) |Vi |2 Bpij .
Estas expresiones, al igual que las de las potencias inyectadas, se complican, seg
un se puede
ver en el apendice C, al considerar transformadores.
En terminos matematicos, si se tiene una muestra b1 , b2 , . . . , bm determinada por las medidas
de los aparatos, el sistema de ecuaciones que relaciona estas mediciones con las variables de
estado x1 , x2 , . . . , xn , se puede expresar como
f1 (x1 , x2 , . . . , xn ) = b1
f2 (x1 , x2 , . . . , xn ) = b2
..
.
fm (x1 , x2 , . . . , xn ) = bm ,

(4.37)

donde m  n. Se supone que los componentes de la funci


on vectorial f (x) son exactos.
Este sistema, debido a la imprecision de los aparatos de medida antes comentada, es matematicamente incompatible, aunque esta incompatibilidad suele ser muy peque
na, pues los
errores en condiciones normales son peque
nos.
Para el ejemplo de la gura 4.17, tomando 1 = 0 como referencia de angulos, los par
ametros
que denen el sistema (4.37) son los de la tabla 4.13.
Al no poder calcular la soluci
on exacta de (4.37), por no existir, es necesario denir un
criterio, metrica o estimador en n que permita encontrar otra soluci
on en lo sucesivo la
denominaremos pseudosoluci
on lo mas pr
oxima a aquella. Los estimadores mas usados son
el de mnimos cuadrados y el de m
axima verosimilitud.
El estimador de mnimos cuadrados elige como criterio de aproximacion de la soluci
on
(x1 , x2 , . . . , xn ) =

m


(bi fi (x1 , x2 , . . . , xn ))2

i=1

por ser esta una funci


on continua, diferenciable y de estructura matem
atica rica. El estimador
de los par
ametros que se elige es aquel que hace mnima la funci
on (x1 , x2 , . . . , xn ); es decir,
minimizar
(x).
xn

340

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Tabla 4.13
Par
ametros del problema de la gura 4.17
b

V1
V2
P1
Q1
P2
P3
Q3
P12
Q12
P21
Q21
P23
Q23

x


V12

(Gp1j

j=2,3


V12
V1
V2
2
V3
3

V22

j=2,3


f (x)
V1
 V2
+ Gs1j ) V1
Vj (G1j cos(1 j ) + B1j sen(1 j ))
j=2,3


(Bp1j + Bs1j ) V1

(Gp2j + Gs2j ) V2

j=1,3


Vj (G1j sen(1 j ) B1j cos(1 j ))

j=2,3


Vj (G2j cos(2 j ) + B2j sen(2 j ))

j=1,3


(Gp3j + Gs3j ) V3
Vj (G3j cos(3 j ) + B3j sen(3 j ))
j=1,2
j=1,2


(Bp3j + Bs3j ) V3
Vj (G3j sen(3 j ) B3j cos(3 j ))
V32
j=1,2
j=1,2
V12 Gs12 V1 V2 (Gs12 cos(1 2 ) + Bs12 sen(1 2 )) + V12 Gp12
V12 Bs12 V1 V2 (Gs12 sen(1 2 ) Bs12 sen(1 2 )) V12 Bp12
V22 Gs21 V1 V2 (Gs21 cos(2 1 ) + Bs21 sen(2 1 )) + V22 Gp21
V22 Bs21 V1 V2 (Gs21 sen(2 1 ) Bs21 sen(2 1 )) V22 Bp21
V22 Gs23 V2 V3 (Gs23 cos(2 3 ) + Bs23 sen(2 3 )) + V22 Gp23
V22 Bs23 V2 V3 (Gs23 sen(2 3 ) Bs23 sen(2 3 )) V22 Bp23
V32

En la estimaci
on del estado de sistemas electricos, el estimador mas usado es el de maxima
verosimilitud. Este estimador es identico al de mnimos cuadrados cuando los errores que
afectan a las mediciones tienen una distribuci
on de probabilidad N (0, ) ambos convergen
en probabilidad a x, son asint
oticamente normales y consistentes para m .
Si un determinado aparato suministra la medida b, siendo breal la que debera dar si la
precision de la medici
on fuese total, se tendr
a que
b = breal + ,
donde es el error aleatorio propio del aparato de medida. Si no esta sesgado, la funci
on de
densidad de probabilidad que se puede utilizar para describirlo es la de la distribuci
on normal
de media cero y desviacion tpica , es decir,
1
F DP () =
2

e 2 2 .

Como la media de se supone cero, la media de la realizacion b es breal . La funci


on de densidad
de probabilidad de b es

1
F DP (b) = e
2

b breal
2 2

2

4.6 Mnimos cuadrados no lineales

341

Si se tiene un vector de m medidas b, cada componente del cual presenta una funci
on
de densidad de probabilidad semejante a la descrita, la funci
on de densidad de probabilidad
conjunta de la muestra aleatoria b1 , . . . , bm , supuestas todas las medidas independientes unas
de otras, es
F DP (b1 , . . . , bm ) = F DP (b1 ) F DP (b2 ) F DP (bm ) =

m
/

F DP (bi ).

i=1

A esta funci
on de densidad de probabilidad conjunta se la denomina verosimilitud de los pareal ) = L(breal ). De lo que se trata es de
r
ametros (los bireal ) y se designa por L(b1real , . . . , bm
hacer maxima la probabilidad (verosimilitud) de que se obtenga la muestra que realmente se
ha obtenido: b. Es decir, hacer m
axima

real

L(b

)=

m
/
i=1

i 2


2
m
bi bireal


2i2

i=1

o, lo que es lo mismo, ln L(breal ).


Ahora bien, maximizar la funci
on ln L(breal ) es lo mismo que

maximizar

m


ln(i 2)

i=1

Como

i=1 ln(i

m

i=1

bi breal
i
2i2

2

2) es constante, este u
ltimo problema equivale a


2
real
m
 bi bi

minimizar
.
2

2i

i=1

Los par
ametros breal no son independientes entre s; estan relacionados a traves de las variables
de estado por la funci
on no lineal antes mencionada
breal = f (x),
donde x es el vector de variables de estado recordemos, tensiones en los nudos de la red y
tomas de los transformadores con regulaci
on.
El problema expresado en forma matricial resulta
minimizar
[b f (x)]T 1 [b f (x)] ,
xn
donde la matriz

12

..

.
2
m

342

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

es la matriz de covarianzas de las mediciones. Como es denida positiva su inversa se puede


expresar de la forma 1 = W T W , dando lugar a un planteamiento del problema de la forma
minimizar
W (b f (x))22 ,
xn
identico en estructura al que plante
abamos con el estimador de mnimos cuadrados.

4.6.1

Referencias te
oricas del problema

Volviendo al problema no lineal de mnimos cuadrados en s, los metodos mas importantes


para resolverlo requieren la informaci
on que proporcionan las derivadas de los componentes
ri (x) del vector r(x).9 En lo sucesivo supondremos que esas derivadas existen, como mnimo
hasta segundo orden, siendo adem
as continuas. La matriz Jacobiana de r(x) es J(x) mn
y la Hessiana de cada componente ri (x), Gi (x) nn , donde
Gi (x)jk =

2 ri (x)
,
xj xk

i = 1, . . . , m.

Las derivadas primera y segunda de f (x) son f


acilmente obtenibles:
f (x) =

m


ri (x)ri (x) = J(x)T r(x)

i=1

y
2 f (x) =

m


ri (x)ri (x)T + ri (x)2 ri (x) = J(x)T J(x) + Q(x),

i=1

donde,
Q(x) =

m


ri (x)Gi (x).

i=1

2 f (x)

El hecho de que f (x) y


posean una estructura especial y conocida favorece su explotaci
on por los metodos que veremos posteriormente.
on
Ejemplo 4.7 Supongamos que se desea ajustar a unos datos (ti , yi ), i = 1, . . . , 4, la funci
f (x, t) = etx1 + etx2 mediante mnimos cuadrados.
La funci
on residuo es r(x) : 2 4 , con ri (x) = eti x1 +eti x2 yi , i = 1, . . . , 4. El problema
consiste en minimizar f (x) = 21 r(x)T r(x).
La matriz Jacobiana de r(x), J(x) 42 , es

t1 et1 x1
t2 x1

t2 et x
J(x) =
t3 e 3 1
t4 et4 x1
9

b f (x) con el planteamiento anterior.

t1 et1 x2
t2 et2 x2
.
t3 et3 x2
t4 et4 x2

4.6 Mnimos cuadrados no lineales

343

El vector gradiente de 21 r(x)T r(x), f (x) 2 :

4


t x

ri (x)ti e i 1

i=1
f (x) = J(x)T r(x) =
4

ti x2
ri (x)ti e

i=1

La matriz Hessiana 2 f (x) 22 , usando el hecho de que


t2 eti x1
0
ri (x) = i
,
0
ti2 eti x2
2

es,

2 f (x) = J(x)T J(x) + Q(x)

4


i=1

ti2 eti x1
4


ti x1

4


ri (x) + e

4


ti2 eti (x1 +x2 )

i=1

t2i eti (x1 +x2 )

i=1

.

ti x2

t2i eti x1 ri (x) + e

i=1

Como se puede observar, el calculo analtico de las derivadas de este sencillo problema no es
trivial.
Como el problema no lineal de mnimos cuadrados es un problema de b
usqueda de un
mnimo, la condici
on necesaria de primer orden (ver apendice A, p
agina 695) para que un
aximo) del problema es que se satisfaga que
punto x sea el optimo (mnimo o m
f (x ) = J(x )T r(x ) = 0.
Cualquier punto que satisface esta condici
on se denomina punto crtico.
Denamos a continuaci
on una condici
on necesaria y suciente para que un punto crtico
x sea un mnimo local de f (x). Recurramos para ello al siguiente enfoque geometrico de
Bj
ork [1996] suponiendo que el problema de minimizar f (x) es el de encontrar un punto en la
supercie n-dimensional z = r(x) de m mas cerca del origen.
Supongamos primero que la matriz Jacobiana en x es de rango completo, n. Se cumplir
a que J(x ) J(x ) = In , donde J(x ) es la matriz pseudoinversa de la Jacobiana en x .
Reescribiendo la expresi
on de la matriz Hessiana de f (x),

f (x) = J J Gw = J
2

donde,
Gw =

m


wi Qi ,

w=

i=1

La matriz simetrica

K = J

T

I J

r
,
r2
Gw J

T

Gw J

J,

y = r2 .

344

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

es la matriz de curvatura normal de la supercie n-dimensional z = r(x) en m con respecto


al vector normal w.
Si los valores propios de K son
1 2 n ,
las cantidades i = 1/i , i = 0, representan los radios de curvatura de la supercie con
respecto al vector normal w.
Si J(x ) es de rango completo, la matriz Hessiana 2 f (x ) = J T (I K)J es denida
positiva y el punto x un mnimo local del problema si y s
olo si I K es denida positiva en
x ; esto es as cuando se cumple que
1 1 > 0
en x . Si 1 1 0, el problema de mnimos cuadrados posee lo que se denomina un punto
de silla en x ; si 1 1 < 0 f (x) incluso puede tener un m
aximo en x .
La interpretaci
on geometrica del problema no lineal de mnimos cuadrados es la siguiente:
se trata de encontrar un punto x m en la supercie z = r(x) tal que su distancia al
origen sea mnima. Cuando, como es el caso de la aproximaci
on de datos, ri (x) = yi f (x, ti ),
i = 1, . . . , m, la supercie es
z = [f (x, t1 ), . . . , f (x, tm )]T m .
El problema consiste en este caso en encontrar el punto de esta supercie mas pr
oximo a
y m . En el caso de que el n
umero de observaciones sea m = 2, existiendo un u
nico
par
ametro x, el problema se ilustra en la gura 4.18. El radio de curvatura de z en x es
> r2 = ; por consiguiente, 1 = 1 / > 0. Se cumple de esta manera la condici
on
necesaria y suciente de mnimo.

4.6.2

Resoluci
on num
erica del problema

La forma de abordar la resoluci


on numerica del problema no lineal de mnimos cuadrados responde a dos enfoques distintos. Uno consiste en contemplar el problema como un sistema de
m ecuaciones y n inc
ognitas (m > n),
r(x) = 0,
en general incompatible. Como se hizo en el caso en que m = n, es natural aproximar r(x) por
el modelo lineal que dene el desarrollo en serie de Taylor alrededor de un punto xk trunc
andolo
a partir de los terminos de segundo orden; es decir,
Mk (x) = r(xk ) + J(xk )(x xk ).
El sistema lineal Mk (x) = 0 sera en general incompatible. La soluci
on del problema lineal
de mnimos cuadrados que determina minxn Mk (x)2 se puede usar para, iterativamente,
aproximarse m
as y mas a la solucion del problema no lineal (4.36). Este enfoque aboca al
metodo conocido como Gauss-Newton y a una variante denominada Levenberg-Marquardt.
El segundo enfoque consiste en contemplar el problema como uno de optimizaci
on en n .
Para resolverlo se aproxima f (x) por el modelo cuadr
atico que resulta de su desarrollo en serie

4.6 Mnimos cuadrados no lineales

345

z2

[y1 , y2 ]T

z = [f (x , t1 ), f (x , t2 )]T

z1

Figura 4.18
Geometra del ajuste de una funci
on no lineal con un par
ametro a dos puntos
de Taylor alrededor de un punto trunc
andolo a partir de los terminos de terceras derivadas; es
decir,
k (x) = f (xk ) + f (xk )T (x xk ) + 1 (x xk )T 2 f (xk )(x xk ).
M
2
k (x) se alcanza en un punto dado por la expresi
El mnimo de M
on

1

xN = xk J(xk )T J(xk ) + Q(xk )

J(xk )T r(xk ).

(4.38)

Esta soluci
on se puede usar para aproximarse paso a paso a la de (4.36). Este enfoque es
equivalente al metodo de Newton aplicado directamente a (4.36).
El metodo de Gauss-Newton se puede tambien considerar como un caso particular del de
Newton en el que se desprecia Q(xk ), pues si J(xk ) es de rango completo, xN es la misma
soluci
on que se obtendra resolviendo el problema lineal de mnimos cuadrados min Mk (xk )2 .
a despreciar si las ri (x) son solo ligeramente no lineales o los
En cualquier caso, Q(xk ) se podr
residuos ri (xk ), i = 1, . . . , m, son peque
nos; en estos casos el comportamiento del metodo de
Gauss-Newton debe ser muy similar al de Newton. En particular, para un problema compatible
en el que r(x ) = 0, la convergencia de los dos metodos es la misma.
Para problemas con residuos relativamente grandes o grandes, la convergencia local del
metodo de Gauss-Newton puede ser muy inferior a la del metodo de Newton. El coste, sin
actica este u
ltimo y
embargo, de calcular las mn2 derivadas necesarias para llevar a la pr
determinar Q(xk ), puede hacerlo extremadamente lento.
En el caso de ajuste de funciones a puntos, los ri (x) = yi f (x, ti ) y sus derivadas pueden obtenerse con relativa facilidad (sobre todo si est
an compuestas de sumas de funciones

346

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

elementales), por lo que utilizar el metodo de Newton, al menos a priori, puede resultar m
as
conveniente.
4.6.2.1

M
etodo de Gauss-Newton

El metodo de Gauss-Newton para resolver problemas no lineales de mnimos cuadrados est


a
basado en la resoluci
on de una sucesi
on de aproximaciones lineales de r(x) de acuerdo con el
algoritmo de la tabla 4.14.
Tabla 4.14
Algoritmo de Gauss-Newton para resolver problemas no lineales de mnimos cuadrados
Paso 0 Denir un x0 ; hacer k = 1 y xk x0 .
Paso 1 Determinar minxn r(xk ) + J(xk )(x xk )2 .
Paso 2 Si x xk < T ol, parar: el problema esta resuelto;
si no, hacer k = k + 1, xk = x e ir al paso 1.

Cada uno de los subproblemas del paso 1 es un problema lineal de mnimos cuadrados del
tipo
minimizar
Ax b2 .
xn
La soluci
on de esos subproblemas, una direcci
on de descenso como sabemos, si J(xk ) es de
10
rango completo, esta dada por

1

pk = x xk = J(xk )T J(xk )

J(xk )T r(xk ).

Para su resoluci
on numerica, como tambien sabemos por lo explicado en el captulo 1 al exponer
lo relativo a mnimos cuadrados lineales, no conviene utilizar las ecuaciones normales, por
su posible mal condicionamiento numerico, sino, si esta disponible, alg
un metodo basado en
on, una
transformaciones ortogonales que factorice la matriz J(xk ) en la forma QR. La soluci
vez llevada a cabo esa factorizacion, se obtendra de la resoluci
on de un sistema triangular
superior con R.
Si J(xk ) no tiene rango completo, pk debe ser aquel de entre todas las soluciones existentes
que tenga norma mnima:
pk = J(xk ) r(xk ).
Ejemplo 4.8 Se desea utilizar el metodo Gauss-Newton para determinar los par
ametros x1 y
x2 de la funci
on ex1 +tx2 que mejor se ajuste a los pares de puntos
{(ti , yi )} = {(2, 1/2), (1, 1), (0, 2), (1, 4)}.
10

Recordemos las ecuaciones normales de un problema lineal de mnimos cuadrados

4.6 Mnimos cuadrados no lineales

347

La funci
on r(x) es en este caso de 2 en 4 . Su matriz Jacobiana es

ex1 2x2 2ex1 2x2


ex1 x2 ex1 x2

J(x) =
.
ex1
0
ex1 +x2
ex1 +x2
Si se parte de x0 = [1, 1]T , el codigo en Fortran 77 que lo resuelve, utilizando como
rutina para resolver el subproblema lineal de mnimos cuadrados QRDES de la p
agina 96, es el
que sigue. La soluci
on es


ln 2
.
x=
ln 2
PROGRAM Gausnewt
C
parameter (m=4,n=2)
double precision f(m),j(m,n),x(n),p(n),tol,dmax,dnor,s
C
tol = dsqrt(epsilon(1.0d0))
x
= 1.0
C
C *** Proceso iterativo ***
C
do i = 1,100
call fx (f,x,m,n)
call derfx (j,x,m,n)
call qrdes (j,f,p,m,n,s)
x
= x-p
dnor = dmax(p,n)/dmax(x,n)
print *,x,s,dnor
if (dnor.lt.tol) exit
end do
C
end
subroutine fx (f,x,m,n)
double precision f(m),x(n)

! Salida de resultados

! C
alculo de residuos

C
f(1)
f(2)
f(3)
f(4)

=
=
=
=

dexp(x(1)-2.0*x(2))-0.5
dexp(x(1)-1.0*x(2))-1.0
dexp(x(1))-2.0
dexp(x(1)+x(2))-4.0

C
return
end
subroutine derfx (j,x,m,n)
double precision j(m,n),x(n)
C
j(1,1)
j(1,2)
j(2,1)
j(2,2)
j(3,1)
j(3,2)
j(4,1)
j(4,2)

=
=
=
=
=
=
=
=

dexp(x(1)-2.0*x(2))
-2.0*dexp(x(1)-2.0*x(2))
dexp(x(1)-x(2))
-dexp(x(1)-x(2))
dexp(x(1))
0.0
dexp(x(1)+x(2))
dexp(x(1)+x(2))

! Evaluaci
on de la matriz
!
Jacobiana

348

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

C
return
end
double precision function dmax (x,n)
double precision x(n)

! Funci
on auxiliar

C
dmax = 0.d0
do i = 1,n
dmax = dmax1(dabs(x(i)),dmax)
end do
C
return
end
subroutine qrdes (a,b,x,m,n,s1)
C
C
C
C

*** Resoluci
on del problema lineal de m
nimos cuadrados mediante
factorizaci
on QR por transformaciones de Householder.
double precision a(m,n),b(m),d(20),x(n),rmax,beta,sigma,s1

C
C
C

*** Reducci
on QA=R y vector b a b ***
do j = 1,n
rmax = 0.0d0
do i = j,m
rmax = dmax1(rmax,dabs(a(i,j)))
end do
if (rmax.eq.0.0) stop Matriz A de rango incompleto
beta = 0.0
do i = j+1,m
beta = beta+a(i,j)**2
end do
wj
= a(j,j)
sigma = sign(dsqrt(beta+wj*wj),wj)
wj
= wj+sigma
beta
= 2.0/(beta+wj*wj)
a(j,j) = wj
d(j)
= -sigma
do l = j+1,n
s = 0.0
do k = j,m
s = s+a(k,j)*a(k,l)
end do
s = beta*s
do k = j,m
a(k,l) = a(k,l)-a(k,j)*s
end do
end do
s = 0.0
do k = j,m
s = s+a(k,j)*b(k)
end do
s = beta*s
do k = j,m
b(k) = b(k)-a(k,j)*s
end do
end do

4.6 Mnimos cuadrados no lineales

C
C
C

*** Resoluci
on

349

Rx = b ***

x(n) = b(n)/d(n)
do i = n-1,1,-1
suma = 0.0
do k = i+1,n
suma = suma+a(i,k)*x(k)
end do
x(i) = (b(i)-suma)/d(i)
end do
C
C
C

*** Suma de residuos al cuadrado ***


s1 = 0.0
do i = n+1,m
s1 = s1+b(i)**2
end do

C
return
end

Los puntos del proceso iterativo que se obtienen son los de la tabla 4.15

Tabla 4.15
Metodo de Gauss-Newton. Proceso de convergencia a la solucion del problema del ejemplo 4.8
k
1
2
3
4
5

x1
7,5406407460540E-1
6,9782818348320E-1
6,9317290130691E-1
6,9314718125839E-1
6,9314718055994E-1

4.6.2.1.1

x2
7,8581936682613E-1
6,9931189327404E-1
6,9317774998543E-1
6,9314718138758E-1
6,9314718055994E-1

r22

xk xk1  /xk 

7,8266574774450E-3
9,1871427399292E-5
2,0369290094835E-9
1,2555027835829E-18
2,1270825699749E-31

3,1296747849328E-1
1,2370367756599E-1
8,8493314314808E-3
4,4100591676052E-5
1,1933987648446E-9

Convergencia del m
etodo de Gauss-Newton

Como el metodo de Gauss-Newton se puede considerar resultante del de Newton suprimiendo el


termino Q(xk ) ver ecuacion (4.38), y la convergencia de este, bajo los supuestos estandar,
es cuadratica, no parece desafortunado suponer que la buena o mala convergencia del metodo
de Gauss-Newton depender
a de la importancia del termino suprimido.

350

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Teorema 4.9 Sea la funci


on vectorial r(x) : n m y la funci
on f (x) = 21 r(x)T r(x)
continua y derivable en un conjunto abierto D n . Sup
ongase que J(x) Lip (D) con
J(x)2 para todo x D y que existe un x D y unos escalares , 0 tales que
J(x )T r(x) = 0, es el menor autovalor de J(x )T J(x ) y
(J(x) J(x ))T r(x )2 x x 2

(4.39)

para todo x D. Si < , entonces para todo c (1, /), existe un > 0 tal que para
todo x0 S(x , ), la sucesi
on de puntos que genera el metodo de Gauss-Newton,

1

xk+1 = xk J(xk )T J(xk )

J(xk )T r(xk )

converge a x cumpliendose que


xk+1 x 2

c
c
xk x 2 +
xk x 22

(4.40)

xk+1 x 2

c +
xk x 2 < xk x 2 .
2

(4.41)

n. Por inducci
Demostracio
on. Supongamos que > 0 puesto que las conclusiones del
teorema solo seran aplicables a este caso. Sea c una constante en (1, /). Para abreviar la
notaci
on, hagamos J(x0 ) = J0 , r(x0 ) = r0 y r(x ) = r . Designemos por   las normas
eucldea y espectral.
Con los supuestos mencionados, existe un 1 > 0 tal que J0T J0 es regular, cumpliendose que


 T 1 
 c
 J J0

 0

Sea

para x0 S(x , ).


c
= min 1 ,
c

(4.42)

(4.43)

Se tiene que

x1 x = x0 x J0T J0

1 

1 

= J0T J0
= J0T J0

1

J0T r0


J0T r 0 + J0T J0 (x x0 )

(4.44)


J0T r J0T (r r0 J0 (x x0 )) .

De acuerdo con el lema 4.3,


r r0 J0 (x x0 )

x0 x 2 .
2

(4.45)

4.6 Mnimos cuadrados no lineales

351

De la expresion (4.39), recordando que J(x )T r(x ) = 0,






J0T r  x x .

(4.46)

Combinando (4.44), (4.42), (4.45) y (4.46) y que J0  , se tiene que


x1

x 


 


 T
  T 
1
(J0 J0 )  J0 r  + J0  r r 0 J0 (x x0 )


c
x0 x  +
x0 x 2 ,

lo que prueba (4.40) en el caso k = 0. De (4.43) y la u


ltima desigualdad,
x1

x 

=
<

c c
+
x0 x 
x0

2


c c

+
x0 x 

2
c +
x0 x 
2
x0 x ,
x 

lo que prueba (4.41) en el caso en que k = 0. Para probar los dem


as pasos de la inducci
on se
procedera de forma identica.
Corolario 4.2 Con los mismos supuestos del teorema anterior, si r(x ) = 0, existe un
> 0 tal que para todo x0 S(x , ), la sucesi
on de puntos que genera el metodo de

Gauss-Newton converge cuadr


aticamente a x .
n. Si r(x ) = 0, se puede escoger igual a cero en la expresion (4.39) por lo
Demostracio
que, de acuerdo con (4.41) y (4.40), la sucesi
on de puntos converge a x cuadr
aticamente.
La constante juega un papel muy importante en estos u
ltimos teorema y corolario. En
oximos
cierta medida, se puede ver como el valor de Q(x )2 pues, para x sucientemente pr

a x , se comprueba f
acilmente que
(J(x) J(x ))T r(x )
= Q(x )(x x ).
Con esta interpretaci
on, o directamente de (4.39), se ve que representa de forma combinada
el grado de no linealidad del problema y el tama
no de sus residuos; si r(x ) = 0 o r(x) es
lineal, = 0. De acuerdo con esto, el teorema 4.9 dice que el orden de convergencia del metodo
de Gauss-Newton decrece a medida que crece la no linealidad del problema y el tama
no de los
residuos.
4.6.2.2

M
etodos de Gauss-Newton globalmente convergentes

Estos metodos, siguiendo los mismos principios expuestos en el apartado 4.5, de la p


agina 331,
son modicaciones del de Gauss-Newton que persiguen resolver de forma robusta, partiendo

352

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

de cualquier punto, el problema no lineal de mnimos cuadrados. A tal efecto, calculada la


direccion de acercamiento a la solucion, pk = x xk , resultado de
minimizar
r(xk ) + J(xk )p2 ,
pn
en lugar de tomar un paso en esa direcci
on igual a 1, cosa que hace el metodo de GaussNewton, se multiplica por un factor k de tal manera que se mejore la solucion obtenida hasta
ese momento.
La amplitud del paso k , o factor de amortiguaci
on, se toma de acuerdo con uno de estos
criterios:
a) Escoger el mayor k de la sucesion 1, 12 , 41 , . . . , para el cual
1
r(xk )22 r(xk + k pk )22 k J(xk )pk 22 .
2
Este criterio es esencialmente la regla de Armijo ya expuesta en el apartado 4.5.
b) Escoger el k soluci
on de
minimizar r(xk + pk )22 .


Como los dos criterios funcionan adecuadamente, en la literatura especializada se aconseja


indistintamente utilizar uno u otro. Incluso se pueden combinar los dos en alg
un caso seg
un
progresa el procedimiento correspondiente. El nombre que se le da a k es el que designa este
tipo de metodos: de Gauss-Newton amortiguado.
4.6.2.3

M
etodos de regi
on de conanza. M
etodo de Levenberg-Marquardt

Estos metodos surgieron para evitar las dicultades que el metodo de Gauss-Newton experimenta cuando a lo largo del proceso iterativo, en alg
un punto, la matriz Jacobiana no tiene
rango completo. Para evitar esta dicultad, Levenberg [1944] y Marquardt [1963] sugirieron
calcular la direcci
on, pk = x xk , mediante la resoluci
on del subproblema


minimizar
r(xk ) + J(xk )pk 22 = k pk 22 ,
pk n
no de pk . Observese que pk esta denido aun
donde el par
ametro k controla y limita el tama
cuando J(xk ) no tenga rango completo. Conforme k , pk 2 0 y pk se hace paralela
a la direcci
on de m
axima pendiente.
As denido, ese subproblema se puede comprobar que es equivalente al problema de optimizacion con condici
on cuadr
atica
r(xk ) + J(xk )p2
minimizar
pn
sujeta a

p2 k ,

(4.47)

donde k = 0 si en la soluci
on las condiciones no se cumplen exactamente (no estan activas)
y k > 0, si estan activas. El conjunto de vectores p factibles, p2 k , se puede interpretar

4.6 Mnimos cuadrados no lineales

353

como la regi
on de conanza del modelo lineal r(x)
= r(xk ) + J(xk )p, p = x xk , dentro de
la cual se limita la b
usqueda del optimo del problema.
En Dennis y Schnabel [1983] y [1996] se puede encontrar la demostraci
on de que la soluci
on
del problema (4.47) es

p = J(xk )T J(xk ) + k I
donde k = 0 si

1

J(xk )T r(xk ),

(4.48)



1


T
T


k  J(xk ) J(xk )
J(xk ) r(xk )

y k > 0 en cualquier otro caso. Las propiedades de la convergencia local del metodo LevenbergMarquardt son muy similares a las de metodo de Gauss-Newton.
El algoritmo de Levenberg-Marquardt es el que describe la tabla 4.16.
Ejemplo 4.9 Utilizando el metodo de Levenberg-Marquardt, ajustar a la funci
on
f (x) =

b1
1 + b2 etb3

el conjunto de puntos de la tabla 4.17.


Si se parte del punto x0 = [200, 30, 0,4]T , el codigo en Fortran 77 que lo resuelve,
utilizando GAUSS como rutina para resolver el subproblema (4.48), es el que sigue.
PROGRAM Levmar
C

Tabla 4.16
Algoritmo de Levenberg-Marquart para resolver problemas no lineales de mnimos cuadrados
Paso 0 Denir un x0 n ; hacer = 0,1, k = 1 y xk x0 .
0
11
Paso 1 Calcular pk = J(xk )T J(xk ) + I
J(xk )T r(xk ).
Paso 2 if (r(xk + pk )22 < r(xk )22 ) then
si pk T ol, parar: problema resuelto.
/10
si pk > T ol, hacer:
k k+1
xk+1 xk + p
y volver al paso 1.
else
10
Volver al paso 1 sin tener que calcular J(xk ).
end

354

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

Tabla 4.17
Datos del problema no lineal de mnimos cuadrados del ejemplo 4.9
ti
1
2
3
4
5
6

yi
5,308
7,24
9,638
12,866
17,069
23,192

ti
7
8
9
10
11
12

yi
31,443
38,558
50,156
62,948
75,995
91,972

parameter (m=12,n=3)
double precision f(m),j(m,n),jtj(n,n),a(n,n),x(n),s(n),tol,dmax,
+
dnor,mu,res,b(n),prod,f1(m),res1
C
tol
x(1)
x(2)
x(3)
mu

=
=
=
=
=

dsqrt(epsilon(1.0d0))
200.
30.
-0.4
0.1d0

C
do k = 1,100
call fx (f,x,m,n)
call derfx (j,x,m,n)
do i = 1,n
do l = 1,n
jtj(i,l) = prod(j(1,i),j(1,l),m)
end do
end do
res = prod(f,f,m)
do kk=1,100
do i = 1,n
b(i) = prod(j(1,i),f,m)
end do
a
= jtj
do i = 1,n
a(i,i) = jtj(i,i)+mu
end do
call gauss (a,b,s,n)
b = x-s
call fx (f1,b,m,n)
res1 = prod(f1,f1,m)
if (res1.lt.res) then
x
= b
f
= f1
dnor = dmax(s,n)/dmax(x,n)
print *,x,res1,mu,dnor
if (dnor.le.tol) stop
mu = mu/10.d0
exit
else
mu = mu*10.d0
cycle
endif
end do
end do

! Valores de partida
!
de los par
ametros
!
a estimar

4.6 Mnimos cuadrados no lineales

C
end
subroutine fx (f,x,m,n)
double precision f(m),x(n)
C
f(1)
f(2)
f(3)
f(4)
f(5)
f(6)
f(7)
f(8)
f(9)
f(10)
f(11)
f(12)

=
=
=
=
=
=
=
=
=
=
=
=

x(1)/(1+x(2)*dexp(x(3)))-5.308
x(1)/(1+x(2)*dexp(2*x(3)))-7.24
x(1)/(1+x(2)*dexp(3*x(3)))-9.638
x(1)/(1+x(2)*dexp(4*x(3)))-12.866
x(1)/(1+x(2)*dexp(5*x(3)))-17.069
x(1)/(1+x(2)*dexp(6*x(3)))-23.192
x(1)/(1+x(2)*dexp(7*x(3)))-31.443
x(1)/(1+x(2)*dexp(8*x(3)))-38.558
x(1)/(1+x(2)*dexp(9*x(3)))-50.156
x(1)/(1+x(2)*dexp(10*x(3)))-62.948
x(1)/(1+x(2)*dexp(11*x(3)))-75.995
x(1)/(1+x(2)*dexp(12*x(3)))-91.972

C
return
end
subroutine derfx (j,x,m,n)
double precision j(m,n),x(n)
C
j(1,1)
j(1,2)
j(1,3)
j(2,1)
j(2,2)
j(2,3)
j(3,1)
j(3,2)
j(3,3)
j(4,1)
j(4,2)
j(4,3)
j(5,1)
j(5,2)
j(5,3)
j(6,1)
j(6,2)
j(6,3)
j(7,1)
j(7,2)
j(7,3)
j(8,1)
j(8,2)
j(8,3)
j(9,1)
j(9,2)
j(9,3)
j(10,1)
j(10,2)
j(10,3)
j(11,1)
j(11,2)
j(11,3)
j(12,1)

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

1/(1+x(2)*dexp(x(3)))
-x(1)*dexp(x(3))/(1+x(2)*dexp(x(3)))**2
-x(1)*x(2)*dexp(x(3))/(1+x(2)*dexp(x(3)))**2
1/(1+x(2)*dexp(2*x(3)))
-x(1)*dexp(2*x(3))/(1+x(2)*dexp(2*x(3)))**2
-x(1)*x(2)*dexp(2*x(3))*2/(1+x(2)*dexp(2*x(3)))**2
1/(1+x(2)*dexp(3*x(3)))
-x(1)*dexp(3*x(3))/(1+x(2)*dexp(3*x(3)))**2
-x(1)*x(2)*dexp(3*x(3))*3/(1+x(2)*dexp(3*x(3)))**2
1/(1+x(2)*dexp(4*x(3)))
-x(1)*dexp(4*x(3))/(1+x(2)*dexp(4*x(3)))**2
-x(1)*x(2)*dexp(4*x(3))*4/(1+x(2)*dexp(4*x(3)))**2
1/(1+x(2)*dexp(5*x(3)))
-x(1)*dexp(5*x(3))/(1+x(2)*dexp(5*x(3)))**2
-x(1)*x(2)*dexp(5*x(3))*5/(1+x(2)*dexp(5*x(3)))**2
1/(1+x(2)*dexp(6*x(3)))
-x(1)*dexp(6*x(3))/(1+x(2)*dexp(6*x(3)))**2
-x(1)*x(2)*dexp(6*x(3))*6/(1+x(2)*dexp(6*x(3)))**2
1/(1+x(2)*dexp(7*x(3)))
-x(1)*dexp(7*x(3))/(1+x(2)*dexp(7*x(3)))**2
-x(1)*x(2)*dexp(7*x(3))*7/(1+x(2)*dexp(7*x(3)))**2
1/(1+x(2)*dexp(8*x(3)))
-x(1)*dexp(8*x(3))/(1+x(2)*dexp(8*x(3)))**2
-x(1)*x(2)*dexp(8*x(3))*8/(1+x(2)*dexp(8*x(3)))**2
1/(1+x(2)*dexp(9*x(3)))
-x(1)*dexp(9*x(3))/(1+x(2)*dexp(9*x(3)))**2
-x(1)*x(2)*dexp(9*x(3))*9/(1+x(2)*dexp(9*x(3)))**2
1/(1+x(2)*dexp(10*x(3)))
-x(1)*dexp(10*x(3))/(1+x(2)*dexp(10*x(3)))**2
-x(1)*x(2)*dexp(10*x(3))*10/(1+x(2)*dexp(10*x(3)))**2
1/(1+x(2)*dexp(11*x(3)))
-x(1)*dexp(11*x(3))/(1+x(2)*dexp(11*x(3)))**2
-x(1)*x(2)*dexp(11*x(3))*11/(1+x(2)*dexp(11*x(3)))**2
1/(1+x(2)*dexp(12*x(3)))

355

356

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

j(12,2) = -x(1)*dexp(12*x(3))/(1+x(2)*dexp(12*x(3)))**2
j(12,3) = -x(1)*x(2)*dexp(12*x(3))*12/(1+x(2)*dexp(12*x(3)))**2
C
return
end
double precision function dmax (x,n)
double precision x(n)
C
dmax = 0.d0
do i = 1,n
dmax = dmax1(dabs(x(i)),dmax)
end do
C
return
end
double precision function prod (x,y,n)
double precision x(n),y(n)
C
prod = 0.d0
do i = 1,n
prod = prod+x(i)*y(i)
end do
C
return
end
subroutine gauss (a,b,x,n)
C
C
C
C

*** Resoluci
on del sistema lineal de ecuaciones mediante eliminaci
on
de Gauss
integer ipvt(10),pi

c
double precision a(n,n),b(n),x(n),smax,r,r1,c
C
do i = 1,n
ipvt(i) = i
end do
C
C
C

*** Triangularizaci
on ***
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k)).gt.smax) then
l
= i
smax = dabs(a(ip,k))
endif
end do
if (l.ne.0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)

4.6 Mnimos cuadrados no lineales

357

r1 = 1.0/a(pi,k)
do i = k+1,n
ip = ipvt(i)
r = a(ip,k)*r1
do j = k+1,n
a(ip,j) = a(ip,j)-r*a(pi,j)
end do
a(ip,k) = -r
end do
end do
C
do k = 1,n-1
ip = ipvt(k)
do i = k+1,n
pi
= ipvt(i)
b(pi) = b(pi)+a(pi,k)*b(ip)
end do
end do
C
C
C

*** Sustituci
on inversa ***
x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi = ipvt(i)
c = b(pi)
do j = i+1,n
c = c-a(pi,j)*x(j)
end do
x(i) = c/a(pi,i)
end do

C
return
end

Para compactar la exposici


on, se ha calculado la matriz jacobiana analticamente. Cuando la
complejidad del c
alculo de esta matriz es mayor, lo usual es calcularla mediante su aproximaci
on
por diferencias nitas.
Los puntos del proceso iterativo que se obtienen son los de la tabla 4.18.
Tabla 4.18
Metodo de Levenberg-Marquardt. Proceso de convergencia a la soluci
on del problema del
ejemplo 4.9
k
1
2
3
4
5
6
7
8

x1
172,054602169
180,427478579
190,598767569
195,701854540
196,177702377
196,186188183
196,186260992
196,186261646

x2
27,576875139
40,906816931
47,354495934
48,994138800
49,090471766
49,091630737
49,091641855
49,091641954

x3
-2,852439035E-1
-3,173500543E-1
-3,150142518E-1
-3,137199088E-1
-3,135736444E-1
-3,135697714E-1
-3,135697367E-1
-3,135697364E-1

r22

xk xk1  /xk 

225,726827415
85,897325602
3,211830744
2,589465629
2,587278602
2,587278212
2,587278212
2,587278212

1,0E-1
1,0E-2
1,0E-3
1,0E-4
1,0E-5
1,0E-6
1,0E-7
1,0E-8

1,624216E-1
7,387977E-2
5,336492E-2
2,607582E-2
2,425595E-3
4,325384E-5
3,711204E-7
3,337921E-9

358

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

4.6.2.4

M
etodos tipo Newton

Los metodos tipo Newton determinan una direcci


on de mejora de la soluci
on, desde un punto
on es la siguiente:
xk , cuya expresi

pk = J(xk

)T J(x

k)

1

+ Q(xk )

J(xk )T r(xk ).

Llevar esto a la pr
actica conlleva el calculo de la complicada matriz
Q(xk ) =

m


ri (xk )2 ri (xk ).

i=1

El metodo de este tipo mas referenciado en la literatura especializada, y que usan alguno de
los paquetes de software comercialmente disponibles para el tratamiento de problemas generales
de mnimos cuadrados no lineales, es el debido a Dennis, Gay y Welsch [1981]. En lugar de
calcular en cada iteraci
on la matriz 2 (xk ) = J(xk )T J(xk ) + Q(xk ), se la aproxima por
2 (xk ) = J(xk )T J(xk ) + Bk , donde Bk es una aproximaci
on cuasi Newton de la matriz
Q(xk ), con B0 = 0, que se requiere sea simetrica. Esta aproximaci
on debe satisfacer unas
denominadas relaciones cuasi Newton:
Bk (xk xk1 ) = z k ,

z k = J(xk )T r(xk ) J(xk1 )T r(xk1 ).

(4.49)

Si se hace sk = xk xk1 , en Dennis y Schnabel [1983] y [1996] se demuestra que la soluci


on
de (4.49) que minimiza el cambio que tiene lugar desde Bk1 es:
(z k Bk1 sk )y Tk + y k (z k Bk1 sk )T
(z k Bk1 sk )T sk y k y Tk
Bk = Bk1 +

.
y Tk sk
(y kT sk )2
Esta f
ormula garantiza que el cambio de la norma de Frobenius de la matriz Bk1 es mnimo.

Referencias
La referencia esencial en la que estan basados los resultados m
as importantes de este captulo y
la mayor parte de lo expuesto es Dennis y Schnabel [1983] y [1996]; algunos ejemplos y apuntes
son de Hager [1988] y Ortega y Rheinboldt [1970].
Los ejemplos y analisis de los diversos aspectos de problemas que se plantean en sistemas
electricos de generacion y transporte de energa electrica son del autor. Para profundizar m
as
en ellos se pueden consultar Bergen [1986], Elgerd [1983] y Grainger y Stevenson [1994].
El apartado relativo a rapidez y velocidad de convergencia se puede tambien estudiar en
Gill, Murray y Wright [1981] y Luenberger [1984]. Est
a muy bien tratado en Nash y Sofer
[1996].
Todos los programas de ordenador son del autor; alternativas a ellos se pueden encontrar
en Atkinson, Harley y Hudson [1989] y Press y otros [1986], [1992] y [1996].
El apartado relativo a mnimos cuadrados no lineales, adem
as de en Dennis y Schnabel
[1983] y [1996], est
a muy bien tratado en Bj
ork [1990] y [1996]. Lo que hace referencia al
estimador de maxima verosimilitud es estandar y se puede encontrar en cualquier buen libro
de estadstica.

Ejercicios

359

Ejercicios
4.1. Estudiar la convergencia de la sucesion {xk } denida por la relaci
on
xk = 1 + 22 .
k

4.2. Estudiar la convergencia de la sucesion {xk } denida por


xk = 1 + 2k .
4.3. Estudiar la convergencia de la sucesion {xk } denida por
xk = 1 +

1
.
k!

Converge linealmente?
4.4. Considerese la funcion no lineal,
f (x) = x4 12x3 + 47x2 60x.
Efectuar una iteracion del metodo de Newton partiendo de x0 = 2. A que punto convergera?
Que pasa si parte de x0 = 1?
4.5. Determinar el orden de convergencia del metodo de Newton al aplicarlo para resolver las ecuaciones x2 = 0, x3 = 0, x + x3 = 0 y x + x4 = 0.
4.6. Obtener el orden de convergencia, utilizando Newton y partiendo de los puntos indicados, en cada
uno de los problemas siguientes:
a) cos(x) = 0, x = /2.
b) 1 + cos(2x) = 0, x = /2.
c) x2 4 = 0, x = 2.
4.7. Sea la funci
on


1
x sen
,
f (x) =
x

0,

x = 0
x = 0.

Demostrar que f (x) es Lipschitz continua pero no diferenciable.


4.8. Considerese la ecuacion x2 = 2.
a) Analizar gracamente como se comporta el metodo de Newton para resolverla partiendo de
un punto cercano a cero.
b) Analizar gracamente el comportamiento del metodo de la secante si x0 0, 3 y x1 0, 3.
c) Analizar gracamente el comportamiento del metodo de Newton modicado.
d) Si el metodo de la secante converge a una raz de f (x), debido a los errores de redondeo, es posible que f (xk ) 0. Cual es en este caso xk+1 ? Al programar el metodo, que
precauciones habra que tomar para tener en cuenta el caso en que f (xk ) = f (xk+1 ) 0?
4.9. Dada f : 2 2 , donde

3x12 2x2
1 ,
f (x) = 3
x2
x1

calcular J(x) en x = [1, 1]T . Calcularla tambien por diferencias nitas con h = 0,001.

360

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

4.10. Escribir una iteraci


on del metodo de Newton para resolver el sistema de ecuaciones
x12 + 2x1 x2 + sen(x3 ) = 0
x2 +
x3 = 0
x1 +
+
ex3 = 0,
cos(x1 )
partiendo del punto x1 = x2 = x3 = 0. Se puede realmente aplicar el metodo de Newton
partiendo de ese punto?
4.11. Considerese la aplicacion del metodo de Newton para resolver f (x) = 0, donde

x1
f (x) = x22 + x2 .
ex3 1
a) Cual es f1 (0)?
b) Considerese cada componente fi (x) como una funcion univariable. Cu
al es la constante
Lipschitz de f  (x) en el intervalo [a, a] (cual es la cota de |(f  (x) f  (0))/x| en ese
intervalo)?
c) Cual es la matriz J(x) en el punto x = 0?
d) Cual es la constante de Lipschitz de J(x) en un intervalo de radio a alrededor de x = 0?
e) Cual es la region de convergencia del metodo de Newton al aplicarlo para resolver f (x) = 0?
f) Cual sera esa region de convergencia del metodo de Newton si x30 = 0? Y si x20 = x30 = 0?
4.12. Dado el sistema no lineal de ecuaciones
6 arctan(x1 10) 2ex2 2ex3 + 2x2 + 2x3 9 = 0
2 arctan(x1 10) 4ex2 ex3 + 7x2 2x3 3 = 0
2 arctan(x1 10) ex2 3ex3 x2 + 5x3 3 = 0.
a) Utilizar el metodo de Newton para resolverlo comenzando desde el punto x = 0.
b) Incorporar el criterio de Armijo y resolverlo otra vez. Que pasa? Por que?
4.13. Utilizar el metodo de Newton para resolver el sistema no lineal
3x1
x12

ex1 x2

cos(x2 x3 ) 0,5 = 0
625x22
= 0
+
20x3
+ 9 = 0.

Hay que tener cuidado pues el sistema admite mas de una solucion.
4.14. Utilizar el metodo de Newton para resolver los sistemas:
3x1 cos(x2 x3 ) 0,5 = 0
x21 625x22 = 0
10 3
= 0.
ex1 x2 + 20x3 +
3
b)
x1 10x2 + 9 = 0

3(x3 x4 ) = 0
(x2 2x3 + 1)2 = 0

2(x1 x4 )2 = 0.
a)

Que ocurre con la matriz Jacobiana en la solucion? Como se afecta la convergencia por ello?

Ejercicios
4.15. Sea f : 2 2 , con


f (x) =

361


x12
.
x22

Sea xk = [107 , 107 ]T y supongase que estamos usando un ordenador de base 14 y 10 dgitos
signicativos. Que pasa si se aproxima la matriz Jacobiana en ese punto por diferencias nitas
un h optimo?
con h = 1? Y con 1014 ? Existe alg
4.16. Efectuar dos iteraciones del metodo de Broyden para resolver el sistema de ecuaciones
x1 + x2 3 = 0
x12 + x22 9 = 0,
partiendo del punto x0 = [2, 7]T y tomando A0 = J(x0 ).
4.17. Sea r(x) : 4 20 , ri (x) = x1 + x2 e(ti +x3 ) /x4 yi , i = 1, . . . , 20. El problema consiste en
minimizar f (x) = 21 r(x)T r(x). Cual es la matriz J(x)? Y Q(x)? Y 2 f (x)?
2

4.18. Sea r(x) : 2 4 , ri (x) = ex1 +ti x2 yi , i = 1, . . . , 4. El problema consiste en minimizar


f (x) = 21 r(x)T r(x). Supongase que t1 = 2, t2 = 1, t3 = 0, t4 = 1, y1 = 0,5, y2 = 1, y3 = 2
y y4 = 4 (f (x) = 0 en x = [ln 2, ln 2]T ). Efectuar una iteraci
on del metodo de Gauss-Newton y
otra del de Newton partiendo de x0 = [1, 1]T . Que ocurre si los valores de y1 e y4 se cambian a
5 y -4, respectivamente?
4.19. Dada R m y J mn , probar que s = (J T J + I)1 J T R es la solucion del problema de
mnimos cuadrados
As + b2 ,
minimizar
sn
donde A (m+n)n , b m+n y
A=

J
,
1/2 I

b=

R
.
0

4.20. Un experimento biol


ogico consiste en la determinacion de la temperatura maxima del agua, XM , a
la cual pueden sobrevivir varias especies de hidra sin que su tiempo de vida esperado disminuya. Un
enfoque para resolver este problema consiste en usar un ajuste de mnimos cuadrados ponderado
de la forma f (x) = y = a/(x a)c a una coleccion de datos experimentales. Los valores de los
datos, x, se reeren a las temperaturas del agua por encima de XM y los valores y al promedio
de tiempo de vida a esa temperatura. La constante b es una asntota a la graca de f y como tal
es una aproximacion a XM .
a) Demuestrese que escoger a, b y c para minimizar
2
n 

a
,
wi yi
c
(x

b
)
i
i
i=1
equivale a resolver el sistema no lineal
6 75 n
6
5 n
 yi wi
 yi wi
a =
(xi b)c
(xi b)2c
i=1
i=1
0 =

n

i=1

0 =

n

i=1

n
n
n


yi wi 
yi wi
yi wi
wi

c
2c+1
c+1
(xi b) i=1 (xi b)
(xi b)
(xi b)2c
i=1
i=1
n
n
n
yi wi  wi ln(xi b)  wi yi ln(xi b) 
wi

.
c
2c
c
(xi b) i=1 (xi b)
(xi b)
(xi b)2c
i=1
i=1

362

Captulo 4. Soluci
on de sistemas de ecuaciones no lineales

b) Resolver el sistema no lineal precedente para aquella especie de hidra cuyos datos son los
de la tabla que sigue (usar como pesos wi = ln yi ).
i
yi
xi

1
2,4
31,8

2
3,8
31,5

3
4,75
31,2

4
21,6
30,2

Segunda parte
Programacion
lineal

363

Captulo

LINEAL.
PROGRAMACION

FORMULACION

LINEAL es la tecnica de programaci


A PROGRAMACION
on matem
atica, u optimizaci
on, que busca encontrar aquella soluci
on o alternativa de entre las muchas
posibles de un problema que mejor identica un determinado criterio lineal atendiendo a diversas condiciones tambien lineales. La programaci
on lineal surge como la
forma m
as natural de abordar muchos problemas de la ciencia, la tecnica o la economa donde
se trata de asignar o compartir determinados recursos s
olo disponibles en cantidades limitadas.
La formidable extensi
on de la programaci
on lineal y el papel tan importante que juega hoy
en da en todos aquellos entornos donde se utiliza para la asignaci
on de recursos de cualquier
tipo, se debe fundamentalmente a dos hechos: la aparici
on en 1947 del denominado metodo
simplex, que permite la resoluci
on de problemas1 de programaci
on lineal de grandes dimensiones
muy ecazmente, y al enorme desarrollo que los ordenadores, su utilizaci
on e implantaci
on han
experimentado desde aquella fecha. La programaci
on lineal juega un papel fundamental no s
olo
en optimizaci
on y en economa, sino tambien en planicaci
on estrategica, an
alisis de algoritmos,
problemas combinatorios, criptografa, y en muchos otros campos dispares unos de otros.
La programaci
on lineal tiene en el an
alisis, planicaci
on y control operativo de sistemas
electricos de generacion y transporte de energa, uno de sus campos de actuaci
on m
as destacado. Los problemas que a diario se resuelven con esta tecnica cubren casi todas las facetas
involucradas en las tareas que los ingenieros y tecnicos encargados de esos sistemas han de
llevar a cabo; as, cuestiones como, generacion de energa a mnimo coste, control de stock
de combustibles, mantenimiento de equipos de generaci
on, transporte y distribuci
on, abastecimientos de combustibles a centrales de generacion, optimizaci
on del transporte de energa
en alta tensi
on, planicaci
on de nuevos equipamientos generadores, control de inversiones, etc,
por s
olo citar unos pocos, utilizan la programaci
on lineal dando respuesta a problemas con
1

En lo sucesivo emplearemos indistintamente los terminos programa lineal, problema de programaci


on lineal
o, incluso, problema lineal

365

366

Captulo 5. Programaci
on lineal

muchos miles de variables y cientos, cuando no tambien miles, de condiciones.


Existen dos formas tradicionales de abordar y ense
nar la programaci
on lineal: una, quiz
as la
mas extendida, aquella que la estudia como una disciplina aislada y completamente separada
de las demas; otra, la que la aborda como un caso particular de procesos de optimizaci
on
mas amplios. Lo que aqu pretendemos es combinar esos dos enfoques. Nuestra intencion es
enfatizar lo m
as posible el hecho de que la programaci
on lineal tiene mucho que ver con la
optimizaci
on de problemas m
as generales a la vez que con el algebra lineal numerica, en la que
basa gran parte de la mec
anica de sus procedimientos.

5.1

Conceptos y deniciones generales

La programaci
on lineal trata de la b
usqueda de la soluci
on del siguiente programa lineal:
minimizar c1 x1 + c2 x2 + + cn xn
sujeta a

a11 x1 + a12 x2 + + a1n xn b1


a21 x1 + a22 x2 + + a2n xn b2
.
.
..
..
am1 x1 + am2 x2 + + amn xn bm
x1 , x2 , . . . , xn 0.

on objetivo; a las funciones ai1 x1 + +ain xn ,


A la funci
on c1 x1 + +cn xn se la denomina funci
1 i m, restricciones o condiciones. Las variables del problema x1 , . . . , xn se denominan
variables de decisi
on. Las constantes c1 , . . . , cn , coecientes de coste. La matriz de coecientes
de las condiciones del problema, A, es

a11 a12
a21 a22

A = ..
.
.
..
am1 am2

a1n

a2n
.. .
..
. .
amn

A bT = [b1 , b2 , . . . , bn ] se le denomina en algunas referencias bibliogr


acas vector termino de
la derecha. Un vector xT = [x1 , x2 , . . . , xn ] que satisface todas las condiciones se denomina
factible. El conjunto F de todas los vectores factibles constituye la regi
on factible.
En terminos mas compactos de notacion vectorial, el problema de programaci
on lineal se
plantea de la siguiente manera:
min. cT x
s. a

Ax b
x 0.

La regi
on factible es
F = {x n : Ax b, x 0} .

5.1 Conceptos y deniciones generales

367

Ejemplo 5.1 Considerese el problema


min. 2x1 + 5x2
x1 + x2
6
x1 2x2 18

s. a

x1 , x2 0.
Las variables de decision son x1 y x2 . La funci
on objetivo 2x1 + 5x2 . Las restricciones, y la
regi
on factible que delimitan, se describen en la gura 5.1. El problema consiste en encontrar
aquel punto de la regi
on factible que haga mnima la funci
on objetivo.
x2

 
0
9

 
0
6


 
6
0

18
0

x1

1
2

Figura 5.1
Region factible del problema de programaci
on lineal del ejemplo 5.1
Un problema de programaci
on lineal se puede expresar de diversas formas sin m
as que
manipular convenientemente la funci
on objetivo o las condiciones. As, el problema,
min. cT x
s. a

Ax b
x 0,

se puede transformar en otro en la denominada forma est


andar (solo con condiciones de igualdad),
min.
cT x
s. a Ax y = b
x, y 0,
sin mas que sustraer un vector y, denominado de variables de holgura. De igual manera, si las
condiciones fuesen Ax b, a
nadiendo el vector y, se llegara a la forma est
andar.

368

Captulo 5. Programaci
on lineal

Si alguna de las variables xi no esta restringida a tomar valores no negativos, se puede


reemplazar por otras dos, xi y xi , tales que
xi = xi xi ,
donde xi 0 y xi 0, con lo que el problema pasa a tener todas sus variables restringidas a
tomar valores no negativos.
De manera an
aloga a la anterior se puede transformar en la forma est
andar un problema
en el que una variable tiene como lmite inferior un valor distinto de cero o incluso lmite
superior. Sobre estas variantes volveremos m
as adelante al estudiar el procedimiento concreto
para tenerlas en cuenta implcitamente en el algoritmo general de resoluci
on de problemas de
programaci
on lineal.
Si en un problema se trata de maximizar una funci
on objetivo, se puede transformar en uno
que la minimice teniendo en cuenta que
maximizar cT x = minimizar cT x.

5.2

Ejemplos de problemas de programaci


on lineal

A continuaci
on describimos un conjunto de problemas cl
asicos cuya modelizacion matematica

da lugar a la formulaci
on de problemas de programaci
on lineal. Estos,
junto con los que se
enuncian en los ejercicios del captulo, representan s
olo una peque
na parte de la gran variedad
de problemas que se pueden plantear en la vida cotidiana bajo la forma de programas lineales.
Ejemplo 5.2 El problema de la dieta alimenticia. Es el problema m
as clasico y sobre el que
se empezaron a ensayar los primeros procedimientos de calculo de soluciones de problemas de
programaci
on lineal. Se trata de elaborar una dieta diaria para un colectivo de personas de
tal forma que se suministre a cada individuo de ese colectivo una cantidad mnima de varios
ingredientes nutritivos. Supongamos que existen en el mercado n alimentos distintos, a unos
costes unitarios c1 , . . . , cn , y que se quiere programar una dieta que contenga al menos b1 , . . . , bm
unidades de m ingredientes nutritivos. Si el alimento j contiene aij unidades del ingrediente i,
y el problema que se plantea consiste en programar el vector dieta xT = [x1 , x2 , . . . , xn ] que
je las cantidades a comprar cada da de cada alimento de tal forma que el coste total sea
mnimo, su formulaci
on es:
minimizar c1 x1 + c2 x2 + + cn xn
sujeta a

a11 x1 + a12 x2 + + a1n xn b1


a21 x1 + a22 x2 + + a2n xn b2
.
.
..
..
am1 x1 + am2 x2 + + amn xn bm
x1 , x2 , . . . , xn 0.

Si se quisiese reformular este problema en la forma est


andar habra que efectuar algunas de
las operaciones descritas en el apartado anterior.

5.2 Ejemplos de problemas de programacion lineal

369

Ejemplo 5.3 El problema de la emisi


on de deuda. El ayuntamiento de una capital de provincia
tiene comprometido gastar en determinados proyectos de infraestructura en cuatro a
nos, 2.000,
4.000, 8.000 y 5.000 millones de pesetas, respectivamente. Se supone que todo ese dinero tiene
que estar disponible el da 1 de Enero del a
no en que se va a gastar.
Para nanciar estos gastos el ayuntamiento planea emitir unos bonos a 20 a
nos con un
interes remunerativo del 7% para la deuda emitida el primer a
no, del 6% para la emitida el
segundo a
no, 6,5% para la del tercer a
no y del 7,5% para la emitida el cuarto a
no. Los intereses
se empiezan a pagar inmediatamente. Si parte del dinero recaudado se depositase en cuentas
a plazo jo, el ayuntamiento sera capaz de obtener el 6% de interes el segundo a
no, el 5,5%
el tercer a
no y el 4,5% el cuarto a
no. El problema que se plantea el ayuntamiento es el de
determinar la estrategia o plan optimo de nanciaci
on.
Si designamos por x1 , x2 , x3 y x4 las cantidades de deuda en miles de millones de pesetas
que tiene que emitir cada unos de los cuatro a
nos, y por y1 , y2 e y3 el dinero a depositar
el segundo, tercer y cuarto a
no en cuentas a plazo jo, el problema se puede formular de la
siguiente manera:
min. 20(0,07)x1 + 20(0,06)x2 + 20(0,065)x3 + 20(0,075)x4
s. a

x1
x2
x3

y1
+ 1,06y1
y2
+ 1,055y2
y3
+ 1,045y3
x4

=
=
=
=

2
4
8
5

x1 , x2 , x3 , x4 , y1 , y2 , y3 0.

Ejemplo 5.4 El problema del plan de fabricaci


on. En un taller se fabrican n tipos de piezas
distintos, mecanizandose en m maquinas herramientas. Las piezas se venden a c1 , c2 , . . . , cn
pesetas la unidad. La pieza tipo j requiere aij minutos de mecanizacion en la m
aquina i. Si la
maquina i esta disponible bi minutos a la semana y se trata de maximizar el benecio obtenible
con la producci
on de piezas de una semana, el problema se puede formular como programa
lineal de la siguiente manera:
maximizar c1 x1 + c2 x2 + + cn xn
sujeta a

a11 x1 + a12 x2 + + a1n xn b1


a21 x1 + a22 x2 + + a2n xn b2
..
..
.
.
am1 x1 + am2 x2 + + amn xn bm
x1 , x2 , . . . , xn 0.

Ejemplo 5.5 El problema del transporte. Una empresa dispone de m f


abricas capaces de fabricar mensualmente a1 , a2 , . . . , am cantidades de un producto. Este producto ha de ser enviado
en cantidades b1 , b2 , . . . , bn a n almacenes. Si el coste de enviar una unidad de producto de la
f
abrica i al almacen j es cij , se trata de determinar las cantidades xij que habr
a que enviar
de cada f
abrica a cada almacen ver gura 5.2 de tal forma que el coste del transporte sea

370

Captulo 5. Programaci
on lineal

F
abrica

Almacen

a1

b1

a2

b2

am

bn

Figura 5.2
Representacion gr
aca del problema del transporte
mnimo y se satisfagan los requerimientos de envos a realizar. Es decir,
minimizar


ij

sujeta a

cij xij

n

j=1
m

i=1
xij

xij = ai ,

para i = 1, . . . , m

xij = bj ,

para j = 1, . . . , n

0,

para i = 1, . . . , m
j = 1, . . . , n.

n
Es evidente que al formular el problema se tendr
a que cumplir que m
i=1 ai =
j=1 bj , para
que el total de las cantidades producidas sean igual al de las que llegan a los almacenes.

Ejemplo 5.6 El Problema de la planicaci


on de la generaci
on de energa de una empresa
electrica. Una empresa que se dedica a producir, transportar y distribuir energa electrica esta
estudiando la evoluci
on de su demanda y c
omo hacerle frente en el futuro. Para ello dispone de
cuatro formas posibles de generar energa electrica: centrales termoelectricas con gas natural
como combustible, centrales hidroelectricas, molinos de viento y centrales de carbon.
La demanda electrica de esta compa
na se caracteriza por tres parametros esenciales: el
nos del
consumo anual de energa, estimado en 1.750 TWh2 para el conjunto de los diez a
estudio; la demanda m
axima de potencia, estimada en 3.000 GW3 para el a
no n
umero 10; y
la potencia diaria media demandada en un da de invierno, estimada en 2.000 GW para el a
no
n
umero 10.
2
3

1 TWh=109 kWh
1 GW=106 kW

5.2 Ejemplos de problemas de programacion lineal

371

Los par
ametros de las distintas centrales contempladas en los planes son las de la tabla 5.1.
La compa
na desea elaborar el plan optimo de equipamiento para esos diez a
nos, en el que se
Tabla 5.1
Par
ametros del problema de la planicaci
on de la generaci
on de energa de una empresa
electrica
Centrales para 1000 GWh de Producci
on Anual
Potencia
Potencia Coste de Coste total
garantizada m
axima inversi
on actualizado
6
6
6
Tipo de Central
10 kW
10 kW 10 ptas.
106 ptas.
Gas
Hidroelectricas
Carb
on
Molinos de viento

0,15
0,10
0,80
0,10

0,20
0,10
0,90
0,40

61
40
100
60

65
42
110
64

detalle que centrales son necesarias para hacer frente a las demandas especicadas y se minimice
el coste total actualizado necesario para abordar dicho plan. Existe adem
as la restriccion de
no poder gastar m
as de 350.000 millones de pesetas en este perodo.
Designando por x1 , x2 , x3 , x4 el n
umero de unidades de cada tipo de generaci
on posible que
instalar, el problema se puede formular de la siguiente manera:
min.

65x1 + 42x2 + 64x3 + 110x4

s. a 0,15x1
0,2x1
10x1
61x1

+
+
+
+

0,1x2
0,1x2
10x2
40x2

+
+
+
+

0,1x3
0,4x3
10x3
60x3

+
+
+
+

0,8x4
0,9x4
10x4
100x4

2.000
3.000
1.750
350.000

x1 , x2 , x3 , x4 0.

Referencias
La introducci
on que se hace en este captulo a la programaci
on lineal es la tradicional. Unas
buenas referencias para estudiar c
omo se plantean los problemas de programaci
on lineal, los
orgenes de esta, tanto tecnicos como economicos, y su evolucion en los u
ltimos a
nos son:
Bazaraa y Jarvis [1977]; Bazaraa, Jarvis y Sherali [1990]; Chv
atal [1983]; Cook y Russell
[1977]; Dantzig [1963] y [1987]; Dorfman, Samuelson y Solow [1958]; Gill, Murray y Wright
[1991]; Luenberger [1984]; Murty [1983]; Orchard-Hays [1988]; Pfaenberger y Walker [1976];
Reklaitis, Ravindran y Ragsdell [1983]; Schrijver [1986]; Simonnard [1972] y [1973] y Sordet
[1970].

372

Captulo 5. Programaci
on lineal

Ejercicios
5.1. Un fabricante desea producir una aleaci
on de metales compuesta en peso por un 30% de un metal
A y por el restante 70% de otro metal B. Para ello dispone de cinco aleaciones cuya composicion
en metales A y B y precios por kilo es la de la tabla siguiente.
Aleacion
%A
%B
Ptas./kilo

1
10
90
500

2
25
75
400

3
50
50
300

4
75
25
200

5
95
5
150

La aleacion deseada se producira mezclando alguna de las aleaciones de la tabla. El fabricante


desea encontrar que cantidades debe mezclar de cada aleacion de tal forma que el coste que ello
requiera sea mnimo. Formular este problema como un problema de programaci
on lineal.
5.2. Una renera de petroleo se abastece de dos tipos de crudo: uno ligero, cuyo coste por barril es
de 35 dolares, y otro pesado, a 30 dolares por barril. La renera produce gasolina para coches,
fuel-oil para calefaccion y queroseno para aviacion, en las cantidades por barril de crudo que
indica la siguiente tabla.
Crudo ligero
Crudo pesado

Gasolina
0,3
0,3

Fuel-oil
0,2
0,4

Queroseno
0,3
0,2

La renera ha contratado suministrar 900.000 barriles de gasolina, 800.000 de fuel-oil de calefaccion y 500.000 de queroseno. Los responsables de su gestion desean encontrar que cantidades
de crudo deben comprar con el n de acometer sus compromisos al mnimo coste. Formular este
problema como un problema de programaci
on lineal.
5.3. El director del departamento de atenci
on a los pasajeros de la compa
na aerea Satz Air Lines
tiene que decidir cuantas auxiliares de vuelo debe contratar y entrenar en los pr
oximos seis meses.
Delante de el tiene la siguiente tabla que le informa de cu
ales son los requisitos de esos seis meses
en horas de vuelo de azafata.
Mes
Enero
Febrero
Marzo
Abril
Mayo
Junio

Horas necesarias
8.000
7.000
8.000
10.000
9.000
12.000

Dos factores complican el problema:


a) El entrenamiento completo de una azafata necesita un mes; la contratacion, por tanto, debe
hacerse un mes antes de que se necesite su concurso.
b) El entrenamiento de una azafata nueva requiere la dedicaci
on a ese menester de un cierto
tiempo del de una ya entrenada; en concreto, 100 horas.
Al director del mencionado departamento no le preocupa Enero dado que tiene una plantilla
de 60 azafatas disponibles para esa fecha. Los acuerdos negociados en convenio colectivo en esa
compa
na impiden que una azafata trabaje m
as de 150 horas al mes. En Enero, por tanto, tiene
disponibles 9.000 horas de azafata: 1.000 m
as de las que necesita.

Ejercicios

373

Los registros y archivos de la compa


na aseguran que, cada mes, el 10 por ciento de las azafatas
abandonan el trabajo por matrimonio u otras razones.
El coste real mensual de una azafata para la compa
na Satz es de 500.000 ptas., todo incluido
(salario, S.S., benecios, dietas, etc.), independientemente de cuanto trabaje por supuesto que
no puede trabajar m
as de 150 horas. Entrenar una azafata nueva le cuesta 250.000 ptas.
Formular el problema que quita el sue
no a nuestro valeroso directivo como un programa de
programacion lineal que trate de minimizar los costes a la compa
na Satz.
5.4. Una peque
na empresa productora de piezas para automoviles fabrica cinco tipos diferentes de
productos. Cada una de las piezas se obtiene por fundici
on de hierro, realizandose posteriormente
su mecanizado-acabado donde se le efect
uan una serie de taladros, torneados y pulidos. Los
requerimientos en horas-hombre (por cada cien unidades) de los distintos tipos de piezas, se
indican en la tabla siguiente.
Pieza
Fundicion
Acabado

1
2
3

2
1
2

3
3
2

4
3
1

5
1
1

El benecio que obtiene la empresa de la venta de cien unidades de cada una de estas piezas
es 3.000, 2.000, 4.000, 2.500 y 1.000 pesetas, respectivamente. La capacidad en los proximos dos
meses de las unidades de fundicion y mecanizado son 700 y 1.000 horas-hombre, respectivamente.
Formular el problema de determinar que cantidades de cada una de las cinco piezas se han de
fabricar con vistas a maximizar el benecio obtenible.
5.5. Un fabricante de textiles tiene dos f
abricas, dos proveedores de materias primas y tres centros de
venta. El coste del transporte en ptas./tonelada de las materias primas a las dos f
abricas y de
estas a los centros de venta se indican a continuacion.

Prov. 1
Prov. 2

Fabrica
A
B
100 150
200 150

Fabrica A
Fabrica B

Centro de Venta
1
2
3
400 200 100
300 400 200

El primer proveedor puede suministrar 10 toneladas de materia prima y el segundo 15. Los centros
de venta necesitan 8, 14 y 3 toneladas de productos, respectivamente. La capacidad de procesado
de la materia prima de las fabricas se puede considerar ilimitada.
a) Formular el problema de encontrar que cantidades se deben transportar de los proveedores
a las fabricas y de estas a los centros de venta como un problema general de programacion
lineal.
b) Reducir el problema a uno simple de transporte con dos orgenes y tres destinos, tratando
de encontrar los caminos de coste mnimo de los proveedores a los centros de venta.
c) Supongase que la fabrica A posee una capacidad de procesado de materia prima de 8 toneladas y la fabrica B de 7 toneladas. Descomponer el problema en dos problemas de transporte.
5.6. Una empresa que posee un molino agrcola fabrica comida para ganado, ovejas y pollos. Las
diversas comidas se fabrican mezclando cuatro ingredientes basicos: maz, pescado, soja y trigo.
Todos estos ingredientes poseen los siguientes elementos nutritivos: vitaminas, protenas, calcio y
grasa. Los contenidos unitarios en elementos nutritivos de cada uno de los ingredientes se indican

374

Captulo 5. Programaci
on lineal

en la siguiente tabla.
elemento nutritivo
vitaminas protenas calcio
8
10
6
6
5
10
10
12
6
4
8
6

ingrediente
Maz
Trigo
Soja
Pescado

grasa
8
6
6
9

El objetivo del molino es conseguir producir 10, 6 y 8 toneladas de comida para ganado, ovejas
y pollos, respectivamente. Debido a unas restricciones solo es posible conseguir 6 toneladas de
maz, 10 de trigo, 4 de soja y 5 de pescado. El precio por kilo de estos ingredientes es 20, 12, 24
y 12 pesetas, respectivamente. El mnimo y maximo de unidades de elementos nutritivos que se
permiten por kilo para la comida de ganado, de ovejas y pollos, se indica a continuaci
on.

producto
Ganado
Ovejas
Pollos

vitaminas
min. max.
6

4
6

elemento nutritivo
protenas
calcio
min. max. min. max.
6

grasa
min. max
4
8
4
6
4
6

Formular que cantidades se deben mezclar de los distintos ingredientes para satisfacer la demanda
a coste mnimo.
5.7. El encargado de la cocina de una ciudad sanitaria tiene que confeccionar un plan de men
us. Debe
empezar con el almuerzo. Su men
u debe constar de tres platos o categoras: vegetales, carne y
postre. El coste en pesetas de las diversas posibilidades que maneja se indica en la siguiente tabla.
hidratos de carbono

vitaminas

protenas

grasas

coste

Vegetales
Guisantes
Judas verdes
Maz
Macarrones
Arroz

1
1
2
4
5

3
5
6
2
1

1
2
1
1
1

0
0
2
1
1

10
12
9
10
7

Carne
Pollo
Pescado
Vaca

2
3
3

1
6
8

3
6
5

1
1
2

70
63
120

Postre
Naranja
Manzana
Helado
Pudding

1
1
1
1

3
2
0
0

1
0
0
0

0
0
0
0

10
12
12
15

Supongase que los requerimientos mnimos de la dieta para el almuerzo son 5 unidades de hidratos
de carbono, 10 de vitaminas, 10 de protenas y 2 de grasa.
a) Formular el problema de planicar el almuerzo de mnimo coste como un programa de
programacion lineal.
b) Pensar como podran planicarse todas las comidas de la semana.

Ejercicios

375

5.8. Considerese el siguiente problema de programacion lineal:


maximizar x1 x2 + 2x3 + x4
x1 + x2 + x3 + x4 6
x1 x2 2x3 + x4 4

s. a

x1 , x2 , x3 , x4 0.
a) Introducir las variables de holgura necesarias para transformarlo en forma est
andar.
b) Dibujar la regi
on factible.
c) Interpretar que es la factibilidad en esa region factible.
d) Si se sabe que la solucion optima de este problema debe tener dos variables iguales a cero y
las otras dos seran positivas, cual debe ser el punto optimo?
5.9. Considerese el siguiente problema de programacion lineal:
maximizar 2x1 +
s. a

x2

x1 + 2x2 16
2x1 + x2 12
x1 , x2 0.

a) Dibujar la regi
on factible.
andar.
b) Introducir las variables de holgura necesarias, x3 y x4 , para transformarlo en forma est
c) Identicar las regiones en el plano x1 , x2 donde las variables de holgura son cero.
5.10. La calidad del aire que se respira en una zona industrial determinada depende de las emisiones
contaminantes de n centrales electricas. Cada central usa m combustibles diferentes. Supongase
que la energa que se necesita de cada central j es bj kilocaloras al da y que la emision de
contaminantes de la central j, debido al combustible i, cada da, es cij . Supongase ademas que
el combustible tipo i cuesta di pesetas por tonelada y que cada tonelada de ese combustible
genera ij kilocaloras en la central j. El nivel de contaminaci
on de la zona no puede exceder de
b microgramos por metro c
ubico. Finalmente, considerese que j es un parametro meteorologico
que relaciona las emisiones de la central j con la calidad del aire en la zona.
a) Formular el problema de determinar la mezcla de combustibles a utilizar en cada central
como un problema de programacion lineal.
b) Como se incorporaran las restricciones tecnologicas que prohben el uso de ciertas mezclas
de combustibles en determinadas centrales?
c) Como se puede asegurar la equidad entre todas las centrales?
5.11. Una region esta dividida en m zonas residenciales y parques empresariales. Cada zona se representa mediante un nudo estando conectados entre s mediante unos arcos que simbolizan las
carreteras o calles que los unen. La gente que vive en una zona se desplaza a trabajar o a comprar
a otras o a las mismas donde viven, de tal forma que cada nudo atrae o genera una serie de viajes.
umero de viajes que se generan en el nudo i cuyo destino son el
En concreto, aij representa el n
nudo j y bij el tiempo que se invierte en ir del nudo i al j. Se desea determinar las rutas que
pueden realizar las personas que viven en esa region.
a) Ilustrar como se podra abordar este problema denominado problema de asignaci
on de
tr
aco.

376

Captulo 5. Programaci
on lineal

b) Estudiar que criterio se podra utilizar como funcion objetivo de este problema y la forma
de resolverlo.
5.12. Una gran empresa dispone de 3.000 millones de pesetas para adjudicar a tres liales el pr
oximo
ejercicio. Debido a compromisos adquiridos referentes a estabilidad en el empleo y a otras razones,
la empresa ha garantizado a esas liales unos niveles mnimos de dotacion monetaria; son: 300
millones para la primera lial, 500 millones para la segunda y 800 millones para la tercera. Debido
a la naturaleza de su negocio, la lial n
umero 2 no puede utilizar mas de 1.700 millones de pesetas
sin tener que ampliar su capital, cosa que no quiere hacer el pr
oximo ejercicio. Cada lial puede
llevar a cabo varios proyectos con el dinero que reciba. Para cada unos de esos proyectos se ha
jado un benecio mnimo obtenible. Alguno de esos proyectos ademas requiere solo una cantidad
determinada de dinero. Las caractersticas de los proyectos en estos terminos se indican en la
tabla que sigue.
filial
1
2
3

proyecto
1
2
3
4
5
6
7
8

beneficio
8%
6%
7%
5%
8%
9%
10%
6%

ximo invertible
ma
600 millones
500 millones
900 millones
700 millones
1.000 millones
400 millones
600 millones
300 millones

Formular el problema de asignar los recursos disponibles a las tres liales como un problema de
programacion lineal de tal forma que se maximice el benecio.
5.13. El estimador de norma l1 del modelo lineal
y = Ax + e
se dene como el vector b = [b1 , . . . , bk ]T que minimiza
n


|yi ai b|,

(5.1)

i=1

donde ai = [ai1 , . . . , aik ].


Formular (5.1) como un problema de programaci
on lineal.
5.14. Estudiar como se podra resolver el problema
minimizar l (a) = max{|a0 + a1 t + a2 t2 + a3 t3 y(t)| : t S}
aplicando programaci
on lineal.
5.15. Se consideran 11 posibles cultivos en 8 regiones agrcolas distintas (en todas las regiones se pueden
cultivar, en un principio, todas las especies). En cada regi
on se cultivan un n
umero de hectareas
determinado de uno o mas de los cultivos seleccionados. Se trata de planicar el cultivo de todas
las regiones de tal forma que se utilice mas ecazmente la tierra y los otros medios de produccion.

Ejercicios

377

Los 11 cultivos se dividen en categoras de acuerdo con la tabla siguiente.


Cultivos de invierno
1 Trigo
2 Cebada
3 Habas
4 Lentejas

Cultivos de verano
5 Algodon variedad 1
6 Algodon variedad 2
7 Arroz
8 Maz
9 Mijo
10 Sesamo (ajonjol)
11 Ca
na de az
ucar

Las variables que se consideran son:


i = n
umero de la region (8).
j = n
umero del cultivo (11).
rij = factor de ingresos netos por hectarea de cultivo j en la region i.
umero de hectareas a asignar al cultivo j en la region i.
xij = n
umero actual de hectareas del cultivo j en la region i.
yij = n
wi = area total de cultivos de invierno en la regi
on i.
vi = area total de cultivos de verano en la region i.
yi = area total de cultivos en la region i (wi < yi y vi < yi ).
na de az
ucar en la region i.
yi11 = hectareas cultivadas actuales con ca
El objetivo que se persigue es maximizar los ingresos en funcion de la producci
on de cada cultivo,
aij , del precio de venta de lo cultivado, pj , y de los costes de operacion, cij (rij = aij pj cij ),
supuestos aij , pj y cij conocidos.
Otras condiciones a tener en cuenta son:
a) Que el n
umero total de hectareas que se pueden dedicar a cultivos de algodon en cada region
i no debe exceder de un tercio del total de hectareas cultivadas en esa region.
b) Que cada region debe cultivar un n
umero de hectareas de ca
na de az
ucar exactamente igual
al que cultiva en la actualidad.
c) Que la cantidad de hectareas que se cultiven de trigo, habas y maz deben ser al menos 0,3,
0,3 y 0,85 veces las que se cultivan en la actualidad.
5.16. Considerese el siguiente sistema de desigualdades lineales:
x1
2x1
3x1
5x1

2x2 + x3 x4 x5 + x6 13
+ x2 12x3 + 2x4 + 3x5 + 4x6 1
+ 13x2 + 18x3 + 17x4 + 25x5 + 12x6 3
+ 3x2 8x3 + 13x4 + 8x5 7x6 5
xj 0 para j = 1, . . . , 6.

Formular como programa lineal el problema de determinar una soluci


on factible, x, del mismo
que haga que se satisfagan estas desigualdades tan cerca como sea posible del valor que las hara
igualdades.
5.17. Transformar el problema de programaci
on matematica,
minimizar 6x1 + 5x2 3x3
s. a

x1 + 2x2 7x3 1
|3x1 5x2 20| 4
xj 0 para j = 1, . . . , 3,

378

Captulo 5. Programaci
on lineal
en un problema de programaci
on lineal. Que pasa si se a
nade la condicion |x1 2x2 +3x3 30| 5?
Contin
ua siendo posible transformar el problema en otro de programaci
on lineal?

Captulo

TEORIA BASICA
DE LA
LINEAL
PROGRAMACION

ON EL OBJETIVO de profundizar en el conocimiento de lo que representa un


programa lineal, antes de abordar en captulos posteriores algunos resultados fundamentales para comprender el porque de las diversas formas de resolver problemas
de programaci
on lineal y su mec
anica, en este captulo presentamos los aspectos
geometricos mas destacados y la teora b
asica que fundamenta la programaci
on

lineal.

6.1

Consideraciones geom
etricas sobre la programaci
on lineal

Ejemplo 6.1 Consideremos el siguiente problema:


min. x1 3x2
s. a

x1 + x2 6
x1 + 2x2 8
x1 , x2 0.

Lo que se plantea es determinar aquel punto de la regi


on factible que se representa en la gura 6.1 que minimiza la variedad lineal (en este caso una recta) z = x1 3x2 . Como el objetivo
es minimizar z, esta variedad lineal se encontrar
a desplazada respecto de su subespacio de referencia, x1 3x2 = 0, en la direcci
on que minimice mas dicho objetivo: esto es, en la direcci
on
c = [1, 3]T , opuesta al vector caracterstico1 de z. Cuando se alcanza el punto optimo del
problema, x = [4/3, 14/3]T , es imposible, manteniendo la factibilidad de la soluci
on, mover
on de c.
mas z = x1 3x2 en la direcci
1

Sobre este concepto volveremos inmediatamente: ver denici


on 6.4.

379

380

Captulo 6. Teora basica de la programacion lineal

x2
 

Optimo:

0
6

 

4/3
14/3

0
4

x1 3x2 = 46/3

 
6
0

1
c = 3

x1

Figura 6.1
Resolucion geometrica del problema de programaci
on lineal del ejemplo 6.1

El punto optimo, como se puede observar, se ha alcanzado en un punto extremo de la regi


on
factible del problema.
En el ejemplo anterior s
olo existe un punto optimo. La soluci
on, sin embargo, se puede
presentar bajo formas diversas:
1. Soluci
on
optima u
nica. Ocurre siempre en un punto extremo de la regi
on factible. En
la gura 6.2 se describen las dos alternativas que se puede presentar este caso: regi
on
factible acotada y no acotada. El que la regi
on factible no este acotada no afecta a la
solucion; puede que s a la forma de llegar a ella.
2. Soluciones
optimas alternativas. Este caso se representa en la gura 6.3. El optimo es
cualquiera de los puntos de una denominada cara de la regi
on factible. En (a) la regi
on
factible esta acotada mientras que en (b) no.
3. Soluci
on
optima no acotada. Este caso se presenta cuando la conguraci
on regi
on factiblefunci
on objetivo tiene la forma de la gura 6.4 (a): es posible desplazarse tanto como se
desee dentro de la regi
on factible en la direcci
on c sin encontrar un punto extremo o
cara de la regi
on factible que bloquee dicho desplazamiento.

381

tim

tim

6.1 Consideraciones geometricas sobre la programacion lineal

(b)

Op

Op

(a)

Figura 6.2
Soluci
on optima u
nica nita: (a) regi
on factible acotada; (b) regi
on factible no acotada

ptimos
O

(a)

p
O
tim

(b)

os

Figura 6.3
Soluciones optimas alternativas: (a) regi
on factible acotada; (b) regi
on factible no acotada

382

Captulo 6. Teora basica de la programacion lineal

x1 + 2x2 2

2x1 x2 3

(a)
 

x2 3

0
3

 
0
1


c

3/2
0

8/3
7/3


(b)

Figura 6.4
(a) Soluci
on optima no acotada. (b) Regi
on factible vaca
4. Regi
on factible vaca. El siguiente ejemplo ilustra este caso:
min. 2x1 + 3x2
s. a x1 + 2x2 2
2x1 x2 3
x1 0
x2 3.
Su regi
on factible es el pues no hay ning
un x = [x1 , x2 ]T que satisfaga todas las condiciones. El problema se dice no factible o inconsistente. En la gura 6.4 (b) se representa
este problema.

6.1.1

Representaci
on geom
etrica del programa lineal en el subespacio de
bienes

La representacion geometrica de los programas lineales que se han presentado en el apartado


anterior se reere al denominado en la literatura especializada en programaci
on lineal subespacio de actividad de n : el subespacio donde se representan los puntos x. Es el subespacio donde
la expresi
on de la regi
on factible, o conjunto de puntos interiores a la zona que delimitan los
hiperplanos que denen cada una de las condiciones, es m
as intuitiva. En apartados posteriores
veremos como caracterizar este subespacio.
En este apartado vamos a considerar el problema en el subespacio denominado de bienes:
el subespacio que denen los vectores columna de la matriz A o subespacio imagen de A:
Im(A). Adem
as de subespacio de bienes, en programaci
on lineal a este subespacio tambien se
le denomina subespacio requisito o subespacio de productos.

6.1 Consideraciones geometricas sobre la programacion lineal

383

Denici
on 6.1 Un conjunto C n se dice convexo si y solo si para todo par de puntos
x1 , x2 C todas las combinaciones de la forma x = x1 + (1 )x2 , con 0 1, estan
en C.
Es decir, cuando para cada par de puntos del conjunto convexo, todos los puntos de la recta
que los une estan en el conjunto: ver gura 6.5.

Figura 6.5
Conjuntos convexo y no convexo; cono convexo
La expresion x = x1 + (1 )x2 , 0 1, dene la combinaci
on convexa de x1 y
x2 . Si 0 < < 1, es decir (0, 1), la combinaci
on se denomina estrictamente convexa. El
concepto de combinacion convexa se puede generalizar a cualquier n
umero nito de puntos de
la siguiente manera:
x=

p


i xi ,

i=1

donde

p


i = 1,

i 0,

i = 1, . . . , p.

i=1

Teorema 6.1 El conjunto K = {x n : Ax = b, x 0}, de soluciones de un programa


lineal, es un conjunto convexo.
n. Sean x1 , x2 K y [0, 1]. Para demostrar el enunciado es suciente probar
Demostracio
= x1 + (1 )x2 K.
que x
Como x1 y x2 pertenecen a K, de la denici
on de este se deduce que Ax1 = b y x1 0, y
que Ax2 = b y x2 0, respectivamente.
El hecho de que [0, 1] implica que 0 y que (1 ) 0.
Combinando estas propiedades se tiene que
Ax1
x1
(1 )Ax2
(1 )x2

= b
0
= (1 )b
0.

(6.1)
(6.2)
(6.3)
(6.4)

384

Captulo 6. Teora basica de la programacion lineal

Sumando las expresiones de (6.1) y (6.3) se obtiene que


Ax1 + (1 )Ax2 = b + (1 )b.
Reagrupando terminos se llega a que
A[x1 + (1 )x2 ] = [ + (1 )]b = b
Sumando las expresiones de (6.2) y (6.4) se obtiene que
x1 + (1 )x2 0.
0, por lo que queda
A partir de las dos u
ltimas expresiones es claro que A
x = b y que x
K.
probado que x
Denici
on 6.2 Un conjunto C n se dice un cono si para todo x C, x C para
todo escalar , 0. Un cono que tambien es convexo se denomina cono convexo.
El conjunto {x m : x = A, A mn , n , 0} es un cono convexo generado
por los vectores columna de la matriz A.
Denici
on 6.3 Un punto x en un conjunto convexo C es un punto extremo de C si y solo
si no es interior a un segmento de recta contenido en C. Dicho de otra forma, si y s
olo si,
x = (1 )y + z

6.1.1.1

con

0<<1

y y, z C

x = y = z.

Factibilidad y condiciones de igualdad

Consideremos ahora el problema de programaci


on lineal en forma est
andar,
min. cT x
s. a

Ax = b
x 0,

donde x n y A mn . Si el vector columna j de la matriz A se designa por aj , el problema


se puede reescribir de la siguiente manera:
min.

n


cj xj

j=1

s. a

n


aj xj = b

j=1

x1 , . . . , xn 0.
T
Es decir, un problema de programaci
on lineal busca un vector

n x = [x1 , . . . , xn ] tal que, dados


as j=1 cj xj mnima.
a1 , . . . , an , se cumpla que j=1 aj xj = b, siendo adem

6.1 Consideraciones geometricas sobre la programacion lineal

385

Teniendo en cuenta las deniciones anteriores, el problema se puede enunciar como el de


la b
usqueda de un vector de escalares no negativos, x, que combinen de forma optima los
vectores columna de la matriz A para que b pertenezca al cono convexo por ellos generado y
se minimice el valor alcanzable por la funci
on objetivo.
En la gura 6.6 se representan en dos dimensiones los casos de un problema con regi
on
factible no vaca y otro con regi
on factible vaca. En el segundo caso, (b), los vectores a1 , a2 ,
a3 y a4 no se pueden combinar convexamente de ninguna manera que contenga a b.

Ejemplo 6.2 Consideremos las regiones factibles que determinan los dos conjuntos de condiciones siguientes:
= 2
2x1 + x2 + x3
x1 + 3x2
+ x4 = 3
x1 , x2 , x3 , x4 0
y
= 1
2x1 + x2 + x3
x1 + 3x2
+ x4 = 2
x1 , x2 , x3 , x4 0.
En la gura 6.7 se representan los conos convexos que generan los vectores a1 , a2 , a3 , a4
y b de estos dos conjuntos de condiciones. En (a), b esta contenido en dicho cono convexo; en
(b) no: el primer problema es factible mientras que el segundo es inconsistente.

a1

(a)
a3

(b)
a1

a4

a3

a4

b
a2
a2

Figura 6.6
Interpretaci
on geometrica de la factibilidad de un programa lineal: (a) regi
on factible no
vaca; (b) regi
on factible vaca

386

Captulo 6. Teora basica de la programacion lineal

a2

a2

(a)

(b)

b
b
a4

a4
a3

a3
a1

a1

Figura 6.7
Regiones factibles del ejemplo 6.2: (a) no vaca; (b) vaca
6.1.1.2

Factibilidad y condiciones de desigualdad

Consideremos los problemas de programacion lineal de la siguiente forma:


min.

n


cj xj

j=1
n


aj xj b

s. a

j=1

x1 , . . . , xn 0.
Si existe solucion factible, la intersecci
on del cono convexo que generan los vectores a1 , . . . , an
y el conjunto de vectores menores o iguales que b debe ser no vaca.
En la gura 6.8 se describen el vector b y los vectores columna de dos programas lineales de
acuerdo con esta u
ltima forma de ver geometricamente el problema. En (a) la regi
on factible
es no vaca y en (b) es vaca.
6.1.1.3

Optimo

Reriendonos una vez m


as al problema de programaci
on lineal en forma est
andar, recordemos
que se trata de encontrar una combinaci
on lineal de los vectores columna de la matriz A tal
que, estando b en el cono convexo por ellos generado, minimice la funci
on objetivo. Es decir,
encontrar unos escalares no negativos x1 , x2 , . . . , xn tales que


c1
c
c
z
x + 2 x2 + + n xn =
,
a1 1
a2
an
b

y se minimice z. Se busca pues expresar el vector [z, bT ]T en el cono convexo que generan los
vectores [c1 , aT1 ]T , . . . , [cn , aTn ]T , para el valor m
as peque
no posible del escalar z.

6.1 Consideraciones geometricas sobre la programacion lineal

387

a2
a2

a1

a3

a3

a1
b
b

(a)

(b)

Figura 6.8
Programa lineal con condiciones de desigualdad: (a) regi
on factible no vaca; (b) regi
on
factible vaca
Ejemplo 6.3 Consideremos el siguiente problema de programaci
on lineal:
min. 2x1 3x2
x1 + 2x2 2
x1 , x2 0.

s. a

A
nadiendo la variable de holgura x3 , el problema se puede expresar como el de encontrar unos
escalares x1 , x2 , x3 0 tales que


2
3
0
z
x +
x +
x =
1 1
2 2
1 3
2

y ademas se minimice z. En la gura 6.9 se representa el cono que generan los vectores [2,
1]T , [3, 2]T , y [0, 1]T . Se trata de encontrar el vector [z, 2]T de este cono convexo que haga
mnimo z. La soluci
on es z = 4 con x1 = 2 y x2 = x3 = 0.
Ejemplo 6.4 Sea ahora el programa lineal
min. 2x1 3x2
s. a

x1 + 2x2 2
x1 , x2 0.

La soluci
on optima es no acotada. Si se sustrae de la primera condici
on la variable de holgura
x3 , el problema se reduce a encontrar unos escalares x1 , x2 , x3 0 tales que se cumpla que


2
3
0
z
x +
x +
x =
,
1 1
2 2
1 3
2

388

Captulo 6. Teora basica de la programacion lineal

 


3
2

Puntos de la forma

z
2

 

Valor mnimo: z = 4

2
1

0
1

Figura 6.9
Descripcion geometrica del ejemplo 6.3

y se minimice z. En la gura 6.10 se describe el cono que generan los vectores [2, 1]T , [3,
2]T y [0, 1]T . En ese cono se pueden encontrar puntos de la forma [z, 2]T , con z tan peque
na
como queramos: el valor optimo de la funci
on objetivo es, por consiguiente, .
 
Puntos de la forma

3
2

z
2




2
1


 
0
1

Figura 6.10
Geometra del ejemplo 6.4

6.2 Politopos

6.2

389

Politopos

A continuaci
on vamos a caracterizar lo que en apartados anteriores denomin
abamos subespacio
de actividad, y formalizar todas las impresiones que hasta este momento habr
a ido adquiriendo el lector sobre la programaci
on lineal con los ejemplos, guras y resultados presentados.
Razonaremos en n .
Denici
on6.4 Llamaremos hiperplano
H de vector caracterstico a n , a = 0, al con
junto H = x n : aT x = c , con c .
De acuerdo con esto,
aT x = c,

a1 x1 + + an xn = c,

T x = c es ecuacion de H si y solo si existe un


es una ecuacion del hiperplano. Es claro que a
= a y c
= c.
= 0 tal que a
Un hiperplano es el conjunto de soluciones de una ecuaci
on lineal.
Denici
on 6.5 Un hiperplano en n es una variedad lineal (n 1)-dimensional.
Denici
on 6.6 Dado un hiperplano H por su ecuaci
on aT x = c, llamaremos semiespacios
cerrados de borde H a los conjuntos


H+ = x n : aT x c
y

H = x n : aT x c ,
y semiespacios abiertos de borde H a

H+

= x n : aT x > c

n
T
H = x  : a x < c .

e y pertenecen al hiperplano,
Si dos puntos x
aT y = c c = 0.
aT x
Es decir, aT (
x y)=0. En la gura 6.11 se representa el hiperplano x1 + 4x2 = 11, su vector
caracterstico a = [1, 4]T y los semiespacios H+ y H .
Un hiperplano H y sus correspondientes semiespacios se pueden tambien referenciar con
H. De acuerdo con esto,
respecto a un punto jo x


) 0 ,
H+ = x n : aT (x x

390

Captulo 6. Teora basica de la programacion lineal

H+
y

H
a

Figura 6.11
Representacion del hiperplano x1 + 4x2 = 11, y los semiespacios que dene


) 0 ,
H = x  : a (x x
n

) > 0
H + = x n : aT (x x
y

n
T
) < 0 .
H = x  : a (x x

El vector a esta dirigido hacia el exterior de H o hacia el interior de H+ . En efecto, si


y H y w H , se tiene que
aT (w y) = aT w aT y c c = 0.
Es decir, a forma un angulo obtuso con cualquier vector dirigido hacia el interior de H : esta
por consiguiente dirigido hacia el exterior de H .
Los semiespacios de borde H son convexos; la uni
on de H+ y H es el espacio n .
Denici
on 6.7 Un politopo es un conjunto formado por la intersecci
on de un n
umero nito
de semiespacios cerrados.
Denici
on 6.8 Un politopo c
onico es un conjunto formado por la intersecci
on de un n
umero
nito de semiespacios cerrados que pasan por un punto determinado.
Denici
on 6.9 Un poliedro es un politopo acotado y no vaco.
Es f
acil comprobar que la intersecci
on de conjuntos convexos es convexa y que por lo tanto
los politopos y los poliedros son conjuntos convexos.

6.3 Puntos extremos y soluciones basicas factibles

391

El conjunto P = {x n : Ax = b, x 0}, de soluciones de un programa lineal (regi


on
factible) es un politopo convexo. En efecto, la ecuaci
on
a1 x1 + a2 x2 + + an xn = b1
es equivalente al sistema de desigualdades
a1 x1 + a2 x2 + + an xn b1
a1 x1 + a2 x2 + + an xn b1 ,
es decir, resulta de la interseccion de estos dos semiespacios cerrados, por lo que P es un
politopo. Que es convexo lo demuestra el teorema 6.1 de la p
agina 383.
Denici
on 6.10 El conjunto intersecci
on de todos los conjuntos convexos que contienen a
n
un subconjunto S  se llama envoltura convexa de S y se designa por Co(S).
Denici
on 6.11 Se denomina hiperplano soporte de un conjunto convexo C a un hiperplano H tal que H C = y C H+ o C H . Es decir, a un hiperplano que contiene al
conjunto C en uno de sus semiespacios cerrados de borde H y alg
un punto frontera de C.
Denici
on 6.12 Si P es un politopo convexo y H cualquier hiperplano separador de P , la
interseccion F = P H dene una cara de P .
Existen tres tipos especiales de caras.
Denici
on 6.13 Un vertice, una arista y una faceta son caras de un politopo convexo
n-dimensional de dimensiones cero, uno y n 1, respectivamente.
En un politopo convexo, obviamente, los vertices son los puntos extremos. Las aristas son
segmentos de recta que unen dos puntos extremos adyacentes, o rectas semiinnitas que parten
de un punto extremo. Si P = {x n : Ax = b, x 0}, cualquier faceta de P corresponde a
su interseccion con cada uno de los semiespacios que denen las desigualdades
aT1 x b1 , . . . , aTm x bm
y

6.3

x1 0, . . . , xn 0.

Puntos extremos y soluciones b


asicas factibles

Como hemos visto en los ejemplos de apartados anteriores, si un problema de programaci


on
lineal con dos variables tiene una soluci
on optima nita, esta ocurre en un punto extremo de
la regi
on factible que delimitan las soluciones factibles. Como probaremos a continuaci
on, esto
n
tambien se cumple en  .

392

Captulo 6. Teora basica de la programacion lineal

Consideraremos en los sucesivo las condiciones del programa lineal en forma estandar, es
decir
Ax = b
(6.5)
x 0,
donde x n , b m y A mn (n > m).
Si suponemos que el sistema Ax = b es compatible, podemos suponer sin ninguna limitaci
on
que rango(A) = m. Por lo tanto, de las n columnas de la matriz A podemos elegir m columnas
linealmente independientes que formen una base del espacio vectorial que generan los vectores
columna de A subespacio Im(A). Por simplicidad de notaci
on supongamos que esas m
columnas son las m primeras y designemos por B la submatriz m m de A que forman. Como
B es regular, la ecuacion
BxB = b,
se puede resolver de forma u
nica. El vector xT = [xTB , 0T ], que resulta de considerar los
componentes de xB como los m primeros componentes de x, proporciona una de las soluciones
de la ecuacion Ax = b.
Denici
on 6.14 Sea B cualquier submatriz no singular m m resultante de agrupar m
columnas linealmente independientes de A. Si todos los n m componentes del vector x no
asociados a las columnas de B, a los que se denominar
an variables no b
asicas, se hacen cero
y se resuelve la ecuacion Ax = b en los m restantes componentes, denominados variables
b
asicas, la soluci
on resultante de denomina soluci
on b
asica asociada a la matriz b
asica, o
base, B. Las n m columnas de A que no forman parte de B se las agrupa en una matriz
m (n m) denominada matriz no b
asica N (asociada a las variables no b
asicas); en
correspondencia, las variables no b
asicas forman xN .
Es bien sabido, y f
acil de demostrar, que si las m primeras columnas de la matriz A son
linealmente independientes, el sistema Ax = b puede, con una sucesi
on de multiplicaciones y
restas, convertirse a la forma can
onica:
x1
x2
xm

+ a1 m+1 xm+1 + a1 m+2 xm+2 + + a1 n xn = b1


+ a2 m+1 xm+1 + a2 m+2 xm+2 + + a2 n xn = b2
.
..
..
.
 .
+ am m+1 xm+1 + am m+2 xm+2 + + am n xn = bm

Ejemplo 6.5 Consideremos el poliedro de la gura 6.12, denido por


x1 + x2 6
x2 3
x1 , x2 0.
Si a
nadimos las variables de holgura x3 y x4 a la primera y segunda desigualdad, respectivamente, resulta:
x1 + x2 + x3
= 6
x2
+ x4 = 3
x1 , x2 , x3 , x4 0.

6.3 Puntos extremos y soluciones basicas factibles

x2
 

393

 

0
3

3
3

 
6
0

x1

Figura 6.12
Soluciones b
asicas/soluciones basicas factibles
La matriz de los coecientes de las condiciones, A, es


A = [a1 , a2 , a3 , a4 ] =

1 1 1 0
.
0 1 0 1

Las posibles matrices B que se pueden extraer de A y sus correspondientes soluciones b


asicas
son las de la tabla 6.1.
Las soluciones basicas factibles son pues

3
3
,
x1 =
0
0

6
0
,
x2 =
0
3

0
3

x3 =
3
0

0
0
.
y x4 =
6
3

Observese que estos puntos determinan en sus dos primeros componentes los puntos extremos
de la gura 6.12.
Deduzcamos a continuaci
on unos resultados que nos permitir
an en lo sucesivo centrarnos
solo en los puntos extremos del politopo convexo, o regi
on factible, que denen las condiciones
del programa lineal.
Teorema 6.2 (Equivalencia entre puntos extremos y soluciones b
asicas) Sean A mn
m
una matriz de rango m y b  . Sea el politopo convexo
P = {x n : Ax = b, x 0} .
Un vector x P es un punto extremo de P si y s
olo si los vectores columna de la matriz A
asociados a los componentes positivos de x son linealmente independientes.

394

Captulo 6. Teora basica de la programacion lineal

Tabla 6.1
Bases y soluciones basicas del poliedro del ejemplo 6.5


B = [a1 , a2 ] =

1 1
0 1

1 0
B = [a1 , a4 ] =
0 1


1 1
B = [a2 , a3 ] =
1 0


1 0
B = [a2 , a4 ] =
1 1


1 0
B = [a3 , a4 ] =
0 1

xB
xN

xB
xN

xB
xN

xB
xN

xB
xN

x1
1 1
6
3
=
= B 1 b =
=
x
0
1
3
3
 2 
x3
0
=
=
x
0
 4

 
x1
1 0
6
6
1
=
=B b=
=
x
0 1
3
3
 4 
0
x2
=
=
0
x
 3

 
x2
0 1
6
3
1
=
=B b=
=
x
1
1
3
3
 3 
0
x1
=
=
0
x
 4

 

x2
1 0
6
6
1
=
=B b=
=
1 1
3
3
 x4 
x1
0
=
=
x
0
 3

 
x3
1 0
6
6
1
=
=B b=
=
0 1
3
3
 x4 
x1
0
=
=
x2
0

n. Supongamos sin perdida de generalidad que los p primeros componentes del


Demostracio
> 0, y designamos por A
vector x son positivos y los n p u
ltimos cero. Si x = [
xT , 0T ]T , x
x = b.
las p primeras columnas de la matriz A, se tiene que Ax = A
Probemos primero la necesidad de la condici
on enunciada. Supongamos que las columnas

= 0 tal que Aw
= 0.
de A no son linealmente independientes. En este caso existir
a un vector w

= A
0.
De aqu que A(
x w)
x = b y, para un sucientemente peque
no, que (
x w)
Los puntos


+ w

x
y =
0


x
y =
0


estan, por consiguiente, en P . Ademas, dado que x = 21 (y  + y  ), x no puede ser un punto


extremo de P . Como consecuencia de esto, si x es un punto extremo, las columnas de la matriz
A son linealmente dependientes.
Probemos ahora la suciencia. Supongamos que x no es un punto extremo de P . Esto quiere
decir que x = y  + (1 )y  , donde y  , y  P, y  = y  y 0 < < 1. Como x e y  estan en
P , A(x y  ) = Ax Ay  = b b = 0. Ademas, dado que y 1 son estrictamente positivos,
los u
ltimos n p componentes de y  , y por consiguiente de x y  , han de ser cero pues lo son
en consecuencia, son linealmente dependientes. De aqu
los de x. Las columnas de la matriz A,

que, si las columnas de A son linealmente independientes, x es un punto extremo.

6.3 Puntos extremos y soluciones basicas factibles

395

Corolario 6.1 Un punto x P = {x n : Ax = b, x 0} es un punto extremo de P si


y s
olo si x es una soluci
on b
asica factible de
Ax = b
x 0
asociada a una base B.
Corolario 6.2 Un vector x es un punto extremo de P = {x n : Ax = b, x 0} si y
s
olo si x resulta de la intersecci
on de n hiperplanos linealmente independientes.
Corolario 6.3 Un politopo P = {x n : Ax = b, x 0} tiene un n
umero nito de
puntos extremos.
n. Resulta inmediatamente del teorema anterior y del hecho de que haya s
Demostracio
olo
un n
umero nito de posibilidades de escoger m columnas linealmente independientes entre las
n de la matriz A. El n
umero maximo de estas y, por tanto, de puntos extremos de P es

C(n, m) =

n
m

n!
.
m!(n m)!

Cuando A no tiene rango completo puede ocurrir que P = {x n : Ax = b, x 0} sea


el conjunto vaco o que alguna de las condiciones sea redundante. En lo sucesivo supondremos
que A mn tiene m vectores la/columna linealmente independientes.
La correspondencia entre soluciones b
asicas factibles y puntos extremos, en general, no es
biunvoca. A cada soluci
on b
asica factible le corresponde un u
nico punto extremo en el politopo
n
P = {x  : Ax = b, x 0}, pero puede que a cada punto extremo de P le corresponda
mas de una soluci
on b
asica factible.
Denici
on 6.15 Si una o m
as de las variables b
asicas de una solucion b
asica de
Ax = b
x 0,

(6.6)

es cero, la solucion se denomina b


asica degenerada.
Denici
on 6.16 Una soluci
on b
asica de (6.6) en la que todos sus componentes son no
negativos se denomina soluci
on b
asica factible; si alg
un componente es cero, la solucion
b
asica factible se dice b
asica factible degenerada.
Ejemplo 6.6 Consideremos el poliedro representado en la gura 6.13 denido por:
x1 + x2
x2
x1 + 2x2
x1 , x2

6
3
9
0.

396

Captulo 6. Teora basica de la programacion lineal

Si a
nadimos las variables de holgura x3 x4 y x5 a la primera, segunda y tercera desigualdad,
respectivamente, resulta
x1 + x2 + x3
= 6
x2
+ x4
= 3
x1 + 2x2
+ x5 = 9
x1 , x2 , x3 , x4 , x5 0.
Observese, como se describe en la gura 6.13, que la desigualdad x1 + 2x2 9 es redundante.
x2
 

 

0
3

3
3

 
6
0

x1

Figura 6.13
Soluciones b
asicas factibles degeneradas
La matriz de los coecientes de las condiciones, A, es

1 1 1 0 0
A = [a1 , a2 , a3 , a4 , a5 ] = 0 1 0 1 0 .
1 2 0 0 1
Estudiemos la soluci
on b
asica que se obtiene a partir de B = [a1 , a2 , a3 ]:

x1
1 1 1 1 6
0 2 1
6
3
xB = x2 = B 1 b = 0 1 0 3 = 0 1 0 3 = 3 ,
x3
1 2 0
9
1 1 1
9
0
xN

x4
=
x5

0
=
.
0

La soluci
on b
asica factible as obtenida es degenerada, pues su tercer componente es cero.
Analicemos ahora la soluci
on b
asica que se obtiene a partir de considerar B = [a1 , a2 , a4 ]:

x1
1 1 0 1 6
2 0 1
6
3
1
xB = x2 = B b = 0 1 1 3 = 1 0 1 3 = 3 ,
x4
1 2 0
9
1 1 1
9
0
xN

x3
=
x5

0
=
.
0

6.3 Puntos extremos y soluciones basicas factibles

397

Como se puede ver es la misma solucion que obtenamos antes. Si consider


aramos B =
[a1 , a2 , a5 ] llegaramos tambien a la misma solucion b
asica degenerada: [x1 x2 x3 x4 x5 ]T =
[3 3 0 0 0]T . Se puede comprobar que cualquier otra soluci
on b
asica es no degenerada.
Un problema de programaci
on lineal se denomina no degenerado si todas sus soluciones
b
asicas factibles son no degeneradas. En este caso, la correspondencia que mencionabamos
anteriormente entre puntos extremos y soluciones b
asicas factibles s es biunvoca.
Dos soluciones basicas factibles del politopo P = {x n : Ax = b, x 0} se dicen
adyacentes si m 1 de sus componentes que forman la base son comunes. Dos soluciones
adyacentes o puntos extremos estan unidos por una arista. Suponiendo que un programa lineal
es no degenerado, como n m variables no b
asicas pueden reemplazar una de las b
asicas en
una soluci
on b
asica factible, cualquiera de estas (y su correspondiente punto extremo) tiene
exactamente n m adyacentes. Como veremos posteriormente al analizar el algoritmo simplex,
cualquiera de estas soluciones b
asicas factibles adyacentes se puede alcanzar incrementando el
valor de una variable no b
asica desde su valor cero y decrementando el de una b
asica desde el
valor que tenga hasta cero. Este proceso es el que se conoce en la literatura especializada en
programaci
on lineal como pivotaci
on.

6.3.1

Teorema de la representaci
on

Como probaremos a continuaci


on, si el politopo P es un poliedro, cualquier punto de P se
puede expresar como combinaci
on convexa de los puntos extremos de P ver corolario m
as
adelante. Si P no esta acotado la expresi
on de cualquier punto de P es mas complicada y
requiere la siguiente denici
on.
Denici
on 6.17 Una direcci
on del politopo P = {x n : Ax = b, x 0} es un vector
no nulo, d n , tal que para todo x0 P el rayo {x n : x = x0 + d, 0} pertenece
a P.
De forma similar a como se introdujo el concepto de punto extremo de un conjunto convexo,
ahora podemos introducir el de direcci
on extrema.
Denici
on 6.18 Una direcci
on d de un politopo P se dice extrema si no puede ponerse
como combinacion lineal no negativa de dos direcciones diferentes de P . Es decir, no existen
dos direcciones d1 y d2 en P , d1 = d2 , y unos 1 , 2 > 0, tales que d = 1 d1 + 2 d2 .
Cualquier direcci
on de un politopo se puede expresar como combinaci
on lineal no negativa
de las direcciones extremas del politopo. Si P es un poliedro, obviamente, no tiene direcciones.
Teorema 6.3 Sea P = {x n : Ax = b, x 0}. Un vector no nulo d es una direcci
on
de P si y s
olo si d D = {d : Ad = 0, d 0}.
n. Comprobemos primero la necesidad de la condici
Demostracio
on. Sea d una direcci
on de
P . Por denici
on, d = 0 y x + d P para todo x P y 0. Entonces, para todo 0,
A(x + d) = Ax + Ad = b + Ad = b

398

Captulo 6. Teora basica de la programacion lineal

siendo x + d 0 por pertenecer este vector a P . Si en la u


ltima expresi
on, sin perdida
de generalidad, se hace = 1, es evidente que Ad = 0. Como x 0 y x + d 0, debe
cumplirse que d 0 pues si no haciendo arbitrariamente grande se podra conseguir que no
se cumpliese que x + d 0.
Para demostrar la suciencia sean los vectores d D = {d : Ad = 0, d 0, d = 0} y
x P . De la denici
on de D se cumple que d = 0. S
olo queda por probar que x + d P
para todo 0. Se tiene que
A(x + d) = Ax + Ad = b + 0 = b
y como x 0, d 0 y 0, se deduce inmediatamente que x + d 0. Por consiguiente
x + d P para todo 0.
De igual forma se puede probar que d es una direcci
on del politopo P = {x n : Ax
b, x 0} si y solo si Ad 0, d = 0 y d 0. Y del politopo P = {x n : Ax b, x 0}
si y solo si Ad 0, d = 0 y d 0. En general, el conjunto de direcciones de un politopo es el
conjunto de soluciones del correspondiente sistema homogeneo de ecuaciones.
Ejemplo 6.7 Consideremos el politopo P = {[x1 , x2 ]T : x1 2x2 6, x1 x2 2, x1
0, x2 1} de la gura 6.14. Un vector no nulo d = [d1 , d2 ]T es una direccion de P si y solo si
se cumple que
d1 2d2 0
d1 d2 0
d1
0
d2 0.
Dado que d1 y d2 son no negativos, las dos primeras desigualdades equivalen a d1 2d2 y
d1 d2 .
En resumen, d es una direcci
on de P si y solo si [d1 , d2 ] = [0, 0], d1 0, d2 0 y d1 2d2 .
Los vectores que cumplen estas condiciones se representan en la gura 6.14.
Los puntos y direcciones extremos juegan un papel fundamental en programaci
on lineal para
determinar las condiciones en que se obtiene o llega al optimo de un problema. La interpretaci
on
gr
aca de esto la pone de maniesto la gura 6.15.
El politopo no acotado P tiene tres puntos extremos, x1 , x2 y x3 , y dos direcciones extremas,
se puede expresar se la siguiente manera:
d1 y d2 . El punto x
= y + d1
x
esta en la trayectoria del rayo que parte de y en la direcci
para alg
un > 0. Es decir, x
on
d1 . Ahora bien, al estar y en la recta que une x1 y x2 se puede expresar como combinacion
convexa de x1 y x2 . Es decir,
y = x1 + (1 )x2
se tiene que
para alg
un (0, 1). Sustituyendo esta u
ltima expresi
on de y en la de x
= x1 + (1 )x2 + d1 ,
x

(0, 1),

> 0.

De forma mas completa,


= x1 + (1 )x2 + 0x3 + d1 + 0d2 ,
x

(0, 1),

> 0.

6.3 Puntos extremos y soluciones basicas factibles

x2
 
2
4

x0

 

0
2

 
0
1

Margen de direcciones d
x1

Figura 6.14
Direcciones en el politopo del ejemplo 6.7

d1

P
x3

x
x2

d1
y
x1

d2

Figura 6.15
Puntos y direcciones extremos de un politopo P

399

400

Captulo 6. Teora basica de la programacion lineal

se puede expresar como suma de una combinacion convexa de los puntos


En resumen, x
extremos x1 , x2 y x3 y una no negativa de la direcciones extremas d1 y d2 . Esta representaci
on,
evidentemente, no es u
nica, pues bastara, por ejemplo, encontrar otro punto de la recta que
.
une x1 y x2 desde el que, en la direcci
on d2 , se pudiese trazar un rayo que pasase por x
El siguiente resultado, conocido como teorema de la representaci
on, teorema de la resolucion o teorema de Caratheodory, permite generalizar las u
ltimas ideas expresadas mediante
representacion gr
aca. Explcita que cualquier punto del politopo de soluciones factibles de un
programa lineal se puede expresar como una combinaci
on lineal convexa de los puntos extremos
del politopo m
as una combinaci
on no negativa de sus direcciones extremas.
Teorema 6.4 (Teorema de la representaci
on) Todo punto del politopo P = {x n : Ax =
b, x 0} se puede expresar de la forma
x=

i v i + d,

iI

donde {v i : i I} es el conjunto de puntos extremos de P ,


una direcci
on de P , o d = 0.

iI

i = 1, i 0, y d, o es

n. La haremos por inducci


Demostracio
on en p, n
umero de componentes positivos de x. Si
p = 0, el teorema es obvio, pues x = 0 es un punto extremo. Supongamos que se cumple lo
enunciado para puntos con menos de p componentes positivos y que x tiene p componentes
positivos.
Si x es un punto extremo, como x = v i para alg
un i I, el teorema es obvio. Supongamos
por tanto que x no es un punto extremo. En este caso existe un vector w = 0, con wi = 0 si
xi = 0, tal que Aw = 0. Se pueden dar los tres casos siguientes:
(a) Que w tenga componentes positivos y negativos. Consideremos los puntos x() = x + w
en la recta que pasa por x que determina w, y sean  y  el menor valor positivo y mayor
valor negativo, respectivamente, de para los que x() tiene al menos un componente
cero mas que los que tiene x. Los puntos x = x(  ) y x = x(  ) pertenecen claramente
a P por lo que, por la hip
otesis de inducci
on, al tener un componente nulo m
as, se pueden
expresar seg
un lo enunciado en el teorema. En consecuencia, como x esta en la recta que
une x y x , se puede expresar de la siguiente manera
x = x5 + (1 )x6
=

i v i + d + (1 )

iI



5


i v i + d

iI

i + (1 )i v i + d + (1 )d ,

iI

donde =  /(   ).
Como 0 < < 1,
i 0

y i 0,

Ad = Ad = 0,

para todo i I,
d 0

y d 0,


iI

i =


iI

i = 1,

6.3 Puntos extremos y soluciones basicas factibles

se deduce entonces que




i = i + (1 )i 0

para todo i I,

401

i = 1,

iI

d = d + (1 )d 0

y Ad = 0,

quedando probado que x se puede expresar de la forma enunciada.


(b) Que w 0. Denamos x como en el caso (a). El punto x se puede expresar como
x = x +  (w), con  > 0. Como x se puede expresar por inducci
on en la forma deseada
y (w) es una direcci
on en P , x tambien se puede expresar de la forma enunciada.
(c) Que w 0. Este caso se prueba igual que el caso (b) sin m
as que sustituir x ,  y w


por x , y w, respectivamente.
Corolario 6.4 Si el politopo P = {x n : Ax = b, x 0} es no vaco, tiene al menos
un punto extremo.
Corolario 6.5 Si el politopo P = {x n : Ax = b, x 0} es cerrado y acotado (es un
poliedro), todo punto x P se puede expresar como combinaci
on convexa de sus puntos
extremos.
x4

x3
x
x5

x2
y
x1

Figura 6.16
Representacion de un punto de un politopo (poliedro) como combinaci
on convexa de puntos
extremos
Consideremos el poliedro de la gura 6.16, resultante de la intersecci
on de 5 semiespacios
cerrados. Cualquier punto del poliedro, por ejemplo x, se puede representar como combinacion
convexa de algunos (o todos) de los 5 puntos extremos del mismo. En efecto,
x = y + (1 )x4 ,
donde 0 < < 1. El punto y tambien se puede representar como combinacion convexa de x1
y x2 . Es decir,
y = x1 + (1 )x2 ,

402

Captulo 6. Teora basica de la programacion lineal

donde 0 < < 1. Sustituyendo,


x = x1 + (1 )x2 + (1 )x4 .
Como (0, 1) y tambien, , (1) y (1) pertenecen a (0, 1), y +(1)+(1) =
1. Luego x se ha representado mediante una combinaci
on convexa de los puntos extremos x1 ,
x2 y x4 .
Ejemplo 6.8 Consideremos el politopo siguiente:
3x1 + x2 2
x1 + x2 2
x1 + 2x2 8
x2 2.
Sus puntos extremos y direcciones extremas son:


4/3
,
x1 =
2
y

1
d1 =
,
0

2
x2 =
4


4
y x3 =
;
6

2
y d2 =
.
1

Observese que en cada punto extremo solo dos de las cuatro desigualdades se hacen igualdad:
ver gura 6.17.
Sea x = [4, 3]T un punto del politopo. Se puede expresar de la siguiente manera:


4/3
2
4
1
2
4
= 1
+ 2
+ 3
+ 1
+ 2
,
2
4
6
0
1
3

donde 1 = 2 = 21 , 3 = 0, 1 = 37 y 2 = 0. Esta expresi


on no es u
nica ya que haciendo
3
1
on de x como combinacion de
1 = 4 , 2 = 0, 3 = 4 , 1 = 2 y 2 = 0 se obtiene otra expresi
x1 , x2 , x3 , d1 y d2 .

6.3.2

Teorema fundamental de la programaci


on lineal

En este apartado exponemos un teorema esencial para la estrategia de b


usqueda de la soluci
on
de un tipo muy importante de algoritmos de programaci
on lineal. Identica la importancia de
los puntos extremos del politopo (o poliedro) que denen las condiciones del problema en la
identicaci
on de las soluciones b
asicas factibles y del optimo.
Teorema 6.5 Dado un politopo P = {x n : Ax = b, x 0} no vaco, el valor mnimo
de cT x, para x P , se alcanza en un punto extremo de P (soluci
on b
asica factible
optima),
o cT x no est
a acotada inferiormente en P .
n. Sea V = {v i : i I} el conjunto de puntos extremos de P . Como P es no
Demostracio
vaco, al menos tiene un punto extremo v i V . De acuerdo con el teorema de la representacion,
o el politopo P posee una direcci
on d tal que cT d < 0, o tal direcci
on no existe. Consideremos
estos dos casos.

6.3 Puntos extremos y soluciones basicas factibles

403

x2
 
4
x3 = 6

 
2
x2 = 4

P
 
4
x= 3

x1 =

4/3
2


 
2
d2 = 1
 
1
d1 = 0

x1

Figura 6.17
Representacion del politopo del ejemplo 6.8
(a) El politopo P tiene una direcci
on d tal que cT d < 0. En este caso P no esta acotado y
el valor de la funci
on objetivo tiende a en la direcci
on d.
(b) El politopo P no tiene una direcci
on d tal que cT d < 0. En este caso cualquier x P se
puede expresar de una de las dos maneras siguientes:
x=

i v i

donde

iI

x=

i = 1, i 0 o

iI

donde
i v i + d

iI

0.
i = 1, i 0 y cT d

iI

En ambos casos, suponiendo que cT v min es el menor de los elementos del conjunto
{cT v i : i I}, se tiene que
cT x


iI

i cT v i cT v min

5


= cT v min .

iI

Es decir, el mnimo de cT x se alcanza en un punto extremo de P : v min .


Es importante destacar que este teorema no excluye de ninguna manera la posibilidad de
que la soluci
on optima de un programa lineal no se de en un punto extremo. Simplemente pone

404

Captulo 6. Teora basica de la programacion lineal

de maniesto que, de entre todas las soluciones optimas de un programa lineal, al menos una
es un punto extremo del politopo de soluciones factibles.
Ejemplo 6.9 Consideremos el politopo
x1 + x2 2
x1 + 2x2 6
x1 , x2 0.
Sus puntos extremos y direcciones extremas son:


0
,
x1 =
0
y

1
d1 =
0

0
x2 =
2

2
y x3 =
;
4

2
y d2 =
.
1

Supongamos que sobre este politopo se quiere minimizar la funci


on objetivo x1 3x2 . En la
gura 6.18 (a) se describe c
omo el punto optimo no est
a acotado. Se tiene que:


0
= 0;
c x1 = [1, 3]
0
T

0
c x2 = [1, 3]
= 6;
2
T

2
c x3 = [1, 3]
= 10;
4
T

1
c d1 = [1, 3]
=1
0
T

2
c d2 = [1, 3]
= 1.
1
T

El problema es equivalente, por tanto, a


min. 01 62 103 + 1 2
s. a

1 + 2 +

3
= 1
1 , 2 , 3 , 1 , 2 0.

Como cT d2 = 1 < 0 y 2 se puede hacer todo lo grande que queramos sin violar ninguna
condici
on, el optimo evidentemente no esta acotado. Esto, junto con la gura 6.18 (a), ilustra
la condici
on necesaria y suciente de existencia de solucion no acotada: esto es, que cT d < 0.
Consideremos ahora 4x1 x2 como nueva funci
on objetivo sobre el mismo politopo. En la
gura 6.18 (b) se representa el optimo de este problema: x2 = [0, 2]T . En este caso:


0
= 0;
c x1 = [4, 1]
0
T

6.3 Puntos extremos y soluciones basicas factibles

x2

405

x2
x3

x3

P
x2

x2
d2

x1

d2



1
c= 3


 d1
4
c= 1

x1

d1

(a)

x1

(b)

Figura 6.18
Direcciones extremas y optimo: (a) soluci
on optima no acotada; (b) optimo acotado


cT x2 = [4, 1]


0
= 2;
2

2
c x3 = [4, 1]
= 4;
4
T

cT d1 = [4, 1]
y

1
=4
0

2
c d2 = [4, 1]
= 7.
1
T

El problema es equivalente a
min. 01 22 + 43 + 41 + 72
s. a

1 + 2 + 3
= 1
1 , 2 , 3 , 1 , 2 0.

Como los coecientes de 1 y de 2 en la funci


on objetivo son positivos, se puede hacer
1 = 2 = 0. Para minimizar 22 + 43 sujeta a 1 + 2 + 3 = 1, con 1 , 2 , 3 0, se hace
2 = 1 y 1 = 3 = 0, lo que corrobora que el optimo se alcanza en el punto extremo x2 = [0,
2]T .
Basandose en las consideraciones y resultados teoricos de este captulo, ya se puede abordar
el metodo pr
actico por excelencia para resolver problemas de programaci
on lineal: el metodo
simplex. Lo haremos en el siguiente captulo.

406

Captulo 6. Teora basica de la programacion lineal

Referencias
Para estudiar la teora b
asica de la programaci
on lineal a la que nos hemos referido en este
captulo se pueden consultar preferentemente Bazaraa, Jarvis y Sherali [1990], Ignizio y Cavalier
[1994], Fang y Puthenpura [1993] y Goldfarb y Todd [1989].
La interpretaci
on geometrica en los dos subespacios esenciales es bastante estandar; est
a
muy bien explicada en Best y Ritter [1985], Luenberger [1984] y Goldfarb y Todd [1989]. Las
explicaciones ilustradas siguen fundamentalmente a Bazaraa, Jarvis y Sherali [1990], Ignizio y
Cavalier [1994], Fang y Puthenpura [1993] y Best y Ritter [1985]. La exposici
on de la equivalencia entre puntos extremos y soluciones b
asicas factibles es una modicacion de Goldfarb y
Todd [1989]. El teorema fundamental de la programaci
on lineal sigue a Luenberger [1984] y
Goldfarb y Todd [1989], estando apoyada en consideraciones geometricas anes de Bazaraa,
Jarvis y Sherali [1990].
Para completar el estudio te
orico de la programaci
on lineal recomendamos: Schrijver [1986],
desde un punto de vista m
as teorico y Gill, Murray y Wright [1991], mucho m
as pr
actico, con
un perfecto engarce con la teora afn de algebra lineal.
Buenas referencias sobre programacion lineal general son Chv
atal [1983], Dantzig [1963],
Darst [1991], Dorfman, Samuelson y Solow [1958], Fourer, Gay y Kernigham [1993], Hillier y
Lieberman [1995], Karlo [1991], Minoux [1986], Murty [1983], Nash y Sofer [1996], Padberg
[1995], Panik [1996], Saigal [1995], Sierksma [1996], Simonnard [1972] y [1973] y Van de Panne
[1976].

Ejercicios
T

6.1. Determinar, partiendo del punto x = [ 1, 1, 1, 1 ] , alg


un punto extremo del politopo P = {x
4
 : Ax b, x 0}, donde
1 0 3 0
0,0
0 1 0 2
0,5

2 0 1 2
1,5

A = 2 5 2 0
y b = 0,5 .
3 2 3 1
2,5

3 0 9 2
2,0
2 2 0 2
2,0
Es ese punto extremo degenerado? Por que?
6.2. Determinar una solucion basica factible de
x1 + 2x2 x3 + x4 = 3
2x1 + 4x2 + x3 + 2x4 = 12
x1 + 4x2 + 2x3 + x4 = 9
xj 0

para j = 1, . . . , 4.

6.3. Considerese el sistema lineal de desigualdades Ax b, x 0, con b 0. Para transformarlo a


forma estandar se puede introducir el vector de variables de holgura y de tal forma que Axy = b,
x 0, y 0. Hacer bk = maxi bi y considerese el nuevo sistema en forma estandar que se obtiene
a
nadiendo la la k a cada una de las demas las con signo opuesto. Probar que el sistema as
obtenido solo requiere la adicion de una variable de holgura para obtener una soluci
on basica
factible.

Ejercicios

6.4. Determinar la solucion general del siguiente sistema de ecuaciones:


x1 + 2x2 + x3 = 3
x1 + 5x2 + x3 = 6.
6.5. Determinar todas las soluciones basicas del siguiente sistema de ecuaciones:
x1 + x2 + x3 + x4 2x5 = 4
+ x4 x5 = 3.
x1 2x2
6.6. Determinar si el siguiente sistema de ecuaciones lineales,
x1 + 3x2 + x3 x4 = 1
5x2 6x3 + x4 = 0
= 1:
x1 2x2 + 4x3
a) Tiene solucion.
b) No tiene solucion.
c) Tiene muchas soluciones. Cuantas en este caso?
6.7. Sea v n un vector y f : n n , la traslacion
f (x) = x + v.
Probar que si C es un conjunto convexo de n , f (C) es tambien convexo.
6.8. Cual de los siguientes conjuntos es convexo y cual no?
a)
b)
c)
d)
e)
f)

{[x1 ,
{[x1 ,
{[x1 ,
{[x1 ,
{[x1 ,
{[x1 ,

x2 ]T 2 : x21 + x22 1}.


x2 ]T 2 : x1 + x2 1, x1 x2 2}.
x2 ]T 2 : x2 x12 = 0}.
x2 , x3 ]T 3 : x2 x12 , x1 + x2 + x3 6}.
x2 ]T 2 : x1 = 1, |x2 | 4}.
x2 , x3 ]T 3 : x3 = |x2 |, x1 4}.

6.9. Dibujar la regi


on factible denida por las desigualdades
4x1
x1
x1
x1
x1

3x2 15
3
+ x2 4
3x2
9
3x2
6.

Determinar gracamente el mnimo de las siguientes funciones objetivo en esa region:


a)
b)
c)
d)

x1 + 3x2 .
x1 + x2 .
4x1 3x2 .
x1 + x2 .

6.10. Sea A una matriz m n distinta de cero y P el cono


P = {w n : w = AT x, x 0}.

407

408

Captulo 6. Teora basica de la programacion lineal

a) Probar que P es un conjunto convexo.


b) Es P un subespacio de n ? Explicar por que.
6.11. Dibujar la envoltura convexa de los siguientes puntos:
a) [1, 2]T , [1, 1]T , [1, 3]T , [11, 1]T .
b) [1, 2]T , [2, 3]T , [1, 1]T , [11, 0]T .
6.12. Determinar gracamente la solucion de los programas de programacion lineal listados a continuacion. Dibujar la regi
on factible e indicar el comportamiento de la funci
on objetivo en esa region.
Probar gr
acamente que se cumplen las condiciones de optimo en los puntos considerados y no
en los demas.
a) minimizar 2x1 5x2
s. a

x1
2x1
x1
x1
b) minimizar 4x1

+
+

3x2
3x2
x2
2x2
5x2

10
0
3
1.

x1 + 2x2
x1 x2
2x1 + x2
3x1 + 4x2

x1
c) minimizar 23x1 7x2
s. a

3
2
3
8
0.

4x1
x1
x1
3x1
3x1

+ x2 2
+ x2 5
x2 1
+ 2x2 1
0
x2 0.
d) minimizar 9x1 x2
s. a

s. a

6x1 +
3x1
2x1 +
2x1 +
x1 +
e) minimizar x1 +

5x2
2x2
x2
x2
4x2
x2

10
8
3
3
4.

4x1 2x2 6
x1 2x2 4
x1 + x2 1
0
x1
x2 0.
f) minimizar x1 x2
s. a

s. a

3x1 + x2 3
x1 + 2x2 4
x1 x2 1
5
x1
x2 5.

Ejercicios

409

6.13. Determinar todas las soluciones basicas factibles del siguiente sistema de desigualdades:
x1 + x2 + x3 5
x1 + x2 + 2x3 6
xj 0

para j = 1, 2, 3.

6.14. Tiene el siguiente politopo alguna direcci


on? Por que?
= 5
x1 + x2
x1 + x2 + x3 6
x3 1
xj 0

para j = 1, 2, 3.

6.15. Considerese el siguiente problema de programacion lineal:


maximizar
s. a

x1 + 3x2
x1 + x2
x1 + 2x2
x1 + x2
x1 , x2

4
12
10
0.

a) Dibujar la regi
on factible e identicar que punto es el optimo.
b) Identicar todos los puntos extremos y reformular el problema como el de hallar la combinacion convexa optima de esos puntos extremos. Resolverlo.
c) Supongase que se elimina la tercera condicion. Identicar en este caso todos los puntos
extremos de la region factible resultante y reformular el problema otra vez como el de hallar
la combinacion convexa optima de esos puntos extremos. Resolver este u
ltimo problema,
identicar la solucion optima del problema original e interpretarla.
d) Resulta u
til esta forma de actuar? Por que?
6.16. Considerese las siguientes condiciones de un problema de programacion lineal:
x1 + 2x2
x1 x2
2x2
x1 , x2

6
4
2
0.

a) Dibujar la regi
on factible.
b) Identicar los puntos extremos y, en estos, las variables basicas y las no basicas.
c) Supongase que se parte en la region factible del punto [4, 0]T moviendose a [14/3, 2/3]T .
Especicar que variable entra en la base y cual sale.

Captulo

El METODO
SIMPLEX

OMO SE HA EXPUESTO en el captulo 6, para resolver un problema de programacion lineal,


min. cT x
s. a

Ax = b
x 0,

se pueden estudiar los puntos extremos del politopo P = {x n : Ax = b, x 0}, donde


A mn y b n , y buscar aquel en el que la funci
on objetivo cT x se hace mnima. Analizar
todos los puntos extremos, no obstante, dado el n
umero posible de estos para m y n grandes,
puede resultar prohibitivo.
Para dar respuesta a este problema, George B. Dantzig, en 1947, desarroll
o el denominado
metodo simplex. La idea en la que se fundamenta es sencilla: primero, encontrar un punto
extremo del politopo P o soluci
on b
asica factible; a continuaci
on, desplazarse desde ese punto
extremo a otro, a lo largo de alguna arista de P , de tal forma que se mejore (haga menor)
la funci
on objetivo. Esta u
ltima operaci
on se repite cuantas veces sea necesario hasta que se
alcance la solucion optima o la arista escogida lleve a .
En este captulo desarrollaremos la forma algebraica y el algoritmo numerico del metodo
simplex. Para poder seguir la exposici
on es aconsejable tener en cuenta las consideraciones
geometricas del captulo anterior.
Comenzaremos la descripcion del metodo por la que se denomina fase II (phase II ): se parte
de una soluci
on b
asica factible y se trata de mejorar esta. Como veremos posteriormente, la
forma de operar en esta fase sera tambien la que, en la denominada fase I , permitir
a determinar
la primera soluci
on b
asica factible con la que comenzara todo el procedimiento.
411

412

Captulo 7. El metodo simplex

7.1

Mejora de una soluci


on b
asica factible

Supondremos que la matriz A mn (m < n) es de rango completo y que la regi


on factible
no es el conjunto vaco.
Si, sin perdida de generalidad, suponemos que en una soluci
on b
asica factible los m primeros
componentes de x son no negativos b
asicos, se tendra que


xB
x=
xN

B 1 b
=
,
0

T , cT ]. El
donde A se ha ordenado de la forma A = [B, N ] y, de la misma manera, cT = [cB
N
valor de la funci
on objetivo correspondiente a esta soluci
on b
asica factible es

z=

[cTB ,

T
cN
]

B 1 b
= cTB B 1 b.
0

(7.1)

Recordemos que si una solucion b


asica factible no es degenerada, el punto que dene est
a
n
en la interseccion en  de los m hiperplanos correspondientes a las condiciones Ax = b y los
n m correspondientes a xN = 0. Si consideramos la matriz


B N
,
M=
0 I

(7.2)

cuyos vectores la son los vectores caractersticos de los n hiperplanos que determinan la
soluci
on b
asica, como la matriz B es regular, M tambien es regular.
En el punto extremo del politopo P que dene una soluci
on b
asica factible no degenerada
conuyen n m aristas. Las direcciones de estas aristas son las que determinan las n m
u
ltimas columnas de la inversa de la matriz M . Esta inversa es
M

B 1 B 1 N
=
0
I

(7.3)

Moverse a lo largo de cada una de esas n m aristas, equivale a incrementar el valor de


una variable no b
asica manteniendo las demas jas a cero. Para comprobar estos dos u
ltimos
asertos basta observar que la columna q, q > m, de M 1 , es ortogonal a todas las las de
M que no son la q y, por consiguiente, es ortogonal a todos los vectores caractersticos de
los hiperplanos que se cruzan en x excepto el correspondiente a xq = 0. Esto quiere decir
que el vector q = M 1 eq 1 es paralelo a la interseccion de los n 1 hiperplanos linealmente
independientes correspondientes a Ax = b y xk = 0, k > m, k = q. El moverse a lo largo de q
permitir
a determinar puntos factibles pues, para un > 0 sucientemente peque
no, los puntos
de la forma
x() = x + q
(7.4)
son factibles. De hecho, xk () = 0 para k > m, k = q, xq () = > 0 y
xB () = xB B 1 aq 0,
1

Recordemos que eq es el vector columna q-esimo de la matriz unidad.

(7.5)

7.1 Mejora de una soluci


on basica factible

413

para un sucientemente peque


no, donde aq es el vector columna q de A. Esta u
ltima expresi
on
se obtiene de la estructuraci
on de las condiciones en la forma BxB +N xN = b, de donde resulta,
despejando xB , que
1
1
xB = B
  b B N xN .
xB
La funci
on objetivo ser
a pues z = cTB B 1 b + (cTN cTB B 1 N )xN . Cuando xN = 0 se obtiene
la expresi
on (7.1) antes expuesta.
Para mejorar una funci
on objetivo desde un punto extremo, lo que interesa es encontrar de
esas posibles n m aristas por las que moverse, una que consiga ese n: es decir, una direcci
on
de descenso respecto a la funcion objetivo. Para determinar direcciones de descenso se calculan
los denominados costes reducidos:
cj = cT j = cT M 1 ej = cj cTB B 1 aj ,

j > m.

Si cj < 0, el vector c y el j hacen angulo obtuso (> 90 ) por lo que la funci


on objetivo, al
incrementar , decrece al moverse a lo largo de j .
on j .
El coste reducido cj es la derivada direccional de z = cT x en la direcci
El concepto coste reducido surge del hecho de que cj expresa el cambio que supone en la
funci
on objetivo un incremento unitario en la variable no b
asica xj manteniendo todas las
demas no b
asicas jas. Es decir,
T

z() = c x() = c x + c j =

cTB B 1 b

+ cj

T 1
cB
B aj

Para mejorar la funci


on objetivo se escoge como variable no b
asica a incrementar aquella
cuyo coste reducido sea mas negativo, es decir, la que potencialmente decremente mas la funci
on
objetivo.
La direcci
on que se elige con este criterio no es la de maxima pendiente recordemos el

apartado 2.5.1.3. Esta


sera aquella q tal que

cT

j ,
= min

j
q
j

cT q

j>m

es decir, aquella de las j que formase el angulo m


as obtuso, q , con respecto al vector c. Ese
angulo sera

T
c q
.
q = arccos

c2 q
2

Para una soluci


on b
asica degenerada, como el valor de alguna variable b
asica es cero, puede
ocurrir que en alguna direcci
on cualquier desplazamiento haga que (7.4) viole la factibilidad
del problema. Esto ocurre pues, como se ha estudiado, en una soluci
on b
asica degenerada
conuyen m
as de n hiperplanos: hay una redundancia de condiciones. La gura 7.1 ilustra
esta situacion. Si x es la solucion que se esta analizando, d1 es una direccion de movimiento
factible; d2 no.

414

Captulo 7. El metodo simplex

x2
d2

d1

x1

Figura 7.1
Soluci
on b
asica degenerada y direccion no factible
Ejemplo 7.1 Para aclarar las ideas introducidas, consideremos el siguiente programa lineal:
min. x1 + x2
s. a x1 + 2x2 4
x2 1
x1 , x2 0.
A
nadamos las variables de holgura x3 y x4 para transformar el problema en forma est
andar:
min. x1 + x2
s. a x1 + 2x2 + x3
= 4
x2
+ x4 = 1
x1 , x2 , x3 , x4 0.


La matriz A es
A = [a1 , a2 , a3 , a4 ] =

1 2 1 0
.
0 1 0 1

Consideremos B = [a1 , a2 ]:


x1
xB =
x2


xN =

x3
x4

=


B 1 b


1 2
=
0 1

1 

4
1 2
=
1
0 1



4
2
=
;
1
1

0
.
0

La soluci
on b
asica factible que estamos considerando se puede ver en la gura 7.2. Los costes
reducidos de las variables no b
asicas son

 
1 2
1
T 1
c3 = c3 cB B a3 = 0 [1, 1]
= 1
0 1
0
y

7.1 Mejora de una soluci


on basica factible

415

x2
 
0
2

 

 

2
1

0
1

d2
d1

P
 
4
0

x1

Figura 7.2
Proceso de mejora de una soluci
on b
asica factible del problema del ejemplo 7.1
c4 = c3

cTB B 1 a4

1 2
= 0 [1, 1]
0 1



0
= 1.
1

La funci
on objetivo decrece siguiendo la direcci
on 3 (d2 en la gura): incrementando x3 .
La direccion 3 es

1 2 1 2
0
1
0 1 0 1 0 0

M 1 e3 =
0 0 1 0 1 = 1 .
0 0 0 1
0
0
Las variables b
asicas se deben mover de la forma
xB = B 1 b B 1 a3 ;
es decir, en la direccion d2 =

B 1 a3

1 2
=
0 1



1
1
=
.
0
0

Observese que los costes reducidos de las variables basicas son cero y que los de las variables
no b
asicas se pueden calcular obteniendo en primer lugar el vector denominado de multiplicaT B 1 , y luego asignar precio (price out) a las columnas no b
asicas; es
dores simplex, T = cB
decir, calcular
cj = cj T aj , j > m.
Toda la terminologa usada se deriva de la interpretaci
on de los componentes del vector
como multiplicadores de Lagrange y como precios o valores de equilibrio en el optimo.
Una vez elegida la variable no b
asica xq que determina la direcci
on q a lo largo de la cual
se mejora la funci
on objetivo, la siguiente cuesti
on a resolver en el metodo simplex es: cuanto

416

Captulo 7. El metodo simplex

moverse en esa direccion? La respuesta vendr


a condicionada por aquella variable b
asica que
antes llegue a su lmite, es decir, a cero, y por lo tanto bloquee el desplazamiento en la direcci
on
escogida.
Si se hace
y = B 1 aq
y en la direcci
on q se avanza una cantidad (en alguna referencia bibliogr
aca a esta cantidad
se la denomina amplitud de paso), de las expresiones (7.4) y (7.5) se deduce que se mantendr
a
la factibilidad del problema, x() 0, si y solo si xB y 0 y 0. A tenor de esto, se
puede establecer el siguiente resultado.
Teorema 7.1 Si cq es negativo y el vector y = B 1 aq es no positivo, el programa lineal
min. cT x
s. a

Ax = b
x 0

no est
a acotado: x() es factible para todo 0 y z(x()) cuando . En este
caso d = q es una direcci
on con cT d = cq < 0.
Si y tiene positivo alguno de sus componentes, el paso mas amplio que se puede dar en la
a el que determine el valor m
aximo
direccion q , manteniendo la factibilidad del problema, ser
en que se puedan modicar las variables b
asicas hasta que una de ellas llegue a cero; es decir,
si las variables b
asicas se modican seg
un
xB = B 1 b y,
o, desarrollando,

xB1
xB2

.
..
xBm

b1
y1

b2
y2
= . .. ,
..
.
ym
bm

= B 1 b, ese valor maximo de movimiento, observando esta u


donde b
ltima expresi
on, vendr
a
dado por


bi
xBp
=x
q = min
: yi > 0, 1 i m =
.
yi
yp
El valor de la variable no b
asica xq se vera incrementado despues de este paso desde cero a
x
q , pasando a ser b
asica en detrimento de la variable xBp que pasar
a a ser no b
asica.
Para completar una iteraci
on del metodo simplex lo que resta por hacer es recongurar la
base y, por lo que se reere a la matriz B, reemplazar el vector ap por el aq , es decir, hacer
= B + (aq ap )eT .
B
p
quedando

= [aB , aB , . . . , aB , aq , aB , . . . , aBm ].
B
1
2
p1
p+1

7.2 Finalizacion. Solucion optima, solucion no acotada y soluciones optimas alternativas

417

Las variables b
asicas se modicaran de acuerdo con la siguiente expresi
on
x
Bi = xBi yi ,

7.2

i = 1, . . . , m.

Finalizaci
on. Soluci
on o
ptima, soluci
on no acotada y soluciones o
ptimas alternativas

Hemos visto en el apartado anterior c


omo mejorar una soluci
on b
asica factible moviendose a
lo largo de la direcci
on, j , que dene una de las aristas que conuyen en el punto extremo
que dene esa solucion.
A continuaci
on probaremos que todo punto y P se encuentra dentro del politopo c
onico
generado por una soluci
on b
asica factible x y las direcciones j que parten de ese x. En el caso
de soluciones b
asicas no degeneradas, las direcciones j son factibles; en el caso de soluciones
degeneradas, algunas de las j pueden ser no factibles.
Lema 7.1 Dada una soluci
on b
asica factible cualquiera, x , del programa lineal
min. cT x
s. a

Ax = b
x 0,

todo punto y P = {x n : Ax = b, x 0} se puede expresar de la forma


y = x +

n


yj j ,

yj 0,

j=m+1

donde j es la columna j-esima de la matriz M 1 .


T , y T ] 0. Como adem
n. Como y P , Ay = b y y T = [y B
Demostracio
as Ax = b y
N
xN = 0, se tiene que




B N
0


M (y x ) =
(y x ) =
.
0 I
yN
Despejando

  1 
0
B N

1
yx =M
=
yN ,
yN
I
donde y N 0.

De este lema se tiene que


z(y) z(x) = cT (y x) =

n


j=m+1

c T j yj =

n


cj yj ,

j=m+1

para todo y P . Como el vector y es no negativo, si los costes reducidos cj son no negativos,
la funci
on objetivo cT y cT x para todo y P . Hemos deducido de esta forma el siguiente
resultado.

418

Captulo 7. El metodo simplex

Teorema 7.2 Una soluci


on b
asica factible es una soluci
on
optima del programa lineal
min. cT x
s. a

Ax = b
x 0,

si todos los costes reducidos (relativos a la base dada) son no negativos.


En el caso no degenerado, el recproco de este teorema tambien es cierto. En el caso degenerado, sin embargo, una soluci
on b
asica factible puede ser optima aun en el caso de que
algunos de los costes reducidos sean negativos, pues las direcciones de movimiento asociadas a
esas variables no b
asicas pueden no ser factibles: en un punto x donde xj = 0, si el componente
j de esa direccion es negativo.
Corolario 7.1 Una soluci
on b
asica factible x es el u
nico
optimo del programa lineal
min. cT x
s. a

Ax = b
x 0,

si los costes reducidos de las variables no b


asicas son estrictamente positivos.
Corolario 7.2 (Soluciones
optimas alternativas) Si x es una soluci
on b
asica factible o
ptima
y los costes reducidos de las variables no b
asicas c1 = c2 = = ck = 0, cualquier punto
y P de la forma
y =x+

k


yi i ,

i=1

es tambien
optimo.
Si una soluci
on b
asica factible es optima y degenerada, y los costes reducidos correspondientes a algunas de las variables no b
asicas son cero, del u
ltimo corolario no se deduce que
la soluci
on optima sea m
ultiple. Esto es as pues en el caso degenerado x puede ser el u
nico
punto en P expresable en la forma enunciada en el corolario, por ser todas las direcciones i
no factibles.

7.3

El algoritmo simplex

El algoritmo simplex para resolver


min. cT x
s. a

Ax = b
x 0

7.3 El algoritmo simplex

419

se describe en la tabla 7.1. Comienza su actuacion desde una soluci


on b
asica factible xB
correspondiente a B = [aj1 , aj2 , . . . , ajm ]. El conjunto B = {j1 , . . . , jm } es el de ndices de
las variables b
asicas; xji designa la variable b
asica i-esima y N el conjunto de ndices de las
variables no b
asicas.
La forma en que se presenta el algoritmo simplex en la tabla es la que se conoce habitualmente en la literatura como simplex revisado.
Ejemplo 7.2 Resolver el problema de programaci
on lineal:
min. x1 3x2
2x1 + 3x2 6
x1 + x2 1
x1 , x2 0.

s. a

Para empezar, introduzcamos las variables de holgura x3 y x4 . Resulta:


min. x1 3x2
s. a

2x1 + 3x2 + x3
= 6
x1 + x2 +
x4 = 1
x1 , x2 , x3 , x4 0.

Escojamos como base de partida




1 0
B = [a3 , a4 ] =
0 1

2 3
y N = [a1 , a2 ] =
.
1 1

La soluci
on inicial, xB = B 1 b, xN = 0, es pues

x1
0
x2 0

x3 = 6 .
x4
1

La funci
on objetivo para esta soluci
on es z =

T B 1 b
cB

6
= [0, 0]
= 0.
1

Iteraci
on 1. Paso 1
Calculemos los multiplicadores simplex resolviendo B T = cB :


1 0
=
0 1

1 

0
0
=
.
0
0

Los costes reducidos de las variables no basicas son

2
c1 = c1 a1 = 1 [0, 0]
= 1
1
T

420

Captulo 7. El metodo simplex

Tabla 7.1
El algoritmo simplex revisado (comienza a partir de una soluci
on factible)
Paso 1 Asignaci
on de precios. Comprobaci
on de
optimo.
(a) Calcular los multiplicadores simplex resolviendo el sistema B T = cB .
(b) Calcular los costes reducidos de las variables no basicas, cj = cj T aj , para
todo j N .
(c) Comprobar que se ha llegado al optimo: si cj 0 para todo j N , parar: la
solucion es optima.
Paso 2 Determinar columna de pivotaci
on.
(a) Determinar la variable no b
asica xq que debe entrar en la base (encontrar una
cj < 0}.
direccion de descenso): escoger q N tal que cq = minjN {
(b) Resolver
By = aq .
Si y 0, parar; hay un rayo factible de soluciones a lo largo del cual cT x .
Si no, seguir.
Paso 3 Determinar la de pivotaci
on. An
alisis de Ratios.
Determinar la variable b
asica xjp que sale de la base: calcular

xj
xji
= p = min
: yi > 0 .
1im
yp
yi
Paso 4 Pivotaci
on.
Adaptar la solucion, la matriz B y las estructuras de datos. Hacer:
xq = xjp /yp
xji xji yi ,
B

1im

B + (aq ajp )eTp

B B {q}\{jp }
N N {jp }\{q}.
Ir al paso 1.

7.3 El algoritmo simplex




421

3
= 3.
c2 = c2 a2 = 3 [0, 0]
1
T

Todava no se ha llegado al optimo pues los costes reducidos de las variables no b


asicas son
negativos.
Iteraci
on 1. Paso 2
Elijamos la variable no b
asica x2 como aquella que ha de entrar en la base pues tiene el coste
reducido m
as negativo.
Resolvamos el sistema By = a2 :


1 0
y=
0 1

1 

3
3
=
.
1
1

Iteraci
on 1. Paso 3
La variable b
asica a salir de la base se obtendr
a de calcular


xB1 xB2
,
= min
y1
y2

= min

6 1
,
3 1

= 1.

on
Es decir, saldr
a xB2 = x4 . Esto se puede deducir tambien analizando la expresi


xB1
xB2

x3
=
x4

=B

6
3
b y =

,
1
1

comprob
andose que x4 es la primera variable que llega a cero al incrementar x2 .
Iteraci
on 1. Paso 4
Readaptemos la solucion y las estructuras correspondientes:
x2 = 1
x3 x3 y1 = 6 1 3 = 3
x4 x4 y2 = 1 1 1 = 0.
La soluci
on queda, por tanto,

x1
0
x2 1

x3 = 3
0
x4
con

1 3
B = [a3 , a2 ] =
0 1

La nueva funci
on objetivo es
z=

T 1
cB
B b

2 0
y N = [a1 , a4 ] =
.
1 1


1 3
= [0, 3]
0 1



6
= 3.
1

422

Captulo 7. El metodo simplex

Iteraci
on 2. Paso 1
Calculemos los nuevos multiplicadores simplex resolviendo B T = cB :


1 0
=
3 1

1 

0
1 0
=
3
3 1



0
0
=
.
3
3

Los costes reducidos de las variables no basicas son




2
= 4
c1 = c1 a1 = 1 [0, 3]
1
T

0
c4 = c4 a4 = 0 [0, 3]
= 3.
1
T

Como todava existe un coste reducido negativo, no se ha llegado al optimo.


Iteraci
on 2. Paso 2
Elegimos la u
nica variable no b
asica capaz de mejorar la funci
on objetivo, x1 , como aquella
que ha de entrar en la base.
Resolvamos el sistema By = a1 :


1 3
y=
0 1

1 

2
1 3
=
1
0 1



2
5
=
.
1
1

Iteraci
on 2. Paso 3
La variable b
asica a salir de la base se obtendr
a de calcular


xB1
= min
y1

= min

3
5

3
= .
5

Es decir, saldr
a xB1 = x3 . Analizando el porque de esto mediante la expresion


xB1
xB2

x3
=
x2

=B

3
5
b y =

,
1
1

se comprueba que x3 es la primera variable que llega a cero al incrementar x1 .


Iteraci
on 2. Paso 4
Readaptemos la solucion y las estructuras correspondientes:
x1 = 53
x2 x2 y2 = 1
x3 x3 y1 = 3

3
5
3
5

(1) =
5 = 0.

8
5

7.3 El algoritmo simplex

La soluci
on queda:

423

x1
3/5
x2 8/5

x3 = 0
x4
0


con

2 3
B = [a1 , a2 ] =
1 1

La nueva funci
on objetivo es


2 3
z = cTB B 1 b = [1, 3]
1 1

1 0
y N = [a3 , a4 ] =
.
0 1

1 

6
= [1, 3]
1

1
5
1
5

53

"

2
5

27
6
= .
1
5

Iteraci
on 3. Paso 1
Calculemos los nuevos multiplicadores simplex resolviendo B T = cB :


2 1
=
3 1

1 

1
=
3

1
5
35

1
5
2
5

"

1
4/5
=
.
3
3/5

Los costes reducidos de las variables no basicas son

4
1
c3 = c3 a3 = 0 [4/5, 3/5]
=
0
5
T

3
0
c4 = c4 a4 = 0 [4/5, 3/5]
= .
1
5
T

Todos los costes reducidos son positivos por lo que se ha llegado al u


nico optimo del problema.
La soluci
on optima es

x1
3/5
x2 8/5

x3 = 0 .
x4
0
La funci
on objetivo

27
6
z = b = [4/5, 3/5]
= .
1
5
T

Las soluciones basicas factibles que se han ido obteniendo en el proceso descrito se representan en la gura 7.3.
Ejemplo 7.3 Soluci
on no acotada. Resolver el siguiente problema lineal:
min. x1 3x2
s. a

x1 2x2 4
x1 + x2 3
x1 , x2 0.

424

Captulo 7. El metodo simplex



x2

3/5
8/5

 
0
1

P
 
3
0

x1

Figura 7.3
Representacion del proceso seguido hasta la soluci
on en el problema del ejemplo 7.2
Introduzcamos las variables de holgura x3 y x4 . El problema queda:
min. x1 3x2
s. a

x1 2x2 + x3
= 4
x1 + x2 +
x4 = 3
x1 , x2 , x3 , x4 0.

Escojamos como base de partida




1 0
B = [a3 , a4 ] =
0 1

1 2
y N = [a1 , a2 ] =
.
1 1

La soluci
on inicial, xB = B 1 b, xN = 0, es pues

x1
0
x2 0

x3 = 4 .
x4
3


4
La funci
on objetivo para esta soluci
on es z = [0, 0]
= 0.
3
La regi
on factible de este problema es la que se ilustra en la gura 7.4.
Iteraci
on 1. Paso 1
Calculemos los multiplicadores simplex resolviendo B T = cB :


1 0
=
0 1

1 

0
0
=
.
0
0

7.3 El algoritmo simplex

425

x2

 
0
3


c=

1
3

 

x1

4
0

Figura 7.4
Problema con soluci
on no acotada del ejemplo 7.3
Los costes reducidos de las variables no basicas son

1
c1 = c1 a1 = 1 [0, 0]
= 1
1
T

2
= 3.
c2 = c2 a2 = 3 [0, 0]
1
T

Al ser negativos los costes reducidos, esta solucion no es optima.


Iteraci
on 1. Paso 2
Elegimos la variable no b
asica x2 como aquella que ha de entrar en la base pues su coste
reducido es el mas negativo.
Resolvamos el sistema By = a2 :


1 0
y=
0 1

1 

2
2
=
.
1
1

Iteraci
on 1. Paso 3
La variable b
asica a salir de la base se obtendr
a de calcular


xB2
3
= min
= min
= 3.
y2
1
Es decir saldr
a xB2 = x4 . Como venimos haciendo, esto tambien de puede comprobar a partir
de la expresi
on

 

 


xB1
x3
4
2
1
=
= B b y =

,
xB2
x4
3
1

426

Captulo 7. El metodo simplex

constatandose que, efectivamente, x4 es la primera variable que llega a cero al incrementar x2 .


Iteraci
on 1. Paso 4
Readaptemos la solucion y las estructuras correspondientes:
x2 = 3
x3 x3 y1 = 4 3 (2) = 10
x4 x4 y2 = 3 3 1 = 0.
La soluci
on queda:

x1
0
x2 3

x3 = 10
0
x4
con

B = [a3 , a2 ] =

1 2
0 1

y N = [a1 , a4 ] =

1 0
.
1 1

Iteraci
on 2. Paso 1
Calculemos los multiplicadores simplex resolviendo B T = cB :


1 0
=
2 1

1 

0
1 0
=
3
2 1



0
0
=
.
3
3

Los costes reducidos de las variables no basicas son




1
c1 = c1 a1 = 1 [0, 3]
= 4
1
T

0
c4 = c4 a4 = 0 [0, 3]
= 3.
1
T

Como existe un coste reducido negativo, todava no se ha alcanzado el optimo.


Iteraci
on 2. Paso 2
Elegimos la u
nica variable no b
asica posible, x1 , como aquella que ha de entrar en la base.
Resolvamos el sistema By = a1 :


1 2
y=
0 1

1 

1
1 2
=
1
0 1



1
1
=
.
1
1

Como todos los yi , i = 1, 2 son negativos, hay un rayo de soluciones factibles a lo largo del
cual cT x . La soluci
on es pues no acotada.

7.3 El algoritmo simplex

Ejemplo 7.4 Soluciones optimas alternativas. Resolver el problema lineal


min. 2x1 4x2
x1 + 2x2 4
x1 + x2 1
x1 , x2 0,

s. a

que se describe en la gura 7.5.




x2

2/3
5/3

Soluciones optimas
alternativas

 
0
1

 

4
0

x1
c

Figura 7.5
El algoritmo simplex resolviendo un problema con soluciones optimas alternativas
Introduzcamos las variables de holgura x3 y x4 . El problema queda:
min. 2x1 4x2
s. a

Escojamos como base de partida

x1 + 2x2 + x3
= 4
x4 = 1
x1 + x2 +
x1 , x2 , x3 , x4 0.


1 0
B = [a1 , a4 ] =
1 1

2 1
y N = [a2 , a3 ] =
.
1 0

La soluci
on inicial, xB = B 1 b, xN = 0, es pues


x1
x4

1 0
=
1 0

1 

4
1 0
=
1
1 1



4
4
=
,
1
5


por lo que


4
= 8.
La funci
on objetivo para esta soluci
on es z = [2, 0]
1
Iteraci
on 1. Paso 1
Calculemos los multiplicadores simplex resolviendo B T = cB :


1 1
=
0 1

1 

2
1 1
=
0
0 1



x1
4
x2 0


x3 = 0 .
5
x4

2
2
=
.
0
0

427

428

Captulo 7. El metodo simplex

Los costes reducidos de las variables no basicas son

2
=0
c2 = c2 a2 = 4 [2, 0]
1
T

1
c3 = c3 a3 = 0 [2, 0]
= 2.
0
T

Hemos llegado a un punto optimo. Este, sin embargo, no es u


nico. En efecto, si incrementamos
x2 , manteniendo x3 = 0, las variables x1 y x4 se modican de la siguiente manera:


x1
x4

=B

bB

1 0
a2 x2 =
1 1

Para cualquier x2 < 53 , la soluci


on



4
1 0

1
1 1



2
4
2
x2 =

x .
1
5
3 2

x1
4 2x2
x2 x2

x3 =

0
x4
5 3x2
es optima con funci
on objetivo z = 8.

7.3.1

Degeneraci
on y ciclado

Aunque se ha asumido que la soluci


on de un programa lineal, x, no es degenerada, de hecho,
en la pr
actica, el que esto ocurra no causa grandes dicultades. Lo m
as que puede ocurrir es
que en el paso 3 xjp sea cero, lo que dar
a lugar a una iteraci
on con = 0: x no cambiar
a.
Esto ocurrir
a porque a lo largo de q se llegara inmediatamente a la condici
on xjp 0. En
este caso, aunque x no cambie, si lo har
a la base. Como x, y por tanto cT x, no cambian, es
teoricamente posible que el algoritmo cicle indenidamente a traves de una sucesion de bases,
y sus correspondientes soluciones.
El problema
1
3
min.
x4 + 20x5 x6 + 6x7
4
2
1
s. a x1
+ x4 8x5 x6 + 9x7 = 0
4
1
1
+ x4 12x5 x6 + 3x7 = 0
x2
2
2
x3
+ x6
= 1
x1 , x2 , x3 , x4 , x5 , x6 , x7 0.
expuesto por E.M.L. Beale en 1955, muestra c
omo el metodo simplex puede quedar atrapado
en un ciclo innito si se aplican los criterios que hemos utilizado escogiendo como variable a
entrar en la base aquella que posee el coste reducido m
as negativo y para salir de ella una de
las que proporcionan el mnimo .
on objetivo optima -5/4.
El optimo de este problema es x = [3/4, 0, 0, 1, 0, 1, 0]T y su funci
Si se comienza su resolucion partiendo de la base B = [a1 , a2 , a3 ], siguiendo el metodo simplex

7.4 Solucion basica factible inicial

429

se obtienen las bases [a4 , a2 , a3 ], [a4 , a5 , a3 ], [a6 , a5 , a3 ], [a6 , a7 , a3 ], [a1 , a7 , a3 ] y otra vez
[a1 , a2 , a3 ]. Si se vuelve a utilizar la misma secuencia de variables a entrar y salir de la base,
el metodo entra en un ciclo innito.
En la pr
actica, evitar el ciclado no es complicado pues existen reglas sencillas para ello. Las
mas utilizadas son la lexicogr
aca, propuesta por G.B. Dantzig, A. Orden y P. Wolfe en 1955,
y la de Bland, debida a R.G. Bland en [1977]. Se basan en el hecho de que, en ausencia de
degeneracion, los valores de la funci
on objetivo que se suceden en el metodo simplex forman
una sucesion estrictamente monotona decreciente, lo que garantiza que las bases no se repitan.
7.3.1.1

La regla lexicogr
aca

Esta regla asegura que el metodo simplex no cicla, pues a pesar de que el valor de la funcion objetivo, cTB B 1 b, puede permanecer constante en presencia de degeneracion, el vector
[cTB B 1 b, cTB B 1 ]T se puede hacer lexicogracamente monotonamente decreciente.
Esta regla primero usa la relaci
on ya expuesta,


xj
xji
: yi > 0 ,
= p = min
1im
yp
yi
para determinar la variable b
asica xjp que ha de salir de la base. Si de aqu se deduce que
solo hay una candidata, se elige esta. Si hay varias, se vuelven a evaluar los ratios de aquellas
variables que quedan como candidatas, pero esta vez, en lugar de utilizar los xji resultantes
de B 1 b, se utilizan los correspondientes elementos del vector B 1 ap1 , donde ap1 es el vector
columna de la matriz A que corresponde a la variable b
asica xp1 de ndice m
as bajo. Si haciendo esto los nuevos ratios siguen siendo iguales, se vuelven a calcular otros ratios utilizando
B 1 ap2 , donde ap2 es el vector columna que corresponde a la variable b
asica xp2 con segundo
ndice m
as bajo, etc. Operando de esta manera se asegura una secuencia lexicogr
acamente
T B 1 ]T .
mon
otonamente decreciente del vector [cTB B 1 b, cB
7.3.1.2

La regla de Bland

Mediante esta regla se elige como variable que ha de entrar en la base, de entre las de coste
reducido negativo, aquella con menor ndice. Para salir de la base, si el ratio es igual en varias,
aquella tambien con menor ndice.
Esta regla crea la siguiente propiedad mon
otona: si una variable xq entra en la base, no
la abandonar
a hasta que alguna otra con ndice mayor, que era no b
asica cuando xq entr
o en
la base, tambien entre en la base. Al actuar siguiendo la regla de Bland se evita el ciclado
puesto que en un ciclo cualquier variable que entre en la base debe salir de ella, lo que implica
que existe alguna variable de ndice mayor que entra y sale de la base. Esto, evidentemente,
contradice la propiedad mon
otona apuntada.

7.4

Soluci
on b
asica factible inicial

Hasta ahora hemos supuesto que exista una soluci


on inicial b
asica factible desde la que iniciar
el metodo simplex. Ahora bien, c
omo se llega a ella?
Si las condiciones del problema son de la forma Ax b, x 0, donde A mn , y b m
tiene todos sus componentes no negativos, el problema de encontrar la soluci
on inicial b
asica

430

Captulo 7. El metodo simplex

factible es trivial; en efecto, a


nadiendo las variables de holgura a las condiciones, seg
un hemos
venido haciendo hasta ahora para convertirlas en la forma est
andar, se tendr
a que
Ax + xh = b
x, xh 0.
La matriz [A, I] es de rango m. Una soluci
on b
asica factible sera xh = b, x = 0; la matriz
b
asica correspondiente, B = I.
Normalmente la b
usqueda de una soluci
on inicial b
asica factible no es tan sencilla. As, por
ejemplo, si se diesen las mismas condiciones de antes pero el vector b tuviese alg
un componente
negativo, la soluci
on obtenida no sera v
alida pues violara la condici
on de no negatividad que
han de cumplir las variables del problema.
Otra situaci
on en la que la forma anterior de abordar el problema no es v
alida tiene lugar
cuando las condiciones son de la forma Ax b, x 0. A
nadiendo a estas el vector de variables
de holgura, xh , se tendra que Ax xh = b, x 0, xh 0. Si el vector b no tuviese todos
sus componentes no positivos, a priori, difcilmente se podra determinar una base B a partir
de la matriz [A, I], de tal forma que xB = B 1 b cumpliese la condici
on de no negatividad.
Veamos algunos ejemplos concretos de lo expuesto.
Ejemplo 7.5 Consideremos las condiciones siguientes de un programa lineal cualquiera:
x1 + 2x2 4
x1 + x2 1
x1 , x2 0.
A
nadiendo las variables de holgura x3 y x4 , estas condiciones de transforman en
x1 + 2x2 + x3
= 4
x1 + x2 +
x4 = 1
x1 , x2 , x3 , x4 0.
Una soluci
on inicial b
asica factible sera


1 0
:
B = [a3 , a4 ] =
0 1

x3
xB =
x4


xN

x1
=
x2

=


B 1 b


1 0
=
0 1



4
4
=
1
1

0
=
.
0

Ejemplo 7.6 Sean ahora las siguientes condiciones:


x1 + x2 + x3 6
2x1 + 3x2 + 3x3 3
x2 , x3 0.
Recordemos que cuando una variable xi no esta restringida a tomar valores no negativos, como
es el caso aqu de la variable x1 , una forma de tratarla consiste en sustituirla por xi xi , xi 0,

431

7.4 Solucion basica factible inicial

xi 0. Si introducimos tambien las variables de holgura x4 y x5 , las condiciones quedan:


x1 x1 + x2 + x3 + x4
= 6
2x1 + 2x1 + 3x2 + 3x3
x5 = 3
x1 , x1 , x2 , x3 , x4 , x5 0.
De estas condiciones no es inmediato determinar una base B que nos permita obtener una
soluci
on inicial b
asica factible.
Ejemplo 7.7 Consideremos las siguientes condiciones:
x1 + x2 2x3 3
2x1 + x2 + 3x3 7
x1 , x2 , x3 0.
Si en aras de hacer todos los componentes del vector b no negativos multiplicamos la primera
an:
condici
on por 1, e introducimos las variables de holgura x4 y x5 , las condiciones resultar
x1 x2 + 2x3 x4
= 3
2x1 + x2 + 3x3
+ x5 = 7
x1 , x2 , x3 , x4 , x5 0.
Tampoco de aqu se puede determinar de una manera sencilla una base inicial del problema
que conguran estas condiciones.

7.4.1

Variables articiales

La forma m
as utilizada para evitar los problemas apuntados en el apartado anterior, y determinar de inmediato una soluci
on b
asica factible de partida, consiste en introducir, temporalmente, ademas de las variables de holgura, un conjunto similar de variables denominadas
variables articiales.
La idea es muy sencilla: a las condiciones del problema en forma est
andar
min. cT x
s. a

Ax = b
x 0,

(7.6)

donde, para simplicar y sin perdida de generalidad, se supone que b 0, se le a


nade un vector
de variables articiales, xa , resultando
Ax + xa = b,
con x 0 y xa 0.
Si se quiere conseguir una soluci
on factible de (7.6), l
ogicamente, habr
a que forzar a que
los componentes del vector xa sean cero. Es decir, resolver el problema
min.

m


xai

i=1

s. a Ax + xa = b
x, xa 0.

(7.7)

432

Captulo 7. El metodo simplex

Si el problema original (7.6) admite una soluci


on factible, en la soluci
on de (7.7) se tendr
a que
xa = 0. Si tal soluci
on factible no existe, (7.7) acabar
a con alg
un componente de xa positivo.
Para resolver este nuevo problema (7.7) se utiliza el mismo metodo simplex en lo que se ha
dado en llamar en la literatura especializada la fase I de ese procedimiento: la b
usqueda de
una soluci
on inicial b
asica factible.
El metodo simplex completo, por consiguiente, consta de las dos fases que se indican en la
tabla 7.2.
Tabla 7.2
El metodo simplex en sus dos fases
Fase I

Partiendo de la soluci
on inicial x = 0, xa = b, resolver
min.

m


xai

i=1

s. a Ax + xa = b
x, xa 0.
on basica
Si en la solucion resultante xa = 0, parar: el problema no tiene soluci
ltima
factible. Si xa = 0, ir a la fase II tomando como base inicial, B, la de la u
iteracion de esta fase.
Fase II Partiendo de xB = B 1 b y xN = 0, resolver
min. cTB xB + cTN xN
s. a

BxB + N xN = b
xB , xN 0.

Si la soluci
on de la fase I es degenerada, cualquier variable articial xai = 0 que este en la
as que eliminar la condici
on
base se puede intercambiar por una no b
asica xj , o suprimirse sin m
redundante correspondiente. Concretamente, si xak = 0 es la variable b
asica k-esima al nal
de la fase I y se cumple que eTk B 1 aj = 0, la variable xak se puede reemplazar por la xj . Si
eTk B 1 aj = 0 para todo aj N , el sistema original Ax = b es redundante y, por tanto, se
puede eliminar la la k-esima de la matriz A as como la la y columna k-esimas de B.
Ejemplo 7.8 Resolver el siguiente problema de programaci
on lineal:
min.
s. a

x1 2x2
x1 + x2
x1 + x2
x2
x1 , x2

2
1
3
0.

7.4 Solucion basica factible inicial

433

Para empezar, introduzcamos como siempre las variables de holgura. Resulta:


min.
s. a

x1 2x2
x1 + x2 x3
=
x1 + x2
x4
=
x2
+ x5 =
x1 , x2 , x3 , x4 , x5

2
1
3
0.

Como la base de partida no es de f


acil obtenci
on, introducimos las variables articiales y
planteamos el siguiente problema dentro de la fase I:
x6 + x7

min.
s. a

x1 + x2 x3
+ x6
= 2
x1 + x2
x4
+ x7 = 1
x2
+ x5
= 3
x1 , x2 , x3 , x4 , x5 , x6 , x7 0.

Observese que en la tercera condicion no es necesario introducir variable articial alguna.


Del problema as planteado se puede obtener inmediatamente la base de partida; esta es

1 1 1 0

1
1 0 1 .
y N = [a1 , a2 , a3 , a4 ] =
0 1 0 0

0 1 0

0
0 1
B = [a5 , a6 , a7 ] =
1 0 0

La soluci
on inicial, xB = B 1 b, xN = 0, es:

x5
0 1 0 1 2
0 0 1
2
3
x6 = 0 0 1 1 = 1 0 0 1 = 2 .
x7
1 0 0
3
0 1 0
3
1

Por tanto,

x1
0
x2 0


x3 0


x4 = 0 .


x5 3


x6 2
x7
1

Fase I. Iteraci
on 1. Paso 1
Calculemos los multiplicadores simplex resolviendo B T = cB :

0 0 1 1 0
0 1 0
0
1

1 = 0 0 1
1 = 1 .
= 1 0 0
0 1 0
1
1 0 0
1
0

434

Captulo 7. El metodo simplex

Los costes reducidos de las variables no basicas son

1
T

= 0,
1
c1 = c1 a1 = 0 [1, 1, 0]
0

1
c2 = c2 T a2 = 0 [1, 1, 0] 1 = 2,
1

1
c3 = c3 T a3 = 0 [1, 1, 0] 0 = 1
0
y

0
T

c4 = c4 a4 = 0 [1, 1, 0] 1 = 1.
0
No se ha llegado todava al optimo pues existe un coste reducido negativo.

Fase I. Iteraci
on 1. Paso 2
Elegimos la u
nica variable no b
asica posible, x2 , como aquella que ha de entrar en la base.
Resolvemos el sistema By = a2 :

0 1 0 1 1
0 0 1
1
1

1 = 1 0 0
1 = 1 .
y= 0 0 1
1 0 0
1
0 1 0
1
1

Fase I. Iteraci
on 1. Paso 3
La variable b
asica a salir de la base se obtendr
a de calcular


xB1 xB2 xB3


,
,
= min
y1
y2
y3

= min

3 2 1
, ,
1 1 1

= 1;

es decir, saldr
a xB3 = x7 . O, como solemos utilizar, de evaluar la expresi
on xB = B 1 b y.
Es decir,

xB1
x5
3
1
xB2 = x6 = 2 1 ,
xB3
x7
1
1
comprob
andose que x7 es la primera variable que llega a cero al incrementar x2 .

7.4 Solucion basica factible inicial

Fase I. Iteraci
on 1. Paso 4
Readaptemos la solucion y las estructuras de datos correspondientes:
x2
x5
x6
x7

=1
x5 y1 = 3 1 1 = 2
x6 y2 = 2 1 1 = 1
x7 y3 = 1 1 1 = 0.

La soluci
on queda por tanto,

x1
0
x2 1

x3 0

x4 = 0
x5 2

1
x6
0
x7
siendo

1 0 1 0

1
1 0 1 .
y N = [a1 , a7 , a3 , a4 ] =
0 0 0 0

0 1 1

B = [a5 , a6 , a2 ] = 0 0 1
1 0 1
Fase I. Iteraci
on 2. Paso 1

Calculemos de nuevo los multiplicadores simplex resolviendo B T = cB :

0 0 1 1 0
0 1 0
0
1
= 1 0 0 1 = 1 1 1 1 = 1 .
1 1 1
0
1 0 0
0
0
Los costes reducidos de las variables no basicas son

1
T

c1 = c1 a1 = 0 [1, 1, 0] 1 = 2,
0

0
T

c7 = c7 a7 = 1 [1, 1, 0] 1 = 2,
0

1
c3 = c3 T a3 = 0 [1, 1, 0] 0 = 1
0
y

0
c4 = c4 T a4 = 0 [1, 1, 0] 1 = 1.
0
No se ha llegado todava al optimo.

435

436

Captulo 7. El metodo simplex

Fase I. Iteraci
on 2. Paso 2
Elegimos la variable no b
asica x1 como aquella que ha de entrar en la base por ser la de coste
reducido m
as negativo.
Resolvemos el sistema By = a1 :

0 1 1 1
1
0 1 1
1
1

1 = 1 1 0
1 =
2 .
y= 0 0 1
1 0 1
0
0 1 0
0
1
Fase I. Iteraci
on 2. Paso 3
La variable b
asica a salir de la base se obtendr
a de calcular


= min

xB1 xB2
,
y1
y2

= min

2 1
,
1 2

1
= ;
2

es decir, saldr
a xB2 = x6 . Esto tambien se puede deducir de la expresi
on

xB1
x5
2
1
xB2 = x6 = B 1 b y = 1 2 ,
xB3
x2
1
1
constatandose que x6 es la primera variable que llega a cero al incrementar x1 .
Fase I. Iteraci
on 2. Paso 4
Readaptemos la solucion y las estructuras de datos correspondientes:
x1
x5
x6
x2

= = 21
= x5 y1 = 2
= x6 y2 = 1
= x2 y3 = 1

La soluci
on queda por tanto

1
2
1
2
1
2

1 = 23
2=0
(1) = 23 .

x1
1/2
x2 3/2

x3 0

x4 = 0
x5 3/2

0
x6
x7
0
siendo

0 1 1
B = [a5 , a1 , a2 ] = 0 1 1
1 0 1

1 0 1 0
y N = [a6 , a7 , a3 , a4 ] = 0 1 0 1 .
0 0 0 0

7.4 Solucion basica factible inicial

437

Fase I. Iteraci
on 3. Paso 1
Calculemos los multiplicadores simplex resolviendo B T = cB :

21 12 12
0 0 1 1 0
0
0

= 1 1 0 0 = 12 21 12 0 = 0 .
1 1 1
0
0
0
1 0 0
Los costes reducidos de las variables no basicas son

1
T

c6 = c6 a6 = 1 [0, 0, 0] 0 = 1,
0
0
c7 = c7 T a7 = 1 [0, 0, 0] 1 = 1,
0

1
c3 = c3 T a3 = 0 [0, 0, 0] 0 = 0,
0
y

0
c4 = c4 T a4 = 0 [0, 0, 0] 1 = 0.
0
Todos los costes reducidos son no negativos por lo que se ha llegado al optimo de la fase I.
La base de partida de la fase II es

0 1 1
B = [a5 , a1 , a2 ] = 0 1 1
1 0 1

1 0
y N = [a3 , a4 ] = 0 1 .
0 0

Fase II. Iteraci


on 1. Paso 1
Calculemos como siempre los multiplicadores simplex resolviendo B T = cB :

12 12 12
1/2
0 0 1 1
0
0

1
1
1

1 = 2 2 2
1 = 3/2 .
= 1 1 0
1 1 1
2
2
0
1 0 0
Los costes reducidos de las variables no basicas son

1
1
c3 = c3 T a3 = 0 [1/2, 3/2, 0] 0 = ,
2
0
y

438

Captulo 7. El metodo simplex

0
3
T

c4 = c4 a4 = 0 [1/2, 3/2, 0] 1 = .
2
0
Como c3 y c4 son negativos, no se ha llegado a
un al optimo.
Fase II. Iteraci
on 1. Paso 2
Elegimos la variable no b
asica x4 como aquella que ha de entrar en la base.
Resolvamos el sistema By = a4 :

21 21 1 0 1/2
0 1 1 1
0

y = 0 1 1 1 = 12 21 0 1 = 1/2 .
1
1
1 0 1
0
0
1/2
2
2 0

Fase II. Iteraci


on 1. Paso 3
La variable b
asica a salir de la base se obtendr
a de calcular


xB1 xB2
= min
,
y1
y2

= min

Es decir, saldr
a xB2 = x1 . Si se analiza la expresi
on

3
2
1,
2

1
2
1
2

= 1.

xB1
x5
3/2
1/2
xB2 = B 1 b y = x1 = 1/2 1/2 ,
xB3
x2
3/2
1/2
tambien se comprueba que, efectivamente, la primera variable que llega a cero al incrementar
x4 es x1 .
Fase II. Iteraci
on 1. Paso 4
Readaptemos la solucion y las estructuras de datos correspondientes:
x4
x5
x1
x2
La nueva soluci
on es, por tanto,

=1
x5 y1 =
x1 y2 =
x2 y3 =

3
2
1
2
3
2

1
1
+1

1
2
1
2
1
2

=1
=0
= 2.

x1
0
x2 2


x3 = 0
x4 1
x5
1
con

0 0 1
B = [a5 , a4 , a2 ] = 0 1 1
1 0 1

1 1
y N = [a3 , a1 ] = 0 1 .
0 0

7.4 Solucion basica factible inicial

Fase II. Iteraci


on 2. Paso 1
Calculemos los multiplicadores simplex resolviendo B T = cB :

0 0 1 1
0
1 1 1
0
2

0 =
0 1 0
0 =
0 .
= 0 1 0
1 1 1
2
1 0 0
2
0
Los costes reducidos de las variables no basicas son

1
c3 = c3 T a3 = 0 [2, 0, 0] 0 = 2,
0
y

1
c1 = c1 T a1 = 1 [2, 0, 0] 1 = 3.
0
Todava no se ha llegado al optimo.
Fase II. Iteraci
on 2. Paso 2
Elegimos la variable no b
asica x3 como aquella que ha de entrar en la base.
Resolvemos el sistema By = a3 :

0 0 1 1 1
1 0 1
1
1

0 =
1 1 0
0 = 1 .
y = 0 1 1
1 0 1
0
1 0 0
0
1
Fase II. Iteraci
on 2. Paso 3
La variable b
asica a salir de la base se obtendr
a de calcular


xB1
1
= min
= min
= 1;
y1
1
es decir, saldr
a xB1 = x5 . Viendolo a partir de la expresi
on

xB1
x5
1
1
xB2 = x4 = b1 b y = 1 1 ,
2
1
xB3
x2
se comprueba tambien que la primera variable que llega a cero al incrementar x3 es x5 .
Fase II. Iteraci
on 2. Paso 4
Readaptemos la solucion y las estructuras de datos correspondientes:
x3
x5
x4
x2

=1
x5 y1 = 1 1 1 = 0
x4 y2 = 1 + 1 1 = 2
x2 y3 = 2 + 1 1 = 3.

439

440

Captulo 7. El metodo simplex

La nueva soluci
on es

x1
0
x2 3


x3 = 1


x4 2
x5
0
con

1 0 1
B = [a3 , a4 , a2 ] = 0 1 1
0 0 1

0 1
y N = [a5 , a1 ] = 0 1 .
1 0

Fase II. Iteraci


on 3. Paso 1
Calculemos los multiplicadores simplex resolviendo B T = cB :

1 0 0 1
0
1 0 0
0
0
= 0 1 0 0 = 0 1 0 0 = 0 .
1 1 1
2
1 1 1
2
2
Los costes reducidos de las variables no basicas son

0
c5 = c5 T a5 = 0 [0, 0, 2] 0 = 2,
1
y

1
c1 = c1 T a1 = 1 [0, 0, 2] 1 = 1.
0
Todos los costes reducidos de las variables no b
asicas son positivos por lo que se ha alcanzado
el u
nico optimo del problema.
La soluci
on nal es

x1
0
x2 3


x3 = 1 .


x4 2
x5
0
El valor optimo de la funci
on objetivo es 6. El proceso iterativo que se ha seguido en el
ejemplo se representa en la gura 7.6.

7.5 Implementaciones practicas del metodo simplex

441

 

x2

2
3

 
0
3

P


 
0
1

1/2
3/2

x1

Figura 7.6
Trayectoria seguida en la resoluci
on del ejemplo 7.8 empleando las fases I y II del metodo
simplex

7.4.2

M
etodo de penalizaci
on o de la gran M

Esta forma de obtener una soluci


on inicial b
asica factible del problema a resolver consiste en
combinar en una las fases I y II del metodo simplex y resolver
min.

n


ci xi + M

i=1

s. a

Ax

m


xaj

j=1

xa
= b
x, xa 0.

La constante M se elige sucientemente grande de tal forma que este muy penalizado que en
on factible, las variables articiales se ver
an
la soluci
on xa = 0. Eventualmente, si existe soluci
obligadas a tomar valor cero en el optimo de este problema.
Esta alternativa tiene dos importantes inconvenientes:
La necesidad de escoger un determinado valor jo de M que asegure que las variables
articiales no van a estar en la base de la soluci
on optima.
Que un valor muy grande de M , que domine por completo el de los elementos del vector
c y los coecientes de la matriz A, puede hacer que los errores de redondeo de los c
alculos
y la inestabilidad numerica del proceso lleguen a ser importantes.

7.5

Implementaciones pr
acticas del m
etodo simplex

Cuando un problema es de considerables dimensiones (m y n muy grandes), no resulta pr


actico
en cada iteraci
on del metodo simplex resolver, partiendo de cero, los sistemas de ecuaciones
lineales B T = cB y By = aq . Las formas pr
acticas que se utilizan para resolver en ordenadores
problemas de programaci
on lineal palian en parte este inconveniente.

442

7.5.1

Captulo 7. El metodo simplex

El m
etodo simplex en forma de tableau

Una de las primeras formas sin duda la m


as difundida en los libros de texto de programaci
on
lineal tradicionales en que se implement
o pr
acticamente el metodo simplex es la que se conoce
como la de los tableau. Aun cuando en opini
on de este autor esta forma de operar introduce
no pocas confusiones y formas viciadas de entender las manipulaciones algebraicas inherentes
al procedimiento simplex, debido a su amplia difusi
on, pasamos a continuaci
on a considerarla
brevemente.
Se basa en un conjunto de procedimientos para manipular un tableau como el que sigue.
z

xB

xN

TD

T cT B 1 N
cN
B

cTB B 1 b

xB

B 1 N

B 1 b

(7.8)

T D designa el vector termino de la derecha.


Si T es una matriz cuyos coecientes son los del tableau anterior, en realidad ese tableau
representa el sistema

xB = 0,
T
xN
1
de m + 1 ecuaciones lineales y n + 1 variables: las n de x y z.
El metodo simplex en forma de tableau se diferencia del expuesto hasta este apartado en
N del Paso 1 e y del Paso 2 se eliminan y el Paso 4 de pivotaci
que el calculo de y c
on se
lleva a cabo directamente en el tableau.
Si suponemos que las variables b
asicas que entran y salen de la base en una determinada
iteraci
on son, respectivamente, la q y la p, y que las las y las columnas del tableau de esa
iteracion estan numeradas partiendo de cero, la operaci
on de pivotaci
on conlleva:
i) dividir la la p de T por tpq , el elemento que ocupa la la p y la columna q de la matriz
T, y
ii) para 0 i m, i = p, restar de la la i la p multiplicada por tiq a n de hacer cero el
elemento q de esa la.
N , los
La pivotaci
on mantiene la forma de (7.8) en la nueva base. Los costes reducidos, c
componentes basicos de la direccion de descenso q , B 1 aq , as como el vector de variables
b
asicas, B 1 b, se obtienen directamente del tableau.
La version en tableau del metodo simplex se confunde habitualmente con el propio nombre
del metodo pues as fue la forma en que fue descrita su mec
anica originalmente por Dantzig.
El procedimiento de los tableau no es la forma m
as adecuada de implementar el metodo
simplex desde los puntos de vista numerico y comercial. Para problemas de grandes dimensiones
los mas frecuentes que se plantean en la industria, investigaci
on, etc., en los que la matriz
de coecientes de las condiciones suele tener una estructura muy dispersa, al utilizar los tableau
esa estructura se destruye, siendo ademas necesario calcular, para rehacer los cuadros, todas
las columnas de la matriz B 1 N , a pesar de que s
olo se necesita calcular B 1 aj .

7.5 Implementaciones practicas del metodo simplex

443

En aras de aclarar la mec


anica de esta variante del metodo simplex, no obstante las anteriores consideraciones, a continuaci
on resolvemos un peque
no programa lineal por el metodo
simplex en tableau.
Ejemplo 7.9 Resolvamos:
x1 + x2 4x3

min.
s. a

x1 + x2 + 2x3
x1 + x2 x3
x1 + x2 + x3
x1 , x2 , x3

9
2
4
0.

Para empezar introducimos como siempre las variables de holgura a n de transformar el


problema en la forma est
andar:
x1 + x2 4x3

min.
s. a

x1 + x2 + 2x3 + x4
=
x1 + x2 x3
+ x5
=
x1 + x2 + x3
+ x6 =
x1 , x2 , x3 , x4 , x5 , x6

9
2
4
0.

Iteraci
on 1
z

x1

x2

x3

x4

x5

x6

TD

x4

x5

x6

La variable que entra en la base es la no b


asica cuyo coste reducido es mas negativo: x3 . El 1
indica que de entre las relaciones 9/2 y 4/1 se elige esta u
ltima, por lo que saldr
a de la base
aquella variable que pivota en la tercera la: x6 .
Iteraci
on 2
z

x1

x2

x3

x4

x5

x6

TD

16

x4

x5

x3

444

Captulo 7. El metodo simplex

Iteraci
on 3
z

x1

x2

x3

x4

x5

x6

TD

1
1
3

x1

4
1

2
2

17
1
3

x5

0
1
3

x3

2
2
3

1
1
3

6
13
3

Se ha llegado a un punto en el que todos los costes reducidos de las variables no b


asicas son
positivos por lo que se ha conseguido el optimo del problema. La soluci
on nal es por tanto

x1
1/3
x2 0

x3 13/3

=
.
x4 0

x5 6
x6
0

El valor de la funci
on objetivo es z = 17. La base optima la constituyen los vectores columna
a1 , a5 y a3 . Es decir,

1 0 2
B = [a1 , a5 , a3 ] = 1 1 1 .
1 0 1
La inversa de B es la submatriz que en el tableau nal ocupa el lugar que en el inicial ocupaba
la submatriz identidad; es decir,

B 1

7.5.2

1/3 0 2/3

0 1 1 .
=
1/3 0 1/3

Forma producto de la inversa de la base

Esta implementacion del metodo simplex revisado descrito en la tabla 7.1 de la p


agina 420,
T
trata de resolver ecazmente los sistemas de ecuaciones lineales B = cB y By = aq . Se
plante
o ante la necesidad de resolver estos sistemas cuando su dimension es muy grande.
Con este objetivo, en cada iteraci
on solo se genera aquella informaci
on estrictamente nece1
saria manteniendose una representaci
on explcita de la matriz B , la cual se recalcula despues
de cada cambio de base. En esa representacion y en su adaptaci
on es donde los codigos modernos de programaci
on lineal centran sus esfuerzos, diferenci
andose unos de otros en la ecacia
con la que las llevan a cabo. En general, si B 1 es la inversa de la matriz b
asica B en una

7.5 Implementaciones practicas del metodo simplex

445

determinada iteraci
on, la adaptaci
on de la misma para la siguiente iteraci
on se puede expresar
como
1 = EB 1 ,
B
donde

(y ep )eTp
E=I
yp

y1 /yp

..
..

.
.

1 yp1 /yp

1/yp

yp+1 /yp 1

..
..
.
.
ym /yp
1

columna p

(7.9)

y y = B 1 aq . A la matriz E se la suele denominar matriz de coecientes eta o matriz eta.


Estas expresiones surgen del hecho de que
= BE 1 ,
B
donde

E 1

1
..

y1
.
..
1 yp1
yp
yp+1 1
.
..
.
..
ym
1

Observese que al multiplicar a la derecha la matriz B por la matriz E 1 las columnas de B


quedan inalteradas, excepto la p-esima que se transforma, seg
un lo requerido, en By = aq .
Si como ocurre habitualmente el procedimiento simplex se inicia con una matriz B igual a
la identidad, despues de k iteraciones la matriz inversa de la base, B 1 , se puede expresar en
una forma producto, de la siguiente manera
Bk1 = Ek Ek1 E1 B 1 .
En esta expresi
on cada matriz elemental Ei tiene la forma de (7.9). Para su implementaci
on en
ordenador este esquema operativo u
nicamente requiere almacenar los valores de los elementos
de la columna de la matriz Ei que la hace diferente de la matriz identidad, y el propio valor
del ndice i.
A tenor de lo indicado, la iteraci
on k + 1 del metodo simplex revisado que se expuso en la
tabla 7.1 se puede reescribir, introduciendo la forma producto de la matriz inversa de la base,
como se indica en la tabla 7.3. Recordemos que B = {j1 , . . . , jm } es el conjunto de ndices de
la variables b
asicas.
La gran ventaja de esta forma de implementar el metodo simplex radica en su ecacia para
abordar estructuras dispersas de matrices A de grandes dimensiones. Aunque Bk1 puede no

446

Captulo 7. El metodo simplex

Tabla 7.3
Algoritmo simplex revisado en la forma producto de la inversa de la base
Paso 1 Calcular los multiplicadores simplex a partir de
$
$
### T $
T = cTB B 1 =
cB Ek Ek1 E1 .
Esta operacion se conoce como transformaci
on inversa o BTRAN (de backward transformation).
Determinar los costes reducidos de las variables no basicas a partir de
cj = cj T aj ,

para todo j N .

Si cj 0 para todo j
/ B, parar; la solucion es optima.
cj < 0}. Calcular
Paso 2 Escoger q N tal que cq = minjN {
y = B 1 aq = (Ek (Ek1 (E1 aq ))).
Esta operacion se conoce como transformaci
on directa o FTRAN (de forward transformation).
Si y 0, parar; el problema es no acotado.
Paso 3 Si xj = B 1 b, establecer la variable basica xjp que sale de la base determinando la
la p sobre la que pivota la columna q a partir de la relacion

xjp
xji
= min
: yi > 0 .
1im
yp
yi
A esta operacion se la denomina CHUZR.
Paso 4 Adaptar la matriz inversa de la base y la soluci
on a partir

1
y1 /yp

.
..
.

..

1 yp1 /yp

Ek+1 =
1/yp

yp+1 /yp 1

.
..

.
..

ym /yp

de

La nueva inversa de la base sera B 1 Ek+1 Ek E2 E1 y la nueva solucion xj


Ek+1 xj .
A esta operacion se la conoce como WRETA.

7.5 Implementaciones practicas del metodo simplex

447

ser sucientemente dispersa, como se almacena como producto de matrices elementales eta
muy dispersas, este problema se soslaya en gran medida.
Conforme avanza el proceso para resolver un determinado programa lineal, es inevitable que,
particularmente en problemas de grandes dimensiones, se produzcan errores de redondeo. Para
evitarlos es aconsejable refactorizar peri
odicamente la matriz B 1 ; en sucesivas iteraciones,
despues de esa refactorizacion, las transformaciones elementales eta que de ellas se derivasen
se deberan aplicar a esa nueva B 1 . Esta refactorizaci
on, conocida habitualmente en la literatura especializada y en los programas comerciales disponibles por INVERT, ahorra tiempo de
calculo en las siguientes etapas, memoria de ordenador y reduce los efectos del redondeo de las
operaciones algebraicas que se efect
uan.
Las rutinas que hoy en da implementan la operaci
on INVERT son extremadamente sosticadas. Para llevarla a cabo se permutan las las y las columnas de la matriz B a n de que
el resultado nal tenga el menor n
umero de elementos distintos de cero posible. Los esquemas
publicados y empleados para optimizar esa permutaci
on de las y columnas son diversos. Se
basan en manipulaciones y esquemas como los referidos en el captulo 3. Los m
as populares son
los de Hellerman y Rarich [1971] y [1972], conocidos como p3 y p4 , y el de Markowitz [1957],
introducido en la p
agina 261.

7.5.3

Factorizaci
on LU de la base

La forma producto de la matriz inversa de la base ha dado paso en los c


odigos mas modernos
para el tratamiento de problemas de muy grandes dimensiones (decenas o cientos de miles de
variables y condiciones), a factorizaciones LU de la base numericamente estables. Este enfoque
almacena la matriz L1 mediante una sucesion de matrices elementales, que dieren de la
identidad en un solo elemento debajo de la diagonal principal, y matrices de permutaci
on. La
idea original de proceder as es de Bartels y Golub [1969], siendo muchas las implementaciones
recientes basadas en ella (ver Reid [1982], Gill, Murray, Saunders y Wright [1986] y Gill, Murray
y Wright [1991]).
En concreto, si se parte de la base B0 (normalmente B0 = I), se puede obtener por
eliminaci
on de Gauss, por ejemplo:
Lm Pm L1 P1 B0 = U,

(7.10)

donde, siguiendo un razonamiento similar al realizado en el captulo 1 al explicar la descomposicion LU , se puede comprobar que U = Um Um1 U1 , siendo Ui la matriz que se obtiene
de la identidad, I, al reemplazar su columna i por la correspondiente de U . Es decir, si, por
ejemplo,

3 2 1
U = 3 5 ,
4
las matrices U1 , U2 y U3 seran

U1 =

1 2
U2 = 3

1
Es f
acil comprobar que U = U3 U2 U1 .

y U3 =

1
1 5 .
4

448

Captulo 7. El metodo simplex

Despues de k iteraciones se tendra que


Bk = B0 E11 E21 Ek1 ;
es decir, que

Lm Pm L1 P1 Bk = Um Um1 U1 E11 E21 Ek1 .

Mediante esta forma de factorizar la base, la resoluci


on del sistema de ecuaciones BkT = cB ,
en el paso 1 del algoritmo de la tabla 7.3, se llevara a cabo mediante los pasos siguientes:
1. Hacer i = k y = cB .
2. Si i 1, hacer EiT , i i 1 e ir otra vez a 2.
3. Hacer j = 1.
4. Si j m, hacer UjT , j j + 1 e ir a 4.
5. Hacer j = m.
6. Si j 1, hacer PjT LTj , j j 1 e ir a 6.
Los pasos 1 a 4 corresponden a la resoluci
on de


T Um Um1 Ek1 = cTB ,

el 5 y el 6 a la operaci
on
T



T Lm Pm L1 P1 .

Esto se hace as porque, en los pasos 1 a 4, en vez de resolver el sistema T Bk = cTB , se


T . Como T = (  )T X, los pasos 5 y 6 restablecen el verdadero
resuelve (  )T XBk = cB
valor de T multiplicando la soluci
on obtenida en los pasos anteriores por X. Evidentemente,
X = Lm Pm L1 P1 .
De igual manera se resolvera el sistema Bk y = aq :
1. Hacer j = 1 y y = aq .
2. Si j m, hacer y Lj Pj y, j j + 1 e ir otra vez a 2.
3. Hacer j = m.
4. Si j 1, hacer y Uj1 y, j j 1 e ir a 4.
5. Hacer i=1.
6. Si i k, hacer y Ei y, i i + 1 e ir a 6.
En los pasos 1 y 2 se lleva a cabo la operaci
on
y  (Lm Pm ( (L1 P1 aq ))).
Del 3 al 6 se resuelve

Um Um1 Ek1 y



= y.

7.5 Implementaciones practicas del metodo simplex

449

Se procede as porque en vez de disponer de Bk se dispone de XBk , y el sistema Bk y = aq es


equivalente a XBk y = Xaq , por lo que premultiplicando aq por X = Lm Pm L1 P1 , se llega
a tal sistema y de el a la soluci
on que nos interesa: y.
olo es necesario
Para almacenar las matrices Ei , Lj y Uj en la memoria del ordenador s
guardar el valor de los subndices y los elementos distintos de cero de las columnas que designan
esos subndices. De las matrices de permutacion Pi solo es necesario guardar un puntero que
indique con que la se intercambia la i.
1 , . . . , U 1 , E , . . . , E ,
Un hipotetico chero que contuviese P1 , L1 , P2 , L2 , . . . , Pm , Lm , Um
1
k
1
caso de no poderse guardar en memoria todos los valores de estas matrices, se denomina chero
eta. Para resolver BkT = cB , ese chero se leera de atr
as hacia adelante (backward en ingles),
en una operaci
on que se ha dado en denominar BTRAN; para resolver Bk y = aq , de adelante
hacia atr
as (forward), en lo que se denomina operaci
on FTRAN.

Cuando el chero eta con las transformaciones BTRAN y FTRAN se hace muy grande, o se
vislumbra una perdida de estabilidad numerica, se refactoriza la base obteniendose una nueva
odica de esta factorizacion puede hacerse siguiendo
B0 . Las operaciones de refactorizacion peri
alguno de los esquemas que se recogen en Reid[1982], Bartels y Golub[1969], Forrest y Tomlin
[1972], Saunders [1976] y Gill, Murray, Saunders y Wright [1986]. La idea general de cualquiera
de ellos se basa en que si en (7.10) se agrupa Lm Pm L1 P1 bajo la expresi
on L1 , al modicar
en una iteraci
on dada, k, la base seg
un la expresi
on ya indicada, Bk+1 = Bk Ek1 , resultando
que la columna p de la base se reemplaza por una aq de A, se tiene que
Lm Pm L1 P1 Bk+1 = L1 Bk+1 = Um U1 Ek1 = U Ek1 .
La matriz L1 Bk+1 , en general, no ser
a estrictamente triangular superior sino que tendr
a la
forma que sigue.

Columna p

Esta matriz se puede multiplicar a la derecha por una de permutaci


on Q de tal forma que se
obtenga otra H (matriz de Hessenberg) de la forma

450

Captulo 7. El metodo simplex

Columna p
Es decir, L1 Bk+1 Q = U Ek1 Q = H. A continuaci
on se procede a reducir H a la forma
triangular superior aplic
andole una sucesi
on de transformaciones elementales de la forma

Mi =

1
..

.
1
mi 1
..

.
1

i = p, p + 1, . . ., m 1. Al nal de este u
ltimo proceso se tendr
a que
Mm1 Mp L1 Bk+1 Q = Uk+1 .
La matriz inversa de la nueva matriz b
asica se obtendra f
acilmente mediante la expresion
1
1
= QUk+1
M L1 ,
Bk+1

donde M = Mm1 Mp . Evaluar esta matriz resulta extremadamente sencillo pues las diversas matrices de la expresion anterior son elementales. De ellas, como veamos anteriormente,
solo hay que guardar en la memoria del ordenador una mnima cantidad de informaci
on.
De los diversos metodos de adaptaci
on de la matriz B descompuesta en la forma LU que
recoge la literatura especializada, y que usan los c
odigos de programaci
on lineal m
as extendidos,
merecen destacarse los de Forrest y Tomlin [1972], Reid[1982], Saunders [1976] y Gill, Murray,
Saunders y Wright [1986].
En el apendice E se incluye el listado en Fortran 77 del programa Bbmi desarrollado por
el autor que implementa exactamente el algoritmo de la tabla 7.3. La operaci
on INVERT se
efect
ua a partir de una factorizaci
on LU de la base reordenando las las y columnas de esta
de acuerdo con el criterio de Markowitz.

7.6

El m
etodo simplex para variables acotadas

Hasta ahora hemos supuesto que las variables que denen el programa lineal no est
an acotadas
superiormente y, si lo est
an, la forma de transformar el problema en la forma est
andar. En lo

7.6 El metodo simplex para variables acotadas

451

sucesivo nos referiremos al problema


min. cT x
s. a

Ax = b
lxu .

(7.11)

Las variables restringidas seg


un (7.11) se dicen acotadas. Si la variable xj tiene lj = y
uj = , se dice libre. Si l = 0 las restricciones son las usuales de no negatividad. Cualquier
vector cota inferior, l, puede transformarse en el vector cero sin m
as que efectuar el cambio de
variables x = x l.
La forma m
as rapida de abordar el problema (7.11), de acuerdo con lo hasta ahora estudiado,
consiste en introducir unos vectores de holgura, x1 y x2 , que transformen el problema en otro
de la forma
min.
cT x
s. a

Ax
x + x1
x x2
x, x1 , x2

=
=
=

b
u
l
0

y posteriormente resolverlo por el metodo habitual. El inconveniente inmediato de esta forma


de actuar surge del hecho de que el n
umero de variables se triplica y el n
umero de condiciones
pasa a ser m+2n. Est
a claro que el esfuerzo a realizar para resolver este problema se incrementa
notablemente y puede llegar a ser prohibitivo.
A continuaci
on introducimos el metodo mas adecuado para resolver problemas como el de
(7.11): el metodo simplex para variables acotadas. Se basa en la introducci
on de unas sencillas modicaciones en el clasico que ya hemos explicado. Considerese para ello el sistema de
inecuaciones
Ax = b
(7.12)
lxu ,
donde la matriz Amn se supone, sin perdida de generalidad, de rango m.
Denici
on 7.1 Una soluci
on b
asica factible del sistema (7.12) es aquella solucion en la que
n m variables (variables no b
asicas) toman el valor de uno de sus lmites, l o u, y las
restantes m (variables b
asicas) corresponden a las columnas independientes de A.
De igual forma a como hacamos en apartados anteriores, descompongamos la matriz A en
T , xT ].
[B Nl Nu ], con rango(B) = m, y de acuerdo con esto, el vector x en [xTB , xN
Nu
l
Un vector x se dice solucion b
asica factible del sistema de inecuaciones (7.12) anterior si
xB es solucion del sistema
BxB = b,
as lB < xB < uB , entonces x es una soluci
on b
asica factible
xNl = lNl y xNu = uNu . Si adem
no degenerada; por el contrario, si alg
un componente de xBj es igual a lj o uj , la soluci
on se
dice b
asica factible degenerada.
La idea que anima el metodo simplex para variables acotadas es muy sencilla. Supongamos
que partimos de una soluci
on b
asica factible. En ese punto se examinan las variables no b
asicas

452

Captulo 7. El metodo simplex

(variables en uno de sus lmites) a traves del valor de sus costes reducidos. Si la solucion puede
ser mejorada en un problema de minimizaci
on, ello quiere decir que alguna variable no
b
asica que este en su lmite inferior (para que el problema pueda seguir siendo factible s
olo se
podr
a incrementar) tendr
a un coste reducido negativo, o que otra que este en su lmite superior
tendr
a un coste reducido positivo.
Razonando en terminos algebraicos, expresemos las condiciones de la forma
BxB + Nl xNl + Nu xNu = b.
El vector xB es:

xB = B 1 b B 1 Nl xNl B 1 Nu xNu .

La funci
on objetivo es
T x + cT x
T
z = cT x = cB
B
N l N l + c N u xN u

T x
T x
= cTB B 1 b B 1 Nl xNl B 1 Nu xNu + cN
+ cN
u Nu
l Nl

T cT B 1 N x
T
T 1
= cTB B 1 b + cN
Nl + cNu cB B Nu xNu .
l
B
l
T cT B 1 N ;
El vector de costes reducidos de las variables no b
asicas en su lmite inferior es cN
l
B
l
T
T
1
el de las no b
asicas en su lmite superior, cNu cB B Nu . La funci
on objetivo se puede mejorar
(decrementar) si

cj cTB B 1 aj < 0

para alguna xj = lj

cj cTB B 1 aj > 0

para alguna xj = uj .

as la funci
on
Si se elige una determinada variable no b
asica, xq , como aquella que mejora m
objetivo de acuerdo con un criterio que se considere adecuado, y su valor lo modicamos
continuamente desde el lmite o cota en la que este en la direccion hacia la otra cota, la funci
on
objetivo mejorar
a (decrecera) mientras se puedan modicar las variables b
asicas de tal manera
que persista la factibilidad del problema (se sigan satisfaciendo las condiciones). Este proceso
se detendr
a cuando:
i) una variable b
asica llegue a uno de sus lmites, o
ii) la variable no b
asica que se modica llegue al lmite opuesto del que parte antes de que
ocurra lo anterior.
Si ocurre el caso i), la variable b
asica correspondiente se har
a no b
asica, pasando a ocupar
su sitio en la base la no b
asica que se modica. Si ocurre ii), la base no se modica. Cuando
ocurren simult
aneamente i) y ii) resulta una soluci
on b
asica factible degenerada.
En terminos algebraicos otra vez, si N l es el conjunto de los ndices de las variables no
asicas en su lmite superior, y se modica xq ,
b
asicas en su lmite inferior y N u el de las no b
se tendr
a que
xB = B 1 b B 1 Nl xNl B 1 Nu xNu B 1 aq
y,
= b

7.6 El metodo simplex para variables acotadas

453

= B 1 b B 1 Nl xN B 1 Nu xN y y = B 1 aq .
donde b
u
l
En este punto caben considerar dos opciones: que q N u , o que q N l . Si q N l , el incremento posible de xq desde su lmite inferior lq , , ha de ser positivo para seguir manteniendo
la factibilidad del problema; el m
aximo valor de este sera



bi lB

min
: yi > 0

1 = 1im

yi



bi uB
= min

min
: yi < 0

2 = 1im

u q lq .

Si, por el contrario, q N u , el incremento desde su lmite superior uq ha de ser negativo. El


maximo de este sera



bi lB

max
: yi < 0

1im
y
1
i



bi uB
= max

max
: yi > 0

2 = 1im

lq uq .

Hechos estos calculos se debera proceder a modicar las estructuras de datos correspondientes, a n de reejar los cambios habidos en la base y, partiendo de la nueva soluci
on obtenida,
reemprender el proceso.
Como se puede ver, unos simples cambios en la mecanica del proceso del metodo simplex,
que reriendonos al algoritmo de la tabla 7.1 afectan s
olo a los pasos 2 y 3, permiten abordar
ecazmente el problema de las variables acotadas. Es importante hacer notar que todos los
codigos que implementan el metodo simplex de una u otra forma lo hacen para variables
acotadas. De hecho, en un ordenador, una variable en forma est
andar, xj 0, en realidad se
20
trata como si 0 xj 10 , por ejemplo, ya que a todos los efectos, en una m
aquina que
20
trabaje con precisi
on nita, la cantidad 10 es sucientemente grande como para considerarla
casi innita en ese entorno.
En la tabla 7.4 se expone el algoritmo simplex revisado para variables acotadas. El conjunto
N l designa los ndices de las variables no b
asicas en su lmite inferior y N u los de aquellas en
su lmite superior. Observese que, de acuerdo con lo expuesto en el p
arrafo anterior sobre los
lmites reales al trabajar con ordenadores, la existencia de una soluci
on no acotada se determina
mediante una simple comprobaci
on en el paso 3 o en el 4.

454

Captulo 7. El metodo simplex

Tabla 7.4
Algoritmo simplex revisado para variables acotadas
Paso 1 Asignaci
on de precios. Comprobaci
on de
optimo.
(a) Calcular los multiplicadores simplex resolviendo el sistema B T = cB .
(b) Calcular los costes reducidos de las variables no basicas, cj = cj T aj , para
todo j
/ B.
(c) Comprobar que se ha llegado al optimo: si cj 0 para todo j N l y cj 0 para
todo j N u , parar; la solucion es optima.
Paso 2 Determinaci
on de columna de pivotaci
on.
(a) Determinar la variable no b
asica xq que debe entrar en la base (encontrar una
direccion de descenso): escoger q
/ B tal que


cj < 0}|, max {
cj > 0} .
cq = max | min {
jN l
jN u
(b) Resolver By = aq . Si q N l , ir al paso 3; si q N u , al 4.
Paso 3 Determinaci
on la de pivotaci
on.
Determinar la variable b
asica xjp que sale de la base: calcular :



xji lji
xji uji
= min min
: yi > 0 , min
: y i < 0 , uq l q .
1im
1im
yi
yi
Si T ol.: parar; el problema es no acotado. Si no, ir al paso 5.
Paso 4 Determinaci
on la de pivotaci
on.
Determinar la variable b
asica xjp que sale de la base: calcular :



xji uji
xji lji
= max max
: yi > 0 , max
: y i < 0 , lq u q .
1im
1im
yi
yi
Si T ol.: parar; el problema es no acotado.
Paso 5 Pivotaci
on.
Adaptar la solucion y la matriz B: hacer
xq lq + o uq + ,
xji xji yi , 1 i m ,
(solo si = uq lq )
B B + (aq ajp )eTp ,
B
Nl
Nu
jp
Ir al paso 1.

B {q}\{jp } ,
N l {jp }\{q} ,
N u {jp }\{q} ,
q,

(solo
(solo
(solo
(solo

si
si
si
si

 uq
=
= uq
= uq
= uq

lq )
lq y q N l )
lq y q N u )
lq ).

7.6 El metodo simplex para variables acotadas

455

Ejemplo 7.10 Resolver:


min. 2x1 4x2 x3
s. a

2x1 + x2
x1 + x2
0
0
1

x3
x3
x1
x2
x3

10
4
4
6
4.

Se introducen como siempre las variables de holgura en las condiciones 1 y 2. El problema


resulta:
min. 2x1 4x2 x3
s. a

2x1 + x2 + x3 + x4
x1 + x2 x3
+
0
0
1
x4 ,

x5
x1
x2
x3
x5

=
=

10
4
4
6
4
0.

Como es inmediato obtener una soluci


on factible y una base de partida, entramos directamente en la fase II del metodo simplex. Partiremos de:


1 0
B = [a4 , a5 ] =
,
0 1

Nl = [a1 , a2 , a3 ] ,

Nu =

y de la soluci
on inicial x = [0, 0, 1, 9, 5]T . La funci
on objetivo en este punto es 1.
Iteraci
on 1. Paso 1
Calculemos los multiplicadores simplex:
=B

1 0
cB =
0 1



0
0
=
.
0
0

Los costes reducidos de las variables no basicas son:


2
c1 = c1 a1 = 2 [0, 0]
= 2,
1
T

1
c2 = c2 a2 = 4 [0, 0]
= 4
1
T

1
c3 = c3 a3 = 1 [0, 0]
= 1.
1
T

Todava no se ha llegado al optimo del problema pues las variables x1 , x2 y x3 estan en sus
lmites inferiores y sus costes reducidos son negativos.

456

Captulo 7. El metodo simplex

Iteraci
on 1. Paso 2
asica de coste reducido mas negativo.
Se elige la variable x2 para entrar en la base por ser la no b
Se resuelve By = a2 :
   

1
1
1 0
1
=
.
y = B a2 =
1
1
0 1
Iteraci
on 1. Paso 3
La variable a salir de la base de determinar
a de calcular el incremento :



= min xB1 lB1 , xB2 lB2 = 9 0 , 5 0


1
= min
1
1
y1
y2

u 2 l2 = 6 0

= 5.

Saldr
a, por tanto, la variable x5 pues es la que antes llega a su lmite inferior.
Iteraci
on 1. Paso 4
Readaptemos la solucion y las estructuras de datos:
x2 l2 + = 0 + 5 = 5
x4 x4 y1 = 9 5 1 = 4
x5 x5 y2 = 5 5 1 = 0.
La nueva soluci
on es x = [0, 5, 1, 4, 0]T , con


1 1
B = [a4 , a2 ] =
,
0 1

Nl = [a1 , a3 , a5 ]

y Nu = .

La nueva funci
on objetivo es 21.
Iteraci
on 2. Paso 1
Calculemos los multiplicadores simplex:
=B

1 0
cB =
1 1

1 

0
1 0
=
4
1 1

Los costes reducidos de las variables no basicas son:

c1 = c1 T a1 = 2 [0, 4]




0
0
=
.
4
4

2
= 2,
1


1
= 5
c3 = c3 a3 = 1 [0, 4]
1
T

0
c5 = c5 a5 = 0 [0, 4]
= 4.
1
T

Como la variable x3 esta en su lmite inferior y su coste reducido es negativo, todava no se ha


llegado al optimo del problema.

7.6 El metodo simplex para variables acotadas

457

Iteraci
on 2. Paso 2
Se elige la variable x3 para entrar en la base. Se resuelve By = a3 :
y=B

1 1
a3 =
0 1



1
2
=
.
1
1

Iteraci
on 2. Paso 3
La variable a salir de la base de determinar
a de calcular el incremento :



x

l
4

0
B
B

1
1

= min
=

2
y
1


xB2 uB2
56
= min
= 1.
2 = min
=

y2
1

u 3 l3 = 4 1
Saldr
a, por tanto, la variable x2 pues es la que antes llega a uno de sus lmites: el superior.
Iteraci
on 2. Paso 4
Readaptemos la solucion y las estructuras de datos:
x3 l3 + = 1 + 1 = 2
x4 x4 y1 = 4 1 2 = 2
x2 x2 y2 = 5 + 1 1 = 6.
La nueva soluci
on es x = [0, 6, 2, 2, 0]T , con


1 1
,
B = [a4 , a3 ] =
0 1

Nl = [a1 , a5 ]

y Nu = [a2 ].

La nueva funci
on objetivo es 26.
Iteraci
on 3. Paso 1
Calculemos los multiplicadores simplex:
=B

1 0
cB =
1 1

1 

0
1 0
=
1
1 1

Los costes reducidos de las variables no basicas son:



0
0
=
.
1
1

2
c1 = c1 a1 = 2 [0, 1]
= 3,
1
T

1
c2 = c2 a2 = 4 [0, 1]
= 5
1
T

0
c5 = c5 a5 = 0 [0, 1]
= 1.
1
T

Como las variables x1 y x5 , que estan en sus lmites inferiores, tienen costes reducidos negativos,
todava no se ha llegado al optimo del problema.

458

Captulo 7. El metodo simplex

Iteraci
on 3. Paso 2
Se elige la variable x1 para entrar en la base. Se resuelve By = a1 :
y=B

1 1
a1 =
0 1

1 

2
1 1
=
1
0 1



2
3
=
.
1
1

Iteraci
on 3. Paso 3
La variable a salir de la base de determinar
a de calcular el incremento :



xB1 lB1
20

= min
=

3
y
1


2
x

u
2

4
= min
= .
B2
B2

=
min
=

3
2

y2
1

u 1 l1 = 4 0
Saldr
a la variable x4 pues es la que antes llega a uno de sus lmites: el inferior.
Iteraci
on 3. Paso 4
Readaptemos la solucion y las estructuras de datos:
x1 l1 + = 0 + 2/3 = 2/3
x4 x4 y1 = 2 (2/3) 3 = 0
x3 x3 y2 = 2 + (2/3) 1 = 8/3.

La nueva soluci
on es:

x1
2/3
x2 6

x3 = 8/3 ,

x4 0
x5
0


con

2 1
B = [a1 , a3 ] =
,
1 1
La nueva funci
on objetivo es 28.

Nl = [a4 , a5 ]

y Nu = [a2 ].



Iteraci
on 4. Paso 1
Calculemos los multiplicadores simplex:
=B

2 1
cB =
1 1

1 

2
1/3 1/3
=
1
1/3 2/3

Los costes reducidos de las variables no basicas son:

1
c2 = c2 a2 = 4 [1, 0]
= 3,
1
T

1
c4 = c4 a4 = 0 [1, 0]
=1
0
T

2
1
=
.
1
0

7.7 Complejidad computacional del metodo simplex




459

0
= 0.
c5 = c5 a5 = 0 [1, 0]
1
T

Los costes reducidos de las variables no basicas en sus lmites inferiores son cero y 3, y el de
la variable en su lmite superior 1. Se ha llegado, por tanto, a un optimo del problema, aunque
no es el u
nico. En efecto, si se incrementa x5 , manteniendo x2 = 0 y x4 = 6 jos, las variables
x1 y x3 se modicaran de la forma:


x1
x3

=B

bB

2/3
1/3
a5 x5 =

x .
8/3
2/3 5

Para cualquier x5 < 2, la soluci


on

x1
2/3 1/3x5
x2

x3 = 8/3 + 2/3x5

x4

0
x5
0
es optima. El valor de la funci
on objetivo optimo es 28.

7.7

Complejidad computacional del m


etodo simplex

La complejidad computacional del metodo simplex depende del n


umero de iteraciones necesarias para resolver un problema y del n
umero de operaciones que requiere cada iteraci
on. No es
difcil deducir que, tal como la hemos estudiado en este captulo, cada iteraci
on de su versi
on
revisada requiere alrededor de m(n m) + (m + 1)2 multiplicaciones y m(n + 1) sumas o restas.
Es decir del O(mn) en los dos casos.
Por lo que se reere al n
umero de iteraciones necesarias, como el metodo va de un punto
extremo a otro del politopo que denen las condiciones, dado que el n
umero de puntos extremos
de un programa lineal en forma est
andar con n variables y m condiciones es C(n, m), se tiene
que
& 'm
n
n!

C(n, m) =
2m ,
m!(n m)!
m
siempre y cuando n 2m. De acuerdo con esto, en el peor de los casos, parece logico temerse un
n
umero de iteraciones exponencial. Este temor lo conrman ejemplos especialmente dise
nados
para analizar el comportamiento del metodo en las peores circunstancias posibles.
Un problema cl
asico del mal comportamiento del metodo simplex en su resolucion es el
estudiado por Klee y Minty [1972]:
maximizar xn
s. a
0 x1 1
xi1 xi 1 xi1 ,
xi 0,
para 0 < < 1/2. Este problema tiene 2n puntos extremos.

i = 2, . . . , n
i = 1, 2, . . . , n,

460
x2

Captulo 7. El metodo simplex


 
0
x(3) = 1

x2


x(2) = 1

x(7)

x(6)
x(5)

x(4)

x3

 
1

x(3)

x(1) =

x(2)
x(1)

x1

x(0)

x(0)

x1

Figura 7.7
B
usqueda de la soluci
on del problema de Klee y Minty para n = 2 y n = 3
Comenzando desde el punto x = 0, el cual es obviamente factible, trabajando con precisi
on
absoluta, el metodo simplex recorrera todos y cada uno de los 2n puntos extremos. La gura 7.7
describe este problema para n = 2 y n = 3.
Aunque se pueden denir diversas variantes del metodo simplex para evitar que en el problema de Klee y Minty se recorran todos los puntos extremos, lo cierto es que se pueden construir
otros ejemplos en los que esas variantes tambien fallan. Lo que es contrastable, en cualquier
caso, es la complejidad exponencial te
orica del metodo simplex.
La pr
actica de todos los das de los u
ltimos cincuenta a
nos en que se ha utilizado masivamente el metodo simplex tambien ha permitido constatar que los casos extremos, como el ejemplo
de Klee y Minty, rara vez ocurren en problemas del mundo real. Esa misma pr
actica tambien
ha permitido concluir que, grosso modo, en problemas de tama
no moderado, el metodo simplex
requiere un n
umero de iteraciones real comprendido entre 4m y 6m. En problemas grandes o
muy grandes, el n
umero de iteraciones que cabe esperar llevar a cabo para resolverlos es m,

donde e < log2 (2 + n/m). Experimentos basados en tecnicas de simulacion Monte Carlo de
distribuciones de probabilidad articiales han conrmado conclusiones similares. En resumen,
la complejidad computacional pr
actica esperada del metodo simplex es del O(m2 n).
Teniendo tambien en cuenta el efecto que el tratamiento de la dispersidad de los problemas
puede acarrear en la complejidad del metodo, diversos estudios han llegado a establecer que la
complejidad del metodo la dene la ecuaci
on Km nd0,33 , donde K es una constante, 1,25 <
< 2,5 y d es el n
umero de elementos distintos de cero en la matriz de coecientes de las
condiciones, A, dividido por nm.
Todas estas consideraciones avalan la gran ecacia del metodo simplex aunque su complejidad computacional te
orica sea exponencial.

Referencias
Existen diversas formas de exponer el metodo simplex; en este captulo hemos escogido aquella
que creemos mejor ilustra, desde un punto de vista algebraico, que es lo que se hace en el

Ejercicios

461

metodo, su porque y como llevarlo a la pr


actica en ordenador. Para ello se ha seguido a
Bazaraa y Jarvis [1977], Bazaraa, Jarvis y Sherali [1990], Goldfarb y Todd [1989], Luenberger
[1984] y Schrijver [1986]. Tambien recomendamos Chvatal [1983], Gill, Murray y Wright [1991]
y Murty [1983], Fang [1993] y Padberg [1995].
Bastantes de las consideraciones sobre la implementacion pr
actica en ordenador del metodo
simplex estan basadas en la experiencia del autor al respecto. El programa Bbmi listado en el
apendice E es parte del fruto de alguna de ellas.

Ejercicios
7.1. Considerese el problema de programacion lineal
minimizar {cT x : Ax = b, x 0},
donde

!
A=

6 1 0 0 1 5
2 3 1 4 0 2
1 1 0 2 2 1

"

!
y b=

"
9
17 .
13

a) Determinar la solucion basica factible asociada a la base


!
B=

1 0 1
3 1 0
1 0 2

"
.

b) Estudiar para cu
al de los vectores c que se indican a continuacion esta base es optima:
1. c1 = [5, 2, 1, 2, 3, 10]T .
2. c2 = [30, 1, 0, 5, 2, 20]T .
3. c3 = [10, 1, 1, 6, 3, 15]T .
Existen optimos alternativos?
7.2. Resolver los siguientes problemas de programacion lineal usando el metodo simplex de la tabla 7.1,
partiendo de la base indicada.
a) minimizar x1 x2
s. a
x1 + 3x2 + x3
+ x4
2x1 + x2
x1 , . . . , x4
Base inicial:

= 9
= 8
0.


3 0
,
B = [a2 , a4 ] =
1 1

b) minimizar x1 x2
s. a
x1 + x2 x3 = 1
x1 , . . . , x3 0.
Base inicial:
B = [a1 ] = [1],

B 1 =


1/3 0
.
1/3 1

B 1 = [1].

462

Captulo 7. El metodo simplex


c) minimizar x1
s. a
2x1 + 3x2 + x3
x1 + x2
+ x4
+ x5
x1 x2
x1 , . . . , x5
Base inicial:
!
1
B = [a3 , a4 , a5 ] = 0
0
d) minimizar
s. a

= 21
= 2
= 3
0.
0 0
1 0
0 1

"
,

x1 + 15x2 3x3 + 20x4 x5 +


2x1 + x2 + x3
+ x5
+ x3
x5 +
x1
+ 2x3 + x4 + x5 +
2x1

Base inicial:

!
B = [a2 , a7 , a4 ] =

1 0 0
0 1 0
0 0 1

"
1 0 0
0 1 0 .
0 0 1

3x6 + 25x7
x6
2x6 + x7
3x6
x1 , . . . , x7
!

"
,

=
=
=

0
6
9
0.

"
1 0 0
0 1 0 .
0 0 1

e) minimizar 14x1 18x2 16x3 80x4


s. a
4,5x1 + 8,5x2 + 6x3 + 20x4 + x5
= 6000
x2 + 4x3 + 40x4
+ x6 = 4000
x1 +
0.
x1 , . . . , x6
Base inicial:




1 0
1 0
, B 1 =
.
B = [a5 , a6 ] =
0 1
0 1
7.3. Resolver los siguientes problemas de programacion lineal usando el metodo simplex completo
(fases I y II).
a) minimizar 10x1 + x2 7x3 5x4 x5
s. a
x1 x2
+ x4 + x5
x2 + x3 + 2x4 + 2x5
x2
+ 3x4 x5
x1 , . . . , x5

=
=
=

1
7
4
0.

b) minimizar x1 4x2 + x3 + 13x4 + 23x5


s. a
2x1 + x2 + x3 + 4x4 x5 = 6
x1 + 2x2 + x3 + x4 4x5 = 3
x1 , . . . , x5 0.
c) minimizar 9x1 + x2
s. a
5x1 + 2x2 +
3x1 + x2
x1 4x2 +
2x2

10x3
3x3
2x3
7x3
5x3

+
+
+
+

10x4
60x4 + x5
x4
4x4
+ x6
3x4
x1 , . . . , x6

=
=
=
=

10
2
1
5
0.

7.4. Considerese el problema de programacion lineal


minimizar {cT x : Ax = b, x 0},

Ejercicios

donde

463

!
A=

"
6 1 0 0 1 5
2 3 1 4 0 10 ,
1 1 0 2 2 7

!
b=

9
17
13

"

5
1

y c=
.
10
3
25

Probar que no tiene soluci


on optima. Que ocurre si el u
ltimo componente de c se cambia por un
20?
7.5. Considerese el problema de programacion lineal
minimizar
s. a

x1
x1
x1
2x1
2x1
2x1

x2
+ x2
+ 3x2
+ x2
3x2
3x2
x1 , x2

3
13
16
8
6
0.

a) Escribir el problema en forma estandar.


b) Resolverlo utilizando el metodo simplex completo (fases I y II).
7.6. Resolver los problemas del ejercicio 2 usando la forma de tableau.
7.7. Supongase que, aplicando el metodo simplex revisado estudiado, la variable i-esima del vector
x sale de la base en una determinada iteracion j. Probar que no puede entrar en la base en la
iteracion j + 1.
7.8. Sean xB y xB los vectores basicos de x correspondientes a dos iteraciones sucesivas del metodo
simplex revisado. Sup
ongase que todos los componentes de xB son estrictamente positivos. Determinar una condici
on suciente para que tambien lo sean los de xB .
7.9. Considerese el modelo siguiente de problema de programacion lineal:
minimizar{cT1 x1 + cT2 x2 : A1 x1 + A2 x2 = b, x2 0}.
Observese que este modelo diere del presentado en el captulo en que x1 no esta restringido a
tomar valores no negativos.
a) Modicar el metodo simplex revisado de la tabla 7.1 para tratar problemas de este tipo.
b) Cuales seran las condiciones de optimo a comprobar en el paso 1?
on l-esima es redun7.10. Sup
ongase que yl = (B 1 aq )l = 0 (tabla 7.1, paso 2). Probar que la condici
dante.
7.11. Si en lugar de escoger como variable no b
asica a entrar en la base aquella cuyo coste reducido es
el mas negativo, se eligiese aquella que produjese un mayor decremento en la funci
on objetivo,
cual habra de ser el criterio para determinar xq en el paso 2 de la tabla 7.1?
7.12. Probar que si en la fase I del metodo simplex una variable articial pasa a ser no b
asica, no sera
necesario volverla a hacer de nuevo basica.

464

Captulo 7. El metodo simplex

7.13. Utilizar el metodo de la gran M para resolver el siguiente programa lineal:


minimizar 3x1 + x3
s. a
x1 + 2x2 + x3
x1 2x2 + 2x3
0
0
0
0

+ x4 = 10
= 6
x1 4
x2 4
x3 4
x4 12.

7.14. Resolver el problema anterior mediante el metodo simplex en forma de tableau.


7.15. Indicar si el siguiente aserto es verdadero o falso: si en el metodo de la gran M este parametro se
escoge extremadamente grande, el metodo simplex en dos fases y el de la gran M producir
an la
misma sucesion de bases.
7.16. Usando el metodo simplex revisado, encontrar una soluci
on basica factible de las siguientes condiciones
x1 + 2x2 x3 + x4 = 3
2x1 + 4x2 + x3 + 2x4 = 12
x1 + 4x2 + 2x3 + x4 = 9
x1 , . . . , x4 0.
7.17. En muchos problemas pr
acticos donde se aplica programacion lineal es suciente llegar a un punto
tal que el valor de la funci
on objetivo en el este dentro de una tolerancia del optimo z ; esto
ahorra una considerable cantidad de c
alculos y, por consiguiente, tiempo.
a) Considerese un problema de programacion lineal del cual se sabe que la suma de las variables
esta acotada superiormente por s. Si en una iteraci
on determinada del metodo simplex
aplicado a ese problema la funcion objetivo toma un valor z0 , los costes reducidos de las
variables no basicas son cj y
cj },
M = min{
j

probar que si M /s, se cumple que z0 z .


b) Aplicar este criterio a cualquiera de los problemas del ejercicio 3 con = 0,8. Que ocurre?
7.18. Considerese el siguiente programa lineal
maximizar 3x1 + 4x2
s. a

2x1 + x2
x1 + 2x2
x1 + x2
x1 , x2

8
6
6
0.

a) Resolver el problema geometricamente comprobando que el punto optimo es degenerado.


b) Resolver el problema mediante el metodo simplex.
c) Identicar la condicion que causa la degeneracion y resolver el problema otra vez sin esa
condicion.
d) Se puede probar que las soluciones b
asicas degeneradas se pueden evitar prescindiendo de
determinadas condiciones sin afectar a la region factible?

Captulo

DUALIDAD Y ANALISIS
DE
SENSIBILIDAD

N ESTE CAPITULO se introduce un concepto de extraordinaria utilidad en programacion matematica pues contribuye en gran medida a su comprensi
on: la dualidad.
La idea que subyace en el es la de proporcionar formulaciones alternativas a los
problemas de optimizaci
on a n de facilitar su resoluci
on numerica y aumentar la
comprension te
orica de los metodos empleados para su tratamiento. Veremos que todo programa lineal tiene ntimamente asociado a el otro programa lineal denominado dual. Estudiaremos
la interpretaci
on en terminos economicos de un programa lineal a traves de las variables del
dual, as como la forma de resolver el programa lineal original a partir de su formulaci
on dual
mediante el metodo dual del simplex, y como este puede usarse para resolver problemas que
resultan de uno lineal cambiando los lmites de las variables, a
nadiendo condiciones, etc.
Hasta ahora nos hemos preocupado de c
omo formular modelos de programaci
on lineal, o
mejor dicho, de c
omo surgen los programas lineales a partir de la modelizaci
on matematica de
fen
omenos economicos, fsicos, etc, y como resolver esos programas lineales. En este captulo
tambien nos ocuparemos de analizar la sensibilidad de la soluci
on de los programas lineales a
variaciones en la formulaci
on de los mismos. Los parametros que denen un programa lineal
los cj , aij , bi , etc. son a menudo el reejo de una serie de estimaciones, muchas veces
subjetivas, realizadas con instrumentos sujetos a fallos. El entorno, por otro lado, que conforma
el programa lineal, suele estar inuido por circunstancias muy din
amicas: las demandas, los
precios de materias primas, la disponibilidad de recursos productivos, etc. La soluci
on optima de
un programa lineal s
olo se reere a una situaci
on y conjunto de datos concretos; es importante
por tanto investigar los posibles efectos que en esa soluci
on introducen diversas modicaciones
de los par
ametros que denen el problema.
Lo que se pretende con los an
alisis de sensibilidad es responder a preguntas concretas como:
de que forma habr
a que modicar nuestra cadena de producci
on los pr
oximos seis meses
si el benecio de nuestro producto estrella cae un 20%? o, dada nuestra disponibilidad de
465

466

Captulo 8. Dualidad y an
alisis de sensibilidad

recursos, que benecio o cuantas unidades deberamos vender de un nuevo producto para
hacerlo rentable? Las respuestas a estas y muchas otras preguntas se pueden obtener mediante
el an
alisis de sensibilidad que proporciona el estudio del programa dual de uno lineal.
Ejemplo 8.1 Una determinada empresa produce b1 , b2 , . . . , bm cantidades de m productos.
Para producirlos, la empresa puede realizar cualquiera de n actividades a distintos niveles.
Cada actividad j tiene un coste unitario cj . Un determinado comprador contrata toda la
producci
on deseando adem
as tener control sobre las operaciones de la empresa de tal manera
que pueda especicar las combinaciones y niveles de sus actividades a n de minimizar el coste
total de esa producci
(on. Si aij representa la cantidad del producto i producido por una unidad
de la actividad j, nj=1 aij xj representa las unidades que se producen de i. Estas unidades
deben ser mayores o iguales que la cantidad requerida bi . El problema que desea resolver el
comprador es el siguiente:
min.

n


cj xj

j=1

s. a

n


aij xj bi ,

j=1

xj 0

(8.1)
i = 1, 2, . . . , m,
j = 1, 2, . . . , n.

En vez de tratar de controlar las operaciones de la empresa a la que compra los productos,
sup
ongase que el comprador esta de acuerdo en pagar a la empresa precios por unidad y1 ,
y2 , . . . , ym de cada uno de los m productos. Si aij es el n
umero de unidades del producto
i
(
producidas por una unidad de la actividad j e yi el precio por unidad del producto i, m
a
y
i=1 ij i
expresa el precio por unidad de la actividad j de acuerdo con los precios
y
,
y
,
.
.
.
,
y
. De lo
1
2
m
(m
que se trata pues es de que el precio implcito de la actividad j, o sea i=1 aij y(
i , no exceda del
precio real cj : esto quiere decir que la empresa debe cumplir las restricciones m
i=1 aij yi cj ,
para j = 1, 2, . . . , n. Dentro
de
estas
restricciones,
la
empresa
seleccionar
a
aquellos
precios que
(m
maximicen su ganancia i=1 yi bi . La empresa, en resumen, se plantea el siguiente problema:
max.
s. a

m


y i bi

i=1
m


aij yi cj ,

i=1

yi 0,

j = 1, 2, . . . , n,
i = 1, 2, . . . , m.

Este u
ltimo problema se conoce como el programa dual del planteado en (8.1).

8.1

Dualidad y condiciones de o
ptimo

Recordemos que seg


un el teorema 7.2, de la p
agina 418, y su primer corolario (corolario 7.1),
si una soluci
on b
asica x de un programa lineal es no degenerada, para que sea optima es
necesario y suciente que todos los costes reducidos, cj , sean no negativos. Esta conclusi
on,
en el caso de solucion b
asica factible no degenerada, surge del hecho de que si y s
olo si alg
un

8.1 Dualidad y condiciones de optimo

467

coste reducido cj es negativo se puede usar el metodo simplex para obtener otra soluci
on b
asica
factible que mejore el valor de la funci
on objetivo. Cuando la soluci
on x es basica factible no
degenerada, como se desprende del siguiente resultado, tambien se pueden determinar de otra
manera condiciones necesarias y sucientes para que sea optima.
Teorema 8.1 La soluci
on b
asica factible no degenerada


x=

xB
xN

B 1 b
0

(8.2)

del programa lineal


min. cT x
s. a
es
optima si y s
olo si
T

(8.3)

Ax = b
x 0

c = y ,w



B N
,
0 I

(8.4)

0.
donde w
n. Recordemos que los vectores la de la matriz
Demostracio


B N
M=
0 I

son linealmente independientes. Al serlo, forman una base de n por lo que existe un u
nico
T ] que satisface (8.4).
vector [y T , w
es el vector de costes reducidos de las
Para completar la demostraci
on observese que w
N . En efecto,
variables no b
asicas, c


yT ,

T
w

cT M 1


T,
cB

cTN



B 1 B 1 N
0
I

T cT B 1 N .
= cTB B 1 , cN
B

es 0. Recuerdese que y es el vector de multiplicadores


Por tanto, si la soluci
on es optima, w
simplex, , que se calculan en el metodo simplex.
El aserto del teorema si es siempre cierto aun cuando la soluci
on (8.2) sea degenerada.
En terminos geometricos, este u
ltimo teorema viene a poner de maniesto que en un punto
extremo optimo no degenerado, x, del politopo que denen las condiciones de un programa
lineal, el vector gradiente de la funci
on objetivo, c, se puede expresar como una combinaci
on
lineal de los gradientes de las restricciones de igualdad, m
as una no negativa de los gradientes
hacia dentro de las restricciones de no negatividad que se satisfacen estrictamente. Dicho de
otra forma, que el gradiente de la funci
on objetivo est
a en el cono generado por los gradientes
de las condiciones de igualdad.

468

Captulo 8. Dualidad y an
alisis de sensibilidad

Ejemplo 8.2 Sea el problema:


min. x1 3x2
s. a x1 x2 = 4
x1 , x2 0.
Los vectores gradiente de la funci
on objetivo y de las condiciones son


1
,
c=
3

1
a =
,
1
1

1
a =
0

0
y a =
.
1

Consideremos los dos puntos extremos de la gura 8.1:


En el punto extremo x = [4, 0]T se cumple la restriccion de no negatividad x2 0. El
vector c no pertenece al cono que generan los gradientes de la condici
on de igualdad,
x1 x2 = 4 y de x2 = 0: este punto no es optimo.
En x = [0, 4]T , por el contrario (se cumple x1 = 0), el vector c s pertenece al cono que
generan a1 y a2 : este punto es el optimo.

Consideremos ahora el problema de programaci


on lineal,
max. bT y
s. a

(8.5)

AT y c,

x2  
0
4

a1

a2

a3
 
4
0

x1
c

a1

Figura 8.1
Geometra de las condiciones de optimo del ejemplo 8.2

8.1 Dualidad y condiciones de optimo

469

relacionado con el programa lineal general en forma est


andar,
min. cT x
s. a

Ax = b
x 0.

(8.6)

A (8.5) se le denomina programa dual de (8.6), al que a partir de ahora denominaremos primal.
Observese que en el programa o problema dual intervienen los mismos par
ametros A, b y c del
primal y que, en alguna medida, el dual es la versi
on traspuesta del primal en la que minimizar
se sustituye por maximizar. Formulando (8.5) en forma est
andar se puede probar f
acilmente el
siguiente lema.
Lema 8.1 El dual del problema dual
max. bT y
s. a

AT y c,

es el problema primal
min. cT x
s. a

Ax = b
x 0.

(8.7)

El problema dual surge inmediatamente de la aplicaci


on de las condiciones de optimo del
teorema 8.1 al problema (8.7). En efecto, esas condiciones se pueden escribir de la forma
T ]T 0. Obviando la necesidad de que los primeros m
cT = y T A + w T , donde w = [0T , w
componentes de w han de ser cero, se tiene que
AT y + w = c,

w 0,

que no son sino las condiciones del problema dual (8.5) puestas en forma de igualdad mediante
la introducci
on de las variables de holgura w 0.
Lema 8.2 (Dualidad debil) Si x es una soluci
on factible del problema primal e y una
tambien factible del dual, bT y cT x.
n. Como Ax = b, y T Ax = y T b para todo y m . Como ademas AT y c y
Demostracio
T
x 0, y Ax cT x. La combinaci
on de estos resultados concluye la demostracion.
Este u
ltimo lema expresa que el valor de la funci
on objetivo correspondiente a una solucion factible del programa primal (dual) proporciona un lmite superior (inferior) del valor de
la funci
on objetivo de cualquier soluci
on factible incluida la optima del otro problema.
Consecuencia inmediata de este lema es el siguiente corolario.
Corolario 8.1 Si x es una soluci
on factible del problema primal, y una tambien factiptimas del primal y dual,
ble del dual y cT x = bT y, entonces x e y son las soluciones o
respectivamente.

470

Captulo 8. Dualidad y an
alisis de sensibilidad

Existen soluciones factibles x e y que satisfagan las hip


otesis de este u
ltimo corolario? La
respuesta a esta pregunta se obtiene del siguiente teorema.

Teorema 8.2 (Teorema de la dualidad de la programaci


on lineal) (a) Si el problema primal
o el dual tiene una soluci
on
optima nita la tiene el otro y min. cT x = max. bT y.
(b) Si el problema primal o el dual tiene una funci
on objetivo no acotada el otro no tiene
soluci
on factible.

n. De acuerdo con el resultado del lema 8.1 y el corolario 8.1, para demostrar
Demostracio
la parte (a) del teorema s
olo se necesita encontrar una soluci
on primal optima (nita) x y
T
T
una dual factible y que satisfagan c x = b y. Sea x una soluci
on b
asica factible optima, por
ejemplo,


xB
x=
xN

B 1 b
=
,
0

obtenida por el metodo simplex e y el vector correspondiente de multiplicadores simplex; es


decir, y = B T cB . Este y es una soluci
on factible del problema dual ya que


cB
cA y =
cN
T

BT

NT

0
=
N
c

0.

Ademas
T 1
B b = y T b,
cT x = cB

por lo que queda demostrada la parte (a).


La parte (b) del teorema es una conclusi
on inmediata del lema 8.2.
La demostracion anterior indica que el vector de multiplicadores simplex correspondiente
a la soluci
on optima x del programa primal es una soluci
on optima y del programa dual.
En efecto, en cualquier iteraci
on del metodo simplex, los multiplicadores simplex denen un
vector y tal que cT x = bT y; este vector no es una solucion factible del programa dual a no ser
que todos los costes reducidos sean no negativos. Es decir, el algoritmo simplex mantiene de
iteraci
on a iteraci
on la factibilidad del problema primal, y hace que cT x = bT y mientras trata
de conseguir la factibilidad del dual.
Observese que la recproca de (b) del teorema no es necesariamente cierta: si el problema
primal o el dual no es factible, el otro problema no tiene por que ser no acotado: los dos pueden
ser no factibles. En la tabla 8.1 se pueden ver las implicaciones posibles.
El siguiente lema, debido a Farkas [1902], constituye un importante resultado para el estudio
de sistemas lineales de igualdades y desigualdades, pudiendo ser f
acilmente deducido de la parte
(b) del teorema de la dualidad de la programaci
on lineal.

8.1 Dualidad y condiciones de optimo

471

Tabla 8.1
Combinaciones posibles primal-dual
Dual

Primal

optimo

no factible

no acotado

optimo

posible

imposible

imposible

no factible

imposible

posible

posible

no acotado

imposible

posible

imposible

Lema 8.3 (Farkas) El sistema de ecuaciones


(I)

x 0,

Ax = b,

no tiene soluci
on si y s
olo si la tiene el sistema
y T A 0T ,

(II)

bT y > 0,

donde A mn .
n. Consideremos el par primal-dual de problemas de programaci
1a Demostracio
on lineal:
(C)

min. 0T x
s. a Ax = b,
x 0,

(D)

max. bT y
s. a y T A 0T .

(C) no es factible si y solo si (I) no tiene soluci


on. (D) es no acotado si y s
olo si el sistema
(II) tiene solucion. Ahora bien, como y = 0 es factible en (D), seg
un el teorema 8.2, (C) no es
factible si y s
olo si (D) es no acotado. Para ser m
as precisos, para cualquier soluci
on de (II),
T
T
T
por ejemplo d, tal que d A 0 y b d > 0, d es una soluci
on factible de (D) que conduce
a una funci
on objetivo no acotada al tender a innito.
n. El teorema se puede reformular de la siguiente manera. Si existe un x 0
2a Demostracio
tal que Ax = b, no existe ning
un y tal que y T A 0T y bT y > 0. Recprocamente, si no existe
ning
un x 0 tal que Ax = b, existe un y tal que y T A 0T y bT y > 0.
Supongamos que el sistema (I) tiene una soluci
on x tal que Ax = b y x 0. Sea y un
T
T
T
T
punto tal que y A 0 . En este caso b y = x AT y 0 pues x 0 y y T A 0T . Esto
demuestra que bT y no puede ser positivo y, por lo tanto, el sistema (II) no tiene soluci
on.
Supongamos ahora que el sistema (I) no tiene soluci
on. Esto quiere decir que b
/ S = {v =
Ax : x 0}; es decir que b no pertenece al politopo c
onico S. Observando la gura 8.2, est
a
claro que si b
/ S, existe un hiperplano, denominado hiperplano separador1 denido por un y,
que separa S y b, y para el cual y T ai 0, i = 1, . . . , n y y T b > 0, es decir, y forma un angulo
1

La existencia de este hiperplano se demuestra formalmente en el apendice A, p


agina 696.

472

Captulo 8. Dualidad y an
alisis de sensibilidad

de mas de 90 grados con cada uno de los vectores columna de A y de menos de 90 grados con2
b. Esto verica que el sistema (II) tiene solucion.
Al contrario de lo que hemos hecho aqu, el lema de Farkas se utiliza habitualmente para
demostrar el teorema de la dualidad en programaci
on lineal pues, a partir de el, la demostracion
de este es trivial.
La interpretaci
on geometrica del lema de Farkas es la siguiente:
1. Si ai , i = 1, . . . , n, son los n vectores (
columna de la matriz A, que se cumpla que b = Ax,
x 0, quiere decir que el vector b = ni=1 ai xi , xi 0; en otras palabras, que b pertenece
al politopo c
onico generado por los vectores columna de A. En la gura 8.3 se muestra un
ejemplo donde el sistema (I) no tiene solucion: el vector b no pertenece al cono generado
por a1 , a2 , a3 y an . La interseccion del cono {y : y T A 0T } (conjunto formado por
los vectores y que forman un angulo mayor o igual de 90 con los vectores columna de
la matriz A) y el semiespacio abierto {y : bT y > 0}, no es el conjunto vaco: el sistema
(II) tiene solucion, pues b y cualquier y en el cono que dene la zona sombreada forma
un angulo menor de 90 y, por lo tanto, bT y > 0.
2. El sistema (II) no tiene soluci
on si la interseccion del cono {y : y T A 0T } y el semiespacio abierto {y : bT y > 0} es el conjunto vaco. En la gura 8.4 se muestra un ejemplo
donde el sistema (II) no tiene solucion. Todo vector y en la zona que dene el cono
indicado forma un angulo mayor de 90 con b. La tiene sin embargo (I) pues b pertenece
al cono generado por a1 , a2 y an .
Antes de seguir adelante con las consecuencias practicas del teorema de la dualidad, volvamos sobre la idea ya indicada de que asociado a cada programa lineal hay uno dual, y
apliquemos al par primal-dual el lema de la dualidad debil, su corolario y el teorema de la
dualidad. Por ejemplo, los programas lineales
(P)

min. cT x
s. a Ax b
x 0

(D)

max. bT y
s. a AT y c
y 0,

(8.8)

son un par primal-dual. El programa dual (D) se puede obtener a partir del (P) transformando
primero este a forma estandar, convirtiendo el resultado en dual y simplicando. En efecto,
(P) en forma est
andar es
(P) min. cT x
s. a Ax x = b
x, x 0.
El dual de (P) es
(D)

max.
s. a

bT y


AT
y
I

c
.
0

De este u
ltimo problema resulta inmediatamente (D) sin m
as que simplicar la notaci
on.
2

El hiperplano separador del politopo c


onico S de la gura debera casi tocar a este a lo largo de a5 . El
hiperplano soporte correspondiente, s tocara a a5 .

8.1 Dualidad y condiciones de optimo

473

Politopo c
onico S

a3

a2

a1

a4

a5

Hiperplano

b
/S
y

Figura 8.2
Descripcion geometrica de la existencia de un hiperplano separador
El par (P)-(D) se denomina habitualmente, en la literatura especializada, forma simetrica
de la dualidad.
A continuaci
on exponemos dos teoremas que caracterizan las soluciones optimas del par de
problemas primal-dual.
Teorema 8.3 (Complementariedad de Holguras) Sean x e y soluciones factibles del par de
programas primal-dual en forma simetrica (P)-(D) de (8.8). Las condiciones necesarias y
sucientes para que sean
optimos de sus respectivos problemas son:
(cT y T A)x = 0

(8.9)

y T (Ax b) = 0.

(8.10)

n. Como x e y son soluciones factibles de (P) y (D), respectivamente, se tiene


Demostracio
que
s = Ax b 0, x 0
(8.11)
y
wT = cT y T A 0T , y 0.
(8.12)

474

Captulo 8. Dualidad y an
alisis de sensibilidad

Semiespacio abierto {y : bT y > 0}

a2
an
a1

a3
b

Cono {y : y T A 0T }

Figura 8.3
El sistema (I) del lema de Farkas no tiene soluci
on. La tiene (II)
a2

an
a1

b
Semiespacio abierto {y : bT y > 0}

Cono {y : y T A 0T }

Figura 8.4
El sistema (II) del lema de Farkas no tiene soluci
on. La tiene (I)

8.1 Dualidad y condiciones de optimo

475

En consecuencia,
cT x y T Ax y T b.
Si las condiciones (8.9) y (8.10) se verican estrictamente, esto es, Ax = b y cT = y T A, entonces
cT x = y T b y la condici
on de optimo de x y de y se deduce inmediatamente del corolario 8.1.
Recprocamente, si x e y son optimos, entonces cT x = y T b y cT x = y T Ax = y T b por lo que
se cumplen (8.9) y (8.10).
En el caso de que el par primal-dual sea
(P)

min. cT x
s. a Ax = b
x 0,

(D)

max. bT y
s. a AT y c

solo es signicativa la condici


on (8.9), pues (8.10) es cierta para cualquier soluci
on primal
factible x.
Debido a la condici
on de no negatividad de las soluciones x e y del par (P)-(D) y de los
vectores s y w, las condiciones (8.9) y (8.10) se pueden expresar en la forma mucho m
as u
til
que sigue.
Condiciones de Complementariedad de Holguras
wj = (c AT y)j = 0 o xj = 0,

para todo j = 1, . . . , n,

si = (Ax b)i = 0 o yi = 0,

para todo i = 1, . . . , m.

(8.13)

Usando estas condiciones el teorema anterior viene a decir que, en la forma simetrica (P)(D), las soluciones factibles de este par son optimas si y solo si:
i) Una variable es cero en uno de los problemas siempre que la variable de holgura correspondiente sea estrictamente positiva (la condici
on de desigualdad correspondiente se
satisface estrictamente) en el otro problema.
ii) Una variable de holgura es cero (la condici
on de desigualdad correspondiente se satisface
como igualdad) en uno de los problemas siempre que la variable correspondiente sea
positiva en el otro problema.

8.1.1

Condiciones de punto o
ptimo de Karush-Kuhn-Tucker

Estas condiciones Kuhn y Tucker [1951] fueron desarrolladas por estos autores para extender la teora de Lagrange y poder caracterizar los puntos optimos de problemas de programaci
on
lineal y no lineal sometidos a restricciones de igualdad y desigualdad. Como adem
as del de
Kuhn y Tucker existe un trabajo previo similar debido a Karush [1939], recientemente tambien
se las denomina condiciones de Karush-Kuhn-Tucker.

476

Captulo 8. Dualidad y an
alisis de sensibilidad

Teorema 8.4 (Condiciones de Kuhn-Tucker) x es una soluci


on
optima del programa lineal
min. cT x
s. a

Ax = b
x 0,

si y s
olo si existen vectores y y w tales que
(i) Ax = b, x 0,
(ii) AT y + w = c, w 0,
(iii) wT x = 0.

n. Es inmediata a partir del teorema 8.3 pues la condici


Demostracio
on (i) es la de factibilidad del primal, (ii) es la de factibilidad del dual y (iii) la de complementariedad de holguras.
En este teorema las variables duales y son los clasicos multiplicadores de Lagrange, si bien
no del todo, pues al corresponder a condiciones de desigualdad, han de ser no negativos. La
condici
on (iii) exige que sean cero aquellos multiplicadores que corresponden a condiciones no
activas condiciones que no se satisfacen estrictamente. Esto es logico que sea as pues esas
condiciones no deben desempe
nar ning
un papel a la hora de decidir si un determinado punto
es optimo o no.

8.2

Interpretaci
on econ
omica de la dualidad

En el u
ltimo apartado veamos como surge de forma natural el dual de un programa lineal a
partir de las condiciones de optimo del programa primal. En este veremos como, si un programa
lineal posee una interpretaci
on econ
omica, tambien la tiene el dual, pudiendose interpretar las
variables de este u
ltimo como precios.
Supongamos que
   1 
xB
B b

x =
=
0
0
es una soluci
on optima no degenerada del programa lineal en forma est
andar
min. cT x
s. a

(8.14)

Ax = b
x 0.

> 0, un peque
Como suponemos que xB
no cambio b en b no debe modicar la base optima
B; en consecuencia, si se reemplaza b por b + b, la nueva soluci
on optima de (8.14) ser
a

B
x
=
x
0

B 1 (b + b)
=
.
0

8.2 Interpretacion economica de la dualidad

477

Ese cambio modicar


a el valor de la funci
on objetivo en la cantidad
z = cTB B 1 b = T b,
donde = B T cB es el vector de multiplicadores simplex del problema (8.14) en el optimo.
Como ya se expuso en la demostracion del teorema 8.2, es la solucion optima del problema
max. bT y
s. a

(8.15)

AT y c.

on, indica c
omo cambia la funci
on objetivo al inEs evidente que i , a tenor de su expresi
crementar una unidad la cantidad disponible del recurso bi ; es decir, ese valor i se puede
considerar como un precio o valor marginal del recurso i-esimo en el optimo del problema.
Esta interpretaci
on econ
omica es de gran utilidad pues indica la cantidad m
axima que se
puede estar dispuesto a pagar por incrementar la disponibilidad del recurso i-esimo. Observese
tambien que las condiciones de complementariedad de holguras (8.13), de la p
agina 475, implican que el precio marginal de un recurso es cero si ese recurso no es totalmente utilizado en
el optimo del problema. Estos precios o valores marginales tambien se conocen habitualmente
en la literatura especializada como precios sombra y precios de equilibrio.
Volvamos sobre algunos de los ejemplos clasicos de programacion lineal y estudiemos sus
duales y la interpretaci
on econ
omica de los mismos.
Ejemplo 8.3 El problema del transporte. Recordemoslo:
min.

cij xij

ij

s. a

n

j=1
m


xij = ai para i = 1, . . . , m
xij = bj para j = 1, . . . , n

i=1

0 para i = 1, . . . , m
j = 1, . . . , n.

xij
El dual de este problema es
max.

m

i=1

s. a

ai ui +

n


bj vj

(8.16)

j=1

ui + vj cij ,

i = 1, . . . , m;

j = 1, . . . , n.

Las variables duales ui y vj representan, respectivamente, los precios marginales de incrementar la oferta en la f
abrica i y la demanda en el almacen j. Esta interpretaci
on es coherente
con la estrategia de la empresa poseedora de las fabricas y de los almacenes cuyo objetivo
consiste en determinar un programa de envos optimo entre unas y otros. Veamos ahora una
posible interpretaci
on del problema dual en su conjunto, no s
olo de las variables duales.

478

Captulo 8. Dualidad y an
alisis de sensibilidad

Supongamos que una compa


na de transportes propone al fabricante anterior retirarle una
unidad de producto de la f
abrica i al precio ui y entregarle una unidad de producto en el
almacen j al precio vj . Las restricciones del problema (8.16) aseguraran a la empresa de
transportes que sus precios son competitivos frente a los de la empresa fabricante por lo que
esta preferira darle la concesi
on del transporte de sus productos a aquella. Si se supone que
la empresa de transportes conoce las cantidades disponibles en origen, ai , y las demandas en
los destinos, bj , el problema que se debera plantear esta empresa es el indicado en (8.16),
tratando de determinar los precios u1 , . . . , um y v1 , . . . , vn de tal forma que se satisciesen las
restricciones de precios antes dichas y se maximizase el dinero obtenible de la operacion.
De acuerdo con el teorema de la dualidad, el fabricante del producto no se ahorrara dinero
usando los servicios de la empresa de transportes en lugar de enviarlos el directamente; los
medios de transporte propios de la empresa, no obstante, los podra emplear en otros usos y
ganar con ello dinero.
Ejemplo 8.4 El problema de la dieta alimenticia. Recordemos que se formulaba de la forma
siguiente:
min.

n


cj xj

j=1

s. a

n


aji xj bi ,

i = 1, . . . , n;

j=1

x1 , x2 , . . . , xn 0.
Su dual es en consecuencia recordemos el par (P)-(D):
max.
s. a

m

i=1
m


bi y i
aij yi cj ,

(8.17)
j = 1, . . . , n;

i=1

y1 , y2 , . . . , ym 0.
Interpretaremos el problema dual como el que se plantea una empresa competidora de la que
resuelve el primal.
Supongamos que ese competidor es una empresa que se dedica a la venta de pldoras de
ingredientes nutritivos en estado puro: hierro, protenas, etc. Si este vendedor quiere colocar
en el mercado su producto, el precio de sus pldoras ha de ser competitivo con relaci
on al
de los alimentos de la empresa de dietetica. Esto requiere que los precios que je para los m
ingredientes nutritivos, y1 , . . . , ym , han de satisfacer las restricciones de (8.17) recordemos
que aij es la cantidad de ingrediente nutritivo i que proporciona o contiene el alimento j y
cj el coste unitario de ese alimento j. Como los requisitos mnimos diarios de ingredientes
nutritivos son bj , j = 1, . . . , n, el vendedor de pldoras tratar
a de, a partir de esos precios yi ,
maximizar el benecio obtenible vendiendo las pldoras sucientes para completar una dieta.
De ah la funci
on objetivo en (8.17).
Los precios marginales que introducamos antes tambien resultan u
tiles para determinar
la conveniencia o no de acometer nuevas actividades. Por ejemplo, en el problema de la dieta

8.3 El algoritmo dual del simplex

479

alimenticia, supongamos que una vez obtenida la soluci


on optima del problema originalmente
planteado se cuestione la posibilidad de comprar un nuevo alimento. La pregunta que surge de
inmediato es: es interesante considerar este nuevo alimento en la dieta? Para responder a esta
pregunta, si aik es la cantidad de ingrediente nutritivo i que proporciona el nuevo alimento k y
ck su coste unitario, como el valor optimo de la variable dual i-esima, yi , es el precio marginal de
una unidad del ingrediente
nutritivo i, los ingredientes nutritivos que proporcionan el alimento
(m
k tienen un valor i=1
yi aik . En consecuencia, si ck es menor que ese valor, valdr
a la pena
comprar el nuevo alimento y considerarlo en la nueva dieta (y no es factible en la nueva
restriccion); de lo contrario, la dieta optima actual es mas ventajosa (y sigue siendo factible).
En el caso de que se aconsejase la entrada del nuevo alimento en la dieta, se pueden utilizar
los datos de la u
ltima iteraci
on del simplex usado para resolver el problema original y pasar
a considerar la nueva actividad nuevo alimento como la variable a entrar en la base para
continuar el proceso de reoptimizaci
on.

8.3

El algoritmo dual del simplex

Este algoritmo fue dise


nado por Lemke [1954] y Beale [1954] para hacer frente a las situaciones que surgen cuando se tiene una soluci
on b
asica no factible de un programa lineal y, sin
embargo, los costes reducidos de las variables no b
asicas son todos de optimo ( 0): es decir,
los multiplicadores simplex son factibles en el programa dual. Esta situaci
on es muy frecuente
en problemas de reoptimizaci
on donde se pretende obtener el nuevo optimo de un problema al
que se le a
nade una nueva restricci
on. Si la condici
on que se a
nade es, por ejemplo, de desigualdad, se puede, si no se cumple si se cumple evidentemente no es necesario hacer nada,
pues la soluci
on primitiva sigue siendo la optima, a
nadir una nueva variable de holgura al
problema y convertirla en condici
on de igualdad. La base optima del problema original y la
nueva variable de holgura constituir
an la nueva base de partida del problema. Esta nueva base
es optima pero no factible pues el valor de la nueva variable de holgura es igual al negativo de
lo que no se satisface la nueva restriccion introducida. Esta forma de actuar resulta, como se
expondr
a, de extraordinaria utilidad en programaci
on entera.
El metodo dual del simplex, como el primal, progresa, de iteraci
on en iteraci
on, de una base
a otra del problema, aunque en lugar de ir manteniendo la factibilidad del programa primal,
lo hace en el dual. Cuando se puede llegar a una soluci
on del programa dual que sea factible y
que tambien lo sea del primal, el procedimiento termina: se ha llegado al optimo del problema.
Supongamos que se trata de resolver el problema lineal en forma est
andar,
min. cT x
s. a

Ax = b
x 0,

(8.18)

y que la base de este problema la forman las m primeras variables del mismo. Adem
as, que
TN = cTN T N 0. Si xB  0, la soluci
on xT = [xTB , 0T ]
xB = B 1 b, T = cTB B y c
corresponde a un punto extremo optimo pero no factible del politopo que denen las condiciones
de (8.18).
Supongamos que xp < 0. Para mejorar la situaci
on sera conveniente trasladarse del punto
extremo correspondiente no factible a otro pr
oximo factible o no en el que xp fuese cero
e introducir en su lugar la variable xq en la base. Esta nueva variable xq se escoge de tal

480

Captulo 8. Dualidad y an
alisis de sensibilidad

forma que se mantenga la factibilidad del programa dual. A continuaci


on analizaremos como
seleccionar uno de los n m puntos extremos pr
oximos posibles que sea dual factible (
optimo
del primal pero no factible en el).
Recordemos de la demostracion del teorema 8.1, de la p
agina 467, que los multiplicadores
simplex y los costes reducidos de las variables no b
asicas se pueden calcular a partir de la
expresion


TN = cT M 1 ,
T , c
donde la matriz M es la que se denio en la f
ormula (7.2) de la p
agina 412, es decir,


B N
.
M=
0 I
Los vectores la de esta matriz son los vectores caractersticos de los n hiperplanos que determinan la soluci
on b
asica. La inversa de M es
M

B 1 B 1 N
=
0
I

Si en una iteraci
on del metodo dual del simplex se reemplaza la variable b
asica xp por la xq ,
en terminos algebraicos, esto equivale a reemplazar la la q de la matriz M (antes de ello eqT )
por el vector epT ; es decir, M se transforma en
= M + eq (ep eq )T .
M
Usando la f
ormula de Sherman-Morrison-Woodbury introducida en el lema 4.6 de la p
agina
330 y el hecho de que eTq M 1 = eTq , se tiene que


1 = M 1
M

M 1 eq epT M 1 eTq
eTp M 1 eq

Multiplicando los dos miembros de esta u


ltima expresi
on por cT se obtienen las siguientes
y costes reducidos cN :
f
ormulas para obtener los nuevos multiplicadores simplex
= + u,

cj = cj j ,

j > m, j = q,

y
cp = ,
donde
uT = eTp B 1 ,

j = uT aj

y = cq /q .

Observese que uT es la la p de la matriz B 1 y q es el denominado elemento pivote yp del


paso 3 del algoritmo simplex revisado de la tabla 7.1, p
agina 420.

Para que el nuevo vector de costes reducidos c sea no negativo es necesario que la variable
que se escoge para entrar en la base, xq , cumpla que
cj /j ,
0 =
cq /q

para todo j < 0, j > m.

8.3 El algoritmo dual del simplex

481

Si j 0 para todas las variables no b


asicas xj , uT A es un vector no negativo y, por tanto,
T
T
on no negativa pues uT b = xp < 0. Esto implica que
u Ax = u b no puede tener una soluci
el programa (8.18) no es factible.
En la tabla 8.2 se expone una iteraci
on del algoritmo dual del simplex. Como ya se utilizo
en las tablas 7.1 y 7.3 de las p
aginas 420 y 446, B = {j1 , . . . , jm } es el conjunto de ndices de
las variables b
asicas y N el de las no b
asicas. El algoritmo parte de una soluci
on b
asica xB
dual factible (AT c).
Tabla 8.2
Algoritmo dual del simplex
Paso 1 Calcular el vector de multiplicadores simplex resolviendo el sistema B T = cB . Determinar los costes reducidos de las variables no basicas: cj = cj T aj , para todo
j N.
Paso 1 Comprobar la factibilidad del programa primal: si xB 0, parar; la solucion es
optima. Si no, continuar.
Paso 2 Determinar la variable b
asica xjp que debe salir de la base. Para ello, escoger jp
V = {ji B : xji < 0}.
Paso 3 Comprobar la no factibilidad del problema: calcular u resolviendo el sistema B T u =
ep y hacer j = uT aj , para todo j N . Si j 0 para todo j N , parar; el
problema no tiene solucion.
Paso 4 Determinar la variable no b
asica xq que ha de entrar en la base: calcular

cj
cq
= min
: j < 0, j N = .

q
j
Paso 5 Recalcular los costes reducidos: hacer
cj cj j ,

j N , j = q,

y
cp .
Paso 6 Adaptar la solucion y la matriz B: calcular w resolviendo Bw = aq y hacer
xq = xjp /q
xji xji wi , 1 i m, i = p
B
B
N
jp

B + (aq ajp )eTp


B {q}\{jp }
N {jp }\{q}
q.

Ir al paso 1.

Utilizando las f
ormulas de adaptaci
on de los costes reducidos del paso 5, el algoritmo dual del
simplex requiere, por iteraci
on, esencialmente el mismo n
umero de operaciones que el simplex

482

Captulo 8. Dualidad y an
alisis de sensibilidad

revisado de la tabla 7.1. En ambos casos el principal esfuerzo de c


alculo se lleva a cabo en
la resoluci
on de los sistemas lineales B T u = ep y Bw = aq , as como en los calculos de los
j y la adaptaci
on de B. Si se adaptase en cada iteraci
on el vector de multiplicadores, , en
N , tambien se requeriran efectuar m
vez de c
as productos interiores para calcular los cj , para
todo j N tal que j < 0. Tambien se podra calcular directamente en cada iteraci
on,
T
aunque esto conllevara resolver un sistema lineal m
as con B . Una desventaja que presenta
el metodo dual en relaci
on con el simplex revisado es que en aquel hay que calcular los n m
productos interiores j = uT aj , j N ; en el primal s
olo hay que calcular T aj hasta que
un determinado n
umero de columnas no b
asicas tengan coste reducido negativo o se llegue
al optimo. Esta estrategia es la que se conoce en la literatura especializada como evaluaci
on
parcial de costes reducidos partial pricing.
Resolver un programa lineal en forma est
andar
min. cT x
s. a

Ax = b
x 0

con el metodo dual del simplex es matematicamente equivalente a resolver su dual con el
metodo simplex. Este aserto no debe sorprender, pues ambos procedimientos obtienen sucesivas
soluciones b
asicas factibles del programa dual manteniendo la condici
on de complementariedad
de holguras. Aplicar el metodo simplex directamente al programa dual conlleva trabajar con
= M T ; el dual utiliza la B mm .
la matriz n n, B

8.3.1

El algoritmo dual del simplex para variables acotadas

Las implementaciones practicas en ordenador del metodo dual del simplex tienen en cuenta
todas las consideraciones que hicimos en los apartados 7.5 y 7.6. En concreto, la especializaci
on
del metodo dual del simplex para resolver el problema con variables acotadas
min. cT x
s. a

Ax = b
lxu ,

cuyo dual es
max. bT uT y + lT z
s. a

AT y + z = c
y, z 0 ,

es la que se describe en la tabla 8.3.


Ejemplo 8.5 Consideremos el ejemplo 7.10 de la pagina 453. A
nadamos la restriccion adicio-

8.3 El algoritmo dual del simplex

483

Tabla 8.3
Algoritmo dual del simplex para variables acotadas
Paso 1 Calcular el vector de multiplicadores simplex resolviendo el sistema B T = cB . Calcu/ B.
lar los costes reducidos de las variables no basicas: cj = cj T aj , para todo j
Paso 1 Comprobar la factibilidad del programa primal: si lB xB uB , parar; la solucion
es optima. Si no, continuar.
Paso 2 Determinar la variable b
asica xjp que debe salir de la base: escoger jp V {ji
B : xji < lji o xji > uji }.
Paso 3 Comprobar la no factibilidad del problema: calcular u resolviendo el sistema B T u =
/ B. Si xjp < ljp , sea J = {j N l : j < 0 y j
ep y hacer j = uT aj , para todo j
N u : j > 0}; si xjp > ujp , J = {j N l : j > 0 y j N u : j < 0}. Si J = ,
parar; el problema no es factible. Si no, continuar.
Paso 4 Determinar la variable no b
asica xq que ha de entrar en la base: si xjp < ljp , calcular



cj
cj
max max
: j < 0, j N l , max
: j > 0, j N u
= ;
j
j
si xjp > ujp , calcular



cj
cj
: j > 0, j N l , min
: j < 0, j N u
= .
min min
j
j
/ B, j = q, y cp .
Paso 5 Reobtener los costes reducidos: hacer cj cj j , j
Paso 6 Adaptar la solucion y la matriz B: calcular w resolviendo Bw = aq , hacer
xjp ljp si xjp < ljp
xjp ujp si xjp > ujp

xjp ljp
si xjp < ljp
q
xjp ujp
xq + q
si xjp > ujp
xjp ljp
xji q wi , 1 i m, i = p,
xj uj
xji pq p wi , 1 i m, i = p,
B + (aq ajp )eTp

xq xq +
xq
xji
xji

Ir al paso 1.

B
jp

B {q}\{jp }
q.

si xjp < ljp


si xjp > ujp

484

Captulo 8. Dualidad y an
alisis de sensibilidad

nal x3 2. El problema resulta:


min. 2x1 4x2 x3
s. a

2x1 + x2
x1 + x2
0
0
1

x3
x3
x1
x2
x3

10
4
4
6
2.

Introduciendo las variables de holgura en las condiciones 1 y 2, queda:


min. 2x1 4x2 x3
s. a

2x1 + x2 + x3 + x4
x1 + x2 x3
+
0
0
1
x4 ,

x5
x1
x2
x3
x5

=
=

10
4
4
6
2
0.

La base optima resultante en aquel ejemplo era




2 1
.
B = [a1 , a3 ] =
1 1
La soluci
on,

x1
2/3
x2 6

x3 = 8/3 .

x4 0
x5
0

Utilicemos el algoritmo de la tabla 8.3 para resolver este problema.


Iteraci
on 1. Paso 1 y 1
Calculemos el vector inicial de multiplicadores simplex resolviendo el sistema B T = cB :


2 1
= B T cB =
1 1

1 

2
=
1

1
3
1
3

1
3
23

Los costes reducidos de las variables no basicas son:

"

1
c2 = c2 a2 = 4 [1, 0]
= 3;
1
T

1
c4 = c4 a4 = 0 [1, 0]
=1
0
T

2
1
=
.
1
0

8.3 El algoritmo dual del simplex




485

0
= 0.
c5 = c5 a5 = 0 [1, 0]
1
T

Todos los costes reducidos de las variables no b


asicas son optimos: x4 y x5 en su lmite inferior,
costes reducidos 0; x2 en su lmite superior, coste reducido < 0.
El problema primal no es factible pues x3 = 8/3 > 2.
Iteraci
on 1. Paso 2
La variable b
asica a salir de la base es x3 : x3 > u3 . Es la segunda de la base, luego p = 2.
Iteraci
on 1. Paso 3
Resolvamos B T u = e2 :
u=B

2 1
e2 =
1 1

1 

0
1/3 1/3
=
1
1/3 2/3

Hagamos



1
2 = u a2 = [1/3, 2/3]
= 1/3,
1
T

1
4 = u a4 = [1/3, 2/3]
= 1/3
0
T

0
5 = u a5 = [1/3, 2/3]
= 2/3.
1
T

El conjunto J = {j N l : j > 0 y j N u : j < 0} = {2, 4}.


Iteraci
on 1. Paso 4
Determinemos la variable no b
asica que ha de entrar en la base. Calculamos


c2 c4
= min
,
2 4

3
1
,
1/3 1/3

= 3.

Entrar
a x4 .
Iteraci
on 1. Paso 5
Recalculemos los costes reducidos:

&

'

1
= 2;
c2 c2 2 = 3 3
3
&
'
2
c5 c5 5 = 0 3
=2
3
y
c3 = 3.

0
1/3
=
.
1
2/3

486

Captulo 8. Dualidad y an
alisis de sensibilidad

Iteraci
on 1. Paso 6
Adaptemos la soluci
on, la matriz B y las estructuras de datos. Para ello, resolvamos primero
el sistema Bw = a4 :
w=B

2 1
a4 =
1 1

1 

1
1/3 1/3
=
0
1/3 2/3



1
1/3
=
.
0
1/3

Despues,
x3 u3 = 2
x4 x4 +

x3 u3
8/3 2
=0+
=2
4
1/3

x1 x1

x3 u3
2 8/3 2 1
w1 =
=0
3
3
4
1/3

La nueva base sera

2 1
,
B = [a1 , a4 ] =
1 0
y B = {1, 4}.
Iteraci
on 2. Paso 1
Comprobamos que la soluci
on x = [0, 6, 2, 2, 0]T es factible (degenerada) en el programa
primal: hemos llegado al optimo del problema. El valor de la funci
on objetivo es 26.
Observese lo facil una iteraci
on que ha sido reoptimizar el problema original utilizando
el metodo dual del simplex.

8.4

El m
etodo primaldual

Como hemos podido estudiar, el algoritmo dual del simplex parte de una soluci
on b
asica
factible del programa dual y dene la correspondiente b
asica del primal de tal forma que se
cumpla la condici
on de complementariedad de holguras. De iteraci
on en iteraci
on se mantiene
la factibilidad del dual, y la condici
on de complementariedad de holguras, hasta que se consiga
una soluci
on b
asica factible del primal en cuyo caso se ha alcanzado el punto optimo del
problema.
El metodo primaldual es similar al dual del simplex. Trabaja simult
aneamente sobre los
programas primal y dual partiendo, como el metodo dual, de una soluci
on factible del programa
dual. Fue originalmente desarrollado por Dantzig, Ford y Fulkerson en 1956 con el objetivo
de resolver ecazmente programas lineales de ujos en redes, como los que estudiaremos en el
captulo siguiente, y problemas de transporte similares al introducido en el captulo 5.
Para exponer la mec
anica del metodo primaldual, consideremos el programa primal en
forma estandar. Sea una soluci
on dual factible (no necesariamente b
asica). Esta solucion
T
cumplir
a que cj aj para j = 1, . . . , n, donde aj es el vector columna j de la matriz de

8.4 El metodo primaldual

487

coecientes de las condiciones, A. Sea T el conjunto de los ndices de las condiciones cj T aj


que se cumplen estrictamente:
)
*
T = j : T aj = cj .
De acuerdo con el teorema de complementariedad de holguras, T es el conjunto de ndices de
las variables del programa primal que tienen valores positivos.
Consideremos el siguiente problema de programaci
on lineal, denominado primal restringido:
min. eT xa
s. a

aj xj + xa = b
(8.19)

jT

xj 0,
xa 0,

jT

on m, de variables articiales. El programa dual de (8.19) es


donde xa es un vector, de dimensi
max. y T b
s. a

y T aj 0,
y e.

jT

(8.20)

Lema 8.4 Si el programa lineal restringido tiene soluci


on
optima con valor de la funci
on
objetivo cero, esa soluci
on es el
optimo del programa original.
n. Si con xT designamos el conjunto de xj , j T , supongamos que
Demostracio
!

xT
xa

"

es la solucion optima de programa lineal restringido y que el valor de la funci


on objetivo

correspondiente es cero. Como la funci


on objetivo es cero, xa = 0 en ese optimo. A partir
del vector xT se puede construir una soluci
on factible del programa primal tal que xj =
xj 0, j T , y xj = 0, j
/ T . Observese que el programa lineal restringido se deni
o a
T
T
/ T . La
partir de una soluci
on dual factible, , tal que cj = aj , j T , y cj > aj , j
condici
on de complementariedad de holguras tambien es claro que se satisface en este caso
pues (cj T aj )xj = 0 para todo j. De acuerdo con esto se satisfacen las condiciones de
KarushKuhnTucker y se completa la demostraci
on.
Si el valor de la funci
on objetivo en el optimo del programa lineal restringido no es cero,
xT no es sucientemente bueno para denir una soluci
on factible del primal del programa
original. Es decir, se necesita otra soluci
on dual factible con la que reconstruir el programa
lineal restringido y obtener un valor de su funci
on objetivo menor que el ya obtenido (a ser
posible cero). Para lograr esto, tambien habr
a que formar el programa restringido con variables
adicionales que no pertenezcan a T . Con tal n, si y es el optimo del dual (8.20) del programa
lineal restringido, la condici
on de complementariedad de holguras implica que y T aj 0, para
/ T,
j T . S
olo aquellas variables primales xj cuyas correspondientes duales tengan ndices j

488

Captulo 8. Dualidad y an
alisis de sensibilidad

tales que y T aj > 0, seran susceptibles de incorporarse al programa primal restringido y


mejorar el valor de su funci
on objetivo. En este sentido, y se puede considerar como una
direccion de movimiento a lo largo de la cual se traslada la soluci
on dual factible actual, , a

una nueva . Es decir,
 = + y,
> 0.
De acuerdo con esto


cj T aj = cj ( + y)T aj = cj T aj y T aj .
Para cada j T , como cj T aj = 0 y y T aj 0, entonces cj T aj 0. Para mantener
 factible del dual habr
a que considerar aquellos ndices j
/ T tales que y T aj > 0. Dado
/ T , se puede elegir una > 0 adecuadamente en tanto y
que cj T aj 0, para todo j
cuanto


(cj T aj )
(ck T ak )
= min
:j
/ T , y T aj > 0
=
j
y T ak
y T aj
siendo cj T aj 0, j
/ T . En particular, ck T ak = 0 y cj T aj 0, j
/ T y j = k.
La variable xk sera candidata a conformar la base del nuevo programa lineal junto con las que
denan la del programa lineal restringido todava vigente.
Siguiendo esta estrategia de a
nadir variables al programa lineal restringido puede ocurrir
que: el valor de la funci
on objetivo del optimo del programa lineal restringido acabe siendo
cero, en cuyo caso el lema 8.4 garantiza que se ha alcanzado el optimo del programa original
que se quera resolver; o que, el valor de la funci
on objetivo del programa lineal restringido sea
mayor que cero y ademas y T aj 0, j
/ T , en cuyo caso se puede demostrar que el programa
original no ser
a factible y su dual no acotado. En la tabla 8.4 se describe completo el algoritmo
primaldual. Parte de una soluci
on factible del programa dual del problema planteado.
Ejemplo 8.6 Resolver el problema
min. 2x1 x2
s. a
x1 + x2 + x3
= 2
x1
+ x4 = 1
x1 , x2 , x3 , x4 0.
Iteraci
on 1. Paso 1
El dual del problema que se desea resolver es:
max. 21 + 2
s. a
1 + 2 2
1
1
1
0
2 0.
Las variables de este problema no estan restringidas en ning
un sentido.
Escojamos como solucion factible de este problema dual la siguiente:


1
=
2

1
=
.
3

8.4 El metodo primaldual

489

Tabla 8.4
Algoritmo primaldual
Paso 1 Determinar un vector de multiplicadores simplex, , tal que
cj T aj 0,
,
+
Denir T = j : cj T aj = 0 .

j = 1, . . . , n.

Paso 2 Comprobar que se ha llegado al optimo del problema. Resolver el programa lineal
restringido
min. eT xa

aj xj + xa = b
s. a
jT
xj 0,
xa 0.

jT

Si el valor de la funci
on objetivo en el optimo de este problema es cero, parar; la
solucion actual es la optima del problema. Si no, continuar.
Paso 3 Resolver el programa dual del programa lineal restringido:
max. y T b
s. a

y T aj 0,
y e.

jT

Sea y su solucion optima.


/
Paso 4 Comprobar la no factibilidad o la existencia de soluci
on no acotada. Si y T aj 0, j
T , parar; el problema original no es factible y su dual no acotado. Si no, continuar.
Paso 5 A
nadir una variable al programa lineal restringido. Escoger un ndice k tal que

(ck T ak )
(cj T aj )
=
min
:j
/ T , y T aj > 0 .
j
y T ak
y T aj
Denir un paso :

(ck T ak )
.
y T ak
A
nadir la variable xk a la base formando as un nuevo programa lineal restringido.
Paso 6 Adaptar el vector . Hacer
= + y .
=

Ir al paso 2.

490

Captulo 8. Dualidad y an
alisis de sensibilidad

De acuerdo con esta eleccion, s


olo la segunda de las restricciones se cumple estrictamente. Es
decir, T = {2}.
Iteraci
on 1. Paso 2
Construyamos el programa primal restringido:
min.
xa1 + xa2
s. a x2 + xa1
= 2
xa2 = 1
x2 , xa1 , xa2 0.
La soluci
on optima de este problema es

x2
2
xa1 = 0 .
1
xa2
Como el valor de la funci
on objetivo es 1, todava no se ha llegado al punto optimo.
Iteraci
on 1. Paso 3
Construyamos el programa dual del primal restringido y resolv
amoslo:
max. 2y1 + y2
s. a
y1
0
y1
1
y2 1.
asicas en el programa primal restringido, de acuerdo con
Como las variables x2 y xa2 son b
la condici
on de complementariedad de holguras, la primera y la tercera restricciones de este
programa dual se cumplir
an estrictamente. En consecuencia,


0
y =
1

es la solucion optima del dual del primal restringido.


Iteraci
on 1. Paso 4
Comprobar la no factibilidad del problema o la existencia de soluci
on no acotada. Calculemos
y T aj , j {1, 3, 4}. Los valores que se obtienen son 1, 0 y 1, respectivamente. Al ser todos
no negativos, continuamos con el procedimiento.
Iteraci
on 1. Paso 5
Calculemos cj T aj , j {1, 3, 4}. Los valores que se obtienen son:


1
c1 a1 = 2 [1, 3]
= 2;
1
T

8.4 El metodo primaldual




491

1
=1
c3 a3 = 0 [1, 3]
0
T

0
= 3.
c4 a4 = 0 [1, 3]
1
T

De acuerdo con esto,

= min

2 3
,
1 1

= 2,

con k = 1. Es decir, la variable x1 deber


a entrar en la base del programa lineal restringido.
Iteraci
on 1. Paso 6
Adaptemos el vector . El nuevo ser
a


0
1
1
= + y =
+2
=
.
1
1
3
Iteraci
on 2. Paso 2
Construyamos el nuevo programa primal restringido:
min.
xa1 + xa2
s. a x1 + x2 + xa1
= 2
x1
+ xa2 = 1
x1 , x2 , xa1 , xa2 0.
La soluci
on optima de este problema es

x1
1
x2 1


xa1 = 0 .
xa2
0
Como el valor de la funci
on objetivo es 0, se ha llegado ya al punto optimo del problema que

se quera resolver. Este es:


x1
1
x2 1


x3 = 0 .
x4
0
El valor optimo de la funci
on objetivo es 3. La soluci
on del dual del problema original como
ya se ha calculado es [1, 1].

492

8.5

Captulo 8. Dualidad y an
alisis de sensibilidad

An
alisis de sensibilidad

En la introducci
on de este captulo hacamos hincapie en la importancia que puede tener
para ciertos programas lineales efectuar un an
alisis de su sensibilidad a variaciones de los
par
ametros que los denen. En el apartado dedicado al metodo dual del simplex hemos visto
como reobtener, sin tener que hacer todos los c
alculos desde el principio, la soluci
on optima
de un programa lineal al que se a
naden nuevas variables y/o nuevas condiciones, una vez
obtenida la optima del programa original. Tambien veamos que los multiplicadores simplex
del optimo de un programa lineal expresan lo que cambia la funci
on objetivo de ese programa
ante peque
nos cambios en los elementos del vector termino de la derecha de sus condiciones
(en el caso de soluciones basicas factibles optimas no degeneradas).
En este apartado profundizamos sobre c
omo afectan a la funci
on objetivo modicaciones
mas amplias en el vector c de coecientes de esa funcion objetivo o en el vector b. Este
estudio se conoce habitualmente como an
alisis de sensibilidad de un programa lineal o an
alisis
post-optimizaci
on. Su extensi
on a cuando esos cambios, mas que constantes, son funciones
lineales de ciertos par
ametros, se conoce como programaci
on lineal parametrica. Ejemplos de
esta u
ltima tecnica surgen cuando las uctuaciones de diversos costes de producci
on de un
artculo dependen del precio de una determinada materia prima, o cuando en determinados
problemas no esta muy claro cu
al ha de ser la funci
on objetivo o es funci
on de otros par
ametros,
etc.
Vamos a considerar en primer lugar c
omo afectan a la funci
on objetivo diversos cambios
en el vector c. En particular, consideremos la familia de programas, funci
on del par
ametro ,
denida por
min. z() = [c + d]T x
(8.21)
s. a Ax = b
x 0.
Supongamos que para = 0 disponemos de una soluci
on b
asica factible optima y queremos
determinar el margen de valores en el que esa solucion sigue siendo optima. Sea B
la matriz b
asica optima; dividamos de acuerdo con esto los vectores c y d en sus componentes
b
asicos y no b
asicos: cB , dB y cN , dN , respectivamente. La base B seguir
a siendo optima en
tanto que los costes reducidos de las variables no b
asicas sigan siendo no negativos; es decir,
mientras que [cN + dN ]T [cB + dB ]T B 1 N 0T . Si se denen los subcostes reducidos
TN = cTN cTB B 1 N
c
y
T = dT dT B 1 N,
d
N
N
B
la condici
on de no negatividad de costes reducidos se reduce en este caso a
T

T

cN
.
d
N

El margen de valores de en el que la soluci


on sigue siendo optima es por tanto
+
+
,
,
cj /dj : dj > 0, j
/ B ,
= max max
+
+
,
,
min min
cj /dj : dj < 0, j
/ B , = .

(8.22)

8.5 Analisis de sensibilidad

493

Para el margen de valores de , , el valor que toma la funci


on objetivo es una funci
on
lineal de . En efecto,

z () =

T
cB

dTB

B 1 b = z (0 ) + ( 0 )dTB xB .

Si 0 = 0, haciendo d = ej , el margen de valores del coeciente cj en el que la soluci


on
optima permanece constante, con todos los demas par
ametros del problema jos, est
a dado
por [cj + , cj + ].
La soluci
on optima del problema de programaci
on lineal parametrica (8.21) tambien se
puede determinar para todos los valores posibles del par
ametro . En efecto, dado el intervalo
[, ] de valores de en el que una soluci
on b
asica factible es optima, puede ocurrir que exista
otra soluci
on b
asica factible pr
oxima que sea tambien optima para valores de comprendidos en
on objetivo z () no este acotada inferiormente
el intervalo [, ], donde , o que la funci
para todo en el intervalo (, ). Esta nueva soluci
on y base, de existir, se puede obtener
pivotando la variable no b
asica xj en la base, lo que determina un =
cj /dj , de acuerdo con
la expresi
on (8.22), pudiendose determinar a partir de la nueva base as obtenida. Si al llevar
a cabo esa pivotaci
on se detecta la existencia de un rayo no acotado, z () no esta acotada
on b
asica factible optima
inferiormente para todo < . De igual forma se obtendra una soluci
pr
oxima, de existir, para , en el margen [, ].
Mediante estos sencillos calculos se pueden determinar todos los m
argenes de valores del
par
ametro . A pesar de que su n
umero puede llegar a ser 2n , en el peor de los casos, los
an
alisis probabilsticos que se han efectuado con el metodo simplex, a partir de la resoluci
on
del problema (8.21), han dado como resultado que ese completo an
alisis requerira un lmite
maximo de iteraciones muy razonable: concretamente, un orden de magnitud cuadrado del
tama
no del problema: O(min{m2 , n2 }).
Consideremos a continuaci
on el siguiente problema para estudiar el margen de valores del
vector termino de la derecha:
min. z() = cT x
s. a Ax = b + d
x0.
Si B es la base optima para alg
un valor = 0 , el intervalo de valores [, ] en el cual esa
T , xT ] = [b
T + d
T , 0T ], donde
base es optima y, por lo tanto, tambien la soluci
on xT = [xB
N
= B 1 b y d
= B 1 d, esta dado por
b


= max


min

max

1im

min

1im

,
bi /di : di > 0 ,

,
bi /di : di < 0 , = .

En este intervalo, a pesar de que la soluci


on optima vara linealmente con respecto a , la base
y la soluci
on optima del problema dual permanecen jas. Las bases pr
oximas y los margenes
de valores correspondientes se pueden obtener mediante el metodo dual del simplex siempre y
cuando no se detecten infactibilidades.

494

Captulo 8. Dualidad y an
alisis de sensibilidad

Referencias
Ademas de las referencias comentadas en el captulo anterior, la parte te
orica de la dualidad est
a
muy bien recogida en Fletcher [1987], Simmonard [1972] y Shapiro [1979]. Para un problema
general de optimizaci
on sometido a restricciones, en Fletcher [1987]. Lo expuesto en casi todo
el captulo sigue a Nemhauser, Rinnooy Kan y Todd [1989]. Lo referente al lema de Farkas se
puede tambien seguir en Bazaraa, Jarvis y Sherali [1990].
En Dantzig [1987] relatados por su autor se puede encontrar una interesante y detallada
relacion de los avatares hist
oricos del metodo simplex y como desembocaron en su publicaci
on
en 1947. Para una excelente y pormenorizada relaci
on de la historia de la programaci
on lineal
y su contexto tecnico e historico recomendamos consultar Schrijver [1986].

Ejercicios
8.1. Considerese el problema de programacion lineal:
minimizar 3x1 + 10x2 + 8x3 + 16x4 + 20x5
s. a
x1 + 2x2 + 4x3 + 4x4 x5 4,5
x1 + x2 x3 + x4 + 4x5 1
x1 , . . . , x5 0.
a) Determinar todas las soluciones optimas del problema y el valor de la funci
on objetivo.
b) Probar que las soluciones obtenidas son realmente optimas.
8.2. Resolver el siguiente problema de programacion lineal:
minimizar x1
s. a
3x1
x1
2x1
9x1
5x1
7x1

2x2
+ 2x2
x2
+ 7x2
4x2
+ 2x2
3x2
x1 , x2

1
1
6
6
3
6
0.

8.3. Demostrar si los puntos que se indican son la solucion optima de los siguientes programas lineales:
a) minimizar 7x1 + 6x2 + 5x3
s. a
x1 + 3x2 + 5x3
2x1 + 4x2 + 4x3
3x1 + x2 + 2x3
Solucion propuesta:

2x4 + 3x5
2x4 + 2x5
2x4 + 5x5
x4 2x5
x1 , . . . , x5

4
5
1
0.

0
4/3

x = 2/3 .
5/3
0

Ejercicios

b) minimizar
s. a

4x1 + 5x2 +
x1

5x1 + 3x2 +
4x1 + 5x2
x2
2x1 + x2 +
2x1 3x2 +

Solucion propuesta:

x3 + 3x4 5x5 + 8x6


4x3 + 3x4 + x5 + x6
x3
5x5 + 3x6
3x3 + 3x4 4x5 + x6
+ 2x4 + 4x5 5x6
x3 + x4 + 2x5 + 2x6
2x3 x4 + 4x5 + 5x6
x1 , . . . , x6

0
0

5/2

x =
.
7/2
0
1/2

495

1
4
4
5
7
7
0.

8.4. Como se podra interpretar la condici


on de complementariedad de holguras en terminos economicos?
8.5. Considerese el problema de programacion lineal:
minimizar 4x1 5x2 4x3
s. a
x1
+ x3
2x1 + x2 x3
x2 + x3
x2 + x3
x1 + x2 x3
x1 + x2 + x3
x1 , . . . , x3
a)
b)
c)
d)

4
3
5
2
2
7
0.

Es x0 = [1, 2, 3]T un punto extremo?


Probar que x0 es un punto extremo.
Construir el problema dual. Cu
al es su optimo?
Determinar todos los optimos alternativos del programa primal.

8.6. Resolver los siguientes problemas de programacion lineal usando el metodo dual del simplex de la
tabla 8.2 y partiendo de la base indicada:
+ 3x3 + x4
a) minimizar 10x1
s. a
x1 + 2x2 x3 x4 = 2
3x1 3x2 + x3 + 2x4 = 5
x1 , . . . , x4 0.
Base inicial:


2 1
B = [a2 , a3 ] =
,
3 1


=


1 1
.
3 2

b) minimizar 3x1 + 2x2 + 3x3 + 8x4


s. a
x1 + x2 + 2x3 + 3x4 x5 = 4
= 5
2x1 x2 + x3 + 4x4
x1 , . . . , x5 0.
Base inicial:




1 1
0 1
1
B = [a2 , a5 ] =
, B =
.
1 0
1 1

496

Captulo 8. Dualidad y an
alisis de sensibilidad
c) minimizar 2x1 + 5x2 x3 + x4
s. a
4x1 + x2 x3 3x4 x5
= 23
x1 + x2 x3 + 2x4
x6 =
7
0.
x1 , . . . , x6
Base inicial:




1 0
1 0
1
.
B = [a2 , a6 ] =
, B =
1 1
1 1
d) minimizar 10x1 + 8x2 + 3x3 4x4
s. a
6x1 + 3x2 + 2x3 x4
5x1 2x2 + x3 + 4x4
x1 , . . . , x4
Base inicial:

2
B = [a3 , a4 ] =
1

= 9
= 1
0.

1
,
4


=


4/9 1/9
.
1/9 2/9

6x1 + 4x2 + x3
x1 + x2 x3 + x4
= 1
+ x5 = 1
2x1 2x2 + x3
x1 , . . . , x5 0.
Base inicial:




1/3 1/3
1 1
1
, B =
.
B = [a1 , a3 ] =
2/3 1/3
2 1

e) minimizar
s. a

f) minimizar 3x1 + 4x2 + x3 + 5x4 + 5x5


s. a
3x1 + x2 + x3 + x4
= 1
+ x5 = 1
x1 + 2x2 x3
x1 , . . . , x5 0.
Base inicial:




1/3 0
3 0
.
, B 1 =
B = [a1 , a5 ] =
1/3 1
1 1
8.7. Determinar el dual de

minimizar cT x
s. a
Ax = b
x a,

donde a 0.
8.8. Construir un ejemplo en el que el programa primal no tenga soluci
on factible y el dual tampoco.
8.9. Considerese el programa lineal
minimizar cT x
s. a
Ax = b
x 0.
Supongase que este es el programa primal y que tanto el como su dual son factibles. Sea la
solucion optima del dual:
a) Si la ecuacion k-esima del programa primal se multiplica por = 0, determinar una soluci
on
optima w del dual.
b) Sup
ongase que en el programa primal original se a
nade a la ecuacion r-esima la k-esima
multiplicada por . Cual es la solucion optima del correspondiente programa dual?
c) Supongase que en el programa primal original se a
nade a c la la k-esima de A multiplicada
por . Cual es la solucion del correspondiente programa dual?

Ejercicios

497

8.10. Una rma textil es capaz de producir tres productos distintos x1 , x2 y x3 . Su plan de producci
on
para el proximo mes debe cumplir las siguientes condiciones:
x1 + 2x2 + 2x3 12
2x1 + 4x2 + x3 f
x1 , x2 , x3 0.
La primera condicion la dene la disponibilidad del equipo instalado, y es ja. La segunda la
determina la disponibilidad de algod
on.
El benecio obtenible de los tres productos son 2, 3 y 3 unidades, respectivamente; depende del
coste del algodon y de los costes jos.
a) Determinar el precio sombra, 2 , del algodon en funcion de f (usar el algoritmo dual del
simplex). Dibujar 2 (f ) y el benecio neto z(f ) en funcion del coste del algodon.
b) La rma puede comprar algod
on en el mercado a un precio igual a 1/6. Tambien lo puede
adquirir, sin embargo, a un suministrador habitual a un precio igual a 1/12. Determinar el
benecio neto de la rma (s) como funcion de s.
8.11. Usando solo las propiedades del optimo de un programa lineal, determinar la soluci
on x de
cT x
minimizar
xn
s. a
l x u,
donde l y u son vectores cuyos componentes, todos nitos, satisfacen li ui , i = 1, . . . , n.
8.12. Formular el programa dual de los siguientes programas lineales:
cT x
a) minimizar
xn
s. a
Ax b,

x 0.

b) minimizar
c x
xn
s. a
Ax b,

aT x .

c) minimizar
cT x
xn
s. a
Ax = b,

Bx d, x 0.

8.13. Determinar el dual del programa lineal


minimizar g T z f T y
x, y
s. a
y z = c, y, z 0,
donde f , g y c son vectores cuyos componentes son todos nitos.
a) Usar el programa dual para determinar en que condiciones el programa primal tiene solucion
acotada.
b) Resolver el dual y de el obtener el valor de las variables del primal.
8.14. Sea

"
1 1
0 2
A=
y
1 4
Cual de los dos sistemas siguientes tiene solucion?

 
1
.
c=
4

Sistema 1: Ax 0

cT x > 0.

Sistema 2: wT A = c

w 0.

Ilustrar geometricamente la respuesta.

498

Captulo 8. Dualidad y an
alisis de sensibilidad

8.15. Escribir las condiciones de optimo de cada uno de los programas lineales siguientes:
a) maximizar
cT x
xn
s. a
Ax b,

x 0.

c x
b) maximizar
xn
s. a
Ax b,

x 0.

c x
c) maximizar
xn
s. a
A1 x = b1
A2 x b2 ,

x 0.

c x
d) maximizar
xn
s. a
Ax = b
l x u.
8.16. Probar que una funci
on objetivo alcanza un mnimo en un punto extremo de un poliedro si en
todos los adyacentes a ese punto el valor de la funcion objetivo es mayor o igual. Se puede
generalizar este aserto al caso de un politopo no acotado?
8.17. Considerese el problema
cT x
minimizar
xn
s. a
Ax = b,

x 0.

Si x es un punto extremo optimo, probar que el siguiente punto extremo mejor (sup
ongase es
u
nico) ha de ser adyacente a x. Que pasa si la suposicion de unicidad de ese punto no se tiene
en cuenta?
8.18. Considerese el problema
cT x
minimizar
xn
s. a
Ax = b,

x 0,

donde m = n, c = b y A = A . Probar mediante dualidad que si existe un x0 tal que Ax0 = b,


x0 es un punto optimo.
8.19. Usando el lema de Farkas, probar que si el programa primal
cT x
minimizar
xn
s. a
Ax b,

x 0,

no tiene solucion factible y el dual s la tiene, el programa dual no est


a acotado.

Captulo

PROGRAMAS LINEALES DE
ESTRUCTURA ESPECIAL

L ESFUERZO DE CALCULO
que requiere una iteraci
on del metodo simplex se
dedica fundamentalmente a la resoluci
on de los sistemas de ecuaciones lineales
B T = cB y By = aq , as como a la adaptaci
on peri
odica de la representaci
on
(en los codigos modernos en la forma LU ) que se tenga de la inversa de la matriz
on de su soluci
on sea lo
b
asica, B 1 . Si el problema es grande, para que el tiempo de obtenci
menor posible, adem
as de utilizar tecnicas de matrices dispersas, es muy conveniente aprovechar cualquier estructura especial que presente la matriz de coecientes de las condiciones. En
los pr
oximos apartados estudiaremos algunos problemas con esa estructura especial y la forma
de utilizarla para mejorar la ecacia numerica del metodo simplex.

9.1

Problemas de ujos en redes

Los problemas de ujos en redes son aquellos que, de entre todos los programas lineales,
registran las cotas mas altas de ecacia en su resolucion. Campos de la ciencia y de la tecnica
como los del control de tr
aco en carreteras y aereo, transporte de energa electrica, control
ferroviario, asignaci
on de circuitos telef
onicos en centrales, aprovechamientos hidr
aulicos para
generacion de energa electrica y regados, etc, por solo mencionar unos pocos, se benecian
a diario de los importantsimos avances que las tecnicas de ujos en redes han experimentado
desde los a
nos 50 en que Kantorovich y Koopmans comenzaran su elaboraci
on y estudio.
La modelizacion matematica de todo tipo de red fsica, natural o articial, es sencilla. Con
una breve preparaci
on, personas no especializadas pueden acceder y comprender r
apidamente
el funcionamiento de los modelos matematicos basados en ellas. Esta combinacion gran implantaci
onfacilidad de asimilaci
on ha potenciado en los u
ltimos a
nos el estudio de la rama
de las matematicas y de la investigaci
on operativa que se dedica a la optimizaci
on en redes.
La matematica, la ciencia de los ordenadores, la ingeniera electrica, y muchas otras discipli499

500

Captulo 9. Programas lineales con estructura especial

nas, inuyen en su desarrollo, habiendose constituido su estudio en una autentica ciencia a


la que dedican muchos cursos las universidades y gran n
umero de publicaciones la literatura
especializada.
Para la modelizaci
on matematica de los sistemas que estudia, la optimizacion en redes utiliza
como base la teora de grafos. Aun cuando en el captulo 3 ya se han introducido diversos
conceptos relativos a esta teora, a continuaci
on se exponen las nociones mas elementales
adaptadas a su aplicaci
on a la resoluci
on de programas lineales en redes.

9.1.1

Conceptos b
asicos de teora de grafos

Un grafo, G = (V, E), es un par formado por un conjunto nito, V , de elementos denominados
vertices o nudos del grafo, y por otro tambien nito, E, de arcos o aristas. Un arco es un par
de nudos. Si los arcos de un grafo son ordenados, el grafo se denomina digrafo o grafo dirigido;
si no, grafo a secas o grafo no dirigido. Un grafo no dirigido se puede ver como un digrafo en el
que si el arco e = (u, v) E, tambien e = (v, u) E. Si e = (i, j) E, este arco une un nudo
de origen o cola i = t(e) con otro de destino o cabeza j = h(e). En la gura 9.1 se representa
un grafo dirigido.
2

Figura 9.1
Grafo dirigido, o digrafo, de 4 nudos y 6 arcos
Se denomina grado de un nudo al n
umero de nudos unidos a el. Un camino, P , de un grafo
dirigido es una sucesi
on alternada (i0 , e1 , i1 , . . . , el , il ) de nudos y arcos en la que ek = (ik1 , ik )
as, para 1 k l. En otras
es un arco hacia adelante o ek = (ik , ik1 ) un arco hacia atr
palabras, una sucesi
on de nudos y arcos en la que el nal, destino o cabeza de cada arco
coincide con el origen o cola del siguiente. Ese camino va de i0 a il siendo su longitud l. Una
cadena es una estructura similar al camino excepto que no es necesario que el nudo nal de
cada arco coincida con el comienzo del siguiente. Un camino en el que i0 = il se denomina
circuito. Una cadena en la que i0 = il se denomina ciclo. Un camino (cadena) de un digrafo
se dice hamiltoniano si pasa una vez y nada m
as que una vez por cada uno de los nudos de
ese grafo. Un camino (cadena) de un grafo se dice euleriano si comprende todas las aristas de
ese grafo. Un grafo dirigido se dice conexo si cada par de nudos distintos se pueden unir por
un camino. Un digrafo se denomina acclico si no contiene ning
un ciclo o circuito. Un
arbol es

501

9.1 Problemas de ujos en redes

un grafo dirigido acclico y conexo. Un


arbol maximal es un arbol que abarca todos los nudos
del digrafo. Un digrafo H = (W, F ) es un subgrafo de G si W V y F E; si W = V ese
subgrafo se dice subgrafo maximal. En la gura 9.2 se describen un camino, una cadena, un
circuito, un ciclo y un arbol.
2

Cadena

Camino

Ciclo

Circuito

Arbol

Figura 9.2
Algunas estructuras b
asicas de un grafo dirigido
Ademas de la representacion esquematica, un grafo dirigido se puede caracterizar mediante
la denominada matriz de incidencia nudo-arco del grafo. Para un digrafo G = (V, E), los
coecientes de la matriz de incidencia nudo-arco, A, se denen de la siguiente manera:

+1 si t(j) = i,

aij =

1 si h(j) = i,
0 en cualquier otro caso.

La matriz de incidencia nudo-arco del grafo de la gura 9.1 es


(1,2) (1,4) (2,4) (4,2) (2,3) (4,3)
1
1
0
0
0
0
1
1

0
1 1
1
0
2
.
A=

0
0
0
0 1 1
3
0 1 1
1
0
1
4

Mediante un grafo dirigido se tiene la posibilidad de representar la estructura de comunicaciones entre nudos. Cuando existe la posibilidad de que a lo largo de sus arcos haya ujo
de algo mercancas, agua, gas, etc., al grafo dirigido se le denomina red. Una red puede

502

Captulo 9. Programas lineales con estructura especial

representar cosas diversas: desde un problema matematico estrictamente, hasta un sistema de


transporte, red de comunicaciones terrestre, martima o aerea, etc. Un ujo en un arco dirigido
(i, j) es un n
umero xij 0. Los ujos en los arcos de una red deben satisfacer el criterio de
conservacion en cada nudo. Los ujos no pueden crearse o perderse en un nudo: el ujo total
que entra en un nudo debe ser igual al total que sale, a menos que ese nudo sea una fuente
o nudo oferta suministrador de ujo, o un sumidero o nudo de demanda que absorbe
ujo.

9.1.2

Problemas tpicos de ujos en redes

Sup
ongase que G = (V, E) es un grafo dirigido conexo de
(m nudos, que en cada nudo i V
se oferta una cantidad de producto bi 1 de tal forma que m
i=1 bi = 0, que el ujo por un arco
(i, j) se designa por xij y que el coste de transportar una unidad de producto de i a j es cij .
El problema
min.

m 
m


cij xij

i=1 j=1

s. a

m

j=1

xij

m


xki = bi ,

i = 1, . . . , m

k=1

lij xij uij ,

i, j = 1, . . . , m,

es el denominado problema del coste mnimo: el problema por excelencia de ujos en redes. Las
condiciones de igualdad de este problema ecuaciones de Kirchho indican que el ujo total
que sale del nudo i menos el que llega a ese nudo ha de ser igual al balance oferta/demanda en
dicho nudo. Estas condiciones se suelen denominar de conservaci
on o balance. Si las condiciones
lij xij uij se reducen a xij 0, el problema se conoce como el problema del transbordo.
Si A designa la matriz de incidencia nudo arco del grafo G, el problema de mnimo coste se
puede escribir de la siguiente manera:
min. cT x
s. a Ax = b
l x u.

(9.1)

El de transbordo, como
min. cT x
s. a Ax = b
x 0.

(9.2)

Tanto (9.1) como (9.2) son problemas de programaci


on lineal con una formulaci
on identica
a la de captulos anteriores. En principio, por tanto, se les puede aplicar sin ning
un tipo de
condicionamiento el metodo simplex, tal y como lo hemos descrito para resolver problemas con
variables acotadas o en forma est
andar. Ahora bien, una matriz como A, en la que en cada
columna solo hay un 1 y un 1, y en la que la suma de todas las las es cero, hace pensar en
1

Si bi > 0 el nudo i es de oferta, si bi < 0 de demanda y si bi = 0 el nudo se denomina de transbordo.

9.1 Problemas de ujos en redes

503

la posibilidad de utilizar un procedimiento que intercale, entre los distintos pasos del metodo
simplex, otro u otros pasos que saquen partido de ese hecho y que aumenten su ecacia.
Veamos ahora algunos problemas muy conocidos relativos a ujos en redes y c
omo plantearlos en forma de problemas de mnimo coste o de transbordo.
El problema del camino m
as corto
Consiste en determinar el camino mas corto (menos costoso) que debe recorrer un vehculo,
uido, etc, entre dos puntos de una determinada red. El coste de utilizar un camino en
terminos monetarios o de distancia es la suma de los costes de cada uno de los arcos o vas
que debe atravesar ese vehculo.
Si se desea plantear este problema de la misma manera que el de mnimo coste, asignemos
al nudo de partida del camino, b1 , el n
umero 1 y al de llegada, bm , el 1; a todos los demas
bi , 2 i m 1, el cero. A partir de aqu, su formulaci
on es:
min.

m 
m


cij xij

i=1 j=1

s. a

m


xij

j=1

m

k=1

xij = 0 o 1,

xki

1 si i = 1
0 si 2 i m 1
=

1 si i = m
i, j = 1, 2, . . . , m.

a estar o no en el camino mas corto. La


Las condiciones xij = 0 o 1 indican que cada xij podr
propiedad que tiene la matriz de condiciones de este problema de ser totalmente unimodular
(todas sus submatrices cuadradas2 tienen determinante igual a 0, +1 o 1) asegura que si existe
una soluci
on optima esta es entera con todos los valores de las variables 0 o 1. El problema
que se ha de resolver es, entonces,
min.

m 
m


cij xij

i=1 j=1

1 si i = 1
0 si 2 i m 1
xij
xki =
s. a

1 si i = m
j=1
k=1
xij 0,
i, j = 1, 2, . . . , m.
m


m


El problema del ujo m


aximo
Consiste en determinar el ujo m
aximo autom
oviles en una red viaria, uido de cualquier
tipo en una red de tuberas, etc. que puede atravesar una red entre dos puntos dados: entre
un nudo origen u oferta y entre otro demanda o destino. Los arcos, como es l
ogico, tienen una
capacidad m
axima de absorci
on de ujo.
Para plantear este problema como uno de coste mnimo se procede de la siguiente manera:
se a
nade un arco cticio de capacidad innita a la red original que una el nudo origen con el
B 1 tiene todos sus coecientes 0, +1
o 1 y, por consiguiente, todos los elementos de xB = B 1 b tambien
son 0
o1
2

504

Captulo 9. Programas lineales con estructura especial

nudo destino, asign


andosele un coste igual a 1 al ujo que ha de circular por ese arco; a los
demas nudos se les asigna una oferta/demanda igual a cero y, por u
ltimo, se atribuye un coste
igual a cero al ujo por el resto de los arcos de la red. El mnimo coste de esta red sera aquel
que maximice el ujo por el arco cticio. La formulaci
on del problema en el grafo G = (V, E)
es, por consiguiente,
min. xf

xf
si i = 1
0 si 2 i m 1
xij
xki =
s. a

j=1
k=1
xf
si i = m
lij xij uij ,
i, j = 1, 2, . . . , m
xf 0,
m


m


donde f designa el arco cticio.


Ejemplo 9.1 Supongamos que se quiere determinar el ujo m
aximo entre los nudos 1 y 3 de
la red de la gura 9.3(a), en la que, entre parentesis, se indican los lmites inferior y superior
del ujo que puede absorber cada arco. Este ujo m
aximo se puede calcular obteniendo el ujo
de coste mnimo en la red de la gura 9.3(b) en esta las capacidades mnima y m
axima de
ujo en los arcos y su coste se indican de la forma (l, u, c).

2
(0, 1)

2
(0, 1, 0)

(0, 3)

f
1

(0, 2)

(0, 4)

(0, 2)
4

(a)

(0, 3, 0)
(0, 2, 0)

(0, 4, 0)
(0, , 1)

(0, 2, 0)
4

(b)

Figura 9.3
Flujo m
aximo en una red y su formulaci
on como problema de coste mnimo

El problema de la asignaci
on
Este problema es otro de los clasicos de la teora de grafos. Consiste en asignar a m trabajos,
proyectos o actividades, m operarios, cantidades de dinero, etc., de tal manera que el coste
global que ello comporta sea mnimo. En la gura 9.4 se esquematiza un ejemplo en forma de

9.1 Problemas de ujos en redes

Operarios

Trabajos

505

Figura 9.4
El problema de la asignaci
on en forma de grafo
grafo de las posibles asignaciones de tres operarios a tres trabajos en una determinada f
abrica.
El problema de la asignaci
on se puede plantear en los mismos terminos del problema de coste
mnimo, para un grafo G = (V, E) de m nudos, de la siguiente manera:
min.

m 
m


cij xij

i=1 j=1

s. a

m


xij = 1

i = 1, . . . , m

xij = 1

j = 1, . . . , m

j=1
m

i=1

xij 0,

i, j = 1, . . . , m.

Las variables que designan el ujo por los arcos, xij , solo pueden tomar valores 0 o 1. El hecho
de que la matriz de coecientes de las condiciones del problema sea totalmente unimodular,
una vez mas, asegura que los valores de la soluci
on seran enteros 0 o 1.

9.1.3

El m
etodo simplex para problemas de ujos en redes

Los presentados son solo una mnima parte de los problemas de ujos en redes que se plantean
habitualmente en la tecnica, fsica, ingeniera, economa, etc. Aunque muchos de ellos poseen
algoritmos especcos para resolverlos, no son sino una especializaci
on concreta que mejora
aspectos parciales del metodo simplex aplicado al problema del coste mnimo.
El estudio de la implementaci
on especca del metodo simplex para problemas de ujos en

506

Captulo 9. Programas lineales con estructura especial

redes lo centraremos en resolver el problema del coste mnimo:


min.

m 
m


cij xij

i=1 j=1

s. a

m

j=1

xij

m


xki = bi ,

i = 1, . . . , m,

k=1

lij xij uij ,

i, j = 1, . . . , m.

Si en el grafo dirigido que representa el problema de mnimo coste, G = (V, E), r es un nudo
arbitrario, que se designar
a como raz, y A y b son la matriz y vector que resultan de suprimir
la la correspondiente a r en A y en b del problema (9.1) de la p
agina 502, el problema de
coste mnimo es equivalente a:
min. cT x
s. a Ax = b
l x u.
Demostraremos a continuacion que la matriz A tiene rango n 1, siendo n el n
umero de nudos
del grafo G.
Lema 9.1 Sea H = (V, F ) un subgrafo de un grafo dirigido conexo de n nudos G = (V, E).
Los siguientes asertos son equivalentes:
(i) el n
umero de arcos de H es n 1 y H es conexo.
(ii) el n
umero de arcos de H es n 1 y H es acclico.
(iii) H es conexo y acclico.
(iv) H es mnimamente conexo: al quitar cualquier arco H se convierte en inconexo.
(v) H es m
aximamente acclico: al a
nadir cualquier arco H pasa a ser cclico.
Si se cumple cualquiera de esos asertos, el grafo H es un arbol maximal de G (recordemos
la gura 9.2).
En la tabla 9.1 se expone un sencillo algoritmo para la obtenci
on de un arbol maximal de
un grafo G = (V, E).
Ejemplo 9.2 Queremos obtener un arbol maximal del grafo de la gura 9.5(a). Los arcos son
e1 , e2 , e3 , e4 y e5 .
Iteraci
on 1. Paso 1
H = ({1, 2, 3, 4}, {e1 }) es acclico; E 1 = {e1 }.
Iteraci
on 1. Paso 2
N
umero de elementos en E 1 = 1 = n 1.

9.1 Problemas de ujos en redes

507

Tabla 9.1
Algoritmo para la obtenci
on de un arbol maximal de un grafo dirigido
Paso 0 Establecer una lista de arcos del grafo G = (V, E): e1 , . . . , em . Hacer E = , i 1.
Paso 1 Si H = (V, E i1 {ei }) es acclico, hacer E i = E i1 {ei }; si no, E i = E i1 .
Paso 2 Si el n
umero de elementos de E i = n 1, parar; H es un arbol maximal. Si no, hacer
i i + 1 e ir al paso 1.

Iteraci
on 2. Paso 1
H = ({1, 2, 3, 4}, {e1 , e2 }) es acclico; E 2 = {e1 , e2 }.
2

e1

e3
e5

e1
3

e4

e2

e3
3

e2

(a)

(b)

Figura 9.5
Determinacion del arbol maximal de una red

Iteraci
on 2. Paso 2
N
umero de elementos en E 2 = 2 = n 1.
Iteraci
on 3. Paso 1
H = ({1, 2, 3, 4}, {e1 , e2 , e3 }) es acclico; E 3 = {e1 , e2 , e3 }.
Iteraci
on 3. Paso 2
N
umero de elementos en E 3 = 3 = n 1. Fin del proceso. En la gura 9.5(b) se puede ver el
arbol maximal obtenido.

508

Captulo 9. Programas lineales con estructura especial

Teorema 9.1 Sea G = (V, E) un grafo conexo dirigido de n nudos, A su matriz de incidencia nudo-arco, r V un nudo arbitrario y A la matriz resultante de A al suprimir la la
r. La matriz A es de rango completo, n 1. Si B es una submatriz de A de orden n 1, B
es regular si y s
olo si sus columnas son las que denen en A los arcos de un
arbol maximal
de G.
n. Observese en primer lugar que, seg
Demostracio
un el lema 9.1, todo grafo conexo tiene un
arbol maximal. Para llegar a el, aparte del algoritmo de la tabla 9.1, s
olo hay que ir quitando
arcos del grafo hasta que el subgrafo resultante sea mnimamente conexo.
Probemos que las columnas de A correspondientes a los arcos de un ciclo del grafo G son
linealmente dependientes. En efecto, si P y Q son los conjuntos de arcos hacia adelante y hacia
atr
as de ese ciclo, se cumplira que


ae

eP

ae = 0,

eQ

donde ae es el vector columna de la matriz A correspondiente al arco e. Seg


un esto, es suciente
demostrar que cualquier submatriz B de A cuyas columnas denen los arcos de un arbol
maximal es regular. Esto u
ltimo es un resultado inmediato del lema que sigue.
Lema 9.2 Sea H = (V, F ) un
arbol maximal del grafo G y B la correspondiente submatriz
de la matriz de incidencia nudo-arco de G, A. Existe una ordenaci
on de las las y columnas
de B que la hace triangular superior y en la que todos los elementos de la diagonal principal
son distintos de cero.
n. La haremos por inducci
Demostracio
on en n. Para n = 1 la matriz B es de orden 0.
Supongamos que n = 2. La matriz B sera 1 1 de u
nico elemento 1 o 1. Supongamos que el
enunciado es cierto para n < k. Consideremos el caso en que n = k. La suma de los grados3
de todos los nudos del grafo H es 2n 2. Como cada nudo, al ser H conexo, esta unido al
menos a otro su grado es al menos 1, habr
a al menos dos nudos de grado igual a 1 a
los que llamaremos ramas. Cojamos una de esas ramas, i V , que no sea el nudo raz r y
sea e F el arco que une i al resto del grafo. Consideremos el grafo H  = (V \{i}, F \{e}).
De acuerdo con el lema 9.1 (ii), H  es un arbol maximal de G = (V \{i}, E\{e}), por lo que
por la hip
otesis de inducci
on podemos ordenar los nudos y los arcos de H  de tal manera que
la matriz correspondiente, B  , sea triangular superior con todos los elementos de la diagonal
principal distintos de cero. A
nadamos ahora la la correspondiente al nudo i al nal de B  y
la columna correspondiente al arco e como u
ltima columna. Se obtendr
a que


B u
,
B=
0 1
para un u dado. B, por tanto, se ha podido ordenar de acuerdo con la forma pretendida en el
enunciado del lema.
3

Recordemos que el grado de un nudo es el n


umero de nudos a los que est
a unido.

9.1 Problemas de ujos en redes

509

Un razonamiento identico permite concluir que tambien existe una ordenaci


on de las y
columnas de B que la hace triangular inferior.
Para el caso del ejemplo 9.2 de la p
agina 507, si eligiesemos como nudo raz r = 1, la matriz
B que se obtendra a partir de este arbol maximal, suprimiendo de su matriz de incidencia
nudo-arco A la la correspondiente al nudo 1, sera:
e1 e2 e3
1
1
0
1

0
1
2 1
A=
0 1
3 0
0 1
0
4

e1 e2 e3
1
0
1
2
0 1 .
B= 3 0
0 1
0
4

En la pr
actica, en lugar de suprimir la la correspondiente al nudo raz, se a
nade un nudo
cticio al arbol maximal nudo 0, unido al raz por un u
nico arco que sale de el y va
al cero, suprimiendose, esta vez s, de la matriz A de incidencia nudo-arco del nuevo arbol
maximal, la la correspondiente a ese nudo cticio. En el caso del ejemplo 9.2, el nudo 0 se
une al raz 1, resultando que:

1
1
0
2
B=
3 0
4
0

e1

e2

1
1
1
0
0
0
0 1

e3

1
.
1
0

Esta matriz B, sin embargo, no es triangular como es de desear.


El grafo correspondiente a este nuevo arbol maximal se representa como en la gura 9.6.
2
e1

e3

e2
4

Figura 9.6

Arbol
maximal del ejemplo 9.2 con nudo cticio
Para triangularizar una base de un grafo, una vez obtenido un arbol maximal del mismo y
elegido un nudo raz, se puede utilizar el algoritmo de la tabla 9.2.
Ejemplo 9.3 Triangularizar la matriz del arbol maximal de la gura 9.6 correspondiente al
ejemplo 9.2.

510

Captulo 9. Programas lineales con estructura especial

Tabla 9.2
Algoritmo para la triangularizaci
on de una base
Paso 0 Dado un arbol maximal H = (V, F ) de n nudos, elegir un nudo raz r; hacer i 1.
Paso
Paso
Paso
Paso

1
2
3
4

Encontrar una rama del arbol. Sea l esa rama y es el arco que lleva a ella.
A
nadir a B la la correspondiente a l.
Si i = n 1, ir al paso 4; si no, hacer H (V \{l}, F \{es }), i i + 1 e ir al paso 1.
A
nadir a B la la correspondiente a r. Hacer la columna n igual a en .

Iteraci
on 1. Paso 0
H = ({1, 2, 3, 4}, {e1 , e2 , e3 }), i 1.
Iteraci
on 1. Paso 1
Elegimos el nudo 3: arco e3 .
Iteraci
on 1. Paso 2
La matriz B queda:

e3

3
1


B=

1

0 0

Iteraci
on 1. Paso 3
i = n 1. H = ({1, 2, 4}, {e1 , e2 }), i 2.
Iteraci
on 2. Paso 1
Elegimos el nudo 2: arco e1 .
Iteraci
on 2. Paso 2
La matriz B queda:

e3

3
1
1
2
B=

1

e1
0 0
1 0

9.1 Problemas de ujos en redes

511

Iteraci
on 2. Paso 3
i = n 1. H = ({1, 4}, {e2 }), i 3.
Iteraci
on 3. Paso 1
Elegimos el nudo 4: arco e2 .
Iteraci
on 3. Paso 2
La matriz B queda:

e3

1
3

2 1
B=
4 0
1

e1

e2

0
0
1
0
0 1

Iteraci
on 3. Paso 3
i = n 1.
Iteraci
on 3. Paso 4
La matriz B queda:

e3

3
1
1
2
B=
4 0
1
0

e1

e2

0
0
1
0
0 1
1
1

0
.

0
1

Esta matriz B s es triangular.


El lema 9.2 tambien demuestra que cualquier submatriz de una de incidencia nudo-arco,
A, de orden n 1, tiene un determinante igual a 0, 1 o -1 (dado que el determinante de una
matriz triangular es igual al producto de los elementos de la diagonal principal). De hecho,
la demostracion del lema 9.2 se puede extender a demostrar que toda submatriz de A tiene
un determinante igual a 0, 1 o -1. En otras palabras, A es totalmente unimodular. Estas
matrices tienen una importancia extraordinaria en programaci
on combinatoria pues la inversa
de cualquier submatriz regular de una matriz totalmente unimodular tiene todos sus elementos
enteros.
Generalizando estas u
ltimas ideas, se puede demostrar que para cualquier vector b con
todos sus elementos enteros, las soluciones basicas del sistema Ax = b, x 0, en el que A es
totalmente unimodular, tienen todos sus elementos enteros.

512

Captulo 9. Programas lineales con estructura especial

Corolario 9.1 El problema del transbordo


min. cT x
s. a Ax = b
x0,
tiene la propiedad de que si los elementos del vector b son todos enteros, cualquier soluci
on
b
asica tambien tiene todos sus elementos enteros. M
as a
un, cualquier soluci
on b
asica x
tiene elementos xij distintos de cero s
olo si estos son arcos de un
arbol maximal: xij F ,
para alg
un
arbol maximal H = (V, F ), F E, del grafo G = (V, E).

9.1.3.1

Implementaci
on pr
actica del m
etodo simplex

El esquema general que se va a seguir en la exposicion siguiente es estrictamente el del algoritmo


de la tabla 7.4 de la p
agina 454 (algoritmo simplex revisado para variables acotadas). Las
diferencias se reeren a la especializacion l
ogica de ciertas etapas al aplicarse a ujos en redes.

9.1.3.1.1

Paso 1. Asignaci
on de precios. Comprobaci
on de condiciones de
optimo

Empezaremos suponiendo que se dispone de una soluci


on b
asica factible desde la que comenzar
el proceso iterativo. La idea clave que caracteriza esta implementacion con respecto a las que
hemos visto hasta ahora radica en la representaci
on de la matriz B en la forma triangular superior/inferior. Esto permitir
a resolver muy r
apidamente los sistemas de ecuaciones inherentes
al metodo simplex : B T = cB y By = aq .
Para obtener la soluci
on de estos sistemas de ecuaciones, en cualquier caso, es fundamental
guardar ecazmente la informaci
on relativa a los nudos y arcos de la red, y la de los arcos que
forman la base. Un esquema muy utilizado, correspondiente al grafo de la gura 9.7, es el de la
tabla 9.3. Con p(i) se designa el nudo predecesor del i V en el arbol maximal4 correspondiente,
es decir, el unido a ese i que ocupa un nivel m
as cercano al raz. El signo positivo o negativo
indica que el arco que lo une con su predecesor va de i a p(i) o de p(i) a i. Por d(i) se designa
la profundidad (depth) de ese nudo i en niveles o escalones con respecto al raz (2 indica que
hay que recorrer un camino de dos arcos como mnimo para llegar al raz). Por u
ltimo, s(i)
5
designa el sucesor tambien denominado hebra en bastantes referencias bibliogr
acas del
nudo i en una lista de nudos preordenada preorden de acuerdo con un determinado criterio
que se considera oportuno para ese arbol. Sobre esta u
ltima estructura, s(), volveremos mas
adelante al hablar de su actualizaci
on de una iteraci
on a otra.
Utilizando el algoritmo de la tabla 9.2, la matriz B ya ordenada correspondiente al arbol
4

El
arbol maximal, dentro del metodo simplex, tambien se suele designar en la literatura especializada como

arbol b
asico.
5
Thread en ingles.

9.1 Problemas de ujos en redes

513

3
5

4
9

Figura 9.7
Digrafo o grafo correspondiente a los datos de la tabla 9.3

maximal de la gura 9.7 es:


(2, 3) (3, 5) (3, 7) (3, 1) (6, 4) (9, 4) (4, 8) (1, 8)

2
5
7
3
B= 6
9
4
8
1

1
0

1
0

0
0
0

0
1
0
1
0
0
0
0
0

0
0
1
1
0
0
0
0
0

0
0
0
1
0
0
0
0
1

0
0
0
0
1
0
1
0
0

0
0
0
0
0
1
1
0
0

0
0
0
0
0
0
1
1
0

0
0
0
0
0
0
0
1
1

0
.
0

0
0
1

(9.3)

on
Para resolver el sistema B T = cB simplemente habra que llevar a cabo una sustituci

Tabla 9.3
Estructura de datos del grafo de la gura 9.7
Nudo i

p(i)

+3

+1

+8

+4

+4

d(i)

s(i)

514

Captulo 9. Programas lineales con estructura especial

inversa. Por ejemplo, tomando como matriz B la de (9.3), el sistema a resolver sera:
2

3
5
+ 3
7 + 3
3
6

=
=
=
1 =
4
=
9 4
=
4 8
=
8 + 1 =
1 =

c23
c35
c37
c31
c64
c94
c48
c18
0.

Esta sencilla operaci


on de sustituci
on inversa se puede llevar a efecto muy ecazmente, con las
estructuras de datos antes denidas, utilizando el algoritmo de la tabla 9.4.
Tabla 9.4
Algoritmo para la obtenci
on de los multiplicadores simplex en el algoritmo simplex para
ujos en redes
Paso 0 Inicializar: r = 0; M {r}; N V \{r}.
Paso 1 Encontrar en la lista de nudos uno i N tal que p(i) M . Si N = , parar; el
procedimiento ha terminado.
Paso 2 Si p(i) > 0, hacer i = p(i) + cip(i) ; si p(i) < 0, hacer i = p(i) cp(i)i .
Hacer M M {i}, N N \{i} e ir al paso 1

En el ejemplo que venimos estudiando, con los datos de la tabla 9.3, se calcularan 3 , 2 ,
5 , 7 , 8 , 4 , 9 y 6 .
A los multiplicadores simplex se les suele denominar, en programaci
on en redes, potenciales
de los nudos. Haciendo un smil hidr
aulico, estos multiplicadores indican la energa potencial
de que dispondra un hipotetico uido que circulase por la red en un determinado nudo y, en
funci
on de la de los dem
as, la capacidad para poderse trasladar de ese nudo a otro.
Una vez determinados los multiplicadores simplex, la siguiente operaci
on a realizar en el
metodo simplex consiste en calcular los costes reducidos de las variables/arcos no basicos:
ce = ce T ae para todo e E\F . Es decir, si e = (i, j) E\F , obtener
1 = {e : xe = le y ce i + j < 0}

(9.4a)

2 = {e : xe = ue y ce i + j > 0}.

(9.4b)

y
Para realizar esta operaci
on s
olo es necesario consultar la informaci
on relativa a cu
al es, para
un arco e = (i, j), su origen, i, y su destino, j.
Las condiciones de optimo en los problemas de ujos en redes tienen una interpretaci
on
economica interesante. Como r (valor dual, multiplicador simplex o potencial del nudo raz)
es igual a 0, el coste reducido, ce = ce i + j , de un arco no b
asico, e = (i, j) E\F , en
su lmite inferior, expresa el cambio en el valor de la funci
on objetivo que se obtiene enviando

9.1 Problemas de ujos en redes

515

una unidad de ujo a traves del arbol maximal desde el nudo raz r al nudo i, y de este al raz,
pasando por el nudo j. Un razonamiento inverso se aplicara al caso de un arco en su lmite
superior. Las condiciones de optimo indicar
an que no es benecioso hacer circular esos ujos.
9.1.3.1.2

Paso 2. Determinaci
on de la columna de pivotaci
on

Si 1 2 = , el problema est
a resuelto; si no, se escoge un arco de esos dos conjuntos para
entrar en la base: en general, el de coste reducido m
as interesante.
Denida que variable/arco, xq o eq , ha de entrar en la base, la siguiente operaci
on consiste
en comprobar la existencia de una soluci
on no acotada. Para ello hay que resolver el sistema
By = aq .
El teorema 9.1 de la p
agina 508 nos asegura que para un grafo G = (V, E) y un arbol
maximal H = (V, F ), entre los nudos del arco q = (i, j) E\F , en el arbol H, existe una
u
nica cadena y s
olo una. Es decir, s
olo se puede llegar de i a j en ese arbol maximal H de una
u
nica manera. Esta cadena, junto con el arco q, constituir
a un ciclo. Para resolver By = aq
(buscar una combinaci
on lineal de los arcos de H con la que expresar q) habr
a que determinar
ese camino. Para hacerlo, bastar
a con examinar las estructuras de datos de la base o arbol
maximal.
Si, por ejemplo, se trata de encontrar el camino entre los nudos i = 7 y j = 9 en el ejemplo
de la tabla 9.3 p
agina 513, procederamos de la siguiente manera: como d(9) > d(7),
buscamos el p(9) = +4 (el arco va del nudo 9 al nudo 4); (9, 4) tiene el sentido inverso al del
camino que buscamos. A continuaci
on vemos que d(7) = d(4) pero 7 = 4; buscamos el p(7)
que es 3, en sentido por tanto tambien contrario al del camino que buscamos, y p(4) = 8,
igualmente contrario. Como 3 = 8, buscamos p(3) = +1 y p(8) = 1. Los arcos (3,1) y (1,8)
estan orientados en el sentido del camino que buscamos y llegan a un nudo com
un, el raz. El
camino buscado es por tanto:
{7, e37 , 3, +e31 , 1, +e18 , 8, e48 , 4, e49 , 9}.
9.1.3.1.3

Paso 3. Determinaci
on de la la de pivotaci
on. An
alisis de ratios

Para determinar que variable/arco ha de salir de la base al incrementar/decrementar el ujo


en el arco q, primero habr
a que comprobar si en el camino encontrado existen o no arcos
en el sentido i j; si no, la soluci
on sera no acotada. De existir esos arcos habr
a que
comprobar c
omo absorbe un incremento/decremento de ujo el camino encontrado; es decir,
si se incrementa el ujo en (i, j), que arco del camino en el sentido i j esta mas cerca
de su lmite inferior o, en sentido contrario, m
as cerca de su lmite superior (que arco se
bloquea o satura antes). Si se decrementa, lo contrario. En concreto, si habiendo elegido un eq
perteneciente a 1 o 2 de (9.4a) y (9.4b), haciendo


+1 si eq 1
1 si eq 2

y designando como C el camino obtenido, C = {i, e1 , . . . , en , j}, y por Oeq (C) la orientaci
on
del arco eq en ese camino, es decir,


Oeq (C) =

+1, si eq = (ik , ik+1 )


1, si eq = (ik+1 , ik ),

516

Captulo 9. Programas lineales con estructura especial

se escogera aquel arco que determinase un tal que




= min

min

Oek (C)=

{xek lek , } ,

min

Oek (C)=

{uek xek , } , uq lq .

En el ejemplo de la tabla 9.3 que venimos siguiendo, si al comienzo de la iteraci


on los valores
de las variables (ujos por los arcos) son x35 = x94 = 1, x37 = x18 = 2, x23 = x48 = 3 y
x31 = x64 = 4, siendo los lmites inferiores de todos los ujos por los arcos del problema 0 y
los superiores , como el ujo por el arco (7, 9) solo se puede incrementar, el del arco en el
camino 7 9 que antes se bloquea al decrementar el ujo total por el camino (arco m
as cerca
de su lmite inferior) es el del (1, 8).
9.1.3.1.4

Paso 4. Pivotaci
on. Actualizaci
on de las estructuras de datos

Este paso consiste en adaptar la soluci


on, la matriz B y las estructuras de datos correspondientes, de acuerdo con los cambios efectuados. Es decir, por lo que respecta a la soluci
on,
hacer:
xq xq + ,
y
xj xj Oej ,

para ej C.

En el ejemplo de la tabla 9.3, x79 0 + 2, x37 2 + 2, x31 4 2, x18 2 2, x48 3 + 2


y x94 1 + 2.
Para adaptar la base y B, una vez adaptados los ujos en los arcos, se denen
3 = {ej : xj = lj , Oej (C) = }
y
4 = {ej : xj = uj , Oej (C) = }
y se selecciona cualquier em 3 4 reemplazandose en la base el arco em por el eq .
De acuerdo con las consideraciones hechas sobre los multiplicadores simplex, o valores duales, se puede deducir que, de iteraci
on en iteraci
on, en lugar de tener que resolver el sistema
T
B = cB cada vez para reobtenerlos, s
olo es necesario recalcular aquellos que se ven modicados por los cambios de base efectuados. En efecto, al a
nadir un arco cualquiera (i, j) a la
base y sacar de ella otro (p, q), por ejemplo, se obtiene un nuevo arbol maximal. El hecho de
retirar de la base el arco (p, q) divide el arbol maximal original en dos sub
arboles: uno, H1 ,
que incluir
a el nudo raz, y otro, H2 , sin el nudo raz. El sub
arbol H2 , al entrar el arco (i, j)
en la base/arbol maximal, pasar
a a quedar colgado del nudo i o del j. El arco (i, j) tendr
a en
el nuevo arbol maximal un nudo en H1 y el otro en H2 . Como r = 0 y ca k + l = 0,
para todos los arcos a = (k, l) del nuevo arbol maximal, los valores de los multiplicadores en
los nudos de H1 permaneceran iguales mientras que los de aquellos en H2 cambiar
an en una
cantidad constante: concretamente en cij , si i H1 y j H2 , o en
cij , si i H2 y j H1 .
Para llevar estas consideraciones a la pr
actica con las estructuras de datos que venimos
estudiando, si el arco que sale de la base es f = (p, q), el que entra e = (i, j), y suponemos que
d(q) = d(p) + 1, habr
a que hacer
q q ce ,

k s(q)

9.1 Problemas de ujos en redes

517

y, posteriormente, mientras se cumpla que d(k) > d(q),


k k ce y
k s(k).
Para nalizar este paso de la pivotaci
on, hace falta actualizar las estructuras de datos: p(),
d() y s(). A continuaci
on estudiamos como.
9.1.3.1.4.1

Actualizaci
on de s()

Mientras que en el nuevo arbol maximal, H {e}\{f }, si el arco que entra es e y el que sale f ,
los vectores p() y d() estaran denidos de forma u
nica, el nuevo s() depender
a del preorden
en que se consideren los nudos del nuevo arbol maximal. El preorden que se debe utilizar a lo
largo de toda la implementaci
on del metodo simplex es aquel que requiera la menor cantidad
de operaciones para adaptar el vector s() de iteraci
on en iteraci
on.
Para ilustrar ese preorden utilizaremos la gura 9.8. En aras de claricar lo m
as posible la
exposicion, adem
as de no incluir el sentido de los arcos del arbol maximal, los nudos de esta
gura se han numerado de tal forma que 1, 2, . . . , 32 es un preorden. El arco que entra en la
base, e, es el que une los nudos 3 y 20; el que sale de la base, f , el que une el 8 y el 9.
En lo que sigue de exposici
on a los nudos del arco e los designaremos por e1 y e2 , a los del
f , por f1 y f2 , de tal manera que e1 H1 (el sub
arbol que contiene el nudo raz), e2 H2 ,
f1 H1 y f2 H2 . El camino de e2 a f2 en el arbol H se denomina tronco de pivotaci
on. Los
nudos que lo forman los designaremos por v1 , v2 , . . . , vh de tal forma que v1 = e2 y vh = f2 .
En el ejemplo de la gura 9.8, v1 = 20, v2 = 17, v3 = 16, v4 = 12 y v5 = 9.
Consideremos un nudo arbitrario k H2 y encontremos el subndice m
as peque
no, t, tal
que vt pertenezca al camino de k al nudo raz: para ese subndice t escribiremos que k Gt .
De esta forma H2 se divide en subconjuntos disjuntos G1 , G2 , . . . , Gh . Consideraremos que
cada Gt se ordena de acuerdo con el preorden establecido para H. En el ejemplo que estamos
estudiando,
G1 = {20, 21, 22, 23, 24}
G2 = {17, 18, 19, 25, 26}
G3 = {16, 27, 28, 29}
G4 = {12, 13, 14, 15} y
G5 = {9, 10, 11, 30, 31}.
La concatenacion de G1 , G2 , . . . , Gh la designaremos por G . En el ejemplo, G = {20, 21, 22,
23, 24, 17, 18, 19, 25, 26, 16, 27, 28, 29, 12, 13, 14, 15, 9, 10, 11, 30, 31}.
El preorden de H {e}\{f } se obtiene del de H quitando H2 y a
nadiendo G directamente
al nudo e1 . En nuestro ejemplo, el nuevo arbol maximal H {e}\{f } es el de la gura 9.9.
La operaci
on que hemos descrito requiere ciertos cambios en el vector s(). En efecto, cuando
se quita H2 , hay que cerrar el hueco que se crea: si el primer nudo de H2 , f2 , estaba precedido
por otro a, el nuevo sucesor de a, s(a), sera el antiguo sucesor, z, del u
ltimo nudo en H2 . Del
mismo modo, para a
nadir G entre e1 y su antiguo sucesor, b, el primer nudo de G , e2 , se
hace nuevo sucesor de e1 y a b se le hace el sucesor del u
ltimo nudo de G . En el caso de que
e1 = a, e2 se hace nuevo sucesor de e1 y z nuevo sucesor del u
ltimo nudo de G .

Transformar H2 en G requiere m
as cambios en s(). En primer lugar, el nuevo sucesor del
u
ltimo nudo de cada Gt , t h 1, sera el primer nudo vt+1 de Gt+1 (como el u
ltimo nudo de

518

Captulo 9. Programas lineales con estructura especial

32

10

12

30

11

13

14

16

15

17

27

20

18

19

21

22

31

25

24

28

29

26

23

Figura 9.8

Arbol maximal sobre el que se ilustra el proceso de adaptaci


on del vector s() una vez
efectuada una iteraci
on del metodo simplex

9.1 Problemas de ujos en redes

519

20

21

22

24

23

32

17

18

25

19

26

16

27

28

12

29

13

14

15

10

30

11

31

Figura 9.9

Arbol maximal resultante del de la gura 9.8 una vez introducido el arco (3,20) en la base.
Sale el (8,9)

520

Captulo 9. Programas lineales con estructura especial

Gh es el u
ltimo de G , su nuevo sucesor sera b). Despues, un nudo adicional en cada Gt , con
t 2, puede cambiar de sucesor. Para preparar este cambio, observese que cada Gt , con t 2,
se separa en una parte izquierda, la cual contiene los nudos que aparecen antes de vt1 en el
antiguo preorden, y en una parte derecha, que contiene los nudos posteriores al vt1 . La parte
izquierda siempre incluye el nudo vt ; la derecha puede estar vaca: por ejemplo, si t = 4 en el
ejemplo que venimos estudiando. Si la parte derecha no est
a vaca, el u
ltimo nudo de la parte
izquierda cambia su sucesor pasando de ser vt1 al primero de los de la parte derecha.
En la tabla 9.5 se describe un procedimiento para actualizar el vector s() en cada iteraci
on
del metodo simplex especializado para optimizaci
on de ujos en redes. La variable k escudri
na
G1 , G2 , . . . , Gh , en este orden. Cuando est
a en Gt , la variable i se reere a vt y, si t 2, j a
vt1 . La variable r designa el primer nudo de la parte derecha del conjunto, de entre todos los
Gt , Gt+1 , . . . , Gh con parte derecha no vaca, con el subndice m
as peque
no; si tal conjunto no
existe, r es el antiguo sucesor del u
ltimo nudo de H2 .
Tabla 9.5
Algoritmo para la actualizaci
on del vector s() en el metodo simplex especializado para
optimizaci
on de ujos en redes
Paso 0 Inicializacion. Hacer a = f1 y, mientras s(a) = f2 , reemplazar a por s(a). Hacer
b = s(e1 ) y i = e2 .
Paso 1 Encontrar el u
ltimo nudo k de G1 e inicializar r. Hacer k = i y, mientras d(s(k)) >
d(i), reemplazar k por s(k). Hacer luego r = s(k).
nadir G . Si i = f2 , hacer s(a) = r,
Paso 2 Si se ha llegado al nal de G , quitar H2 y a
s(e1 ) = e2 y s(k) = b si e1 = a; si e1 = a, s(e1 ) = e2 y s(k) = r. Parar.
Paso 3 Ascender por el tronco de pivotacion y adaptar s(k). Hacer j = i, reemplazar i por
p(i) y luego s(k) por i.
Paso 4 Encontrar el u
ltimo nudo k en la parte izquierda de Gt . Hacer k = i y, mientras
s(k) = j, reemplazar k por s(k).
ltimo nudo k
Paso 5 Si la parte derecha de Gt no esta vaca, adaptar s(k), encontrar el u
de Gt y adaptar r. Si d(r) > d(i), reemplazar s(k) por r, mientras d(s(k)) > d(i)
reemplazar k por s(k) y, nalmente, reemplazar r por s(k).
Ir al paso 2.

9.1.3.1.4.2

Actualizaci
on de p() y d()

La transformaci
on de H en H {e}\{f }, gr
acamente, se puede considerar que consta de
dos pasos: primero, acoplar el arco e; segundo, cortar el arco f . Como resultado de esto, el
tronco de pivotaci
on bascula hacia abajo: cada uno de sus nudos, vt , colgando antes de un nudo
ua colgado del
vt+1 , pasa a estar colgado de vt1 . A pesar de esto, sin embargo, cada Gt contin
mismo vt que lo haca antes del cambio. Esta observaci
on permite hacer las dos consideraciones
siguientes:
a) El valor de p(k) cambia solo si k esta en el tronco de pivotaci
on. Los valores originales
p(v1 ) = v2 , p(v2 ) = v3 , . . . , p(vh ) = f1 cambian a p(v1 ) = e1 , p(v2 ) = v1 , . . . , p(vh ) = vh1 .

9.1 Problemas de ujos en redes

521

b) Para cada t = 1, 2, . . . , h, hay una constante ct tal que la nueva d (k) de cada k Gt
es igual a d(k) + ct . Como d (e2 ) = d(e1 ) + 1, entonces c1 = d(e1 ) d(e2 ) + 1. Como
d (vt ) = d (vt1 ) + 1 y d(vt1 ) = d(vt ) + 1, mientras t 2, entonces, tambien mientras
t 2, ct = 2 + ct1 .
De acuerdo con esto, es muy sencillo incorporar la actualizaci
on de p() y d() al procedimiento de actualizaci
on de s() de la tabla 9.5. La actualizaci
on del vector de multiplicadores
simplex tambien se puede incorporar a ese procedimiento.
En el apendice F se incluye una breve descripci
on y el listado de Ccnet, un programa
en C que implementa el metodo simplex especializado para resolver el problema m
as general
de optimizaci
on de ujos en redes: el problema del coste mnimo. Este programa utiliza los
procedimientos que hemos venido exponiendo en este captulo y las estructuras de datos p(),
d() y s(); su actualizaci
on se lleva a cabo seg
un acabamos de ver. Ccnet esta basado en el
programa XNET descrito en Grigoriadis [1986].
Reriendonos nuevamente al ejemplo de la tabla 9.3, una vez introducido el arco (7, 9) en
la base y retirado el (1, 8), el grafo correspondiente al nuevo arbol maximal se representa en la
gura 9.10. La nueva estructura p(i), d(i) y s(i) de la base es la de la tabla 9.6.
Para claricar la mec
anica del metodo simplex aplicado a redes, vamos a resolver un sencillo
ejemplo. Insistimos una vez mas que aunque el procedimiento resulta f
acil, estamos basandonos
en una visi
on directa de la red sobre la que se dene el problema. En ordenador, para que
esta mecanica sea ecaz, se tiene que suplir de forma acertada esta vision implementando
adecuadamente las estructuras de datos que informan a las distintas fases del algoritmo del
estado de la red en ese momento y como acceder a los distintos nudos y arcos.
Ejemplo 9.4 Resolvamos mediante el metodo simplex para ujos en redes el siguiente pro-

3
5

7
9
4

Figura 9.10

Arbol
maximal del ejemplo de la tabla 9.3 una vez introducido el arco (7,9) en la base y
retirado el (1,8)

522

Captulo 9. Programas lineales con estructura especial

Tabla 9.6
Estructura de datos del arbol de la gura 9.10

blema:

Nudo i

p(i)

+3

+1

+4

d(i)

s(i)

min.

x1 + x2 + 3x3 + 10x4

s. a

x1
+ x3 + x4
x1 + x2
x2 x3 x4
0 x1
0 x2
0 x3
0 x4

= 5
= 0
= 5
4
2
4
10.

La matriz de incidencia nudo-arco de la red que dene este problema es


e1
e2
e3
e4
(1, 2) (2, 3) (1, 3) (1, 3)

1
1

1
A= 2
0
3

0
1
1

1
0
1

1
0
1

El grafo correspondiente a este problema, habiendo ya incorporado el nudo cticio y denido


el nudo 2 como el raz, es el de la gura 9.11.
2
e1

e2

e3

e4
Figura 9.11
Grafo correspondiente al problema del ejemplo 9.4

9.1 Problemas de ujos en redes

523

Iteraci
on 1. Paso 0 (Inicializaci
on)
Utilizando los algoritmos de las tablas 9.1 y 9.2 se puede determinar f
acilmente un arbol
maximal de esta red. Ser
a el denido por
e4

e1

1
3

1
B= 1
0
2

0
1
1

0
0
1

y por el grafo de la gura 9.12. La base la forman las variables x1 y x4 . En aras de una adecuada
exposicion del ejemplo, en vez de partir como es lo habitual de xN = [0, 0], comenzaremos con
xN = [0, 4]. Es decir,
B = [a4 , a1 , af ] y N = [a2 , a3 ].
El arco cticio, desde el punto de vista algebraico, estar
a en la base siempre. En lo que afecta
a la mecanica del metodo, este arco no se menciona y se act
ua como si no existiese.
De acuerdo con las consideraciones anteriores, teniendo en cuenta las permutaciones de las
efectuadas,

xB = B 1 b B 1 N xN

1 0 0
5
1 0 0
1 1  
1
0

1 1 0
5
1 1 0
0 1
=
= 0 .
4
1 1 1
0
1 1 1
1 0
0

on degenerada. M
as
La soluci
on de partida, [x1 , x2 , x3 , x4 ], es por tanto [0, 0, 4, 1]: soluci
adelante en el captulo indicaremos c
omo llegar a una soluci
on factible con la que comenzar el
proceso.
2
e1
1

e4

Figura 9.12

Arbol maximal de la iteraci


on 1 del ejemplo 9.4

Iteraci
on 1. Paso 1 (Asignaci
on de precios. Comprobaci
on de o
ptimo)
De la matriz B, del hecho que 2 = 0 (nudo raz) y de que
1 2 = 1
1 3 = 10,
se deduce facilmente que 1 = 1 y 3 = 9. Los costes reducidos de los arcos no basicos e2 y
e3 son
ce2 = ce2 2 + 3 = 1 0 + (9) = 8 y
ce3 = ce3 1 + 3 = 3 1 + (9) = 7.

524

Captulo 9. Programas lineales con estructura especial

No se ha llegado al optimo pues el coste reducido del arco no b


asico en su lmite inferior, e2 ,
es negativo. Tambien deducimos que 1 = {e2 } y 2 = .
Iteraci
on 1. Paso 2 (Determinaci
on de la columna de pivotaci
on)
La variable que se escoge para entrar en la base es el ujo en el arco e2 , pues es la u
nica posible.
Ademas, como e2 1 , = 1.
Determinamos a continuaci
on el camino en el arbol maximal actual entre los nudos del arco
e2 , es decir, entre el 2 y el 3. El camino, como se puede ver en la gura 9.13, es el denido por
C = {2, e1 , 1, e4 , 3}. En este camino Oe1 = 1 y Oe4 = 1.
2
e1

e2
C
e4

Figura 9.13
Iteracion 1 Paso 2: determinaci
on del camino para encontrar la la de pivotaci
on

Iteraci
on 1. Paso 3 (Determinaci
on de la la de pivotaci
on)
Denamos:
1 =
2 =

min {xei lei , } = min{xe4 le4 , } = min{1, } = 1;

Oei (C)=

min

Oei (C)=

{uei xei , } = min{ue1 xe1 , } = min{4 0, } = 4

= min{1 , 2 , ue2 le2 } = min{1, 4, 2} = 1.


El arco que sale de la base es e4 , pues al incrementar el ujo en e2 , el primer arco que se
bloquea en C llega a su lmite inferior es e4 .
Iteraci
on 1. Paso 4 (Pivotaci
on)
Adaptemos la soluci
on:
x2 x2 + = 0 + 1 1 = 1
x1 x1 Oe1 = 0 1 1 (1) = 1
x4 x4 Oe4 = 1 1 1 1 = 0.
La nueva soluci
on es

x1
1
x2 1


x3 = 4 .
x4
0

9.1 Problemas de ujos en redes

525

Adaptemos el valor de los multiplicadores simplex:


3 3 ce2 = 9 (8) = 1.
El nuevo arbol maximal es el de la gura 9.14.
2
e1

e2

Figura 9.14

Arbol
maximal de la iteraci
on 2

Iteraci
on 2. Paso 1
Los costes reducidos de los arcos no basicos e3 y e4 son
ce3 = ce3 1 + 3 = 3 1 + (1) = 1 y
ce4 = ce4 1 + 3 = 10 1 + (1) = 8.
Aunque el coste reducido de e4 si es optimo, el de e3 , en su lmite superior, no lo es: es positivo.
No se ha llegado por tanto al optimo. Tambien deducimos que 1 = y 2 = {e3 }.
Iteraci
on 2. Paso 2
Es evidente que la u
nica variable posible a entrar en la base es el ujo en el arco e3 . Ademas,
como e3 2 , = 1.
A continuaci
on determinamos el camino en el arbol maximal actual entre los nudos del arco
e3 , es decir entre 1 y 3. El camino, como se puede ver en la gura 9.15, es el denido por
C = {1, e1 , 2, e2 , 3}. En este camino, Oe1 = 1 y Oe2 = 1.
2
e1

e2
C

Figura 9.15
Iteracion 2 Paso 2: determinaci
on del camino para encontrar la la de pivotaci
on

526

Captulo 9. Programas lineales con estructura especial

Iteraci
on 2. Paso 3
Denamos:
1 =
2 =

min {xei lei , } = min{} = ;

Oei (C)=

min

Oei (C)=

{uei xei , } = min{ue1 xe1 , ue2 xe2 , } = min{4 1, 2 1, } = 1

y
= min{1 , 2 , ue3 le3 } = min{, 1, 4} = 1.
El arco que sale de la base es e2 , pues al decrementar el ujo en e3 , el primer arco que se
bloquea en C llega a su lmite superior es e2 .
Iteraci
on 2. Paso 4
Adaptemos la soluci
on:
x3 x3 + = 4 + 1 (1) = 3
x1 x1 Oe1 = 1 1 (1) 1 = 2
x2 x2 Oe2 = 1 1 (1) 1 = 2.

La nueva soluci
on es

x1
2
x2 2


x3 = 3 .
x4
0
Adaptemos el valor de los multiplicadores simplex:
3 3 ce3 = 1 1 = 2.
El nuevo arbol maximal es el de la gura 9.16.
2
e1
1

e3

Figura 9.16

Arbol maximal de la iteraci


on 3 del ejemplo 9.4

Iteraci
on 3. Paso 1
Los costes reducidos de los arcos no basicos e2 y e4 son
ce2 = ce2 2 + 3 = 1 0 + (2) = 1 y
ce4 = ce4 1 + 3 = 10 1 + (2) = 7.

9.2 El principio de descomposicion de Dantzig-Wolfe

527

Se ha llegado al optimo pues el coste reducido de e2 , en su lmite superior, es negativo y el de


e4 , en su lmite inferior, positivo. La soluci
on optima es pues

x1
2
x2 2

x3 = 3 .
x4
0

El valor de la funci
on objetivo es
xT c = 13.

9.1.3.2

Soluci
on b
asica factible inicial

El procedimiento que se utiliza en la mayora de los codigos comerciales para obtener una solucion factible inicial consiste en aumentar el grafo original mediante un nudo articial adem
as
del cticio que ya hemos venido considerando, uniendolo mediante arcos articiales a todos
los demas. Si un nudo i al que se une es de oferta (bi > 0), el arco va del nudo i al articial;
si por el contrario, es de demanda (bi < 0), del articial al i. El nudo articial a su vez se une
al cticio, consider
andose como raz el articial. Si alg
un nudo es de transbordo no se une al
articial.
La idea b
asica de este procedimiento es exactamente la misma que la utilizada en la fase I
del metodo simplex generalizado. Para problemas de redes se puede asignar coste unitario al
ujo en los arcos articiales y cero a los del grafo original, en cuyo caso se obtiene el equivalente
a la fase I del metodo simplex. Tambien se puede asignar un coste muy elevado al ujo en los
arcos articiales, en cuyo caso se obtiene el equivalente al denominado metodo de penalizaci
on
o gran M.
Si como ejemplo suponemos la red de la gura 9.1 de la p
agina 500, el grafo que resulta de
aplicar este procedimiento para la obtenci
on de una soluci
on b
asica factible inicial es el de la
gura 9.17 (a) las cantidades entre llaves son las demandas/ofertas (-/+); en (b) se puede
ver el arbol maximal con el que se iniciara la resoluci
on de este problema.

9.2

El principio de descomposici
on de Dantzig-Wolfe

En este apartado seguimos profundizando en formas de aplicar el metodo simplex a problemas


de grandes dimensiones en los que la estructura de sus condiciones hace aconsejable especializar
las diversas partes o pasos del mismo con el n de reducir considerablemente los tiempos de
resolucion. En concreto, nos centraremos en programas lineales del tipo
min. cT x
s. a A0 x = b0
A1 x = b1
x 0.

(9.5)

A las condiciones A0 x = b0 se las denomina condiciones generales y a A1 x = b1 , x 0,


condiciones especiales. Las condiciones especiales, por ejemplo, pueden estar denidas por una

528

Captulo 9. Programas lineales con estructura especial

2 {2}

1 {4}

{1}

{5}

(a)

(b)

Figura 9.17
(a) Grafo de la gura 9.1 aumentado en el nudo articial 5 para obtener una soluci
on factible

inicial. (b) Arbol maximal inicial

red de alg
un tipo o estar formadas por subconjuntos de condiciones cada uno con variables
independientes de los dem
as.
El paradigma de este tipo de problemas lo constituye la asignaci
on presupuestaria en una
empresa multidivisional, en un ministerio con varios departamentos, en una empresa multinacional con diversas delegaciones, etc. Se trata de satisfacer las necesidades presupuestarias
de N divisiones de una empresa u organismo, cada una de ellas con sus variables de decisi
on
independientes, de tal forma que se satisfagan los requerimientos o condiciones de la empresa
en su conjunto: por ejemplo, no poder endeudarse en m
as de una determinada cantidad de
dinero, no poder disponer de m
as recursos de transporte que los disponibles en la empresa, etc.
A estas u
ltimas condiciones se las denomina condiciones de enlace. La forma del problema es
la siguiente:
Tx
min. c1T x1 + + cN
N

s. a A01 x1 + + A0N xN
A11 x1
..
.
AN N xN
x1 , . . . , xN

= b0
= b1
.
= ..
= bN
0.

(9.6)

La matriz de coecientes de las condiciones tiene una estructura como la de la gura 9.18.
Lo que estudiamos a continuaci
on es la forma de resolver (9.5) ecazmente, para lo que se
tendr
a en cuenta, en general, que la resoluci
on del problema s
olo con las condiciones especiales
es mucho mas f
acil. El procedimiento que exponemos es el conocido como descomposici
on de
Dantzig-Wolfe [1960].

9.2 El principio de descomposicion de Dantzig-Wolfe

529

Figura 9.18
Estructura diagonal por bloques de la matriz del problema 9.6
Reescribamos el problema (9.5) de la siguiente manera:
min. cT x
s. a A0 x = b0
x X,

(9.7a)

X = {x n : A1 x = b1 , x 0} .

(9.7b)

donde X es el politopo denido as:

Supondremos que A0 es una matriz m0 n, A1 otra m1 n y los vectores c, x, b0 y b1 tienen


dimensiones acordes. El problema (9.6) se puede expresar de esta nueva manera sin m
as que
hacer A0 = [A01 , A02 , . . . , A0N ] y


X = x = x1T , . . . , xTN

T

: Ajj xj = bj , xj 0, j = 1, . . . , N

o, alternativamente, considerando cada divisi


on independientemente. Es decir,
min. cT1 x1 + + cTN xN
s. a A01 x1 + + A0N xN = b0
x1 X1 , . . . , xN XN ,
con Xj = {xj : Ajj xj = bj , xj 0}.
Las ideas que motivan la descomposicion del problema as planteado son diversas: van
desde la pura aplicaci
on de la estrategia divide y vencer
as a interpretaciones econ
omicas muy
interesantes. Una de este tipo considera que la empresa donde se plantea el problema de asignar
recursos trata de descentralizar su proceso de toma de decisiones mediante la asignacion de
unos precios a los recursos de que dispone. Si no se imponen condiciones sobre el uso de estos
recursos a una divisi
on j, esta los comprara a los precios que determine un vector 0 . La
divisi
on j tratar
a de resolver el siguiente subproblema:


SPj ( 0 )

min.

cTj T0 A0j xj

s. a xj Xj .

(9.8)

530

Captulo 9. Programas lineales con estructura especial

Evidentemente, la empresa ha de denir sus precios 0 de tal manera que, cuando todas
las divisiones hayan resuelto sus respectivos subproblemas SPj ( 0 ), se obtenga una soluci
on
(N
j , tal que j=1 A0j x
j = b0 . Visto as, el problema es semejante al de la situacion
optima, x
economica clasica: que precios decidimos deben tener nuestros productos de tal forma que la
demanda de un conjunto de mayoristas que tratan de maximizar sus ganancias sea igual a
T0 , x
T1 , . . . , x
TN ]T , tal que cada x
j es
la oferta que podemos proporcionar. A una soluci
on [
(N
0 ), para cada j y j=1 A0j x
j = b0 , se la
el optimo del correspondiente subproblema SPj (
denomina punto de equilibrio.
El siguiente resultado dene las condiciones en las cuales se presenta un punto de equilibrio.
TN ]T y [
0T ,
1T , . . . ,
TN ]T son las soluciones o
Teorema 9.2 Si [
xT1 , . . . , x
ptimas del programa primal y dual respectivamente de
Tx
min. c1T x1 + + cN
N

s. a A01 x1 + + A0N xN
A11 x1
..
.
AN N xN
x1 , . . . , xN

= b0
= b1
.
= ..
= bN
0,

(9.9)

T ]T es un punto de equilibrio. Rec


T1 , . . . , x
N
T0 , x
1T , . . . , x
TN ]T
0T , x
procamente, si [
entonces [
T
T
T
N ] es un punto
es un punto de equilibrio, [
x1 , . . . , x
optimo del programa primal de (9.9)
0 forma parte del
y
optimo de su dual.

n. Consideremos la primera parte. Es claro que N


j = b0 por lo que s
olo
Demostracio
j=1 A0j x
j es la solucion optima del subproblema SPj (
0 ). La factibilidad de ese
resta demostrar que x
punto es evidente. La factibilidad del dual y la condici
on de complementariedad de holguras
de (9.9) se expresan de la siguiente manera:
T
T
0 + Ajj
j cj ,

A0j

De acuerdo con esto,


T
T
j cj A0j
0,
Ajj

0 + ATjj
j cj
AT0j


T

j cj AT0j
0
ATjj

j = 0.
x

T

j = 0,
x

(9.10a)

(9.10b)

j es un punto optimo del subproblema SPj (


0) y
j
lo que quiere decir, por dualidad, que x

optimo de su dual. Para ver la parte recproca del teorema, sea j una soluci
on optima del dual
0 ). Por dualidad de este subproblema se tiene la expresi
de SPj (
on (9.10b) y, por consiguiente,
T ]T y [
N
T0 ,
1T , . . . ,
TN ]T son puntos optimos del primal
(9.10a), lo cual implica que [
xT1 , . . . , x
y dual, respectivamente, de (9.9).
Ademas de establecer la existencia de un punto de equilibrio si (9.9) tiene soluci
on, el
teorema 9.2 proporciona en s mismo un procedimiento para la resoluci
on del problema. Si se
0 , el problema (9.9) se podra resolver resolviendo a su vez N
supiesen cuales son los precios
0 ) en vez de uno mucho m
peque
nos programas lineales o subproblemas los SPj (
as grande.

9.2 El principio de descomposicion de Dantzig-Wolfe

531

Desgraciadamente surgen dos dicultades: en primer lugar, que no est


a nada claro, en principio,
0 ; en segundo lugar, que aun cuando se conociese
como determinar adecuadamente el vector
0 , la obtenci
1, . . . , x
N tampoco es facil. En efecto, suponiendo (

on de los vectores x
no degeneraci
on de las soluciones b
asicas factibles, una soluci
on optima de (9.9) tendr
a m0 + j1 mj
componentes positivos (suponiendo que el vector bj , para cada j, tiene mj componentes). Una
0 ), por otro lado,
soluci
on b
asica optima de SPj (
a solo mj componentes positivos por lo
( tendr
que todos los subproblemas juntos tendr
an solo j1 mj componentes positivos. La conclusi
on
0 , obligar
es que cualquier punto de equilibrio,
a a que al menos uno de los subproblemas tenga
soluciones optimas alternativas y que estas habr
an de elegirse adecuadamente a n de agotar
el mercado de los recursos propios de la empresa.
Estas y otras dicultades pueden ser eliminadas formulando un nuevo problema de programacion lineal de tal forma que, aplic
andole el metodo simplex revisado, se genere una sucesion
de vectores 0 y, partiendo de ella, considerando explcitamente combinaciones convexas de
los puntos extremos de los politopos Xj de los subproblemas.
Para facilitar la notaci
on volvamos al problema general denido en (9.5) con un solo politopo
X (posteriormente consideraremos el caso en que existan varios). La idea b
asica del nuevo
enfoque consiste en representar el politopo X de (9.7b) en funci
on de sus puntos extremos y
alguna de sus direcciones de acuerdo con el teorema 6.4 de la p
agina 400.
La siguiente denici
on formal ya fue introducida en la secci
on 6.3.

Denici
on 9.1 Una direcci
on d de un politopo X se dice extrema si no puede ponerse como
combinaci
on lineal no negativa de dos direcciones diferentes de X. Es decir, no existen dos
direcciones d1 y d2 de X, d1 = d2 , y unos 1 , 2 > 0, tales que d = 1 d1 + 2 d2 .

El siguiente resultado es una peque


na extensi
on de aquel teorema 6.4 que vamos a necesitar.

Teorema 9.3 Todo punto x del politopo


X = {x n : A1 x = b1 , x 0}
se puede expresar como
x=


iI

i v i +

j dj ,

jJ

donde {v i : i I} es el conjunto
de puntos extremos, {dj : j J} el conjunto de direcciones
(
extremas del politopo X, iI i = 1, i 0, para todo i I, y j 0 para todo j J.
Recprocamente, todos los puntos x expresables de esa forma pertenecen a X. Adem
as X
tiene un n
umero nito de direcciones extremas.

La demostracion de este teorema es muy similar a la del teorema 6.4 por lo que remitimos
al lector a ella.

532

Captulo 9. Programas lineales con estructura especial

Corolario 9.2 Si los vectores columna de las matrices V y D son, respectivamente, los
puntos extremos y direcciones extremas del politopo X, entonces
)

X = V + D : eT = 1, 0, 0 .
(Recordemos que e es un vector en el que todos sus componentes son 1.)
Si se sustituye x por su expresi
on como combinacion de puntos y direcciones extremas, el
problema (9.7) de la p
agina 529 es equivalente al siguiente:
min. cT V + cT D
s. a A0 V + A0 D = b0
eT
= 1
0, 0.

(9.11)

A este se le denomina problema maestro. La idea del principio de descomposici


on de Dantzig
y Wolfe es aplicar el metodo simplex revisado a este problema maestro. Observese que, en
contraste con (9.5), el problema (9.11) tiene s
olo m0 + 1 condiciones y, en cambio, un n
umero
muy elevado de columnas (una por cada punto extremo del politopo X y otra por cada direcci
on
extrema), solo conocidas implcitamente. Para la explicitaci
on de estas columnas se usa lo que
se denomina una tecnica de generaci
on de columnas.
T ,
T ]T del problema maesSupongamos que disponemos de una soluci
on b
asica factible [
tro (9.11), con unos multiplicadores simplex asociados a las primeras m0 condiciones de igual i > 0, entonces se conoce el correspondiente punto
0, y
dad,
asociado a la u
ltima. Si alg
un
extremo v i de X; si se conoce
j , la direcci
on extrema correspondiente, dj . Ahora bien, el
conjunto de todos los puntos extremos y el de las direcciones extremas son desconocidos por
lo que habr
a que generarlos dando lugar a las columnas correspondientes de (9.11) seg
un
se vayan necesitando.
En una iteraci
on del metodo simplex revisado aplicado al problema maestro, en primer lugar
hay que encontrar un punto extremo, v i , con coste reducido
T0 A0 v i
< 0,
cT v i

(9.12a)

o una direcci
on extrema, dj , con coste reducido
T0 A0 dj < 0.
cT dj

(9.12b)
T

,
T ]T , sera el
Si no existe ni el uno ni la otra, la soluci
on que se tenga en ese momento, [
+ D
=V
el optimo del problema (9.7).
optimo del problema maestro y, por consiguiente, x
Consideremos en primer lugar la expresi
on (9.12a). Como de lo que se trata es de encontrar
T0 A0 )v i sea menor que
un punto extremo v i del politopo X tal que la funci
on lineal (cT

, y el mnimo de una funci


on lineal en un politopo se alcanza como sabemos en un punto
extremo (a no ser que el politopo no este acotado inferiormente) de el parece entonces logico
0 ) de la forma
considerar en este sentido un subproblema SP (
)

min.

T0 A0 x : x X .
cT

9.2 El principio de descomposicion de Dantzig-Wolfe

533

Este
no es otro que el problema que introducamos en (9.8). Veamos los posibles resultados
0 ):
que podemos obtener al resolver SP (

1. Si no es factible, el politopo X es el vaco y, en consecuencia, el problema (9.7) tampoco es


factible. En este caso no se podra disponer de una soluci
on b
asica factible del problema
maestro.

0 ) puede ser no acotado. En este caso la aplicaci


2. SP (
on del metodo simplex revisado
generar
a una direcci
on de descenso, q , desde alg
un punto extremo v de X, en la que
0T A0 ) q < 0.
todos los puntos de la forma v + q estaran en X, para todo 0 y (cT
De hecho, q tendr
a la forma


q =

y
eqm1

donde y = B11 a1q ,

si la matriz B1 en ese momento esta formada por las primeras m1 columnas de A1 y a1q
es la columna q-esima de A1 que entra en la base. No es muy difcil ver que q es una
direccion extrema del politopo X, por lo que haciendo dj = q , se llega a la expresion
(9.12b). Por supuesto que la direcci
on q no tiene por que ser una direccion del politopo
de soluciones factibles del problema (9.5) de la p
agina 527, pues se han ignorado las
condiciones A0 x = b0 .

. En este caso, de acuerdo


0 ) puede tener una soluci
on optima nita x
3. Por u
ltimo, SP (
T
T0 A0 )d 0 en todas las
con el teorema fundamental de la programaci
on lineal, (c
uno de los puntos extremos de X (el metodo
direcciones d pudiendo ser entonces x
simplex revisado asegura el encontrarlo). De ser esto as, (9.12b) no se cumplira para
todo j; ninguna columna que surgiese de una direcci
on extrema podra ser candidata a
T0 A0 )
entrar en la base. Si (cT
x , como se minimiza sobre todo el politopo X, y por
consiguiente sobre todos sus puntos extremos, la expresi
on (9.12a) no se cumplira para
todo i, por lo que ninguna columna que surgiese de un punto extremo sera candidata a
T ,
T ]T es el optimo del problema maestro (9.11)
entrar en la base, concluyendose que [

el optimo del problema (9.5). Si por otro lado (cT


T0 A0 )
y x = V + D
x < ,
se llega a la expresion (9.12a).
haciendo v i = x

De acuerdo con esto, en cualquier caso, o se comprueba que se ha alcanzado el optimo o


se genera una columna del problema maestro (9.11) que introducir en la base, en cuyo caso se
contin
ua con otra iteraci
on del metodo simplex.

534

Captulo 9. Programas lineales con estructura especial

0 ) no est
Teorema 9.4 (a) Si el subproblema SP (
a acotado, al aplicarle el metodo simplex
revisado se obtiene una direcci
on extrema dj que satisface
T0 A0 dj < 0,
cT dj
de tal forma que la columna

A0 dj
,
0

con coste reducido cT dj , es buena para entrar en la base del problema maestro
min. cT V + cT D
s. a A0 V + A0 D = b0
eT
= 1
0, 0.

(9.13)

0 ) tiene una soluci


(b) Si el subproblema SP (
on
optima en el punto extremo v i con el
valor de su funci
on objetivo menor que
, la columna


A0 v i
,
1

con coste reducido cT v i , es adecuada para entrar en la base del problema maestro (9.13).
0 ) alcanza un valor
(c) Finalmente, si el subproblema SP (
optimo al menos igual a
,
1 , la soluci
con soluci
on
optima de su programa dual igual a
on b
asica factible del problema
T ,
T ]T , es
maestro en ese momento, [
optima siendo el
optimo de su programa dual igual
T
T

+ D
0 ,
es la soluci
a [
] ; adem
as x = V
on
optima del problema
min. cT x
s. a A0 x = b0
A1 x = b1
x 0,

(9.14)

T0 ,
1T ]T .
siendo el
optimo de su dual [
n. S
Demostracio
olo hay que probar la u
ltima parte. Es claro que como las condiciones (9.12a)
0T ,
y (9.12b) en este caso no se cumplen para todo i I y j J, el vector [
]T es factible
T ,
T ]T y [
T0 ,
en el dual del problema (9.13), por lo que [
]T son soluciones optimas de su
+ cT D
=
T0 b0 +
primal y dual, respectivamente, y por tanto cT V
. Por otro lado, x es

un punto factible del problema (9.14) pues satisface A0 x = b0 y, por el teorema 9.3, est
a en el
T

politopo X; el valor de la funci


on objetivo de (9.14) en este punto es c x = c V + cT D,
1 es optimo del dual de SP (
0 ), es factible
valor optimo del problema maestro (9.13). Como
de ese dual y, por tanto, cumple que
0T A0 ,
T1 A1 cT

(9.15)

9.2 El principio de descomposicion de Dantzig-Wolfe

535

siendo el valor de la funci


on objetivo de ese dual


T0 b0 +
1T b1
T0 b0
=

+ cT D

T0 b0
cT V

0T b0 .
= c T x
0T ,
T1 ]T es un punto factible del problema dual del (9.14), teniendo
De aqu que, seg
un (9.15), [
como valor correspondiente de la funci
on objetivo al menos el que corresponde a x en el primal.
T0 ,
1T ]T de
El lema de la dualidad debil implica en este caso que x es el optimo de (9.14) y [
su dual, seg
un se requera en el enunciado.
Este teorema revela que se puede resolver el problema (9.14) resolviendo el problema maestro (9.13). La convergencia del procedimiento la asegura el hecho de emplear el metodo simplex
revisado para resolver un problema nito, a pesar de que los coecientes de sus condiciones
no se conozcan anticipadamente. El procedimiento expuesto terminara bien en una soluci
on
optima del problema maestro, y por consiguiente del original, o bien indicando la existencia de
no acotacion en dicho problema maestro. En este u
ltimo caso es facil deducir que el problema
original tampoco estara acotado. La demostraci
on del teorema tambien prueba que, cuando el
0 ) es precisamente
procedimiento termina en una soluci
on optima, el optimo de SP (
y, por
i positivos, son soluciones
complementariedad de holguras, todos los puntos extremos v i , con
0 ). De esta forma se superan las dos dicultades apuntadas con
optimas alternativas de SP (
posterioridad a la exposici
on del teorema 9.2.
Al aplicar el metodo simplex revisado al problema maestro se genera autom
aticamente una
0 que converge a un vector de precios de equilibrio, 0 . El problema
sucesion de vectores
maestro considera explcitamente la forma de combinar las soluciones optimas de SP ( 0 ) a n
de obtener una soluci
on optima del problema (9.14) la cual, probablemente, no ser
a un punto
extremo del politopo X.

9.2.1

Implementaci
on pr
actica

Antes de pasar a enunciar formalmente el algoritmo de descomposici


on de Dantzig-Wolfe,
hagamos algunas consideraciones pr
acticas sobre el procedimiento expuesto hasta este punto.
Supongamos primero que algunas variables aparecen en las condiciones que denomin
abamos
generales, A0 x = b0 , pero no as en las especiales, A1 x = b1 esta puede ser la situacion, por
ejemplo, de una empresa en la que ciertas variables transcienden de las divisiones. Lo m
as
natural en este caso es no considerar esas variables en X e introducirlas directamente en el
problema maestro. Para aplicar el metodo simplex revisado a este problema maestro un poco
especial, habra que comprobar en cada iteraci
on si alguna de esas variables es buena candidata
para entrar en la base y, de ser as, realizar la pivotaci
on correspondiente. S
olo si ninguna de
0 ) y se procedera como decamos antes.
ellas lo es se generara el subproblema SP (
Otro asunto importante a tener en cuenta lo constituye la obtenci
on, como siempre, de una
soluci
on b
asica factible inicial con la que iniciar la resoluci
on del problema maestro. Para ello,
en primer lugar se ha de encontrar por cualquier metodo un punto extremo v 1 del politopo X
si se descubre que X es el vaco, el problema original a resolver no es factible y habra que
parar el procedimiento. Una vez encontrado ese punto extremo, se introducen m0 variables
articiales en el problema maestro de tal manera que = 1, junto con esas variables articiales,

536

Captulo 9. Programas lineales con estructura especial

constituyan una soluci


on b
asica factible de dicho problema maestro. Luego se aplica la fase
I del metodo simplex revisado a n de minimizar la suma de las variables articiales, usando
una vez mas la idea o el principio de descomposici
on del problema. Si al nal de esa fase I
todas las variables articiales son cero, se llega como sabemos a una solucion b
asica factible
del problema maestro, pudiendose empezar inmediatamente la fase II . Esta singular fase I la
podemos equiparar a aplicar el procedimiento de descomposici
on a una versi
on de la fase I que
surgiese del problema original y donde las variables articiales de las condiciones A0 x = b0
solamente se trasladasen al problema maestro como en el parrafo anterior.
Consideremos ahora el problema m
as general
min. cT0 x0 + cT1 x1 + + cTN xN
s. a A00 x0 + A01 x1 + + A0N xN
A11 x1
..
.
AN N xN
x0 , x1 , . . . , xN

= b0
= b1
.
= ..
= bN
0.

(9.16)

De las consideraciones hechas antes sabemos como tratar las variables del vector x0 ; ahora
bien, podemos aplicar las ideas de la descomposici
on y separar los vectores x1 , x2 , . . . , xN sin
tener que considerarlos conjuntamente? La respuesta es s: aplicando la misma idea que hasta
ahora a cada politopo Xj . El problema maestro en este caso es:
min. cT0 x0 + c1T V1 1 + cT1 D1 1 + + cTN VN N

TD
+ cN
N N

s. a A00 x0 + A01 V1 1 + A01 D1 1 + + A0N VN N + A0N DN N = b


eT 1
=1
..
.

(9.17)

eT N
=1
x0 , 1 , 1 , . . . , N , N 0,
donde las columnas de las matrices Vj y Dj son los puntos extremos y direcciones extremas,
respectivamente, del politopo Xj y los componentes de los vectores j y j son los coecientes
de ponderaci
on de cada politopo. Observese que en el problema (9.17) hay m0 + N las, en
vez de m0 + 1 como era el caso que habamos considerado hasta ahora de un solo X: en
cualquier caso, muchas menos que en (9.16). En una iteraci
on cualquiera del procedimiento de
0 , 1 , . . . , N . Si, como dijimos antes,
descomposicion se tendr
an los multiplicadores simplex
cualquiera de las variables del vector x0 es adecuada para entrar en la base, se hara la pivo 0 ), j =
tacion correspondiente. Si no es as, se resuelven cada uno de los subproblemas SPj (
1, . . . , N . Si alguno de estos subproblemas es no acotado, la direcci
on extrema correspondiente
que genera proporciona una columna


A0j dji
0

0 ) es menor que
para el problema (9.17). Si no es as y la soluci
on optima de alg
un SPj (
j ,

9.2 El principio de descomposicion de Dantzig-Wolfe

537

el punto extremo optimo correspondiente, v ji , proporciona otra posible columna

A0j v ji

..

..

.
0

para el problema maestro. Finalmente, si todos los optimos de los subproblemas son iguales
a los correspondientes
j , se ha llegado al optimo global del problema maestro y el punto
j + Dj
0 , xj = Vj
j , j = 1, 2, . . . , N , es la solucion optima del problema (9.16).
x0 = x
El algoritmo de la tabla 9.7 plasma todo el procedimiento a seguir para aplicar el principio
de descomposicion al programa
min. cT1 x1 + + cTN xN
s. a A01 x1 + + A0N xN = b0
A11 x1
= b1
..
.
AN N xN = bN
x1 , . . . , xN 0.
El problema maestro del que parte tiene la forma siguiente
min. cT1 V1 1 + cT1 D1 1 + + cTN VN N

+ cTN DN N

s. a A01 V1 1 + A01 D1 1 + + A0N VN N + A0N DN N


eT 1
..
.
eT N
1 , 1 , . . . , N , N

= b
= 1
.
..
= 1
0.

Analicemos a continuaci
on la mecanica del procedimiento con un ejemplo.
Ejemplo 9.5 Resolver el problema:
min. 2x1 x2 3x3 x4
s. a

x1 + x2 + x3 +
x2 + 2x3 +
x1 + x2
x2
x3 +
x3 +
x1 , x2 , x3 ,

x4 6
x4 4
6
2
x4 3
x4 5
x4 0.

538

Captulo 9. Programas lineales con estructura especial

Tabla 9.7
Algoritmo de descomposicion de Dantzig-Wolfe
Paso 0 Inicializaci
on. Encontrar una soluci
on basica factible del problema maestro del programa a resolver.
Paso 1 Calcular la solucion basica. Es decir,
! "
b
.
B 1
1
T
T0 ,
Formar el vector [
1 , . . . ,
N ]T = cTB B 1 , donde cB
es el coste de las variables
T
T
asica ji y cj dji para la variable b
asica ji .
basicas; es decir, cj v ji para la variable b
Paso 2 Resolver los subproblemas
$
#
T0 A0i xi
min. cTi

s. a Aii xi = bi
xi 0,
para i = 1, . . . , N . Calcular para cada solucion xi
$
#
T0 A0i xi .
ri = ciT
Denir

0 ) acotado y ri
i < 0} y
1 = {j : SPj (

0 ) no acotado y ri < 0}.


2 = {j : SPj (

Si 1 2 = : parar; el problema esta resuelto. Si no, seguir.


Paso 3 Determinar la columna q a entrar en la base seleccionandola de 1 o 2 de acuerdo
con alg
un criterio.
asica a salir de la base calculando
Paso 4 Pivotaci
on. Resolver By = aq y calcular la variable b
min1imo +N {xBi /yi : yi > 0}. Actualizar la base e ir al paso 1.

9.2 El principio de descomposicion de Dantzig-Wolfe

539

La estructura de la matriz de coecientes de las condiciones de este problema es diagonal en


bloques. Las dos primeras condiciones son las de enlace. Las submatrices diagonales son


A11

1 1
=
0 1

y A22

1 1
=
.
1 1

Los politopos X1 y X2 del problema son los de la gura 9.19.


 
1
4

x2

x4
 

 
0
3

 

0
2

4
2

X2

 

X1

6
0

 
5
0

x1

x2

Figura 9.19
Politopos X1 y X2 que dene el problema 9.5
El problema maestro, al no tener ninguno de estos dos politopos direcciones extremas, es
min. c1T V1 1 + c2T V2 2
s. a A01 V1 1 + A02 V2 2
eT 1
eT 2
1 , 2

=
=

b
1
1
0,

donde cT1 = [2, 1] y cT2 = [3, 1].


T = [x , x ] = [0, 0] perteneInicialmente los puntos extremos v T11 = [x1 , x2 ] = [0, 0] y v 21
3
4
cen a los politopos X1 y X2 y satisfacen las condiciones del problema maestro. Si, adem
as,
introducimos las variables de holgura h1 y h2 en la primera y segunda restricci
on del problema
maestro, obtenemos inmediatamente la primera solucion b
asica factible:

h1
6
h2 4


11 = 1 .
21
1

540

Captulo 9. Programas lineales con estructura especial

La matriz b
asica inicial es

1
0
B=
0
0

0
1
0
0

0
0
1
0

0
,

0
1

su inversa

B 1

1
0
=
0
0

0
1
0
0

0
0
1
0

0
0
.
0
1

Iteraci
on 1. Paso 1
Los componentes del vector cB son


cB1 = 0, cB2 = 0, cB3 =

c1T v 11

0
0
= [2, 1]
= 0 y cB4 = cT2 v 21 = [3, 1]
= 0.
0
0

El vector de multiplicadores simplex del problema maestro es

01
0

02 = B T cB = 0 .
0

1

2
0

Iteraci
on 1. Paso 2
Resolvamos los dos subproblemas:
SUBPROBLEMA 1

SUBPROBLEMA 2

min. 2x1 x2
s. a
x1 + x2 6
x2 2.

min. 3x3 x4
s. a x3 + x4 3
x3 + x4 5.

on objetivo igual a 12, y


Las soluciones son x1 = [x1 , x2 ]T = [6, 0]T , con un valor de la funci
x2 = [x3 , x4 ]T = [5, 0]T , con un valor de la funci
on objetivo igual a 15.
Los costes reducidos de los puntos extremos obtenidos son


6
0 = 12 0 = 12 y
=

1 =
0
 


5

T
T

T
0 A02 x2
r2 = c2
2 = [3, 1]
0 = 15 0 = 15.
0

r1

c1T

T0 A01

x1

[2, 1]T

No hemos llegado al optimo pues estos costes(reducidos son negativos. Un lmite inferior de la
T0 Aii )xi = 0 12 15 = 27.
funci
on objetivo del problema es cTB B 1 b + 2i=1 (cTi
Iteraci
on 1. Paso 3
Se pueden incorporar a la base tanto la variable 12 como la 22 , correspondientes a los nuevos
puntos extremos v 12 y v 22 . Elegimos aquella con ri mas negativo: 22 . La nueva columna a

9.2 El principio de descomposicion de Dantzig-Wolfe

incorporar a la base es

aq =

1 1
2 1

A02 v 22
0 =
1



0
1

5
0

5
10

= 0 .
1

Iteraci
on 1. Paso 4
Resolvamos By = aq :

10

.
y = B 1 aq =

0
1
Determinemos la variable a salir de la base: calculemos


xB1 xB2 xB4


,
,
min
y1 y2 y4

= min

6 4 1
, ,
5 10 1

4
.
10

Es decir, saldr
a de la base xB2 = h2 .
La nueva base es

1
0

B=
0
0

5
10
0
1

0
0
1
0

0
0
1

su inversa B 1

1 1/2 0 0
0 1/10 0 0

.
=
0
0
1 0
0 1/10 0 1

Iteraci
on 2. Paso 1
La nueva soluci
on es

h1
4

22
2/5
1

11 = B b = 1 .
21
3/5

La mejor soluci
on factible de momento del problema original es

x = 11 v 11 + 21 v 21 + 22 v 22

0
0
,
=
2
0

con un valor de la funci


on objetivo igual a 6.
Los nuevos componentes del vector cB son:


cB1 = 0, cB2 =

cT2 v 22

5
= [3, 1]
= 15, cB3 = c1T v 11 = 0 y cB4 = cT2 v 21 = 0.
0

541

542

Captulo 9. Programas lineales con estructura especial

El nuevo vector de multiplicadores simplex del problema maestro,

01
1
0 0
0
0
0

1/2
1/10
0
1/10
3/2
15

=
.
02 = B T cB =
0

1
0 1
0 0 0

2
0
0 0
1
0
0

Iteraci
on 2. Paso 2
Planteemos los nuevos subproblemas:


= [2, 1] [0, 3/2]


0



1
0T A02 = [3, 1] [0, 3/2]
cT2
2
cT1

0T A01

1
= [2, 1/2];
1

1
= [0, 1/2].
1

Resolvamoslos:
SUBPROBLEMA 1
min. 2x1 +
s. a
x1 +

1
2 x2
x2
x2

SUBPROBLEMA 2
min.
s. a x3 +
x3 +

6
2.

1
2 x4
x4
x4

3
5.

on objetivo igual a 12, y


Las soluciones son x1 = [x1 , x2 ]T = [6, 0]T , con un valor de la funci

T
T
x2 = [x3 , x4 ] = [5, 0] , con un valor de la funci
on objetivo igual a 0.
Los costes reducidos de estos nuevos puntos extremos son


6
0 = 12 0 = 12 y
=

1 = [2, 1/2]
0
 


5

T
T

r2 = c2 0 A02 x2
2 = [0, 1/2]
0 = 0 0 = 0.
0

r1

c1T

T0 A01

x1

No hemos llegado al optimo pues uno de estos costes


es negativo. Un lmite inferior
(2 reducidos
T
1
T
T
0 Aii )xi = 6 12 0 = 18.
de la funci
on objetivo del problema es cB B b + i=1 (ci
Iteraci
on 2. Paso 3
La u
nica posible variable a incorporar a la base es 13 , correspondiente a v 13 . La nueva columna
a incorporar a la base es

aq =

1 1
0 1

A01 v 13
1 =
0



1
0

6
0

6
0

= 1 .
0

9.2 El principio de descomposicion de Dantzig-Wolfe

Iteraci
on 2. Paso 4
Resolvamos By = aq :

1 1/2 0 0
6
6

0 1/10 0 0 0 = 0 .
y = B 1 aq =
0
0
1 0 1 1
0 1/10 0 1
0
0
Determinemos la variable a salir de la base: calculemos


xB1 xB3
,
min
y1 y3

= min

2
= .
3

4 1
,
6 1

Saldr
a de la base xB1 = h1 .
La nueva base es

6
0
B=
1
0

5
10
0
1

0
0
1
0

0
0

0
1

y su inversa

B 1

1/6
0
=
1/6
0

1/12
1/10
1/12
1/10

0
0
1
0

0
.
0
1

Iteraci
on 3. Paso 1
La nueva soluci
on es

13
1/6
22

0
11 = B b = 1/6
21
0

1/12
1/10
1/12
1/10

0
0
1
0

0
6
2/3

0 4 2/5
=
.

0
1
1/3
1
1
3/5

La mejor soluci
on factible de momento del problema original es

x = 11 v 11 + 13 v 13 + 21 v 21 + 22 v 22

4
0

=
2 ,
0

con un valor de la funci


on objetivo igual a 14.
Los nuevos componentes del vector cB son:
cB1 = cT1 v 13 = 12, cB2 = cT2 v 22 = 15, cB3 = cT1 v 11 = 0 y cB4 = cT2 v 21 = 0.
El nuevo vector de multiplicadores simplex del problema maestro,

01
1/6
0 1/6
0
12
2

1/12 1/10 1/12 1/10 15 1/2

0
T
2 = B cB =

=
.

1
0
0
1
0
0
0

2
0
0
0
1
0
0

543

544

Captulo 9. Programas lineales con estructura especial

Iteraci
on 3. Paso 2
Planteemos los nuevos subproblemas:


= [2, 1] [2, 1/2]


0



1
0T A02 = [3, 1] [2, 1/2]
cT2
2
cT1

0T A01

1
= [0, 3/2];
1

1
= [0, 3/2].
1

Resolvamoslos:
SUBPROBLEMA 1
3
2 x2
x2
x2

min.
s. a x1 +

SUBPROBLEMA 2
min.
s. a x3 +
x3 +

6
2.

3
2 x4
x4
x4

3
5.

on objetivo igual a 0 y
Las soluciones son x1 = [x1 , x2 ]T = [0, 0]T , con un valor de la funci

T
T
x2 = [x3 , x4 ] = [0, 0] , con un valor de la funci
on objetivo igual tambien a 0.
Los costes reducidos de estos nuevos puntos extremos son
r1 =
r2 =




T0 A01 x1
c1T
1 = 0 0 = 0 y


T0 A02 x2
c2T
2 = 0 0 = 0.

Hemos llegado al optimo del problema.


La soluci
on optima del problema original es


Por consiguiente,

x1
x2
x3
x4

= 11 v 11 + 13 v 13

1 0
2 6
4
=
+
=
0
3 0
3 0

= 21 v 21 + 22 v 22

3 0
2 5
2
=
+
=
.
0
0
0
5
5

x1
4
x2 0

= .
x =
x3 2
x4
0
El valor optimo de la funci
on objetivo es 14.
La evoluci
on del valor de la funci
on objetivo del problema y del lmite inferior calculado es
la de la gura 9.20.
El procedimiento de la descomposici
on fue muy usado durante los a
nos 60 y 70 debido
fundamentalmente al tama
no de los problemas a resolver y a las limitaciones de los ordenadores
de aquellos a
nos en cuanto a memoria disponible y velocidad de c
alculo. En la actualidad se

9.2 El principio de descomposicion de Dantzig-Wolfe

545

Iteracion

Evoluci
on funci
on objetivo

18

Evoluci
on lmite inferior

14

27
Figura 9.20
Evoluci
on del valor de la funci
on objetivo del problema del ejemplo 9.5 y del de su lmite
inferior calculado
utiliza para resolver problemas de estructura similar a las expuestas, debido a la gran ventaja
que representa poder disponer, en cada momento del proceso, de un lmite inferior para el valor
de la funci
on objetivo global. Si en la resoluci
on de un determinado problema no es necesario
obtener una soluci
on con precisi
on absoluta, una vez alcanzado un error relativo aceptable, se
puede interrumpir el proceso disminuyendo de esta manera el tiempo de c
alculo a emplear.
Esta u
ltima estrategia permite resolver en la actualidad problemas din
amicos de gran tama
no.

9.2.2

Problemas con estructura en escalera

Con este nombre se conocen aquellos problemas cuya matriz de coecientes de las condiciones
presenta una estructura como la de la gura 9.21. Surgen habitualmente en problemas de
programaci
on de actividades multiperodo. Aunque se pueden resolver por el metodo simplex
normal, su estructura, y el hecho de que en general requieren muchas m
as iteraciones que para
resolver problemas generales de dimensiones parecidas, aconsejan el uso de procedimientos

Figura 9.21
Estructura en escalera de una matriz de condiciones

546

Captulo 9. Programas lineales con estructura especial

iterativos basados en el principio de descomposici


on que acabamos de exponer.

9.3

El problema del corte de materiales

Muchos de los productos primarios que emplean diversas industrias para fabricar sus productos
papel, textiles, pl
asticos, aluminio, etc se obtienen del suministrador en la forma de rollos,
bobinas o grandes planchas. Las dimensiones de estas formas varan de un suministrador a
otro.
Si un fabricante de bobinas, por ejemplo, suministra estas con una anchura determinada y
el comprador necesita cortarlas para adaptarlas a sus necesidades (imaginemos por ejemplo el
impresor de revistas o peri
odicos de distintos formatos), el problema que se le plantea es c
omo
hacer esos cortes de tal forma que se desperdicie la menor cantidad posible de material.
Supongamos que las bobinas tienen una anchura X y que las necesidades del fabricante
estriban en bi bobinas, de anchuras respectivas xi , i = 1, . . . , m. Las mas estrechas habran de
obtenerse a partir de las de anchura X cortandolas seg
un un determinado patr
on: por ejemplo,
una bobina de 2 metros se puede cortar en 3 de 60 centmetros de ancho y una de 20 cm,
etc. Conceptualmente, todos los patrones posibles se pueden considerar en una matriz A en
la que cada coeciente aij representa cuantas bobinas de anchura xi produce el patr
on j:
i = 1, . . . , m; j = 1, . . . , n. El patr
on del caso antes considerado generara el vector columna
[3, 1, 0, . . . , 0]T . Si hacemos que el coste de produccion de cada uno de los patrones sea uno:
cj = 1, j = 1, . . . , n, el problema que se plantea para determinar cu
antas bobinas grandes son
necesarias para conseguir la demanda bi es como sigue:
min. cT x
s. a

Ax = b
x 0.

(9.18)

Es decir, un programa de programaci


on lineal exactamente igual a los que venimos planteando
hasta ahora. Aunque las variables del vector x deberan estar restringidas a tomar valores s
olo
enteros, habitualmente se considera buena la aproximaci
on que se obtiene de resolver (9.18);
al menos cuando las demandas bi son sucientemente grandes.
Resolver el problema (9.18) es de por s una tarea muy considerable. A
un en el caso de
que el n
umero de anchuras distintas, m, fuese peque
no, el n
umero de patrones, n, que se
pueden obtener es gigantesco; solo el hecho de generar la matriz A puede ser algo prohibitivo.
Por ejemplo, si las bobinas base tienen 200 pulgadas de anchura y se demandan 40 anchuras
diferentes, desde 20 a 80 pulgadas, los patrones que se pueden dar exceden los 100 millones.
En 1963 Gilmore y Gomory idearon una forma de abordar este problema ecazmente,
utilizando el metodo simplex revisado, mediante la generaci
on de las columnas de la matriz A
seg
un se hacan necesarias en lugar de todas a la vez por anticipado (algo parecido a lo que se
hace en el procedimiento de descomposicion antes visto).
La obtenci
on de una soluci
on inicial b
asica factible no es difcil. En efecto, si el patr
on i lo
forman X/xi  bobinas de anchura xi y ninguna de otra anchura,6 repitiendo este patr
on para
cada una de las xi anchuras, las m primeras columnas de la matriz A pueden determinar la
base diagonal de partida del problema. Supongamos, por consiguiente, que en cualquier
6

El smbolo x, recordemos, designa el mayor n


umero entero menor o igual que x

9.3 El problema del corte de materiales

547

iteracion del proceso de resoluci


on del problema por el metodo simplex revisado se dispone de
una soluci
on b
asica factible.
El c
alculo de los multiplicadores simplex, , tampoco plantea mayor problema: habra que
resolver el sistema B T = e, donde e es el vector de dimension adecuada en el que todos sus
componentes son igual a la unidad (recordemos que todos los cj son 1).
El paso en el que se han de calcular los costes reducidos, cj = 1 T aj , para todo j,
al objeto de determinar si se ha llegado al optimo del problema o, de no ser as, determinar
que variable ha de entrar en la base, parece m
as complicado dado que no se conocen todas
las columnas de la matriz A. Esta aparente dicultad, sin embargo, debido a la particular
estructura del problema, se puede resolver implcitamente.
m
Un vector a = [1 , 2 , . . . , m ]T Z +
(todos sus componentes son enteros no negativos)
sera un vector columna de la matriz A del problema si se corresponde con un patr
on factible:
si xT a X, donde x = [x1 , x2 , . . . , xm ]T . Lo que se pretende en un paso del procedimiento es
saber si el coste reducido de cada vector columna no b
asico a, es decir 1 T a, es no negativo
y, de no ser as, encontrar el a factible de coste reducido m
as negativo. En denitiva, resolver
el siguiente subproblema:
max. T a
a
(9.19)
s. a xT a X
m
a Z+
.
Este u
ltimo problema se conoce como el problema de la mochila (si i es el valor de un artculo
y ai su peso, se trata de transportar las cosas de mas valor con un peso total m
aximo no
superior a X). Si el optimo del problema (9.19) es menor o igual que uno, quiere decir que
todos los costes reducidos son no negativos y la soluci
on b
asica factible que en ese momento
se tenga es la optima; si no, el valor optimo proporcionar
a un nuevo vector columna, aq = a a
introducir en la base, procediendose a continuaci
on como de costumbre. De esta forma vemos
como un problema de las caractersticas del de corte de materiales puede ser resuelto por el
metodo simplex revisado sin necesidad de conocer de antemano todas las columnas de la matriz
A, pues se generan cuando haga falta.
Para resolver el problema (9.19) lo m
as rapido y ecaz es usar procedimientos de ramicaci
on y acotamiento de programaci
on entera. No obstante, cuando como es lo m
as habitual
X y las variables xi son n
umeros enteros, tambien se puede utilizar un procedimiento de programaci
on din
amica como el que se detalla a continuaci
on.
Sea f (v) el valor optimo del problema (9.19) cuando se sustituye X por v. Para 0 v <
xmin , f (v) = 0, donde xmin = min xi . La expresi
on de f (X) se obtiene usando la siguiente
f
ormula recursiva:
f (v) = max {f (v xi ) + i },
1im
xi v

para v = xmin , . . . , X. La soluci


on optima que lleve a f (X) se puede obtener procediendo
hacia atr
as y llevando constancia en cada paso del ndice i que maximiza la expresi
on entre
llaves.
Ideas semejantes a las aqu expuestas para el caso unidimensional de las bobinas se pueden
utilizar para determinar el mejor patr
on de corte de planchas rectangulares o cuadradas. El
problema, aunque parecido, sera de un tama
no considerablemente superior.

548

Captulo 9. Programas lineales con estructura especial

Ejemplo 9.6 A partir de bobinas de 91 pulgadas, se trata de resolver el problema de conseguir:


78
40
30
30

bobinas
bobinas
bobinas
bobinas

de
de
de
de

25,5
22,5
20
15

pulgadas,

pulgadas.

Utilizando la estrategia descrita anteriormente para obtener una soluci


on b
asica factible
inicial se llega a que

B=

3
4
4

y xB = B 1 b =

1/3

78
26

1/4
40 = 10 .

1/4
30
15/2
1/6
30
5

Iteraci
on 1. Paso 1
Resolviendo el sistema B T = cB , se obtiene que

1/3

= B T cB =

1
1/3
1 1/4
1/4
=

1 1/4 .
1/4
1/6
1
1/6

Iteraci
on 1. Paso 2
Determinemos si se ha llegado al optimo, o la columna que ha de entrar en la base. Resolvamos
para ello:
1
1
1
1
a1 +
a2 + a3 + a4
max.
3
4
4
6
s. a 25,5a1 + 22,5a2 + 20a3 + 15a4 91
a1 , a2 , a3 , a4 0
a1 , a2 , a3 , y a4 enteras .
La soluci
on de este problema, obtenida por un procedimiento de ramicaci
on y acotamiento
T
de programaci
on entera, es a = [2, 0, 2, 0] . Como en este punto la funci
on objetivo es mayor
que 1, no se ha alcanzado el optimo del problema; la columna a sera la pr
oxima a entrar en la
base.
Iteraci
on 1. Paso 3
Resolvamos el sistema By = a. La soluci
on es

y = B 1 a =

1/3

2
2/3
0 0
1/4

2 = 1/2 .
1/4
1/6
1
0

9.3 El problema del corte de materiales

549

Iteraci
on 1. Paso 4
Determinemos la columna que ha de salir de la base. Como siempre:


xB1 xB3
,
= min
y1
y3

= min

26 7, 5
,
2/3 1/2

= 15.

La columna que sale de la base es la tercera.


Iteraci
on 1. Paso 5
La nueva base y soluci
on son

B=

26

10

y xB =

4
2
6

2
3

16
10


= 15 .
5

Iteraci
on 2. Paso 1
Resolviendo el sistema B T = cB se llega a que

1/3

1
1/3

1/4
1

1/4
= B T cB =
1 = 1/6 .
1/3
1/2
1/6
1
1/6
Iteraci
on 2. Paso 2
Determinemos una vez mas si se ha llegado al optimo o la columna que ha de entrar en la base.
Resolvamos:
1
1
1
1
a1 +
a2 + a3 + a4
max.
3
4
6
6
s. a 25,5a1 + 22,5a2 + 20a3 + 15a4 91
a1 , a2 , a3 , a4 0
a1 , a2 , a3 y a4 , enteras .
on objetivo es mayor que 1,
La soluci
on de este problema es a = [2, 1, 0, 1]T . Como la funci
todava no se ha conseguido el optimo del problema. La columna a sera la pr
oxima a entrar
en la base.
Iteraci
on 2. Paso 3
Resolvamos el sistema By = a. La soluci
on es

y = B 1 a =

1/3

1/3
1/4

2
2/3
1 1/4

0 = 0 .
1/2
1/6
1
1/6

550

Captulo 9. Programas lineales con estructura especial

Iteraci
on 2. Paso 4
Determinemos la columna que ha de salir de la base:


= min

xB1 xB2 xB4


,
,
y1 y2 y4

= min

16 10 5
,
,
2/3 1/4 1/6

= 24.

La columna que sale de la base es la primera.


Iteraci
on 2. Paso 5
La nueva base y soluci
on son

2 2
1 4

B=

2
1
6

24
10 1 4
4 =

y xB =
15 .
15
1
5 16

Iteraci
on 3. Paso 1
Resolviendo el sistema B T = cB se obtiene que

1/2 1/8
1/12
1
7/24

1 1/4
1/4
T

=
.
= B cB =
1/2 1/8 1/2 1/12 1 5/24
1/6
1
1/6
Iteraci
on 3. Paso 2
Determinemos una vez mas si se ha llegado al optimo o la columna que ha de entrar en la base;
resolvamos:
7
1
5
1
max.
a1 +
a2 +
a3 + a4
24
4
24
6
s. a 25,5a1 + 22,5a2 + 20a3 + 15a4 91
a1 , a2 , a3 , a4 0
a1 , a2 , a3 y a4 , enteras .
La soluci
on de este problema es como mucho la unidad: no se puede encontrar una soluci
on en
variables enteras cuya funci
on objetivo sea mayor. Hemos llegado al optimo del problema. La
soluci
on nal se describe en la tabla 9.8.

Referencias
Existen diversas y muy buenas referencias sobre los asuntos tratados en este captulo. Para la
elaboraci
on de lo relativo a problemas de ujos en redes y sus aspectos pr
acticos de implementacion en ordenador, se puede seguir esencialmente a Kennington y Helgason [1980], Goldfarb
y Todd [1989], Ahuja, Magnati y Orlin [1989], Chv
atal [1983] y Bazaraa y Jarvis [1977]. Para
lo referente a las estructuras de datos a utilizar as como como actualizarlas, hemos seguido a

Ejercicios

551

Tabla 9.8
Resultado del problema del ejemplo 9.6
Pulgadas
25,5
22,5
20
15
Total pulgadas
Desecho, pulgadas
Bobinas de 91 pulg.

Patr
on de Corte

2
2
1
4
2
1
6
88,5 90 91 90
2,5
1
1
24
4 15 1

Total Bobinas
78
40
30
30

44

Chv
atal [1983], Bradley, Brown y Graves [1977] y Grigoriadis [1986]. Otras referencias relativas
a programaci
on lineal para ujos en redes son: Gondran y Minoux [1979], Minoux y Bartnik
[1986], Lawler [1976]. Como artculos paradigm
aticos en este sentido estan: Bradley, Brown y
Graves [1977] y Grigoriadis [1980].
Por lo que respecta al principio de descomposici
on de Dantzig-Wolfe, lo expuesto est
a basado
en Goldfarb y Todd [1989], Bazaraa y Jarvis [1977] y Luenberger [1984].
El problema del corte de materiales sigue a Salkin [1977].

Ejercicios
9.1. Transformar las bases que siguen en triangulares inferiores y dibujar sus arboles maximales.
0
0 0
1
0
0
0 Nudo 1
0 0 1
0
0 1
2
0

0
0 1
0
3
1 1 0

0
1 0
0
0
0
0
4
a) B =

0
0 0
0 1
0
0
5

1
0 0
0
1
0
1
6
0
0 1
0
0
1
0
7

1 1
0
0 Nudo 1
1
1
0 1
0 0
1 1
2

0 1 0
0
0
3
0
b) B =
0
0 1
0
0
4

0
0
0
0 0 1
0
5
0
0 0
1
1
6
0

1 1
0
0 Nudo 1
0
1
0
0
1
0
1
0
0
2
0
0
0
0
0

0 1
0
0
0
3
0
0
0
1
0 1

0
0
0
1
0
4
0
1

0
0
0
1
5
0
0
0 1
c) B =
0

0
0
0
1
0
6
0
0
0

0
0
0
0
0 1
7
0
0
0
0
0
0
0
0
0
8
0
1
1
0

552

Captulo 9. Programas lineales con estructura especial

9.2. Un seguidor de un equipo de f


utbol americano que vive en San Francisco desea ver la super bowl
que se celebra este a
no en Dallas, Texas. Nuestro amigo quiere viajar el mismo da del partido
llegando no mas tarde de las 7:00 de la tarde a Dallas. Desgraciadamente, como ocurre en estos
casos, no dispone de todo el dinero que quisiera para viajar, por lo que tiene que volar con una
compa
na, la Gamma Airlines, cuya disponibilidad de vuelos San Francisco-Dallas no es muy
amplia que digamos. Los vuelos disponibles son los de la siguiente tabla.

Vuelo N
1

Origen
San Francisco
Chicago
Atlanta

Destino
Chicago
Atlanta
Dallas

Hora
Salida
8:00 AM
2:00 PM
3:40 PM

Hora
Llegada
1:00 PM
3:00 PM
6:00 PM

Coste
$
100
100
250

San Francisco
Atlanta
Chicago

Atlanta
Chicago
Dallas

11:00 AM
4:00 PM
5:00 PM

4:00 PM
5:00 PM
7:00 PM

250
150
100

Atlanta
Miami

Miami
Dallas

4:00 PM
5:00 PM

5:00 PM
7:00 PM

100
100

San Francisco
New York
Atlanta

New York
Atlanta
Dallas

8:00 AM
2:00 PM
4:00 PM

2:00 PM
4:00 PM
6:00 PM

240
50
210

Para transbordar de un vuelo a otro la compa


na Gamma Airlines requiere como mnimo un
tiempo de una hora.
Formular el problema que se plantea nuestro amigo, tratando de minimizar el coste de su
transporte a Dallas, y resolverlo usando el metodo simplex especializado a problemas de ujos en
redes que se ha estudiado en este captulo.
9.3. Determinar las variables duales de cada una de las bases siguientes:

a)

Arco
1
2
3
4
5
6
7

De Nudo
6
3
7
4
6
1
6

A Nudo
5
6
3
3
2
2
0

Coste cj
10
8
6
9
7
3
0

b)

Arco
1
2
3
4
5
6

De Nudo
1
1
1
1
2
6

A Nudo
0
3
4
2
5
2

Coste cj
0
20
5
15
10
0

Ejercicios

c)

Arco
1
2
3
4
5
6
7
8
9

De Nudo
1
2
1
1
5
8
8
4
4

A Nudo
3
1
4
5
7
4
9
6
0

553

Coste cj
70
30
90
50
100
40
80
60
0

9.4. Resolver el siguiente problema de ujos en red:


minimizar 2x1 + 4x2 + x3 + x4 + 9x5 x6
s. a

x1 x2
x3 + x4 + x5
x1
x2 + x3 x4
x5
1
2
2
0
1
0

x6
x1
x2
x3
x4
x5
x6

6
6
3
5
3
3
5
3
3
3.

9.5. Considerese el grafo de la gura 9.22, donde las cifras entre corchetes indican las cantidades

{0}
2

{10} 1

3 {10}

4
{0}
Figura 9.22
Digrafo del ejercicio 5
demandadas/ofertadas (+/-). Sup
ongase que se requiere que el ujo a traves del nudo cuatro sea
como mnimo de 5 unidades y como maximo de 5. Formular el problema de satisfacer la demanda a
coste mnimo a
nadiendo los arcos que se consideren necesarios y cumpliendo la condicion impuesta.
9.6. Probar que un problema de ujos en redes, en el que los lmites inferiores de los ujos por los
arcos no son cero, se puede convertir en uno en que s son cero.

554

Captulo 9. Programas lineales con estructura especial

9.7. Probar que un problema de ujos en redes, en el que los lmites superiores de los ujos por los
arcos son nitos, se puede convertir en uno en que esos lmites son innito.
9.8. Esbozar una variante del metodo simplex especializado para ujos en redes en la que se tuviese en
cuenta la posibilidad de que los arcos tuviesen ganancia; esto es, que cada vector columna, aij ,
de la matriz de coecientes de las condiciones, A, tuviese la forma aij = ei pij ej , pij > 0.
9.9. Esbozar un algoritmo para resolver un programa lineal del tipo,
minimizar cT x + cn+1 xn+1
s. a

Ax + an+1 xn+1 = b
x 0, xn+1 0,

donde A es una matriz de incidencia nudo-arco. Aplicar el metodo considerado para resolver
minimizar 2x1 + 3x2 + x3 + 3x4 + 5x5 + 4x6
s. a

x1 + x2
+ x6
+ x3 + x4
2x6
x1
+ x5 + 3x6
x2 x3
x4 x5 x6
x1 , . . . , x6

= 2
= 3
= 1
= 4
0.

9.10. Se pueden generalizar los resultados del ejercicio anterior al caso en que la matriz de coecientes
de las condiciones del problema tiene la forma [A, D], donde A es una matriz de incidencia
nudo-arco y D una matriz arbitraria?
9.11. Probar que la matriz de coecientes de las condiciones del programa lineal de ujo en redes con
variables acotadas superior e inferiormente, esto es,
x h1 h2 T D
A

0 0

I I 0

0 I

es totalmente unimodular.
9.12. Resolver el siguiente problema de programacion lineal mediante el metodo de Dantzig-Wolfe:
minimizar x1
s. a

x1
x1
x1
2x1

x2 2x3 x4

+ 2x2 + 2x3 + x4 40
+ x2 + x3 + x4 10
+ 3x2
30
+ x2
20
x3
20
x4 10
x3 + x4 15
x1 , . . . , x4 0.

9.13. Una compa


na tiene dos fabricas: una en Atlanta y la otra en Los Angeles (EE.UU.). Estas
fabricas producen neveras y lavadoras/secadoras. La capacidad de producci
on anual de la f
abrica
de Atlanta es de 5.000 neveras y 7.000 lavadoras/secadoras; la de Los Angeles, 8.000 neveras y
4.000 lavadoras/secadoras. La compa
na tiene tres compradores habituales de sus productos en

Ejercicios

555

New York, Seattle y Miami. Las demandas anuales de estos compradores son las que se indican
en la tabla siguiente.
Demanda\Comprador

New York

Seattle

Miami

Neveras

4.000

5.000

4.000

Lavadoras/Secadoras

3.000

3.000

4.000

Los productos se transportan por ferrocarril. Los costes unitarios del transporte en d
olares son
los de la tabla siguiente.
Comprador
Fabrica

New York

Seattle

Miami

Atlanta

6 (6.000)

14 (3.000)

7 (8.000)

Los Angeles

10 (3.000)

8 (9.000)

15 (3.000)

Los valores indicados entre parentesis corresponden al maximo n


umero de unidades transportables.
Se desea encontrar el patron de unidades a transportar de tal forma que se satisfaga la demanda
al mnimo coste.
a) Formular el problema.
b) Resolverlo aplicando el metodo de descomposicion de Dantzig-Wolfe.
9.14. Supongase que un programa lineal requiere 3m/2 iteraciones para resolverlo y que se emplean las
tecnicas habituales de modicacion de la base. Se puede encontrar una descomposicion optima
de las condiciones? Es decir, determinar unos m1 y m2 , tales que m1 + m2 = m, siendo m1 las
primeras condiciones del problema maestro, de tal forma que se minimice el esfuerzo para resolver
el problema.
9.15. Resolver mediante descomposicion el problema de programacion lineal que sigue:
minimizar 2x1 + 5x2 4x3
s. a

x1 + 2x2 + a1 x3
3x1 6x2 + a2 x3
2a1 + 3a2
x1 , x2 , x3 , a1 , a2
,
+
Hacer X = [a1 , a2 ]T : 2a1 + 3a2 = 4, a1 , a2 0 .

6
5
4
0.

Captulo

10

METODOS
DE PUNTOS
INTERIORES

PESAR DE QUE desde su publicaci


on por George B. Dantzig en 1947 el metodo
simplex ha demostrado sobradamente ser altamente ecaz para resolver todo tipo de
problemas de programaci
on lineal, el hecho de que en determinadas circunstancias su
complejidad sea exponencial ha motivado en los u
ltimos a
nos un elevado n
umero de
intentos, tanto te
oricos como practicos, de obtener otros procedimientos con mejor complejidad
computacional.
El primero de gran trascendencia te
orica es el debido a L. G. Khachiyan en 1979. Este autor,
recopilando una serie de trabajos e ideas de los autores rusos Shor, Yudin y Nemirovskii sobre
un metodo basado en la generaci
on de una sucesi
on de elipsoides para resolver problemas de
programaci
on no lineal, los aplic
o e hizo extensivos a programaci
on lineal dando lugar al conocido como metodo de los elipsoides. Su principal ventaja te
orica sobre el metodo simplex radica
en que resuelve problemas de programaci
on lineal en tiempo polin
omico; es decir, posee una
complejidad computacional te
orica polin
omica. Las implementaciones practicas, sin embargo,
han demostrado su desventaja respecto al metodo simplex ya que, por un lado, el n
umero de
iteraciones que requiere para llegar al optimo es muy grande y, por otro, el trabajo que implica
cada una de ellas es mucho mas costoso que el requerido por el metodo simplex, pues no se
pueden aplicar las tecnicas de matrices dispersas tan caractersticas de las implementaciones
en ordenador de este u
ltimo. En el oto
no de 1984, N. K. Karmarkar, de los laboratorios Bell
de la compa
na AT&T, propuso un nuevo algoritmo de complejidad polin
omica para resolver
problemas de programaci
on lineal. Al contrario que el metodo de los elipsoides, las implementaciones pr
acticas a que ha dado lugar en los u
ltimos a
nos lo presentan como un gran rival
del metodo simplex en cualquier tipo de problemas y especialmente en los de gran tama
no que
surgen de aplicaciones del mundo real.
El metodo propuesto por Karmarkar es bastante diferente del simplex. Considera el pro557

558

Captulo 10. Metodos de punto interior

grama lineal dentro de una estructura geometrica de tipo simplicial1 y una estrategia de movimientos para obtener los distintos puntos del proceso iterativo en el interior del politopo o
poliedro que denen las condiciones. Este politopo se transforma de tal manera que el punto
del proceso iterativo en el que este en cada momento el procedimiento sea el centro del politopo
o poliedro en el espacio transformado. Este nuevo concepto o enfoque de tratar el problema,
es decir, llegar al optimo a traves de puntos en el interior de la regi
on factible, ha motivado
numerosas nuevas ideas dentro del apartado generico de algoritmos o metodos de puntos interiores, tanto para programaci
on lineal como no lineal. En este captulo vamos a estudiar los
mas extendidos, incluido el de Karmarkar, para resolver problemas pr
acticos de programacion
lineal.

10.1

Ideas b
asicas de los m
etodos de puntos interiores para
programaci
on lineal

Los procedimientos numericos de puntos interiores para resolver problemas de programaci


on
lineal basan su estrategia en conseguir solucionar las tres cuestiones siguientes:
1. Encontrar un punto de partida factible en el interior de la regi
on factible del problema.
2. Denir una direcci
on de movimiento tal que, conservando la factibilidad del problema,
moviendose a lo largo de ella, se avance hasta un punto en el que se reduzca el valor de
la funci
on objetivo (si se esta minimizando evidentemente).
3. Cu
ando pararse. Es decir, cu
antas veces se debe realizar la operacion descrita en el punto
2 y como identicar que se ha alcanzado el optimo del problema.
Aun cuando genericamente estas tres son las grandes cuestiones que debe solventar cualquier
procedimiento de optimizaci
on, el c
omo llevarlas a efecto en el caso de los algoritmos de puntos
interiores diere sustancialmente de lo que hace el metodo simplex.
El metodo simplex, en su forma que podemos denominar ordinaria (fase II), parte desde un
punto extremo del politopo o poliedro que conforma la regi
on factible, va a otro vertice, de
este a otro y as sucesivamente hasta que se llega al que dene el optimo del problema.
Si se desea, por el contrario, denir alg
un criterio o estrategia para, desde un punto interior
de la regi
on factible, moviendose por el interior de esta regi
on, acercarse lo mas posible o
incluso alcanzar el punto optimo, que cabra plantearse?
Un primer punto a considerar sera que direccion seguir. Si se estuviese minimizando, es
evidente que por ejemplo podra utilizarse, como hemos hecho tantas veces en este libro, la
direccion de m
axima pendiente: en este caso c por ser lineal la funci
on objetivo.
Si, de momento, obviamos la cuesti
on de mantener la factibilidad del problema a lo largo
de cualquier direcci
on de movimiento, otro asunto importante a tener en cuenta es el de lo
que se puede mejorar la funci
on objetivo a lo largo de esa direcci
on, en particular a lo largo
de c, yendo de un punto a otro. Por ejemplo, si consideramos el poliedro de la gura 10.1,
en la que se describe como poder llegar a su vertice optimo (de acuerdo con una determinada
funci
on objetivo) por el exterior, de vertice a vertice como el metodo simplex, o por el interior,
es evidente que no es lo mismo partir desde a que desde b. Desde b se puede progresar mucho
1

En la p
agina 562 se explica lo que es esta estructura.

10.1 Ideas basicas de los metodos de puntos interiores para programaci


on lineal

559

menos que desde a en un solo paso pues se llega antes a una condici
on que bloquea el paso
(se llegara antes a algo que denominaremos pared ). Si en una estrategia de puntos interiores
se parte pues desde un punto centrado en la regi
on factible, o desde el que se vea centrada
la regi
on factible, el progreso hacia la soluci
on en un solo paso o salto puede ser mucho mayor
que partiendo de otro cualquiera.
Si consideramos como caso especial de programa lineal
minimizar cT x
s. a
x 0,
y que se dispone de un punto de partida interior factible desde el que iniciar un procedimiento
de b
usqueda del optimo del problema, evidentemente cualquier vector que parta desde ese
punto denir
a una direcci
on de movimiento factible. El problema que surge entonces es el
de cuanto moverse a lo largo de cualquiera de esas direcciones de tal forma que se reduzca
sucientemente la funci
on objetivo y se llegue a un nuevo punto tambien en el interior de la
regi
on factible sin alcanzarse una pared.
Una forma ideal de resolver esto sera inscribir una esfera en x 0, centr
andola en el
punto considerado, que tuviese el radio lo m
as grande posible sin violar las condiciones de no
negatividad. Si esta esfera fuese la regi
on factible y el centro el punto de partida, optimizar
la funci
on objetivo en ella se podra llevar a cabo en un solo paso tomando como direcci
on de
descenso c y calculando d
onde esa direccion corta a la esfera. Es decir, donde cT x = cte. sea
tangente a esa esfera y su valor mnimo. Este proceso se representa en la gura 10.2. El punto
a es el de partida y el nuevo punto del proceso iterativo b.
De la observacion de la gura se comprueba que a pesar de que se ha avanzado mucho en
direccion al optimo del problema (x = 0), todava queda bastante distancia para alcanzarlo.
Tambien se puede ver que se ha avanzado mas en relacion con la posici
on del optimo a lo largo

b
optimo

Figura 10.1
Itinerarios hacia el optimo por el interior y exterior del poliedro que denen las condiciones
de un problema

560

Captulo 10. Metodos de punto interior


c

Figura 10.2
M
axima esfera (circunferencia en este caso) que se puede centrar en a dentro de la regi
on
factible x 0
del eje vertical que del horizontal, por lo que si el punto de partida hubiese estado a igual
distancia de los dos ejes se habra progresado m
as. Esto sugiere la posibilidad de escalar el
sistema de coordenadas elegido de tal forma que el centro de la esfera que se dene en x 0
este a igual distancia de los dos ejes con lo que se conseguira que dicha esfera fuese tangente
a las dos paredes que denen la regi
on factible.
Si se escala el problema original de acuerdo con la idea apuntada, como el problema est
a
formulado en un espacio diferente, la soluci
on que se obtuviese en el nuevo espacio al nalizar
la iteraci
on correspondiente habra que reescalarla, o transformarla al espacio original. Esta
operaci
on se representa en la gura 10.3. En ella se describe el programa lineal en su espacio
original, las direcciones de movimiento que se obtienen en el espacio original y en el escalado
y los pasos que se dan a lo largo de esas direcciones. Como se puede observar, en el espacio
escalado la esfera se ha transformado en una elipse y el nuevo punto del proceso iterativo pasara
de ser b a b . El resultado es que mediante un simple escalado se ha avanzado sustancialmente
mas hacia el optimo del problema. El punto c sera el nuevo punto del proceso una vez realizada
una iteraci
on m
as en la que se inscribira una nueva elipse en la regi
on factible centr
andola en
b .
Esta breve introducci
on permite destacar dos aspectos o ideas fundamentales que todos los
algoritmos de puntos interiores de la regi
on factible deben considerar:
I. Se debe transformar el problema original en cada punto del proceso iterativo, sin cambiar
esencialmente el problema, de tal forma que el punto que se este considerando en ese
momento se sit
ue en el centro de la regi
on factible tal como resulte de la transformaci
on.
II. Si el punto desde el que moverse esta centrado en la regi
on factible, ese movimiento
es conveniente hacerlo en la direccion que dene la de m
axima pendiente de la funci
on
objetivo.
A continuaci
on pasamos a estudiar el primero de los metodos de punto interior: el publicado
por Karmarkar en 1984, y que ha servido de base a otros que veremos posteriormente.

10.2 El metodo del escalado proyectivo de Karmarkar

561

a
b
c

Figura 10.3
on factible x 0
M
aximas elipses que se pueden inscribir en a y en b en la regi

10.2

El m
etodo del escalado proyectivo de Karmarkar

La forma b
asica de programa lineal sobre la que Karmarkar aplica su metodo es la siguiente:
min. cT x
s. a Ax = 0
eT x = 1,

(10.1)
x 0,

donde e = [1, 1, . . . , 1]T . Tambien se supone que Ae = 0, por lo que el punto e/n es factible,
y que el optimo de (10.1) es cero. Veremos posteriormente como se puede transformar un
problema en forma est
andar en esta tan especial.
Las condiciones de optimo del problema (10.1) implican que
c = AT y + ez + ,

(10.2)

donde es el vector de multiplicadores de Lagrange de las condiciones de no negatividad de


(10.1). Las condiciones de complementariedad de holguras en el optimo, x , implican tambien
que
xT = 0.
Como cT x = 0, de (10.2) se tiene que
y T Ax + zeT x + T x = 0
lo que implica, siendo y T Ax = T x = 0, que zeT x = 0. Como las condiciones del problema
hacen que eT x = 1, quiere decir que z = 0.
El programa dual de (10.1) es
max. z
s. a

AT y + ez c.

(10.3)

562

Captulo 10. Metodos de punto interior

m se puede elegir f
Este programa dual es factible. En efecto, para cualquier y
acilmente un
T
T
T
)j ) tal que [
z (el mejor es minj (c A y
y , z] es factible. Como seg
un lo visto en el p
arrafo
tal que
anterior z = 0, de lo que se trata realmente en el programa dual es encontrar un y
c; es decir, puntos factibles.
AT y
De la expresion (10.1), el conjunto


n


x :
n

xi = 1, x 0

i=1

dene un polgono regular en el espacio eucldeo n-dimensional denominado simplex: un poliedro regular de n + 1 lados. En , = {1}; en 2 , es el segmento de recta que une los puntos
[0, 1]T y [1, 0]T ; en 3 , el area triangular entre los puntos [0, 0, 1]T , [0, 1, 0]T y [1, 0, 0]T ; etc. Es
f
acil ver que, en n , posee exactamente n vertices, C(n, 2) aristas y C(n, n 1) caras. Su
centro esta en e/n. Analizando brevemente la gura 10.4, se puede comprobar que el radio de
la hiperesfera m
as peque
na que circunscribe a esta dado por
-

R=

n1
n

(10.4)

r=.

1
.
n(n 1)

(10.5)

y el de la m
as grande inscrita en el

e/n
R

Figura 10.4
Esferas de radio mnimo y m
aximo que pueden circunscribir un simplex e inscribirse en el

10.2.1

Transformaci
on proyectiva en el simplex

La idea b
asica del trabajo que se realiza en una iteraci
on del algoritmo de Karmarkar es la
. Se lleva a
siguiente. Supongamos que se dispone de una soluci
on estrictamente factible x
cabo entonces una transformaci
on proyectiva mas adelante indicaremos como construirla

10.2 El metodo del escalado proyectivo de Karmarkar

563

en el centro del simplex, e/n. Al permanecer


que convierta al simplex en s mismo y el punto x
jos los puntos extremos de se forzara a que una transformaci
on lineal o afn2 sea la identidad;
el grado de libertad adicional de la transformaci
on proyectiva permitir
a deformar el interior de
se transforme en e/n. La ventaja de una transformaci
de tal forma que x
on de este tipo es
que el punto que dene la soluci
on en la iteraci
on, al transformarse, en el espacio transformado,
estara lejos de las condiciones de desigualdad, x 0: sera un punto en el interior de la regi
on
factible.3
Hecha la transformaci
on se ignoran las condiciones de no negatividad de las variables y
se inicia un movimiento en la direcci
on contraria a la que dene el gradiente de la funci
on
objetivo transformada, proyectada sobre las ecuaciones de igualdad transformadas. En esa
direccion se avanza un determinado factor de avance, o amplitud de paso, lleg
andose a un
nuevo punto estrictamente factible en el espacio transformado. Se aplica la transformaci
on
.
proyectiva inversa y se consigue as un nuevo punto del proceso iterativo, x
(n
esta en el interior de , es decir, x
Supongamos que x
i > 0, i = 1, . . . , n y i=1
x
i = 1.

Denamos la matriz diagonal X como aquella que tiene como elementos de su diagonal los
=x
, de tal forma que se cumpla que Xe
, es decir,
componentes del vector x

x
1
0

= diag(
X
x) = ..
.
0

0
x
2
..
.
0

..
.

0
. .
..
x
n

es regular siendo su inversa, X


1 , otra matriz diagonal con coecientes
Obviamente la matriz X
1/
xi , i = 1, . . . , n. La transformaci
on proyectiva indicada se dene de la siguiente manera:
1 x
X
= T 1 ;
Tx
(x) = x
e X x

(10.6a)

X
1
(x)
=
x
=
Tx
.

e Xx

(10.6b)

y su inversa

1 x es un escalar igual a la suma


1 x es un vector n-dimensional y eT X
Observese que X
1 x. En consecuencia, los elementos de Tx
de los elementos de X
an normalizados con
(x) est
suma igual a 1. Dicho de otra forma, Tx
mismo. Tambien es
(x) y Tx
transforma en s
se transforma en x
= e/n.
f
acilmente observable que, en efecto, x
Ejemplo 10.1 Considerese el simplex de la gura 10.5. En el, sean x = [1, 0, 0]T , y = [0, 1, 0]T ,
z = [0, 0, 1]T , a = [3/10, 1/10, 3/5]T , b = [1/3, 0, 2/3]T , c = [0, 1/7, 6/7]T y d = [3/4, 1/4, 0]T .
Como el punto a esta en el interior de la regi
on factible, se puede denir una transformaci
on
proyectiva con

3/10 0
0
= 0 1/10 0 .
X
0
0 3/5
Una transformaci
on afn sera la denida por x A(x d), A nn , d n
Mientras que el metodo simplex fuerza a que en una determinada iteraci
on parte de esas condiciones de no
negatividad esten activas, el de Karmarkar evita las complejidades combinatorias que se derivan de pasar, entre
un n
umero exponencial de posibilidades, de un conjunto de esas condiciones activas a otro.
2
3

564

Captulo 10. Metodos de punto interior

Ta

z = [0, 0, 1]T
b

...............................................................
............
.........
.........
........
.......
.
......
.
.
.
.
.
.....
....
.
.
.
.....
.
..
....
.
.
.
....
...
.
.
.
....
.
.
.
...
..
.
...
.
.
..
...

Ta (z)

Ta (b)

Ta (c)
Ta (a)

x = [1, 0, 0]T

y = [0, 1, 0]T

Ta (x)

Ta (d)

Ta (y)

Figura 10.5
Transformaci
on proyectiva del ejemplo 10.1
La inversa de esta matriz es, evidentemente,

1
X

10/3 0 0

0 10 0 .
=
0 0 5/3

Aplicando la transformaci
on proyectiva correspondiente, Ta , se tendr
a que Ta (x) = [1, 0, 0]T ,
Ta (y) = [0, 1, 0]T , Ta (z) = [0, 0, 1]T , Ta (a) = [1/3, 1/3, 1/3]T , Ta (b) = [1/2, 0, 1/2]T , Ta (c) =
[0, 1/2, 1/2]T y Ta (d) = [1/2, 1/2, 0]T . El resultado de esta transformaci
on es una distorsi
on
de la escala y los angulos en el espacio resultante tales que el punto a se convierte en el centro
del simplex.
Ejemplo 10.2 Para ilustrar un poco m
as lo que implica una transformaci
on proyectiva, supongamos que n = 3, m = 1 y A = [7, 2, 5]. La regi
on factible, que se representa en
la gura 10.6, es el segmento que une los puntos [2/9, 7/9, 0]T y [5/12, 0, 7/12]T . El punto
= [1/4, 2/3, 1/12]T .
e/n = [1/3, 1/3, 1/3]T es factible. Supongamos que estamos en el punto x
Para una mejor comprensi
on del proceso que lleva a cabo la transformaci
on lo dividiremos
1 x)/n; es

en dos partes. La primera es solo un escalado diagonal que convierte x en x = (X


se transforma solo en e/n pero el simplex queda distorsionado. En el ejemplo, x

decir, x
se transforma en [1/3, 1/3, 1/3]T y se convierte en el triangulo de vertices (4/3)e1 , (1/2)e2
y 4e3 , donde e1 , e2 y e3 son los vectores unitarios de 3 . La regi
on factible se transforma
=
en la interseccion de este nuevo tri
angulo con el subespacio n
ucleo de la matriz A = AX
T
T
[7/4, 4/3, 5/12]: el segmento de recta que une [8/27, 7/18, 0] y [5/9, 0, 7/3] . Por u
ltimo
se
se transforma el simplex distorsionado en mediante una proyecci
on radial que haga que x
T

. El punto e/n y el subespacio n


=x
/e x
ucleo de la matriz A ({
x : A
x = 0})
transforme en x
permanecen invariantes ante esta u
ltima transformaci
on aunque e/n se convierte en el centro
del nuevo simplex no distorsionado. En nuestro ejemplo, la regi
on factible se convierte en el
T
segmento de recta que une los puntos [16/37, 21/37, 0] y [5/26, 0, 21/26]T .

10.2 El metodo del escalado proyectivo de Karmarkar

565

e3

e/n
e2

e1
4e3

e3

e/n
e/n
e2

(1/2)e2

(4/3)e1

e1

Figura 10.6
se convierte
a. Region factible original; b. Despues de la primera transformaci
on proyectiva x
en e/n; c. Despues de la segunda transformaci
on
Volvamos al caso general. Usando la expresi
on de x en (10.6b), sustituyendola en (10.1), se
obtiene la siguiente expresi
on del problema a resolver en el espacio transformado:
x

cT X
T
x

e X
x
=0
s. a AX
T
= 1, x
0.
e x

min.

Como uno de los supuestos del problema era que el optimo es cero, basta en esta u
ltima

y
expresion que el numerador de la funci
on objetivo sea cero; es decir, deniendo A = AX

= Xc, se tiene que el problema es


c
T x

min. c
x = 0
s. a A
= 1,
eT x

0.
x

566

Captulo 10. Metodos de punto interior

Esta u
ltima expresi
on es identica a la de (10.1). Adem
as, en el nuevo espacio, la soluci
on actual
= e/n, esta en el centro del simplex = {
= 1, x
0}.
del problema, x
x n : eT x
Para mejorar esta soluci
on, sea
)

S  (e/n, ) = x n : eT x = 1, x e/n

la bola de centro e/n y radio en el espacio afn {x n : eT x = 1}. Es f


acil ver que
S  (e/n, r) S  (e/n, R),
= 1, x
0}, R = ((n1)/n)1/2 y r = (n(n1))1/2 , tal como vimos
donde = {
x n : eT x
= 1, x
0}, unas condiciones se
en (10.4) y (10.5). Si se utiliza S  en lugar del simplex {eT x
reemplazan por otras m
as restrictivas pero de mejor continuidad. El subproblema a resolver
entonces en las variables transformadas ser
a:

T x
min. c
x = 0
s. a A
S  (e/n, ),
x

(10.7)

para todo > 0. Si se designa la matriz de condiciones




AX
,
B=
T
e
n en el subespacio n
cualquier direcci
on de movimiento d
ucleo de B, es decir, tal que
= 0, sera factible.
Bd
La soluci
on de (10.7) es
d.

() = e/n + d/
x
que se pueden coger, partiendo de e/n, lo m
De las posibles direcciones d
as logico, seg
un
venimos indicando, es tomar la de m
axima pendiente de la funci
on objetivo: en este caso
o Xc.
Para mantener la factibilidad del problema y que el nuevo punto al que se
cT X
llegue este en el interior de la regi
on factible, esta direcci
on se debe proyectar en el subespacio
n
ucleo de B. Recordando la matriz de proyecci
on en ese subespacio, la direccion sera, en suma,
&

= I B T BB T
d

1

'

B Xc.

En la tabla 10.1 se describe el proceso iterativo del algoritmo de Karmarkar para resolver
el problema (10.1). El punto del proceso iterativo en la iteraci
on k se designa, para facilitar
k
la notaci
on, por x . El resultado que se obtiene es un x factible tal que cT x 2L cT e/n. El
() sea factible y
algoritmo hace = /n < r, donde 0 < < 1 se escoge de tal manera que x
se reduzca apreciablemente la funci
on objetivo en cada iteraci
on. Hacer = 1/3 o (n 1)/3n
suele bastar.
El trabajo fundamental de cada iteraci
on del algoritmo es el derivado del c
alculo de la

direccion d.

10.2 El metodo del escalado proyectivo de Karmarkar

567

Tabla 10.1
Algoritmo de Karmarkar
Paso 0 Inicializaci
on. Hacer x0 = e/n; k 0.
Paso 1 Iteraci
on. Si cT xk 2L cT e/n, parar: se ha llegado al punto deseado x = xk . Si
= Xk c y A = AXk . Calcular
no, sea Xk = diag(xk ); defnase un vector c
!
"
A
B=
.
eT
y



#
$
= I B T BB T 1 B c
.
d

e
k d

= +
Determinar d
, con k = 1/3.
yx

n nd

Xk x
.
Hacer xk+1 = T

e Xk x
Hacer k k + 1 e ir al paso 1.

Ejemplo 10.3 Resolver:


min. x2
s. a x1 + x2 2x3 = 0
x1 + x2 + x3 = 1
x1 , x2 , x3 0.
En este caso, n = 3 y m = 1. La regi
on factible es la que se indica en la gura 10.7. El punto
0
T
on optima se puede ver en la gura que es [2/3, 0, 1/3].
x = [1/3, 1/3, 1/3] es factible. La soluci
El valor de la funci
on objetivo en este punto es cero. Todas los requisitos del planteamiento de
Karmarkar, pues, se cumplen.
Iteraci
on 1
Partimos del punto x0 ya indicado. La matriz X1 = diag(1/3, 1/3, 1/3). Como eT X11 x =
(

= x. El problema en el espacio x
coincide con el
3xi = 3, la transformaci
on proyectiva es x
de la gura 10.7. El punto x0 se transformar
a en el mismo.
= X1 c; es
Calculemos c

0
= 1/3 .
c
0
Calculemos A = AX1 ; es
A = [1/3, 1/3, 2/3] .

568

Captulo 10. Metodos de punto interior

[0,

2 1 T
, ]
3 3

[ 13 ,

1 1 T
, ]
3 3

cT
[ 23 , 0,

Regi
on factible

1 T
]
3

Figura 10.7
Region factible del problema del ejemplo 10.3
!

Calculemos B:
B=

"

A
eT

Obtengamos d:

1/3 1/3 2/3


.
=
1 1
1

&

= I B T BB T
d

1/6

1

'

B c

= 1/6 .
/

2
.
6
nos lleva desde [1/3, 1/3, 1/3] hacia la soluci
Observese que en este caso la direccion d
on
optima, [2/3, 0, 1/3].
, es
El nuevo punto en el espacio, x

=
Por tanto, d

1
62

1
62

+0=

= e/n + d/(n
x
d)

1/3
1/6
1
1
6
= 1/3 + 1/6
3 3
2
1/3
0

0,4119

= 0,2548 .
0,3333

10.2 El metodo del escalado proyectivo de Karmarkar

Deshaciendo la transformaci
on, el nuevo punto del proceso iterativo es

0,4119

X1 x
1

x = T
= 0,2548 .

e X1 x
0,3333
La funci
on objetivo en este nuevo punto es cT x1 = 0,2548.
Iteraci
on 2
La matriz X2 = diag(0,4119, 0,2548, 0,3333).
= X2 c; es
Calculemos c

0
= 0,2548 .
c
0
Calculemos A = AX2 ; es
A = [ 0,4119, 0,2548, 0,6666 ] .
Calculemos B:

B=

A
eT

"

0,4119 0,2548 0,6666


=
.
1
1
1

Obtengamos d:

&

= I
d

BT

0,1243

BB T

1

'

B c

= 0,1455 .
0,0212
= 0,1925.
Por tanto, d
, es
El nuevo punto en el espacio, x

= e/n + d/(n
x
d)

0,4051
= 0,2494 .
0,3456
Deshaciendo la transformaci
on, el nuevo punto del proceso iterativo es

0,4828

X2 x
x2 = T
= 0,1838 .

e X1 x
0,3333
La funci
on objetivo en este nuevo punto es cT x2 =0,1838.

569

570

Captulo 10. Metodos de punto interior

Iteraci
on 3 y sucesivas
Los nuevos puntos que se obtienen son

0,5397
0,5815
0,6604
0,6666
x3 = 0,1270 , x4 = 0,0852 , . . . , x10 = 0,0063 , . . . , x20 = 0,0001 .
0,3333
0,3333
0,3333
0,3333

10.2.2

Complejidad computacional

Para resolver

min. cT x
s. a Ax = 0
eT x = 1,

x 0,

el metodo de Karmarkar necesita O(nL) iteraciones. Para demostrar la complejidad computacional polin
omica del metodo, la clave estriba en encontrar una amplitud de paso en cada direccion de movimiento de tal forma que el valor de la funci
on objetivo decrezca geometricamente
en cada iteraci
on. En particular, Karmarkar prueba que, para = 1/3,


cT xk ek/5n cT x0 ,

k = 1, 2, . . .

(10.8)

De acuerdo con esto, para un L sucientemente grande tal que 2L (cT x0 ) 0, solo es necesario
que k cumpla que

ek/5n 2L < T 0 ,
(10.9)
c x
pudiendo entonces terminar el algoritmo cuando se consiga la precisi
on que se desee. Si en
(10.9) se toman logaritmos,
k
ln 2L < log2 2L = L.
5n
Es decir, si k > 5nL, el algoritmo puede terminar cumpliendose que cT xk < . El algoritmo
de Karmarkar necesita, en suma, de un n
umero de iteraciones polin
omico: O(nL).
Observese que (10.8) es equivalente a


ln c x
oa



k
T 0

+ ln c x ,
5n




 k
n ln cT xk n ln cT x0 ,
5
lo que demuestra que (10.8) se cumple si el valor de la funci
on n ln(cT x) se puede reducir en
cada iteraci
on en al menos la cantidad constante 1/5.
La direccion de movimiento del metodo de Karmarkar es la proyecci
on del negativo del
, el
gradiente de la funci
on objetivo. Esta direcci
on se toma para reducir el valor de cT Xk x

10.3 Variantes y extensiones del metodo de Karmarkar

571

cual es signicativamente distinto del de la funci


on n ln(cT x). Para ligar estos dos objetivos,
Karmarkar dene una funci
on potencial, para cada punto x del interior de y vector de coste
c, de la siguiente manera:


n


n


cT x
ln xj =
ln
f (x, c) = n ln cT x
xj
j=1
j=1

10.3

(10.10)

Variantes y extensiones del m


etodo de Karmarkar

Desde su aparici
on en 1984, el metodo de Karmarkar ha suscitado una gran atenci
on por
parte de estudiosos e investigadores. De entre todas las variantes o alternativas que se han
publicado, las conocidas como de escalado afn son las de uso mas extendido, y desde luego las
mas utilizadas en implementaciones comerciales. Esta nueva forma de resolver un programa
lineal utiliza unas transformaciones mucho m
as sencillas que la proyectivas de Karmarkar, las
transformaciones anes. Su ventaja fundamental estriba en que es posible tratar el problema
de programaci
on lineal en su forma est
andar y no en la forma de Karmarkar, mucho m
as
articiosa.
El algoritmo basado en transformaciones anes fue introducido por primera vez en 1967
por el matematico sovietico I. I. Dikin. Con posterioridad, en 1985, E. Barnes, R. Vanderbei,
M. Meketon y B. Freedman redescubrieron su utilidad. Estos autores propusieron resolver un
problema de programaci
on lineal en forma est
andar utilizando el algoritmo de escalado afn
primal y probaron su convergencia. En 1989, I. Adler, N. Karmarkar, M. G. C. Resende y
G. Veiga dise
naron otro algoritmo similar, el denominado de escalado afn dual, para resolver
problemas de programaci
on lineal con restricciones de desigualdad (duales).
Los algoritmos de puntos interiores basados en transformaciones anes son hoy en da objeto
de m
ultiples experimentaciones. Muchos c
odigos comerciales que resuelven de forma ecaz
problemas de programaci
on lineal disponen de variantes que permiten comparar los tiempos
de resolucion que necesita el clasico simplex y las diferentes implementaciones de los metodos
de escalado afn. Y ello a pesar de que N. Megido y M. Shub han demostrado que la trayectoria
que siguen estos metodos hasta el optimo depende en gran medida del punto de partida y que,
por consiguiente, se puede perder la complejidad polin
omica. No obstante, una variante de
los metodos de escalado afn, la primal-dual, consigue una complejidad polin
omica utilizando
funciones de barrera logartmicas. La idea es tratar de evitar mediante estas funciones que a
lo largo de las direcciones de movimiento los puntos que se obtengan se acerquen a las paredes
de la regi
on factible.

10.4

El m
etodo primal de escalado afn

Uno de los grandes inconvenientes del algoritmo de Karmarkar estriba en la obtenci


on de las
transformaciones proyectivas. Una forma de evitarlo es usar transformaciones anes en lugar
de proyectivas dando lugar as a los denominados algoritmos de escalado afn. Como ya hemos
mencionado, el inconveniente que presentan desde el punto de vista te
orico es que no se ha
podido probar que, utiliz
andolas, el tiempo de resoluci
on que necesitan para resolver problemas
de programaci
on lineal sea polin
omico.

572

Captulo 10. Metodos de punto interior

En el metodo de Karmarkar, el simplex


= {x n : x1 + x2 + + xn = 1, xi 0, i = 1, . . . , n}
y su centro, e/n = [1/n, . . . , 1/n]T , permitan que, partiendo de ese centro, gracias a una
transformaci
on proyectiva, utilizando como direcci
on de movimiento la de m
axima pendiente
de la funci
on objetivo, se pudiese progresar adecuadamente hacia el mnimo del problema. Si
se trabaja con el problema en forma est
andar,
min. cT x
(10.11)

s. a Ax = b
x 0,

no se dispone de la estructura que dene el simplex pudiendo incluso darse que la regi
on factible
no sea acotada. La u
nica estructura disponible en este caso es la que dene la intersecci
on del
espacio afn {x n : Ax = b}, formado por las condiciones del problema, y el octante
positivo {x n : x 0}.
El octante positivo, evidentemente, no dispone de punto central. El punto e = [1, . . . , 1]T , sin
embargo, esta a igual distancia de cada una de sus paredes. En tanto y cuanto, evidentemente,
a lo largo de cualquier direcci
on, desde e, se avance un paso menor de la unidad, el punto
resultante estara dentro del octante no negativo. Si se puede denir una transformaci
on que
convierta un punto interior de la regi
on factible en e, de forma similar a como hace Karmarkar
en su metodo, se puede denir una estrategia de avance hacia el optimo del problema de la
siguiente manera:
1. Partiendo de un punto interior de la regi
on factible, denir y aplicar una transformaci
on
de tal forma que ese punto se transforme en e.
2. Obtener la direcci
on de m
axima pendiente de la funci
on objetivo proyectada en el subespacio n
ucleo de los vectores columna que dene la matriz de condiciones transformada, y
moverse a lo largo de ella un paso tal que no se violen las condiciones de no negatividad
y que se llegue a otro punto interior de la regi
on factible.
3. Transformar el nuevo punto al espacio original y repetir este proceso hasta acercarse lo
sucientemente al punto optimo del problema.

10.4.1

Transformaci
on afn del octante positivo

La transformaci
on a la que se refera la estrategia anterior es la que se denomina transformaci
on
afn o transformaci
on afn primal.
Sea xk n una soluci
on estrictamente factible (xk > 0) del problema de programaci
on
lineal en forma est
andar (10.11), y considerese la matriz diagonal

x1k
  0

Xk = diag xk = .
..

0
x2k
.
..

..
.

0
0
.
..

0 0 xnk

10.4 El metodo primal de escalado afn

573

La matriz Xk es obviamente regular, siendo su inversa, Xk1 , otra matriz diagonal con coecientes 1/xik . Una transformaci
on afn, del octante no negativo en s mismo, se dene de la
siguiente manera:
Tk (x) = y = Xk1 x.
Observese que esta transformacion convierte x en el punto interior e equidistante de todas
las condiciones de no negatividad del problema. La gura 10.8 describe geometricamente esta
transformaci
on afn en dos dimensiones. Tal como se ha denido, la transformaci
on convierte
y2

x2

Tk

..........................................................................................
..................
..............
..............
............
............
..........
.
.
.
.
.
.
.
.
.
.........
....
.
.
.
.
.
.
.........
.
.
.....
.
........
.
.
.
.
.
.
........
....
.
.
.
.
.
.
.......
...
.
.
.
.......
.
.
.
...
.
......
.
.
.
.
.
.....
...
.
.
.
.
.
......
...
.
.
.
.....
.
...
.
.....
.
.
..
.
.....
.
.
.
..
....
.
.
.
....
...
.
.
....
..
.
....
.
..
.
....
.
..
....

xk

y1

x1

Figura 10.8
Descripcion geometrica de la transformaci
on afn en dos dimensiones
un punto extremo de la regi
on factible original en otro punto extremo de la regi
on factible en
el espacio transformado, y un punto en una arista de la regi
on factible original en otro tambien
en una arista en el espacio transformado.
El problema de programaci
on lineal en el nuevo espacio es


min.

ck

T

s. a Ak y = b
y 0,

(10.12)

donde ck = Xk c y Ak = AXk . Si partiendo de y k nos movemos en una direccion dyk en el


subespacio n
ucleo de la matriz Ak , y a lo largo de ella se avanza un paso k , el nuevo punto
obtenido, y k+1 = e + k dyk permanecera en el interior de la regi
on factible de (10.12). En
1 k+1
k+1
k+1
el espacio original, x
= Tk (y
) = Xk y
sera un nuevo punto interior de la regi
on
factible del problema en forma est
andar (10.11).

574

Captulo 10. Metodos de punto interior

Como de lo que se trata es de minimizar el valor de la funci


on objetivo, siguiendo con la
estrategia apuntada, la idea es escoger como direccion que haga decrecer ese valor la proyeccion
de la direcci
on de m
axima pendiente de la funci
on objetivo en el subespacio n
ucleo de Ak . Si
se dene como matriz de proyeccion en el subespacio ker(Ak )


Pk = I AkT Ak AkT
la direcci
on de movimiento dyk sera:
dyk

= Pk c

1

Ak = I Xk AT AXk2 AT

&

= I Xk A

AXk2 AT

1

1

AXk ,

'

AXk Xk c.

Observese que la matriz de proyeccion Pk estara denida en tanto y cuanto A sea de rango
completo y xk > 0. Es tambien f
acilmente comprobable que AXk dk = 0. En la gura 10.9 se
k
representa la obtenci
on de dy .
funci
on
objetivo cte.

ck

yk
dyk

y k+1

Figura 10.9
Obtenci
on de la direcci
on en el subespacio n
ucleo de Ak
Determinada la direcci
on de movimiento a lo largo de la cual desplazarse en el espacio
transformado, la siguiente cuesti
on a resolver es cuanto moverse en esa direccion. Es decir,
escoger un k > 0 tal que
y k+1 = y k + k dyk > 0.
Observese que si dyk 0, k puede ser cualquier valor real positivo sin que el nuevo punto se
un i, el valor de k habr
a de
salga de la regi
on factible. Si, por el contrario, dyki < 0, para alg
ser menor que
yik
1
=
.
k
dyi
dyki

10.4 El metodo primal de escalado afn

575

De acuerdo con esto, en cada paso k del proceso, tomando 0 < < 1, se escogera una amplitud
de paso en la direcci
on dyk dada por


k = min
i

: dyki < 0 .
dyki

Cuanto m
as pr
oxima a 1 sea k , mas cerca estara el nuevo punto y k+1 de una pared denida
por una condici
on de no negatividad.
Una vez obtenido el nuevo punto y k+1 en el espacio transformado, la siguiente operaci
on
que se debe realizar es convertir ese punto en su correspondiente, xk+1 , en el espacio original.
Esto se realiza mediante la transformaci
on inversa, Tk1 . Es decir,


xk+1 = Tk1 y k+1 = Xk y k+1


= xk + k Xk dyk
= xk k Xk Pk Xk c
&

= x k Xk I Xk A
k

&

=x
k

k Xk2

cA

AXk2 AT

AXk2 AT

1

1

'

AXk Xk c
'

AXk2 c

= xk k Xk2 c AT wk ,
donde
k

w =

AXk2 AT

1

AXk2 c.

(10.13)

Lo que quiere decir que la direcci


on de movimiento en el espacio original es dxk = Xk2 (c
AT wk ) y la amplitud del paso a dar k . En el espacio transformado la direcci
on de movimiento
k
T
k
es dy = Xk (c A w ).
Como, de acuerdo con esto, dyk = Pk ck , dxk = Xk dyk y Pk es la matriz de proyeccion sobre
el subespacio al que pertenece dyk ,


cT xk+1 = cT xk + k dxk

= cT xk + k cT Xk dyk
=

c T xk

+ k

ck

T

T

= cT xk k dyk

dyk

(10.14)

Pk dyk

= cT xk k dky .
on objetivo a lo largo de la direcci
on
Lo que implica que el punto xk+1 mejora el valor de la funci
k
calculada si dy = 0.

576

Captulo 10. Metodos de punto interior

Lema 10.1 Si existe un xk {x n : Ax = b, x > 0} y dyk > 0, el problema de


programaci
on lineal
min. cT x
s. a Ax = b
x 0,
no est
a acotado.
n. Como dyk pertenece al subespacio n
Demostracio
ucleo de Ak = AXk y dky > 0, el punto
y k+1 = y + k dyk sera factible en el problema


min.

ck

T

s. a Ak y = b
y 0,
para cualquier k > 0. En consecuencia, k se puede hacer tan grande como se quiera resultando de (10.14) que cT xk+1 tender
a a para xk+1 = xk + k Xk dyk {x n : Ax =
b, x 0}.
Lema 10.2 Si existe un xk {x n : Ax = b, x > 0} y dyk = 0, cualquier soluci
on
factible del problema
min. cT x
s. a Ax = b
x 0,
es
optima.
n. Como dyk = Pk Xk c = 0, Xk c pertenecera al subespacio complemento
Demostracio
ortogonal del subespacio n
ucleo de AXk . Como el complemento ortogonal de ker(AXk ) es el
subespacio que determinan los vectores la de AXk , Im((AXk )T ), existir
a un vector uk tal que
(AXk )T uk = Xk c

uk

T

AXk = cT Xk .

Como Xk1 existe, (uk )T A = cT . Para cualquier punto factible x,




cT x = uk

T

Ax = uk

T

b.

Como (uk )T b no depende de x, el valor de cT x es constante en {x n : Ax = b, x 0}.

10.4 El metodo primal de escalado afn

577

Lema 10.3 Si el problema de programaci


on lineal
min. cT x
s. a Ax = b
x 0,
est
a acotado inferiormente y el valor de su funci
on objetivo no es constante, la sucesi
on
cT xk , k = 1, 2, . . . est
a denida y es estrictamente decreciente.
n. Es consecuencia directa de los dos lemas anteriores y de la ecuacion (10.14).
Demostracio
Si xk es un punto extremo de la regi
on factible, el vector w k denido en (10.13) es igual a
(B T )1 cB , es decir, al vector de multiplicadores simplex que denamos en el metodo simplex.
Aqu le denominaremos estimador dual. Si, de nuevo, xk es un punto extremo,
r k = c AT wk
es igual a c AT (B T )1 cB , el vector de costes reducidos del metodo simplex, al que denominaremos igual aqu.
Observese que si rk 0, el estimador dual wk es una soluci
on factible del problema dual
y (xk )T rk = eT Xk rk se convierte en la diferencia entre el valor de la funci
on objetivo del
programa primal y la del dual4 , es decir,
cT xk bT w k = eT Xk r k .
a alcanzado un punto factible en el programa
En el caso de que eT Xk rk = 0, con r k 0, se habr
primal, xk , la factibilidad del dual con wk y se cumplir
an las condiciones del complementariek
dad de holguras. Es decir, x es el optimo del programa primal y w k del dual.
En la tabla 10.2 se describe, como resumen de todo lo expuesto en este apartado, el algoritmo
primal de escalado afn.
Ejemplo 10.4 Resolver:
minimizar 2x1 + x2
x1 x2 + x3
= 15
x2
+ x4 = 15
x1 , x2 , x3 , x4 0.

sujeta a

En este problema,


1 1 1 0
,
A=
0 1 0 1

15
b=
15

y c = [2, 1, 0, 0]T .

Comencemos el proceso iterativo partiendo del punto x0 = [10, 2, 7, 13]T , el cual como se
comprueba f
acilmente, esta en el interior de la regi
on factible del problema.
4

Duality gap.

578

Captulo 10. Metodos de punto interior

Tabla 10.2
Algoritmo primal de escalado afn
Paso 0 Inicializaci
on. Hacer k = 0 y denir un x0 > 0 tal que Ax0 = b.
Paso 1 C
alculo de los estimadores duales. Calcular el vector de estimadores duales
$1
#
AXk2 c,
wk = AXk2 AT
donde Xk es la matriz diagonal cuyos coecientes son los elementos del vector xk .
Paso 2 C
alculo de los costes reducidos. Calcular el vector de costes reducidos
r k = c AT wk .
Paso 3 Comprobar si el punto es
optimo. Si rk 0 y eT Xk r k (una tolerancia dada),
parar. El problema esta resuelto: xk es la solucion del programa primal y wk del
dual. Si no, ir al siguiente paso.
Paso 4 Calcular la direcci
on de movimiento. Calcular
dyk = Xk r k .
Paso 5 Comprobar si existe soluci
on no acotada. Si dyk > 0, parar. El problema es no
acotado. Si dyk = 0, parar. El punto xk es el optimo del problema. Si no, ir al paso 6.
Paso 6 C
alculo de la amplitud de paso. Calcular la amplitud del paso a dar en la direcci
on
k
dy :


: dyki < 0
con 0 < < 1.
k = min
i
dyki
Paso 7 Obtener nuevo punto. Realizar la traslacion al nuevo punto:
xk+1 = xk + k Xk dky .
Hacer k k + 1 e ir al paso 1.

10.4 El metodo primal de escalado afn

579

Iteraci
on 1
La matriz que dene la primera transformaci
on es

10
0
X0 =
0
0

0
2
0
0

0
0
7
0

0
0
.
0
13

Calculemos el vector de estimadores duales:


w0

10 0 0 0



1

1
1
1
0

0 2 0 0
= AX02 AT
AX02 c =

0 0 7 0
0 1 0 1

1
1

1
0 0 0 13
0


 10
0
1 1 1 0

0
0 1 0 1
0

Los costes reducidos son:

0
2
0
0

0
0
7
0

0
1

0 2 2


1
0

= 1,33353 .
0 0
0,00771
13
0

2
1

1
1

r0 = c AT w 0 =
0 1
0
0

0 
0,66647

1,33353
0,32582
1

.
=
0 0,00771
1,33353
1
0,00771

Como alguno de los costes reducidos es negativo y eT X0 r0 = 2,1186, todava no se ha llegado


al optimo del problema.
Calculemos la direccion de movimiento:

10 0 0 0
0,66647
6,6647

0 2 0 0 0,32582 = 0,6516 .
d0y = X0 r 0 =
0 0 7 0 1,33353 9,3347
0 0 0 13
0,00771
0,1002
Si se escoge un = 0,99, la amplitud de paso ser
a
0,99
0 =
= 0,1061.
9,3347
La nueva soluci
on sera

17,06822
2,13822

x1 = x0 + 0 X0 dy0 =
0,07000 .
12,86178
El valor de la funci
on objetivo en este nuevo punto es

17,06822

2,13822 = 31,99822.
cT x = [2, 1, 0, 0]

0,07000
12,86178
Observese que en solo una iteraci
on la funci
on objetivo ha pasado de ser 18 a 31,99822.

580

Captulo 10. Metodos de punto interior

Iteraci
on 2 y sucesivas
Continuando con el proceso de la misma forma que hemos hecho en la iteraci
on precedente, se
conseguiran los siguientes puntos:

29,82964
29,98380
29,99862
29,99987
30,00000
14,87138 3 14,99871 4 14,99877 5 14,99999 6 15,00000
x2 =
,x =
,x =
,x =
,x =
.
0,04174
0,01491
0,00015
0,00011
0,00000
0,12862
0,00129
0,00123
0,00001
0,00000

El valor de la funci
on objetivo en el optimo es 45.

10.4.2

Soluci
on de partida del m
etodo

Hasta ahora hemos supuesto que partamos de una soluci


on inicial en el interior de la regi
on
factible del problema. A continuaci
on veremos dos formas, similares a las que se expusieron
para resolver el mismo problema en el caso del metodo simplex, de llegar a ella.
10.4.2.1

El m
etodo de la gran M

on objetivo
Consiste en a
nadir una variable articial xa , a la que se asocia un coste en la funci
T
n+1
muy grande, M , a n de que [1, 1, . . . , 1] 
sea una soluci
on en el interior de la regi
on
factible del problema
minimizar cT x + M xa


sujeta a

x
=b
xa
xa 0,

[A|b Ae]
x 0,

donde e = [1, 1, . . . , 1]T n . Comparada con la estrategia utilizada en el caso del metodo
simplex, esta solo utiliza n + 1 variables en vez de las n + m del simplex. Utilizando esta forma
de actuar, con un M sucientemente grande, el procedimiento llegar
a a una soluci
on optima
del problema original o se comprobar
a que el mismo es no acotado. Si al nal del proceso la
variable xa es positiva, el problema no es factible.
10.4.2.2

El m
etodo en dos fases

Si se escoge un punto arbitrario x0 > 0, se calcula v = b Ax0 y resulta que v = 0, x0 es


un punto interior de la regi
on factible pudiendose por tanto utilizar para comenzar el metodo
primal de escalado afn. Si no es as, se dene como se haca en el metodo simplex una primera
fase para obtener ese punto interior desde el que comenzar todo el procedimiento. Esta fase I
tratar
a de resolver el problema
minimizar u
sujeta a

x
[A|v]
=b
u
x 0, u 0.

(10.15)

10.4 El metodo primal de escalado afn

581

Es f
acilmente comprobable que


x0
=
x
u0

x0
=
1

> 0,

y que por lo tanto est


a en el interior de la regi
on factible de (10.15). A este problema se le puede
aplicar el algoritmo primal de escalado afn, el cual, como la soluci
on esta acotada inferiormente
por 0, siempre llegar
a a una soluci
on optima, [x , u ]T . Si en esa soluci
on u > 0, el problema

original no es factible. En cualquier otro caso el punto x , siempre y cuando x > 0 (cosa que
ocurre casi siempre), se podra utilizar para comenzar el procedimiento habitual.

10.4.3

Reglas de parada del m


etodo

Se utilizan las m
as logicas: las que denen las condiciones de un punto optimo de un programa
lineal de Karush-Kuhn-Tucker. Es decir: 1. factibilidad del programa primal; 2. factibilidad del
dual; y 3. complementariedad de holguras.
10.4.3.1

Factibilidad del programa primal

Se ha de cumplir que
xk 0.

Axk = b,

En la pr
actica, teniendo en cuenta el entorno nito de la aritmetica que utiliza el ordenador
donde se debe implementar el metodo, se comprueba que
p =





Axk b

b + 1

xk 0.

Si p es sucientemente peque
no y xk 0, se puede considerar que se cumplen las condiciones
de factibilidad del programa primal.
10.4.3.2

Factibilidad del programa dual

La factibilidad del programa dual requiere que los costes reducidos


rk = c AT w k 0,
donde w k es el vector de estimadores duales. Desde el punto de vista practico, una vez mas, si
d =


k
r

c + 1

xk 0,

donde rk  y c se calculan solo con aquellos componentes rik < 0, la factibilidad del dual se
considerar
a conseguida si d es sucientemente peque
no.

582

Captulo 10. Metodos de punto interior

10.4.3.3

Complementariedad de holguras

La condici
on de complementariedad de holguras requiere que


Como

xk

T

rk = eT Xk rk = 0.

cT xk bT w k = eT Xk r k ,

donde xk es un punto factible del primal y w k del dual,


c = cT xk bT w k
calibrar
a la condici
on de complementariedad de holguras. Eligiendo c sucientemente peque
no
se podr
a vericar que se cumple esta condicion.

10.4.4

Complejidad computacional del m


etodo primal de escalado afn

Como se ha podido comprobar, comparado con el metodo de Karmarkar, el metodo primal de


escalado afn resulta mucho m
as natural y menos complicado. Su implementaci
on en ordenador
tambien es mas sencilla. No requiere asumir que el valor de la funci
on objetivo optimo debe
ser cero, ni tampoco la estructura simplicial. El n
umero de iteraciones que requiere para llegar
al optimo del problema con una tolerancia = 103 , seg
un R. Vanderbei, M. Meketon y B.
0,0187
0,1694
Freedman, es 7,3885m
n
.
Como ya hemos indicado anteriormente, a pesar de que en la pr
actica el metodo funciona
muy bien, no se ha podido probar que su complejidad computacional sea polin
omica. De hecho,
N. Megido y M. Shub han comprobado que al resolver el problema de Klee-Minty, si el punto
de partida est
a muy cerca de los lmites de la region factible, el metodo, como en el caso del
simplex, puede llegar a recorrer las proximidades de todos los puntos extremos de esa regi
on
factible.
Para evitar caer en el efecto que produce el acercarse mucho a los lmites de la region factible
se han dise
nado diversas estrategias. A continuaci
on estudiamos dos de las mas utilizadas.
10.4.4.1

M
etodo del empuje potencial

La idea consiste en empujar al punto que se este considerando en un momento determinado


on factible sin empeorar el
del proceso de resolucion del problema, xk , hacia el interior de la regi
valor de la funci
on objetivo. En la gura 10.10 se describe geometricamente lo que se pretende
con esta forma de actuar.
Se parte de un xk1 , a lo largo de la direcci
on dk1
se llega a xk , el cual se recentra en
x
k . Ese recentrado se lleva a cabo
el interior de la regi
on factible del problema, obteniendose x
mediante un empuje potencial tal que el valor de la funci
on objetivo permanece constante pero
el punto se aleja de la zona conictiva que representa estar cerca de un lmite exterior (una
pared) de la regi
on factible.
Para conseguir esto, se dene la funci
on potencial p(x), para cada x > 0, de la siguiente
manera:
n
p(x) =

j=1

ln xj .

10.4 El metodo primal de escalado afn

583

funci
on
objetivo cte.

xk
x

dxk1
xk1

k
x

Figura 10.10
Representacion de la idea en la que se basa el metodo de empuje potencial

El valor de la funci
on potencial ser
a tanto m
as grande cuanto m
as cerca este el punto x
de la condici
on xj = 0. Esta funci
on introduce una especie de fuerza que empuja a x hacia el
interior de la regi
on factible. Con ella se resuelve el siguiente problema:
minimizar p(x)
sujeta a

Ax = b, x > 0
c T x = c T xk ,

(10.16)

problema denominado de empuje potencial. En este problema, la primera condici


on fuerza a
que su soluci
on este en el interior de la regi
on factible del problema de programaci
on lineal
original, la segunda que se mantenga como valor de la funci
on objetivo el que existe en xk y la
funci
on objetivo que el punto que se obtenga este alejado de las paredes de la regi
on factible.
Para resolver (10.16) mediante el metodo primal de escalado afn, por un lado, se tiene en
cuenta la condici
on cT x = cT xk separadamente del resto del problema y, por otro, se mejora
p(x) lo que se considere necesario sin necesidad de llegar al optimo, puesto que basta con
separar el punto de la pared m
as pr
oxima una cierta cantidad.
La forma de llevar esto a la pr
actica consiste en comenzar con xk como punto de partida
de (10.16), luego proyectar el negativo del gradiente de p(x) en el subespacio n
ucleo de A y
k
utilizar esta proyecci
on como posible direcci
on, p , a lo largo de la que moverse. Para mantener
el valor de la funci
on objetivo constante, primero se proyecta el negativo del gradiente de la
funci
on objetivo cT x en el subespacio n
ucleo de A, design
andose por g. Con posterioridad,
para recentrar xk , se toma como direccion para hacerlo la componente de pk que es ortogonal
k . Finalmente, a lo largo de esa direcci
on se calcula una amplitud de paso
a g, design
andola d
x
adecuada.
Si P = I AT (AAT )1 A es la matriz de proyeccion sobre el subespacio n
ucleo de A y

584

Captulo 10. Metodos de punto interior

p(x) el gradiente de la funci


on potencial,


p = P p x
k



donde
1
=
xk

= I A

Igualmente,

AA

1
1
,..., k
k
xn
x1

g = P c = I A

1

&

1
xk

'

1T

AA

1

A c.

Descompongamos ahora el vector pk en dos componentes: uno a lo largo de g y el otro


ortogonal a este. El primer componente se puede expresar de la forma g, para alg
un > 0.
Su ortogonal, de la siguiente manera:
k = pk g.
d
x
La condici
on de ortogonalidad implica que
&

k
d
x

'T

g = 0,

lo que permite obtener el valor de :




=
De aqu que

pk

T

g
.

gT g


T

k
g
k
p
k

dx = p
g.
gT g

El siguiente aspecto que hay que considerar es el c


alculo de la amplitud del paso, , a dar
k
k

a lo largo de dx partiendo de x . El valor m


aximo de estara dado por
max =

1
*.
max dxk j /xkj
)

La amplitud de paso se puede calcular por cualquier metodo que se considere oportuno buscando en el intervalo (0, max ).
De esta forma de tratar de evitar una excesiva aproximaci
on a las paredes de la regi
on
factible son dignos de tenerse en cuenta los siguientes aspectos:
1. Al aplicar el metodo del empuje potencial despues de cada iteracion del metodo primal
de escalado afn, como la matriz P es la misma que la calculada en esa iteracion y la
b
usqueda de mediante un procedimiento de b
usqueda lineal es relativamente sencilla,
la mayor cantidad de trabajo que conlleva el empuje potencial es la evaluaci
on de la
funci
on potencial en esa b
usqueda lineal.

10.4 El metodo primal de escalado afn

585

2. Si la previsible mejora que se obtiene de aplicar el empuje potencial, separ


andose de
las paredes de la regi
on factible, no se constata que es tal, no ser
a necesario continuar
actuando as. Esto se puede comprobar despues de 4 o 5 iteraciones.
3. La funci
on potencial del metodo de Karmarkar era


n


n


cT x
ln xj =
ln
f (x, c) = n ln cT x
xj
j=1
j=1

Es decir, f (x, c) = n ln(cT x) p(x), supuesto cT x > 0. Cuando se aplica el metodo


de escalado afn seguido del empuje potencial es como si se conservara la estrategia
del procedimiento de Karmarkar pues el primer termino lo reduce el propio metodo de
escalado afn mientras que del segundo se encarga el empuje potencial.
4. Parece l
ogico pensar que si se conserva la estrategia del procedimiento de Karmarkar,
el metodo primal de escalado afn junto con el empuje potencial pudieran dar como
resultado un algoritmo de complejidad computacional polin
omica. Todava, no obstante,
no se ha podido probar esto rigurosamente.
10.4.4.2

M
etodo de funci
on barrera logartmica

Este otro procedimiento es una alternativa m


as para tratar de evitar que cada iteraci
on del
metodo primal de escalado afn parta de puntos pr
oximos a las paredes de la region factible.
- La idea es incorporar una funci
on barrera en la funci
on objetivo original que adopte valores
muy altos cuando un punto est
a pr
oximo a los lmites de la region factible. Si, l
ogicamente,
se minimiza esta nueva funci
on objetivo, los puntos que se vayan obteniendo en el proceso
iterativo, autom
aticamente, se alejaran de las paredes de la regi
on factible. En la gura 10.11
se describe un peque
no ejemplo en el que se sustituye la funci
on 3 x/2 por una de barrera
logartmica que impide que el valor de la soluci
on se acerque a la pared que determina la
condici
on x 6.
El problema que se resuelve es
min. F (x) = cT x

n


ln xj

j=1

s. a Ax = b,

(10.17)

x > 0,

donde > 0 es un escalar. Si x () es el optimo de este problema y tiende a x al tender


a cero, x sera el optimo del problema original. Observese que la condicion de que x > 0 esta
implcitamente recogida en la denici
on de la funci
on barrera logartmica.
Para resolver (10.17 ) se utiliza un metodo de descenso basado en el calculo de una direcci
on
de descenso, d, a lo largo de la cual luego se calcula una amplitud de paso. Si el punto en el
que se esta es xk y la direcci
on de descenso es d, el nuevo punto vendr
a dado por la expresi
on
xk+1 = xk + d.
El c
alculo de d y han de asegurar que Axk+1 = b y que F (xk+1 ) < F (xk ).

586

Captulo 10. Metodos de punto interior

F (x)

f (x)

x
x6
Figura 10.11
Funci
on barrera logartmica del problema: minimizar f (x) = 3 x/2 sujeta a x 2
La direccion de descenso mas habitual es la de Newton. Se determina de la aproximaci
on
cuadr
atica derivada del desarrollo en serie de Taylor de la funci
on objetivo truncado a partir
de los terminos de segundo orden, sujeta a mantener la factibilidad del problema. Es decir,
minimizar
sujeta a

1 T 2
d F (x)d + (F (x))T d
2
Ad = 0,

(10.18)

donde F (x) = c X 1 e y 2 F (x) = X 2 . La direcci


on de descenso debera estar por
tanto en el subespacio nulo de la matriz A, ker(A).
Si a (10.18) se le aplican las condiciones de punto optimo de Karush-Kuhn-Tucker se obtiene
que
c X 1 e + X 2 d = AT ,
donde d es la direccion de Newton y el vector de multiplicadores de Lagrange de las
condiciones. Combinando estas condiciones y las de factibilidad del problema se obtiene el
siguiente sistema de ecuaciones lineales:


X 2 AT
A
0



c X 1 e
=
.
0

Si la matriz X 2 no es singular, la soluci


on de este u
ltimo sistema de ecuaciones se puede
obtener resolviendo


1
1
2 T
2
1
AX A = AX c X e

#
$
2
X d = AT c X 1 e .

10.5 El metodo dual de escalado afn

587

De la primera de estas dos ecuaciones se deduce que




= AX 2 AT

1

AX 2 c X 1 e .

Sustituyendo en la segunda se obtiene que





1
1
AX (Xc e) .
d = X I XAT AX 2 AT

Si suponemos que estamos en xk y se calcula la direccion d , compar


andola con la que se
k
obtiene en el metodo primal de escalado afn, dx , se tiene que
d =




1
1 k
AXk e.
dx + Xk I Xk AT AXk2 AT

El componente adicional, Xk [I Xk AT (AX 2 AT )AXk ]e = Xk Pk e, se puede ver como una


fuerza que empuja a que la soluci
on este lejos de los lmites de la region factible. De aqu que
en algunas referencias bibliogr
acas a este componente se le denomine fuerza de centrado y al
metodo que incluye la funci
on barrera logartmica, metodo primal de escalado afn con fuerza
de centrado.

10.5

El m
etodo dual de escalado afn

Recordemos una vez mas que el dual del problema de programaci


on lineal en forma est
andar
min. cT x
s. a Ax = b
x0
es
maximizar bT w
sujeta a

AT w + s = c
s 0,

(10.19)

un sentido.
donde w m no esta restringido en ning
De una forma similar a como lo haca el metodo dual del simplex, el metodo dual de
escalado afn comienza con una soluci
on factible del programa dual y avanza mejorando la
funci
on objetivo hasta conseguir la factibilidad del programa primal, en cuyo caso se habr
a
alcanzado el punto optimo de los programas primal y dual.
En (10.19), [w, s]T m+n esta en el interior de la regi
on factible si AT w + s = c y s > 0.
En este caso no tiene sentido hablar de si w esta centrado en la regi
on factible dado que no
esta restringido en ning
un sentido; en el caso de s, por el contrario, s, por lo que la idea es,
como en casos anteriores, llevarlo al centro de la region factible siempre que ello sea posible.

588

Captulo 10. Metodos de punto interior

10.5.1

Ideas b
asicas del m
etodo dual de escalado afn

Como el primal, el metodo dual de escalado afn consta de tres fases principales: 1. b
usqueda
de una soluci
on de la que partir; 2. calcular una direcci
on a lo largo de la cual moverse a
una soluci
on mejor; y 3. pararse cuando la soluci
on este lo sucientemente proxima al punto
optimo. Como hicimos al describir el metodo primal, estudiemos primero que es lo que se hace
en el n
ucleo fundamental del procedimiento y luego veremos c
omo comenzar y donde parar.
Si en una determinada iteraci
on k se dispone de una soluci
on, [wk , sk ]T , en el interior de
la regi
on factible, tal que AT w k + sk = c, siendo sk > 0, su objetivo es encontrar una buena
k
, dsk ]T tal que moviendose a lo largo de ella un paso k > 0 se
direccion de movimiento [dw
llegue a una nueva soluci
on [wk+1 , sk+1 ]T tal que
k
wk+1 = wk + k dw
k

(10.20)

k dsk ,

(10.21)

AT w k+1 + sk+1 = c

(10.22)

k+1

=s +

que satisfaga
sk+1 > 0,

(10.23)

y en la que se cumpla que


bT w k+1 bT w k .

(10.24)

Si en (10.22) se sustituyen wk+1 y sk+1 por sus expresiones de (10.20) y (10.21), teniendo en
cuenta ademas que AT w k + sk = c, se tiene que
k
+ dsk = 0.
AT dw

(10.25)

Para mejorar la funci


on objetivo se deber
a cumplir adem
as que


k
bT wk ,
bT wk+1 = bT w k + k dw
k
por lo que la direcci
on dw
debe cumplir que bT dkw 0. Para conseguir que sk+1 > 0 se
aplica el metodo de escalado afn. La idea b
asica en este sentido consiste en recentrar el
k
T
n
punto s en e = [1, . . . , 1]  en el espacio transformado, como hacamos en el metodo
primal de escalado afn, consiguiendose as que cualquier desplazamiento desde ese nuevo punto
pueda hacerse en al menos una unidad sin alcanzar ninguna de las paredes que determinan las
condiciones de no negatividad.
Para llevar a cabo la transformaci
on afn se dene la matriz de escalado, Sk = diag(sk ).
1 k
Mediante ella, Sk s = e, transform
andose el vector s en uno u 0 tal que

u = Sk1 s
y
s = Sk u.
Ademas, si en el espacio resultante de la transformaci
on duk es la direccion de movimiento a lo
largo de la cual se puede mejorar el valor de la funci
on objetivo, esta direccion en el espacio
original ser
a
dsk = Sk duk .

10.5 El metodo dual de escalado afn

589

Para que una direcci


on en el espacio transformado sea adecuada y se mejore la funci
on
objetivo del problema original, es decir, se cumpla (10.25),
k
k
AT dw
+ dks = 0 AT dw
+ Sk duk = 0
k
k
+ duk = 0 Sk1 AT dw
= duk .
Sk1 AT dw

Multiplicando ambos miembros por ASk1 :


k
ASk2 AT dw
= ASk1 duk .

Si se supone que la matriz A es de rango completo,




k
dw
= ASk2 AT

1

ASk1 duk .

Haciendo Qk = (ASk2 AT )1 ASk1 , esta u


ltima expresi
on se puede escribir
k
= Qk duk .
dw
k
Esta ecuacion pone de maniesto que la direcci
on dw
esta denida a partir de dku en el espacio
k
k
transformado. Si se puede encontrar una direcci
on du tal que haga que se cumpla bT dw
0,
se habr
a conseguido nuestro objetivo. Para ello, si

duk = QTk b
entonces

k
bT dw
= bT Qk dku = bT Qk QTk b = bT Qk 0.
k
= Qk duk , se obtiene que
Combinando esta u
ltima expresi
on con dw

k
dw
= ASk2 AT

1

b.

De acuerdo con esto, teniendo en cuenta (10.25), se obtiene la direcci


on de movimiento en el
espacio original:


k
dsk = AT dw
= AT ASk2 AT

1

b.

k
, dsk ]T , la amplitud del paso a dar a lo
Una vez calculada la direcci
on de movimiento, [dw
largo de ella vendr
a dada por el requisito de que sk+1 sea estrictamente positivo. En este
sentido,

on objetivo constante en la regi


on factible
a. Si dsk = 0 el problema dual presenta una funci
y [w k , sk ]T es la solucion optima del programa dual.
b. Si dks 0 y dsk = 0, el programa dual es no acotado.
c. En cualquier otro caso

k = min
i

sik
: dski < 0 ,
dski

donde 0 < < 1.

590

Captulo 10. Metodos de punto interior

Si, de la misma forma que denamos los estimadores duales en el metodo primal de escalado
afn, se dene
xk = Sk2 dsk ,
k
= b. Es decir, xk se puede ver como el vector de estimadores
entonces Axk = ASk2 AT dw
primales en el metodo dual de escalado afn. Cuando el vector de estimadores primales cumpla
que xk 0, se habr
a conseguido una soluci
on factible del programa primal con una diferencia5
entre valor objetivo del primal y del dual de cT xk bT wk . Si cT xk bT wk = 0, [w k , sk ]T es
la soluci
on optima del dual y xk el optimo del primal.
En la tabla 10.3 se describe, como sntesis de todo lo expuesto en este apartado, el algoritmo
dual de escalado afn.

Ejemplo 10.5 Resuelvase el dual de:


minimizar 2x1 + x2
sujeta a

x1 x2 + x3
= 15
x2
+ x4 = 15
x1 , x2 , x3 , x4 0.

Este dual es:


maximizar 15w1 + 15w2
sujeta a

w1
w1 +
w1

+ s1
w2 + s2
+ s3
w2 + s4
s1 , s2 , s3 , s4

= 2
= 1
= 0
= 0
0.

on
Es f
acilmente comprobable que w 0 = [3, 3]T y s0 = [1, 1, 3, 3]T constituyen una soluci
factible de este problema en el interior de su regi
on factible.
Iteraci
on 1
La matriz de la primera transformaci
on es:

1
0

S0 =
0
0

0
1
0
0

0
0
3
0

0
.

0
3

Las direcciones de movimiento son

1 0 0 0 2
1 0


 




1 1 1 0 0 1 0 0 1 1
15
23,53211
2 T 1
0

dw = AS0 A
b=
=
0 1 0 1 0 0 3 0 1 0
15
34,67890

0 0 0 3
5

Duality gap.

0 1

10.5 El metodo dual de escalado afn

591

Tabla 10.3
Algoritmo dual de escalado afn
Paso 0 Inicializaci
on. Hacer k = 0 y denir un [w0 , s0 ]T tal que AT w0 + s0 = c y s0 > 0
Paso 1 C
alculo de las direcciones de movimiento. Sea Sk = diag(sk ), calcular
$1
#
k
k
dw
= ASk2 AT
b y dsk = AT dw
.
Paso 2 Comprobaci
on de problema no acotado. Si dsk = 0, parar. La solucion [wk , sk ]T es
a acotado.
el optimo del programa dual. Si dsk 0, parar. El programa dual no est
Paso 3 C
alculo de la soluci
on del primal. Calcular el punto del primal mediante la expresi
on
xk = Sk2 dsk .
Paso 4 Comprobar si se ha llegado al
optimo. Si xk 0 y cT xk bT wk , donde es
un valor peque
no positivo, parar. Las soluciones [wk , sk ]T y xk son las optimos del
programa dual y del primal, respectivamente. Si no, ir al paso siguiente.
Paso 5 C
alculo de la amplitud de paso. Calcular la amplitud del paso a dar en la direcci
on
de movimiento:
 k
si
: dski < 0
donde 0 < < 1.
k = min
i
dski
Paso 6 Obtener nuevo punto. Realizar la traslacion al nuevo punto:
wk+1 = wk + k dkw
sk+1 = sk + k dsk .
Hacer k k + 1 e ir al paso 1.

592

Captulo 10. Metodos de punto interior

1
d0s = AT d0w =
1
0

0 
23,53211

11,14679
1
23,53211

.
=
0 34,67890
23,53211
1
34,67890

La soluci
on del primal es

x0 = S02 ds0 =
0
0

0
1
0
0

0
0
3
0

0 2 23,53211
23,53211
11,14679 11,14679
0

=
.
0 23,53211 2,61467
3
34,67890
3,85321

El duality gap es cT x0 bT w0 = 54,08257; muy lejos todava de cero.


La amplitud de paso 0 se calcula de la expresion


0 = min
i

0,99s0i
: ds0i < 0
d0si

0,99 1
= 0,04207.
23,53211

Las nuevas variables son




w =w +

0 d0w

3
23,53211
2,01000
=
+ 0,04207
=
.
3
34,67890
1,54105

1
23,53211
0,01000

1
11,14679 0,53105
s1 = s0 + 0 ds0 =
3 + 0,04207 2,61467 = 2,01000 .
3
3,85321
1,54105
Iteraci
on 2 y sucesivas
Continuando con el proceso de la misma forma que hemos hecho en la iteraci
on precedente
se conseguiran los puntos de la tabla 10.4. El valor de la soluci
on es x = [30, 15, 0, 0]T ,
w = [2, 1]T y s = [0, 0, 2, 1]T . El optimo de la funci
on objetivo es 45.
Tabla 10.4
Proceso de convergencia del algoritmo dual de escalado afn aplicado al ejemplo 10.5
k
2
3
4
5

wk
-2,00961 -1,01491
-2,00010 -1,00395
-2,00009 -1,00013
-2,00000 -1,00000

sk
0,00901
0,00010
0,00009
0,00000

0,00531
0,00386
0,00004
0,00000

2,00961
2,00009
2,00009
2,00000

1,01492
1,00395
1,00013
1,00000

Duality gap
9,8605
0,3723
0,0610
0,0033

10.5 El metodo dual de escalado afn

10.5.2

593

Soluci
on de partida del m
etodo

A continuaci
on estudiaremos dos formas de encontrar una soluci
on inicial del programa dual
en el interior de la regi
on factible. Su objetivo, determinar una soluci
on [w0 , s0 ]T tal que
AT w0 + s0 = c y s0 > 0. En el caso especial de que c > 0, se puede escoger como esa solucion
que se busca w0 = 0 y s0 = c.
10.5.2.1

El m
etodo de la gran M

Este metodo consiste en a


nadir una o m
as variables articiales, wa , y considerar el siguiente
problema:
maximizar bT w + M wa
(10.26)
AT w + pwa + s = c
s 0,
a
donde w y w no estan restringidas en ning
un sentido y p n es un vector denido por:
sujeta a

pi =

1 si ci 0
0 si ci > 0.

c y
A continuaci
on se dene c = maxi |ci |, se escoge un > 0 y se hace w = 0, wa =
T
s = c +
cp. De acuerdo con esto, la soluci
on [0,
c, c +
cp] es factible en (10.26), con
c +
cp > 0, y se puede empezar a resolver el problema.
Observese que la variable wa comienza con el valor
c < 0, forz
andose luego a que, a
lo largo del proceso, su valor se incremente dado que M es un n
umero positivo grande y su
presencia esta por tanto muy penalizada. En alg
un punto del procedimiento su valor se har
a
no negativo a no ser que el problema original (10.19) sea no factible. Cuando el valor de wa
= wk y
se aproxime a cero o incluso se haga cero, pongamos en la iteracion k, se hace w
k
a
= s + pw empezandose desde ese punto el procedimiento dual de escalado afn. Si wa no
s
tiende a hacerse cero, se puede demostrar facilmente que el problema (10.19) no es factible.
10.5.2.2

M
etodo de la condici
on articial o del lmite superior

En este metodo se asume que, para un n


umero sucientemente grande M , una de las soluciones
optimas del problema de programaci
on lineal original pertenecer
a a la bola de centro el origen
y radio M , S(0, M ), consider
andose para su estudio el siguiente problema de programaci
on
lineal:
minimizar cT x
sujeta a

Ax = b
0 x u,

on adicional que supone acotar superiormente al


donde u = [M, M, . . . , M ]T n . La condici
vector x se crea articialmente con el n de que el dual de este problema tenga una soluci
on
en el interior de su regi
on factible trivial. Este dual es
maximizar bT w uT v
sujeta a

AT w + s v = c
s 0, v 0,

594

Captulo 10. Metodos de punto interior

no estando restringido el vector w en ning


un sentido. Si c y se denen como en el apartado
anterior, w0 = 0, v 0 =
ce > 0 y s0 = c +
ce > 0 constituyen una soluci
on interior de la
regi
on factible desde la que se puede comenzar el procedimiento iterativo del metodo dual de
escalado afn.
La clave de esta forma de actuar estriba en el valor que se asigne a M . Debe ser lo sucientemente grande como para incluir al menos una soluci
on optima de (10.19). Si el problema
original no est
a acotado, la eleccion de M puede ser muy problem
atica.

10.5.3

Reglas de parada del m


etodo

Como en el caso del metodo primal, se utilizan las que denen las condiciones de punto optimo
de un programa lineal de Karush-Kuhn-Tucker. Es decir: 1. factibilidad del programa primal; 2.
factibilidad del dual; y 3. complementariedad de holguras. La factibilidad del dual se mantiene
a lo largo de todo el algoritmo por lo que s
olo se necesita comprobar la factibilidad del primal
y la complementariedad de holguras.
Si se combinan

1
k
dsk = AT dw
= AT ASk2 AT
b
y

xk = Sk2 dsk ,

el valor de la soluci
on del primal es


xk = Sk2 dsk = Sk2 AT ASk2 AT

1

b.

(10.27)

Es f
acilmente comprobable que las condiciones Ax = b se satisfacen automaticamente para
cualquier xk denido seg
un esta u
ltima expresi
on. Si xk 0 se satisfara la factibilidad del
primal. Si el problema dual (10.19) de un programa lineal en forma est
andar se convierte a
su vez a la forma estandar y se le aplicada el metodo primal de escalado afn, el valor de los
estimadores duales en la iteracion k se obtendr
a de una expresi
on identica a (10.27).
k
Cuando se alcance un punto factible del programa dual, w , y otro factible del primal, xk ,
se calcula la complementariedad de holguras, c = cT xk bT wk . Cuando c sea menor que
una cantidad predeterminada se podr
a nalizar el metodo.

10.5.4

Mejora de la complejidad computacional del m


etodo dual de escalado
afn

Como en el caso del metodo primal, no existe una demostraci


on te
orica general que demuestre
la complejidad computacional polin
omica del metodo dual de escalado afn. Para mejorarla,
en cualquier caso, se pueden utilizar estrategias similares a las empleadas en el metodo primal:
empuje potencial y la funci
on barrera logartmica. En lo que sigue analizaremos brevemente la
segunda.
10.5.4.1

M
etodo de funci
on barrera logartmica

La idea, como en el algoritmo primal, es incorporar una funci


on de barrera en la funci
on
objetivo que adopte valores muy altos cuando un punto este pr
oximo a los lmites de la region

10.6 El metodo primal-dual

595

factible. Con este objetivo se considera el siguiente problema no lineal:


min. F (w, ) = bT w +

n


ln(cj ajT w)

j=1

s. a

AT w

(10.28)

< c,

donde > 0 es un escalar y aTj es el traspuesto del vector columna j de la matriz A. Observese
que si w () es la solucion optima de este problema y tiende a w al tender a cero, w sera
el optimo del dual del programa lineal original que se busca.
La funci
on lagrangiana del problema (10.28) es
L(w, ) = bT w +

n


ln(cj ajT w) + T (c AT w),

j=1

donde es el vector de multiplicadores simplex. Como cj aTj w > 0, la condici


on de complementariedad de holguras requiere que = 0. Las condiciones de Karush-Kuhn-Tucker son
b AS 1 e = 0
on dual factible, de las
y s > 0. Si se supone que wk y sk = c AT w k > 0 son una soluci
condiciones de Karush-Kuhn-Tucker se puede determinar la direcci
on de Newton:
w =


1
1  2 T 1
ASk A
b ASk2 AT
ASk1 e.

k
Comparada con la direcci
on dw
del metodo dual de escalado afn,

k
dw
= ASk2 AT

1

b,

w posee un termino adicional: (ASk2 AT )1 ASk1 e. Este termino es el que procura que la
direccion lleve a un punto que no este en los lmites de la region factible.
Diversos autores han demostrado que, escogiendo adecuadamente el par
ametro y la amplitud del paso a dar en cada iteraci
on, la complejidad computacional de este metodo es
polin
omica. El n
umero de iteraciones necesario para alcanzar el optimo es como mucho O( n).

10.6

El m
etodo primal-dual

Sea un programa de programaci


on lineal en forma est
andar
minimizar cT x
sujeta a

Ax = b
x0

(10.29)

y su dual
maximizar bT w
sujeta a

AT w + s = c
s 0,

(10.30)

596

Captulo 10. Metodos de punto interior

en el que w no esta restringido. Impongamos las siguientes condiciones:


A1. El conjunto S = {x n : Ax = b, x > 0} no esta vaco.
A2. El conjunto T = {(w m , s n ) : AT w + s = c, s > 0} no esta vaco.
A3. La matriz A es de rango completo.
En estas condiciones, de acuerdo con el teorema de la dualidad, los problemas (10.29) y (10.30)
tienen soluci
on optima, coincidiendo los valores de sus funciones objetivo. Adem
as el conjunto
de soluciones optimas de ambos estan acotados.
Al problema primal (10.29) se le puede aplicar la tecnica de la funci
on barrera logartmica
para reemplazar las condiciones de no negatividad y as llegar a considerar el siguiente problema:
(P ) :

minimizar cT x

n


ln xj

j=1

sujeta a

Ax = b
> 0,

donde > 0 es el parametro de penalizaci


on o barrera. De la misma manera, mediante una
funci
on barrera logartmica, el problema dual se formula de la siguiente manera:
(D ) :

maximizar bT w +

n


ln sj

j=1

AT y + s = c
> 0.

sujeta a

La funci
on lagrangiana de (P ) es:
Lp (x, w, ) = cT x

n


ln xj wT (b Ax).

j=1

La de (D ):
Ld (x, w, ) = bT w +

n


ln sj xT (AT w + s c).

j=1

Como las funciones objetivo de (P ) y (D ) son estrictamente convexas, estos problemas


tendr
an un solo mnimo y m
aximo (un mnimo global y un m
aximo global).
Las condiciones necesarias de primer orden que debe cumplir el mnimo de (P ) son
Lp
= 0 = c X 1 e AT w
x
Lp
= 0 = b Ax,
w

10.6 El metodo primal-dual

597

donde X = diag(x1 , x2 , . . . , xn ). Las del maximo de (D )


Ld
= 0 = AT w + s c,
x
Ld
= 0 = b Ax
y
w
Ld
= 0 = S 1 e x,
s
donde S = diag(s1 , s2 , . . . , sn ). Sustituyendo c = s + AT w se tiene que
Lp
= 0 = s + AT w X 1 e AT w = s X 1 e,
x
por lo que XSe = e. Observese que esta condicion, componente a componente, se puede
escribir
xj sj = , j = 1, . . . , n.
(10.31)
Las condiciones necesarias de primer orden, para un mismo , de los programas primal y dual
son pues
Ax = b (factibilidad del programa primal)
AT w + s = c
XSe e = 0

(factibilidad del programa dual)


(complementariedad de holguras).

(10.32)

En el supuesto de que se cumple la condici


on A3 antes indicada, el vector x determina de
forma u
nica w a partir de la expresi
on (10.31) y de la relaci
on c = AT w + s. Si la soluci
on
T
del sistema de ecuaciones lineales (10.32) se designa mediante [x(), w(), s()] , para cada
> 0, obviamente x() S y [w(), s()]T T . El duality gap es
g() = cT x() bT w()


cT w()T A x()

= s()T x() = n.
Al tender 0, g() converge a cero, lo que implica que x() y w() convergen a la soluci
on
de los problemas (10.29) y (10.30), respectivamente.
Si para > 0 designamos mediante la curva o camino de las soluciones del sistema de
ecuaciones lineales (10.32), es decir,
)

un > 0 ,
= [x(), w(), s()]T : [x(), w(), s()]T es la solucion de (10.32) para alg
al tender 0 el camino tiende a proporcionar una soluci
on [w , s ]T optima de los
programas primal y dual: (10.29) y (10.30).
El procedimiento primal-dual genera, dada una soluci
on de partida [x0 S, [w 0 , s0 ]T T ],
k
escogiendo adecuadamente unas direcciones de movimiento [dxk , dw
, dsk ]T , y a lo largo de ellas
unas amplitudes de paso k , una sucesi
on de soluciones [xk S, [w k , sk ]T T ] que converge
a la soluci
on de (10.29) y (10.30).

598

Captulo 10. Metodos de punto interior

10.6.1

Direcci
on y amplitud de movimiento

El metodo primal-dual se basa en tomar como direcciones de movimiento las de Newton resultantes de resolver el sistema (10.32). Es decir, recordando los conceptos del captulo 4 referidos
a la resoluci
on de sistemas de ecuaciones no lineales, f : m n , utilizando la aproximaci
on
de f mediante el modelo resultante del desarrollo en serie de Taylor trunc
andolo a partir de
los terminos de segundo orden, esa direcci
on de Newton es el resultado de resolver el sistema
de ecuaciones
J(xk )(x xk ) = f (xk ),
donde J(xk ) es la matriz Jacobiana del sistema en xk , es decir,

J(xk ) =

f1 (x)
f1 (x)

x1
xn
..
..
...
.
.
fn (x)
fn (x)

x1
xn

x= xk

En el caso que nos ocupa, reriendonos al sistema que denen las condiciones de KarushKuhn-Tucker, (10.32), la direcci
on de Newton [dxk , dkw , dsk ]T se determina a partir de la resolucion del sistema

kb
dk

Ax
x
A 0 0

0 AT I dk = AT wk + sk c ,
w

Sk 0 X k
k
k
X k Sk e e
ds
donde Xk = diag(x1k , x2k , . . . , xkn ) y Sk = diag(s1k , s2k , . . . , snk ). Efectuando el producto de matrices resulta el siguiente sistema:
Adxk = tk
T
AT dw
+ dsk = uk

(10.33)

Sk dkx + Xk dsk = v k ,
donde tk = b Axk , uk = c AT wk sk y v k = k e Xk Sk e. Observese que si xk S y
[w k , sk ]T T , entonces tk = 0 y uk = 0.
Para resolver (10.33) se multiplican ambos miembros de la primera ecuaci
on por AXk Sk1
resultando
k
AXk Sk1 AT dw
= AXk Sk1 uk AXk Sk1 dsk .
(10.34)
Despejando dsk de la tercera ecuacion se tiene que
dsk = Xk1 v k Xk1 Sk dkx .
Haciendo Xk1 v k = k Xk1 e Sk e = pk ,
AXk Sk1 dsk = AXk Sk1 pk AXk Sk1 Xk1 Sk dxk = AXk Sk1 pk tk .
Sustituyendo esta expresi
on en (10.34) se obtiene que


dkw = AXk S 1 AT

1 

AXk Sk1 uk pk + tk ,

(10.35)

10.6 El metodo primal-dual

599

donde Xk Sk1 es una matriz diagonal denida positiva. Calculada dkw , dsk y dxk se pueden
obtener f
acilmente a partir de
dks = uk AT dkw
(10.36)
y
dxk

Xk Sk1

p
k

dks

(10.37)

Si xk S y [wk , sk ]T T , las expresiones de dkw , dxk y dks se pueden simplicar quedando:




k
2 AT
dw
= AD
k

1

ASk1 v k

k
dks = AT dw

dxk = Sk1 v k Xk dsk ,


/

2 = Xk S 1 y D
k = diag( xk /sk ).
donde D
k
k
Los componentes de la direccion de movimiento calculados estan relacionados entre s. En
efecto, si se designa
k v k ()
rk () = Xx1 D
y

2 AT
k AT AD
Q=D
k

1

k
AD

k
los componentes de la direccion de movimiento [dxk , dw
, dsk ]T se puede reescribir de la siguiente
manera:
k (I Q) rk ()
dxk = D

k
2 AT
= AD
dw
k

1

k rk ()
AD

1 Qrk ().
dsk = D
k
k AT ),
Como la matriz Q es la de proyeccion ortogonal en el subespacio Im(D
1 dxk + D
k dsk = r k ()
D
k


dxk

T

dsk =

1 dk
D
x
k

T

k dk = 0.
D
s

Si se combinan las ecuaciones (10.35), (10.36) y (10.37) se tiene que




k Pk D
k X 1 e D
k Pk D
kc + D
2 AT AD
2 AT
dxk = k D
k
k
k


1

1

tk ,

(10.38)

2 = Xk S 1 y Pk = ID
k AT AD
2 AT
k es la matriz de proyeccion en ker(AD
k ).
donde D
AD
k
k
k
Si se denen
k Pk D
k X 1 e
dkxcen = k D
k
k

d
= Dk Pk Dk c y
xobj

2 AT AD
2 AT
dxk f ac = D
k
k

1

tk ,

600

Captulo 10. Metodos de punto interior

la ecuacion (10.38) se convierte en


dxk = dxk cen + dxk obj + dxk f ac .
El termino dxk cen se le conoce como direcci
on de centrado, pues no es sino la proyecci
on del
k
vector de empuje 1/x que ayuda a que los puntos que se van obteniendo con el algoritmo
se mantengan alejados de las paredes de la regi
on factible. El termino dxk obj es la direcci
on de
reducci
on de la funci
on objetivo, pues es la proyeccion del negativo del vector gradiente de la
funci
on objetivo del programa primal que lleva a la reducci
on del valor de esta funci
on objetivo.
k
k
Por u
ltimo, el termino dxf ac es la denominada direcci
on de factibilidad pues t es una medida
de la factibilidad del programa primal. Observese ademas que Adckcen = 0 y que Adxk obj = 0,
por lo que estas dos direcciones estan en el subespacio n
ucleo de la matriz A. A la factibilidad
k
del primal s
olo le afecta dxf ac .
En la pr
actica, el metodo primal-dual comienza en una soluci
on arbitraria [x0 , w 0 , s0 ]T ,
0
0
0
0
con x , s > 0. El valor de t puede ser muy grande pues x puede estar muy alejado de ser
factible. Desde ese punto el principal esfuerzo se dedica a encontrar una soluci
on factible lo
mas centrada posible en la regi
on factible. Conseguido esto, el algoritmo tratar
a de conseguir
que tk = 0. De esta forma el termino dxk f ac se anular
a.
10.6.1.1

Amplitud de movimiento

Despues de calculada la direccion de Newton en una iteraci


on k, el algoritmo primal-dual
desplazara la soluci
on a:
xk+1 = xk + pk dxk
wk+1 = w k + dk dkw
sk+1 = sk + dk dsk .
on de
Esto implicara la eleccion de unas amplitudes de paso adecuadas, pk y dk , en la direcci
k+1
k+1
k+1
T
k
Newton, tales que x
S y [w , s ] T . Una manera simple de elegir p y dk es
hacer
1
)
*
pk =
max 1, dxk i /xik
y
1
)
*,
dk =
max 1, dksi /sik
donde < 1, dxk i es el componente i-esimo de dxk , xki el componente i-esimo de xk , dski el i-esimo
de dsk y sik el componente i-esimo de sk .

10.6.2

Ajuste del par


ametro de penalizaci
on y reglas de parada del m
etodo

El par
ametro k debe reducirse de iteraci
on en iteraci
on a n de que al nalizar el procedimiento
se satisfagan las condiciones de complementariedad de holguras
XSe e = 0.

10.6 El metodo primal-dual

601

De esta ecuacion se puede deducir que med = sT x/n. Si esta expresi


on se introduce en las de
a una buena medida del valor del par
ametro en el punto en el que se este.
xk y sk se obtendr
En muchos casos, un valor de k un poco m
as peque
no, por ejemplo,


T

/n,

con < 1, suele acelerar la convergencia del metodo. La eleccion de este u


ltimo par
ametro,
en muchos casos, es crtica pues contribuye en no poca mediada a la r
apida convergencia
del metodo. En las referencias que se dictan al nal de este captulo se puede estudiar c
omo
calcularlo.

10.6.2.1

Reglas de parada del m


etodo

Se utilizan las que venimos aplicando: la factibilidad del primal, la del dual y la complementariedad de holguras.
La factibilidad del primal la mide tk , la del dual uk y la complementariedad de holguras
vk .
Como sntesis de todas las ideas expuestas relativas al metodo primal-dual, en la tabla 10.5
se describe el algoritmo primal-dual de puntos en el interior de la regi
on factible de un programa
lineal.
Ejemplo 10.6 Resolver el mismo problema de los ejemplos 10.4 y 10.5:
minimizar 2x1 + x2
sujeta a

x1 x2 + x3
= 15
x2
+ x4 = 15
x1 , x2 , x3 , x4 0.

El dual de este problema es, como es sabido:


maximizar 15w1 + 15w2
sujeta a

w1
w1 +
w1

+ s1
w2 + s2
+ s3
w2 + s4
s1 , s2 , s3 , s4

= 2
= 1
= 0
= 0
0.

Comencemos tomando como solucion de partida x0 = [1, 1, 1, 1]T , w 0 = [0, 0]T y s0 =


2 son la identidad. El par
[1, 1, 1, 1]T . Las matrices X0 , S0 y D
ametro 0 = 1 . Elegimos
0
= 0,09

602

Captulo 10. Metodos de punto interior

Tabla 10.5
Algoritmo primal-dual de puntos interiores
Paso 0 Inicializaci
on. Hacer k = 0 y denir una soluci
on [x0 , w 0 , s0 ]T tal que x0 > 0 y
0
umeros 1 , 2 y 3 sucientemente peque
nos y un 0 < < 1.
s > 0. Escoger unos n
# k $T k
k
k
k
Paso 1 C
alculos intermedios. Calcular = x
s /n, t = bAx , uk = cAT wk sk ,
2 = Xk S 1 , donde Xk y Sk son matrices
v k = k e Xk Sk e, pk = Xk1 v k y D
k
k
diagonales cuyos coecientes son los xik y ski , respectivamente.
Paso 2 Comprobaci
on de soluci
on
optima. Si
t
< 2
b + 1

k < 1 ,

u
< 3 ,
c + 1

parar. La solucion conseguida es la optima. Si no, ir al siguiente paso.


Paso 3 C
alculo de las direcciones de movimiento. Calcular
1 


#
$
k
2 uk pk + tk
2 AT
A
D
= AD
dw
k
k
k
dks = uk AT dw


2 pk dsk .
dxk = D
k

Paso 4 Comprobaci
on de problema no acotado. Si tk = 0, dxk > 0 y cT dkx < 0 el problema
k
> 0, es el dual el que no esta
primal no esta acotado. Si uk = 0, dsk > 0 y bT dw
acotado. En cualquiera de estos dos casos, parar. Si no seguir con el procedimiento.
Paso 5 C
alculo de la amplitud del paso. Calcular los pasos p y d :
pk =

1
,
max 1, dxki /xik

dk =

1
,,
max 1, dski /sik

y
+

donde < 1, por ejemplo 0,99.


Paso 6 Obtener el nuevo punto. Realizar la traslacion al nuevo punto:
xk+1 xk + p dxk
wk+1 wk + d dkw
sk+1 sk + d dks .
Hacer k k + 1 e ir al paso 1.

10.6 El metodo primal-dual

603

Calculemos t0 , u0 , v 0 y p0 :

 
 1



1
1
1
1
0
14
15
0
0

=
t = b Ax =
0 1 0 1 1
13
15
1

2
1

1 1
u0 = c AT w0 s0 =
0 1
0
0

0  
1
3

1 0
1= 0

0
0
1
1
1
1
1

1
1 0 0 0
1 0

1
0
1
0
0

0 1
v 0 = 0 e X0 S0 e = 0,09
1 0 0 1 0 0 0
1
0 0 0 1
0 0

1 0 0 0
0,91
0,91

0 1 0 0 0,91 = 0,91 .
p0 = X01 v 0 =

0 0 1 0
0,91
0,91
0 0 0 1
0,91
0,91

0
0
1
0

0
1
0,91
1 0,91
0
=

0 1 0,91
1
1
0,91

Iteraci
on 1
Determinemos la direccion de movimiento:
0
dw
=

2 AT
AD
0

1 

2 u0 p0 + t0 =
AD
k

1 0
 1 0 0 0
 1 0 0 0



1 1 1 0 0 1 0 0 1 1 1 1 1 0 0 1 0 0
0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0

0 0 0 1

0 1

0 0 0 1

3
0,91





7,1280
0 0,91 + 14 =
;
1 0,91
13
10,4740

0,91

3
1

0 1
0
ds0 = u0 AT dw
=
1 1
1
0

1


2 p0 d0s = 0
dx0 = D
0
0
0

0
1
0
0

0
0
1
0

0 
10,1280


1 7,1280
3,3460
=

0
10,4740
8,1280
1
11,4740

0
0,91
10,1280
9,2180
0,91 3,3460 2,4360
0

=
.

0 0,91 8,1280 7,2180


1
0,91
11,4740
10,5640

Como t0 > 0 el programa primal no es todava factible por lo que se contin


ua el procedimiento.

604

Captulo 10. Metodos de punto interior

Si se elige un = 0,99 y se calculan las amplitudes de paso se obtiene que:


pk =

max 1, dxk i /xki

* = 1,0

y
dk =

max

1, dksi /sik

* =

1
= 0,086282.
11,4740/0,99

Las nuevas soluciones en k + 1 = 1 son:

1
9,2180
10,2045

1
2,4360 3,4090
x1 x0 + p dx0 =
1 + 1,0 7,2180 = 8,2045 ;
1
10,5640
11,5910
w1

w0

0
d dw

7,1280
0,61462
0
+ 0,086282
=
=
10,4740
0,90442
0

1
10,1280
0,12865

1 + 0,086282 3,3460 = 0,71019 .


s1 s0 + d d0s =

1
8,1280
0,29981
1
11,4740
0,01000
La nueva soluci
on es factible en el primal.
Iteraci
on 2 y sucesivas
Si se sigue iterando, con un valor de = 0,09, las soluciones que se obtienen son las de la
tabla 10.6. El valor de la soluci
on es x = [30, 15, 0, 0]T y el optimo de la funci
on objetivo 45.
Tabla 10.6
Proceso de convergencia del algoritmo primal-dual de puntos interiores aplicado al
ejemplo 10.6
k
2
3
4
5
6

18,78860
21,10035
29,91021
29,99832
29,99999

10.6.3

xk
wk
sk
3,87065 0,08204 11,12935 0,21206 0,72874 0,00129 0,48331 0,52572
6,10117 0,00082 8,89883 -0,50512 0,49004 0,00088 0,00483 1,00371
14,91101 0,00081 0,08899 -0,52090 0,47905 0,00062 0,00005 0,00081
14,99911 0,00079 0,00089 -1,69004 -0,69004 0,00003 0,00000 1,79337
14,99999 0,00000 0,00000 -2,00000 -1,00000 0,00000 0,00000 2,00000

0,00904
0,00854
0,08899
0,79337
1,00000

Soluci
on de partida del m
etodo

Para poder aplicar el metodo se parte de un punto cualquiera [x0 , w 0 , s0 ] n+m+n tal que
x0 > 0 y s0 > 0.

10.6 El metodo primal-dual

605

Si se cumple que Ax0 = b y AT w 0 + s0 = c, entonces x0 S y [w 0 , s0 ]T T por lo que


ese punto se puede utilizar como soluci
on de partida del metodo primal-dual. Si no es as, se
considera el par de programas primal y dual siguiente:
(AP )

minimizar cT x + xn+1

sujeta a

Ax + b Ax0 xn+1 = b
T

AT w 0 + s0 c x + xn+2 =
x 0, xn+1 , xn+2 0,

donde xn+1 y xn+2 son dos variables articiales y y dos n


umeros positivos sucientemente
grandes; y
(AD)

maximizar bT w + wm+1


sujeta a

AT w + AT w 0 s0 c wm+1 + s = c
(b Ax)T w + sn+1 =
wm+1 + sn+2 = 0
s 0, sn+1 , sn+2 0,

donde wm+1 , sn+1 y sn+2 son variables articiales.


Si se escogen unos y tales que
#

> b Ax0


>

$T

w0

AT w 0 + s0 c

T

x0 ,

0
0
0
0
entonces [x0 , xn+1
, xn+2
]T y [w0 , wm+1
, s0 , s0n+1 , sn+2
]T son soluciones factibles de los problemas (AP ) y (AD), respectivamente, donde

x0n+1 = 1

x0n+2 = AT w 0 + s0 c
0
wm+1
= 1

s0n+1 = b Ax0
s0n+2 = 1.

$T

T

x0

w0

En este caso el algoritmo primal-dual que acabamos de analizar se puede comenzar a aplicar
al par (AP )(AD) con una soluci
on de partida factible conocida.

606

Captulo 10. Metodos de punto interior

Teorema 10.1 Sean x y [w , s ]T las soluciones o


ptimas de los problemas primal y dual
originales (10.29) y (10.30). Si adem
as de cumplirse que
#

> b Ax0


>
se supone que

$T

w0

AT w 0 + s0 c

>
#

T

AT w 0 + s0 c

> b Ax0

$T

x0 ,

T

w ,

entonces se verica que:


es el
(i) Una soluci
on factible [
x, x
n+1 , x
n+2 ]T de (AP ) es
optima si y s
olo si x
optimo
del programa primal original (10.29) y x
n+1 = 0.
w
, sn+1 , sn+2 ]T de (AD) es
s
]T
(ii) Una soluci
on factible [w,
m+1 , s
optima si y s
olo si [w,
es el
optimo del programa dual original (10.30) y w
m+1 = 0.
n. Como la solucion x , ademas de optima, tambien es factible del programa
Demostracio

primal original (10.29), si se hace que xn+1


= 0 y xn+2
= (AT w 0 + s0 c)T x , entonces

[x , xn+1 , xn+2
]T es factible en (AP ). Supongamos que [x, xn+1 , xn+2 ]T es factible en (AP ) con
xn+1 > 0, se cumple entonces que


= wT b = w T Ax + b Ax0 xn+1 .
cT x + xn+1

Observese que AT w + s = c, xn+1 > 0 y > (b Ax0 )T w . Entonces

cT x + xn+1
< (c s )T x + xn+1 cT x + xn+1 ,

pues sT x 0. Esto quiere decir que [x, xn+1 , xn+2 ]T no puede ser la soluci
on optima de (AP )

a menos que xn+1 = 0. Ahora bien, debido a la continuidad, [x , xn+1 , xn+2 ]T es una soluci
on
T
optima de (AP ). Por consiguiente, si una soluci
on factible [
x, x
n+1 , x
n+2 ] de (AP ) es optima,
= cT x . Como x
satisface todas las restricciones del problema primal
entonces x
n+1 = 0 y cT x
original, (10.29), debe ser su soluci
on optima.
una soluci
Si, por el contrario, [
x, 0, x
n+2 ]T es una soluci
on factible de (AP ) y x
on optima
T
+ x
de (10.29), el valor de la funci
on objetivo c x
n+1 coincide con el valor mnimo de
cT x + xn+1 , siendo por tanto [
x, 0, x
n+2 ]T una soluci
on optima de (AP ). Esto concluye la
demostracion del punto (i). La demostraci
on del punto (ii) se lleva a cabo de manera similar.

10.6.4

Complejidad computacional del m


etodo

El metodo primal-dual es un algoritmo de complejidad computacional polin


omica. Si se escoge
k
adecuadamente el par
ametro de cada iteraci
on, se verica el siguiente resultado.

10.6 El metodo primal-dual

607

Teorema 10.2 Si la amplitud de paso de cada iteraci


on k < 1, entonces
k

4( )
4( )

k
2
n (1 2 + )
n (1 + 2 ) k

cT xk+1 bT wk+1 = 1 (1 ) k



k+1 / (1 ) k /
k+1
donde
=

cT xk bT wk

si / < k

si k /,

(10.39a)
(10.39b)
(10.39c)
(10.39d)

4( )
.
n (1 + 2 ) + 4( )

Adem
as, si k = 1,

cT xk+1 bT w k+1 = cT xk bT w k

y
k+1 /.
on en
De acuerdo con (10.39b), el duality gap, cT xk bT w k , alcanza una precisi
0

cT x0 bT w 0
O n ln

11

iteraciones. Es decir, el algoritmo termina en, como mucho,




O n ln 0

cT x0 bT w 0
+ O n ln

11

iteraciones.
Para que se cumplan estas predicciones hay varias formas de denir los par
ametros utilizados. En concreto, se pueden hacer, 0 < < 1. Por ejemplo, = 1/2, = 1/4 y
k 4/n k .

Referencias
Todo el material que se expone es este captulo es muy reciente. Sigue esencialmente a Fletcher
[1987], Gill, Murray, Saunders, Tomlin y Wright [1986], Goldfarb y Todd [1989], Bazaraa, Jarvis
y Sherali [1990], Arbel [1993], Padberg [1995], Fang y Puthenpura [1993], Vanderbei [1996] y
Wright [1997]. Tambien es u
til consultar Mehrotra [1992] y Lustig, Marsten y Shanno [1992].
Dos de las direcciones mas interesantes de Internet donde se listan c
odigos de programacion lineal que utilizan tecnicas de puntos interiores son las que siguen.

http://www.siam.org/books/swright/
http://www.princeton.edu/rvdb/LPbook/

608

Captulo 10. Metodos de punto interior

Tambien puede resultar u


til consultar de vez en cuando informaci
on sobre el estado del arte
en la tecnologa de puntos interiores para optimizaci
on. A este respecto, el Argonne National
Laboratory, de los Estados Unidos, mantiene continuamente actualizada informaci
on en la
siguiente direcci
on.

http://www.mcs.anl.gov/home/otc/InteriorPoint/

Ejercicios
10.1. En el espacio eucldeo n-dimensional:
a) Dado un punto del simplex , c
omo se puede saber si es un punto extremo de ? Y si
esta en una arista del mismo? Y si esta en el interior de el? Y si esta en el centro?
b) Probar que el simplex posee n puntos extremos y C(n, 2) aristas.
c) Probar que la distancia desde el centro del simplex a cualquiera de los puntos extremos de
es
n1
R=
n
y que la distancia del centro a cualquiera de los lados del simplex es
r= .
10.2. Probar que la funci
on

n


1
n(n 1)

ln xj

j=1

alcanza su valor maximo en

e
para x .
n
10.3. Si se dispone de dos algoritmos, A y B, el primero para resolver sistemas de ecuaciones lineales
y el segundo para optimizar programas lineales:
x =

a) Como se puede usar el algoritmo A para resolver un problema de programaci


on lineal?
b) Como se puede usar el algoritmo B para resolver un sistema de ecuaciones lineales?
c) Combinando a) y b), cu
al es la conclusion? Por que?
10.4. Considerese el siguiente problema de programacion lineal:
minimizar x1 +
sujeta a

x3 x4 = 0
x1 + x2 + x3 + x4 = 1
x1 , x2 , x3 , x4 0.

a) Dibujar la regi
on factible de este problema. Teniendo en cuenta que el punto [0, 0, 1/2, 1/2]T
es un punto extremo, mediante el metodo simplex, determinar desde ese punto extremo cual
sera la direccion que habra que tomar para mejorar la funci
on objetivo y representarla en
el graco.

Ejercicios

609

b) Si [0,01, 0,01, 0,49, 0,49]T es un punto factible en el interior de la regi


on factible y pr
oximo
al punto extremo de a), utilizar el algoritmo de Karmarkar para determinar la direcci
on de
movimiento desde este punto y representarla en el graco.
c) Utilizar el algoritmo primal de escalado afn para determinar la direcci
on de movimiento
desde [0,01, 0,01, 0,49, 0,49]T y representarla en el graco.
d) Utilizar el algoritmo primal de escalado afn con funci
on barrera logartmica para determinar la direccion de movimiento desde el mismo punto y representarla en el graco.
e) Comparar las direcciones obtenidas en los puntos a) a d). Que comentarios se pueden
hacer al respecto? Por que?
10.5. Volviendo al problema del ejercicio anterior:
a) Obtener el dual del problema planteado y dibujar su regi
on factible.
on factible.
b) Probar que [1, 2]T es un punto en el interior de esa regi
c) Aplicar el metodo dual de escalado afn para determinar la direcci
on de movimiento desde
ese punto y representarla en el graco dibujado.
d) Se dirige esa direccion hacia el optimo del programa dual?
e) Aplicar el algoritmo dual de escalado afn con funci
on barrera logartmica para determinar
la direccion de movimiento desde el punto considerado y representarla sobre el gr
aco de
la region factible.
f) Es mejor la direccion que se calcula en e) que la de c)? Por que?
10.6. Considerese otra vez el ejercicio 4:
a) Partiendo de la soluci
on x = [0,01, 0,01, 0,49, 0,49]T , factible en el programa primal, y de
T
w = [1, 2] , factible en el dual, aplicar el metodo primal-dual y calcular la direcci
on de
movimiento.
b) Representar dx y dw sobre los correspondientes gracos.
c) Que se puede observar en esa representacion?
10.7. Considerese el siguiente problema de programacion lineal:
minimizar cT x
sujeta a

Ax = b
x q,

donde A es una matriz m n de rango completo y q n .


a) Convertir este problema a forma estandar considerando s
olo n variables.
b) Determinar el dual del programa del punto anterior. Probar que cuando q = 0 se obtiene
un programa dual que podemos considerar normal.
c) Teniendo como objetivo desarrollar un procedimiento de puntos interiores para resolver
este problema, y siguiendo la estrategia de transformar un punto en el interior de su regi
on
factible xk , tal que Axk = b y xk > q, en otro centrado en el primer octante de n , es
decir, en e = [1, . . . , 1]T :
i) Determinar la transformacion que nos permite conseguir lo indicado y probar que es
biyectiva entre los conjuntos {x n : x q} y {y n : y 0}.
ii) Escribir el programa lineal resultante en el espacio transformado.

610

Captulo 10. Metodos de punto interior

iii) Proyectar en el espacio transformado el negativo del gradiente de la funci


on objetivo en
el subespacio n
ucleo de la matriz de condiciones. Cual es la direccion de movimiento?
iv) Determinar la direccion de movimiento en el espacio original.
v) Aplicar el metodo primal de escalado afn al problema lineal en forma est
andar de a).
vi) Siguiendo con lo empezado en iii), c
omo se escoge una amplitud de paso apropiada
para seguir conservando la factibilidad del problema?
vii) Deducir una f
ormula para calcular el nuevo punto del proceso iterativo que estamos
desarrollando.
viii) Que reglas se pueden utilizar para parar el metodo?
ix) Como se puede actuar para determinar un buen punto de partida del metodo?
x) Escribir detalladamente el algoritmo completo a que dara lugar la forma de actuar
que se ha seguido en este ejercicio para resolver un problema de programacion lineal
con lmite inferior en sus variables.
10.8. Considerese el algoritmo primal de escalado afn con funci
on barrera logartmica. Defnase como
ucleo de la matriz AXk , ker(AXk ), y pruebese que la direccion
PAXk la proyeccion en el espacio n
de movimiento desde un punto xk esta dada por la siguiente expresi
on:
'
&
Xk c
dk = Xk PAXk
e .
k

Tercera parte
Programacion
entera

611

Captulo

11

LINEAL EN
PROGRAMACION
VARIABLES ENTERAS

N ESTE CAPITULO comenzamos el estudio de una rama de la programacion matematica cuyas areas de aplicacion abarcan muchas disciplinas de gran interes: la
programaci
on entera. La programaci
on entera trata los problemas de maximizar o
minimizar una funci
on de diversas variables sujeta a condiciones de igualdad y/o
desigualdad, restringiendose todas o alguna de esas variables a tomar valores enteros.

Desde que Ralph Gomory, al nal de los a


nos 50 y comienzos de los 60, iniciase sus trabajos
en esta rama de la optimizacion, muchas han sido las mejoras introducidas en sus algoritmos caractersticos y amplsima la diversicaci
on experimentada en su campo de aplicaci
on.
Entre las areas de aplicacion actuales cabe citar: distribuci
on de mercancas, programaci
on
de la producci
on en factoras, secuenciacion de maquinaria en procesos industriales y productivos, asignaci
on de grupos generadores de energa electrica, asignaciones presupuestarias,
localizacion de elementos productivos, dise
no de circuitos electronicos, procesos de manufactura exible, etc. En general, en todas aquellas donde se trata de resolver el problema de asignar
recursos de cualquier tipo s
olo disponibles en cantidades discretas.
Las aplicaciones en el campo de la matematica aplicada tambien son muy variadas: teora
de grafos, combinatoria, l
ogica, etc. De igual manera, otras areas del conocimiento como la
estadstica (an
alisis de datos), biologa molecular, fsica (determinacion de estados de mnima
energa, rayos X), criptografa (dise
no de codigos), cristalografa, etc, incluso la poltica (dise
no
de circunscripciones electorales), se benecian de los avances de esta rama de la programacion
matematica.
613

614

Captulo 11. Programaci


on lineal en variables enteras

La formulaci
on general del problema que estudia la programaci
on entera es la siguiente:
cT x + hT y
maximizar
xZn y p
Ax + Gy b
x, y 0.

sujeta a

(11.1)

Este problema tambien se conoce como programa entero mixto pues algunas de las variables
involucradas son enteras y otras continuas.
An
alogamente a como hacamos en programaci
on lineal, al conjunto S = {x Zn , y
p : Ax + Gy b, x 0, y 0} se le denomina regi
on factible. Un punto [xT , y T ]T S se
T
T
T
denomina factible. Como es l
ogico, al punto [x , y ] S, tal que
cT x + bT y cT x + hT y,

para todo [xT , y T ]T S,

se le denomina solucion optima del problema (11.1).


Un programa en variables enteras tambien se puede denir de la siguiente manera:
max. cT x
xZn
s. a
Ax b
x 0.
Tal programa se conoce tambien como programa entero puro, programa lineal en variables
enteras o, simplemente, programa entero.
Un caso particular de programa entero es aquel en el que las variables s
olo pueden tomar

valores 0 o 1. Otro, el programa combinatorio. Este, en terminos genericos, se puede formular


como sigue:
Dado un conjunto nito N = {1, . . . , n} y un vector n-dimensional
cT =
(
[c1 , . . . , cn ], si para un conjunto F N se dene d(F ) = jF cj y una coleccion de subconjuntos F de N , se trata de
maximizar d(F ).
F F

En lo que sigue de captulo nos centraremos en los aspectos mas pr


acticos de la programacion
entera: en aquellos orientados a resolver de la forma m
as ecaz posible los programas enteros
que se pueden plantear. En programaci
on entera, desgraciadamente, no existe la contrapartida
del metodo simplex de programaci
on lineal: no existe un metodo universal que, partiendo y
sirviendose de las propiedades de convexidad del problema a resolver, llegue a una soluci
on
de este. Esto es as, sencillamente, porque en programaci
on entera la convexidad desaparece,
no pudiendose utilizar por tanto la noci
on de gradiente para caracterizar y buscar el optimo
de un problema, haciendose necesario emplear metodos de resolucion especcos del aspecto
combinatorio de las variables enteras.
Los metodos que analizaremos en este captulo y en el siguiente son los que, en principio,
se pueden aplicar a cualquier problema de programaci
on entera:

11.1 Formulacion y ejemplos de programas lineales en variables enteras

615

El de los truncamientos o planos cortantes de Gomory. Basado en profundos aspectos


teoricos pero que muy a menudo consiguen prestaciones numericas decepcionantes (los
analizamos, no obstante, por contribuir en gran medida a profundizar en el conocimiento
del problema).
Los de enumeracion implcita. Tambien denominados de ramicaci
on y acotamiento
(Branch and Bound), basados en principios muy simples, que se distinguen por ser los
mas ecaces para problemas de todo tipo.
Existen muchos metodos orientados a la resoluci
on de problemas enteros especiales que
aumentan de forma considerable las prestaciones de los generales; todos ellos, no obstante,
estan limitados por los aspectos combinatorios del problema a resolver, por lo que todava
tratar problemas con varios miles de variables conlleva mucho tiempo de ordenador.

11.1

Formulaci
on y ejemplos de programas lineales en variables
enteras

Uno de los problemas que m


as a menudo surge como programa entero es el de la planicaci
on
de nuevo equipamiento industrial, material o de recursos humanos. Pensemos, por ejemplo, en
el problema con que se enfrenta el planicador de la ota de autobuses urbanos (o coches de
metro) de una gran ciudad a la hora de prever las nuevas necesidades de autobuses para unos
a
nos futuros. Si los fabricantes de vehculos los facturan a unos precios determinados, con un
mantenimiento necesario por a
no y unidad, y con una vida u
til dada, el problema de tomar la
decision adecuada de mnimo coste sobre que modelo de autob
us elegir y cu
antas unidades del
mismo adquirir, es un problema tpico de programaci
on entera.
Gesti
on de un servicio hospitalario
En un determinado servicio de asistencia hospitalaria i enfermos estan a la espera de una
operaci
on. Cada enfermo, i, necesita una operaci
on de duraci
on Di . Habida cuenta de la disponibilidad de cirujanos, la suma de las duraciones de las operaciones que pueden tener lugar
cada da del perodo de estudio, j, es igual a Tj . Se trata de minimizar una funci
on econ
omica
suma de las penalizaciones por esperas de los diferentes enfermos (esta penalizacion es una
funci
on lineal creciente de la espera). El problema se formula de la siguiente manera:
max.


i

s. a

cij xij


i

Di xij Tj

xij = 1

para todo j
para todo i

xij = 0 o 1

para todo i y j.

La variable de decisi
on xij es 1 si el enfermo i se le opera el da j y 0 en el caso contrario.

616

Captulo 11. Programaci


on lineal en variables enteras

El problema de la mochila
Este problema, tpico en programaci
on entera, ya lo introdujimos al hablar del problema del
corte de materiales. Se trata de, dado un transportista que dispone de un vehculo con capacidad
de transporte b, en el que se pueden alojar diferentes objetos j de vol
umenes aj y valores cj ,
maximizar el valor de lo transportado en cada viaje. Su formulaci
on es:
max.

cj xj

s. a

aj xj b

xj = 0 o 1.
Planicaci
on de la generaci
on de energa el
ectrica de una empresa o pas
Se trata de planicar c
omo se va a hacer frente al crecimiento de la demanda de energa electrica
durante T a
nos, a partir de uno futuro que se considere oportuno. Si se designa como variables
de decision xlst , la cantidad de potencia instalada que se demanda de un tipo de generaci
on
s nuclear, carb
on, fuel, etc., del nivel de demanda l el a
no t y yist , la cantidad de nueva
potencia que el grupo i del tipo generador s puede aportar el a
no t 100 MW, 250 MW, 500
MW o 1000 MW, y se decide que como funci
on objetivo se ha de considerar la de minimizar
el coste total a valor presente de satisfacer la demanda total de energa electrica los T a
nos del
estudio, la formulaci
on del problema a que da lugar este planteamiento es la que sigue:
min.


i

s. a

T


zlst

T

1
1
1

C
+
Cf yist
cap
is
t
t1
(1 + ) 1
(1 + )
(1 + )t1 is
t1 =t
t1 =t


i

L


T


L


(1 + )T l

Fl1 Cvis zlst

1 =l

yist1 Q0s

para todo s y t,

= Dlt

para todo l y t,

i t1 =1

l=1
l 


zl1 st

l1 =1 s

yist

entera

para todo i, s y t,

donde: Ccapis es el coste de capital de un nuevo grupo generador i del tipo s;


Cfis el coste jo de operacion y mantenimiento del nuevo grupo i del tipo s;
Cvis el coste variable del mismo grupo anterior s;
Dlt la demanda del nivel l el a
no t;
la fracci
on del a
no en la cual el nivel de demanda se sit
ua en l;
Fl
Q0s la capacidad instalada al comienzo del estudio del tipo s;

la tasa de descuento a aplicar en el estudio;


y donde, suponiendo que x1st x2st xLst , se ha hecho zlst = xlst xl1st .

11.1 Formulacion y ejemplos de programas lineales en variables enteras

617

La complejidad del modelo denitivo a adoptar depende del n


umero de tramos en que se
divida la demanda, L, grupos de generaci
on considerados, etc.
Dicotomas
Una dicotoma ocurre habitualmente en programaci
on matematica en problemas donde hay
condiciones del tipo una o la otra. La programaci
on entera es un instrumento adecuado para
resolverlas. Como ejemplo, supongamos que se plantea el problema de colorear un mapa en
television y telecomunicaciones se plantean a menudo variantes de este problema, que se
dispone s
olo de cuatro niveles crom
aticos, y que se trata de hacerlo de forma que dos regiones
contiguas no tengan el mismo color. Sean r = 1, 2, . . . , R las regiones del mapa a colorear y
tr = 0, 1, 2 y 3 la tonalidad que se les puede adjudicar. Se trata pues de que dos regiones, r y
s, cumplan que
tr ts = 0
y que
tr ts 1
o
ts tr 1.
Si se introduce la variable entera rs (0 o 1), las relaciones
tr ts 1 4rs
y
ts tr 3 + 4rs ,
reemplazan la ditocoma.
En terminos mas generales, supongamos que en un programa matem
atico determinado se
han de cumplir simult
aneamente k de las p relaciones siguientes:
G1 (x) 0
G2 (x) 0
.
..
Gp (x) 0,
donde x esta denido en una regi
on de factibilidad S. Las alternativas las podemos reemplazar
por:
G1 (x) 1 L1 0
G2 (x) 2 L2 0
.
..
Gp (x) p Lp 0,
on Gi (x) en S y i , (0 o 1), cumple que
donde Li es un lmite inferior del valor de la funci
1 + 2 + + p = p k.
En el caso del problema de los cuatro colores anterior, k = 1, p = 2. Adem
as, Lr = 4 y
Ls = 4, lo que da como resultado:
tr ts 1 + 4rs 0
ts tr 1 + 4sr 0,
con rs + sr = 1.

618

Captulo 11. Programaci


on lineal en variables enteras

Funci
on objetivo no convexa. El problema de la localizaci
on de almacenes
Un producto se fabrica en unos determinados talleres y se distribuye a j clientes. Para el
on directa por el
perodo de estudio se conoce la demanda de cada cliente Dj . La distribuci
fabricante desde un taller al cliente es demasiado costosa, por lo que se propone disponer de
unos ciertos almacenes, i, mas cerca de los lugares donde se encuentran los clientes. Si xij
es la cantidad de producto depositado en el almacen i que se entrega al cliente j, su coste
de distribuci
on es dij . Por el contrario, si Qi es la cantidad de producto transportada de un
taller al almacen i, siendo all depositada hasta que se distribuya, los gastos correspondientes
al transporte, construcci
on del almacen y stock de esa cantidad de producto, son una funci
on
concava de Qi cuya forma es la de la gura 11.1.
Fi (Qi )

hi
i

gi

ai

bi

Qi

Figura 11.1
Funci
on objetivo c
oncava del problema de la localizaci
on de almacenes
El problema de satisfacer la demanda de los clientes a coste mnimo se formula de la siguiente
manera:


min.
(gi Yi + i yi + (hi i ai )Zi + i zi ) +
dij xij
i

s. a


i


xij = Dj

para todo j

xij = yi + zi

para todo i

yi
zi
Yi + Zi
Yi
Zi

=
=
=

ai Yi
bi Zi
1
0 o 1
0 o 1

para todo i.

La variable Yi = 0 y la Zi = 0 indican que no se construye el almacen i; si Yi = 1 y Zi = 0 se


construye el almacen i pero de un tama
no ai y si Yi = 0 y Zi = 1 se construye el almacen de
un tama
no comprendido entre ai y bi . La condici
on Yi + Zi = 1 expresa el hecho evidente de

11.1 Formulacion y ejemplos de programas lineales en variables enteras

619

que no se puede construir un mismo almacen de dos tama


nos distintos. La cantidad depositada
en cada almacen, Qi , es yi + zi . La condici
on yi ai Yi expresa que si Yi = 0, yi = 0, y que si
Yi = 1, yi ai . La condici
on zi bi Zi expresa lo mismo para el otro tama
no de almacen.
Problema con condiciones no lineales. Optimizaci
on de la operaci
on de un parque
de centrales t
ermicas.
La optimizaci
on de la operaci
on de un parque de centrales termicas para generar energa en
un sistema electrico de generacion y transporte, simplicadamente, se puede plantear como
un problema de optimizaci
on entera con funci
on objetivo lineal o no lineal y con condiciones
lineales y no lineales.
Si la potencia que suministran al sistema los diferentes grupos de las centrales termicas se
designa por pi , y por xi la variable que indica si una central est
a en funcionamiento o no (0 o
1), la formulaci
on del problema apuntado da lugar a:
min.

(ai xi + i pi )

s. a

g(p) 0
mi xi pi Mi xi
xi = 0 o 1,

donde la funci
on vectorial g(p) es una expresi
on (no lineal) de las leyes de Kirchho. La funci
on
de costes de cada unidad termica en relacion con la potencia que puede suministrar tiene la
forma que se indica en la gura 11.2. El coeciente ai corresponde a una producci
on nula (s
olo
perdidas calorcas); mi es la potencia de mnimo tecnico de generacion por debajo de la cual
la unidad no se acopla a la red de transporte y Mi la maxima potencia que puede suministrar.

ci

ai

mi

Mi

pi

Figura 11.2
Funci
on de costes de un grupo de una central termica

620

Captulo 11. Programaci


on lineal en variables enteras

11.1.1

Problemas de estructura especial

El problema del representante de comercio


Un representante de comercio parte de una ciudad 0 debiendo realizar un periplo de visitas
que comprenda las ciudades 1, 2, . . . , n, las cuales debe visitar una vez y nada m
as que una,
regresando a su punto de origen 0. La distancia entre dos ciudades i y j es dij > 0. El problema
consiste en determinar el itinerario de visitas de las ciudades de tal forma que se minimice la
distancia total recorrida.
Si adem
as de atribuir el n
umero 0 a la ciudad de origen se le atribuye el n + 1, el problema
consiste en visitar, partiendo de la ciudad 0, las n restantes ciudades y terminar en n + 1.
Para formular correctamente el problema se introducen las variables binarias xij , i =
0, 1, . . . , n, j = 1, . . . , n + 1, de tal forma que xij = 1 si el representante va de la ciudad
i a la j, y xij = 0 en caso contrario. Garantizar que cada ciudad s
olo se visita una vez (excepto
la 0) se puede conseguir introduciendo la siguiente condici
on en el problema:
n


j = 1, . . . , n + 1, i = j.

xij = 1

i=0

De igual forma, asegurar que cada ciudad (excepto la n + 1) se abandona una sola vez se
consigue introduciendo la condici
on
n+1


xij = 1

j = 0, 1, . . . , n, i = j.

j=1

Estas condiciones no evitan, sin embargo, que puedan darse los bucles como los que se indican
en la gura 11.3, donde la soluci
on es x01 = x12 = x26 = 1, x34 = x45 = x53 = 1 y xij = 0
para las dem
as variables. Para eliminar estos bucles se a
naden a la formulaci
on del problema
las siguientes condiciones:
i j + (n + 1)xij n,

i = 0, 1, . . . , n, j = 1, . . . , n + 1, i = j,

donde i es un n
umero real asociado a la ciudad i.
0
6

3
4

Figura 11.3
Bucles en el problema del representante de comercio
Para comprobar que una soluci
on que contenga bucles no satisface estas u
ltimas condiciones,
consideremos un bucle cualquiera que no contenga la ciudad origen/destino. Si sumamos las

11.1 Formulacion y ejemplos de programas lineales en variables enteras

621

desigualdades correspondientes a las variables xij = 1 alrededor del bucle, los i j se hacen
cero quedando la desigualdad (n + 1)N nN (donde N es el n
umero de arcos en el bucle), lo
que constituye una contradicci
on. En la gura 11.3, para el bucle 3 4 5, las condiciones
son 3 4 + 6 5, 4 5 + 6 5 y 5 3 + 6 5. Si se suman todas se llega a que
18 15, lo cual es imposible evidentemente.
Por el contrario, para comprobar que las desigualdades referidas se satisfacen cuando no
hay bucles, denamos 0 = 0, n+1 = n + 1 y i = K si la ciudad i es la que hace el n
umero k
de las visitadas. Cuando xij = 1, se tiene que i j + (n + 1) = K (K + 1) + (n + 1) = n.
Ademas, como 1 i n + 1 (i = 1, . . . , n + 1), la diferencia i j es siempre n (para
todo i y j), satisfaciendose por consiguiente las condiciones cuando xij = 0.
En resumen, la formulaci
on completa del problema del representante de comercio es la
siguiente:
min.

n n+1


i=0

dij xij

j=1

j=i

s. a

n

i=0
n+1


xij = 1

j = 1, . . . , n + 1, i = j

xij = 1

i = 0, 1, . . . , n, i = j

j=1

i j + (n + 1)xij n i = 0, 1, . . . , n, j = 1, . . . , n + 1, i = j
xij = 0 o 1
i = 0, 1, . . . , n, j = 1, . . . , n + 1, i =
 j,
donde x0 n+1 = 0 (pues xij = 0 para i = j).
Como se puede intuir, muchos programas de programaci
on entera (en particular aquellos
en los que las variables son binarias) se pueden formular como problemas de ujos en redes.
En concreto, el del representante de comercio se puede referir a un conjunto de nudos
V = {0, 1, . . . , n} y a otro de arcos E. Los nudos representan las ciudades que hay que visitar
y los arcos pares ordenados de ciudades entre las que es posible viajar. Para un arco (i, j) E,
dij es la distancia entre las ciudades i y j. Las variables del problema, xij , seran las mismas de
antes aunque en este caso indicar
an si hay o no ujo en el arco (i, j). Las condiciones de que a
cada ciudad se llegue una sola vez y tambien se salga una sola vez las plasman las expresiones:


xij = 1

para j V

{i:(i,j)E}

xij = 1

para i V .

{j:(i,j)E}

Los bucles se eliminan observando que para cualquier1 U V , con 2 |U | |V | 2, de existir


alguno, se viola al menos una de las condiciones


xij 1.

{(i,j)E:iU,jV \U }
1

|X| indica el cardinal n


umero de elementos del conjunto X.

622

Captulo 11. Programaci


on lineal en variables enteras

El problema se formula de la siguiente manera:




min.

dij xij

(i,j)E

s. a

xij

= 1 para j V

xij

= 1 para i V

{i:(i,j)E}

{j:(i,j)E}

xij 1

{(i,j)E:iU,jV \U }
x B|E| .

Problemas te
oricos de grafos. Set covering
Se plantea sobre un grafo no dirigido trat
andose de encontrar el subgrafo que contiene el mnimo
n
umero de arcos tal que de cada nudo del grafo parta o llegue al menos un arco perteneciente
al subgrafo. Su formulaci
on como programa entero es la siguiente:
min. cT x
s. a Ex e
x Bn .
La matriz E tiene todos sus elementos igual a 0 o 1.
Si las condiciones de desigualdad son de estricta igualdad, al problema se le conoce como
el del set partitioning.
Problemas te
oricos de grafos. Simple matching
Se trata de, sobre un grafo no dirigido, encontrar el subgrafo que contiene el m
aximo n
umero
de arcos tal que 2 arcos del subgrafo no incidan a la vez en un mismo nudo del grafo. Su
formulaci
on como programa entero es la siguiente:
min.

xj

s. a Ex e
xj = 0 o 1,

11.1.2

j = 1, 2, . . . .

Modelizaci
on con variables binarias

Hasta ahora hemos presentado algunos problemas que dan lugar a la formulaci
on de programas enteros tanto con variables binarias como con enteras en general. Dado que existe cierta
especializacion en programaci
on entera referida a variables binarias, algunas veces se recurre
a convertir un programa entero con variables enteras generales a otro con variables binarias
exclusivamente. Para poder hacerlo basta tener en cuenta el siguiente resultado.

11.2 Resolucion graca de programas enteros

623

Teorema 11.1 Sup


onganse programas enteros puros o mixtos en los que las variables enteras xj uj . Esos programas son equivalentes a otros puros o mixtos con variables binarias.
n. Reemplazar cada xj por:
Demostracio
(i)

(uj
tkj , donde las tkj son variables 0 o 1, y omitir los lmites xj uj (dado que los
(uk=1
j
k=1 tkj

pueden, a lo sumo, ser uj );

o por,
(ii)

(lj

k
k=0 2 tkj , donde las
(lj
k
lj +1 1
k=0 2 = 2

tkj son variables 0 o 1 y lj es el entero mas peque


no tal que2
(lj
uj , y conservar las condiciones xj = k=0
2k tkj uj .

El resultado del teorema se obtiene inmediatamente pues cualquiera de las sustituciones permite
a las variables xj tomar cualquier valor entero entre 0 y uj y todo entero siempre se puede
escribir en base de numeraci
on 2.
Ejemplo 11.1 Si la variable entera xj tiene un lmite superior uj = 107, entonces en (ii)
lj = 6, pues
6


2k = 27 1 107

k=0

5


2k = 26 1 < 107.

k=0

Por consiguiente, xj se debe reemplazar por


6


2k tkj = t0j + 2t1j + 4t2j + 8t3j + 16t4j + 32t5j + 64t6j ,

k=0

debiendose mantener la condici


on

(6

k
k=0 2 tkj

107.

Observese como crece el tama


no del problema al hacerlo uj . Evidentemente, aun cuando
la ventaja de resolver un programa entero en variables binarias sea mucha, en muchos casos
puede no resultar rentable modelizarlo as.

11.2

Resoluci
on gr
aca de programas enteros

Recordemos de la programacion lineal que las condiciones del programa entero


cT x + hT y
maximizar
xZn y p
sujeta a

Ax + Gy b
x, y 0,

en el caso en que x n y y p , denen un politopo (poliedro si es acotado) en uno


de cuyos puntos extremos o vertices la funci
on objetivo cT x + hT y alcanza el maximo. En
La suma de la serie geometrica nita a0 + a1 + + aN es (a0 a0 r N +1 )/(1 r), donde r =
i = 0, 1, . . . , N 1.
2

ai+1
,
ai

624

Captulo 11. Programaci


on lineal en variables enteras

general, desafortunadamente, las variables xj es ese punto extremo no tienen por que ser
enteras. Como el politopo contiene todas las soluciones en las que x es entero, gracamente
se puede determinar esa solucion hallando primero el punto extremo optimo del problema
considerando todas las variables como si fuesen continuas y luego, desplazando el hiperplano
cT x + hT y hacia dentro del politopo, encontrando el primer punto [xT , y T ]T en el que x sea
entero.
Ejemplo 11.2 Resuelvase el problema de programaci
on entera
max.
s. a

3
2 x1

+ x2

x1 + 4x2 16
x1 + x2 10
5x1 + x2 36
x1 , x2 0
x1 y x2 enteras.

La regi
on factible de este problema, sin tener en cuenta la condici
on de que las variables
han de ser enteras, es el poliedro convexo que generan los puntos extremos 0, A, B, C y D de
la gura 11.4. El valor m
aximo de la funci
on objetivo en este poliedro se alcanza en C. Dado,
sin embargo, que la autentica regi
on factible la constituyen los puntos interiores enteros de ese
poliedro, el m
aximo del problema se alcanza en el punto x = [6, 4]T .
x2

x1 + x2 10

x1 + 4x2 16

5x1 + x2 36
f. O.

D
x1

Figura 11.4
Region factible del problema del ejemplo 11.2

11.3

Propiedades de la regi
on factible de los programas enteros

El conjunto o regi
on factible de un programa entero, S, lo denen los puntos enteros del politopo
n
P = {x  : Ax b, x 0}; es decir, S = P Zn . Como se recordara del teorema 9.3

11.4 Algunas relajaciones de la formulaci


on de programas enteros

625

de la p
agina 531, un politopo se puede expresar como una combinaci
on lineal convexa de sus
puntos extremos y una combinaci
on lineal no negativa de sus direcciones extremas.
La envoltura convexa de S, expresada recordemos por Co(S), es el conjunto de puntos que
pueden expresarse como combinacion convexa nita de puntos de S. Es decir:


Co(S) =

x n : x =


i=1

i xi ,

i = 1, i , i 0 ,

i=1

donde x1 , x2 , . . . es un conjunto nito de puntos de S. Si S es nito, por tanto, su envoltura


convexa, Co(S), es un poliedro cuyos puntos extremos constituyen un subconjunto de S. Este
resultado se cumple en tanto y cuanto P = {x n : Ax b, x 0} sea un politopo racional:
un politopo en el que los coecientes de A y los elementos de b son racionales.
Teorema 11.2 Si P es un politopo racional y S = P Zn = , la envoltura convexa de
S, Co(S), es un politopo racional cuyos puntos extremos constituyen un subconjunto de S
y cuyas direcciones extremas son las direcciones extremas de P .
Este teorema es inmediatamente extensible a la region factible de un programa entero mixto
con par
ametros racionales.
El teorema 11.2 tiene unas consecuencias muy interesantes. En primer lugar nos dice que el
programa entero max. {cT x : x S}, donde S = P Zn , se puede formular como un programa
lineal de la forma
max. {cT x : x Co(S)}.
(11.2)
Aun cuando interesante en s misma, esta apreciacion sin embargo no permite vislumbrar
ning
un procedimiento para resolver m
as comodamente el programa entero original, pues para
resolver el lineal que se deriva de ella habra que generar las desigualdades correspondientes a
la denici
on de Co(S), siendo el n
umero de estas, probablemente, extremadamente grande. En
lo que sigue nos centraremos brevemente en la forma de construir ese Co(S), o mejor dicho,
un politopo Q, Co(S) Q P , tal que la soluci
on del problema max. {cT x : x Q} sea la
soluci
on optima del programa lineal (11.2).
El solo hecho de saber que un programa entero se puede reformular como uno lineal permite
concluir que, si el programa entero no es ni no acotado ni no factible, entonces tiene una soluci
on
as
optima; en otras palabras, el m
aximo de cT x se alcanzara en un punto extremo de S, y m
concretamente en un punto extremo de Co(S).

11.4

Algunas relajaciones de la formulaci


on de programas enteros

La idea de las relajaciones consiste en resolver un programa entero a traves de la determinacion


de cotas superiores, que designaremos por zP E , del valor optimo de la funci
on objetivo de dicho
programa entero. El c
alculo de estas cotas superiores es esencial en programacion entera pues
la forma m
as elemental de determinar el caracter optimo o no de una soluci
on factible x es
encontrar un w zP E tal que w = cT x. En terminos pr
acticos, cuando w = cT x + , > 0,
se habr
a establecido que la soluci
on que determine esa w, x, estara pr
oxima a la real.

626

Captulo 11. Programaci


on lineal en variables enteras

La idea b
asica que preside las relajaciones es sustituir el programa entero original por otro
mas facil de resolver subproblema en el que se relajan de ah el concepto alguna o
algunas de las condiciones, obteniendose de su resolucion una cota de la funci
on objetivo del
programa original. Mediante un proceso iterativo que integre estas relajaciones y la resoluci
on
de los subproblemas, se va acotando cada vez mas la funci
on objetivo deseada hasta que se
llega a la soluci
on nal.
Una relajaci
on del programa entero
)

max. cT x : x S

(P E)

la constituye cualquier subproblema de la forma


max. {zP R (x) : x SP R }

(P R)
con las propiedades siguientes:

SP R S

(R1)
y

cT x zP R (x)

(R2)

para x S.

Las propiedades (R1) y (R2) se escogen con el siguiente criterio.


Proposici
on 11.1 Si el problema (PR) no es factible, tampoco lo es (PE). Si (PR) es
factible, los valores de las funciones objetivo cumplen que zP E zP R .

11.4.1

Relajaci
on lineal

La relajaci
on m
as evidente que se puede utilizar en un programa entero resulta de cancelar la
condici
on de que las variables han de ser enteras. Si el conjunto o regi
on factible del programa
entero es S = P Zn , la relajaci
on lineal es
)

(P L)

max. cT x : x P ,

un el teorema 11.2 de la p
agina 625, si S = , las
donde P = {x n : Ax b, x 0}. Seg
direcciones extremas de P y Co(S) coinciden.
Proposici
on 11.2 Si (PL) es no acotado, el programa entero (PE) es no factible o no
acotado.
A cada programa lineal se le pueden asociar innitas relajaciones lineales pues para cada
politopo Q Co(S), una relajaci
on lineal la constituye el programa
)

(P L(Q))

max. cT x : x Q .

Mejorar la funci
on objetivo de un programa entero que dene una soluci
on, e incluso obtener
una soluci
on inicial, en la que las variables que han de ser enteras lo sean, requiere hacer
algo mas. Veamos a continuacion c
omo se pueden denir desigualdades que poder a
nadir a la
relajaci
on lineal con el n de ir acotando m
as y mas esa funcion objetivo y obtener la soluci
on
deseada.

11.4 Algunas relajaciones de la formulaci


on de programas enteros

11.4.1.1

627

Generaci
on de desigualdades

Denici
on 11.1 Dado un politopo P = {x n : Ax b}, una desigualdad T x 0 (o
T
T
[ , 0 ] ) se dice v
alida en P , si T x 0 para todo x P .
alida si y solo si P esta en el semiespacio
Observese que [ T , 0 ]T es una desigualdad v
n
T
cerrado {x  : x 0 } o, lo que es equivalente, si y s
olo si la soluci
on de max. { T x :
x P } 0 .
Denici
on 11.2 Si T x 0 es una desigualdad v
alida en un politopo P = {x n :
Ax b}, al conjunto F = {x P : T x = 0 } se le denomina cara de P . La desigualdad
se dice representa a F . Una cara se dice apropiada si no es el conjunto vaco y se cumple
que F = P .
La cara F representada por [ T , 0 ]T no es el vaco si y solo si la soluci
on de max. { T x :
x P } = 0 . Cuando F no es el vaco se dice que [ T , 0 ]T soporta a P .
Denici
on 11.3 Una cara F del politopo P = {x n : Ax b} es una faceta si
dim(F ) = dim(P ) 1.
En el conjunto S = P Zn una desigualdad v
alida en S lo es en Co(S). Dadas dos desigualdades v
alidas, T x 0 y T x 0 , no siendo una m
ultiplo escalar de la otra, se dice
T
T
que x 0 es mas fuerte que, o domina, a x 0 , si , 0 0 y al menos una
de las desigualdades se cumple estrictamente. Una desigualdad v
alida maximal es aquella que
no esta dominada por ninguna otra en S. El conjunto de desigualdades maximales contiene
todas aquellas desigualdades que denen facetas de Co(S) (pero no todas las desigualdades
maximales denen facetas).
A continuaci
on expondremos tres metodos para generar desigualdades v
alidas en S. Lo que
se persigue con esto es formular el programa entero que se trata de resolver como un programa
lineal de acuerdo con max. {cT x : x Co(S)}. Observese que cualquier combinaci
on lineal no
negativa de desigualdades v
alidas en S es tambien v
alida en S.
Redondeo entero
Recordemos que a, a , designa el m
aximo n
umero entero menor o igual que a.
Proposici
on 11.3 Si T x 0 es una desigualdad v
alida en S Zn , siendo un vector
T
entero, x 0  es una desigualdad v
alida en S.
n. Para todo x S, T x es un n
Demostracio
umero entero y por consiguiente menor o igual
que el maximo n
umero entero menor o igual que 0 .
La generacion de desigualdades que propicia el redondeo entero se representa en la guon lineal de las condiciones Ax b,
ra 11.5. Supongamos que T x 0 es una combinaci

628

Captulo 11. Programaci


on lineal en variables enteras

donde es un vector entero y 0 un n


umero racional, y el m
aximo com
un divisor de los elementos de es 1. Redondear 0 equivale a desplazar el hiperplano T x = 0 hacia dentro de
la regi
on Ax b hasta que se encuentre un punto entero y. Este punto y, sin embargo, no
tiene por que estar en la region factible por lo que el hiperplano T x = 0  no tiene por que
contener ning
un punto de S.
x2

2
x1 + x2 =
x1 + x2 = 6

76
11

x1

Figura 11.5
Generacion de desigualdades por redondeo entero
Ejemplo 11.3 Sea S = {x Zn : Ax b, x 0} con

1 2

5 1
A=
2 2

y b = 20 .
7

(11.3)

En la gura 11.6 se puede ver el politopo que denen las condiciones Ax b y x 0 (el
exterior), los puntos enteros factibles y Co(S) (el politopo interior). Se tiene que


S=

 

La envoltura Co(S) = {x : x =


 

 

 

 

2
2
3
3
3
4
,
,
,
,
,
2
3
1
2
3
0


(6


= {x1 , x2 , . . . , x6 } .

i 0 para i = 1, . . . , 6 y

i=1 i xi ,

1
1
3
3
3
=
+
2
1
3
2
2

 

 

2
2
3
,
,
2
3
3

i=1 i

1
1
3
2
4
=
+
,
1
2
0
2
2

Co(S) es el poliedro denido por los cuatro puntos extremos




(6

4
.
0

= 1}. Como

11.4 Algunas relajaciones de la formulaci


on de programas enteros

629

x2

3
Co(S)
2
x1 + x2 =
x1 + x2 = 6

76
11

x1

Figura 11.6
Region factible del problema del ejemplo 11.3

En este caso es muy sencillo conseguir una representacion de Co(S) mediante desigualdades;
estas son:
2
x2 3
x1 x2 4
3x1 + x2 12.
x1

Si se combinan las desigualdades Ax b de (11.3), con pesos respectivos


obtiene la desigualdad v
alida en S
x1 + x2

4
3
11 , 11

y 0, se

76
.
11

76
Como no existen puntos de Z2 tales que x1 +x2 = 11
, ese hiperplano una recta en este caso
se puede desplazar hacia dentro hasta que encuentre un punto de Z2 que cumpla x1 + x2 6,
la cual es una desigualdad v
alida maximal en S. En este ejemplo, por casualidad, la recta
x1 + x2 = 6 contiene un punto de S.

Desigualdades disyuntivas
Se trata de combinar dos desigualdades, cada una de las cuales es v
alida en una parte de S,
para conseguir otra v
alida en S, aunque menos fuerte.

630

Captulo 11. Programaci


on lineal en variables enteras

Proposici
on 11.4 Sup
ongase que S = S 1 S 2 y que i x 0i es una desigualdad v
alida
i
n
en S  , i = 1, 2. Entonces
n


min j1 , j2 xj max 01 , 02

j=1

es v
alida en S.
En particular, considerense las dos siguientes desigualdades validas en S, con xk Z:
n


(a)

j xj (xk ) 0

j=1

y
n


(b)

j xj + (xk 1) 0 ,

j=1

donde 0, 0 y es un n
umero entero. Observese que (a) indica que
n


(c)

j xj 0

j=1

es valida para x S, con xk , y (b) que (c) es valida para x S con xk + 1. De aqu
que (c) sea valida en S pues como xk Z, xk o xk + 1.
Ejemplo 11.4 Un ejemplo de desigualdades disyuntivas se describe en la gura 11.7. En este
caso S = P Z2 y


1 1
5
P = x 2 : x1 + x2 , x1 + x2 , x1 2, x1 , x2 0 .
2 2
4
Las dos primeras condiciones se pueden reescribir de la siguiente manera:
1
x1 + x2
4
1
x1 + x2 +
4

3
1
(x1 0) ,
4
2
3
1
(x1 1) .
4
2

Usando la disyunci
on x1 0 o x1 1 se llega a la desigualdad 41 x1 + x2
2
xS =P Z .

1
2,

v
alida en

11.4 Algunas relajaciones de la formulaci


on de programas enteros

631

x1 + x2 1/2

x2
1

1/4x1 + x2 1/2

1/2x1 + x2 5/4

x1

Figura 11.7
Ilustraci
on del ejemplo 11.4 sobre desigualdades disyuntivas
Desigualdades superaditivas
Denici
on 11.4 Una funci
on real F , con dominio de denici
on D m , 0 D y F (0) = 0,
se denomina superaditiva en D, si F (d1 ) + F (d2 ) F (d1 + d2 ) para todo d1 , d2 , d1 + d2 D.
Denici
on 11.5 Una funci
on real F , con dominio de denici
on D m , 0 D y F (0) = 0,
se denomina no decreciente en D, si dados dos d1 , d2 D, tales que d1 < d2 , se cumple que
F (d1 ) F (d2 ).
Sean aj , j = 1, . . . , n, los vectores columna de la matriz A. Si la funci
on F es superaditiva
no decreciente y x S = {x Zn : Ax b, x 0}, entonces
n


F (aj )xj

j=1

n


F (aj xj ) F

j=1

n


aj xj F (b).

j=1

Proposici
on 11.5 Si la funci
on F es superaditiva no decreciente en m , entonces
n


F (aj )xj F (b)

j=1

es una desigualdad v
alida en S = {x Zn : Ax b, x 0} .
Ejemplo 11.5 Las funciones
(i) F (d) = ud para u m , u 0, descrita3 en la gura 11.8-(1) para m = 1 y u = 1, y
(ii) F (d) = d + (fd )+ /(1 ), donde 0 < < 1, fd = d d, y x+ = max {x, 0}
(representada en la gura 11.8-(2) para = 1/2),
3

Observese que F es la funci


on que caracteriza el redondeo entero.

632

Captulo 11. Programaci


on lineal en variables enteras

se pueden usar para generar desigualdades v


alidas en problemas de programaci
on entera
mixta.
F (d) = d

F1/2 (d)
2

3
2

1
1

-3

-2

-1

-2 5
3

-1 2
3

1
3

4
3

-1
-1
-2
-3

-2

(1)

(2)

Figura 11.8
Funciones del ejemplo 11.5 para generar desigualdades v
alidas
Aunque la relajaci
on m
as habitual en programaci
on entera es la lineal, a continuaci
on
estudiaremos brevemente otras tambien frecuentemente usadas.

11.4.2

Relajaci
on lagrangiana

Muy a menudo las condiciones Ax b de un programa entero se pueden dividir en dos


conjuntos, A1 x b1 y A2 x b2 , donde la matriz A1 tiene m1 < m las, de tal forma que el
programa relajado
max. {cT x : x Q},

donde Q = {x Zn : A2 x b2 , x 0},

resultante de dejar de considerar las condiciones A1 x b1 , es mucho mas facil de resolver. Es


decir, el problema suele constar de un conjunto de condiciones difciles y de otro formado por
otras menos difciles o que plantean menos dicultades para tenerlas en cuenta. Caso tpico de
esta situacion la constituye aquel en el que las condiciones A2 x b2 son de red.
El proceder de esta forma separando las condiciones en dos conjuntos de ellas conduce a la
siguiente familia de relajaciones:
RL()

max. {z(, x) : x Q},

donde z(, x) = cT x + T (b1 A1 x) y m1 , 0. Al problema RL() se le denomina


relajaci
on lagrangiana del programa entero original con respecto a las condiciones A1 x b1 .

11.4 Algunas relajaciones de la formulaci


on de programas enteros

633

Observese que T (b1 A1 x) 0 para todo x S, pues 0, por lo que z(, x) cT x para
todo x S. El problema RL(0), que se obtiene al no considerar las condiciones A1 x b1 ,
proporciona un primer lmite superior de la funci
on objetivo del programa original. Escogiendo
un = 0, sin embargo, se puede determinar un lmite mejor de la funci
on objetivo deseada. El
problema de determinar aquella que de el menor lmite superior de la funci
on objetivo del
programa entero en su conjunto origina el planteamiento de un programa dual que es el que
se resuelve realmente.

11.4.3

Descomposici
on y separaci
on de costes

Esta forma de abordar el problema consiste en descomponerlo en dos a partir de la observaci


on
de que el programa entero original es equivalente, en un espacio 2n-dimensional, al siguiente:
)

max. c1 x1 + c2 x2 : x1 Q1 , x2 Q2 , x1 x2 = 0 ,
donde Qi = {xi Zn : Ai xi bi , xi 0} para i = 1, 2 y c1 + c2 = c. Tomandose la relajaci
on
1
2
lagrangiana de este problema con respecto a las condiciones x x = 0, se obtienen los
subproblemas
)

z 1 () = max. (c )T x1 : x1 Q1

y z 2 () = max. T x2 : x2 Q2 ,

donde n . El vector de multiplicadores, , no esta restringido dado que x1 x2 = 0 es


un conjunto de condiciones de igualdad. Resolviendo estos subproblemas se obtiene un valor
que acota la funci
on objetivo del programa entero. Ese valor es:
zP E z 1 () + z 2 (),
para todo n .

11.4.4

Descomposici
on de Benders

Si el metodo de la relajaci
on lagrangiana se puede ver como el que trata condiciones complicadas, este es en alguna medida el dual para variables complicadas. En particular, si se considera
el programa entero mixto
(P EM )

max. cT x + hT y
s. a

Ax + Gy b
x, y 0
x X Zn ,

y p ,

las variables enteras x son las que complican el problema pues de lo contrario este sera un
simple programa lineal; visto de otra manera, las variables y complican un problema entero
puro al convertirlo en uno mixto.
El procedimiento de Benders (1962) reformula el problema (PEM) en uno en Zn , esto
es, en uno en el que solamente se considera una variable continua. Su formulaci
on normalmente

634

Captulo 11. Programaci


on lineal en variables enteras

contiene una cantidad importante de condiciones lineales aunque al no estar muchas de ellas
activas en la soluci
on optima se pueden considerar s
olo temporalmente.
Para llegar a esa formulaci
on, sup
ongase que las variables enteras x se jan en un determinado valor. El programa lineal resultante es
max. hT y

P L(x)

Gy b Ax
y 0

s. a

y p ,
y su dual

min. uT (b Ax) : u Q ,
donde Q = {u m : uT G h, u 0}. La ventaja de trabajar con el dual es que sus
regi
on factible, Q, es independiente de x. Si Q = , el programa lineal, P L(x), o no es factible
o tiene una soluci
on no acotada. Si Q = , el programa lineal P L(x) no es factible o tiene
optimo. En particular P L(x) no es factible si y solo si Q tiene una direcci
on extrema v tal que
T
T
v (b Ax) < 0; de no ser as, el valor optimo de P L(x) es u (b Ax), donde u es un punto
extremo de Q.
Si v j , para j J, son la direcciones extremas de Q y uk para k K, los puntos extremos
de Q, cuando Q = , el programa entero mixto, P EM , se puede reformular de la siguiente
manera:
&
 
'
T
k
T
(b Ax)
,
max. c x + min u
x
kK
#

$T

v j (b Ax) 0 para j J,
x X,
formulaci
on de Benders del problema entero mixto P EM .
s. a

Teorema 11.3 El programa entero mixto


max. cT x + hT y

(P EM )

Ax + Gy b
x, y 0

s. a

x X Zn ,

y p ,

se puede reformular de la siguiente manera:


max.


s. a

cT x + uk

vk

T

T

(b Ax)

(b Ax) 0

x X,

.

para k K,

para j J,

Ejercicios

635

Referencias
Existen varios libros recientes muy buenos sobre programaci
on entera. Cabe destacar Nemhauser y Wolsey [1988] y [1989], Schrijver [1986] y Salkin y Mathur [1989]. Para este captulo
hemos seguido a Nemhauser y Wolsey [1988], Schrijver [1986] y Salkin [1975].
Entre las referencias cl
asicas de programacion entera, adem
as de las mencionadas, estan
Salkin [1975], Garnkel y Nemhauser [1972], Hu [1970] y Greenberg [1971].

Ejercicios
11.1. Una empresa produce un determinado producto en m fabricas distintas y satisface con ello la
demanda de n clientes (la demanda de estos es dj ). Si una de esas fabricas funciona (o debe
construirse), su coste de operacion/construccion es fi 0, produciendo Mi > 0 unidades de
producto. El coste de enviar una unidad de producto de la f
abrica i al cliente j es gij .
Formular el problema de determinar cu
antas fabricas debe tener disponibles esa empresa de
tal forma que se satisfaga la demanda de los clientes a mnimo coste.
11.2. Probar que en el problema planteado en el ejercicio anterior las desigualdades que se denen
implican que las cantidades a transportar de las f
abricas a los clientes deben ser enteras.
11.3. Resolver el problema del ejercicio 1 para el caso de dos fabricas y tres clientes cuyos datos se
indican a continuaci
on.
d1 d2 d3
f1 f2
gij 1 2 3
1 5 7 6
150 170 260
90 100
2 5 6 7
11.4. Reformular el problema del ejercicio 1 para tener en cuenta las siguientes condiciones:
a) Solo se pueden abrir un conjunto de f
abricas dado.
b) El coste de abrir una f
abrica consta de una parte ja, Ki , y otra dependiente de su produccion.
c) Las fabricas pueden estar separadas por regiones de interes estrategico, funcion del n
umero
de clientes, debiendo cada region k tener al menos lk fabricas abiertas.
d) Se dispone de un total de F pesetas para construir fabricas.
11.5. Considerese la variante siguiente del problema de la mochila:

cj xj
max.
j

s. a

aj xj b

xj 0 y entera,
donde cj es el valor del objeto j, aj su peso, b la capacidad de transporte de la mochila y xj el
n
umero de objetos a transportar en ella.
a) Si no se requiere que xj sea entera, resolver el problema cuyos datos son
cj
aj

8
4

10
2

9
7

8
3

6
5

2
1

7
3

5
5

636

Captulo 11. Programaci


on lineal en variables enteras

y b = 23. Sugerencia: hacer zj = aj xj , j = 1, . . . , n, y transformar el problema en otro en


las variables zj . La solucion de este es obvia.
b) Determinar una soluci
on basica factible entera del problema.
c) A partir de la respuesta anterior, determinar el rango de valores de una soluci
on entera
optima.
11.6. Considerese el problema del representante de comercio con dij = dji para todo i y j. Se puede
simplicar la formulaci
on del problema en este caso?
11.7. Dado un mapa dividido en regiones, se pueden colorear las regiones usando s
olo cuatro colores
de tal forma que dos adyacentes no esten coloreadas igual?
a) Formular el problema como un programa lineal entero.
b) Por que no es posible denir una funci
on objetivo para este problema?
11.8. Considerese el programa entero
maximizar cT x
s. a
Ax b
0xe
xj = 0 o 1
y el programa cuadratico

maximizar cT x M xT (e x)
s. a
Ax b
0 x e,
donde e es un vector en el que todos sus componentes son 1 y M un valor positivo muy grande.
atico y es entera, es la solucion
a) Probar que si x es la solucion optima del programa cuadr
optima del programa entero.
atico y no tiene todos sus
b) Probar que si x es una solucion optima del programa cuadr
componentes enteros, el programa entero no tiene solucion factible.
c) Probar que si el programa cuadr
atico no tiene solucion factible, el programa entero no tiene
solucion entera factible.
Se puede resolver el programa entero resolviendo el cuadr
atico?
11.9. Considerese el problema de la mochila cuadratico siguiente:
max.

cj xj +

j1 
n


s. a

cij xi xj

i=1 j=2

aj xj b

xj = 0 o 1.
Reformularlo como programa entero haciendo yij = xi xj .
11.10. Formular como programa entero el que se plantea un inversor en bolsa que quiere maximizar sus
benecios cumpliendo una serie de condiciones que afectan al plazo de amortizacion, presupuesto
total, n
umero mnimo de ttulos p
ublicos y privados y rentabilidad.
11.11. Expresar la dicotoma
g(x) 0 o h(x) 0, pero no ambas,
con variables binarias.

Ejercicios

637

11.12. Resolver gracamente el programa entero


maximizar
s. a

2x
5x
2x
2x

y
+ 7y
+ y
5y
x, y

45
1
5
0

x e y enteras.
11.13. Aplicar la relajaci
on lagrangiana a
maximizar 2x + 5y
s. a
4x + y 28
2x + 4y 27
x y 1
x, y 0
x e y enteras.
11.14. Reformular mediante Benders el problema estudiado en este captulo de la planicaci
on de la
generacion de energa electrica en un pas.
11.15. Reformular mediante Benders el programa entero mixto
maximizar 2x1 + x2 + 3x3 + 7y1 + 5y2
s. a
9x1 + 4x2 + 14x3 + 35y1 + 24y2 80
x1 2x2 + 3x3 2y1 + 4y2 10
x1 , x2 , x3 , y1 , y2 0
x1 , x2 y x3 enteras.

Captulo

12

ALGORITMOS GENERALES

DE RELAJACION

U
(P E)

NA VEZ PRESENTADAS las cuestiones te


oricas esenciales de los programas enteros y sus diversas formulaciones, en este captulo analizamos los algoritmos m
as
usados para resolver programas enteros generales del tipo
)

max. cT x : x S .

donde S = {x n : Ax = b, x 0} Zn . Supondremos que la regi


on o conjunto factible es
no vaca y que el valor de la funci
on objetivo del problema, zP E , esta acotado.
Los dos grupos de algoritmos que se analizar
an siguen un esquema general basado en relajaciones sucesivas del problema original como el que se indica en la tabla 12.1.
(i+1)
Observese que la sucesion de cotas superiores que este algoritmo produce verican zR

(i)
(i)
T
zR . En muchas relajaciones se usa como funci
on objetivo zR (x) = c x, para todo i, por
lo que tan pronto como se llegue a una soluci
on x(i) S, se habr
a alcanzado el optimo de
(i+1)
(i)
(P E). En este caso, el paso de mejora de la solucion satisface que SR
SR para todo i.
(i+1)
(i)
(i+1)
(i)
Es aconsejable, por tanto, elegir SR
SR \{x(i) }, pues si no zR
= zR .

12.1

El algoritmo de los planos cortantes de Gomory

Este algoritmo es uno de los primeros que se emplearon para resolver el problema general de
programaci
on entera. Para la exposici
on de su mecanica supondremos que el problema s
olo
n
tiene variables enteras; es decir, que S = {x Z : Ax b, x 0}.
Introducido por el que muchos consideran el padre de la programaci
on entera, Gomory [1960]
y [1963], este algoritmo obtiene la soluci
on en un n
umero nito de pasos. Su uso, despues de
los primeros a
nos de su difusi
on, no ha sido muy amplio debido a los pobrsimos resultados
639

640

Captulo 12. Algoritmos generales de relajacion

Tabla 12.1
Algoritmo general para programas enteros basado en relajaciones sucesivas
Paso 0 Inicializaci
on. Hacer i = 1, w = y z = . Escoger un SR
(1)
zR cT x para x S.
Paso 1 Relajaci
on. Resolver el problema PE relajado:
*
)
# (i) $
(i)
(i)
max. zR (x) : x SR .
R

(1)

S tal que

Paso 2 Comprobaci
on de
optimo. Sea x(i) la solucion del problema anterior. Si x(i) S:
parar; esta es la solucion optima de (P E) con funcion objetivo w = cT x(i) = z ; si
no, seguir.
(i)
Paso 3 Mejora de la soluci
on. Hacer w = zR , z = cT x(i) si x(i) S y i i + 1. Escoger
(i+1)
(i+1)
(i)
(i+1)
(i+1)
(i)
SR
tal que S SR
SR y zR (x) tal que cT x zR (x) zR (x) para
(i+1)
(i)
(i+1)
(i)
x S con SR
= SR o zR (x) = zR (x). Ir al paso 1

numericos de sus implementaciones practicas. Recientemente, gracias a los u


ltimos avances de
la programaci
on poliedrica y de otras disciplinas anes, se ha vuelto a investigar en alguna de
sus variantes con el n de resolver problemas de estructura especial. A pesar de no aportar
mucho desde el punto de vista pr
actico, no obstante, a continuaci
on lo expondremos brevemente
pues, entre otras cosas, facilita la comprensi
on de un procedimiento muy sencillo para eliminar
y mejorar posibles soluciones en el otro metodo general que veremos posteriormente, el de
ramicaci
on y acotamiento o branch and bound. Para facilitar la exposici
on, de acuerdo con las
ideas de Gomory, consideraremos que el problema que resuelve el correspondiente algoritmo,
esto es
)
*
max. cT x : x S (e) , donde S (e) = {x Zn : Ax = b, x 0},
esta escrito de la siguiente forma:
)

max. x0 : [x0 , xT ]T S (0) ,

(P E)
donde

S (0) = x0 Z, x Zn : x0 cT x = 0, Ax = b, x 0 .
Supondremos que se dispone de una soluci
on y base optimas de la relajaci
on lineal del
programa entero. El problema se puede escribir entonces:
maximizar x0
s. a

xBi +

a
ij xj = a
i0

para i = 0, 1, . . . , m
(12.1)

jH

xB0 Z, xBi Z+ ,
xj Z+ para j H,

para i = 1, . . . , m

12.1 El algoritmo de los planos cortantes de Gomory

641

donde1 x0 = xB0 , xBi , i = 1, . . . , m, son las variables b


asicas y xj , j H N = {1, . . . , n},
las no b
asicas.2 Como esta base es factible en el programa primal y dual se cumple que a
i0 0
para i = 1, . . . , m, y que a
0j 0, para j H.
Suponiendo que en el problema (12.1) existe un i tal que a
i0
/ Z, se tiene el siguiente
resultado.
Proposici
on 12.1 (Corte Fraccionario de Gomory) Si a
i0
/ Z,


fij xj = fi0 + xn+1 ,

xn+1 Z+ ,

jH

ij 
aij  para j H y fi0 = a
i0 
ai0 .
es una desigualdad v
alida en S (0) , donde fij = a
Ejemplo 12.1 Considerese el programa entero
(P E)

maximizar
s. a

7x1 + 2x2
x1 + 2x2 4
5x1 + x2 20
2x1 2x2 7
2.
x Z+

Introduzcamos las variables de holgura x3 , x4 y x5 . El programa3 queda:


7x1 + 2x2

maximizar
s. a

x1 + 2x2 + x3
= 4
5x1 + x2
+ x4
= 20
2x1 2x2
+ x5 = 7
x1 , x2 Z+ ; x3 , x4 , x5 0.

Este problema, escrito en la forma de la expresi


on (12.1), esta vez restringiendo las variables
x3 , x4 y x5 a tomar valores enteros, es:
maximizar x0
s. a

x0 7x1 2x2
x1 + 2x2 + x3
5x1 + x2
+ x4
2x1 2x2
+ x5
x0 Z, xj Z+ para j = 1, . . . , 5.

= 0
= 4
= 20
= 7

1
En lo sucesivo, para simplicar la notaci
on, designaremos mediante Z+ el conjunto de los enteros no negativos
( 0).
2
Recuerdese de la programaci
on lineal que xB = B 1 bB 1 N xN y z = cB B 1 b+(cN cB B 1 N )xN .
Expresi
on muy parecida a la aqu expuesta.
3
Aunque las variables de holgura ser
an enteras, no hay ninguna necesidad de restringirlas a tomar valores
enteros.

642

Captulo 12. Algoritmos generales de relajacion

La soluci
on de la relajaci
on lineal de este programa entero es
x0

+
x1

x2 +

3
11 x3
1
11 x3
5
11 x3
8
11 x3

+
+
+
+

16
11 x4
2
11 x4
1
11 x4
6
11 x4

=
=
=
+ x5 =

332
11
36
11
40
11
75
11 ,

donde x3 = x4 = 0.
El corte de Gomory que se puede obtener de la primera ecuaci
on es
5
2
3
x3 + x4 =
+ x6 ,
11
11
11

x6 Z+ .

En funci
on de las variables originales, x1 y x2 (despejando de las ecuaciones anteriores), el
corte es 2x1 + x2 10.
El algoritmo completo para resolver programas enteros puros (no hay variables reales)
basandose en los cortes de Gomory se describe en la tabla 12.2. Este algoritmo converge a una
solucion en un n
umero nito de iteraciones.
Cuando se a
nade un corte, la nueva base, que incluye xn+i como variable b
asica, es factible
del dual. La factibilidad del primal se incumple s
olo en que xn+i es negativa. De acuerdo con
esto y con lo expuesto en el captulo 8, para reoptimizar el problema lo m
as adecuado es usar
el metodo dual del simplex.
Si P R(i) es no acotado, el programa entero,(P E, es no acotado o no factible. Si P E es
factible, existe una soluci
on factible en la que jN xj d, donde
d es un entero adecua(
damente grande. En consecuencia, se puede a
nadir una condici
on jN xj d al programa
(i)
relajado P R de tal forma que P E sera no acotado si y s
olo si el problema modicado tiene
una soluci
on factible.
Ejemplo 12.1 (Continuaci
on) La u
ltima soluci
on de P R(1) a la que hacamos referencia era
x0

+
x1

x2 +

(1)

3
11 x3
1
11 x3
5
11 x3

+
+
+

16
11 x4
2
11 x4
1
11 x4

=
=
=

8
11 x3

6
11 x4

+ x5 =

donde x3 = x4 = 0. Es decir x0 , x(1)

T 

(1)

(1)

332
11
36
11
40
11

75
,
11
(1)

= [x0 , x1 , . . . , x5 ] =

corte de Gomory respecto de la tercera ecuacion es


5
1
7
x3 + x4 =
+ x6 ,
11
11
11

x6 Z+ .

332 36 40
11 , 11 , 11 ,

0, 0,

75
11

. El

12.1 El algoritmo de los planos cortantes de Gomory

643

Tabla 12.2
El algoritmo de los planos cortantes de Gomory
Paso 0 Inicializaci
on. Hacer

+
,
(1)
SR = x0 , x n : x0 cT x = 0, Ax = b, x 0 ,

(1)

i = 1 y zR = x0 .
Paso 1 Resoluci
on de la relajaci
on lineal. Resolver el programa entero relajado:
*
)
(i)
(P R(i) )
max. x0 : [x0 , xT ]T SR .
$T
(i) #
Si P R(i) es factible y tiene solucion optima, [x0 , x(i) ]T , continuar.
Paso 2 Comprobaci
on de
optimo. Si x(i) Zn+ , esta es la solucion optima del programa
entero.
Paso 3 Comprobaci
on de no factibilidad. Si P R(i) no es factible, el programa entero original
no es factible.
(
(i)
(i)
ij xj = a
i0 con
Paso 4 Adici
on de un corte de Gomory. Escoger una la xBi + jH (i) a
(i)

/ Z. Hacer
a
i0

fkj xj xn+i = fk0 ,

k = 1, . . . , m, xn+i Z+ ,

jH (i)

el corte de Gomory de esa la. Hacer


(i+1)
(i)
n+i
SR
= SR x0 , x 
:
fkj xj xn+i = fk0 , x 0 .

(i)
jH

Paso 5 Hacer i i + 1 e ir al paso 1.

A
nadiendo este corte a P R(1) se obtiene P R(2) . Su soluci
on es
x0

+
+

7
5 x4
1
5 x4

+
x1

x2
+
2
5 x4 + x5 +
x3 + 51 x4

3
5 x6
1
5 x6

x6
8
5 x6
11
5 x6

= 149
5
= 17
5
= 3
= 29
5
= 57 .

El corte de Gomory correspondiente a la primera de estas ecuaciones es:


2
3
4
x4 + x6 = + x7 ,
5
5
5

x7 Z+ .

644

Captulo 12. Algoritmos generales de relajacion

A
nadiendo este nuevo corte a P R(2) se obtiene P R(3) . Este
tiene como solucion:
x0

+
+

x1
x2

x3

x4
1
3 x4
2
3 x4
5
3 x4
2
3 x4
2
3 x4

+
+ x5

+
+ x6

x7
1
3 x7
5
3 x7
11
3 x7
8
3 x7
5
3 x7

= 29
= 11
3
5
= 3
= 13
3
11
= 3
= 43 .

El siguiente corte se elige de la la x2 23 x4 + 35 x7 = 35 . Es4


2
2
1
x4 + x7 = + x8 ,
3
3
3

x8 Z+ .

La soluci
on optima de P R(4) que tambien lo es del problema original, resultante de
a
nadir este u
ltimo corte de Gomory, es


(4)

(4)

(4)

(4)

(4)

x0 , x1 , . . . , x6 , x7 , x8

= [28, 4, 0, 8, 0, 1, 3, 1, 0].

En terminos de las variables originales, los tres cortes a


nadidos al problema son x2 3,
2x1 + x2 9 y 3x1 + x2 12. El proceso que se ha seguido se ilustra en la gura 12.1.
x2
x(1)
x(2)

Corte 1

x(3)
Corte 2

Corte 3

1
x(4)

x1

Figura 12.1
Resolucion del problema del ejemplo 12.1 mediante el algoritmo de los planos cortantes de
Gomory
4

Recordemos 32 = 32 ( 33 ) = 31 .

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

12.1.1

645

Extensi
on a programas enteros mixtos

La extension del procedimiento basado en los planos cortantes de Gomory para tratar programas enteros donde hay presencia de variables que no est
an restringidas a tomar valores enteros
es inmediata. Supongamos para ello que en la relajaci
on lineal de un programa entero mixto,
P EM , xi Z+ es una variable b
asica dada por
xi +

a
ij xj +

hHI

a
ij yj = a
i0 ,

jH\HI

donde H es el conjunto de ndices de las variables no b


asicas, HI el subconjunto de H de
/ Z. El corte de Gomory a usar en este caso es
ndices de las variables no b
asicas enteras y a
i0


fij xj +

(jHI :fij <fi0 )

fi0
1 fi0

a
ij yj

(jH\HI :
aij >0)

(1 fij )xj

(jHI :fij >fi0 )

fi0
1 fi0

a
ij yj fi0 .

(jH\HI :
aij <0)

Todos los demas pasos del algoritmo permanecen exactamente igual.


En programaci
on entera mixta no es razonable suponer que el valor de la funci
on objetivo,
x0 , tendr
a valor entero. No se puede usar, por consiguiente, la la correspondiente a la funci
on
objetivo para denir los correspondientes cortes.

12.2

Algoritmos de ramicaci
on y acotamiento o branch and
bound

Estos algoritmos se inscriben dentro de la familia de los denominados enumerativos. El conjunto


{S (i) : i = 1, . . . , k} se denomina divisi
on de la regi
on factible de un programa entero, S, si
k
(i)
on se denomina partici
on si S (i) S (j) = para i, j = 1, . . . , k, i = j.
i=1 S = S. Una divisi
Proposici
on 12.2 Sea el programa entero
)

donde S (i)

max. cT x : x S (i) ,

(P E (i) )
*k
i=1

(i)

es una divisi
on de S. La funci
on objetivo zP E = maxi=1,...,k zP E .

Esta proposici
on expresa formalmente el concepto que coloquialmente se conoce como divide
y vencer
as. Es decir, si es difcil optimizar un programa entero en toda la regi
on factible, S,
quiz
as sea mas facil hacerlo por separado en peque
nas partes de ese S y luego unicar los
resultados.
La divisi
on apuntada se suele hacer de forma recursiva seg
un se ilustra en la gura 12.2. En
ella, los nudos hijos de uno dado (S (11) , S (12) y S (13) son los nudos hijos de S (1) ) representan
una divisi
on de la regi
on factible que ata
ne al nudo padre.

646

Captulo 12. Algoritmos generales de relajacion


S = S (0)

S (1)

S (11)

S (12)

S (2)

S (21)

S (13)

S (121)

S (22)

S (122)

Figura 12.2
Divisi
on recursiva de una regi
on factible
as simple de hacer la divisi
on recursiva
Cuando S Bn (variables 0 o 1), la forma m
apuntada es la indicada en la gura 12.3. En ella S (1 ...k ) = S {x Bn : xj = j {0, 1},
para j = 1, . . . , k}; esta divisi
on es una partici
on de S.
Llevada a un extremo, la divisi
on del conjunto factible contempla la enumeraci
on de todos
los elementos de S. En problemas pr
acticos, cuando el n
umero de variables es muy grande, la
enumeracion y an
alisis de todos los elementos del conjunto factible es inviable. Para llevar a la
pr
actica estos metodos hay que emplear alg
un procedimiento o regla para eliminar ramas en
el arbol5 de b
usqueda que se forma.
Si la regi
on factible S se divide en subconjuntos {S (1) , . . . , S (k) }, y se puede establecer de
alguna manera que no es necesario, a partir de un determinado momento, seguir dividiendo un
S (i) , se dice entonces que el arbol enumerativo puede podarse a partir del nudo correspondiente
a ese S (i) .
Proposici
on 12.3 El
arbol enumerativo se puede podar a partir del nudo correspondiente
a S (i) si se cumplen cualquiera de las siguientes condiciones:
1. No factibilidad: S (i) = .
2. Optimalidad: se ha llegado al o
ptimo de P E (i) .
(i)

3. Existencia de un valor dominante zP E zP E .


Para no tener que resolver el programa entero P E (i) se pueden usar diversos procedimientos.
5

A este
arbol lo denominaremos en lo sucesivo
arbol enumerativo o
arbol de enumeraci
on.

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

647

x1 = 0

x1 = 1

S (0)

S (1)

x2 = 0

x2 = 1

S (00)
x3 = 0

S (000)

x2 = 0
S (01)

x3 = 1 x3 = 0

S (001)

S (010)

S (11)

S (10)

x3 = 1 x3 = 0

S (011)

x2 = 1

x3 = 1 x3 = 0

S (100)

S (101)

S (110)

x3 = 1

S (111)

Figura 12.3
Divisi
on recursiva de una regi
on factible de un problema en variables 0 o 1
Nosotros utilizaremos el mas habitual: la relajaci
on de programaci
on lineal de ese P E (i) ; esto
(i)
(i)
es P L(i) con S (i) SP L y zP L (x) cT x para x S (i) .
Proposici
on 12.4 El
arbol enumerativo puede podarse a partir del nudo correspondiente a
(i)
un conjunto S si se cumple cualquiera de las condiciones siguientes:
1. El programa P L(i) no es factible.
(i)

(i)

(i)

(i)

2. La soluci
on
optima xP L de P L(i) cumple que xP L S (i) y que zP L = cT xP L .
(i)

on factible de P E.
3. zP L z P E , donde z P E es el valor de alguna soluci
(i)

n. La condici
on 2 implica que xP L es la
Demostracio
on 1 implica que S (i) = . La condici
(i)
(i)
soluci
on optima de P E . La condici
on 3 implica que zP E zP E .
Ejemplo 12.2 Considerese el programa entero
(ZP E )

maximizar 100x1 + 72x2 + 36x3


s. a

2x1 + x2
4x1
+
x1 + x2 +
x B3 .

0
x3 0
x3 0

La divisi
on de este ejemplo y su arbol enumerativo correspondiente son los de la gura 12.4.

648

Captulo 12. Algoritmos generales de relajacion


S

x1 = 0

x1 = 1

S (0)

S (1)
x2 = 0
S (10)

x2 = 1
S (11)

x3 = 0
S (110)

x3 = 1
S (111)

Figura 12.4
Divisi
on recursiva de la regi
on factible del problema en variables 0 o 1 del ejemplo 12.2
La soluci
on de la relajaci
on lineal de este programa entero es [1/2, 1, 1]T , con un valor de
la funci
on objetivo igual a 58. Usando los criterios de la proposici
on 12.4 para podar el arbol
enumerativo, se puede ver que
S (0) = {x 0 : x1 = 0, x2 0, x3 0, x2 + x3 1} = ,
por lo que el nudo S (0) se desecha. La condicion de optimo de los nudos S (110) y S (111) se
cumple pues estos conjuntos contienen las soluciones [1, 1, 0]T y [1, 1, 1]T , respectivamente,
(110)
(111)
(111)
por lo que, como, zP E < zP E = 8, se tendr
a que z P E = zP E = 8. Aplicando la tercera
(10)
condici
on de la mencionada proposici
on al nudo S (10) se ve que zP L = 64 < z P E , por lo
que se desecha. Como resultado nal se obtiene que x = [1, 1, 1]T es la solucion optima del
programa entero. El valor de su funci
on objetivo es ZP E = 8.
Usando relajaci
on de alg
un tipo para desechar ramas, los metodos enumerativos siguen
el esquema del algoritmo general presentado en la p
agina 640. Los algoritmos enumerativos
de relajaci
on se conocen habitualmente en la literatura especializada como de enumeraci
on
implcita o branch and bound.6 El esquema general de tales algoritmos es el de la tabla 12.3.
En ella, L designa una coleccion de programas enteros, P E (i) , cada uno de los cuales tiene la
(i)
forma zP E = max. {cT x : x S (i) }, donde S (i) S. Asociado a cada problema de L hay una
(i)
cota superior del valor de la funci
on objetivo del programa entero a resolver, z (i) zP E .

12.2.1

Algoritmos de ramicaci
on y acotamiento con relajaci
on lineal

Casi todos los codigos comercialmente disponibles para resolver problemas de programaci
on
entera generales que usan estrategias de tipo branch and bound utilizan relajaci
on lineal y
6

En lo sucesivo y en todo el libro designaremos estos algoritmos indistintamente como algoritmos de ramicaci
on y acotamiento o branch and bound.

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

649

Tabla 12.3
El algoritmo de ramicaci
on y acotamiento o branch and bound
Paso 0 Inicializaci
on: Hacer L = {P E}, S (0) = S, z (0) = y z P E = .
Paso 1 Comprobaci
on de nal. Si L = , la solucion x que daba la funci
on objetivo z P E =
cT x es la optima.
Paso 2 Selecci
on de problema, relajaci
on lineal y resoluci
on. Seleccionar y borrar de L un
(i)
(i)
(i)
problema P E . Resolver su relajacion lineal P L . Sea zP L el valor optimo de la
(i)
funcion objetivo de este problema y xP L su solucion optima (si existe).
(i)
Paso 3 Poda. Si zP L z P E ir al paso 1 (notese que si la relajacion se resuelve por un
algoritmo dual, este paso es aplicable tan pronto como el valor de la funci
on
objetivo del programa dual se hace inferior a z P E ).
(i)
Si xP L
/ S (i) ir al paso 4.
(i)
(i)
(i)
Si xP L S (i) y cT xP L > z P E , hacer z P E = cT xP L . Borrar de L todos los
(i)
(i)
problemas tales que z (i) z P E . Si cT xP L = zP L ir al paso 1; si no, al paso 4.
k
nadir los problemas {P E (ij) }j=1
a L,
Paso 4 Divisi
on. Sea {S (ij) }kj=1 una division de S. A
(i)

donde z (ij) = zP L para j = 1, . . . , k.


Ir al paso 1.

divisiones. En este apartado consideraremos los programas enteros generales


)

(P E)

max. cT x : x S ,

donde S = {x Zn : Ax b, x 0} ,

y la forma de resolverlos utilizando el procedimiento de ramicaci


on y acotamiento o branch
and bound que utiliza relajaciones lineales. Aun cuando por simplicidad en la exposici
on nos
referiremos a programas enteros del tipo que denimos en su momento como puro, la realidad
es que la extension de todo lo que expliquemos a programas entero-mixtos
)

donde

max. cT x + hT y : [xT , y T ]T T ,

(P EM )

T = {x Zn , y m : x 0, y 0, Ax + Gy b} ,

es inmediata.
(0)
En la relajaci
on inicial, el conjunto factible, S, se reemplaza por SP L = {x n : x
0, Ax b}, haciendose en cada relajaci
on zP L (x) = cT x.
12.2.1.1

Criterios de poda o rechazo de ramas del


arbol enumerativo

Al resolver las relajaciones lineales, los criterios de rechazo indicados en la proposici


on 12.3,
esto es, no factibilidad, optimo y valor dominante, son aplicables directamente. Sup
ongase que
la relajaci
on lineal en el nudo i del arbol enumerativo es
(P L(i) )

(i)

max. cT x : x SP L ,

(i)

donde SP L = x n : x 0, A(i) x b(i) .

650

Captulo 12. Algoritmos generales de relajacion

Si el programa lineal P L(i) tiene solucion optima, designemosla para facilitar la notaci
on por
x(i) . Las condiciones para eliminar, rechazar o podar7 el nudo i, y por tanto sus nudos hijos,
son:
(i)

1. SP L = (no factibilidad);
optimo) y
2. x(i) Zn+ (
(i)

3. zP L z P E , donde z P E es el mejor valor (valor dominante) de las soluciones factibles de


P E encontradas hasta ese momento. Observese que si se resuelve P L(i) por el algoritmo
dual del simplex, el rechazo se puede llevar a cabo antes de encontrar el optimo de P L(i) .
(i)
Tambien se puede usar un criterio del tipo zP L z P E + , para una tolerancia > 0
dada.
12.2.1.2

Divisi
on

Como se usa relajacion lineal en cada nudo del arbol enumerativo, la divisi
on se debe hacer
a
nadiendo condiciones lineales. Una forma evidente de hacer esto es tomar S = S (1) S (2) con
S (1) = S {x n : x 0, dT x d0 } y S (2) = S {x n : x 0, dT x d0 + 1}, donde
[dT , d0 ]T Zn+1 . Si x(0) es la solucion del programa lineal (relajaci
on inicial) inicial:
(P L(0) )

max. cT x : x n , x 0, Ax b ,

el vector [dT , d0 ]T se puede escoger de tal manera que d0 < dT x(0) < d0 + 1. Proceder as es lo
(1)
(2)
mas recomendable pues se obtiene un x(0)
/ SP L SP L , lo que permite la posibilidad de que,
(i)
(i)
(0)
para i = 1, 2, zP L = max. {cT x : x SP L } < zP L .
En la pr
actica solo se usan vectores [dT , d0 ]T muy concretos:
un j N . El punto x(0) sera no
Dicotomas de variables. En este caso d = ej para alg
(0)
factible en las relajaciones resultantes si xj
/ Z y d0 = xj  (ver gura 12.5). N
otese
que si xj B la rama izquierda hace xj = 0 y la derecha xj = 1.

(0)

xj xj 

(0)

xj xj  + 1

Figura 12.5
Divisi
on, por dicotoma de la variable xj , en un arbol enumerativo
Una importante ventaja pr
actica de esta division es que las condiciones que se a
naden
a la relajaci
on lineal correspondiente son simples cotas inferiores o superiores. S
olo sera
7

Usaremos indistintamente estos terminos.

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

651

necesario en la optimizacion del nuevo programa lineal tener en cuenta esas nuevas cotas
y resolverlo mediante el metodo dual del simplex ; el tama
no de la base seguir
a siendo el
mismo.
Dicotomas de cotas superiores
generalizadas. Si el problema tuviese cotas superiores
(
generalizadas, esto es jQ xj = 1, para alg
un Q N , la divisi
on a llevar cabo sera
(0)
on resultante si
la de la gura 12.6. Observese que x sera no factible en la relajaci
(
(0)
0 < jQ1 xj < 1, donde Q1 es un subconjunto no vaco de Q.
(

xj = 0
j Q1

xj = 0
j Q\Q1

Figura 12.6
Dicotoma debida a la existencia de cotas superiores generalizadas

Si una variable xj esta acotada (lj xj uj ), otra forma de proceder sera considerar
cada valor entero posible de xj por separado (ver gura 12.7). Como se puede comprender,
si el n
umero de variables es un poco elevado, pudiendo tomar cada una varios valores
enteros, el problema puede adquirir un tama
no gigantesco. Ning
un c
odigo comercial usa
esta posibilidad.

xj = uj

xj = lj
xj = 1

Figura 12.7
Divisi
on del arbol enumerativo en tantas ramas como valores enteros puede tomar la variable
xj

Notese que cada una de las divisiones expuestas es una partici


on. En lo que sigue supondremos
que la divisi
on se realiza exclusivamente por dicotomas de variables.

652

Captulo 12. Algoritmos generales de relajacion

Proposici
on 12.5 Si P = {x n : Ax b, x 0} es acotado, un
arbol enumerativo
desarrollado a partir de dicotomas de las variables es nito, supuesto que en cada nudo
(i)
i donde se requiera una divisi
on se escoge una dicotoma de la forma xj xj , xj
(i)

(i)

un
xj  + 1, donde xj no es entera. En particular, si j = max{xj : x P }, ning
(
camino del
arbol enumerativo puede contener m
as de jN j ramas.
n. Una vez a
Demostracio
nadida la condici
on xj d, para alg
un d {0, . . . , j 1}, las
u
nicas condiciones que pueden aparecer m
as adelante en un camino desde el nudo raz a una
rama del arbol enumerativo son xj d , para d {0, . . . , d 1}, y xj d, para d {1, . . . , d}.
an de a
nadir
De aqu se deduce que el n
umero maximo de condiciones que involucren a xj surgir
xj d para todo d {0, . . . , j 1}, xj d para todo d {1, . . . , j }, xj d para todo
d {1, . . . , } y xj d para todo d {, . . .(
, j 1}. Cada uno de estos casos requiere j
condiciones de xj habiendo, por consiguiente, jN j en total en cualquier camino.
El tama
no del arbol enumerativo depende en gran medida de la bondad de las cotas obtenidas de las relajaciones lineales que se llevan a cabo.
Proposici
on 12.6 Si el nudo t del
arbol enumerativo con conjunto de condiciones S (t) es
(t)
tal que max. {cT x : x SP L } > zP E , ese nudo no se puede podar o rechazar.
Esto indica que, independientemente de c
omo se desarrolle el arbol enumerativo, las cotas
obtenidas de las relajaciones lineales son el factor primordial que caracteriza la eciencia del
algoritmo branch and bound. En el apartado siguiente analizamos las estrategias a tener en
cuenta a la hora de seleccionar que nudo del arbol enumerativo considerar a partir de un punto
dado del proceso de optimizaci
on y que variable se debe seleccionar para llevar a cabo una
divisi
on de ese arbol.
12.2.1.3

Selecci
on del nudo a estudiar

Una de las operaciones de mas trascendencia del algoritmo branch and bound queda reejada en
el paso 2 de este: dada una lista L de subproblemas activos o, dicho de otra forma, de sub
arboles
del arbol enumerativo con nudos no rechazados, que nudo elegir como el pr
oximo a examinar.
Las opciones son dos: (1) analizar uno siguiendo unas reglas preestablecidas o (2) escoger uno
de acuerdo con la informaci
on disponible en ese momento sobre cotas de las variables, n
umero
de nudos activos, etc. La primera podramos encuadrarla dentro de un apartado denominado
de reglas apriorsticas; la segunda en otro de reglas adaptativas.
Existen multitud de reglas apriorsticas que se pueden utilizar. La m
as extendida es la
denominada LIFO (del ingles Last In First Out). Viene a decir que primero se deben analizar
todos los nudos hijos de un determinado nudo y luego volver hacia atr
as y escoger otro del
mismo nivel del nudo padre que no haya sido todava analizado. Esta regla, junto con otra que
determine que variable va a ser la de ramicaci
on siguiente y con cu
al de las dos ramas a que da
lugar hay que empezar, permiten analizar el problema en su totalidad. Un ejemplo se ilustra en
la gura 12.8. En ella se han numerado los nudos seg
un el orden en que se consideran. Los nudos
subrayados son los podados o rechazados. La regla LIFO tiene dos ventajas fundamentales:

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

653

1. La relajaci
on lineal de un nudo hijo se obtiene de la lineal del nudo padre sin m
as que
a
nadir una condici
on simple de cota en una variable. A partir de la soluci
on optima
del programa lineal que dene el nudo padre, utilizando el metodo dual del simplex, sin
reinvertir la base ni modicar las estructuras de datos sustancialmente, se obtiene la que
dene el nudo hijo.
2. La experiencia dice que las soluciones factibles se encuentran mas bien en puntos profundos del arbol enumerativo.

Figura 12.8
Seleccion de los nudos de un arbol enumerativo de acuerdo con la regla LIFO
Otra regla apriorstica que se puede utilizar es la denominada b
usqueda en amplitud o
anchura. Consiste en analizar todos los nudos de un determinado nivel antes de pasar a otro
mas profundo. Aunque esta variante no obtiene resultados pr
acticos relevantes comparandolos
con los de la anterior, s es muy usada en codigos especializados en la resolucion de programas
especiales en variables binarias que utilizan tecnicas heursticas.
Cualquiera que sea la regla, los criterios m
as razonables que deben considerarse para seleccionar un nudo para su an
alisis son:
Escoger aquel que se ha de estudiar en cualquier caso. Si de acuerdo con la proposicion 12.6 s
olo existe un nudo con la cota m
as alta, estudiarlo. Es decir, cuando un nudo
se rechaza, escoger aquel de los todava no analizados que tenga la cota superior m
as alta
independientemente de su posici
on en el arbol. Dicho de otra forma, si L es el conjunto
de nudos a analizar, escoger aquel i L que maximice z (i) .
Escoger aquel nudo que con mayor probabilidad contenga una soluci
on optima. Aunque
esto puede parecer evidente, la raz
on de proceder as estriba en que una vez obtenida
una soluci
on optima, aunque no se pueda inmediatamente probar que es el caso, s se
habr
a conseguido el maximo valor posible de z P E . Esto es muy importante para sucesivas
podas. Para hacerlo, si z(i) z (i) , escoger un nudo i L que maximice z(i) .

654

Captulo 12. Algoritmos generales de relajacion

A pesar de que intentar encontrar una soluci


on optima es muy deseable, a veces puede
tal que
resultar m
as pr
actico tratar de encontrar r
apidamente una soluci
on factible x
> z P E . El criterio
cT x
max
iL

z (i) z P E
,
z (i) z(i)

que se denomina de mejora r


apida, trata de conseguir este objetivo. Observese que un
nudo i en el que z(i) > z P E sera mas adecuado que otro j en el que z(j) z P E . M
as
(i)
(i)
a
un, los nudos para los cuales z z es peque
na deber
an tener preferencia. Es de
suponer que tales nudos proporcionar
an r
apidamente una soluci
on factible del problema.
El criterio de la mejora r
apida se usa en bastantes codigos comerciales como la opcion
por defecto para utilizar una vez que se conoce la primera soluci
on factible.
12.2.1.4

Selecci
on de la variable de ramicaci
on

Supongamos que ya se ha elegido el nudo i que se va a analizar. Asociado a ese nudo habr
a un
(i)
programa lineal de soluci
on x . El siguiente paso a llevar a cabo paso 4 seg
un la tabla 12.3
de la p
agina 649 consiste en escoger la variable que va a denir la divisi
on que parta de
ese nudo i. En lo que sigue restringiremos esas posibilidades de elecci
on al conjunto ndice
(i)
(i)
N
= {j N : xj
/ Z}. La evidencia emprica de muchos a
nos de utilizaci
on de este
procedimiento demuestra la importancia fundamental que tiene el escoger bien un j N (i) . Los
criterios para ello suelen variar de unos programas a otros. Los que exponemos a continuaci
on
son los mas aceptados y se basan en el calculo previo a la toma de esa decisi
on de unas
degradaciones o penalizaciones en que se puede incurrir en el valor de z (i) al requerir que una
variable xj que no es entera deba serlo.
12.2.1.4.1

Selecci
on basada en penalizaciones

Para la exposici
on que sigue mantenemos esencialmente la notacion introducida en la expresi
on
12.1 de la p
agina 640; esto es, el vector solucion del programa lineal que est
a siendo considerado
en el nudo i es
i0 +
xBi = a

n


a
ij (xj )

para i = 1, . . . , m,

j=m+1

y el valor de la funci
on objetivo
x0 = a
00 +

n


a
0j (xj ).

j=m+1

Observese que en esta u


ltima expresi
on los a
0j , j = m + 1, . . . , n, son los costes reducidos de
las variables no b
asicas. Consideraremos la eleccion de la variable de ramicaci
on dentro de
dos apartados generales: que esa variable se elige del conjunto de las b
asicas, y del de las no
b
asicas.

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

655

Variables b
asicas
Supongamos que en el nudo i alguna variable b
asica xp no es entera debiendo serlo, es decir
n


xp = a
p0 +

a
pj (xj ) = np0 + fp0 ,

j=m+1

donde np0 designa la parte entera de xp , xp , y fp0 la parte fraccionaria.8


Como ya mencionamos en el apartado correspondiente, la divisi
on que denir
a la variable
xp es
xp np0 + 1 y xp np0 .
De la teora de dualidad, y m
as concretamente del algoritmo dual del simplex de la tabla
8.3, p
agina 483, podemos deducir que la imposici
on de la nueva cota xp np0 + 1 a la variable
xp implicar
a un empeoramiento (reducci
on) del valor de la funci
on objetivo; como la variable
b
asica xp , realizando una iteraci
on del metodo dual del simplex, pasara como mnimo a ser
no b
asica, otra variable no b
asica, xj , que estuviese en uno de sus lmites, se incrementara
o decrementara seg
un estuviese en el inferior o superior. Es decir, se reducira el valor de la
funci
on objetivo en una cantidad o penalizaci
on que vendra dada por la expresi
on
a
0j
,

apj

si xj = lj ,

a
0j
,

apj

si xj = uj .

PU = min (1 fp0 )
j,
apj <0

o por
PU = min (1 fp0 )
j,
apj >0

Razonando de manera similar, la imposici


on de la nueva cota xp np0 a la variable xp
implicar
a un empeoramiento (reducci
on) del valor de la funci
on objetivo que vendr
a dado por
la expresi
on
a
0j
, si xj = lj ,
PD = min fp0
j,
apj >0
a
pj
o por
a
0j
, si xj = uj .
PD = min fp0
j,
apj <0
a
pj
Cualquier soluci
on entera que se pudiese obtener partiendo del nudo i estara por consiguiente acotada superiormente por
max{x0 PU , x0 PD }.

(12.2)

Estas cotas no son necesariamente las menores, de las superiores, que impone el hecho de que
la variable haya de ser entera (volveremos sobre este asunto m
as adelante). Se podr
a conseguir
una mejor soluci
on desde el nudo i si y solo si
min{PU , PD } < x0 z P E

(12.3)

para cada variable b


asica que no sea entera debiendo serlo. Si esta condici
on no se cumple se
abandona el nudo i pues no tiene interes seguir analizandolo.
8

Recordemos 3, 22 = 3; 4, 12 = 5.

656

Captulo 12. Algoritmos generales de relajacion

Si todas las variables xp cumplen la condici


on (12.3), la cuesti
on siguiente a solventar es que
variable de ramicaci
on se elige. Existen dos principios b
asicos que cabe considerar para tomar
esta decision. El primero es elegir aquella con la penalizaci
on asociada mas peque
na. El segundo,
escoger aquella variable con una penalizaci
on asociada mas grande y comenzar imponiendo el
lmite opuesto al que determina esa penalizaci
on. Si, por ejemplo, la penalizaci
on m
as grande
asociada a una variable xp es PU , comenzar analizando el problema que resulte de imponer a
esa variable la nueva cota np0 incluyendo en la lista de nudos a analizar m
as adelante el que
resulte de imponer la cota np0 +1. La justicaci
on de este proceder es evidente: si se almacenan
las peores soluciones, una vez que se encuentre una buena, se rechazaran r
apidamente buena
parte de los nudos que queden en la lista.
Antes de continuar conviene aclarar una cuesti
on. Cuando varias de las variables (no todas)
que debiendo ser enteras y no lo son violan la condici
on (12.3), conviene simult
aneamente
acotar todas esas variables con los lmites opuestos a los que violan la condici
on, almacenando
dichos lmites en la lista: es probable que sean rechazados muy poco despues.
Variables no b
asicas
En el apartado anterior se han analizado las penalizaciones que sobre la funci
on objetivo
acarrean la imposici
on de unos nuevos lmites al problema como consecuencia del hecho de que
una determinada variable b
asica, debiendo ser entera, no lo es.
Si una variable xq es no basica en una determinada soluci
on, ha de ser entera y est
a en
uno de sus lmites superior o inferior entero, cualquier cambio en su estado, para seguir siendo
entera, deber
a serlo en una cantidad como mnimo igual a 1. La penalizaci
on por efectuar
este cambio esta inmediatamente determinada por el coste reducido de esta variable, es decir
a
0q . Si la mejor soluci
on entera factible obtenida hasta ese momento es x0c , la que determina
continua o entera aquella en la que la variable que nos ocupa toma el valor xq es x0 y la
penalizaci
on a
0q cumple que a
0q x0 x0c , esta claro que no interesa moverla del estado en
que se encuentra pues nunca mejorara x0c : se impondra un nuevo lmite inferior o superior
a xq igual al lmite en el que estuviese para que en lo sucesivo permaneciese ja. Todo esto,
claro esta, para cualquier rama de b
usqueda de inferior nivel que partiese de alg
un nudo en el
que se hacen estas consideraciones.
La condici
on de que las variables no b
asicas tambien han de ser enteras se puede usar para
determinar unas penalizaciones PU y PD mas estrictas. En efecto, recordemos que al imponer
una nueva cota xp np0 + 1 a una variable, suponiendo que en una iteraci
on del metodo dual
del simplex esa xp pasase a ser como mnimo no b
asica con esa nueva cota, una variable no
b
asica xq habra de moverse del lmite en el que estuviese. Si estuviese en su lmite inferior o
superior, ese incremento vendra dado por la expresi
on
1 fp0

apq

si a
pq < 0 y xq = lq

(12.4a)

1 fp0

apq

si a
pq > 0 y xq = uq .

(12.4b)

o por

De igual manera, al imponer la nueva cota xp np0 a la variable, alguna variable no b


asica xq

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

657

variara su valor en una cantidad dada por la expresi


on
fp0
a
pq

si a
pq > 0 y xq = lq

(12.5a)

fp0
a
pq

si a
pq < 0 y xq = uq .

(12.5b)

o por

Ahora bien, al considerar variables xq no b


asicas enteras, las cantidades (12.4) y (12.5)
seran por lo general no enteras. Si son estrictamente mayor que cero y menor que uno, se
puede volver a usar el hecho de que xq debe ser entera, en el sentido de pensar que si cambia
su estado, para seguir siendo entera, ese cambio deber
a ser una unidad, como mnimo, siendo
la penalizaci
on de la funci
on objetivo por ese cambio su coste reducido a
0q . En consecuencia,
la penalizaci
on por incrementar la variable b
asica xp a, al menos, np0 + 1, incrementando o
decrementando una variable no b
asica xq que debe ser entera, sera


1 fp0
0q , a
0q
max a

apq
o

1 fp0
0q , a
0q
max a

apq

si a
pq < 0 y xq = lq


si a
pq > 0 y xq = uq .

De igual manera, la penalizaci


on por decrementar xp a, al menos, np0 , incrementando o decrementando una variable no b
asica xq que debe ser entera, sera


fp0
0q , a
0q
max a
a
pq
o

fp0
max a
0q , a
0q
a
pq

si a
pq > 0 y xq = lq


si a
pq < 0 y xq = uq .

an pues
Las nuevas penalizaciones PU y PD que utilizar ser


PU = min

j, a
pj <0

PU

= min

j, a
pj >0

a
0j (1 fp0 )/(
apj ),
jM
max{
a0j , a
0j (1 fp0 )/(
apj )}, j J
a
0j (1 fp0 )/(
apj ),
jM
max{
a0j , a
0j (1 fp0 )/(
apj )}, j J

si xj = lj

(12.6a)

si xj = uj

(12.6b)

y


PD = min

j, a
pj >0

a
0j fp0 /
apj ,
jM
max{
a0j , a
0j fp0 /
apj }, j J

si xj = lj

(12.7a)

658

Captulo 12. Algoritmos generales de relajacion




PD = min

j, a
pj <0

a
0j fp0 /
apj ,
jM
max{
a0j , a
0j fp0 /
apj }, j J

si xj = uj ,

(12.7b)

donde J es el conjunto ndice de las variables no b


asicas que han de ser enteras y M el de las
no b
asicas que no han de ser enteras.
Estas penalizaciones mas estrictas benecian el poder encontrar una buena soluci
on entera
sin necesidad de analizar todos los nudos. Igual que antes, cualquier soluci
on entera que se
pudiese obtener a partir del nudo i estara acotada superiormente por
max{x0 PU , x0 PD }.
El nudo i se podr
a desechar si, para cualquier xp ,
min{PU , PD } x0 z P E .

(12.8)

Como ya adelant
abamos, este criterio no es el u
nico que se puede adoptar. En efecto,
recordemos que el corte de Gomory asociado a xp ,
n


fp0 +

fpj xj 0,

j=m+1

se habra de satisfacer en cualquier soluci


on que se obtuviese partiendo del problema actual.
Asociado a ese corte de Gomory se puede derivar la penalizaci
on PG en que se incurrir
a por
cumplirla. Su expresi
on es:

PG

PG

fp0 a
0j /
apj

(1 f )
apj )
p0 a0j /(
= min

j fp0 a
0j /fpj

si
si
si
(1 fp0 )
a0j /(1 fpj ) si

fp0 a
0j /
apj

(1 f )
apj )
p0 a0j /(
= min
j
fp0 (
a0j )/fpj

a
pj
a
pj
fpj
fpj

si
si
si
(1 fp0 )(
a0j )/(1 fpj ) si

0
<0
fp0
> fp0
a
pj
a
pj
fpj
fpj

j
j
j
j

M
M
J
J

0
>0
fp0
> fp0

j
j
j
j

M
M
J
J

si xj = lj ;

(12.9a)

si xj = uj .

(12.9b)

Comparando (12.9), (12.6) y (12.7) se deduce inmediatamente que


PG min(PU , PD ),
lo que trae como consecuencia que la condicion (12.8) para desechar el nudo i se puede reemplazar por
PG x0 z P E .
El resumen de todas estas consideraciones es que, incorporando los sencillos calculos descritos al analizar un nudo, es posible determinar unas penalizaciones que permiten desechar
muchas alternativas de ramicaci
on: esto permite reducir sustancialmente el tiempo de calculo
de obtenci
on de la soluci
on optima de un programa entero (puro o mixto) por el procedimiento
branch and bound.

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

659

Ejemplo 12.3 Volvamos al ejemplo 12.1 de la p


agina 641:
(P E)

maximizar

7x1 + 2x2
x1 + 2x2 4
5x1 + x2 20
2x1 2x2 7
2.
x Z+

s. a

on de la relajaci
on lineal
Una vez introducidas las variables de holgura x1 , x2 y x3 , la soluci
de este programa entero, como hemos visto, es
x0

+
x1

x2 +

3
11 x3
1
11 x3
5
11 x3
8
11 x3

+
+
+
+

16
11 x4
2
11 x4
1
11 x4
6
11 x4

=
=
=
+ x5 =

332
11
36
11
40
11
75
11 ,

(0)

donde x3 = x4 = 0. De aqu que zP L = x0 = 332/11 y x(0) = [36/11, 40/11, 0, 0, 75/11]T .


Ilustremos la utilizaci
on de las penalizaciones. Las variables b
asicas son x1 , x2 y x5 . Esta
u
ltima no se requiere que sea entera. Las variables no b
asicas de la solucion obtenida est
an
todas en su lmite inferior.
Para empezar, como todava no tenemos ninguna soluci
on factible de zP E , determinemos
las penalizaciones por bifurcar a:
x1 3:

0
P1D

16 3

= min {
a0j fp0 /
apj , j M } = min
j, a
pj >0
11 11

x1 4:
0+
P1U

2
11

3
3
(1 )
= min {
a0j (1 fp0 )/(
apj ), j M } = min
j, a
pj <0
11
11

x2 3:
0
P2D

16 7

= min {
a0j fp0 /
apj , j M } = min
j, a
pj >0
11 11

24
.
11

1 3 7
,

11 11 11

1
11

5
11

24
.
11

21
.
55

0+
La penalizaci
on P2D
la podemos considerar pues de la soluci
on del programa lineal anterior
se observa que al incrementar la variable x2 , x3 y x4 decrecen.
De las penalizaciones calculadas, la mejor (menos mala) se obtiene al hacer x2 3. A
nada5
1
40
on lineal resultante anterior
mos esa condicion, es decir, x2 = 11 11 x3 11 x4 3. La relajaci
mas esta condicion queda:

x0

+
x1

x2 +

3
11 x3
1
11 x3
5
11 x3
8
11 x3
5
11 x3

+
+
+
+

16
11 x4
2
11 x4
1
11 x4
6
11 x4
1
11 x4

= 332
11
= 36
11
= 40
11
+ x5
= 75
11
7
+ x6 = 11
.

660

Captulo 12. Algoritmos generales de relajacion

Despues de una iteraci


on del metodo dual del simplex se llega a la solucion optima siguiente:
x0

+ 53 x6
x1
51 x6
x2
+ x6
8
2
5 x4 + x5 + 5 x6
x3 + 51 x4
11
5 x6
+
+

7
5 x4
1
5 x4

= 149
5
17
= 5
= 3
= 29
5
7
= 5 .

(1)

De aqu que zP L = x0 = 149/5 y x(1) = [17/5, 3, 7/5, 0, 29/5]T , con x6 = 0. La u


nica variable
que debe ser entera en esta solucion y no lo es es x1 .
Calculemos ahora las penalizaciones por bifurcar a:
x1 3:

1
P1D

7 2
= min {
a0j fp0 /
apj , j M } = min

j, a
pj >0
5 5

1
5

14
.
5

x1 4:

1+
= min {
a0j (1 fp0 )/(
apj ), j M } = min
P1U
j, a
pj <0

3
2
(1 )
5
5

1
5

9
= .
5

nadamos esa condicion, es


De estas penalizaciones la mejor se obtiene al hacer x1 4. A
1
1
decir, x1 = 17

x
+
s

4.
La
relajaci
o
n
lineal
resultante
anterior
m
as esta condicion queda:
5
5 4
5
x0

+
+

7
5 x4
1
5 x4

+
x1

x2
+
2
5 x4 + x5 +
x3 + 15 x4

1
5 x4
+

3
5 x6
1
5 x6

x6
8
5 x6
11
5 x6
1
5 x6

= 149
5
17
= 5
= 3
= 29
5
= 57
x7 = 53 .

Despues de una iteraci


on del metodo dual del simplex se llega a la primera soluci
on factible
entera x(2) = [4, 0, 8, 0, 1]T , con zP E = 28.
Despues se analizara el nudo 3 (ver gura 12.9), rechaz
andose inmediatamente pues del
1
=
calculo anterior de penalizaciones se vera que la funci
on objetivo obtenible sera 149/5P1D
135/5 = 27 < 28. Posteriormente tambien se rechazara el nudo 4.
En el apendice E, p
agina 779 y siguientes, se puede ver la salida de ordenador resultante de
resolver este u
ltimo ejemplo con el programa Bbmi, que implementa un procedimiento branch
and bound para resolver grandes programas enteros, enteros mixtos y, por supuesto, lineales,
siguiendo todas las directrices aqu expuestas, incluidas las penalizaciones, as como las tecnicas
de matrices dispersas mas modernas expuestas en los captulos 3 y 7.

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

661

x2 3

x2 4

x1 3

x1 4

2
Soluci
on entera.
x(2) = [4, 0, 8, 0, 1]T
(2)

zP L = z P E = zP E = 28

Figura 12.9

Arbol
enumerativo del problema del ejemplo 12.3
Ejemplo 12.4 Para estudiar las prestaciones del programa Bbmi al resolver, seg
un todo lo
que acabamos de exponer, un programa entero puro, resolvamos con el el siguiente problema:
minimizar
s. a

x1 + 10x2
66x1 + 14x2 1430
82x1 + 28x2 1306
x1 , x2 enteras.

El chero de datos que requerira este problema es el que sigue (la clave PROCESO ITERATIVO
se incluye en los datos para que el programa facilite toda la informaci
on posible sobre los pasos
que se efect
uan).
PROCESO ITERATIVO
NAME
Ej12.2.3
ROWS
N OBJ
G FILA1
G FILA2
COLUMNS
INT
X1
OBJ
1
FILA1
X1
FILA2
-82
X2
OBJ
10
FILA1
X2
FILA2
28
RHS
RHS
FILA1
1430
RHS
FILA2
1306
ENDATA
El resultado que se obtiene con Bbmi se lista a continuaci
on.

66
14

662

Captulo 12. Algoritmos generales de relajacion

Problema Ej12.2.3
*** Estad
sticas del Problema
3 Fila(s)
2 Restricci
on(es)
2 Variable(s) de decisi
on
2 Variable(s) de holgura/artificiales
6 Elementos no cero
2 Variable(s) entera(s)
Densidad de la matriz de coeficientes A: 100.000%
*** Estad
sticas de INVERT
3 elementos no cero en la base
0 columnas estructurales en la base
0 vectores columna antes del "bump"
3 vectores columna despu
es del "bump"
L:
0 elementos no cero;
0 vectores ETA
U:
2 elementos no cero;
2 vectores ETA
Total:
0 elementos no en la diagonal;
2 vectores ETA
M
aximo de transformaciones ETA:
2; m
aximo n
umero de elementos ETA:
Error relativo en x:
.000000D+00
Ite. Inf. Nopt. Sum.Inf/F.Obj Entra de-a Cost.Red Sale de-a
1
2
1
.2736000D+04
2 L->B -.42D+02
3 B->L
2
0
1
.6863538D+03
1 L->B -.46D+02
4 B->L

Paso
Pivote
.10D+03 -.14D+02
.73D+01 .21D+03

El.Eta
2
5

--- SOLUCION INICIAL PROGRAMA LINEAL ---------------------------------Nombre del problema: Ej12.2.3


No. de iteraciones:
3
Valor de la funci
on objetivo:

686.353805073431

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1 OBJ
2 FILA1
3 FILA2

BS 686.35381
LI 1430.0000
LI 1306.0000

-686.35381
.00000000
.00000000

Ninguno
1430.0000
1306.0000

Ninguno
Ninguno
Ninguno

1.000
.2830
.2156

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 X1
2 X2
Variable
Separaci
on
2
1
2

BS 7.2616822
BS 67.909212

Nivel
1
2
3

1.0000000
10.000000

Direcci
on
X> 68
X>
8
X> 71

Nudos
en Lista
1
2
3

* Nueva soluci
on entera; z(PE)=

.00000000
.00000000
Variables
Ent. No Ent.
2
1
1

Ninguno
Ninguno

Iteraci
on
4 D
6 D
7 D

718.00000; Tiempo desde


ultima:
--- SOLUCION ENTERA -----------------

Tiempo desde
ultima:
.0017 seg.
Nombre del problema: Ej12.2.3
No. de iteraciones:
7
Valor de la funci
on objetivo:

718.000000000000

.000
.000
Valor
Func. Obj.
6.8724242D+02
7.0871429D+02
7.1800000D+02
-.0017 seg.

12.2 Algoritmos de ramicacion y acotamiento o branch and bound

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1 OBJ
2 FILA1
3 FILA2

BS 718.00000
BS 1522.0000
BS 1332.0000

-718.00000
92.000000
26.000000

Ninguno
1430.0000
1306.0000

Ninguno
Ninguno
Ninguno

1.000
.1269E-15
.1349E-16

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 X1
2 X2
Variable
Separaci
on
2
1
2FIJ

LIB 8.0000000
LIB 71.000000

Nivel
3
2
3

1.0000000
10.000000

Direcci
on
X< 70
X<
7
X> 70

8.0000000
71.000000

Ninguno
Ninguno

1.00
10.0

Nudos
Variables
Valor
en Lista Ent. No Ent. Iteraci
on
Func. Obj.
2
-Nudo desechado en BKTRAK- 1.0000000D+20
1
0
9 P
6.9842857D+02
3
1
10 D
7.0700000D+02

* Nueva soluci
on entera; z(PE)=

707.00000; Tiempo desde


ultima:

-.0017 seg.

--- SOLUCION ENTERA ----------------Tiempo desde


ultima:
-.0017 seg.
Nombre del problema: Ej12.2.3
No. de iteraciones:
10
Valor de la funci
on objetivo:

707.000000000000

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1 OBJ
2 FILA1
3 FILA2

BS 707.00000
BS 1442.0000
BS 1386.0000

-707.00000
12.000000
80.000000

Ninguno
1430.0000
1306.0000

Ninguno
Ninguno
Ninguno

1.000
.1269E-15
.1349E-16

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 X1
2 X2
Variable
Separaci
on
2
1
2

EQB 7.0000000
LIB 70.000000

Nivel
3
3
1

1.0000000
10.000000

Direcci
on
X< 69
X<
6
X< 67

7.0000000
70.000000

Ninguno
Ninguno

1.00
10.0

Nudos
Variables
Valor
en Lista Ent. No Ent. Iteraci
on
Func. Obj.
2
-Nudo desechado en BKTRAK- 1.0000000D+20
1
-Nudo desechado en BKTRAK- 7.4457143D+02
0
-Nudo desechado en BKTRAK- 1.0000000D+20

--- SOLUCION ENTERA OPTIMA -----------------------Nombre del problema: Ej12.2.3


No. de iteraciones:
10
Valor de la funci
on objetivo:

707.000000000000

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.

663

664

Captulo 12. Algoritmos generales de relajacion

1 OBJ
2 FILA1
3 FILA2

BS 707.00000
BS 1442.0000
BS 1386.0000

-707.00000
12.000000
80.000000

Ninguno
1430.0000
1306.0000

Ninguno
Ninguno
Ninguno

1.000
.1269E-15
.1349E-16

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 X1
2 X2

EQB 7.0000000
LIB 70.000000

1.0000000
10.000000

Tiempo total de CPU en c


alculos:

7.0000000
70.000000

Ninguno
Ninguno

.000
10.0

.0603 segundos

La evoluci
on de los calculos que realiza Bbmi hacia la soluci
on se representa sobre la region
factible en la gura 12.10. En ella tambien se incluye el arbol enumerativo que genera.
Los nudos del arbol totalmente en negro son los que se desechan sin realizar ninguna iteracion m
as pues la previsible funci
on objetivo que obtendran sera peor que la calculada hasta
ese momento. La solucion en los otros nudos se indica con un n
umero que corresponde en la
otra parte de la gura a su posici
on en la regi
on factible.

Referencias
Esencialmente, las mismas del captulo anterior: Nemhauser y Wolsey [1988] y [1989]; Schrijver
[1986]; Salkin y Mathur [1989] y las m
as antiguas: Salkin [1975], Garnkel y Nemhauser [1972],
Hu [1970] y Greenberg [1971]. Adem
as de estas, para la elaboraci
on del apartado relativo a los
algoritmos de ramicaci
on y acotamiento, o branch and bound, se ha seguido a Tomlin [1970].
Mucho de lo expuesto est
a tambien basado en la experiencia del autor en la elaboraci
on del

programa Bbmi. Este sigue las pautas marcadas en Dakin [1965] por lo que respecta a la forma
b
asica de proceder para resolver programas enteros mixtos.

Ejercicios
12.1. Resolver los siguientes programas enteros. Utilizar el programa Bbmi si se considera conveniente.
a) minimizar x1 + 4x2
2x1 + x2 8
x1 + 2x2 6
x1 , x2 0 y enteras.
b) maximizar 3x1 + 2x2
s. a

x1 + x2 3,5
0 x1 2
0 x2 2
x1 , x2 enteras.
c) maximizar 4x1 + 5x2 + x3
s. a

s. a

3x1 + 2x2
10
11
x1 + 4x2
3x1 + 3x2 + x3 13
x1 , x2 0 y enteras.

665

Ejercicios
66x1 + 14x2 1430
x2 = 74

82x1 + 28x2 1306


x2 = 73

c
x2 = 72

x2 = 71

1
x2 68

x2 68

x2 = 70

3
2
10

x2 = 69

x2 = 68

x1 8

x1 7

x1 = 7

2
1

x2 71

x2 70

x1 6

x2 = 67
x1 = 7

x1 = 8

x1 = 9

Figura 12.10
Region factible y arbol enumerativo del problema del ejemplo 12.4

d) maximizar
s. a

x3

4x1 + 5x2 + 2x3 4


5
2x1 + 5x2
3x1 2x2 + 2x3 6
1
2x1 5x2
10 x1 , x2 , x3 0 y enteras.

e) minimizar
s. a

x1 + x2 +

x2 69

7
5

x1 = 6

x2 70

3x1 + 5x2 + 6x3 + 9x4 + 10x5 + 10x6


2x1 + 6x2 3x3 + 4x4 + x5 2x6 2
5x1 3x2 + x3 + 3x4 2x5 + x6 2
5x1 x2 + 4x3 2x4 + 2x5 x6 3
x1 , x2 , x3 , x4 , x5 , x6 0 y enteras.

666

Captulo 12. Algoritmos generales de relajacion


f) maximizar 2x1 x2 + 5x3 3x4 + 4x5
3x1 2x2 + 7x3 5x4 + 4x5 6
x1 x2 + 2x3 4x4 + 2x5 0
1 x1 , x2 , x3 , x4 , x5 0 y enteras.

s. a

g) maximizar x1 x2 + x3 x4
s. a

x1 + x2 + x3 + x4 = 8
0 x1 8
4 x2 4
2 x3 4
0 x4 10
x1 , x2 , x3 , x4 enteras.

h) maximizar 4x1 2x2 + 7x3


x1 +
5x3 10
x1 + x2 x3 1
0
6x1 5x2
x1 , x2 , x3 0 y enteras.

s. a

i) minimizar 3x1 + 2x2


s. a

3x1 + x2 6
x1 + x2 3
x1 , x2 0 y enteras.

j) maximizar x1 +
s. a

x1 + 10x2 20
0 x1 2
x1 , x2 enteras.

k) maximizar
s. a

5x2

3x1 + 3x2 + 13x3


3x1 + 6x2 + 7x3 8
6x1 3x2 + 7x3 8
0 xi 5, i = 1, 2, 3
x1 , . . . , x3 enteras.

12.2. Resolver el siguiente programa entero


maximizar 2x1 + 5x2
s. a

a) Gracamente.
b) Mediante el metodo branch and bound.

4x1 + x2 28
x1 + 4x2 27
x1 x2 1
x1 , x2 Z+ .

Ejercicios

667

12.3. La solucion de la relajacion lineal del programa entero del ejercicio anterior es
x0

+
x1
+
x2

1
5 x3
4
15 x3
1
15 x3
1
3 x3

+
+

6
5 x4
1
15 x4
4
15 x4
1
3 x4

= 38
= 17
3
= 16
3
+ x5 = 32 .

Resolver el problema mediante el algoritmo de los planos cortantes de Gomory.


12.4. Considerese el programa entero
xn+1

maximizar

2x1 2x2 + + 2xn + xn+1 = n


x1 , . . . , xn+1 , 0 o 1.
Probar que el algoritmo branch and bound aplicado a este problema, cuando n es impar, requiere
enumerar un n
umero exponencial de nudos.
12.5. Considerese un programa entero mixto con una sola variable entera. Probar que el algoritmo
branch and bound aplicado a ese problema no tendra mas de tres nudos. Por que?
12.6. Resolver el programa entero
maximizar
s. a

y
x1 + x2 + y 2
+ y 0
x1
x1 , x2 , y Z+

mediante el algoritmo de los planos cortantes de Gomory. Reemplazar posteriormente la condicion y Z+ por y  y resolverlo nuevamente mediante el mismo algoritmo.

Cuarta parte
Apendices

669

Apendice

REPASO DE MATEMATICAS:
DEFINICIONES,
NOTACIONES Y

RELACIONES BASICAS

E
A.1

N ESTE APENDICE
se recopilan algunos conceptos y resultados que pueden resultar u
tiles para leer y comprender este libro. S
olo se introducen brevemente aquellos
relacionados con las materias objeto del libro o en los que se basan; en ning
un caso
pretenden ser un exhaustivo recordatorio de matem
aticas elementales.

Conjuntos

Un conjunto, es una coleccion de objetos: los n


umeros naturales, las soluciones a un problema
determinado, los municipios de una provincia, etc. Se identica por una letra may
uscula: el
conjunto S, el conjunto de los n
umeros naturales N, el de los enteros Z, el de los reales ,
complejos C, racionales Q, etc.
Los componentes de un conjunto se denominan elementos. Si un elemento a pertenece a
un conjunto se indica a S. Los conjuntos se denen mediante la enumeraci
on entre llaves
de sus elementos, S = {a, b, . . .}, o especicando, tambien entre llaves, la propiedad que los
caracteriza, S = {x : x , x 2}: n
umeros reales menores o iguales que dos.
El conjunto sin elementos se denomina vaco, design
andose . Ejemplo: el conjunto S de los
n
umeros reales x que son mayores que 1 y menores que 0: esto es, S = {x  : x > 1, x < 0}.
Si S y S  son dos conjuntos y todos los elementos del conjunto S  lo son de S, se dice que S 
es un subconjunto del conjunto S, o que esta contenido en S  , expresandose S  S o S S  .
671

672

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

La uni
on de dos conjuntos S y T , expresada S T , es el conjunto formado por los elementos
que pertenecen a S o a T .
La intersecci
on de S y T , expresada S T , es el conjunto formado por los elementos que
pertenecen a S y a T .
Si S  es un subconjunto de S, el complemento de S  en S es el conjunto formado por los
elementos de S que no pertenecen a S  .
Si a y b son n
umeros reales, a b, el conjunto de n
umeros de la recta real x, a x b, se
indica [a, b]. El formado por los x, a < x b, por (a, b]. El de los x, a < x < b, por (a, b).
Si S es un conjunto de n
umeros reales acotados superiormente y no vaco, existe un n
umero
real y tal que x y y tal que y z si z es cota superior de S, para todo x S. Al n
umero y
se le denomina cota superior mnima o supremo de S; se expresa
sup (x)

xS

sup {x : x S} .

De forma similar se dene la cota inferior m


axima o nmo de S:
inf (x)

xS

A.2

inf {x : x S} .

Aplicaciones

Dados dos conjuntos S y T , una aplicaci


on f de S en T , expresada como f : S T , es una
asociacion o criterio que a cada elemento de S hace corresponder uno de T .
La imagen de un elemento x S con la aplicaci
on f : S T es el elemento f (x) T . El
conjunto imagen f (S) = {f (x) T, para todo x S}. La imagen de un subconjunto S  S
con la aplicaci
on f sera, por consiguiente, el subconjunto imagen f (S  ). El conjunto S se
conoce como origen o dominio de denici
on y el T como dominio de valores. Una aplicaci
on
f : S T se dice inyectiva si para cualquier par de elementos x, y S, x
= y, se cumple que
f (x)
= f (y). Ejemplo, la aplicaci
on f :  , denida por f (x) = x2 , no es inyectiva, pues
f (1) = f (1) = 1.
Una aplicaci
on f : S T se dice suprayectiva si el conjunto imagen f (S) es igual a todo el
conjunto T ; es decir, para todo y T existe un x S tal que f (x) = y.
Una aplicaci
on se dice biyectiva si es inyectiva y suprayectiva. Ejemplo, si Jn es el conjunto
de los n
umeros enteros de 1 a n, Jn = {1, . . . , n}, y se dene una aplicaci
on : Jn Jn
que modica el orden de disposici
on de los elementos de Jn estas aplicaciones se denominan
permutaciones, tal aplicaci
on es biyectiva.
Un conjunto S se dice numerable si existe una biyeccion entre N y S: a cada elemento k,
1 k n, se le asocia un elemento ak S, esto es: k ak .
Una sucesi
on de elementos de un conjunto T es una aplicaci
on de N en T : a cada elemento n 1 se le hace corresponder un x(n) T : n x(n) . Tal sucesion se expresa como
{x(1) , x(2) , . . .} o {x(n) }n1 .
Una funci
on es un caso particular de aplicaci
on en donde los conjuntos origen e imagen son
conjuntos de n
umeros.
Los conjuntos dotados de ciertas leyes de composicion o asociacion interna adici
on, multiplicaci
on, divisi
on o cualquier otra, se dice que poseen una estructura. Las estructuras
fundamentales son: grupo, anillo (Z por ejemplo), cuerpo ( y C por ejemplo) y espacio
vectorial .

A.3 Espacios vectoriales

A.3

673

Espacios vectoriales

Sea K un cuerpo, un espacio vectorial E sobre K es un conjunto dotado de una ley de composicion interna, adici
on, con la siguientes propiedades grupo conmutativo:
x+y =y+x
(x + y) + z = x + (y + z)
x+=x
x + (x) = ,
y una ley de composici
on externa, producto por un escalar, de la que el dominio de operadores
es K, con las siguientes propiedades:
1x=x
(x) = ()x
( + )x = x + x
(x + y) = x + y,
v
alidas cualesquiera que sean x, y, z en E y , en K; a se le denomina elemento neutro y
a x el opuesto de x. Es usual denominar vectores a los elementos de E y escalares a los de
K. En las aplicaciones que se estudian en el libro los casos m
as importantes ocurren cuando
K =  o K = C. Con la notaci
on K designaremos a cualquiera de los cuerpos  o C y por x
un vector cualquiera de un espacio vectorial.
Un ejemplo caracterstico de espacio vectorial lo constituye el formado por sucesiones ordenadas de n elementos cualesquiera de K, o n-uplas x = (x1 , . . . , xn ), deniendo la suma de
vectores mediante
(x1 , . . . , xn ) + (y1 , . . . , yn ) = (x1 + y1 , . . . , xn + yn )
y el producto por un escalar mediante
(x1 , . . . , xn ) = (x1 , . . . , xn ) .
Si X es un conjunto arbitrario, el conjunto de aplicaciones : X K se estructura tambien
como un espacio vectorial deniendo las operaciones
( + ) : x (x) + (x)
() : x (x) .
El ejemplo anterior es un caso particular de este espacio vectorial tomando X = {1, 2, . . . , n}.
Un subespacio M , de un espacio vectorial E sobre un cuerpo K, es un subconjunto no vaco
cerrado respecto de las operaciones de adicion y producto por un escalar; es decir, se cumple
que:
x, y M = x + y M,
x M y K = x M.
La interseccion de una familia cualquiera de subespacios de E es tambien un subespacio.

674

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

Si X es un subconjunto cualquiera de E, el subespacio (X) generado por X es la interseccion se todos los subespacios que contienen a X. Cuando (X) = E, se dice que X es una
parte generadora de E.
Dados vectores x1 , . . . , xn y escalares 1 , . . . , n , el vector formado seg
un la expresi
on
x = 1 x1 + + n xn
se dice que es combinaci
on lineal de los vectores x1 , . . . , xn de coecientes 1 , . . . , n . Un
subconjunto X de E es un subespacio si y solo si contiene a cualquier combinaci
on lineal de
cualquier subconjunto nito de vectores de X. Tambien se demuestra que el subespacio (X)
es el conjunto de todas las combinaciones lineales de vectores de X.
Un conjunto de vectores x1 , x2 , . . . , xk se dicen linealmente dependientes si existen escalares
k
i xi = 0 ; linealmente independientes, si
i , no todos cero, tales que i=1
k


i xi = 0 = i = 0,

0 i k.

i=1

Una parte X de un espacio vectorial E se dice que es una familia libre si los vectores de
cualquier subconjunto nito de X son linealmente independientes.
La dimensi
on de un subespacio es el maximo n
umero de vectores linealmente independientes
en el subespacio.
Una base de un espacio vectorial E es cualquier subconjunto B de E que sea, simultaneamente, una parte libre y generadora de E; dicho de otra forma, una base de un espacio
vectorial es un conjunto normalmente se supone ordenado (numerado) de vectores linealmente independientes que generan dicho espacio. Se demuestra que cualquier espacio vectorial
tiene una base y que todas las bases de un mismo espacio tienen la misma cardinalidad se
pueden poner en biyecci
on. Cuando el cardinal de las bases es un n
umero natural, n N,
se dice que el espacio es de dimension nita n. En un espacio vectorial K n ,

1
0
0
0
1
0



e1 = .. , e2 = .. , . . . , en = .. ,
.
.
.
0
0
1
forman una base en dicho espacio; este, por tanto, tiene dimensi
on n. Esta base se denomina
base can
onica de K n . En esta base, cualquier vector xT = [x1 , x2 , . . . , xn ] se puede expresar
de la siguiente forma:

x1
1
0
0
x2
0
1
0




.. = x1 .. + x2 .. + + xn .. .
.
.
.
.
xn
0
0
1
Si A y B son subconjuntos de un espacio vectorial E, el conjunto A + B se dene como:
A + B = {a + b : a A, b B} .
Cuando A y B son subespacios, tambien lo es la suma A + B. Si adem
as A B = , la suma se
denomina directa, escribiendose AB. Si A B = E, cualquier vector c E se descompone de
manera u
nica como c = a + b, con a A y b B; tambien se dice que A y B son subespacios
suplementarios.

A.3 Espacios vectoriales

A.3.1

675

Espacios normados

Si en un espacio vectorial E sobre K ( o C) se dene una norma vectorial como una aplicaci
on
  : E  que verica
v = 0 = v = 0 y x
= 0 = x > 0,
v = ||v para K y v E,
u + v u + v u, v E,
se dice que E es un espacio vectorial normado. La condici
on u + v u + v se conoce
como regla del tri
angulo. Es una generalizaci
on del hecho de que un lado de un tri
angulo no
puede ser mayor que la suma de los otros dos: ver gura A.1. Una variante tambien u
til de
esta regla es la siguiente:
u v u v.

u+v

u
Figura A.1
Representacion gr
aca de la regla del tri
angulo
En el espacio vectorial Kn , para 1 p < , se tiene la familia de normas

xp = |x1 | + + |xn |


p

1/p

denominadas normas p de H
older. Casos particulares lo constituyen las correspondientes a
p = 1 y p = 2:
x1 =

n


|xi |

i=1

x2 =

|x1 |2 + + |xn |2 .

Esta u
ltima se denomina en n norma eucldea. Tambien en Kn es una norma la dada por
x = max |xi | .
1in

Estas normas cumplen, cualquiera que sea x Kn , que


x x2 x1 nx .

676

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

Tabla A.1
Forma de la bola unidad para diferentes normas en 2

x1 =

2


|xi |

i=1

x2 =

|x1 |2 + |x2 |2 =

xT x

x = max |xi |


1i2

|p

xp = |x1 + |x2

|p

1/p

, (1 p < )

Si la bola cerrada unidad en 2 es el conjunto {x 2 : x 1}, sus formas para las
normas vectoriales 1, 2, , y p son las que representa la tabla A.1.
En el espacio C[0, 1], de funciones continuas del intervalo [0, 1] en C, son normas las dadas
por
f p =

1
0

1/p

|f (t)|p dt

y por
f  = max |f (t)| .
t[0,1]

En un espacio vectorial normado se dene la distancia entre dos elementos u y v mediante


d(u, v) = u v .
Esta denici
on convierte a cualquier espacio vectorial normado en un espacio metrico.
Sea E un espacio vectorial normado; se dice que una sucesi
on1 {x(n) } en E converge a un
1

A lo largo del libro, cuando as lo aconseja la dicultad de la notaci


on, una sucesi
on tambien se designa por
(k)
{xn }; sus integrantes, x .

A.3 Espacios vectoriales

677

lmite v E, si para todo > 0, existe un N N tal que a partir de el, n N , se cumple que
x(n) v < .
Cuando una sucesi
on {x(n) } admite un vector lmite v, solo tiene ese vector como lmite si
existe lmite es u
nico: se escribe limn x(n) = v. Es equivalente decir que limn x(n) = v
olo si x(n)  0.
y que limn x(n) v = 0. En particular, x(n) 0 si y s
Una sucesion {x(n) } en un espacio vectorial normado por   se denomina sucesi
on de
Cauchy, si para cada > 0, existe un N N tal que cualesquiera que sean p, q N , se cumple
que x(p) x(q)  < . Toda sucesion convergente es una sucesion de Cauchy pero pueden existir
espacios normados con sucesiones de Cauchy que no son convergentes. Un espacio vectorial
normado se dice completo si toda sucesion de Cauchy en el tiene lmite.
Un espacio de Banach es un espacio vectorial completo respecto de la norma a el asociada.
Todo espacio vectorial normado de dimensi
on nita es un espacio de Banach. En un espacio
de dimensi
on innita esto no es cierto; por ejemplo, es f
acil ver que en C[0, 1] la sucesion de
funciones cuyas gr
acas son las de la gura A.2 es una sucesi
on de Cauchy para cualquier
norma  p , pero no tiene lmite en C[0, 1].

A.3.2

Espacios con producto interior

Sea E un espacio vectorial sobre un cuerpo K ( o C); una forma sesquilineal vez y media
lineal sobre E es una aplicaci
on, | : E E K, que verica2 :
1) u + v|w = u|w + v|w y
2) u|v + w = u|v + u|w,
2

La barra designa complejo conjugado.

fn (x)
/

1
n

1
n

Figura A.2
Gr
aca de una de las funciones de una sucesi
on de Cauchy

678

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

cualesquiera que sean u, v, w en E y , en K. Si adem


as se cumple que
u|v = v|u ,
la forma se denomina hermtica. Es claro que u|u es siempre un n
umero real. Cuando se
cumple que
u
= 0 = u|u > 0 ,
se dice que la forma es denida positiva, denomin
andosela tambien producto escalar. Una forma
sesquilineal sobre  es siempre bilineal.
Un espacio prehilbertiano es un espacio vectorial sobre K dotado de una forma hermtica
denida positiva. Todo espacio prehilbertiano es un espacio normado mediante
v =

v|v .

En la demostraci
on de que esta denici
on corresponde a la de una norma en E juega un papel
importante la desigualdad de Cauchy-Schwarz: a saber,




u|v u v .

Un espacio de Hilbert es unespacio prehilbertiano completo respecto de la norma que deriva


del producto escalar   = ,  . Dicho de otra forma, un espacio prehilbertiano que con
esta norma da un espacio de Banach.
El espacio eucldeo n-dimensional, expresado n o En , es un espacio de Hilbert de dimensi
on
nita.
Dos vectores cuyo producto escalar es cero se denominan ortogonales; si su  2 es igual a
la unidad, se denominan ortonormales. Para dos vectores ortogonales se tiene la identidad
u + v2 = u2 + v2 ,
que es una generalizaci
on del teorema de Pit
agoras. En un espacio prehilbertiano, el u
nico
vector ortogonal a todos los vectores del espacio es el vector nulo; si este espacio es de dimension
nita es posible construir una base ortonormalizada.
Una familia cualquiera de vectores distintos del nulo y ortogonales dos a dos es una familia
libre. Si M es un subespacio de un espacio prehilbertiano E de dimensi
on nita, el subespacio
ortogonal de M , M , es el subespacio formado por todos los vectores ortogonales a los de
M , siendo un subespacio suplementario de M ; es decir M M = E. Cualquier x E, por
consiguiente, se puede expresar como x = a + b, con a M y b M .

A.3.3

Aplicaciones lineales

Dados dos espacios vectoriales E y F sobre el mismo cuerpo K, se dene una aplicaci
on lineal,
u homomorsmo f de E en F , como una aplicaci
on f : E F que verica
f (x + y) = f (x) + f (y) ,
cualesquiera que sean los vectores x, y en E y los escalares y . Existen dos casos particulares
interesantes: el primero cuando E = F , en este caso se dice que f es un operador lineal de E o

A.3 Espacios vectoriales

679

endomorsmo de E; el segundo cuando F = K el cuerpo base, en cuyo caso la aplicacion


se denomina forma lineal sobre E.
El conjunto L(E, F ) de todas las aplicaciones lineales del espacio E en el espacio F se
estructura como un espacio vectorial si se denen las siguientes operaciones:
a) adici
on (f + g) :
b) producto por un escalar f :

(f + g)(x) = f (x) + g(x)


(f )(x) = f (x)

x E;
x E y K.

En particular, el conjunto L(E, K) de formas lineales es un espacio vectorial denominado dual


de E, represent
andose con E .
Para una aplicaci
on lineal f : E F , el conjunto de vectores de F que son la imagen de
los de un subespacio de E forma un subespacio de F . En particular, la imagen de todo E es un
subespacio de F que se denomina subespacio imagen de f , represent
andose mediante Im(f ).
An
alogamente, el conjunto anti-imagen de un subespacio de F forma un subespacio de E. En
particular, la anti-imagen del subespacio nulo de F forma lo que se denomina el n
ucleo de la
aplicaci
on, represent
andose por ker(f ). As pues
ker(f ) = {x E : f (x) = 0} .
Si b F , la ecuacion lineal f (x) = b tiene soluci
on si y s
olo si b Im(f ). En ese caso el
conjunto de todas las soluciones es la variedad lineal traslaci
on de un subespacio dada por
x0 + ker(f ), donde x0 es una soluci
on particular de la ecuaci
on. En particular, la aplicaci
on es
inyectiva si y s
olo si ker(f ) = .
Sean E y F dos espacios prehilbertianos sobre el cuerpo K; si f : E F es una aplicaci
on

lineal, la aplicaci
on traspuesta de f es la aplicacion f : F E que cumple
x|f (y) = f (x)|y ,
cualesquiera que sean los vectores x E e y F . Particularmente importante es el caso en
que E = F : f se dice entonces que es el operador adjunto de f . Cuando un operador f de
E cumple que f = f se denomina operador autoadjunto. En el caso de que E sea un espacio
vectorial real, tambien se dice que f es un operador simetrico y cuando es un espacio vectorial
complejo, que f es un operador hermtico. Un operador simetrico cumple que
x|f (y) = f (x)|y,
mientras que uno hermtico, que
x|f (y) = f (x)|y.
Un operador f de E es unitario cuando es invertible y su inverso coincide con su adjunto.
Es decir, si f = f 1 . Para un operador unitario se tiene que
f (x)|f (y) = f (f (x))|y = x|y ,
de manera que f (x) = x. Por este motivo a los operadores unitarios tambien se les
denomina operadores isometricos.

680

A.4

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

Matrices

Sean dos espacios vectoriales E y F de dimensiones nitas n y m sobre el mismo cuerpo K.


Una aplicaci
on lineal g : E F , g L(E, F ), esta caracterizada o representada en dos bases
{e1 , e2 , . . . , en } de E y {f 1 , f 2 , . . . , f m } de F por una tabla de coecientes, matriz asociada,
de m las y n columnas:

a11 a1n

A = ... . . . ... K mn .
am1 amn
Los elementos aij estan denidos por
g(ej ) =

m


1 j n.

aij f i ,

i=1

El vector columna j-esimo

a1j
a2j

..
.
amj

representa el vector g(ej ) en la base (f i ). A partir de la matriz A se pueden calcular los


componentes y1 , y2 , . . . , ym del vector y = g(x) en la base (f i ), conociendo los componentes
x1 , x2 , . . . , xn en la base (ej ). En efecto:

y1
a11
a12
a1n
y2
a21
a22
a2n

. = x1 .. + x2 .. + + xn .. .
..
.
.
.
ym
am1
am2
amn
Expresi
on que tambien se puede escribir de la siguiente forma:
y=

n


xi ai ,

i=1

donde ai es el vector columna i-esimo de la matriz A. As pues, si se jan dos bases en E


y F , cada aplicaci
on lineal, g : E F , queda unvocamente representada por una matriz.
Recprocamente, toda matriz en K mn dene unvocamente una aplicaci
on lineal entre dos
espacios E y F de dimensiones n y m en los que se han jado dos bases. En particular, se
pueden identicar las matrices m n con las aplicaciones lineales de K n en K m .
Las matrices de m las y n columnas con elementos en el cuerpo K forman un espacio
vectorial, K mn , sobre dicho cuerpo K.
Si E y F son dos espacios de dimension nita dotados de un producto escalar y la aplicaci
on
L(E, F ) se representa en dos bases ortonormalizadas mediante una matriz A, la aplicaci
on
T
T
L(F, E), traspuesta de , viene representada por la matriz A , traspuesta de A.

A.4 Matrices

681

El n
ucleo y la imagen de una matriz A K mn , ker(A) y Im(A), respectivamente, se
denen como los subespacios de K n y K m que son el n
ucleo y la imagen de la aplicaci
on lineal
asociada:

ker(A) = {x K n : Ax = 0}
.
Im(A) = {y K m : y = Ax, x K n }
mn
AK

Dicho de otra forma, la imagen de una matriz es el subespacio generado por los vectores
columna de la matriz; los vectores la tambien generan un subespacio que no es otro que la
imagen de AT .
Para una matriz A mn se cumple que:


ker AT = (Im(A)) ;
Im AT = (ker(A)) ;


ker(A) = Im AT


Im(A) = ker AT




;
.

El rango de una matriz es la dimensi


on3 de su subespacio imagen:
rango(A) = dim(Im(A))
Una matriz A K mn se dice de rango completo si rango(A) = min(m, n). Una matriz
cuadrada A K nn se denomina singular si rango(A) < n; regular si rango(A) = n.
La aplicaci
on asociada a una matriz A mn es suprayectiva si rango(A) = m. Para una
mn
matriz A K
se cumple que
dim(ker(A)) + rango(A) = n ,
o, alternativamente, dim(ker(A)) = n rango(A). La aplicaci
on lineal asociada a A es, por
tanto, inyectiva, si y s
olo si rango(A) = n.

A.4.1

Normas de matrices

Aun cuando en lo que sigue nos limitaremos a matrices cuadradas, la mayor parte de las
deniciones y resultados son extensibles a matrices rectangulares; tambien supondremos que
las matrices son reales.
Las matrices cuadradas de orden n forman un espacio vectorial con un producto, esto es,
un
algebra. Una norma matricial es una norma vectorial compatible con el producto. Se dene
formalmente sobre mn como una aplicaci
on   : mn  que cumple:
1)
2)
3)
4)
3

A = 0 = A = 0.
A = || A.
A + B A + B.
AB A B.

Recordemos: m
aximo n
umero de vectores linealmente independientes.

682

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

Existen normas sobre el espacio mn que no son normas matriciales pues no cumplen la
propiedad 4). As, si se dene
A = max |aij | ,
1i,jn

se satisfacen 1), 2) y 3); sin embargo, tomando A = B = 11 11 , es facil ver que AB =
2 > A B = 1, por lo que no se cumple 4).
Un ejemplo importante de norma matricial es la norma de Frobenius, denida como:
A2F =

a2ij = traza(AT A),

1i,jn

acil ver que esta norma deriva


donde la traza de una matriz A de orden n es ni=1 aii . Es f
T
del producto escalar A|B = traza(A B), que congura al espacio de las matrices cuadradas
como un espacio prehilbertiano. La norma de Frobenius cumple que
ABF AF BF ,
como se puede comprobar f
acilmente.
Una norma matricial   sobre mn se dice consistente con una norma vectorial  
sobre n cuando para cada matriz A y cada vector x se cumple que
Ax A x .
Por ejemplo, la norma de Frobenius y la norma eucldea de n son consistentes pues
Ax2 AF x2 .
Se demuestra que para toda norma matricial es posible construir una norma vectorial consistente. Recprocamente, a toda norma vectorial sobre n se le puede asociar una norma matricial
consistente. Una norma matricial consistente con una cierta norma vectorial   se construye
mediante la denici
on
Ax
.
A = sup
0 =x
n x
Esta norma matricial se dice inducida por la norma vectorial. Ejemplo: la norma matricial
inducida por la norma eucldea de n es la norma espectral:

A2 =

sup
0 =x
n

xT AT Ax
xT x

1/2

max (AT A) = max (A),

donde designa un autovalor de A y un valor singular. Si   es la norma inducida por


una cierta norma vectorial y   es una norma matricial cualquiera consistente con esa norma
vectorial, se cumple, para toda matriz A, que A A . En particular, para la norma
espectral y la norma de Frobenius, se cumple que
A2 AF .

A.4 Matrices

683

Las normas matriciales inducidas m


as usadas son
A1 = max

1jn

A = max

1im

m

i=1
n


|aij | y
|aij | .

j=1

Ejemplo A.1 El efecto que produce aplicar la transformaci


on lineal basada en la matriz

1 2
A=
0 2

sobre la bola unidad denida a partir de las normas 1 , 2 y  en 2 , se representa en la
gura A.3. La aplicaci
on transforma el vector e1 = [1, 0]T en s mismo y e2 = [0, 1]T en [2, 2]T .
Tomando la norma 1, el vector unitario que m
as se amplica al aplicarle la transformaci
on es
[0, 1]T (o [0, 1]T ), que pasa a ser [2, 2]T . Su factor de amplicaci
on, en terminos de la norma
1, es 4.
Tomando la norma 2, el vector unitario que m
as se amplica es el que se representa en la
gura con una recta discontinua. El factor de amplicaci
on es 2,9208.
Para la norma , igualmente, el vector unitario que m
as se amplica es el que se representa
tambien con la recta discontinua: [1, 1]T , que pasa a transformarse en [3, 2]T . El factor de
amplicaci
on correspondiente es en este caso 3 ya que




T
[1, 1]  = 1




T
[3, 2]  = 3.

A.4.2

Matrices ortogonales, matrices de permutaci


on y matrices de proyecci
on

Una matriz Q mn se dice ortogonal si verica que QT Q = I; es decir, cuando sus vectores
columna son ortogonales dos a dos y de norma eucldea unitaria (ortonormales). Si Q nn
es ortogonal, se cumple que QQT = QT Q = I.
Las matrices ortogonales Q mn verican:
Q2

= 1

QF = n1/2
QA2 = A2

QAF = AF
y

Q2

= 1

QF = m1/2
AQ2 = A2

AQF = AF

si m n

si m n

684

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

[2, 2]T
[0, 1]T
A1 = 4

[1, 0]T
norma 1

[1, 0]T

A2 2,9208
norma 2

A = 3
norma

Figura A.3
Efecto de una aplicaci
on lineal sobre la bola unidad para diferentes normas
Una matriz de permutaci
on es una matriz cuadrada cuyas columnas est
an formadas por las
de la matriz unidad permutadas. Una matriz de permutaci
on es una matriz ortogonal.
Una matriz se dice simetrica si se verica que AT = A. Para una matriz cualquiera
A mn , la matriz AT A es simetrica.
Se denomina proyector o matriz de proyecci
on a una matriz P nn que verica que
P2 = P
Si P ademas es simetrica, se denomina proyector ortogonal o matriz de proyecci
on ortogonal.
Si, en este u
ltimo caso, F es el subespacio imagen de la matriz P (el mismo que el de la matriz
on ortogonal del vector x sobre F .
P T ), P x dene la proyecci
Se denomina proyector suplementario de P al proyector S = I P . Si F = Im(P ) y
G = ker(P ), entonces F = ker(S) y G = Im(S).
En el caso de un proyector ortogonal P en el que F = Im(P ), se tiene que n = F F ,

A.5 Autovalores, valores singulares y formas cuadr


aticas

685

veric
andose que P x2 x2 y que
x P x2 =

A.5
A.5.1

min
x y2 .
y Im(P )=F

Autovalores, valores singulares y formas cuadr


aticas
Autovalores

Sea A una matriz cuadrada de orden n y elementos en K ( o C ). Un vector no nulo u Kn


se denomina vector propio de A si para alg
un K se cumple que
Au = u .
A este se le denomina valor propio o autovalor de la matriz A. El conjunto de los valores
propios de una matriz A se denomina espectro de A, design
andose por (A). El radio espectral,
(A), se dene de la siguiente manera:
(A) = max |i |.
1in

Para que un n
umero sea valor propio de A, el sistema lineal y homogeneo de ecuaciones
dado por
(I A)x = 0
debe tener soluciones distintas de la trivial x = 0. Esto equivale a que
det(A I) = 0 .
Esta es una ecuacion polin
omica de grado n en que se denomina ecuaci
on caracterstica de
la matriz A. La ecuacion caracterstica admite la raz = 0 si y solo si det(A) = 0. Una matriz
es invertible, por tanto, si y s
olo si no admite al cero como vector propio.
Una matriz real de orden n no tiene necesariamente valores propios reales pero, como
consecuencia del teorema fundamental del algebra, cualquier matriz compleja tiene al menos
un valor propio complejo. El n
umero maximo de valores propios es n.
Siendo un valor propio de la matriz A, el conjunto de soluciones del sistema de ecuaciones
(I A)x = 0
es un subespacio de Kn que se denomina subespacio propio asociado al valor propio , design
andose con E . Si n es la multiplicidad de como raz de la ecuacion caracterstica de A,
se cumple que
dim(E ) n .
La interseccion de subespacios propios correspondientes a valores propios distintos se reduce
al subespacio nulo; esto es,

= = E E = .
De este modo, la suma de subespacios propios es directa. Se cumple que

(A)

E = K n

686

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

si y solo si para cada (A), dim(E ) = n ; en ese caso existe una base de Kn formada
toda ella por vectores propios de A. Siendo V una matriz cuadrada invertible de orden n cuyas
columnas son los vectores de esa base, se tiene que
AV = V D ,
donde D = diag(1 , . . . , n ). Alternativamente, se puede escribir que
V 1 AV = D ,
por lo que la matriz A es semejante a una matriz diagonal; se dice entonces que la matriz A
es diagonalizable por semejanza.
Toda matriz real y simetrica tiene todos sus valores propios reales y es diagonalizable
por semejanza. Se demuestra ademas que los subespacios propios correspondientes a valores
propios distintos son ortogonales. De aqu se sigue que es siempre posible formar una base
ortonormalizada de vectores propios para una matriz real y simetrica A. Existe entonces una
matriz ortogonal Q tal que se verica que
QT AQ = D,

con QT = Q1 ,

y, de aqu que, toda matriz real y simetrica es congruente ortogonal con su reducida diagonal.
Este resultado fundamental de la teora de matrices es la version elemental del denominado
teorema espectral.

A.5.2

Valores singulares

La noci
on de autovalor no tiene signicado para matrices rectangulares. En estas, por el contrario, se introduce el concepto de valor singular. Si A es una matriz rectangular m n con
elementos en , se denen sus valores singulares i , i = 1, . . . , min{m, n}, como las races
cuadradas positivas de los valores propios de la matriz cuadrada AT A nn .
Se demuestra que si A mn , existen dos matrices ortogonales,
U = [u1 , . . . , um ] mm
y
V = [v 1 , . . . , v n ] nn ,
tales que
U T AV = diag(1 , . . . , p ),
y donde

p = min{m, n} ,

1 2 p 0 .

Los vectores ui se denominan vectores singulares izquierdos; los v i , vectores singulares derechos.
Los valores singulares de A son las longitudes de los semiejes del hiperelipsoide E denido
por
E = {y : y = Ax, x2 = 1} .
Es decir, las longitudes de los semiejes del hiperelipsoide imagen de la esfera unidad resultante
de la aplicaci
on que caracteriza la matriz A. En la gura A.4 se describe gr
acamente el caso
en que m = n = 2.

A.5 Autovalores, valores singulares y formas cuadr


aticas

{x}

687

{Ax}

Figura A.4
Representacion en dos dimensiones de una transformaci
on lineal de la esfera unidad
Para una matriz A mn cuya descomposicion en valores singulares es A = U V T , se
dene su matriz pseudoinversa, A , como
A = V U T ,
donde

= diag(11 , . . . , r1 , 0, . . . , 0) nm .

Si A mn es de rango completo y m > n,


A = (AT A)1 AT ;
si m < n
A = AT (AAT )1 .
Para cualquier matriz A mn , la matriz A A es la matriz n n de proyeccion ortogonal
sobre el subespacio de los vectores la de A, AA la m m de proyeccion ortogonal sobre
la imagen de la matriz A (subespacio de sus vectores columna) y (I A A) la de proyecci
on
ortogonal sobre el n
ucleo de A.

A.5.3

Formas cuadr
aticas

Una forma cuadr


atica en n variables es un polinomio de segundo grado en esas variables. La
expresion m
as general de una forma cuadr
atica es
q(x) = xT Qx ,
donde Q = QT es una matriz simetrica de orden n. Nos limitaremos al an
alisis de formas
cuadr
aticas con coecientes reales.

688

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

Mediante una transformaci


on lineal de variables, x = T y, una forma cuadr
atica se puede
reducir a la forma can
onica de suma de cuadrados siguiente:
p


q(x) =

yi2

i=1

p+q


yi2 .

i=p+1

El rango de la forma es p + q y la signatura p q (p n


umeros positivos y q negativos).
Una forma cuadr
atica real es denida positiva si para todo vector x
= 0, q(x) > 0. El rango
y signatura de una forma cuadr
atica denida positiva valen n. Si Q la forman los coecientes
qij y se introducen los n
umeros menores como

q11
q21

i = det ..
.
qi1

q12
q22
.
..
qi2

..
.

q1i

q2i
. ,
..
qii

la forma cuadr
atica asociada a Q es denida positiva si y s
olo si todos los menores i son
positivos.
Sean 1 , . . . , n los valores propios que sabemos son reales de la matriz Q; por el
teorema espectral, existe una matriz ortogonal P tal que
P T QP = diag(1 , . . . , n ).
Haciendo en la forma cuadr
atica q(x) = xT Qx el cambio de variables x = P y, se tiene que
q(x) = y T P T QP y = 1 y12 + + n yn2 ,
lo que hace ver que el rango de la forma cuadr
atica es el n
umero total teniendo en cuenta las
multiplicidades de valores propios no nulos de Q, mientras que la signatura coincide con la
diferencia entre los n
umeros de valores propios positivos y negativos. En particular, la forma
cuadr
atica asociada a Q es denida positiva si y s
olo si todos los valores propios de Q son
positivos.
En ciertos casos es importante acotar el cociente de una forma cuadr
atica al cuadrado de
la norma eucldea, es decir, el cociente
r(x) =

xT Qx
,
xT x

x
= 0 .

Mediante una transformaci


on ortogonal x = P y, este cociente se escribe como
r(x) =

1 y12 + + n yn2
,
y12 + + yn2

de manera que se deducen las acotaciones


min (Q)

xT Qx
max (Q) .
xT x

A.5 Autovalores, valores singulares y formas cuadr


aticas

689

Estas acotaciones no se pueden mejorar ya que si Qv = v,


v T Qv
= .
vT v
Una matriz A se dice denida positiva si la forma cuadr
atica xT Ax es positiva para todo
vector x
= 0. De forma similar se denen matrices semidenida positiva, denida negativa y
semidenida negativa, si xT Ax 0, < 0 y 0, respectivamente, para todo vector x
= 0. La
matriz A se dice indenida si la forma xT Ax es positiva para alg
un x y negativa para otros.
Criterio A.1 Para que una matriz simetrica sea denida positiva, es necesario que todos
los coecientes de la diagonal principal sean positivos.
Criterio A.2 Para que una matriz simetrica A sea denida positiva es necesario que el
coeciente de mayor valor absoluto este en la diagonal principal. M
as concretamente,
max |aij | < max akk .
i =j

La matriz

0 1 2
1 2 3 ,
2 3 4

de acuerdo con el criterio A.1, no puede ser denida positiva, aunque cumple el criterio A.2.
Por el contrario, la matriz

5 2 7
2 5 2 ,
7 2 5
satisface el criterio A.1 pero no el A.2. La matriz

1 1 1
1 2 4 ,
1 4 5

satisface los dos criterios enunciados pero no es denida positiva ya que, por ejemplo,


q [2, 3, 1]T = 5.
Criterio A.3 Si en cada la de una matriz simetrica A el elemento de la diagonal principal
es mayor que la suma de los valores absolutos de todos los dem
as elementos de la la, es
decir, si
akk >

n

j=1

j =k

A es denida positiva.

|akj |

k = 1, . . . , n,

690

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

n. Para x
= 0 se tendr
Demostracio
a que
q(x) =


i

>

aii xi2



|aij ||xi ||xj |

j =i




|aij | |x2 |
|aij ||xi ||xj |
i

j =i


i

aij xi xj

j =i

|aij ||xi | (|xi | |xj |) =


i

j =i

|aij ||xj | (|xj | |xi |)

j =i

1 
|aij | (|xi | |xj |)2 0.
2 i j =i

Es importante destacar que este u


ltimo criterio dene una condici
on suciente, no necesaria.
En efecto, la matriz

3 2 2
2 3 2 ,
2 2 3
es denida positiva, pues
q(x) = x12 + x22 + x32 + 2(x1 + x2 + x3 )2 ,
lo que atestigua que, cualquiera que sea x
= 0, q(x) > 0. Esta matriz, sin embargo, no satisface
el criterio A.3.
Como ya se ha visto, una matriz simetrica denida positiva tiene todos sus autovalores
reales y positivos; si es semidenida, alg
un autovalor es cero. Si la matriz es negativa denida,
todos sus autovalores son negativos.
Un teorema muy interesante para averiguar el orden de magnitud de los autovalores de una
matriz es el teorema de Gerschgorin, que dice que si A nn es una matriz simetrica con
autovalores 1 , 2 , . . . , n , entonces
min i min

1in

1in

max i max

1kn

aii

n


|aij | ,

j=1

j =i

akk +

1kn

n

j=1

j =k

|akj | .

Como corolario de este teorema se puede probar tambien que si A es de diagonal estrictamente
dominante y simetrica, es denida positiva.

A.6 Topologa

691

Se dice que una matriz compleja A, de coecientes aij , cuadrada y de orden n, es de


diagonal estrictamente dominante por las, o simplemente de diagonal dominante por las,
cuando cumple que

|aij |, i = 1, . . . , n.
|aii | >
j =i

Puede darse una denici


on an
aloga de matriz de diagonal dominante por columnas.

A.6

Topologa

En un espacio vectorial normado se dene una bola abierta, S(x0 , r), de centro x0 y radio r,
como el conjunto de puntos x que verican x x0  < r. Es decir:
S(x0 , r) = {x n : x x0  < r}.
0 , r), se dene, por el contrario, como el conjunto de puntos x que
Una bola cerrada, S(x
verican x x0  r. Es decir:
0 , r) = {x n : x x0  r}.
S(x
Consideraremos en lo que sigue de este apartado un subconjunto S del espacio vectorial
metrico hasta ahora estudiado (puede ser, por ejemplo, n ).
Un punto y S es un punto interior del conjunto S si existe un tal que
x y < x S .
En otras palabras, existe una bola abierta S(y, ) de centro y y radio contenida ntegramente
en S.
El conjunto de todos los puntos interiores del conjunto S se denomina interior de S. Este
conjunto puede, evidentemente, ser vaco. Ejemplo: un plano del espacio 3 .
Un subconjunto de S se dice abierto si coincide con su interior; es decir, si alrededor de
todo punto de S existe una bola abierta contenida ntegramente en S. Ejemplo, la bola abierta
unidad, S(x, 1) = {x : x < 1}; el espacio n en su totalidad. En general los subconjuntos o
conjuntos abiertos se caracterizan por no tener lmites denidos o ser disjuntos de su frontera
(ver mas adelante la denici
on del concepto frontera).
Un entorno de un punto x, E(x), es un conjunto abierto que contiene a x. En otras palabras,
E(x) es un entorno de x si contiene una bola abierta de centro x.
Se dice que un punto x es un punto de acumulaci
on del subconjunto S si en todo entorno
de x existen un n
umero innito de puntos de S.
Un punto x se denomina punto de adherencia del subconjunto S cuando todo entorno de
dicho punto x contiene al menos un punto de S; es decir, para todo existe un y S tal
que x y < . El conjunto de todos los puntos de adherencia se denomina adherencia. La
1) = {x : x 1}.
adherencia de la bola abierta S(x, 1) = {x : x < 1} es la cerrada S(x,
Se denomina frontera de un conjunto a la parte de la adherencia que no est
a en el interior.
Un conjunto, o subconjunto, se dice cerrado si coincide con su adherencia. La adherencia de
cualquier conjunto S es el conjunto cerrado m
as peque
no que contiene a S. Se puede demostrar
que un conjunto es cerrado si y s
olo si toda sucesion convergente de elementos de S tiene un
lmite en ese conjunto.

692

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

Un conjunto, o subconjunto, se dice compacto si es cerrado y acotado (contenido en una bola


de radio r < ). Un importante resultado, debido a Weierstrass, dice que si S es un conjunto
compacto, de cada sucesion o sucesion innita {x(n) }nN de elementos de dicho conjunto es
posible extraer una subsucesi
on
#

x()

$
L

LN

que converge a un elemento del propio conjunto S.


umeros reales y s(k) = sup {r (i) : i k}, entonces {s(k) }
Si {r (k) } es una sucesion de n
converge a un n
umero real s0 ; a este n
umero se le denomina lmite superior de {r (k) } y se
expresa como




lim sup r (k)
o lim r (k) .
k

El lmite superior de una sucesi


on de n
umeros reales es el mayor punto de acumulacion de la
sucesion. De forma similar se dene el lmite inferior.

A.7

Teorema de la proyecci
on

Gran parte de las teoras de sistemas de ecuaciones y de optimizacion que se estudian en el


libro est
an basadas en unos pocos resultados simples e intuitivos. Entre estos, quiz
as el mas
sencillo y usado sea el teorema de la proyeccion. Su aplicaci
on en la teora de mnimos cuadrados
lineales es fundamental. En un espacio Eucldeo ordinario de tres dimensiones determina que la
distancia m
as corta de un punto exterior a un plano a ese plano la proporciona la perpendicular
al plano desde dicho punto. La expresi
on formal de este teorema en espacios de Hilbert es la
que sigue.
Teorema A.1 Sea H un espacio de Hilbert y M un subespacio cerrado de H. Para todo
vector x H existe un u
nico vector m0 M tal que x m0 2 x m2 , para todo
m M . La condici
on necesaria y suciente adem
as para que m0 M sea el vector mnimo
u
nico es que x m0 sea ortogonal a M .
n. Primero probaremos que si m0 es un vector que minimiza xm, xm0 es
Demostracio
ortogonal a M . Supongamos para ello, por el contrario, que existe un m que no es ortogonal a
x m0 ; sin perdida de generalidad podemos suponer que m = 1 y que x m0 |m =
= 0.
Denamos el vector m1 M como m1 = m0 + m. Tendremos que
x m1 22 = x m0 m22 = x m0 22 x m0 |m m|x m0  + ||2
= x m0 22 ||2 < x m0 22 .
De esta manera, si x m0 no es ortogonal a M , m0 no es el mnimo que decamos.
nico vector de M
Veamos ahora como, si x m0 es ortogonal al subespacio M , m0 es el u
que minimiza x m2 . En efecto, para todo m M , el teorema de Pit
agoras dice que
x m22 = x m0 + m0 m22 = x m0 22 + m0 m22 .
Por lo tanto x m2 > x m0 2 para m
= m0 .

A.8 Funciones

693

Demostraremos ahora la existencia de un m0 que minimiza x m2 . Si x M , entonces


m0 = x y todo estara probado como es obvio. Si x
/ M , denamos un = inf mM xm2 ;
lo que queremos es obtener un m0 M tal que x m0 2 = .
A tal n, sea {m(i) } una sucesion de vectores en M tal que x m(i) 2 . Por la ley del
paralelogramo4 se tiene que

2 
2



2


 (j)
2

(j)
(i) 
(j)
(i) 
(i) 
(m x) + (x m ) + (m x) (x m ) = 2 m x + 2 x m  .
2

Reordenando, se obtiene



2

2

2

(i) + m(j) 2
m








m(j) m(i)  = 2 m(j) x + 2 x m(i)  4 x
 .


2
2
2
2
2

Para todo i, j, el vector (m(i) + m(j) )/2 esta en M pues este es un espacio vectorial (lineal).
De la denici
on de se deduce que x (m(i) + m(j) )/22 , por lo que



2

2

2




m(j) m(i)  2 m(j) x + 2 x m(i)  4 2 .
2

Como m(i) x22 2 cuando i , m(j) m(i) 22 0 cuando i, j . Es decir,


{m(i) } es una sucesion de Cauchy; como M es un subespacio cerrado, la sucesion {m(i) } tiene
un lmite m0 en M y, debido a la continuidad de la norma, x m0 2 .

A.8

Funciones

Recordemos que una funci


on es un caso particular de aplicaci
on donde los conjuntos origen e
imagen son conjuntos de n
umeros.
on {x(k) } que converge
Una funci
on f : n  se dice continua en x si para toda sucesi
a x (expresado x(k) x), se cumple que f (x(k) ) f (x). De forma equivalente, f se dice
continua en x si dado un > 0, existe un > 0 tal que
y x < = f (y) f (x) < .
Una funci
on f :   se dice satisface la condici
on de Lipschitz con constante en un
conjunto X, si para todo x e y pertenecientes a X se cumple que
|f (x) f (y)| |x y|.
Una funci
on que satisface la condici
on de Lipschitz en un conjunto X se dice continua Lipschitz en ese X, design
andose f Lip (X).
Dada una norma vectorial   en n y otra matricial   en mn , m, n > 0, una funci
on
n
mn
g :  
se dice satisface la condici
on de Lipschitz con constante en un abierto
D n , si para todo x e y pertenecientes a D se cumple que
g(x) g(y) x y.
4

Para u, w M , |u + w|2 + |u w|2 = 2|u|2 + 2|w|2 .

694

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

Una funci
on g que satisface la condici
on de Lipschitz en D se dice continua -Lipschitz en ese
D, design
andose g Lip (D).
Un resultado muy interesante referido a funciones continuas es el teorema de Weierstrass,
que dice que una funci
on continua denida en un conjunto compacto S tiene un punto donde
alcanza un mnimo en S. Es decir, existe un x S tal que para todo x S, f (x) f (x ).
Un conjunto de funciones f1 , f2 , . . . , fm de n en  se puede considerar como una funci
on
vectorial
f = [f1 , f2 , . . . , fm ]T .
Esta funci
on asigna a todo vector x n otro vector f (x) = [f1 (x), f2 (x), . . . , fm (x)]T de
m
 . Tal funci
on vectorial se dice continua si lo es cada uno de sus componentes f1 , f2 , . . . , fm .
Si cada uno de los componentes de f = [f1 , f2 , . . . , fm ]T es continua en alg
un conjunto
n
abierto de  , se dice f C. Si adem
as cada funci
on componente tiene derivadas parciales
de primer orden continuas en ese abierto, se dice que f C 1 . En general, si las funciones
componentes tienen derivadas parciales de orden p continuas, se indica f C p .
Si f : n  y f C 1 , se dene el vector gradiente de f como el vector

f (x) f (x)
f (x)
,
,...,
f (x) =
x1
x2
xn

Tambien se suele expresar como fx (x).


Si f C 2 , se dene la Hessiana, o matriz Hessiana, de f en x como la matriz n n

2 f (x) 2 f (x)
2 f (x)

x1 x2
x1 xn
2 x1

2 f (x) 2 f (x)
2 f (x)

x x
2 f (x) =
2 x2
x2 xn
2
1

.
.
.
.
..
..

..
..

2 f (x) 2 f (x)
2 f (x)

xn x1 xn x2

2 xn

A esta matriz tambien se la designa habitualmente como F(x).


Para una funci
on vectorial f = [f1 , f2 , . . . , fm ]T , si f C 1 , se dene la matriz Jacobiana
o, simplemente, la Jacobiana, como la matriz m n

f1 (x) f1 (x)
f1 (x)

x2
xn
x1

f2 (x)
f2 (x) f2 (x)

f (x) = x1
x2
xn

..
..
..
..

.
.
.
.

fm (x) fm (x)
fm (x)

x1

x2

xn

Si f C 2 , es posible denir m Hessianas F1 (x), F2 (x), . . . , Fm (x) correspondientes a cada


una de las m funciones componentes.

A.8 Funciones

695

Un resultado de extraordinaria importancia es el conocido teorema de Taylor. Dice que si


f : n  y f C 1 en una regi
on que contiene el segmento [x1 , x2 ], es decir puntos x1 +
(1 )x2 , 0 1, existe un , 0 1, tal que


f (x2 ) = f (x1 ) + T f x1 + (1 )x2 (x2 x1 ) .


Ademas, si f C 2 , existe un , 0 1, tal que



1
f (x2 ) = f (x1 ) + T f (x1 )(x2 x1 ) + (x2 x1 )T F x1 + (1 )x2 (x2 x1 ) ,
2
donde F denota la Hessiana de f .

A.8.1

Condiciones necesarias y sucientes de primer y segundo orden que


ha de cumplir un punto mnimo

Se trata de denir condiciones necesarias y sucientes para determinar si un punto x cumple


minimizar f (x),
x
donde f :  y n .
Un punto x se dice que es un mnimo relativo de la funci
on f :  si existe un
> 0 tal que f (x) f (x ) para todo x a una distancia menor que de x . Es decir, para
todo x tal que |x x | < . Si f (x) > f (x ) para todo x , x
= x , a una distancia
menor que de x , se dice que x es un mnimo relativo estricto de f en .
Proposici
on A.1 (Condiciones necesarias de primer orden) Sea un subconjunto de n
y una funci
on f : , f C 1 . Si x en un mnimo relativo de f en , para toda
direcci
on d n , factible desde x , se cumple que f (x )d 0.
Corolario A.1 Sea un subconjunto de n y una funci
on f : , f C 1 . Si x es

un mnimo relativo de f en y x es un punto interior de , se cumple que f (x ) = 0.


Proposici
on A.2 (Condiciones necesarias de segundo orden) Sea un subconjunto de n
y una funci
on f : , f C 2 . Si x en un mnimo relativo de f en , para toda
direcci
on d n , factible desde x , se cumple que:
f (x )d 0.
Si f (x )d = 0, entonces dT 2 f (x )d 0.
Proposici
on A.3 (Condiciones necesarias de segundo orden) Sea x un punto interior de
y sup
ongase que tambien un mnimo relativo de f : , f C 2 . Entonces:
f (x ) = 0.
Para todo d, dT 2 f (x )d 0.

696

Apendice A. Revision de matematicas. Deniciones, notaciones y relaciones basicas

Proposici
on A.4 (Condiciones sucientes de segundo orden) Sea f C 2 una funci
on

denida en una regi


on en la cual x es un punto interior. Sup
ongase adem
as que:
f (x ) = 0.
La matriz Hessiana 2 f (x ) es denida positiva.
x es entonces un mnimo relativo estricto de f .
Las demostraciones de estas proposiciones y corolario se pueden seguir en Luenberger [1984].

A.9

Conjuntos convexos. Existencia de los hiperplanos separador y soporte

Los dos resultados que incluimos a continuaci


on son de gran importancia en la teora de
conjuntos convexos. El primero demuestra que dado un punto fuera de un conjunto convexo,
existe un hiperplano que contiene al punto sin tocar al conjunto convexo. El segundo, que
dado un punto frontera de un conjunto convexo, existe un hiperplano que contiene ese punto
frontera y el conjunto convexo en uno de sus semiespacios cerrados.
Teorema A.2 Sea C un conjunto convexo e y un punto exterior a la adherencia de C.
Existe un vector a tal que aT y < inf xC aT x.
n. Sea
Demostracio

= inf x y2 > 0.


xC
on continua
Existe un x0 en la frontera de C tal que x0 y2 = . Esto es as pues la funci
f (x) = x y2 alcanza su mnimo en cualquier conjunto cerrado y acotado por lo que s
olo
es necesario considerar x en la interseccion de la adherencia de C y la bola abierta de centro
y y radio 2.
A continuaci
on probaremos que a = x0 y satisface las condiciones del enunciado del
teorema. En efecto, para cualquier , 0 1, al ser C un conjunto convexo, el punto
x0 + (x x0 ) C, por lo que
x0 + (x x0 ) y22 x0 y22 .

Desarrollando,
2(x0 y)T (x x0 ) + 2 x x0 22 0.
Considerando esta expresi
on cuando 0+, se tiene que
(x0 y)T (x x0 ) 0
o que
(x0 y)T x (x0 y)T x0 = (x0 y)T y + (x0 y)T (x0 y)
= (x0 y)T y + 2 .
Haciendo a = x0 y queda probado el teorema.

A.9 Conjuntos convexos. Existencia de los hiperplanos separador y soporte

697

La interpretaci
on geometrica de este teorema es que, dado un conjunto convexo C y un
punto y exterior a la adherencia de C, existe un hiperplano que contiene a y estando C en
uno de sus semiespacios abiertos. Este hiperplano (de vector caracterstico a en el teorema) se
denomina hiperplano separador de C e y.
Teorema A.3 Sea C un conjunto convexo e y un punto frontera de C. Existe un hiperplano
que contiene a y y a C en uno de sus semiespacios cerrados.
n. Sea {y (k) } una sucesion de puntos exteriores a la adherencia de C. Sea {a(k) }
Demostracio
la sucesion de puntos normalizados, a(k) 2 = 1, obtenida de aplicar el teorema anterior a la
sucesion anterior, tales que,


a(k)

T

y (k) < inf a(k)


xC

T

x.

Como {a(k) } es una sucesion acotada, una subsucesi


on {a(k) }, k H, converger
a a un lmite
a. Para este a se tiene que, para cualquier x C,


aT y = lim a(k)
kH

T

y (k) lim a(k)


kH

T

x = aT x.

Un hiperplano que contiene un conjunto convexo C en uno de sus semiespacios cerrados y


que contiene alg
un punto frontera de C se denomina hiperplano soporte de C.
De acuerdo con esta denici
on, el teorema anterior dice que, dado un conjunto convexo C
y un punto frontera y de C, existe un hiperplano soporte de C en y.

Apendice

ERRORES DE REDONDEO Y

ARITMETICA
DE PRECISION
FINITA

AS PRESTACIONES de los algoritmos que resuelven problemas numericos muy en


particular la soluci
on de sistemas de ecuaciones lineales y problemas de optimizacion
lineales y enteros, dependen en gran medida de la exactitud con la que se pueden
representar los n
umeros reales en la maquina donde se han de utilizar. Para dise
narlos
y codicarlos en un lenguaje que entienda la maquina, es necesario conocer como opera la
aritmetica de esa maquina.
Los ordenadores y calculadoras donde se implementan los algoritmos no guardan o almacenan la informaci
on relativa a un n
umero con precisi
on innita, sino mediante una aproximaci
on
empaquetada en grupos de bits, denominados bytes (grupos de 8 bits). Casi todas las m
aquinas
permiten al usuario escoger entre diversas formas de representar un determinado n
umero. Estas representaciones varan casi siempre en funci
on del n
umero de bits utilizados longitud
de palabra y de si se hace en formato entero sin decimales (integer) o en formato de
coma o punto otante (real).

B.1

Sistema de numeraci
on en un ordenador de c
alculo

La representacion de un n
umero entero en un ordenador en formato entero es exacta, siempre
y cuando su valor este comprendido dentro de los lmites que admite la maquina.
Por el contrario, en formato real s
olo es posible representar un conjunto nito de n
umeros,
F , de la recta real: F . Este conjunto F , denominado sistema de numeraci
on, esta formado
por elementos de la forma
f = m et
699

700

Apendice B. Errores de redondeo y aritmetica con precision nita

y esta caracterizado por cuatro par


ametros:
, la base de numeraci
on de la maquina;
t, la precisi
on de la maquina; y
e, el margen de exponentes, emin e emax .
A emin se le denomina lmite de underow, L, y a emax lmite de overow, U . El conjunto F
esta compuesto por todos los n
umeros reales f de la forma
%

d2
d1
dt
+ 2 + + t
f =

&

e = 0, d1 d2 dt e ,

donde los n
umeros enteros (dgitos) d1 , . . . , dt satisfacen
0 di 1,

i = 1, . . . , t

y L e U . El n
umero entero m, que se denomina mantisa, cumple que 0 m t 1.
Al n
umero entero e se le denomina exponente, a 0,d1 dt o a d1 / + + dt / t fracci
on. El
maximo valor de la fracci
on es 1 t , el cual corresponde a di = 1, i = 1, . . . , t; el menor,
1 , que corresponde a d1 = 1, d2 = = dt = 0. Si en una m
aquina, para todo f
= 0 de F ,
d1
= 0, el sistema de numeracion de coma otante de esa maquina se dice normalizado, siendo
en este caso m t1 . Observese que si 0
= f F , entonces m |f | M , donde
m = L1
y

M = U (1 t ).

En la tabla B.1 se representan algunos valores tpicos de los par


ametros que denen el
sistema de numeracion de diversas m
aquinas. Los ordenadores personales IBM-PC siguen el
estandar IEEE de la tabla.
El conjunto F no es evidentemente innito: tiene exactamente 2( 1) t1 (U L + 1) + 1
elementos. Estos elementos no estan igualmente espaciados sobre la recta real sino en potencias
sucesivas de . A modo de ejemplo, si se trabaja en una m
aquina en la que = 2, t = 3, L = 1
y U = 2, los 33 elementos del conjunto F de esa maquina son los representados por peque
nas
muescas en el eje de la gura B.1.

27

21 41 0

1
4

1
2

7
2

Figura B.1
Conjunto F de n
umeros reales representables en un ordenador con = 2, t = 3, L = 1 y
U =2
Como el conjunto F es nito, no hay posibilidad de representar toda la recta de n
umeros
reales en detalle. Por supuesto que aquellos n
umeros mayores que el maximo elemento de F y

B.1 Sistema de numeracion en un ordenador de c


alculo

701

Tabla B.1
Par
ametros de la aritmetica de precision nita de diversas m
aquinas
M
aquina
Cray X-MP
DEC-Alpha
SIEMENS 7090
IBM 3090
IEEE estandar 754, 1985
HP Apollo 9000

Precisi
on
Simple
Doble
Simple
Doble
Simple
Doble
Simple
Doble
Extendida
Simple
Doble
Simple
Doble
Extendida

2
2
2
2
16
16
16
16
16
2
2
2
2
2

t
48
96
24
53
6
14
6
14
28
24
53
24
53
113

L
8192
8192
125
1021
64
64
64
64
64
125
1021
125
1021
16381

U
8191
8191
128
1024
63
63
63
63
63
128
1024
128
1024
16384

menores que el mnimo no pueden representarse de ninguna manera. Tampoco lo podr


an ser
aquellos mas peque
nos que el mas peque
no de F . Cada elemento o n
umero de F representa
todos los n
umeros reales de un intervalo dado alrededor de el.
Para calcular los par
ametros y t de una m
aquina, si no se conocen e interesan por alg
un
motivo, se puede utilizar el c
odigo en Fortran 90 que se lista a continuaci
on.
PROGRAM Beta_y_t
real (kind=2) :: a=1,b=2,t=1,beta,f
!
do; if (f(a+1)-a/=1) exit
a = 2*a
end do
!
do; if (a+b/=a) exit
b = 2*b
end do
!
beta = (a+b)-a
a
= beta
do; if (f(a+1)-a/=1) exit
t = t+1
a = a*beta
end do
!
print *,"beta=",beta,", t=",t
!
END PROGRAM Beta_y_t
real (kind=2) FUNCTION f(a)
real(kind=2), intent(in) :: a
f = a
END FUNCTION f

702

Apendice B. Errores de redondeo y aritmetica con precision nita

Los resultados que se obtendran al hacerlo funcionar en un ordenador personal seran los
siguientes.
beta=

2.0000000000000000 , t=

53.0000000000000000

El algoritmo en el que se basa este codigo utiliza el hecho de que los n


umeros enteros que se
pueden representar exactamente en coma otante en una m
aquina son 1, 2, . . . , t y
t + , t + 2, t + 3, . . . , t+1 , t+1 + 2 , . . .
En el intervalo [ t , t+1 ], los n
umeros de la recta real que se pueden representar estan separados
por una distancia igual a . Este intervalo debe contener un n
umero a que es una potencia
de 2, a = 2k . El primer bucle del c
odigo explora cu
al es ese n
umero a (o mejor dicho, la
representacion en coma otante de a), probando sucesivas potencias 2i para averiguar si 2i y
2i+1 se pueden representar. El bucle que sigue a
nade sucesivas potencias de 2 hasta que se
obtiene el siguiente n
umero de coma otante que se puede representar. Si a este se le resta a
se obtiene la base de numeracion, . Por u
ltimo, t se determina como la potencia mas peque
na
de para la cual su distancia al n
umero en coma otante mas pr
oximo es mayor que 1.
Debido a la optimizaci
on que llevan a cabo casi todos los compiladores que traducen el c
odigo
que se le da a la maquina al lenguaje que ella entiende (denominado ensamblador o codigo de
maquina), puede ocurrir que determinadas operaciones se simpliquen produciendo resultados, en este caso, no deseados1 a efectos teoricos. Por ejemplo, al hacer if ((a+1)-a/=1),
lo habitual es que el compilador lo traduzca a if (1/=1). Para evitar esto es por lo que hemos introducido la function f(a), que no hace otra cosa que devolver el propio argumento.
Tambien se podra haber guardado el resultado a+1 en otra variable, aunque lo normal es que
un buen compilador tampoco se dejase enga
nar por esta estratagema y, adelant
andose un par
de pasos, simplicase de igual manera. Si esto no ocurriese, el c
odigo en Fortran 90 que se
podra emplear, por ejemplo, sera el siguiente.
PROGRAM Beta_y_t
real (kind=2) :: a=1,b=2,t=1,beta,am1=2
!
do; if (am1-a/=1) exit
a
= 2*a
am1 = a+1
end do
!
do; if (a+b/=a) exit
b = 2*b
end do
!
beta = (a+b)-a
a
= beta
am1 = a+1
do; if (am1-a/=1) exit
t
= t+1
a
= a*beta
am1 = a+1
end do
!
1

Esto no quiere decir, en ning


un caso, que los compiladores falseen los resultados obtenibles, simplemente
que para ahorrar pasos intermedios, si se quiere que se lleven a cabo en cualquier caso, aun a costa de la ecacia
en tiempo de c
alculo, hay que tener cuidado.

703

B.2 Precision de un ordenador. Errores de redondeo

print *,"beta=",beta,", t=",t


!
END PROGRAM Beta_y_t

Utilizando el mismo compilador que el empleado para compilar el c


odigo anterior, FTN90 de
NAG, se conseguira el mismo resultado que antes.
Los par
ametros del sistema de numeracion en los que un determinado c
odigo se tendr
a que
desenvolver se pueden conocer en Fortran 90 muy f
acilmente. Basta invocar las funciones
tiny, huge, epsilon, digits, maxexponent, minexponent, radix y range.

B.2

Precisi
on de un ordenador. Errores de redondeo

Para disponer de un modelo de c


omo se representa un n
umero en el sistema de numeracion en
coma otante de un ordenador, se dene el conjunto G,
G = {x  : m |x| M } {0},

(B.1)

y la aplicaci
on f l() : G F de tal forma que
'

f l(x) =

el elemento c F mas cerca de x, si se redondea, y


el elemento c F mas cercano a x que satisfaga |c| |x|, si se trunca.

(B.2)

Si un n
umero x esta situado a igual distancia de dos elementos de F y se redondea, se puede
representar por cualquiera de los dos que no sea cero. Se dice que f l(x) produce overow si
|f l(x)| > max{|y| : y F } y underow si 0 < |f l(x)| < min{|y| : 0
= y F }.
El redondeo y truncamiento se pueden ilustrar en una hipotetica maquina que trabajase
con = 10 y con t = k, de la siguiente manera:
Truncando, el n
umero
x = +0,d1 d2 d3 . . . dk dk+1 dk+2 . . . 10n
perdera los dgitos dk+1 , . . . quedando +0,d1 d2 d3 . . . dk 10n .
Redondeando, se a
nadira 5 10n(k+1) al n
umero en cuestion y luego se truncara.
Si en esa hipotetica maquina t = 3, el n
umero 0,3246 se representara truncando como 0,324
y redondeando como 0,325. Como es obvio, si se utiliza poca precisi
on, el efecto del redondeo
o truncamiento en la diferencia de los resultados obtenidos y esperados en procesos donde se
realizan muchos calculos puede ser importante.
El truncamiento o redondeo dan lugar a lo que se conoce com
unmente como error de
redondeo. Afecta a todas las operaciones que se realizan en un ordenador o m
aquina calculadora.
Denici
on B.1 Si x es la representacion del n
umero x en un ordenador, el error absoluto
de esa representacion es |x x |.
El error absoluto de la representaci
on de un n
umero x con el sistema de coma otante de
un ordenador es |x f l(x)|.

704

Apendice B. Errores de redondeo y aritmetica con precision nita

Denici
on B.2 Si el n
umero x es la representacion de x, el error relativo de esa representacion es
|x x |
.
|x|
Se puede comprobar f
acilmente que si x G y la m
aquina donde se representa usa redondeo,
se cumple que
|x f l(x)|
1
1t .
2
|x|
Si usa truncamiento, que

|x f l(x)|
1t .
|x|

on de la m
aquina o epsilon,
o M , de la m
aquina. El epsilon de
A 1t se la denomina precisi
una m
aquina es la distancia en la recta real de 1,0 al n
umero en coma otante mas pr
oximo.
Es claro que M = 1t es la distancia entre 1,0 y en la recta real. La distancia entre 1,0
y 1/ es t = M /. El valor de epsilon dene la cantidad m
as peque
na que a
nadida a uno
tiene representacion en la m
aquina: 1 + M > 1. Volveremos sobre esta idea inmediatamente
pues nos servir
a para calcular M si no se conoce.
A u = 21 1t se le denomina unidad de redondeo. Si x  esta comprendido entre el margen
de valores de F , se cumple que
f l(x) = x(1 + ),

|| < u.

donde la aplicaci
on f l() es la denida en (B.2) con redondeo. En efecto, suponiendo que x > 0,
este n
umero se puede expresar de la siguiente manera:
x = et ,

t1 t 1.

Es decir, x esta entre los dos n


umeros de coma otante adyacentes
y1 =  et

y y2 =  et .

En consecuencia, f l(x) = y1 o y2 cumpliendose que


|f l(x) x|
De aqu que

|y2 y1 |
et

.
2
2



1 et
 f l(x) x 

1 1t

 2

= u.


x
et
2

Esta u
ltima desigualdad se cumple estrictamente a no ser que = t1 en cuyo caso x = f l(x),
cumpliendose entonces que || = 0.
De las consideraciones anteriores se deduce que cuando se va a trabajar con una m
aquina
o codicar para ella un programa, es muy conveniente conocer su precisi
on o epsilon. Aunque
hoy en da muchos ordenadores y compiladores la facilitan sin m
as que invocarla mediante

B.2 Precision de un ordenador. Errores de redondeo

705

la correspondiente funci
on implcita, es interesante poder calcularla r
apidamente. El siguiente
codigo en Fortran 90 permite hacerlo cuando se trabaje en precisi
on simple o en doble. La
funci
on implcita epsilon() proporciona el valor que se busca sin necesidad de calcularlo. El
codigo tambien se utiliza para conocer los valores en precision doble de radix(), digits(),
huge(), maxexponent(), minexponent(), precision(), range() y tiny() en la maquina en
que se este trabajando.
PROGRAM Epsmaq
real
:: eps=1,xp1
real (kind=2) :: epsd=1,xp1d
!
xp1 = eps+1
do; if (xp1==1) exit
eps = eps/2; xp1 = eps+1
enddo
!
xp1d = epsd+1
do; if(xp1d==1) exit
epsd = epsd/2; xp1d = epsd+1
enddo
!
print (2(a,1pe16.9)/2(a,1pe16.9)),"eps",2*eps,", epsd",2*epsd,
"eps de m
aquina",epsilon(eps),", epsd de m
aquina",epsilon(epsd)
!
print (/2(a,i4),a,1pe16.9/4(a,i6)/a,1pe16.9),
"radix",radix(epsd),", digits",digits(epsd),", huge",huge(epsd),
"maxexponent",maxexponent(epsd),", minexponent",minexponent(epsd),
", precision",precision(epsd),", range",range(epsd),
"tiny",tiny(epsd)
!
END PROGRAM Epsmaq

&
&
&
&
&

Los resultados que este peque


no c
odigo proporciona son los que siguen.
eps 1.192092896E-07, epsd 2.220446049E-16
eps de m
aquina 1.192092896E-07, epsd de m
aquina 2.220446049E-16
radix
2, digits 53, huge 1.797693135+308
maxexponent 1024, minexponent -1021, precision
tiny 2.225073859-308

15, range

307

Denici
on B.3 Se dice que en un ordenador o m
aquina calculadora x aproxima o representa un n
umero x con t dgitos signicativos si t es el entero mas grande no negativo para
el cual
|x x |
< 0,5 101t .
|x|
El n
umero 0,0123 aproxima a 0,012345 con 3 dgitos signicativos pues
|0,012345 0,0123|
= 0,0036452 < 0,5 102 = 0,005.
|0,012345|
De acuerdo con esto, todos los dgitos de la representaci
on de un n
umero en un ordenador
comenzando por el primero distinto de cero por la izquierda se denominan dgitos signicativos.

706

Apendice B. Errores de redondeo y aritmetica con precision nita

Si el sistema de numeracion que usa la m


aquina est
a normalizado, todos los dgitos de la mantisa
seran signicativos.

B.3

Aritm
etica en un ordenador

El sistema de numeracion, F , de un ordenador tiene denidas entre sus elementos operaciones

aritmeticas. Estas,
dada la nitud del conjunto F , son operaciones aritmeticas de precision
nita. Si 2 designa cualquiera de las cuatro operaciones aritmeticas elementales +, , y ,
y |a2b| G, donde este conjunto G es el denido en (B.1), el resultado de cualquier c
omputo
o calculo en ordenador con ellas dar
a como resultado f l(a2b). Cualquier operaci
on aritmetica
en ordenador cumple que f l(a2b) = (a2b)(1 + ), donde || < u. Si las operaciones aritmeticas
en una m
aquina se representan por , , y , el resultado de aplicarlas es:
ab
ab
ab
ab

=
=
=
=

f l(f l(a) + f l(b));


f l(f l(a) f l(b));
f l(f l(a) f l(b)) y
f l(f l(a) f l(b)).

El error relativo de cualquiera de estas operaciones es


|a2b f l(a2b)|
< u.
|a2b|
Ejemplo B.1 En una m
aquina = 10, t = 3 y la representaci
on se hace mediante truncamiento. La operaci
on aritmetica (103 + 1) 1 dar
a como resultado
f l[f l(103 + 1) 1] = 0.
El error relativo es 1. Por el contrario,
f l[103 + f l(1 1)] = 103 ,
resultado exacto. La aritmetica de coma otante, por consiguiente, no siempre es asociativa.
Ejemplo B.2 Supongamos que se quiere operar con los n
umeros x = 13 e y = 75 en una
maquina con = 10 y t = 5 que usa truncamiento. En la siguiente tabla se observan los
resultados obtenibles y los errores de los mismos.
Operaci
on

Resultado

Valor Real

Error Absoluto

Error Relativo

xy
yx
xy
yx

0,10476 101
0,38095 100
0,23809 100
0,21428 101

22/21
8/21
5/21
15/7

0,190 104
0,238 105
0,524 105
0,571 104

0,182 104
0,625 105
0,220 104
0,267 104

Como el error maximo relativo es 0,267 104 , la aritmetica de ese ordenador para estos
calculos produce errores satisfactorios. Sup
ongase, sin embargo, que se tiene u = 0,714251,
4
v = 98765,9 y w = 0,111111 10 . La representacion en la m
aquina de estos n
umeros sera

B.3 Aritmetica en un ordenador

707

f l(u) = 0,71425 100 , f l(v) = 0,98765 105 y f l(w) = 0,11111 104 . En la tabla siguiente
se puede comprobar como y  u produce un error absoluto peque
no pero un error relativo
bastante grande.
Operaci
on
yu
(y  u)  w
(y  u) v
uv

Resultado

Valor Real

104

0,30000
0,27000 101
0,29629 101
0,98765 105

Error Absoluto

104

105

0,34714
0,31243 101
0,34285 101
0,98766 105

0,471
0,424
0,465
0,161 101

Error Relativo
0,136
0,136
0,136
0,163 104

La divisi
on posterior por w y multiplicaci
on por v amplica el error absoluto sin modicar
el error relativo. La adici
on del n
umero grande u y el peque
no v produce un error absoluto
grande pero no un gran error relativo.
Este ejemplo sirve de introducci
on para considerar otro aspecto de la aritmetica de precision nita de extraordinaria importancia: el fen
omeno conocido como cancelaci
on catastr
oca
o simplemente error numerico de cancelaci
on. Se reere a la perdida extrema de dgitos signicativos que conllevan ciertas operaciones entre n
umeros similares entre s: concretamente al
restarlos. En efecto, para llevar a cabo sumas y multiplicaciones, los n
umeros en un ordenador
son primeramente convertidos a un formato de mantisa com
un, desplazando el primer dgito
signicativo de una de ellas a la posici
on equivalente del otro. De esta forma, si ese desplazamiento supera los dgitos signicativos que la m
aquina permite, se puede perder toda la
informaci
on del n
umero desplazado. Por ejemplo, considerese la funci
on f (x) = (1 cos x)/x2 .
5
2
Si x = 1,2 10 el valor de cos x, redondeado a diez dgitos signicativos, es
c = 0,9999999999
por lo que

1 c = 0,0000000001.

El valor de la funci
on es entonces
1010
1c
=
= 0,6944 . . .
x2
1,44 1010
el cual es erroneo pues 0 f (x) < 1/2 para todo x
= 0. El problema de este ejemplo estriba
en que 1 c solo posee un dgito signicativo. La resta 1 c es exacta pero la operacion
que conlleva produce un resultado de la misma magnitud que el error en c. Es decir, la resta
amplica mucho la importancia del error que se obtiene al calcular c. Para evitar este problema,
como cos x = 1 2 sen2 (x/2), es facil ver que
f (x) =

1
2

sen(x/2)
x/2

&2

Calculando f (x) mediante esta formula y aproximando sen(x/2) con 10 dgitos signicativos,
el resultado es f (x) = 0,5, el cual se aproxima al valor exacto en 10 dgitos.
2

El valor con quince dgitos es 0,99999999992800.

708

Apendice B. Errores de redondeo y aritmetica con precision nita

El ejemplo m
as tpico de error de cancelaci
on lo constituye el c
alculo de ex . Si recordamos,
x
la expresi
on del desarrollo en serie de e es:
ex = 1 + x +

x2 x3
+
+
2!
3!

Si se desea calcular e5,5 mediante desarrollo en serie en una m


aquina con = 10 y t = 5, los
resultados que se obtienen son los siguientes:
e5,5 = +1,0000 5,5000 + 15,125 27,730 + 38,129
41,942 + 38,446 30,208 + 20,768 12,692 + 6,9803 3,4902 + 1,5997
= +0,0026363.
La suma se termina despues de 25 terminos pues los siguientes no aportan dgitos signicativos
al resultado. El valor real de e5,5 es 0,00408677. Como se puede comprobar, la diferencia es
muy importante: tanto que los dos resultados apenas se parecen.
El problema de esta forma de proceder surge de sumar y restar valores relativamente distintos entre s uno o varios ordenes de magnitud con la consiguiente perdida de dgitos
signicativos. La soluci
on para este problema en este caso consistira en obtener el desarrollo
en serie de e5,5 y luego calcular el recproco. La respuesta que se obtendra sera:
1
1
= 0,0040865.
e5,5 = 5,5 =
e
1 + 5,5 + 15,125 +
Muchos algoritmos tienen en cuenta que se puedan presentar los problemas expuestos y
tratar de evitarlos siempre que sea posible.
Los errores de cancelacion no tienen por que ser necesariamente malos en s mismos.
En efecto, pueden ser un buen sntoma para detectar que el problema que los reeja est
a
intrnsecamente mal condicionado y alertar de ello, u ocurrir que de su resultado no dependa
signicativamente el calculo general. Un ejemplo de esta u
ltima circunstancia se presenta cuando x  y z > 0. Evidentemente la cancelaci
on que se pueda producir al calcular x + (y z)
no tiene relevancia.
Para profundizar un poco m
as en el fenomeno del error de cancelacion, consideremos la

resta x
=a
b, donde a
= a(1 + a) y b = b(1 + b). Las cantidades a y b designan los
errores relativos ya presentes en los datos de esta operacion debidos, por ejemplo, a c
alculos
previos. Si x = a b, el error relativo de x es
|x x
|
| aa bb|
|a| + |b|
=
max (|a|, |b|)
.
|x|
|a b|
|a b|
El error relativo de x es grande cuando |a b|  |a| + |b|, es decir, cuando se produce una
cancelacion importante en la resta. Esto atestigua el que una operaci
on de resta en la que la
cancelacion es importante no hace sino magnicar los errores o imprecisiones ya existentes en
los datos; en este caso en a
y b.

B.3.1

Soluci
on de una ecuaci
on cuadr
atica

Desde el punto de vista matematico, resolver la ecuacion cuadr


atica ax2 + bx + c = 0 es un
problema trivial. Desde el punto de vista numerico con precision nita, no tanto, present
andose
algunas peculiaridades dignas de tenerse en cuenta.

B.3 Aritmetica en un ordenador

709

Como es sabido, si a, b y c son n


umeros reales y a
= 0, las dos soluciones, x1 y x2 , estan
dadas por las expresiones:

b + b2 4ac
(B.3)
x1 =
2a
y

b b2 4ac
x2 =
.
(B.4)
2a
Veamos lo que ocurre al aplicar directamente estas formulas en una m
aquina en la que
= 10, t = 8, L = 50 y U = 50 (bastante m
as precision de lo que es habitual).
Si a = 1, b = 105 y c = 1, las races autenticas de la ecuacion son
x1 = 99999,999990
y
x2 = 0,000010000000001.
Si se usan las expresiones (B.3) y (B.4) en la m
aquina apuntada, el resultado es
x1 = 100000,00
y
x2 = 0,0.
Al calcular x1 y x2 ha habido un error de cancelaci
on catastr
oco, pues
f l((105 )2 4) = 1010 .
La forma de evitar este error es bien conocida. Consiste en usar el signo de b para determinar
cual de las expresiones (B.3) o (B.4) producira menor error de cancelaci
on, y usarla para
calcular la raz de mayor valor absoluto a partir de la f
ormula



b + signo(b) b2 4ac
x1 =
.
2a
Como ax2 + bx + c = a(x x1 )(x x2 ), lo que implica que ax1 x2 = c, la otra raz se podra
calcular usando la expresi
on
c
.
x2 =
ax1
Aplicando este criterio en el ejemplo apuntado se obtendran las races x1 = 100000,00 y
x2 =0,00001: ambas buenas soluciones.

B.3.2

M
as errores. Una suma de innitos sumandos

Como es sabido


k=1

k2 =

2
= 1,644934066848 . . .
6

710

Apendice B. Errores de redondeo y aritmetica con precision nita

Supongamos que no se conoce el resultado y que se desea realizar la operaci


on con un ordenador
program
andola adecuadamente y aproxim
andola lo m
as posible a su resultado exacto.
Lo mas logico parece codicar un bucle, en el que k haga de ndice, mediante el cual se
sumen los terminos correspondientes hasta que la suma no vare, pues no se pueden aportar
mas dgitos signicativos de acuerdo con el n
umero de estos que proporcione ese ordenador.
En Fortran, en un ordenador personal, utilizando precisi
on simple, el valor que se obtiene a
partir de k = 4096 es 1,64472532. Este resultado s
olo se aproxima al exacto en cuatro dgitos
signicativos cuando lo esperable, de acuerdo con el sistema de numeraci
on de la m
aquina,
seran 6 dgitos.
La explicaci
on del porque ocurre esto radica en la forma en que se efect
ua la suma: primero

los n
umeros mayores y despues los mas peque
nos. Estos u
ltimos difcilmente contribuyen al
resultado signicativamente. En efecto, para k = 4096, se lleva a cabo la siguiente operaci
on:
2
2
24
s + 4096 . El termino 4096 = 2
y s 1,6. Como ya hemos visto, la precision simple
utiliza una mantisa de 24 bits por lo que 40962 , frente a s 1,6, se sale de la ventana de
valores que admite la palabra de ordenador que ha de representar el resultado. Igual ocurrira
con los terminos sucesivos.
La forma de remediar esto es sumar primero los terminos mas peque
nos y luego los grandes.
Proceder as, sin embargo, requiere saber cu
antos terminos se habr
an de utilizar para aproximar
adecuadamente el resultado antes de comenzar los calculos. Si se utilizan 109 , el valor que se
obtiene con el codigo en Fortran 90 que sigue es 1,6449340658482266, es decir, el exacto con
9 dgitos signicativos.
PROGRAM Suma_de_serie
!
real (kind=2) :: suma=0,uno=1
!
do i=1000000000,1,-1
suma=suma+uno/(dble(i)*i)
end do
!
print *,suma
!
END PROGRAM Suma_de_serie

Referencias
Como resumen de este apendice en una sola idea, cabe insistir en la importancia que tiene, a la
hora de dise
nar o codicar algoritmos en ordenador, tener en cuenta que se estar
a trabajando en
un entorno numerico nito. Habr
a que tener mucho cuidado con las singularidades que puedan
presentar los problemas a resolver con un determinado algoritmo, los criterios con los que se
decida cu
ando se ha de parar un proceso iterativo que alcance la soluci
on por aproximaciones
sucesivas, la precision m
axima obtenible, cu
ando se ha de considerar que un n
umero es cero,
etc.
Existen excelentes referencias de calculo numerico y teora de errores en entornos numericos
nitos donde se pueden encontrar mucho m
as ampliados los estudios sobre representacion
y operaciones con n
umeros en ordenadores, y los errores que esto puede acarrear. Para la
elaboraci
on de este anexo se ha seguido Golub y Van Loan [1989], Forsythe, Malcolm y Moler
[1977], Stoer y Bulirsch [1980] y, fundamentalmente, Higham [1996].

Apendice

REDES ELECTRICAS:
FLUJOS POR SUS
ELEMENTOS Y POTENCIAS
INYECTADAS EN SUS
NUDOS

ARTIENDO DE UN ESQUEMA GENERALIZADO1 de un elemento (una lnea


o un transformador) de una red electrica de transporte de energa o transmisi
on de
potencia, en este apendice se desarrollan, en funci
on de las tensiones en los nudos, los
argumentos de estas tensiones y posiciones de los reguladores2 en los transformadores,
las ecuaciones que relacionan la potencia inyectada en cada nudo de la red y los ujos de
potencia en los elementos de la misma. Estas ecuaciones3 son utilizadas repetidas veces en el
texto.

C.1

Lnea

Analizaremos primero el caso mas sencillo: aquel en que no est


an presentes transformadores
con regulador variable. El elemento de transporte, lnea, que une dos nudos i y j se representa
1

Denominado esquema en .
En ingles denominados taps.
3
Para profundizar en el estudio de estas cuestiones aconsejamos al lector consultar las referencias indicadas
al nal del apendice.
2

711

712

Apendice C. Flujos por elementos de transporte y potencias . . .

seg
un el esquema de la gura C.1.

Figura C.1
Esquema en de una lnea entre dos nudos i y j

C.1.1

Potencias inyectadas en los nudos

Si designamos por Pi y Qi las potencias activa y reactiva inyectadas balance de potencia


generada menos potencia absorbida o demandada en el nudo i, se tiene que
Pi + iQi = Vi Ii ,
donde Ii es la conjugada de la intensidad compleja que sale del nudo i y Vi la tensi
on
tambien compleja en el nudo i.
La intensidad que sale de un nudo i es la suma de todas las que circulan por los elementos
que parten de dicho nudo; esto es:
Ii

n


Iij ,

j=1

donde n es el n
umero de nudos de la red. El valor de estas Iij sera cero, obviamente, entre
aquellos nudos donde no haya conexi
on directa. La expresi
on que liga las intensidades que
circulan entre los nudos i y j (ver el esquema que describe la gura C.1) con las tensiones en
ambos nudos es:


Iij = Yij Vi Vj = Vi Vj Ysij + Vi Ypij




= Vi Ypij + Ysij + Vj Ysij .


A la expresi
on Ysij = Yij se le denomina admitancia mutua de los nudos i y j; a Ypij + Ysij =

Yii , admitancia propia del nudo i (con respecto claro esta a la lnea entre i y j).

C.1 Lnea

713

Con estas expresiones, las potencias inyectadas en los nudos saldr


an de estas otras:

Pi = Real

n


Vi

j=1

Qi = Ima. Vi

Yij Vj

n


Yij Vj

j=1

Las tensiones y las admitancias magnitudes complejas se expresan de la siguiente forma:


Vi = |Vi | (cos i + i sen i )
Vj = |Vj | (cos j + i sen j )
Yij = |Yij | (cos ij + i sen ij ) .
Las potencias inyectadas seran, por consiguiente:

Pi = Real |Vi | (cos i + i sen i )

n


|Vj ||Yij | (cos j i sen j ) (cos ij i sen ij )

j=1

Qi = Ima. |Vi | (cos i + i sen i )

n


Desarrollando la expresi
on entre llaves se llega a:
|Vi | (cos i + i sen i )

|Vj ||Yij | (cos j cos ij sen j sen ij

j=1

i (sen j cos ij + sen ij cos j )) .


Recordando que
cos( + ) = cos cos sen sen
cos( ) = cos cos + sen sen
sen( + ) = sen cos + sen cos
sen( ) = sen cos sen cos ,
se puede simplicar la expresi
on anterior, obteniendo
|Vi | (cos i + i sen i )

n


|Vj ||Yij | (cos(j + ij ) i sen(j + ij )) .

j=1

Si se introduce el termino (cos i + i sen i ) dentro del sumatorio, se obtiene


|Vi |

n


|Vj ||Yij | (cos j i sen j ) (cos ij i sen ij ) .

j=1

n


|Vj ||Yij | (cos(j + ij ) cos i + sen(j + ij ) sen i

j=1

+ i (cos(j + ij ) sen i sen(j + ij ) cos i )) .

714

Apendice C. Flujos por elementos de transporte y potencias . . .

Reagrupando terminos en esta u


ltima expresi
on se llega a
|Vi |

n


|Vj ||Yij | (cos(i j ij ) + i sen(i j ij )) .

j=1

En resumen, las potencias activas y reactivas inyectadas en el nudo i son:


Pi = |Vi |

n


|Vj ||Yij | cos(i j ij )

j=1

Qi = |Vi |

n


|Vj ||Yij | sen(i j ij ).

j=1

Como en el caso que nos ocupa Yii = Ypij + Ysij = Gpij + iBpij + Gsij + iBsij e Yij = Ysij =
Gsij iBsij , tambien se pueden expresar como sigue.
Pi = |Vi |

n 


Gpij + Gsij |Vi |

j=1
j=i

Qi = |Vi |

n 


n


|Vj | Gsij cos(i j ) + Bsij sen(i j )

j=1
j=i

Bpij + Bsij |Vi |

j=1
j=i

n


|Vj | Gsij sen(i j ) Bsij cos(i j ) .

j=1
j=i

Si el nudo tiene alg


un condensador o reactancia a el conectado, Bpij debera englobar la del
condensador/reactancia y las de tierra de las lneas conectadas a ese nudo.

C.1.2

Flujos de potencia entre los nudos

La potencia aparente que circula de un nudo i a otro j es


Sij = Pij + iQij = Vi Iij .

(C.1)

, medida en el nudo i y denida como positiva en la direcci


on i j, es
La intensidad Iij

Iij = Vi Vj Ysij + Vi Ypij


(

)*

Isij

( )* +
Ipij

por lo que la ecuaci


on (C.1) queda


Sij = Vi Vi Vj Ysij + |Vi |2 Ypij .

(C.2)

C.1 Lnea

715

Los complejos Vi , Vj , Ysij e Ypij son:


Vi = |Vi | (cos i + i sen i ) ;
Vj = |Vj | (cos j + i sen j ) ;












Ysij = Ysij  cos sij + i sen sij ;


Ypij = Ypij  cos pij + i sen pij .
Sustituyendo estas expresiones en la ecuaci
on (C.2):


Sij = |Vi |(cos i + i sen i ) |Vi | (cos i i sen i ) |Vj | (cos j i sen j )










2
Ysij  cos sij i sen sij + |Vi | Ypij  cos P i sen pij


= |Vi |(cos i + i sen i ) |Vi | cos i i|Vi | sen i |Vj | cos j + i|Vj | sen j


















Ysij  cos sij i sen sij + |Vi |2 Ypij  cos pij i|Vi |2 Ypij  sen pij

= |Vi |2 cos i cos i + i|Vi |2 sen i cos i i|Vi |2 cos i sen i + |Vi |2 sen i sen i
|Vi ||Vj | cos i cos j i|Vi ||Vj | sen i cos j + i|Vi ||Vj | cos i sen j












|Vi ||Vj | sen i sen j Ysij  cos sij i sen sij + |Vi |2 Ypij  cos pij






i|Vi |2 Ypij  sen pij







= |Vi |2 |Vi ||Vj | cos(i j ) i|Vi ||Vj | sen(i j ) Ysij  cos sij i sen sij















+ |Vi |2 Ypij  cos pij i|Vi |2 Ypij  sen pij











= |Vi |2 Ysij  cos sij i sen sij |Vi ||Vj | Ysij  cos i j sij


















i|Vi ||Vj ||Ysij | sen i j sij + |Vi |2 Ypij  cos pij i|Vi |2 Ypij  sen pij



= |Vi |2 Ysij  cos sij |Vi ||Vj ||Ysij | cos i j sij + |Vi |2 |YP | cos pij








i |Vi |2 Ysij  sen sij + |Vi ||Vj ||Ysij | sen i j sij + |Vi |2 |Ypij | sen pij .
La parte real de esta u
ltima expresi
on es la potencia activa, la imaginaria la reactiva. En
resumen, se tienen las expresiones que siguen.
Pij
Qij









2
= |Vi | Ysij  cos sij |Vi ||Vj ||Ysij | cos i j sij + |Vi | Ypij  cos pij










= |Vi |2 Ysij  sen sij |Vi ||Vj | Ysij  sen i j sij |Vi |2 |Ypij | sen pij .
2

Estas u
ltimas ecuaciones, teniendo en cuenta que Ysij = Gsij + iBsij e Ypij = Gpij + iBpij , se

716

Apendice C. Flujos por elementos de transporte y potencias . . .

pueden expresar de la forma que sigue.


Pij = |Vi |2 Gsij |Vi ||Vj |Gsij cos(i j ) |Vi ||Vj |Bsij sen(i j ) + |Vi |2 Gpij
Qij = |Vi |2 Bsij |Vi ||Vj |Gsij sen(i j ) + |Vi ||Vj |Bsij cos(i j ) |Vi |2 Bpij .
Ecuaciones similares se pueden obtener para los ujos Pji y Qji sin mas que sustituir en estas
u
ltimas las i por j y las j por i.

C.2

Transformador

Consideremos ahora el caso en que exista un transformador entre el nudo i y el nudo j seg
un
se representa en la gura C.2.

Figura C.2
Transformador entre los nudos i y j
El modelo de transformador que se elige es aquel que la literatura especializada denomina
a:1. Es decir, se considera que la tensi
on del nudo j es la que tiene como referencia la unidad.
El nudo i, por consiguiente, tendr
a una tensi
on aVj .
Veamos a continuacion c
omo se puede tener en cuenta la presencia del regulador en un
nuevo esquema equivalente en para poder seguir utilizando las ideas hasta ahora expuestas.

C.2.1

Esquema equivalente con el regulador del transformador en el primario

El esquema que se considera en este caso es el de la gura C.2. La intensidad que sale del nudo
i, una vez atravesado el regulador, Iij a, es:

Sij

Iij a =   =
Vi
a

&

Vi
Vi
Vj Ysij + Ypij .
a
a

C.2 Transformador

La que sale del nudo j:

717

&

Sji
Vi
Ysij + Vj Ypij .
Iji = = Vj
Vj
a

Reescribiendo estas dos ecuaciones agrupando terminos se obtiene que


%

&

&

Yp
Ys
Ysij
Iij =
+ 2ij Vi + ij Vj
2
a
a
a
&
%


Ys
Iji = ij Vi + Ysij + Ypij Vj .
a

(C.3)
(C.4)

En el caso de una lnea hubiesemos llegado a las siguientes expresiones:




Iij = Ysij + Ypij Vi + Ysij Vj




Iji = Ysij Vi + Ysij + Ypij Vj .


Escritas es forma matricial:

I = |Ynudos |V.

La matriz |Ynudos | es la denominada matriz de admitancias de nudos: dene las admitancias


propias y mutuas de los nudos de la red.
Volviendo al caso de transformador, este, para su estudio como un elemento mas de transporte, se puede aproximar por un esquema en (seg
un se describe en la gura C.3) convencional
sin regulador haciendo la admitancia en serie Y1 igual a Ysij /a, la admitancia-shunt Y2 igual a
Ysij (1 a) Ypij
+ 2
a2
a
y la Y3 a

Ysij (a 1)
+ Ypij .
a
De esta forma conseguimos que las admitancias resultantes propias de los nudos i y j y la
mutua ij veriquen las ecuaciones (C.3) y (C.4).

C.2.2

Esquema equivalente con el regulador del transformador en el secundario

El esquema que se considera en este caso es el de la gura C.4. Siguiendo un razonamiento


similar al del caso en que el regulador estaba en el primario se deduce que la intensidad que
sale del nudo i es:

Sij
Iij = = Vi Ypij + (Vi aVj )Ysij ;
Vi
y la que sale del nudo j:

Sji
Iji
=
= aVj Ypij + (aVj Vi )Ysij .
a
(aVj )

718

Apendice C. Flujos por elementos de transporte y potencias . . .

Figura C.3
Esquema en del transformador entre i y j con el regulador conectado a i

Figura C.4
Transformador entre i y j

C.2 Transformador

Reagrupando terminos

719

Iij = Ysij + Ypij Vi + aYsij Vj

(C.5)

Iji = aYsij Vi + a2 Ysij + Ypij Vj .

(C.6)

Igual que en el caso en que el regulador estaba en el primario, el nuevo esquema en (ver
gura C.5) dara Y1 = aYsij ; la admitancia-shunt Y2 sera
(1 a)Ysij + Ypij
y la Y3

a(a 1)Ysij + a2 Ypij .

Estas nuevas admitancias cumplen las ecuaciones (C.5) y (C.6).

Figura C.5
Esquema en del transformador entre i y j con el regulador conectado a j

C.2.3

Potencias inyectadas en los nudos

De igual forma que en el apartado C.1.1 para el caso de una lnea, teniendo en cuenta los
nuevos esquemas en de la guras C.3 y C.5, las potencias inyectadas son las que se indican
a continuaci
on.
Regulador en el primario
Pi = |Vi |2

&
n %

Gpij + Gsij
j=1
j=i

Qi = |Vi |

a2

|Vi |

&
n %

Bpij + Bsij
j=1
j=i

a2

n

|Vj | 
j=1
j=i

|Vi |

n

|Vj | 
j=1
j=i

Gsij cos(i j ) + Bsij sen(i j )

Gsij sen(i j ) Bsij cos(i j )

720

Apendice C. Flujos por elementos de transporte y potencias . . .

n 


Pj = |V j|2

i=1
i=j

Qj = |Vj |

n 


n


Gpij + Gsij |Vj |

i=1
i=j

Bpij + Bsij |Vj |

i=1
i=j

|Vi |a Gsij cos(j i ) + Bsij sen(j i )

n


|Vi |a Gsij sen(j i ) Bsij cos(j j ) .

i=1
i=j

Regulador en el secundario
n 


Pi = |Vi |2

Gpij + Gsij |Vi |

j=1
j=i

Qi = |Vi |

n 


n

j=1
j=i

Bpij + Bsij |Vi |

j=1
j=i

Pj = |Vj |

a2

i=1
i=j

Qj = |Vj |

|Vj |

&
n %

Bpij + Bsij

a2

i=1
i=j

C.2.4

n


|Vj |a Gsij sen(i j ) Bsij cos(i j )

j=1
j=i

&
n %

Gpij + Gsij

|Vj |a Gsij cos(i j ) + Bsij sen(i j )

n

|Vi | 
i=1
i=j

|Vj |

Gsij cos(j i ) + Bsij sen(j i )

n

|Vi | 
i=1
i=j




Gsij sen(j i ) Bsij cos(j i ) .

Flujos de potencia entre los nudos

Las formulas de los ujos por el elemento transformador entre los nudos i y j son las que
siguen.
Regulador en el primario
%

Pij
Qij

&


Gsij + Gpij
|Vi ||Vj | 
= |Vi |

G
cos(

)
+
B
sen(

)
sij
i
j
sij
i
j
a2
a
%
&


|Vi ||Vj |
2 Bsij + Bpij
= |Vi |

Gsij sen(i j ) Bsij cos(i j )


a2
a
2


|Vi ||Vj | 
Gsij cos(j i ) + Bsij sen(j i )
a
 |V ||V | 

i
j
+ Bpij
Gsij sen(j i ) Bsij cos(j i ) .
a

Pji = |Vj |2 Gsij + Gpij




Qji = |Vj |2 Bsij

C.2 Transformador

721

Regulador en el secundario


Pij = |Vi |2 Gsij + Gpij |Vi ||Vj |a Gsij cos(i j ) + Bsij sen(i j )


Qij = |Vi |2 Bsij + Bpij |Vi ||Vj |a Gsij sen(i j ) Bsij cos(i j )


Pji = |Vj |2 a2 Gsij + Gpij |Vi ||Vj |a Gsij cos(j i ) + Bsij sen(j i )


Qji = |Vj |2 a2 Bsij + Bpij |Vi ||Vj |a Gsij sen(j i ) Bsij cos(j i ) .

Referencias
Lo expuesto en este apendice ha sido desarrollado por el autor bas
andose en la teora estandar
sobre an
alisis de sistemas de generacion y transporte de energa electrica. Buenas referencias en
este sentido son las clasicas: Brown [1975], Elgerd [1982], Stagg y El-Abiad [1968] y Stevenson
[1975].

Apendice

CASUISTICA DE
LINEAL
PROGRAMACION

DEDICADO a estudiar en profundidad dos casos de la


STE APENDICE
ESTA
realidad econ
omico/industrial empresarial cuyo planteamiento da lugar a la formulacion de programas lineales de una cierta complejidad. Se reeren uno a la gesti
on
nanciera del dinero disponible en caja en una empresa u organismo, y a la gestion
de la explotaci
on de una renera de petr
oleo el otro.

D.1

Gesti
on nanciera a corto plazo

Uno de los cometidos mas importantes de los responsables nancieros de las grandes, medianas e
incluso peque
nas empresas consiste en gestionar el dinero (liquidez) disponible a corto plazo, as
como otros productos nancieros, de tal forma que se produzcan los mayores benecios posibles
de ella evitando que, de no hacerse as, vayan a parar a los bancos y entidades depositarios de
los mismos.
En este apendice nos planteamos el trabajo a llevar a cabo por un agente nanciero de una
empresa y las decisiones que debe tomar para que, a partir de los resultados que se pueden
derivar de utilizar programaci
on lineal, su gesti
on e inversiones sean optimas por lo que respecta
a la obtenci
on del m
aximo de los benecios monetarios obtenibles.
Supongamos que nuestro hombre debe decidir sobre que hacer con el dinero disponible y
obtenible a corto plazo, en cuatro perodos consecutivos de 10, 20, 30 y 60 das, respectivamente. Es decir, maximizar los benecios derivados de su gesti
on en los pr
oximos cuatro meses,
divididos en perodos seg
un lo indicado.
La cartera de valores (bonos, acciones, etc.) negociables que posee la Empresa al comienzo
del primer perodo se compone de 5 tipos diferentes cuyos nominales son 100 MM de pesetas,
75 MM, 750 MM, 600 MM y 900 MM, respectivamente. Los primeros 4 tipos vencen en los
723

724

Apendice D. Casustica de programacion lineal

perodos 1 a 4 de estudio, mientras que los del u


ltimo tipo lo hacen m
as alla del horizonte de
este analisis. Todos los valores, cualesquiera que sea su tipo, se pueden vender antes de que
venzan descontando (perdiendo) la cantidad correspondiente. En el perodo n
umero 2, ademas,
vencen otros valores cuyo nominal es de 100 MM de pesetas, aunque no se pueden negociar
pues esa cantidad esta reservada para otros menesteres.
La u
nica fuente de nanciaci
on ajena a los propios recursos de la Empresa con la que cuenta
nuestro agente es una lnea de credito abierta con un banco por un montante total de 850 MM
de ptas. Los prestamos se pueden solicitar al comienzo de cada uno de los cuatro perodos de
estudio debiendo reintegrarse al cabo de un a
no junto con un interes del 0,7% mensual. No se
permiten la amortizaciones de esta deuda antes de su vencimiento. Los costes unitarios, Fj ,
que para los perodos de estudio supone nanciarse de esta manera son los que se indican en
la tabla que sigue.
Coste de los cr
editos
F1
0,0280
F2
0,0257
F3
0,0210
F4
0,0140
Observese que, por ejemplo, 0,0257 = [(60 + 30 + 20) /30] 0,7/100, es decir, si se pide un
credito en el segundo perodo, el coste unitario que ello representa en los das restantes de
estudio es de 0,0257 pesetas por cada una concedida.
Si en un perodo se compra pasivo que no sea credito, los terminos del mercado en el que
opera la Empresa dictan que se debe devolver su nominal a 30 das o, si se desea hacerlo a los 10
das, se puede obtener un benecio o prima del 2% (para designarlo r
apidamente 2-10/N-30).
De acuerdo con esto, los benecios que obtendra la Empresa por la compra de este pasivo son
los de la tabla que sigue.
Coste del pasivo
no crediticio
C12
0,0204
C13
0,0000
C22
0,0204
C23
0,0000
C33
0,0204
C34
0,0000
C44
0,0204
Los valores de esta tabla se deducen considerando que si a los 10 das de adquirir un compromiso
interesa reembolsarlo con un benecio del 2%, la ganancia unitaria de esta operaci
on es 1/(1
0,02) = 0,0204082 0,0204.
Todas las obligaciones contradas por la Empresa antes del comienzo del perodo de estudio
han sido satisfechas, por lo que el pasivo que se adquiera se habr
a de devolver dentro de este
perodo no pudiendose, tampoco, comprometerse con nada que suponga pagos posteriores.
En los cuatro perodos en que se divide el estudio se preve adquirir pasivo no crediticio por
un montante de 400 MM, 650 MM, 1.400 MM y 2.300 MM de pesetas, respectivamente. Se
supone que estas adquisiciones se efect
uan el primer da de cada uno de los cuatro perodos y
que los pagos tambien hay que efectuarlos al comienzo del perodo correspondiente.

D.1 Gestion nanciera a corto plazo

725

Los costes unitarios asociados con la compra y venta de productos nancieros o valores para
cada uno de los perodos de estudio se describen en la tabla D.1. Si, por ejemplo, se invierte 1
mill
on de pesetas el primer perodo en valores del tipo que sea que vencen en el cuarto perodo,
lo que se gana mediante esta operacion es
D41 1 = 0,008 MM de ptas.
Si se obtiene 1 mill
on de pesetas en el perodo 2 por la venta de valores que vencen m
as alla
del perodo de estudio, perodo 5, el coste asociado a esta otra operacion es
E52 1 = 0,019 MM de ptas.
Es decir, se pierden 19.000 pesetas por costes derivados de la operaci
on.
Se supone que al comienzo del perodo de estudio hay en caja 100 MM de pesetas y que los
ujos de dinero a la caja son 1.000 MM de ptas (salida de ella), 1.500 MM, 2.000 MM y
4.500 MM, en los perodos 1, 2, 3 y 4, respectivamente. El dinero mnimo que debe haber en
caja al nal de cada perodo (o comienzo del siguiente) puede ser 0 ptas. Tambien se requiere
que el balance medio diario en caja sea como mnimo de 100 MM de pesetas.

D.1.1

Modelo del problema a optimizar

Si de lo que se trata globalmente con todas estas operaciones, en principio, es maximizar


las ganancias que nuestro nanciero puede conseguir, veamos c
omo plantear este proyecto
ayud
andonos de su modelizaci
on como un problema de programaci
on lineal.
Tabla D.1
Costes unitarios de la compra o venta de valores o productos nancieros
Costes de compraventa de valores
Compra
D21 0,0010
D31 0,0040
D41 0,0080
D51 0,0160
D32 0,0025
D42 0,0070
D52 0,0150
D43 0,0040
D53 0,0120
D54 0,0080

Venta
E21 0,0020
E31 0,0050
E41 0,0100
E51 0,0200
E32 0,0037
E42 0,0087
E52 0,0190
E43 0,0050
E53 0,0150
E54 0,0100

726

Apendice D. Casustica de programacion lineal

Denamos las variables del problema:


xgj
yij
zij
wg
bj

:
:
:
:
:

cantidad pagada en el perodo j por compromisos adquiridos en el perodo g.


cantidad invertida en el perodo j en valores que vencen en el perodo i.
cantidad obtenida por la venta de valores en el perodo j que vencen en el perodo i.
credito obtenido en el perodo g.
balance de caja en el perodo j.

Utilicemos ademas la siguiente notaci


on para designar otras magnitudes del problema:
A:
Cgj :
Dij :
Eij :
Fg :
Lg :
Ng :
R:
Si :
agj :
dij :
eij :

balance de caja medio que se necesita en cada perodo.


remuneraci
on unitaria de la cantidad xgj .
remuneraci
on unitaria de las inversiones en valores yij .
perdida unitaria por la venta de zij .
coste del credito pedido en el perodo g.
cantidad total de pasivo no crediticio comprometido en el perodo g.
ujo de caja neto del perodo j (ingresos menos gastos).
cantidad total de credito disponible a corto plazo.
valor nominal total de los valores de la cartera inicial que vencen en el perodo j.
1+Cgj .
1+Dij .
1+Eij .

Tal como se han planteado, las condiciones que se le han impuesto al agente nanciero de
la Empresa son las que siguen a continuaci
on.
Pagos. La representacion general de las condiciones que se reeren a los pagos a efectuar
por la Empresa es:
4


agj xgj = Lg ,

g = 1, . . . , 4.

j=g

Por ejemplo, para g = 1, como los compromisos adquiridos en el perodo 1 se pueden pagar
en el 2 con una prima del 2%, o en el 3 a valor nominal, la condici
on correspondiente es
1,0204x12 + x13 = 400.
Cr
editos.
Es decir,

La cantidad total disponible para creditos no debe exceder de 850 MM de pesetas.

Venta de valores.

w1 + w2 + w3 + w4 850.
La expresi
on general de las condiciones impuestas a estas ventas es:
i1


eij zij Si

i = 2, . . . , 5.

j=1

Es decir, para i = 2, de acuerdo con la tabla D.1, los valores que vencen en el perodo 2 se
pueden vender en el 1 con un descuento unitario del E21 sobre su valor nominal, obteniendose
1/e21 de su valor. La correspondiente condici
on es pues 1,002z21 75.

D.1 Gestion nanciera a corto plazo

727

Balance de caja. El balance medio diario que se impone a nuestro agente se reeja en la
siguiente condici
on:
10b1 + 20b2 + 30b3 + 60b4 12.000.
Flujos de caja. Las condiciones que se reeren a los ujos de caja tienen la siguiente forma:
bg bg1 =

5


zig + wg

g


xgj

j=1

i=g+1

5


yig + Sg

g1


egj zgj

j=1

i=g+1

g1


dgj ygj + Ng .

j=1

Para g = 1 se tiene la siguiente condici


on:
b1 100 = z21 + z31 + z41 + z51 + w1 y21 y31 y41 y51 + 100 1.000.
Funci
on objetivo. El objetivo que se pretende conseguir es la maximizaci
on del benecio
obtenible en todo el perodo de estudio. Es decir,
maximizar

4


5 
4


Cgj xgj +

j=1

(Dij yij Eij zij )

4


Fg wg .

g=1

i=j+1 j=1

Todas las variables estan restringidas a tomar valores no negativos.

Modelo general
Teniendo en cuenta todas las consideraciones hechas hasta este punto, el modelo del problema
que tiene entre manos el agente nanciero de esta Empresa es:
max. 0,0204x12
+0,001y21
+0,004y43
0,002z21
0,005z43
0,028w1

+ 0,0204x22
+ 0,004y31
+ 0,016y51
0,005z31

0,02z51
0,0257w2

+ 0,0204x33
+ 0,0025y32
+ 0,015y52
0,0037z32
0,019z52
0,021w3

+ 0,0204x44
+ 0,008y41
+ 0,012y53

0,01z41
0,015z53
0,014w4

+ 0,007y42
+ 0,008y54
0,0087z42

0,01z54

s. a 1,0204x12 + x13 = 400

(D.1)

1,0204x22 + x23 = 650

(D.2)

1,0204x33 + x34 = 1.400

(D.3)

1,0204x44 = 2300

(D.4)

w1 + w2 + w3 + w4 850

(D.5)

1,002z21 75

(D.6)

1,005z31 + 1,0037z32 750

(D.7)

1,01z41 + 1,0087z42 + 1,005z43 600

(D.8)

1,02z51 + 1,019z52 + 1,015z53 + 1,01z54 900

(D.9)

10b1 + 20b2 + 30b3 + 60b4 12.000

(D.10)

b1 z21 z31 z41 z51 + y21 + y31 + y41 + y51 w1 = 800

(D.11)

b2 b1 + x12 + x22 z32 z42 z52 + y32 + y42 + y52 w2 1,001y21 + 1,002z21 = 1.425 (D.12)

728

Apendice D. Casustica de programacion lineal


b3 b2 + x13 + x23 + x33 z43 z53 + y43 + y53 w3 + 1,005z31 + 1,0037z32
1,004y31 1,0025y32 = 2.750

(D.13)

b4 b3 + x34 + x44 + y54 z54 w4 + 1,01z41 + 1,0087z42 + 1,005z43


1,008y41 1,007y42 1,004y43 = 5.100.

(D.14)

Las condiciones (D.1) a (D.4) son las de los pagos a efectuar en cada uno de los 4 perodos.
La (D.5) es la que impone el lmite de creditos. (D.6) a (D.9) tienen que ver con las ventas de
valores. El balance de caja diario es la condici
on (D.10). Las condiciones (D.11) a (D.14) son
las del ujo de caja en cada perodo.

Resoluci
on del problema
Para resolver el problema que se ha planteado se puede utilizar cualquier paquete de software
disponible en el mercado para optimizar programas lineales. Si se usa el que se presenta y
estudia en este libro, BBMI, el chero de datos que contiene toda la informaci
on necesaria
para resolverlo es el que sigue.
MAXIMIZAR
NAME
ROWS
N OBJETIVO
E Pagos1
E Pagos2
E Pagos3
E Pagos4
L Credito
L Valores2
L Valores3
L Valores4
L Valores5
G Caja
E F.Caja1
E F.Caja2
E F.Caja3
E F.Caja4
COLUMNS
X12
X12
X22
X22
X33
X33
X44
X44
X13
X23
X34
Y21
Y21
Y31
Y31
Y32
Y32
Y41

Padberg1

OBJETIVO
F.Caja2
OBJETIVO
F.Caja2
OBJETIVO
F.Caja3
OBJETIVO
F.Caja4
Pagos1
Pagos2
Pagos3
OBJETIVO
F.Caja2
OBJETIVO
F.Caja3
OBJETIVO
F.Caja3
OBJETIVO

0.0204
1
0.0204
1
0.0204
1
0.0204
1
1
1
1
0.001
-1.001
0.004
-1.004
0.0025
-1.0025
0.008

Pagos1

1.0204

Pagos2

1.0204

Pagos3

1.0204

Pagos4

1.0204

F.Caja3
F.Caja3
F.Caja4
F.Caja1

1
1
1
1

F.Caja1

F.Caja2

F.Caja1

D.1 Gestion nanciera a corto plazo

Y41
Y42
Y42
Y43
Y43
Y51
Y52
Y53
Y54
Z21
Z21
Z31
Z31
Z32
Z32
Z41
Z41
Z42
Z42
Z43
Z43
Z51
Z51
Z52
Z52
Z53
Z53
Z54
Z54
W1
W1
W2
W2
W3
W3
W4
W4
B1
B1
B2
B2
B3
B3
B4

F.Caja4
OBJETIVO
F.Caja4
OBJETIVO
F.Caja4
OBJETIVO
OBJETIVO
OBJETIVO
OBJETIVO
OBJETIVO
F.Caja1
OBJETIVO
F.Caja1
OBJETIVO
Valores3
OBJETIVO
Valores4
OBJETIVO
Valores4
OBJETIVO
Valores4
OBJETIVO
Valores5
OBJETIVO
F.Caja2
OBJETIVO
F.Caja3
OBJETIVO
F.Caja4
OBJETIVO
F.Caja1
OBJETIVO
F.Caja2
OBJETIVO
F.Caja3
OBJETIVO
F.Caja4
Caja
F.Caja2
Caja
F.Caja3
Caja
F.Caja4
Caja

-1.008
0.007
-1.007
0.004
-1.004
0.016
0.015
0.012
0.008
-0.002
-1
-0.005
-1
-0.0037
1.0037
-0.01
1.01
-0.0087
1.0087
-0.005
1.005
-0.02
1.02
-0.019
-1
-0.015
-1
-0.01
-1
-0.028
-1
-0.0257
-1
-0.021
-1
-0.014
-1
10
-1
20
-1
30
-1
60

RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1

Pagos1
Pagos2
Pagos3
Pagos4
Credito
Valores2
Valores3
Valores4
Valores5
Caja
F.Caja1
F.Caja2
F.Caja3
F.Caja4

400
650
1400
2300
850
75
750
600
900
12000
-800
-1425
2750
5100

RHS

F.Caja2

F.Caja3

F.Caja1
F.Caja2
F.Caja3
F.Caja4
Valores2
F.Caja2
Valores3
F.Caja3
F.Caja2
F.Caja3
F.Caja1
F.Caja4
F.Caja2
F.Caja4
F.Caja3
F.Caja4
F.Caja1

1
1
1
1
1.002
1.002
1.005
1.005
-1
1.0037
-1
1.01
-1
1.0087
-1
1.005
-1

Valores5

1.019

Valores5

1.015

Valores5

1.01

Credito

Credito

Credito

Credito

F.Caja1

F.Caja2

F.Caja3

F.Caja4

729

730

Apendice D. Casustica de programacion lineal

ENDATA

Los resultados que se obtienen con su concurso en un ordenador personal se listan a continuacion.
Problema Padberg1
*** Estad
sticas del Problema
15 Fila(s)
14 Restricci
on(es)
35 Variable(s) de decisi
on
14 Variable(s) de holgura/artificiales
103 Elementos no cero
0 Variable(s) entera(s)
Densidad de la matriz de coeficientes A: 19.619%
*** Estad
sticas de INVERT
15 elementos no cero en la base
0 columnas estructurales en la base
0 vectores columna antes del "bump"
15 vectores columna despu
es del "bump"
L:
0 elementos no cero;
0 vectores ETA
U:
1 elementos no cero;
1 vectores ETA
Total:
0 elementos no en la diagonal;
1 vectores ETA
M
aximo de transformaciones ETA:
1; m
aximo n
umero de elementos ETA:
Error relativo en x:
.000000D+00
Ite. Inf. Nopt. Sum.Inf/F.Obj Entra de-a Cost.Red Sale de-a
1
9
23
.2682500D+05
35 L->B .61D+02
49 B->L
2
7
19
.9725000D+04
3 L->B .20D+01
38 B->L
3
6
17
.6952989D+04
19 L->B .20D+01
42 B->L
4
6
15
.5456720D+04
5 L->B .20D+01
36 B->L
5
5
13
.4656720D+04
6 L->B .20D+01
48 B->L
6
4
18
.4200742D+04
4 L->B .10D+01
39 B->L
7
3
17
.1900742D+04
21 L->B .10D+01
37 B->L
8
2
11
.1480810D+04
22 L->B .10D+01
43 B->L
9
2
9
.8859851D+03
24 L->B .10D+01
46 B->U
10
1
5
.8301750D+03
8 L->B .10D+01
44 B->L
11
1
5
.2805606D+01
28 L->B .10D+01
47 B->U
12
0
4
.5908148D+02
17 L->B .80D-02
45 B->L
13
0
5
.6173035D+02
1 L->B .68D-02
5 B->L
14
0
4
.6187611D+02
2 L->B .68D-02
21 B->L
15
0
6
.6436638D+02
13 L->B .56D-02
40 B->L
16
0
3
.6544360D+02
29 L->B .13D-02
28 B->L
17
0
2
.6567111D+02
20 L->B .30D-03
19 B->L
18
0
1
.6569587D+02
32 L->B .30D-03
8 B->L

Paso
Pivote
.51D+04 .10D+01
.14D+04 .10D+01
.75D+03 .10D+01
.40D+03 .10D+01
.23D+03 .10D+01
.23D+04 .10D+01
.42D+03 .10D+01
.59D+03 .10D+01
.56D+02 -.10D+01
.83D+03 .10D+01
.28D+01 -.10D+01
.16D+04 .60D+02
.39D+03 .10D+01
.22D+02 .10D+01
.45D+03 .98D+00
.85D+03 .10D+01
.75D+03 .10D+01
.82D+02 .10D+01

--- SOLUCION INICIAL PROGRAMA LINEAL ---------------------------------Nombre del problema: Padberg1


No. de iteraciones:
19
Valor de la funci
on objetivo:
*** FILAS

65.6958680270542

118

El.Eta
1
3
6
10
12
14
18
25
30
33
37
41
44
52
60
67
74
81

D.1 Gestion nanciera a corto plazo

No. ..Fila.. en ....Valor.... ...Holgura... .L


.Inferior. .L
.Superior. Val.Dual.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

OBJETIVO
Pagos1
Pagos2
Pagos3
Pagos4
Credito
Valores2
Valores3
Valores4
Valores5
Caja
F.Caja1
F.Caja2
F.Caja3
F.Caja4

BS 65.695868
EQ 400.00000
EQ 650.00000
EQ 1400.0000
EQ 2300.0000
LS 850.00000
BS .00000000
LS 750.00000
LS 600.00000
LS 900.00000
LI 12000.000
EQ-800.00000
EQ-1425.0000
EQ 2750.0000
EQ 5100.0000

-65.695868
.00000000
.00000000
.00000000
.00000000
.00000000
75.000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000

Ninguno
400.00000
650.00000
1400.0000
2300.0000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
12000.000
-800.00000
-1425.0000
2750.0000
5100.0000

Ninguno
400.00000
650.00000
1400.0000
2300.0000
850.00000
75.000000
750.00000
600.00000
900.00000
Ninguno
-800.00000
-1425.0000
2750.0000
5100.0000

1.000
-.1203E-01
-.1203E-01
.8201E-02
.1215E-01
.6977E-02
.0000
.1684E-01
.1577E-01
.1374E-01
-.1333E-03
.3401E-01
.3268E-01
.1203E-01
.8000E-02

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

X12
X22
X33
X44
X13
X23
X34
Y21
Y31
Y32
Y41
Y42
Y43
Y51
Y52
Y53
Y54
Z21
Z31
Z32
Z41
Z42
Z43
Z51
Z52
Z53
Z54
W1
W2
W3
W4
B1
B2
B3
B4

BS
BS
BS
BS
LI
BS
LI
LI
LI
LI
LI
LI
BS
LI
LI
LI
BS
LI
LI
BS
LI
BS
LI
BS
LI
LI
LI
LI
BS
LI
LI
BS
LI
LI
BS

392.00314
457.41006
1372.0110
2254.0180
.00000000
183.25878
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
444.73025
.00000000
.00000000
.00000000
2506.2166
.00000000
.00000000
747.23523
.00000000
594.82502
.00000000
882.35294
.00000000
.00000000
.00000000
.00000000
850.00000
.00000000
.00000000
82.352941
.00000000
.00000000
186.27451

.20400000E-01
.20400000E-01
.20400000E-01
.20400000E-01
.00000000
.00000000
.00000000
.10000000E-02
.40000000E-02
.25000000E-02
.80000000E-02
.70000000E-02
.40000000E-02
.16000000E-01
.15000000E-01
.12000000E-01
.80000000E-02
-.20000000E-02
-.50000000E-02
-.37000000E-02
-.10000000E-01
-.87000000E-02
-.50000000E-02
-.20000000E-01
-.19000000E-01
-.15000000E-01
-.10000000E-01
-.28000000E-01
-.25700000E-01
-.21000000E-01
-.14000000E-01
.00000000
.00000000
.00000000
.00000000

.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000

Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno

.000
.000
.000
.000
.000
.000
-.162E-01
-.301E-03
-.179E-01
-.181E-01
-.179E-01
-.176E-01
.000
-.180E-01
-.177E-01
-.320E-04
.000
-.732E-03
-.420E-05
.000
-.108E-02
.000
-.169E-01
.000
-.320E-03
-.169E-01
-.159E-01
-.967E-03
.000
-.159E-01
-.130E-01
.000
-.180E-01
-.320E-04
.000

731

732

Apendice D. Casustica de programacion lineal

Tiempo total de CPU en c


alculos:

.0617 segundos

Los valores esenciales de la solucion del problema se representan en la tabla que sigue. Las
variables que no se listan son cero.
Funci
on objetivo:
x12
392,003 z32
x22
456,644 z41
x13
0,000 z42
x23
184,040 z51
x33 1.372,011 w2
x44 2.254,018 b1
y21
0,000 b2
y43
443,949 b3
y54 2.604,442 b4

65,697
747,235
594,059
0,000
882,353
850,000
676,412
0,000
0,000
87,265

La soluci
on optima genera unos ingresos ntegros de 65,697 MM de pesetas. Estos ingresos
provienen de un total de 113,896 MM de pesetas de ingresos (benecios obtenidos por pronto
pago m
as los resultantes de las inversiones) menos 48,199 MM de gastos (venta de valores antes
de su vencimiento e intereses del credito). Del total de benecios, 91,284 MM provienen del
pronto pago y 22,612 de las inversiones en valores. Del total de gastos, 21,845 MM son debidos
al uso del credito y el resto, 26,354 MM, a la venta de valores antes de su vencimiento.

D.1.2

An
alisis de sensibilidad

Estudiaremos diversas modicaciones del problema y su incidencia en los resultados. Por ejemplo, que pasa si se suprime la condicion de que el balance medio diario en caja ha de ser 100
MM de pesetas. Es decir, resolver el problema suprimiendo la condici
on (D.10).
Si se lleva a cabo este primer an
alisis, modicando adecuadamente el chero de datos, se
obtiene la siguiente soluci
on.
Problema Padberg2
*** Estad
sticas del Problema
14 Fila(s)
13 Restricci
on(es)
35 Variable(s) de decisi
on
13 Variable(s) de holgura/artificiales
99 Elementos no cero
0 Variable(s) entera(s)
Densidad de la matriz de coeficientes A: 20.204%
*** Estad
sticas de INVERT
14 elementos no cero en la base
0 columnas estructurales en la base
0 vectores columna antes del "bump"
14 vectores columna despu
es del "bump"
L:
0 elementos no cero;
0 vectores ETA

D.1 Gestion nanciera a corto plazo

U:
0 elementos no cero;
0 vectores ETA
Total:
0 elementos no en la diagonal;
0 vectores ETA
M
aximo de transformaciones ETA:
0; m
aximo n
umero de elementos ETA:
Error relativo en x:
.000000D+00
Ite. Inf. Nopt. Sum.Inf/F.Obj Entra de-a Cost.Red Sale de-a
1
8
20
.1482500D+05
3 L->B .20D+01
38 B->L
2
7
19
.1205299D+05
4 L->B .20D+01
39 B->L
3
6
18
.7498971D+04
21 L->B .20D+01
43 B->L
4
6
16
.6304912D+04
19 L->B .20D+01
45 B->U
5
5
17
.5892001D+04
8 L->B .20D+01
42 B->L
6
5
14
.4808103D+04
5 L->B .20D+01
36 B->L
7
4
12
.4008103D+04
6 L->B .20D+01
47 B->L
8
3
17
.3552125D+04
7 L->B .20D+01
37 B->L
9
2
11
.2699494D+04
16 L->B .10D+01
3 B->L
10
2
8
.1730114D+04
24 L->B .10D+01
44 B->L
11
2
6
.8468783D+03
28 L->B .10D+01
46 B->U
12
1
2
.8459820D+03
17 L->B .10D+01
48 B->L
13
0
7
.5396437D+02
3 L->B .17D-01
16 B->L
14
0
12
.6281300D+02
1 L->B .23D-01
5 B->L
15
0
11
.6329992D+02
2 L->B .23D-01
7 B->L
16
0
6
.6578922D+02
13 L->B .56D-02
40 B->L
17
0
3
.6686644D+02
29 L->B .13D-02
28 B->L
18
0
2
.6709395D+02
20 L->B .30D-03
19 B->L
19
0
1
.6727111D+02
22 L->B .30D-03
21 B->L

113

Paso
Pivote
.14D+04 .10D+01
.23D+04 .10D+01
.59D+03 .10D+01
.21D+03 -.10D+01
.54D+03 .10D+01
.40D+03 .10D+01
.23D+03 .10D+01
.43D+03 .98D+00
.95D+03 .10D+01
.88D+03 .10D+01
.90D+00 -.10D+01
.85D+03 .10D+01
.95D+03 .10D+01
.39D+03 .10D+01
.22D+02 .10D+01
.45D+03 .98D+00
.85D+03 .10D+01
.75D+03 .10D+01
.59D+03 .10D+01

El.Eta
0
3
6
10
14
19
21
23
28
32
36
40
42
46
54
62
69
76
83

--- SOLUCION INICIAL PROGRAMA LINEAL ---------------------------------Nombre del problema: Padberg2


No. de iteraciones:
20
Valor de la funci
on objetivo:

67.2711081310103

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1
2
3
4
5
6
7
8
9
10
11
12
13
14

OBJETIVO
Pagos1
Pagos2
Pagos3
Pagos4
Credito
Valores2
Valores3
Valores4
Valores5
F.Caja1
F.Caja2
F.Caja3
F.Caja4

BS 67.271108
EQ 400.00000
EQ 650.00000
EQ 1400.0000
EQ 2300.0000
LS 850.00000
BS .00000000
LS 750.00000
LS 600.00000
LS 900.00000
EQ-800.00000
EQ-1425.0000
EQ 2750.0000
EQ 5100.0000

-67.271108
.00000000
.00000000
.00000000
.00000000
.00000000
75.000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000

Ninguno
400.00000
650.00000
1400.0000
2300.0000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
-800.00000
-1425.0000
2750.0000
5100.0000

Ninguno
400.00000
650.00000
1400.0000
2300.0000
850.00000
75.000000
750.00000
600.00000
900.00000
-800.00000
-1425.0000
2750.0000
5100.0000

1.000
-.1203E-01
-.1203E-01
.8201E-02
.1215E-01
.6977E-02
.0000
.1684E-01
.1577E-01
.1344E-01
.3371E-01
.3268E-01
.1203E-01
.8000E-02

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.

733

734

Apendice D. Casustica de programacion lineal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

X12
X22
X33
X44
X13
X23
X34
Y21
Y31
Y32
Y41
Y42
Y43
Y51
Y52
Y53
Y54
Z21
Z31
Z32
Z41
Z42
Z43
Z51
Z52
Z53
Z54
W1
W2
W3
W4
B1
B2
B3
B4

BS
BS
BS
BS
LI
BS
LI
BS
LI
LI
LI
LI
BS
LI
LI
LI
BS
LI
LI
BS
LI
BS
LI
BS
LI
LI
LI
LI
BS
LI
LI
LI
LI
LI
LI

392.00314
457.49241
1372.0110
2254.0180
.00000000
183.17474
.00000000
82.352941
.00000000
.00000000
.00000000
.00000000
444.81428
.00000000
.00000000
.00000000
2692.5755
.00000000
.00000000
747.23523
.00000000
594.82502
.00000000
882.35294
.00000000
.00000000
.00000000
.00000000
850.00000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000

.20400000E-01
.20400000E-01
.20400000E-01
.20400000E-01
.00000000
.00000000
.00000000
.10000000E-02
.40000000E-02
.25000000E-02
.80000000E-02
.70000000E-02
.40000000E-02
.16000000E-01
.15000000E-01
.12000000E-01
.80000000E-02
-.20000000E-02
-.50000000E-02
-.37000000E-02
-.10000000E-01
-.87000000E-02
-.50000000E-02
-.20000000E-01
-.19000000E-01
-.15000000E-01
-.10000000E-01
-.28000000E-01
-.25700000E-01
-.21000000E-01
-.14000000E-01
.00000000
.00000000
.00000000
.00000000

Tiempo total de CPU en c


alculos:

.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000

Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno

.000
.000
.000
.000
-.173E-17
.000
-.162E-01
.000
-.176E-01
-.181E-01
-.176E-01
-.176E-01
.000
-.177E-01
-.177E-01
-.320E-04
.000
-.103E-02
-.305E-03
.000
-.298E-03
.000
-.169E-01
.000
-.192E-04
-.166E-01
-.156E-01
-.127E-02
.000
-.159E-01
-.130E-01
-.103E-02
-.206E-01
-.403E-02
-.800E-02

.0503 segundos

El resumen de estos resultados se describe en la tabla que sigue


Funci
on objetivo:
x12
392,003 z32
x22
457,492 z41
x13
0,000 z42
x23
183,175 z51
x33 1.372,011 w2
x44 2.254,018 b1
y21
82,353 b2
y43
444,814 b3
y54 2.692,575 b4

67,271
747,235
0,000
594,825
882,353
850,000
0,000
0,000
0,000
0,000

Es decir, la supresi
on de esa condici
on le proporciona a la Empresa unos ingresos adicionales
de 1,575 MM de pesetas.
Si se exigiese que, en vez de 0, el balance en caja al nal de cada uno de los 4 perodos de

D.1 Gestion nanciera a corto plazo

735

estudio fuese 100 MM de pesetas, habra que a


nadir las siguientes condiciones al problema:
bj 100,

j = 1, . . . , 4.

El chero de datos que BBMI requiere para estudiar este caso es el que se lista a continuaci
on.
MAXIMIZAR
NAME
ROWS
N OBJETIVO
E Pagos1
E Pagos2
E Pagos3
E Pagos4
L Credito
L Valores2
L Valores3
L Valores4
L Valores5
E F.Caja1
E F.Caja2
E F.Caja3
E F.Caja4
COLUMNS
X12
X12
X22
X22
X33
X33
X44
X44
X13
X23
X34
Y21
Y21
Y31
Y31
Y32
Y32
Y41
Y41
Y42
Y42
Y43
Y43
Y51
Y52
Y53
Y54
Z21
Z21
Z31
Z31
Z32
Z32
Z41
Z41

Padberg3

OBJETIVO
F.Caja2
OBJETIVO
F.Caja2
OBJETIVO
F.Caja3
OBJETIVO
F.Caja4
Pagos1
Pagos2
Pagos3
OBJETIVO
F.Caja2
OBJETIVO
F.Caja3
OBJETIVO
F.Caja3
OBJETIVO
F.Caja4
OBJETIVO
F.Caja4
OBJETIVO
F.Caja4
OBJETIVO
OBJETIVO
OBJETIVO
OBJETIVO
OBJETIVO
F.Caja1
OBJETIVO
F.Caja1
OBJETIVO
Valores3
OBJETIVO
Valores4

0.0204
1
0.0204
1
0.0204
1
0.0204
1
1
1
1
0.001
-1.001
0.004
-1.004
0.0025
-1.0025
0.008
-1.008
0.007
-1.007
0.004
-1.004
0.016
0.015
0.012
0.008
-0.002
-1
-0.005
-1
-0.0037
1.0037
-0.01
1.01

Pagos1

1.0204

Pagos2

1.0204

Pagos3

1.0204

Pagos4

1.0204

F.Caja3
F.Caja3
F.Caja4
F.Caja1

1
1
1
1

F.Caja1

F.Caja2

F.Caja1

F.Caja2

F.Caja3

F.Caja1
F.Caja2
F.Caja3
F.Caja4
Valores2
F.Caja2
Valores3
F.Caja3
F.Caja2
F.Caja3
F.Caja1
F.Caja4

1
1
1
1
1.002
1.002
1.005
1.005
-1
1.0037
-1
1.01

736

Apendice D. Casustica de programacion lineal

Z42
Z42
Z43
Z43
Z51
Z51
Z52
Z52
Z53
Z53
Z54
Z54
W1
W1
W2
W2
W3
W3
W4
W4
B1
B2
B3
B4

OBJETIVO
Valores4
OBJETIVO
Valores4
OBJETIVO
Valores5
OBJETIVO
F.Caja2
OBJETIVO
F.Caja3
OBJETIVO
F.Caja4
OBJETIVO
F.Caja1
OBJETIVO
F.Caja2
OBJETIVO
F.Caja3
OBJETIVO
F.Caja4
F.Caja1
F.Caja2
F.Caja3
F.Caja4

-0.0087
1.0087
-0.005
1.005
-0.02
1.02
-0.019
-1
-0.015
-1
-0.01
-1
-0.028
-1
-0.0257
-1
-0.021
-1
-0.014
-1
1
1
1
1

RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
RHS1
BOUNDS
LO BOUND1
LO BOUND1
LO BOUND1
LO BOUND1
ENDATA

Pagos1
Pagos2
Pagos3
Pagos4
Credito
Valores2
Valores3
Valores4
Valores5
F.Caja1
F.Caja2
F.Caja3
F.Caja4

400
650
1400
2300
850
75
750
600
900
-800
-1425
2750
5100

B1
B2
B3
B4

100
100
100
100

F.Caja2
F.Caja4
F.Caja3
F.Caja4
F.Caja1

-1
1.0087
-1
1.005
-1

Valores5

1.019

Valores5

1.015

Valores5

1.01

Credito

Credito

Credito

Credito

F.Caja2
F.Caja3
F.Caja4

-1
-1
-1

RHS

Observese que la u
nica diferencia con el descrito anteriormente es que, en la seccion BOUNDS,
se han a
nadido unos lmites inferiores a las variables bi , i = 1, . . . , 4. La soluci
on que se

D.1 Gestion nanciera a corto plazo

737

obtendra haciendo funcionar a BBMI con estos datos es la de la tabla que sigue.
Funci
on objetivo:
x12
392,003 z32
x22
357,387 z41
x13
0,000 z42
x23
285,322 z51
x33 1.372,011 w2
x44 2.254,018 b1
y21
0,000 b2
y43
342,667 b3
y54 2.590,020 b4

63,895
747,235
17,647
577,155
882,353
850,000
100,000
100,000
100,000
100,000

El nuevo requisito que se le impone al agente supone, por tanto, que la Empresa deja de
ingresar 1,801 MM de pesetas.
D.1.2.1

Cambio en las condiciones de la adquisici


on del pasivo no crediticio

Si en vez de 2-10/N-30, es decir, una prima del 2% a 10 das o el valor nominal a 30, las
condiciones se cambian a 1-10/N-60, el 1% a 10 das y el nominal a 60, habra que replantearse
un poco el modelo.
En primer lugar, como ahora se pueden adquirir compromisos hasta para 60 das, se hace
on objetivo
necesario introducir las variables x14 y x24 . Por otro lado, los coecientes en la funci
de las variables x12 , x22 , x33 y x44 , es decir los Cgj , han de ser 1/(1 0,01) 1 = 0,0101. Las
correspondientes agj , l
ogicamente, deberan hacerse 1 + Cgj = 1,0101.
El nuevo modelo que se tiene entonces es:
max. 0,0101x12
+0,001y21
+0,004y43
0,002z21
0,005z43
0,028w1

+ 0,0101x22
+ 0,004y31
+ 0,016y51
0,005z31

0,02z51
0,0257w2

+ 0,0101x33
+ 0,0025y32
+ 0,015y52
0,0037z32
0,019z52
0,021w3

+ 0,0101x44
+ 0,008y41
+ 0,012y53

0,01z41
0,015z53
0,014w4

+ 0,007y42
+ 0,008y54
0,0087z42

0,01z54

s. a 1,0101x12 + x13 + x14 = 400


1,0101x22 + x23 + x24 = 650
1,0101x33 + x34 = 1.400
1,0101x44 = 2.300
w1 + w2 + w3 + w4 850
1,002z21 75
1,005z31 + 1,0037z32 750
1,01z41 + 1,0087z42 + 1,005z43 600
1,02z51 + 1,019z52 + 1,015z53 + 1,01z54 900
10b1 + 20b2 + 30b3 + 60b4 12.000
b1 z21 z31 z41 z51 + y21 + y31 + y41 + y51 w1 = 800
b2 b1 + x12 + x22 z32 z42 z52 + y32 + y42 + y52 w2 1,001y21 + 1,002z21 = 1.425

738

Apendice D. Casustica de programacion lineal


b3 b2 + x13 + x23 + x33 z43 z53 + y43 + y53 w3 + 1,005z31 + 1,0037z32
1,004y31 1,0025y32 = 2.750
b4 b3 + x14 + x24 + x34 + x44 + y54 z54 w4 + 1,01z41 + 1,0087z42 + 1,005z43
1,008y41 1,007y42 1,004y43 = 5.100.

Usando BBMI para resolver este nuevo problema, se obtiene la soluci


on que sigue.
Problema Padberg4
*** Estad
sticas del Problema
15 Fila(s)
14 Restricci
on(es)
37 Variable(s) de decisi
on
14 Variable(s) de holgura/artificiales
107 Elementos no cero
0 Variable(s) entera(s)
Densidad de la matriz de coeficientes A: 19.279%
*** Estad
sticas de INVERT
15 elementos no cero en la base
0 columnas estructurales en la base
0 vectores columna antes del "bump"
15 vectores columna despu
es del "bump"
L:
0 elementos no cero;
0 vectores ETA
U:
1 elementos no cero;
1 vectores ETA
Total:
0 elementos no en la diagonal;
1 vectores ETA
M
aximo de transformaciones ETA:
1; m
aximo n
umero de elementos ETA:
Error relativo en x:
.000000D+00
Ite. Inf. Nopt. Sum.Inf/F.Obj Entra de-a Cost.Red Sale de-a
1
9
25
.2682500D+05
37 L->B .61D+02
51 B->L
2
7
21
.9725000D+04
3 L->B .20D+01
40 B->L
3
6
19
.6938999D+04
21 L->B .20D+01
44 B->L
4
6
18
.5442730D+04
5 L->B .20D+01
38 B->L
5
5
15
.4642730D+04
6 L->B .20D+01
50 B->L
6
4
20
.4214733D+04
4 L->B .10D+01
41 B->L
7
3
19
.1914733D+04
7 L->B .10D+01
5 B->L
8
3
17
.1514733D+04
8 L->B .10D+01
39 B->L
9
2
8
.1478731D+04
23 L->B .10D+01
48 B->U
10
1
6
.1425000D+04
10 L->B .10D+01
45 B->L
11
1
6
.8841316D+03
26 L->B .10D+01
46 B->L
12
1
4
.8963152D+00
30 L->B .10D+01
49 B->U
13
0
6
.1844383D+02
18 L->B .12D-01
6 B->L
14
0
5
.2622781D+02
19 L->B .80D-02
47 B->L
15
0
5
.2622895D+02
31 L->B .13D-02
30 B->L
16
0
4
.2659811D+02
34 L->B .31D-03
37 B->L
17
0
3
.2666554D+02
22 L->B .30D-03
10 B->L
18
0
1
.2668519D+02
15 L->B .32D-04
18 B->L

Paso
Pivote
.51D+04 .10D+01
.14D+04 .10D+01
.75D+03 .10D+01
.40D+03 .10D+01
.21D+03 .10D+01
.23D+04 .10D+01
.40D+03 .10D+01
.36D+02 .10D+01
.54D+02 -.10D+01
.54D+03 .10D+01
.88D+03 .10D+01
.90D+00 -.10D+01
.61D+03 .10D+01
.97D+03 .60D+02
.90D+00 .10D+01
.12D+04 .17D+00
.22D+03 .10D+01
.61D+03 .10D+01

--- SOLUCION INICIAL PROGRAMA LINEAL ---------------------------------Nombre del problema: Padberg4

122

El.Eta
1
3
6
10
12
14
18
23
26
31
37
41
45
50
53
57
63
68

D.1 Gestion nanciera a corto plazo

No. de iteraciones:
19
Valor de la funci
on objetivo:

26.6851862404083

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

OBJETIVO
Pagos1
Pagos2
Pagos3
Pagos4
Credito
Valores2
Valores3
Valores4
Valores5
Caja
F.Caja1
F.Caja2
F.Caja3
F.Caja4

BS 26.685186
EQ 400.00000
EQ 650.00000
EQ 1400.0000
EQ 2300.0000
BS 2.0305780
BS .00000000
LS 750.00000
LS 600.00000
LS 900.00000
LI 12000.000
EQ-800.00000
EQ-1425.0000
EQ 2750.0000
EQ 5100.0000

-26.685186
.00000000
.00000000
.00000000
.00000000
847.96942
75.000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000

Ninguno
400.00000
650.00000
1400.0000
2300.0000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
12000.000
-800.00000
-1425.0000
2750.0000
5100.0000

Ninguno
400.00000
650.00000
1400.0000
2300.0000
850.00000
75.000000
750.00000
600.00000
900.00000
Ninguno
-800.00000
-1425.0000
2750.0000
5100.0000

1.000
-.8000E-02
-.8000E-02
-.1913E-02
.2079E-02
.0000
.0000
.9887E-02
.8860E-02
.6891E-02
-.1328E-03
.2703E-01
.2570E-01
.1203E-01
.8000E-02

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

X12
X22
X33
X44
X13
X23
X14
X24
X34
Y21
Y31
Y32
Y41
Y42
Y43
Y51
Y52
Y53
Y54
Z21
Z31
Z32
Z41
Z42
Z43
Z51
Z52
Z53
Z54
W1

LI
LI
BS
BS
LI
LI
BS
BS
LI
LI
LI
LI
LI
LI
BS
LI
LI
LI
BS
LI
BS
BS
BS
LI
LI
BS
LI
LI
LI
LI

.00000000
.00000000
1386.0014
2277.0023
.00000000
.00000000
400.00000
650.00000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
613.99861
.00000000
.00000000
.00000000
1789.4523
.00000000
523.58765
222.96942
594.05941
.00000000
.00000000
882.35294
.00000000
.00000000
.00000000
.00000000

.10100000E-01
.10100000E-01
.10100000E-01
.10100000E-01
.00000000
.00000000
.00000000
.00000000
.00000000
.10000000E-02
.40000000E-02
.25000000E-02
.80000000E-02
.70000000E-02
.40000000E-02
.16000000E-01
.15000000E-01
.12000000E-01
.80000000E-02
-.20000000E-02
-.50000000E-02
-.37000000E-02
-.10000000E-01
-.87000000E-02
-.50000000E-02
-.20000000E-01
-.19000000E-01
-.15000000E-01
-.10000000E-01
-.28000000E-01

.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000

Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno

-.752E-02
-.752E-02
.000
.000
-.403E-02
-.403E-02
.000
.000
-.609E-02
-.303E-03
-.109E-01
-.111E-01
-.110E-01
-.106E-01
.000
-.110E-01
-.107E-01
-.320E-04
.000
-.723E-03
.000
.000
.000
-.658E-05
-.991E-02
.000
-.322E-03
-.996E-02
-.896E-02
-.972E-03

739

740

Apendice D. Casustica de programacion lineal

31
32
33
34
35
36
37

W2
W3
W4
B1
B2
B3
B4

BS
LI
LI
BS
LI
LI
LI

2.0305780
.00000000
.00000000
1200.0000
.00000000
.00000000
.00000000

-.25700000E-01
-.21000000E-01
-.14000000E-01
.00000000
.00000000
.00000000
.00000000

Tiempo total de CPU en c


alculos:

.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000

Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno

.000
-.897E-02
-.600E-02
.000
-.110E-01
-.465E-04
-.290E-04

.0002 segundos

El valor que se obtiene en la funci


on objetivo es 26,685. Resulta una perdida de ganancias de
65,697 26,685 = 39,012 MM de pesetas.
Si la mitad del pasivo no crediticio se obtuviese a 2-10/N-30 y la otra mitad a 1-10/N60, habra que recongurar otra vez el modelo. Se introducira un nuevo ndice, h, para las
variables x resultando xhgj : cantidad pagada con el tipo remunerativo h (1 o 2) en el perodo
j por compromisos adquiridos en el perodo g.
Las condiciones (D.1) a (D.4) habra que desdoblarlas en dos grupos: uno para cada tipo de
remuneraci
on. Adem
as habra que reemplazar cada xgj por x1gj + x2gj dondequiera que fuese
preciso.
El nuevo modelo que resultara llevando a cabo estas modicaciones es el siguiente:
max. 0,0204x112
0,0101x212
+0,001y21
+0,004y43
0,002z21
0,005z43
0,028w1

+ 0,0204x122
+ 0,0101x222
+
0,004y31
+
0,016y51

0,005z31

0,02z51
0,0257w2

+ 0,0204x133
+ 0,0101x233
+ 0,0025y32
+
0,015y52
0,0037z32

0,019z52

0,021w3

+ 0,0204x144
+ 0,0101x244
+
0,008y41
+
0,012y53

0,01z41

0,015z53

0,014w4

+ 0,007y42
+ 0,008y54
0,0087z42

0,01z54

s. a 1,0204x112 + x113 = 200


1,0204x122 + x123 = 325
1,0204x133 + x134 = 700
1,0204x144 = 1.150
1,0101x212 + x213 + x214 = 200
1,0101x222 + x223 + x224 = 325
1,0101x233 + x234 = 700
1,0101x244 = 1.150
w1 + w2 + w3 + w4 850
1,002z21 75
1,005z31 + 1,0037z32 750
1,01z41 + 1,0087z42 + 1,005z43 600
1,02z51 + 1,019z52 + 1,015z53 + 1,01z54 900
10b1 + 20b2 + 30b3 + 60b4 12.000
b1 z21 z31 z41 z51 + y21 + y31 + y41 + y51 w1 = 800
b2 b1 + x112 + x212 + x122 + x222 z32 z42 z52 + y32 + y42 + y52 w2 1,001y21 + 1,002z21 = 1.425
b3 b2 + x113 + x213 + x123 + x223 + x133 + x233 z43 z53 + y43 + y53 w3 + 1,005z31 + 1,0037z32
1,004y31 1,0025y32 = 2.750

D.1 Gestion nanciera a corto plazo

741

b4 b3 + x214 + x224 + x134 + x234 + x144 + x244 + y54 z54 w4 + 1,01z41 + 1,0087z42 + 1,005z43
1,008y41 1,007y42 1,004y43 = 5.100.

Los valores de las variables que son distintos de cero en la soluci


on optima de este nuevo
problema, utilizando una vez m
as BBMI para resolverlo, son los de la tabla que sigue.
Funci
on objetivo: 46,822
x112
196,002 y43
620,994
x122
318,503 y54 2.332,968
x133
686,005 z31
523,588
x144 1.127,009 z32
222,969
x233
693,001 z41
594,059
x244 1.138,501 z51
882,353
x214
200,000 w2
516,535
x224
325,000 b1 1.200,000
El coste (perdida de benecios) de esta nueva modalidad de remunerar el pasivo no crediticio
es 65,697 46,822 = 18,875 MM de pesetas.

D.1.3

Soluci
on factible inicial

Cualquier soluci
on factible del programa lineal deber
a equilibrar el balance. Lo que hemos
hecho hasta ahora es obtener, de entre todas las factibles, aquella que optimiza las ganancias
de la Empresa jugando con sus distintas opciones.
Si se trata u
nica y exclusivamente de cumplir todas las condiciones que se han impuesto, para
obtener la deseada soluci
on factible se pueden realizar ciertas simplicaciones. Por ejemplo:
Hay que aprovechar todos los benecios posibles del pronto pago.
Hay que utilizar la lnea de credito al m
aximo cuanto antes.
Hay que retrasar la venta de valores lo m
as posible pero se vender
a si ello supone obtener
mayores benecios por pronto pago.
Con estas premisas, tanteando un poco, se puede obtener una soluci
on factible como la de
la tabla D.2 que sigue.
Los valores de las variables que hemos denido con anterioridad que son signicativamente
distintos de cero para la soluci
on que dene esta tabla, as como la funci
on objetivo correspondiente, se describen a continuaci
on.
Funci
on objetivo:
x12
392,003 z32
x22
457,899 z42
x33 1.372,010 z52
x44 2.254,018 w1
x23
182,760 w2
y53
445,240 b4
y54 2.045,980

64,621
747,226
594,776
882,900
800,000
50,000
200,000

742

Apendice D. Casustica de programacion lineal

Tabla D.2
Balance equilibrado a partir del cual se obtiene una soluci
on factible inicial del problema de
la gestion nanciera a corto plazo
(CP)a

Balance en caja
Ventas
Efectivo disponible
Gasto
Balance en caja (FP)f
Balance mnimo
Total
Para invertir
Credito

Perodo 1
100,00
100,00
200,00
1.000,00
-800,00
0,00
-800,00
0,00
800,00

Perodo 2
0,00
2.299,90b
2.299,90
2.349,90c
-50,00
0,00
-50,00
0,00
50,00

Perodo 3
0,00
2.000,00
2.000,00
1.554,76d
445,24
0,00
445,24
445,24
0,00

Perodo 4
0,00
4.500,00
4.500,00
2.254,02e
2.245,98
0,00
2.246,00
2.045,98g
0,00

Comienzo del perodo.


De vender todos los valores: 75,00+750,00(1-0,0037)+600(1-0,0087)+900(1-0,019).
c
Flujo neto a caja, -1.500, m
as lo necesario, 849,90, para aprovechar el credito al
m
aximo.
d
Los 1.400 con prima de pronto pago m
as algo del pasivo de perodos anteriores.
e
Los 2.300 con prima de pronto pago.
f
Fin del perodo.
g
Para mantener el balance medio diario en caja de 100 MM de pesetas (60200=12.000).
b

Ademas de esta existen otras soluciones que verican el balance de la tabla anterior. En efecto,
de acuerdo con la nota c de esa tabla, x12 + x22 = 849,90. Ademas, como exige el modelo
1,0204x12 + x13 = 400 y 1,0204x22 + x23 = 650. Como tanto x12 como x22 tienen el mismo
coeciente en la funci
on objetivo, basta con hacer x13 = 0 para obtener una soluci
on factible.
Tambien y43 + y53 = 445,24. Como y53 tiene un mayor coeciente en la funci
on objetivo y se
trata de maximizarla, se puede hacer y43 = 0.
La funci
on objetivo 64,621 resulta de la diferencia entre unos ingresos totales de 113,020 =
91,309(por pronto pago)+21,711(por inversiones) y de unos gastos de 48,399 = 23,685(coste
del credito)+24,714(venta de valores).
Aunque tal vez absurdo desde el punto de vista pr
actico, es interesante teoricamente preguntarse cu
al sera el mnimo de todos los posibles ingresos totales que podra obtener el agente
de la Empresa. Para conseguir esto, habra que hacer uso de todo el credito, los 850 MM de
pesetas, en el primer perodo, pues es cuando resulta m
as caro, vender todos los valores de la
cartera inicial tambien en el primer perodo y, por u
ltimo, devolver el pasivo no crediticio sin
beneciarse del pronto pago. Estas, probablemente irracionales, decisiones en aras de minimizar los ingresos de su gestion, corresponden a los siguientes valores de las variables tal como
las hemos denido anteriormente: w1 = 850, x13 = 400, x23 = 650, x34 = 1.400, x44 = 2.254,02,
z21 = 74,85, z31 = 746,27, b1 = 2.347,53, b2 = 847,53, b3 = 1.797,53 y b4 = 2.643,51. Las variables y, por supuesto, seran cero. El valor de la funci
on objetivo resultante, ganancias con
esta forma de actuar, sera 5,29 MM de pesetas. Es decir, se perdera dinero. A esta misma
soluci
on se llegara, como se puede comprobar f
acilmente, con el concurso del programa BBMI, si en el modelo inicial que se ha planteado se minimizase la funci
on objetivo en vez de

D.1 Gestion nanciera a corto plazo

743

maximizarla.
D.1.3.1

An
alisis de los valores duales de las condiciones

Los valores duales de las condiciones, o vector de multiplicadores simplex, en la soluci


on del
modelo inicial se pueden usar para tratar de gestionar mejor las nanzas de la Empresa. Este
vector, cuyo valor es

0,0120

0,0120

0,0082
0,0122

0,0070

0,0000

0,0168 ,
=

0,0158
0,0137

0,0001

0,0340
0,0327

0,0120
0,0080
indica lo siguiente:
De los valores duales de las cuatro primeras condiciones se deduce que si se aumenta la
cantidad de dinero dedicada a comprar activo en los u
ltimos dos perodos se aumentaran
los benecios de la Empresa; si se dedican mas recursos, por el contrario, para los dos
primeros perodos, los benecios disminuir
an.
Que si aumenta la disponibilidad de credito (condici
on (5)), se aumentar
an los benecios
de la Empresa. El interes que se esta dispuesto a pagar por un aumento extra de esta
lnea de credito es el 0,7%.
Si se aumentan para negociar con ellas las cantidades disponibles en valores de los tipos
3, 4 y 5 (condiciones (7) a (9)), el benecio de la Empresa aumentara. Si parte de los
valores que cuantican 100 MM de pesetas que se reservan para otros menesteres en el
perodo 2, por el contrario, se pusiesen a disposici
on del agente para utilizarlos, no se
mejorara en nada el benecio obtenible: el valor dual de la condici
on (6) es cero.
Que elevando el balance medio diario que hay que mantener en caja se reduciran los
benecios obtenibles por la Empresa. Esto lo indica el valor 0,0001 correspondiente a
la condici
on (10). Esto es as pues se reduciran las oportunidades de inversi
on o incrementaran los costes nancieros.
Que una elevaci
on de los ujos de caja en todos los perodos de estudio mejoraran las
expectativas de ganancia de la Empresa: los multiplicadores simplex correspondientes a
las condiciones (11) a (14) son todos positivos.

744

Apendice D. Casustica de programacion lineal

D.2

Gesti
on operativa de una renera de crudo de petr
oleo

Una renera de crudo de petr


oleo produce aceites lubricantes, disolventes, combustibles lquidos
de varios tipos y calidades, as como algunos residuos como el asfalto, los alquitranes y el coque de petr
oleo. En la gura D.1 se representa muy simplicadamente el proceso productivo
general de una industria de este tipo.
Gasolina
de aviacin
Naftas ligeras

x3

x10

Crudo pesado

Mezclado
gasolinas

x1
Naftas pesadas x4

Fuel de
motores

Destilacin
Gasolinas x8
Crudo ligero
x2

Aceites

x5

Desintegracin
cataltica
(Cracking)

Aceites

x11

x9
Queroseno

Aceites pesados x6
Residuos

x7

x12

Mezclado
de fuels

Fuels varios
x13
Aceites lubricantes
x14

Figura D.1
Proceso productivo simplicado de una renera de crudo de petr
oleo
Para producir estos artculos a partir de diversas variedades de crudo de petr
oleo se necesita
el concurso de gran cantidad de energa calorca en forma de vapor de agua, para poner en
marcha determinadas reacciones qumicas y multitud de procesos mecanicos, as como energa
electrica.
Dadas las importantes cantidades de vapor de agua y electricidad que consume una renera,
en vez de comprarselas a suministradores externos resulta mas rentable producirlas in situ a
partir de los propios combustibles lquidos que elabora y vende, o de los derivados gaseosos que
se desprenden de los procesos productivos y que en muchos casos de no utilizarse para estos
menesteres se desecharan.
Quemar combustibles f
osiles para producir calor, y a partir de este vapor de agua y electricidad para consumirlos en los procesos qumicos que apunt
abamos, l
ogicamente, reduce la
capacidad neta de la renera de producir artculos vendibles al mercado. El vapor de agua
que se produce no se obtiene a presiones homogeneas. Si se produce a alta presi
on, se debe
despresurizar para poderlo utilizar en otros procesos donde se necesite menos presi
on. Esta
despresurizacion se puede llevar a efecto haciendo pasar el vapor a traves de turbinas capaces
de mover un alternador y por tanto generar energa electrica. Si la renera es capaz de producir m
as energa electrica que la que necesita en un momento dado, se la puede vender a la

D.2 Gestion operativa de una renera de crudo de petroleo

745

compa
na electrica que opera en la zona, produciendose de esta forma unos ingresos adicionales
a los que se originan por la venta de los artculos que elabora.
Un complejo industrial de renado de crudo de petr
oleo es en suma una instalaci
on con
calderas, turbinas de vapor y gas, motores electricos, alternadores, torres de destilacion, reactores qumicos, reformadores1 , etc. con capacidad de autoabastecer sus necesidades energeticas,
y con la facultad de decidir en un momento dado si comprar o vender energa electrica seg
un sus
requerimientos y los precios del mercado. Nada desde
nable tampoco es su inherente capacidad
para aprovechar mejor que en otros procesos productivos industriales el poder energetico de
los combustibles que produce/utiliza, y por tanto contribuir as al ahorro energetico de la
compa
na mercantil a la que pertenece y a la economa productiva del pas en el que opera.
En lo que sigue se va a describir simplicadamente el proceso fsico de producci
on de
vapor de agua en una tpica renera de crudo y la optimizaci
on que con el se puede llevar a
cabo para producir energa electrica, de tal manera que se ahorre lo mas posible en el recibo
que la compa
na electrica que la abastece le presenta periodicamente. El problema que se
formular
a partir
a de un modelo lineal de esa descripci
on fsica y de su operacion diaria, y
buscar
a optimizar esta u
ltima hora a hora.
En lo sucesivo, al hablar de unidades de producci
on nos estaremos reriendo a los diversos
dispositivos o mecanismos del proceso productivo de la renera unidad de desintegraci
on
cataltica (cracking o craqueo), columnas de fraccionamiento, c
amaras de mezcla, etc., as
como a los diversos dispositivos productores de vapor de agua y energa electrica. Su funci
on
especca dentro del conjunto productivo de la renera no es relevante para el problema que
aqu presentamos.

D.2.1

Producci
on de vapor de agua y electricidad en una renera de petr
oleo

En la gura D.2 se representan esquem


aticamente los procesos que se llevan a cabo para
producir vapor de agua en la renera tipo que estudiaremos en este apendice.
El vapor recalentado a alta presi
on se produce en las calderas principales (cuadro 5) y en
los turbogeneradores de gas, TG (cuadro 1). Para calentar el agua de las calderas y convertirla
en vapor se utiliza el fuel almacenado en los tanques correspondientes. Este fuel, antes de
quemarse en las calderas, se precalienta en la unidad del cuadro 7, denominada precalentador
de fuel, PC, y, mediante el concurso de vapor de agua, se pulveriza en la unidad del cuadro 6,
denominada pulverizador de fuel, PF. El agua que se utiliza en las calderas es agua desionizada,
que ha sido tratada en el desaireador del cuadro 9, y precalentada. Este precalentamiento se
lleva a cabo en el precalentador del cuadro 4, PCC. El agua desinonizada se almacena en el
tanque correspondiente y se supone que est
a disponible a coste cero y en cantidad sin lmite.
Las calderas, ademas de vapor de agua, producen la denominada agua de descarga la cual se
enva a un tanque de destilaci
on ash (representado en la gura por el cuadro 8), TDF. En
este tanque se separa el agua y el condensado de vapor de agua. El agua se vuelve a enviar al
desaireador mientras que el condensado se tira por el drenaje. Los productos que se desechan
por el drenaje se representan en la gura D.2 mediante un peque
no recuadro negro.
En las calderas de los turbogeneradores de gas, TG, se quema el gas que resulta como
residuo de diversos procesos de la renera y con el calor desprendido se calienta el agua. Como
consecuencia de esto se produce vapor de agua a alta y baja presi
on. Haciendo pasar el agua
de descarga de las calderas de estos turbogeneradores a traves de un tanque de destilaci
on
1

Instalaciones donde se mejora el octanaje de las gasolinas o se realizan otros procesos qumicos.

746

Apendice D. Casustica de programacion lineal

Figura D.2
Esquema productivo de vapor de agua de una renera de crudo de petr
oleo
ash, recuadro 2, TDFG, tambien se produce una cierta cantidad de vapor a baja presi
on.
En el proceso de combusti
on del gas, adem
as de producir vapor de agua, se puede producir
energa electrica mediante la utilizaci
on de unas turbinas de gas. Haciendo pasar el vapor de
agua a alta presi
on que se ha obtenido en este proceso a traves de turbinas de vapor, tambien
se puede producir energa electrica ademas de vapor de agua a m
as baja presi
on de acuerdo
con la etapa o etapas de extraccion que se utilicen. El vapor que se recoge de la u
ltima etapa
de extraccion de las turbinas de vapor se condensa en el correspondiente condensador y luego
se enva al desaireador.
El sistema productor de electricidad a base de vapor de agua consta de 28 turbinas. El
esquema de como operan, que vapor utiliza y que vapor producen se representa en la gura D.3.
El vapor de agua que no se obtiene mediante los procesos descritos hasta ahora se produce
por condensaci
on ash, por reducci
on de entalpa2 , en las unidades de producci
on antes men2

La entalpa es una magnitud termodin


amica igual a la suma de la energa interna de un uido y el producto

D.2 Gestion operativa de una renera de crudo de petroleo

747

B
T 06
T 07
T 08
T 09

H
T 01

T 02

T 03

T 04

T 05

M
T 12

T 13

T 14

T 16

T 15

T 17

T 18

T 19

T 20

T 21

T 24

T 22

T 23

MB

T 25

MB
T 26
T 10

T 11

T 27
T 28

M
H

Figura D.3
Esquema productivo de las turbinas de vapor de la renera
cionadas y en diversas turbinas. En los condensadores ash de media, CM, baja, CB, y muy
baja, CMB, presi
on, los condensados procedentes de las unidades de producci
on a alta y media
presi
on se someten a un proceso de reduccion de presi
on para producir vapor de agua a media,
baja y muy baja presi
on.
Los atemperadores de alta, AH, media, AM, y baja, AB, reducen la entalpa del vapor de
agua que a ellos entra a media, baja y muy baja presi
on.
En las tablas D.3 y D.4 se especican las producciones o consumos de cada una de las
unidades de producci
on a las que nos estamos reriendo, as como los consumos de vapor de
agua y producci
on de energa electrica de las 28 turbinas de vapor de que se compone el sistema
que estamos estudiando. Como se puede observar, el vapor de agua, a distintas presiones, se
produce o consume en todas las unidades de producci
on. Algunas de estas poseen sus propias
calderas para producir vapor de agua.
De las calderas que hay en las unidades de producci
on se deriva un agua, AD, a partir de
la cual tambien se puede producir vapor de agua a baja presi
on en un tanque de destilaci
on
ash: cuadro 16 de la gura D.2, TDFU.
Los condensados aceitosos de media y muy baja presion que resultan de algunas de las
de su presi
on por su volumen. Tiene la dimensi
on de una energa: kJ/kg, kcal/kg.
La energa interna la integran la energa cinetica de traslaci
on de las moleculas, la energa cinetica de rotaci
on
de las moleculas, la energa cinetica vibratoria de los
atomos de las moleculas y la energa potencial de las
moleculas debida a la fuerza de atracci
on entre ellas. La energa interna aumenta al aumentar la separaci
on de
las moleculas. Depende del volumen y de la temperatura del uido.

748

Apendice D. Casustica de programacion lineal

Tabla D.3
Producci
on/consumo horario de agua, vapor de agua y condensados de las diversas unidades
de producci
on de la renera
Unidad
U01
U03
U04
U06
U07
U08
U09
U10
U11
U12
U13
U14
U15
U16
U17
U18
U19
U20
U21
U22
U23
U24
U25
U26
U27

3,50
5,80
16,80
1,80

MB AC AD
4,6

AA ADI CH CM CB CMB AM AB AMB


-7,60
-5,60

1,5

-9,3
-1,60
6,10

5,10
4,4
3,1 -12,40 -5,50
11,5 2,60
4,4 -26,90 2,52
0,30 0,10
2,80 52,00

-6,1
0,2
1,8
1,2

-0,2

-10,2
-0,5

-0,50

-11,5

5,40
2,80

5,00
-8,0 -0,13
7,1 10,90 16,33

7,5
39,0 -1,40 -20,60
26,0 -1,00

1,2 -18,60 -2,90


20,10
0,2 -19,80 0,20
-1,3 -19,70 1,20
-30,0 10,10 2,82

4,0

-12,6
-1,80

-1,3

4,3
3,8
24,0

0,5

24,5 -1,00 -3,47


28,5 -1,28 -5,90
33,5 -1,30 -29,10
-3,80
0,5
0,7

0,4

-2,40
-0,10
-3,1 -55,70
-1,4

1,1

-0,30

-1,40
-20,10
-0,3 -0,20
-1,10
-1,82
-5,90
-2,80

-4,7
-4,8

-0,65

15,6

2,5

Leyendas:
H
Vapor a alta presi
on
M Vapor a media presi
on
B
Vapor a baja presi
on
MB Vapor a muy baja presi
on
AC Agua de caldera principal del desaireador
AD Agua de descarga de las calderas
AA Agua
acida
ADI Agua desionizada

-3,3 -2,1
CH
CM
CB
CMB
AM
AB
AMB

-7,70

-3,4

-0,6 -8,63

Condensado a alta presi


on
Condensado a media presi
on
Condensado a baja presi
on
Condensado a muy baja presi
on
Cond. aceitoso a media presi
on
Cond. aceitoso a baja presi
on
Cond. aceitoso a muy baja presi
on

-3,1

D.2 Gestion operativa de una renera de crudo de petroleo

Tabla D.4
Requisitos horarios de energa electrica y combustibles en las distintas unidades de
producci
on, y consumos de vapor y potencias de las turbinas
Unidad
U01
U02
U03
U04
U05
U06
U07
U08
U10
U11
U12
U13
U14
U15
U16
U17
U18
U19
U20
U21
U22
U23
U24
U25
U26
U27

FO1 FO2 SG SFO1 EL


3,60
6,40
1,08
3,77
0,96

1,36
-5,000
-3,925

0,01
0,25
5,65
1,73
9,22 0,35

-17,103
0,73
2,59
2,03
2,34

-0,856
1,59
-1,578

Leyendas:
G
Gas (combustible)
FO1 Gas o fuel del tipo 1
FO2 Gas o fuel del tipo 2
SG
S
olo gas
SFO1 S
olo fuel del tipo 1
EL
Energa electrica

1,14
1,02

0,800
0,115
1,245
0,820
0,395
0,050
0,220
0,105
1,620
1,270
4,350
0,89 1,130
0,925
0,093
0,685
0,205
1,140
2,975
6,330
0,002
0,140
0,720
0,565
0,545
9,555

Turbina Unidad Vapor Potencia


Tn/h
MW
HaM
T01
T02
T03
T04
T05
HaB
T06
T07
T08
T09
H a MB
T10
T11
MaB
T12
T13
T14
T15
T16
T17
T18
T19
T20
M a MB
T21
T22
T23
T24
T25
T26
T27
T28

U19
U11
U21
U26
U16

9,50
3,30
9,00
4,20
37,00

0,372
0,116
0,280
0,111
0,045

U19
U11
U11
U20

4,60
6,60
4,60
0,50

0,278
0,306
0,204
0,013

U22
U22

8,00
6,10

0,460
0,145

U15
U13
U13
U13
U20
U21
U20
U21
U13

7,30
7,30
4,80
3,30
2,70
3,30
2,40
1,30
2,10

0,164
0,144
0,092
0,052
0,036
0,044
0,030
0,015
0,024

U12
U16
U16
U16
U16
U12
U22
U16

2,00
4,70
2,20
3,80
0,90
0,90
1,00
2,00

0,184
0,250
0,100
0,150
0,015
0,013
0,011
0,015

749

750

Apendice D. Casustica de programacion lineal

unidades de producci
on se procesan en un tanque de condensado ash: cuadro 17, TCFA. El
exceso de vapor a muy baja presi
on que no se necesita se libera a la atmosfera.
La implantaci
on fsica de la renera consta de cuatro circuitos de tuberas de vapor de
agua: a alta, H; media, M; baja, B; y muy baja presi
on, MB. Las perdidas de carga y de
poder calorco del uido a traves de las correspondientes tuberas se consideran despreciables
teoricamente. Las diferentes unidades de producci
on de la renera y las turbinas de vapor se
conectan a estos circuitos en paralelo con el n de que si alguna se avera ello no afecte al resto
de la producci
on.
El agua acida, AA, que se produce en las unidades de producci
on se tira por los drenajes.
Debido a diferencias tecnol
ogicas, a las unidades de producci
on 1 a 9 se las denomina viejas
y a las 10 a 27 nuevas. Las viejas y las nuevas producen condensados de distintas caractersticas.
Las lneas discontinuas de la gura D.2 se reeren a los circuitos de transporte de fuel.
Como ejemplo del balance de ujos entrantes y salientes, en la gura D.4 se representa el
de la unidad de producci
on 11: la columna de destilaci
on de vaco. En este balance no se indica
ni la electricidad que se consume en esta unidad, ni el fuel que se quema. Tampoco se pone de
maniesto como opera funcionalmente la misma pues ello no afecta a la producci
on/consumo
de vapor de agua tal como los estamos considerando aqu.
H
M
B
MB

M
H

TURBINAS
MB

B
CM
U 11

AC

CB

EP
EL

Agua

DEPOSITOS DE
VAPOR DE AGUA,
AGUA Y FUEL

EP
AC
ADI
AD
G
F01
F02

UNIDADES
DE
PRODUCCION

EL

AA

AD

AA

CH
CM
CB
AM
AB

Figura D.4
Fluidos que se consumen y producen en la unidad de producci
on n
umero 11 y esquema de
ujos energeticos en la renera
En las tablas D.3 y D.4 a que hacamos referencia con anterioridad, las cantidades positivas
indican consumo horario en toneladas; las negativas producci
on. Los consumos y producciones
de todas las unidades de producci
on se han prorrateado linealmente con el n de que si una
unidad operase a menos capacidad de la nominal, su producci
on y consumo se puedan interpolar
linealmente. Si no funcionan, evidentemente, las producciones y consumos seran cero. No
se tienen en cuenta, por tanto, los mnimos tecnicos operativos reales de esas unidades de
producci
on.
En la producci
on de vapor de agua se utilizan fundamentalmente tres combustibles: gas,
fuel de tipo 1 y fuel de tipo 2. El gas se produce en la renera y se quema en los hogares

D.2 Gestion operativa de una renera de crudo de petroleo

751

de las diversas calderas de las unidades de producci


on y en los turbogeneradores. Como su
composicion no es homogenea, o se consume en la renera o se tiene que quemar en unas
antorchas al aire libre pues su valor en el mercado no hace rentable su comercializaci
on. Los
hogares de las calderas de las unidades de producci
on son de cuatro tipos: los que s
olo pueden
quemar gas, SG; los que pueden quemar gas y fuel del tipo 1, FO1; los que pueden quemar
gas y fuel del tipo 2, FO2; y los que s
olo pueden quemar fuel del tipo 1, SFO1. El fuel que se
quema en las calderas principales es del tipo 1 y necesita ser precalentado. El de este mismo
tipo que se quema en las unidades de producci
on no hay que precalentarlo. Los tanques de fuel
se consideran sucientemente grandes como para abastecer cualquier situacion que requiera la
renera; se rellenan autom
aticamente.
Como ya hemos indicado, la renera es capaz de producir energa electrica en los turbogeneradores de gas, en los turbogeneradores de vapor y en las turbinas de vapor. La electricidad
adicional que necesita la renera se adquiere a una compa
na electrica que opera en la zona.
En la tabla D.4 se describen las cantidades de vapor que necesitan las turbinas de vapor de
agua para producir energa electrica, que cantidad de energa son capaces de producir y en
que unidad de producci
on se encuentran ubicadas. Si una unidad de producci
on opera a menos del 100% de su capacidad, la correspondiente turbina de vapor no funciona. Como ya se
indic
o anteriormente, en la tabla D.4 tambien se indican los combustibles que se producen y
consumen en todas las unidades de producci
on, as como sus necesidades de energa electrica.
Las cantidades positivas indican consumos y las negativas producciones.
En la gura D.4 se describen esquem
aticamente los ujos de energa en la renera; EL se
reere a la energa electrica consumida y EP a la producida.

D.2.2

Modelo del problema a optimizar

El objetivo econ
omico que se persigue es satisfacer todas las necesidades de vapor de agua de
la renera al menor coste posible.
Dado que todos los costes son lineales y las condiciones que se imponen se han planteado de
tal manera que conducen a relaciones lineales, parece aconsejable utilizar programaci
on lineal
para optimizar los aspectos economicos y productivos de la fabricaci
on horaria de vapor de
agua en la renera.
La funci
on objetivo de este problema consistira en minimizar los costes operativos de la
renera para producir vapor que determinan las compras de energa electrica a la empresa suministradora y los derivados del consumo de combustibles que produce la renera que podran
venderse.
Las variables del problema son de tres tipos: las cantidades de vapor de agua, agua y
condensados; el volumen de electricidad y fuel consumido; y las 55 variables binarias, 0 o 1,
que indican que unidades de producci
on y que turbinas funcionan y cu
ales no.
Aunque las variables correspondientes a las unidades de producci
on que estan funcionando
pueden adoptar valores continuos, lo que reeja que dichas unidades pueden funcionar a un
rendimiento por debajo del nominal, en principio supondremos que s
olo pueden ser 0 o 1.
Esto permitir
a una mayor exibilidad al modelo, o mejor dicho, a la interpretaci
on y uso
que se pudiese hacer de los resultados que se obtengan, pues no olvidemos que lo que se esta
modelando es la operaci
on horaria de la producci
on de vapor de la renera. El que las variables
que denen el funcionamiento de las unidades de producci
on solo tomen valores 0 o 1 tiene la
ventaja de que a partir de una soluci
on se puede programar la posici
on de las v
alvulas de los
circuitos de vapor de la renera a lo largo de todo un da (u otro perodo) de producci
on.

752

Apendice D. Casustica de programacion lineal

Las restricciones o condiciones del problema son tambien de tres tipos: las de balance de
masa, las de balance de energa y las que denominaremos tecnol
ogicas. Las de balance de masa
establecen la conservacion del ujo en cada uno de los recuadros de la gura D.2; es decir, la
masa que entra en cada uno de ellos es igual a la que sale. Las de balance de energa hacen
uso de las magnitudes ent
alpicas de la tabla D.5 para convertir los diversos ujos y hacerlos
comparables y poderlos relacionar. Esas magnitudes se basan en condiciones generalizadas de
conservacion de ujo y utilizan n
umeros conocidos de diversos manuales de termodin
amica.
Desde el punto de vista de la termodin
amica teorica supondremos que la calidad del vapor
de agua y de los condensados es la misma en cualquier punto de la red de tuberas que los
transportan. Esta asunci
on nos permitir
a trabajar con datos de entalpas constantes, aunque
la realidad sea un poco distinta.3 Una mayor profundidad en la denici
on de esta cuestion
llevara a que la entalpa fuese otra variable a considerar, lo que dara lugar a condiciones no
lineales.
Las condiciones tecnologicas son las que imponen las especicaciones de los manuales operativos de la maquinaria utilizada en las diversas unidades de producci
on y turbinas.
El poder calorco del fuel que se utiliza en la caldera principal es 8.540 kcal/kg. En su
precalentamiento, este fuel absorbe 22,5 kcal/kg. El agua que se precalienta absorbe en este
proceso 28 kcal/kg. Como ya hemos indicado anteriormente, esto se lleva a cabo haciendola
pasar a traves del PCC. Logicamente, se supone que la cantidad de agua que llega a este
dispositivo para ser precalentada es igual a la que sale.
En la tabla D.5 se describen las diversas entalpas en kcal/kg de los uidos que circulan por
la red de tuberas de vapor de agua de la renera. Los tanques ash CM, CB, CMB, TDFG y
TDFU producen vapor saturado seco o saturado lquido a presiones diversas seg
un describe la
3

En muchos casos pr
acticos de m
as envergadura que el que analizamos aqu esta hip
otesis es perfectamente
asumible a efectos de dise
no.

Tabla D.5
Entalpas en kcal/kg de los diversos uidos de vapor de agua de la renera
Presi
on
Vapor de agua
Alta
Media
Baja
Muy baja
Condensados
Alta
Media
Baja
Muy baja

Vapor recalentado

Vapor saturado seco

Vapor saturado lquido

772
732
677
686

665
656
651

263
194
150
134

Agua desionizada
Vapor que se tira del TCFA
Agua del TCFA al desaireador
Agua del TDF al desaireador
Agua de los turbogeneradores de vapor al desaireador
Agua del PCC a la caldera principal

255
181
144
126
10
640
100
640
40
130

D.2 Gestion operativa de una renera de crudo de petroleo

753

gura D.2. El vapor que va a la red es saturado seco, el resto es saturado lquido. Las turbinas
descargan vapor saturado lquido. El agua de descarga de las calderas de las unidades de
producci
on, AD, tiene una entalpa de 190 kcal/kg. El uido que va de las calderas principales
al TDF, y de los TG al TDFG, es vapor saturado lquido a alta presi
on. El precalentador de
agua de las calderas principales, PCC, produce un uido condensado de media presi
on que se
vierte en el desaireador. El uido que se desecha de TDFG y TDFU tiene una entalpa de 150
kcal/kg. El que tambien se tira de TDF y PC, 100 kcal/kg y 181 kcal/kg respectivamente. El
desaireador produce agua con una entalpa de 102 kcal/kg.
La renera compra la energa electrica a la compa
na local a 4.440 pesetas el MWh y vende
la producida que le sobra a 3.550.
El precio del fuel del tipo 1 es 12.000 pesetas la tonelada; el del tipo 2, 10.000 pesetas,
tambien la tonelada.
Condiciones tecnol
ogicas
Como ya hemos apuntado, estas condiciones son las que imponen las caractersticas fsicas del
funcionamiento de los diversos dispositivos que componen el sistema productivo de vapor de
agua de la renera.
Para los turbogeneradores de vapor estas condiciones indican que estas maquinas no
pueden aceptar m
as de 100 Tn/hora de vapor de agua a alta presi
on y que la cantidad de
agua de condensaci
on que resulta del proceso termodin
amico de las correspondientes turbinas
es superior a 3 Tn/hora e inferior a 60. Para incorporar la electricidad que se produce, en vez
de recurrir a un balance de energa, se introduce la siguiente relaci
on:
0,122(vapor a baja presi
on) + 0,249(agua de condensaci
on) (energa electrica) = 1,143.
De igual manera, los turbogeneradores de gas deben satisfacer las siguientes condiciones
tecnologicas:
(gas quemado) 0,206(energa electrica) = 4,199
(vapor a baja presi
on) 0,355(energa electrica) = 12,7
(vapor a alta presi
on) 0,617(energa electrica) = 35,2.
La cantidad m
axima de gas que se puede quemar en los turbogeneradores de gas es 10,7
Tn/hora. La cantidad de agua que va al tanque de destilaci
on ash es el 2,5% de la de vapor
de agua a alta presi
on que produce.
Las calderas principales producen un mnimo de 20 Tn/hora de vapor de agua y un
maximo de 60. La cantidad de uido que se enva al tanque de destilaci
on ash es el 2,5% del
vapor que en ellas se produce.
En el pulverizador de fuel se utiliza una cantidad de vapor de agua igual al 30% de la
de fuel que se pulveriza.
Los atemperadores de alta presi
on no pueden tratar m
as de 60 Tn/hora de vapor a alta
presi
on; los de media y baja presi
on tienen ese lmite establecido en 50 Tn/hora.
Por lo que se reere al desaireador, la cantidad m
axima de agua que puede producir es
423,3 Tn/hora.
Para satisfacer los requisitos de los turbogeneradores de gas, la renera se ve obligada a
comprar cada hora a la compa
na electrica que la abastece 1,48 MWh.
Para aclarar con un caso concreto los tres tipos de condiciones que hemos indicado anteriormente, consideremos las calderas del recuadro 5 de la gura D.2. La condici
on de conservaci
on

754

Apendice D. Casustica de programacion lineal

de masa dice que la cantidad de vapor de agua a alta presi


on que se produce m
as la cantidad
de agua que se lleva al tanque de destilaci
on ash debe ser igual a la cantidad de agua que
llega del desaireador. Cada uno de estos uidos poseer
a una entalpa que indicar
a su energa
interna m
as el producto de su presi
on por su volumen. Seg
un la tabla D.5, la entalpa del vapor
de agua recalentado a alta presi
on es 772 kcal/kg, la del agua que va al tanque 263 kcal/kg y
la que llega del desaireador ya precalentada 130 kcal/kg. Sabiendo que el poder calorco del
fuel que se quema en la caldera es 8.540 kcal/kg, el balance de energa en la caldera es: 772
(entalpa del vapor producido) + 263 (entalpa del agua que va al tanque de destilaci
on)
130 (la del agua que entra) 8.540 (la del fuel que se quema) = 0. Seg
un acabamos de ver, la
condici
on tecnol
ogica en este caso sera (agua al tanque de destilaci
on) 0,025 (cantidad de
vapor a alta presi
on producido) = 0: la cantidad de agua que va al tanque de destilaci
on ash
es el 2,5% de la del vapor de agua a alta presi
on.

D.2.3

Formulaci
on del problema

Denamos primero las variables que se van a utilizar. Las que denen las masas de vapor de
agua que se producen en el sistema y que circulan por el, xi , 1 i 54, se representan en la
gura D.2. Los arcos que en esta gura atraviesan un recuadro indican que la correspondiente
variable interviene s
olo en el balance energetico y no en el balance de masa. Mediante la variable
x54 se desigan el exceso de vapor de baja presion que se libera a la atm
osfera.
Las variables 0 o 1 tj , 1 j 28 y uj , 1 j 27, designan que turbinas y que unidades
de producci
on estar
an o no funcionando una determinada hora.
Otras variables son:
w01
w02
w03
w04
w05
w06
f01
f02
f03
f04
f05
f06
f07

:
:
:
:
:
:
:
:
:
:
:
:
:

energa electrica superior a 1,48 MWh que se compra a la compa


na electrica.
energa electrica que producen los turbogeneradores de gas.
energa electrica que producen los turbogeneradores de vapor.
energa electrica que producen las turbinas.
energa electrica que consumen las unidades de producci
on.
energa electrica que se vende al exterior.
cantidad de fuel del tipo 1 que se consume en las calderas principales.
fuel del tipo 1 que consumen los hogares FO1 y SFO1.
fuel del tipo 2 que consumen los hogares FO2.
gas que consumen los turbogeneradores de gas.
gas que consumen los hogares SG.
gas que consumen los hogares de FO1.
gas que consumen los hogares de FO2.

Funci
on objetivo. El objetivo que se pretende conseguir es la minimizaci
on de los costes
operativos horarios de la renera para producir vapor de agua que determinan las compras de
energa electrica y los consumos de combustibles que podran venderse. Teniendo en cuenta los
datos que se han dado, esta funci
on es
minimizar 6.571,2x0 + 4.440w01 3.550w06 + 12.000f01 + 12.000f02 + 10.000f03 .

D.2 Gestion operativa de una renera de crudo de petroleo

755

La constante 6.571,2 tiene en cuenta el hecho de que los turbogeneradores de gas requieren
comprar a la compa
na electrica un mnimo de 1,48 MWh cada hora a 4.440 pesetas el MWh.
La variable x0 es constante e igual a 1.
Esta funci
on objetivo s
olo pretende optimizar los costes que hemos mencionado, por lo que
habr
a que imponer como condici
on que la producci
on regular de artculos que se venden de la
renera sea la maxima posible. Es decir, que la renera funcione para maximizar su objetivo
productivo primario: los productos derivados del petr
oleo. Para conseguir esto se jar
a el nivel
productivo de las unidades de producci
on al 100%. Si no se hiciese as, con la funci
on objetivo
tal como esta planteada, dejando libre el valor de las variables uj entre 0 y 1, se primaria el que
las unidades de producci
on no trabajasen para ganar dinero y s para vender energa electrica
a la compa
na local.
Condiciones de balance de masa, de energa y tecnol
ogicas Empezaremos escribiendo
estas condiciones para cada uno de los dispositivos de la gura D.2.
(1) Turbogeneradores de gas, TG:
x01 x02 + x03 x04
x01 0,617w02
x02 0,355w02
f04 0,206w02

= 0
= 35,2
= 12,7
= 4,199

(2) Tanque de destilaci


on ash de los turbogeneradores de gas, TDFG:
0,025x01 + x04 = 0
x04 x05 x06 = 0
263x04 656x05 150x06 = 0.

(3) Turbogeneradores de vapor, TV:


x07 x09 x08 = 0
0,122x08 + 0,249x09 w03 = 1,143

(4) Precalentador del agua de las calderas principales, PCC:


x10 x11 = 0
732x10 181x11 28x12 = 0.

(5) Calderas principales:


x12 x13 x17 = 0
130x12 + 772x13 + 263x17 8.540f01 = 0.

(6) Pulverizador de fuel, PF:

x15 0,3f01 = 0.

(7) Precalentador de fuel, PC:


x14 + x16 = 0
22,5f01 + 181x14 732x16 = 0.

(8) Tanque de destilaci


on ash, TDF:
0,025x13 + x17 = 0
x17 x18 x19 = 0
263x17 640x18 100x19 = 0.

756

Apendice D. Casustica de programacion lineal

(9) Desaireador:
x03 + x09 + x11 x12 + x18 + x20 x21 + x22 x33 x34 + x35 +
x36 + x37 + x47 + x48 + x49 + x50 + x51 = 0
102x03 + 40x09 + 181x11 102x12 + 640x18 + 10x20 102x21 + 686x22
102x33 102x34 + 134x35 + 100x36 + 150x37 + 126x47 +
181x48 + 144x49 + 144x50 + 126x51 = 0.

(10) Atemperador de alta presi


on, AH:
x23 x24 + x33 = 0
772x23 732x24 + 102x33 = 0.

(11) Atemperador de media presi


on, AM:
x25 x26 + x34 = 0
732x25 677x26 + 102x34 = 0.

(12) Atemperador de baja presi


on, AB:
x27 x28 = 0.

(13) Tanque ash de baja presi


on, CB:
x29 x37 + x38 + x46 = 0
656x29 150x37 + 194x38 + 181x46 = 0.

(14) Tanque ash de media presi


on, CM:
x30 x38 + x45 = 0
665x30 194x38 + 255x45 = 0.

(15) Tanque ash de muy baja presi


on, CMB:
x31 x35 + x42 = 0
651x31 134x35 + 181x42 = 0.

(16) Tanque de destilaci


on ash, TDFU:
x32 + x40 x41 = 0
656x32 + 190x40 150x41 = 0.

(17) Tanque de condensaci


on ash de aceitosos, TCFA:
x36 x39 + x43 + x44 = 0
100x36 640x39 + 126x43 + 181x44 = 0.

(18) Tanques de agua desionizada:


x20 x52 + x53 = 0.

Ahora formulamos las condiciones de balance de masa para cada una de las cuatro redes
de tuberas.
Red a alta presi
on
x01 x07 + x13 x23 9,5t01 3,3t02 9t03 4,2t04 37t05 4,6t06 6,6t07 4,6t08 0,5t09 8t10
6,1t11 4,4u10 3,1u11 11,5u12 4,4u13 1,2u17 0,2u19 + 1,3u20 + 30u21 4u24 + 8u26 7,1u27 = 0.

757

D.2 Gestion operativa de una renera de crudo de petroleo

Red a media presi


on
x10 x15 x16 + x24 x25 + x30 + 9,5t01 + 3,3t02 + 9t03 + 4,2t04 + 37t05 7,3t12 7,3t13 4,8t14
3,3t15 2,7t16 3,3t17 2,4t18 1,3t19 2,1t20 2t21 4,7t22 2,2t23 3,8t24 0,9t25 0,9t26
t27 2t28 3,5u01 5,8u03 16,8u04 1,8u06 5,1u08 + 12,4u11 2,6u12 + 26,9u13 0,3u14
2,8u15 + 18,6u17 + 19,8u19 + 19,7u20 10,1u21 5u25 0,13u26 10, 9u27 = 0.

Red a baja presi


on
x02 + x05 + x08 + x26 x27 + x29 + x32 + 4,6t06 + 6,6t07 + 4,6t08 + 0,5t09 + 7,3t12 + 7,3t13 + 4,8t14 +
3,3t15 + 2,7t16 + 3,3t17 + 2,4t18 + 1,3t19 + 2,1t20 6,1u07 + 5,5u11 2,52u13 0,1u14 52u15 +
2,9u17 20,1u18 0,2u19 1,2u20 2,82u21 5,4u23 2,8u24 16,33u27 = 0.

Red a muy baja presi


on
x22 + x28 + x31 x54 + 8t10 + 6,1t11 + 2t21 + 4,7t22 + 2,2t23 + 3,8t24 + 0,9t25 + 0,9t26 + t27 + 2t28
1,5u03 0,2u08 1, 8u09 1,2u10 2,5u27 = 0.

El agua de la caldera principal, AC, el agua desionizada, ADI, el agua de descarga de las
calderas de las unidades de producci
on, AD, y los diversos condensados de esas unidades de
producci
on dan lugar a las siguientes 12 condiciones de conservaci
on de masa.
x21 4,6u01 7,5u10 39u11 26u13 4,3u15 3,8u16 24u17 24,5u19
28,5u20 33,5u21 0,5u23 0,7u24
x40 1,4u11 u13 u19 1,28u20 1,3u21 0,65u26
x42 9,3u04
x43 0,2u08
x44 12,6u08
x45 11,5u12 1,4u17 4,7u24 3,3u27
x46 0,5u11 1,3u13 3,1u15 0,3u19 2,1u27
x47 3,1u27
x48 4,8u25 0,6u27
x49 0,5u11 2,4u13 0,1u14 55,7u15 1,4u17 20,1u18 0,2u19 1,1u20 1,82u21 7,7u27
x50 0,3u15 5,9u23 2,8u24 8,63u27
x51 6,1u07 10,2u10 3,4u27
x52 0,5u15 0,4u19 1,1u24 15,6u26

=
=
=
=
=
=
=
=
=
=
=
=
=

0
0
0
0
0
0
0
0
0
0
0
0
0.

La gestion de los combustibles que no son el que se quema en la caldera principal la reejan
las siguientes relaciones:
f05 1,08u04 3,77u05 0,96u06 0,01u08 0,25u10 0,35u13 0,73u17 1,14u26 1,02u27
f04 + f05 + f06 + f07 5u07 3,925u08 17,103u15 0,856u24 1,578u26
f02 + f06 3,6u01 6,4u03 1,36u06 1,73u12 0,89u14 1,59u25
f03 + f07 5,65u11 9,22u13 2,59u19 2,03u20 2,34u21
f02 + 0,89u14

=
=
=
=

0
0
0
0
0.

La producci
on, consumo y gesti
on de la energa electrica dan lugar a las siguientes ecuaciones:
w04 0,372t01 0,116t02 0,28t03 0,111t04 0,045t05 0,278t06 0,306t07 0,204t08 0,013t09
0,46t10 0,145t11 0,164t12 0,144t13 0,092t14 0,052t15 0,036t16 0,044t17 0,03t18
0,015t19 0,024t20 0,184t21 0,25t22 0,1t23 0,15t24 0,015t25 0,013t26 0,011t27 0,015t28 = 0
w05 0,8u01 0,115u02 1,245u03 0,82u04 0,395u06 0,05u07 0,22u08 0,105u10
1,62u11 1,27u12 4,35u13 1,13u14 0,925u15 0,093u16 0,685u17 0,205u18
1,14u19 2,975u20 6,33u21 0,002u22 0,140u23 0,72u24 0,565u25 0,545u26 9,555u27 = 0
w01 + w02 + w03 + w04 w05 w06 = 0.

El u
ltimo grupo de condiciones se reere a las que denen las capacidades operativas de los
distintos dispositivos del sistema de producci
on de vapor de agua y a las que plasman el hecho de

758

Apendice D. Casustica de programacion lineal

que las turbinas de vapor de las diversas unidades de producci


on s
olo pueden funcionar si dichas
unidades lo hacen a plena capacidad. Estas u
ltimas condiciones son f
acilmente formulables si
se tiene en cuenta que las ti , 1 i 28, y uj , 1 j 27, solo pueden adoptar valores 0 o 1.
Si una turbina i pertenece a una unidad de producci
on j, y se dene la condici
on ti uj 0,
evidentemente, si uj = 0, ti debe ser tambien 0. Si uj = 1, ti puede ser 0 o 1. En cualquier caso,
recordemos que para satisfacer las necesidades de produccion de la renera supondremos que
las unidades de producci
on funcionan al tope de su capacidad, es decir, uj = 1, 1 j 27.
M
as adelante analizaremos que ocurre si alguna de estas unidades est
a averiada o parcialmente
en mantenimiento. Las condiciones son pues
x07 100, 3 x09 60, 20 x13 60, x23 60, x25 50, x27 50
x03 + x12 + x21 + x33 + x34 423,3, f04 10,7

y
t01 u19 0, t02 u11 0, t03 u21
t08 u11 0, t09 u20 0, t10 u22
t15 u13 0, t16 u20 0, t18 u2001
t22 u16 0, t23 u16 0, t24 u16

0, t04 u26
0, t11 u22
0, t17 u21
0, t25 u16

0, t05 u16
0, t12 u15
0, t19 u21
0, t26 u12

0, t06 u19
0, t13 u13
0, t20 u13
0, t27 u22

0, t07 u11
0, t14 u13
0, t21 u12
0, t28 u16

0,
0,
0,
0.

El programa lineal que se plantea como resultado de todas estas restricciones y de la funci
on
objetivo formulada antes, tiene 95 variables. De estas, 55 son binarias 0 o 1 aunque 28, las
correspondientes a las unidades de producci
on, estan jadas a 1.

Resoluci
on del problema
El modelo que dene la funci
on objetivo que se ha descrito y el conjunto de condiciones
formulado constituye lo que denominaremos el Modelo 1.
Si el Modelo 1 se traduce a formato MPS, con el objetivo de resolverlo posteriormente con
BBMI, el resultado que se obtiene es el que se lista a continuacion.
NAME
ROWS
N obj
E c2
E c3
E c4
E c5
E c6
E c7
E c8
E c9
E c10
E c11
E c12
E c13
E c14
E c15
E c16
E c17
E c18
E c19
E c20
E c21
E c22
E c23
E c24
E c25
E c26
E c27
E c28
E c29
E c30
E c31
E c32
E c33
E c34
E c35

MODEL-R1

E
E
E
L
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
L
E
E
E
L
L
L
L
L
L
L
L

c36
c37
c38
c47
c49
c50
c51
c52
c53
c54
c55
c56
c57
c58
c59
c60
c61
c62
c63
c64
c65
c66
c67
c68
c69
c70
c71
c72
c73
c74
c75
c76
c77
c78
c79
c80
c81

D.2 Gestion operativa de una renera de crudo de petroleo

L c82
L c83
L c84
L c85
L c86
L c87
L c88
L c89
L c90
L c91
L c92
L c93
L c94
L c95
L c96
L c97
L c98
L c99
L c100
L c101
COLUMNS
x0
x01
x01
x02
x02
x03
x03
x04
x04
x05
x05
x06
x07
x08
x08
x09
x09
x10
x10
x11
x11
x12
x12
x12
x13
x13
x14
x15
x16
x16
x17
x17
x17
x18
x18
x19
x20
x20
x21
x21
x22
x22
x23
x23
x24
x24
x25
x25
x26
x26
x27
x28
x29
x29
x30
x30
x31
x31
x32
x32
x33
x33
x33
x34
x34
x34
x35
x35
x36
x36
x37
x37

obj
c2
c6
c2
c51
c2
c22
c2
c7
c7
c51
c7
c9
c9
c51
c9
c21
c11
c50
c11
c21
c12
c14
c22
c13
c15
c17
c16
c17
c50
c13
c15
c20
c19
c21
c19
c21
c38
c21
c47
c21
c52
c23
c49
c23
c50
c25
c50
c25
c51
c27
c27
c28
c51
c30
c50
c32
c52
c34
c51
c21
c23
c47
c21
c25
c47
c21
c32
c21
c36
c21
c28

6571.2
-1
-0.025
-1
1
1
-102
-1
1
-1
1
-1
1
-1
1
-1
1
1
-1
-1
1
-28
-130
-102
-1
-0.025
-1
1
1
-1
-1
1
263
-1
1
-1
1
-1
-1
1
1
-1
1
-1
-1
1
1
-1
-1
1
1
-1
-1
1
-1
1
-1
1
-1
1
-1
1
1
-1
1
1
1
-1
1
-1
1
-1

c3
c49
c4

1
1
1

c21
c47
c6
c8
c8

-1
1
1
263
-656

c8
c49
c10

-150
-1
0.122

c10
c22
c12

0.249
40
732

c12
c22
c13
c21
c47
c14
c49
c18
c50
c18

-181
181
1
-1
1
772
1
181
-1
-732

c14
c19

263
1

c20
c22
c20
c22

-640
640
-100
10

c22
c53
c22

-102
1
686

c24

772

c24

-732

c26

732

c26

-677

c51
c52
c29

-1
1
-656

c31

-665

c33

-651

c35

-656

c22
c24

-102
102

c22
c26

-102
102

c22
c33
c22
c37
c22
c29

134
-134
100
-100
150
-150

x38
x38
x39
x40
x40
x41
x42
x42
x43
x43
x44
x44
x45
x45
x46
x46
x47
x47
x48
x48
x49
x49
x50
x50
x51
x51
x52
x53
x54
w01
w02
w02
w03
w04
w05
w06
f01
f01
f02
f02
f03
f04
f05
f06
f07

c28
c30
c36
c34
c54
c34
c32
c55
c36
c56
c36
c57
c30
c58
c28
c59
c21
c60
c21
c61
c21
c62
c21
c63
c21
c64
c38
c38
c52
obj
c3
c5
c10
c71
c72
obj
obj
c16
obj
c70
obj
c5
c66
c67
c67

1
-1
-1
1
1
-1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
-1
1
-1
4440
-0.617
-0.206
-1
1
1
-3550
12000
-0.3
12000
-1
10000
1
1
1
1

u01
u01
u02
u03
u03
u04
u04
u05
u06
u06
u07
u07
u08
u08
u08
u08
u09
u10
u10
u10
u11
u11
u11
u11
u11
u11
u12
u12
u12
u12
u13
u13
u13
u13
u13
u13
u13
u14
u14
u14
u15
u15
u15
u15
u15
u16
u16

c50
c68
c72
c50
c68
c50
c66
c66
c50
c68
c51
c67
c50
c56
c66
c72
c52
c49
c53
c66
c49
c51
c54
c62
c72
c80
c49
c58
c72
c99
c49
c51
c54
c62
c69
c86
c88
c50
c62
c70
c50
c53
c62
c65
c72
c53
c78

-3.5
-3.6
-0.115
-5.8
-6.4
-16.8
-1.08
-3.77
-1.8
-1.36
-6.1
-5
-5.1
-0.2
-0.01
-0.22
-1.8
-4.4
-7.5
-0.25
-3.1
5.5
-1.4
-0.5
-1.62
-1
-11.5
-11.5
-1.27
-1
-4.4
-2.52
-1
-2.4
-9.22
-1
-1
-0.3
-0.1
0.89
-2.8
-4.3
-55.7
-0.5
-0.925
-3.8
-1

759

c29
c31
c37
c35

194
-194
-640
190

c35
c33

-150
181

c37

126

c37

181

c31

255

c29

181

c22

126

c22

181

c22

144

c22

144

c22

126

c65

c73
c4
c73
c73
c73
c73
c73
c14
c18
c68

1
-0.355
1
1
1
-1
-1
-8540
22.5
1

c69
c67
c67
c68
c69

1
1
1
1
1

c53
c72

-4.6
-0.8

c52
c72
c55
c72

-1.5
-1.245
-9.3
-0.82

c66
c72
c64
c72
c52
c57
c67

-0.96
-0.395
-6.1
-0.05
-0.2
-12.6
-3.925

c52
c64
c72
c50
c53
c59
c69
c75
c81
c50
c68
c94

-1.2
-10.2
-0.105
12.4
-39
-0.5
-5.65
-1
-1
-2.6
-1.73
-1

c50
c53
c59
c66
c72
c87
c93
c51
c68
c72
c51
c59
c63
c67
c85
c72
c95

26.9
-26
-1.3
-0.35
-4.35
-1
-1
-0.1
-0.89
-1.13
-52
-3.1
-0.3
-17.103
-1
-0.093
-1

INT

760

u16
u16
u17
u17
u17
u17
u18
u18
u19
u19
u19
u19
u19
u19
u20
u20
u20
u20
u20
u20
u21
u21
u21
u21
u21
u21
u22
u22
u23
u23
u24
u24
u24
u24
u25
u25
u26
u26
u26
u26
u27
u27
u27
u27
u27
u27
u27
t01
t01
t02
t02
t03
t03
t04
t04
t05
t05
t06
t06
t07
t07
t08
t08
t09
t09
t10
t10
t11
t11
t12
t12
t13
t13
t14
t14
t15
t15
t16
t16
t17
t17
t18
t18
t19
t19
t20
t20

Apendice D. Casustica de programacion lineal

c96
c98
c49
c51
c58
c66
c51
c72
c49
c51
c54
c62
c69
c74
c49
c51
c54
c69
c82
c90
c49
c51
c54
c69
c76
c92
c72
c84
c51
c63
c49
c53
c63
c67
c50
c68
c49
c54
c66
c72
c49
c51
c58
c60
c62
c64
c72
c49
c71
c49
c71
c49
c71
c49
c71
c49
c71
c49
c71
c49
c71
c49
c71
c49
c71
c49
c71
c49
c71
c50
c71
c50
c71
c50
c71
c50
c71
c50
c71
c50
c71
c50
c71
c50
c71
c50
c71

-1
-1
-1.2
2.9
-1.4
-0.73
-20.1
-0.205
-0.2
-0.2
-1
-0.2
-2.59
-1
1.3
-1.2
-1.28
-2.03
-1
-1
30
-2.82
-1.3
-2.34
-1
-1
-0.002
-1
-5.4
-5.9
-4
-0.7
-2.8
-0.856
-5
-1.59
8
-0.65
-1.14
-0.545
-7.1
-16.33
-3.3
-3.1
-7.7
-3.4
-9.555
-9.5
-0.372
-3.3
-0.116
-9
-0.28
-4.2
-0.111
-37
-0.045
-4.6
-0.278
-6.6
-0.306
-4.6
-0.204
-0.5
-0.013
-8
-0.46
-6.1
-0.145
-7.3
-0.164
-7.3
-0.144
-4.8
-0.092
-3.3
-0.052
-2.7
-0.036
-3.3
-0.044
-2.4
-0.03
-1.3
-0.015
-2.1
-0.024

c97
c101
c50
c53
c62
c72
c62

-1
-1
18.6
-24
-1.4
-0.685
-20.1

c50
c53
c59
c65
c72
c79
c50
c53
c62
c72
c89

19.8
-24.5
-0.3
-0.4
-1.14
-1
19.7
-28.5
-1.1
-2.975
-1

c50
c53
c62
c72
c91

-10.1
-33.5
-1.82
-6.33
-1

c83
c100
c53
c72
c51
c58
c65
c72
c61
c72
c50
c65
c67
c77
c50
c52
c59
c61
c63
c66

-1
-1
-0.5
-0.14
-2.8
-4.7
-1.1
-0.72
-4.8
-0.565
0.13
-15.6
-1.578
-1
-10.9
-2.5
-2.1
-0.6
-8.63
-1.02

c50
c74
c50
c75
c50
c76
c50
c77
c50
c78
c51
c79
c51
c80
c51
c81
c51
c82
c52
c83
c52
c84
c51
c85
c51
c86
c51
c87
c51
c88
c51
c89
c51
c91
c51
c90
c51
c92
c51
c93

9.5
1
3.3
1
9
1
4.2
1
37
1
4.6
1
6.6
1
4.6
1
0.5
1
8
1
6.1
1
7.3
1
7.3
1
4.8
1
3.3
1
2.7
1
3.3
1
2.4
1
1.3
1
2.1
1

t21
t21
t22
t22
t23
t23
t24
t24
t25
t25
t26
t26
t27
t27
t28
t28

c50
c71
c50
c71
c50
c71
c50
c71
c50
c71
c50
c71
c50
c71
c50
c71

-2
-0.184
-4.7
-0.25
-2.2
-0.1
-3.8
-0.15
-0.9
-0.015
-0.9
-0.013
-1
-0.011
-2
-0.015

c52
c94
c52
c95
c52
c96
c52
c97
c52
c98
c52
c99
c52
c100
c52
c101

rhs
rhs
rhs
BOUNDS
FX bnd
UP bnd
LO bnd
UP bnd
LO bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
FX bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
UP bnd
ENDATA

c3
c4
c10

35.2
12.7
1.143

c5
c47

x0
x07
x09
x09
x13
x13
x23
x25
x27
f04
u01
u02
u03
u04
u05
u06
u07
u08
u09
u10
u11
u12
u13
u14
u15
u16
u17
u18
u19
u20
u21
u22
u23
u24
u25
u26
u27
t01
t02
t03
t04
t05
t06
t07
t08
t09
t10
t11
t12
t13
t14
t15
t16
t17
t18
t19
t20
t21
t22
t23
t24
t25
t26
t27
t28

1
100
3
60
20
60
60
50
50
10.7
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

2
1
4.7
1
2.2
1
3.8
1
0.9
1
0.9
1
1
1
2
1

RHS
4.199
423.3

En la tabla D.6, columna 2, se describe la soluci


on completa del Modelo 1. La producci
on
de energa electrica de la renera que se vende a la compa
na electrica cada hora es 8,427

D.2 Gestion operativa de una renera de crudo de petroleo

761

MWh. En la columna 6, Modelo 1, se representa la soluci


on del mismo Modelo 1 sin tener en
cuenta que las variables ti son enteras 0 o 1.

D.2.4

An
alisis de sensibilidad

Si se desease optimizar la misma funcion objetivo a


nadiendo la condici
on de que no se venda
energa electrica, bastara hacer w06 = 0. Este problema lo denominamos Modelo 2. Su soluci
on
se describe en la tabla D.6, columna 3. Como se puede observar, la nueva restricci
on supone
unas perdidas a la renera de 310.929,1 298.506,9 = 12.422, pesetas por hora. La energa
electrica que se produce en los turbogeneradores de gas y vapor se reduce sustancialmente,
mientras que la de las turbinas de vapor es pr
acticamente la misma. La solucion de la columna
7, Modelo 2, es la del Modelo 2 sin restringir que las variables ti sean 0 o 1.
Tambien puede ser interesante saber la maxima cantidad de energa electrica que se puede
vender cada hora en condiciones normales. Para ello, basta con cambiar la funci
on objetivo
haciendo la nueva igual a

maximizar w06

y forzar a que w01 = 0. Si se designa este nuevo problema como Modelo 3, la soluci
on del
mismo se describe en la columna 4 de la tabla D.6. La m
axima cantidad de energa que se
puede vender es 16,260 MW. La producci
on de los turbogeneradores de gas es la misma que
en el Modelo 1 mientras que la de los turbogeneradores de vapor y las turbinas de las unidades
de producci
on pr
acticamente se duplica. En la columna 8 de la tabla D.6, bajo Modelo 3, se
describe la solucion del Modelo 3 sin restringir que las variables ti adopten valores 0 o 1.
Una situaci
on habitual que tambien se puede estudiar f
acilmente es la que se presenta
cuando alguna de las unidades de producci
on no se puede utilizar al 100% de su capacidad.
Si por ejemplo la unidad n
umero 15 estuviese al 50% de su capacidad, haciendo u15 = 0,5 se
obtendra el Modelo 4. Su soluci
on es la de la columna 5 de la tabla D.6. El coste de operaci
on
sera 389.970,5 pesetas por hora. Esto supondra un incremento respecto del optimo de 91.463,6
pesetas por hora. La explicaci
on de esto reside en el hecho de que la unidad de producci
on
n
umero 15 es la que mas gas produce. Si se reduce a la mitad, 17.103/2 = 8.551,5 Tn/h, este
combustible hay que remplazarlo con fuel con lo que esto representa en coste pues estos u
ltimos
combustibles se pueden vender mientras que el gas, como ya se indico, no. De la soluci
on se
deduce que los hogares que pueden quemar gas o fuel de tipo 1 pasan a quemar s
olo fuel,
incrementandose el consumo de este de 7.118 Tn/h a 15.570 Tn/h.

762

Apendice D. Casustica de programacion lineal

Tabla D.6
Soluciones optimas de los diversos modelos del problema de la renera
Vari. Modelo 1 Modelo 2 Modelo 3 Modelo 4 Modelo 1 Modelo 2 Modelo 3
Coste 298.506,9 310.929,1
16,260 389.970,5 298.450,2 310.877,4
16,296
x0
1,000
1,000
1,000
1,000
1,000
x01
54,671
50,305
54,671
54,373
54,671
50,292
54,671
x02
23,903
21,390
23,903
23,731
23,903
21,383
23,903
x03
79,941
72,953
79,941
79,464
79,941
72,932
79,941
x04
1,366
1,257
1,366
1,359
1,366
1,257
1,366
x05
0,305
0,280
0,305
0,303
0,305
0,280
0,305
x06
1,061
0,976
1,061
1,055
1,061
0,976
1,061
x07
100,000
78,071
73,705
77,773
78,071
73,692
100,000
x09
27,173
52,811
40,000
28,303
27,106
52,832
40,000
x08
50,897
20,893
60,000
49,469
50,965
20,859
60,000
x10
1,041
1,041
3,122
1,041
1,041
1,041
3,125
x11
1,041
1,041
3,122
1,041
1,041
1,041
3,125
x12
20,500
20,500
61,449
20,500
20,500
20,500
61,500
x13
20,000
20,000
59,950
20,000
20,000
20,000
60,000
x14
0,061
0,061
0,184
0,061
0,061
0,061
0,185
x15
0,453
0,453
1,359
0,453
0,453
0,453
1,360
x16
0,061
0,500
1,498
0,500
0,061
0,500
1,500
x17
0,500
0,061
0,184
0,061
0,500
0,061
0,185
x18
0,150
0,150
0,452
0,150
0,150
0,150
0,452
x19
0,349
0,349
1,046
0,349
0,349
0,349
1,047
x20
85,191
85,106
87,565
85,185
85,191
85,106
87,600
x21
196,900
196,900
196,900
194,750
196,900
196,900
196,900
x22
4,189
3,509
7,489
8,689
4,182
3,505
7,494
x23
0,000
0,000
0,007
0,000
0,000
0,000
0,000
x24
0,000
0,017
0,000
0,036
0,000
0,000
0,000
x25
0,779
8,454
8,454
8,454
0,000
8,454
8,454
x26
0,854
10,900
10,900
10,900
0,000
10,900
10,900
x27
0,044
23,463
23,463
22,008
0,000
23,463
23,463
x28
0,044
18,193
18,193
18,193
0,000
18,193
18,193
x29
2,029
1,899
1,899
1,899
2,029
1,899
1,899
x30
2,706
9,300
9,300
9,300
2,706
9,300
9,300
x31
0,845
12,600
12,600
12,600
0,845
12,600
12,600
x32
0,524
7,300
7,300
5,750
0,524
7,300
7,300
x33
0,000
0,000
0,122
0,000
0,000
0,000
0,000
x34
0,074
0,000
0,129
0,000
0,000
0,000
0,000
x35
8,454
0,179
0,000
0,379
8,454
0,000
0,000
x36
10,900
0,197
0,000
0,416
10,900
0,000
0,000
x37
23,463
0,064
1,791
1,443
23,463
0,000
0,000
x38
18,193
6,630
6,630
6,630
18,193
6,630
6,630
x39
1,899
91,020
91,020
63,170
1,899
91,020
91,020
x40
6,630
3,100
3,100
3,100
6,630
3,100
3,100
x41
6,105
5,400
5,400
5,400
6,105
5,400
5,400
x42
9,300
20,900
20,900
20,900
9,300
20,900
20,900
x43
0,200
17,630
17,630
17,480
0,200
17,630
17,630
x44
12,600
19,700
19,700
19,700
12,600
19,700
19,700
x45
20,900
0,200
0,200
0,200
20,900
0,200
0,200
x46
7,300
6,105
6,105
6,105
7,300
6,105
6,105
contin
ua en la siguiente p
agina

D.2 Gestion operativa de una renera de crudo de petroleo


continuaci
on
Vari. Modelo 1 Modelo 2 Modelo 3 Modelo 4 Modelo 1 Modelo 2 Modelo 3
x47
3,100
0,064
1,791
1,443
3,100
0,000
0,000
x48
5,400
2,029
2,029
1,934
5,400
2,029
2,029
x49
91,020
2,706
2,706
2,706
91,020
2,706
2,706
x50
17,630
0,845
0,845
0,845
17,630
0,845
0,845
x51
19,700
0,524
0,524
0,524
19,700
0,524
0,524
x52
17,600
17,600
17,600
17,350
17,600
17,600
17,600
x53
102,791
102,706
105,165
102,535
102,791
102,706
105,200
x54
0,000
0,000
0,647
0,000
0,000
0,000
0,680
w01
0,000
0,000
0,000
0,000
0,000
0,000
0,000
w02
31,558
24,481
31,558
31,075
31,558
24,460
31,558
w03
11,832
10,502
18,677
14,628
11,824
10,496
18,677
w04
1,036
1,016
2,025
1,067
1,060
1,042
2,060
w05
36,000
36,000
36,000
35,537
36,000
36,000
36,000
w06
8,427
0,000
16,260
11,232
8,442
0,000
16,295
f01
1,511
1,511
4,530
1,511
1,511
1,511
4,533
f02
7,118
5,660
15,570
15,570
7,118
5,655
15,570
f03
21,830
21,830
13,378
21,830
21,830
21,830
13,378
f04
10,700
9,242
10,700
10,600
10,700
9,237
10,700
f05
9,310
9,310
9,310
9,310
9,310
9,310
9,310
f06
8,452
9,909
0,000
0,000
8,452
9,914
0,000
f07
0,000
0,000
8,452
0,000
0,000
0,000
8,452
u01
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u02
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u03
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u04
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u05
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u06
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u07
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u08
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u09
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u10
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u11
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u12
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u13
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u14
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u15
1,000
1,000
1,000
0,500
1,000
1,000
1,000
u16
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u17
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u18
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u19
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u20
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u21
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u22
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u23
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u24
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u25
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u26
1,000
1,000
1,000
1,000
1,000
1,000
1,000
u27
1,000
1,000
1,000
1,000
1,000
1,000
1,000
t01
0,000
0,000
1,000
0,000
0,000
0,000
1,000
t02
0,000
0,000
1,000
0,000
0,000
0,000
0,649
contin
ua en la siguiente p
agina

763

764

Apendice D. Casustica de programacion lineal


continuaci
on
Vari. Modelo 1 Modelo 2 Modelo 3 Modelo 4 Modelo 1 Modelo 2 Modelo 3
t03
0,000
0,000
0,000
0,000
0,000
0,000
0,000
t04
0,000
0,000
0,000
0,000
0,000
0,000
0,000
t05
0,000
0,000
0,000
0,000
0,000
0,000
0,000
t06
0,000
0,000
1,000
0,000
0,000
0,000
1,000
t07
0,000
0,000
0,000
0,000
0,000
0,000
0,000
t08
0,000
0,000
0,000
0,000
0,000
0,000
0,000
t09
0,000
0,000
1,000
0,000
0,000
0,000
0,000
t10
0,000
0,000
0,000
0,000
0,000
0,000
0,228
t11
0,000
0,000
0,000
0,000
0,000
0,000
0,000
t12
1,000
1,000
1,000
0,000
1,000
1,000
1,000
t13
1,000
1,000
1,000
1,000
1,000
1,000
1,000
t14
1,000
1,000
1,000
1,000
1,000
1,000
1,000
t15
1,000
1,000
1,000
1,000
1,000
1,000
1,000
t16
0,000
0,000
1,000
1,000
0,000
0,525
1,000
t17
0,000
0,000
1,000
1,000
0,225
0,000
1,000
t18
0,000
0,000
1,000
0,000
0,000
0,000
0,461
t19
0,000
1,000
0,000
0,000
0,000
0,000
0,000
t20
0,000
0,000
0,000
0,000
0,000
0,000
0,000
t21
1,000
1,000
1,000
1,000
1,000
1,000
1,000
t22
1,000
1,000
1,000
1,000
1,000
1,000
1,000
t23
0,000
1,000
1,000
1,000
1,000
1,000
1,000
t24
1,000
0,000
1,000
1,000
0,430
0,252
1,000
t25
0,000
1,000
0,000
1,000
0,000
0,000
0,000
t26
0,000
0,000
0,000
0,000
0,000
0,000
0,000
t27
0,000
0,000
0,000
0,000
0,000
0,000
0,000
t28
0,000
0,000
0,000
0,000
0,000
0,000
0,000

Referencias
En cualquier buen libro de programaci
on lineal se pueden encontrar ejemplos m
as o menos
complejos que pueden ayudar al lector a familiarizarse con la formulaci
on de problemas de
programaci
on lineal a partir de diversos casos reales. Los dos que se han presentado en este
apendice se han obtenido de Padberg [1995].

Apendice

El PROGRAMA BBMI

L PROGRAMA BBMI esta dise


nado para la resoluci
on de grandes problemas de
programaci
on lineal o programaci
on entera del siguiente tipo:
minimizar o maximizar cT x + hT y
sujeta a

Ax + Gy b
lx x ux
ly y uy
x n , y Zp .

(E.1)

La version que se lista mas adelante esta adaptada para su uso en ordenadores personales,
donde la limitaci
on de memoria en algunos casos puede ser un condicionante importante. Con
ella se han resuelto problemas lineales de mas de 2.000 variables y 1.000 condiciones.
La sencillez de entrada de datos al programa, y por ende el manejo del mismo, es una de las
caractersticas primordiales que persegua su elaboraci
on. Esta entrada de datos est
a dividida
en dos bloques: aquellos que se reeren a los datos del problema a estudiar, para lo cual se
utiliza en toda su extensi
on el formato est
andar MPS (Mathematical Programming Systems),
ampliado con la palabra clave INT para denir que variables han de ser enteras; y los que
especican los par
ametros que se desea que utilice el programa para resolver el problema que
haya que estudiar.

E.1

Datos del problema. Formato MPS

Los datos del problema que se quiera que Bbmi resuelva deber
an estar en un chero cuyo
nombre el propio programa demandar
a por pantalla al comienzo de la ejecuci
on mediante el
requerimiento:
Fichero de datos del problema?
765

766

Apendice E. El programa BBMI

En este chero, como decamos, los datos del problema han de suministrarse siguiendo el
formato Mathematical Programming Systems. Los resultados y el proceso de optimizacion
apareceran en un chero que el programa autom
aticamente designa como nombre.pbb, donde
nombre es el introducido por pantalla. En el sistema operativo MS/DOS ese nombre estar
a
limitado a 8 caracteres.
Mediante el formato MPS se le suministran al programa las caractersticas y par
ametros del
programa lineal que tenga que resolver, a partir de ciertas palabras cabecera clave que dividen
al chero en varias secciones seg
un se esquematiza a continuaci
on.
NAME
ROWS
.
..
COLUMNS
.
..
INT
.
..
RHS
.
..
RANGES
.
..
BOUNDS
.
..
ENDATA

No estandar

Opcional
Opcional

La disposici
on y orden de estas secciones de datos en el chero correspondiente han de ser las
indicadas. Cada una de las palabras clave cabecera debe comenzar en la columna 1. Los datos
que conforman cada seccion deben seguir el siguiente formato en cada lnea:
Columnas
Contenido

2-3
Clave

5-12
Nombre

15-22
Nombre

25-36
Valor

40-47
Nombre

50-61
Valor

(E.2)

Tambien se permiten lneas de comentarios siempre que comiencen por el caracter * en la


columna 1.
El formato MPS es sin duda el m
as extendido entre los codigos comerciales que resuelven
problemas de optimizaci
on. Para el tratamiento de programas enteros hemos incorporado la
palabra clave INT ya mencionada (aunque se usa en algunos programas comerciales para la
resolucion de programas enteros, no es estandar), con el n de informar a Bbmi sobre que
variables debe considerar como enteras. Todo lo dem
as sigue estrictamente las directrices de
ese formato.

E.1.1

Clave NAME

Mediante esta palabra clave, con el formato1 del siguiente ejemplo,


1

El smbolo  designa un espacio en blanco.

E.1 Datos del problema. Formato MPS

767

NAMEPROBLE1
se le indica a Bbmi el nombre del problema que se va a resolver (en el caso del ejemplo,
PROBLE1). Este nombre aparecer
a al comienzo de cada bloque de informaci
on signicativa
en la salida o chero de resultados.
Observese que NAME debe comenzar en la primera columna y el nombre propiamente
dicho en la 15, pudiendose continuar hasta la 22. Todo lo posterior a la columna 22, aun
cuando puede servir de orientaci
on al usuario, no ser
a tenido en cuenta por el programa.
NAME debe ser la primera palabra clave del formato MPS que se debe incluir en el chero de
datos. Puede estar precedida de comentarios y, como veremos mas adelante, por informaci
on
relativa a los par
ametros de como se quiere que el programa se resuelva el problema.

E.1.2

Secci
on ROWS

En esta seccion, un ejemplo de la cual puede ser


ROWS
NFILA1
GFILA2
LFILA3
EFILA4
se deben denir las condiciones o restricciones del problema y el tipo de estas. Se debe incluir
una lnea para cada condici
on. En la columna dos o en la tres de cada una de esas lneas
deber
a aparecer una clave por medio de la cual se indique el tipo de condici
on que se esta
deniendo. A partir de la columna cinco, y ocupando como m
aximo hasta la doce, se
denir
a el nombre que se quiere asignar a dicha condici
on. Los distintos tipos de condici
on
que se pueden denir y sus palabras clave asociadas son las que siguen.
Clave

Condici
on Tipo

E
G
L
N
N

Funci
on Objetivo
Libre

Las condiciones de los tipos E, G y L se usan para denir restricciones de la forma


aT x = b1

aT x b1

y aT x b1 ,

respectivamente. Los coecientes distintos de cero de estas condiciones apareceran en la seccion


correspondiente a COLUMNS.
El tipo de condici
on N se puede referir bien a una condici
on que no tiene lmites, y que por
lo tanto no es una condici
on como tal ( cT x no es realmente una condici
on), o a
la propia funci
on objetivo.

768

Apendice E. El programa BBMI

E.1.3

Secci
on COLUMNS

En esta seccion se denen los coecientes distintos de cero de las condiciones previamente
denidas en la seccion ROWS. Un ejemplo de esta seccion de datos es el que sigue.
1

512

COLUMNS
X01
X01
X02
X02
X06
X06

1522

2536

4047

5061

FILA3
FILA19
FILA1
FILA1
FILA6
FILA89

1.2
14.2
1
88.E02
1
1.33E12

FILA16
FILA12
FILA2

-33.12
1123.4533128
3.5

FILA7

99.99

(Posici
on)

Para cada variable de un problema, xj , en COLUMNS se dene el nombre que se le quiere


dar y el valor de los coecientes distintos de cero, aij , correspondientes a la columna que dene
esa variable en la matriz A o G de las condiciones del problema (E.1). Todos los coecientes
distintos de cero de una columna/variable se deben especicar antes de pasar a
los correspondientes a otra. Si una columna posee varios elementos distintos de cero, no
importa el orden en que se denan.
La informaci
on de las columnas 1 a 4, una vez leda la palabra clave COLUMNS, no se utiliza,
salvo que se desee incorporar en ellas alg
un comentario. Las columnas 5 a 12 denir
an el
nombre de la columna/variable de la que se va a informar al programa sobre cu
ales son
sus elementos distintos de cero. Las columnas 15 a 22 indican el nombre de una la
previamente denida en la que existe un coeciente distinto de cero que afecta a la variable
antes dicha. En las columnas 25 a 36 se habr
a de dar el valor num
erico de ese coeciente.
En las columnas 40 a 47 y 50 a 61 se puede repetir el mismo patron. Si las columnas
15 a 22 y 40 a 47 se dejan en blanco, los valores de las columnas 25 a 36 y 50 a 61 se
ignorar
an.
Es conveniente saber que los valores numericos Bbmi los lee con formato F12.0. Aunque de
esta forma la disposici
on de los espacios en blanco en el campo reservado para el n
umero no
debe plantear ning
un problema, conviene comprobar a que atenerse al respecto en la maquina
que se utilice. En principio, es lo mismo escribir 1123.45, 1.12345E03, 1123.45
o 1.12345E3. De igual manera, es lo mismo 120, 120 y 120.
En el ejemplo incluido lneas mas arriba, la variable X01 tiene cuatro coecientes distintos
de cero en las las FILA3, FILA12, FILA16 y FILA19.

E.1.3.1

Clave INT

Esta palabra clave debe interrumpir la entrada normal de variables/columnas en la secci


on
COLUMNS a partir del momento en el que todas las dem
as variables que se van a

769

E.1 Datos del problema. Formato MPS

denir sean enteras. Si en un ejemplo como el anterior se encuentra


1

512

COLUMNS
X01
X01
X02
X02
INT
X06
X06

1522

2536

4047

5061

FILA3
FILA19
FILA1
FILA1

1.2
14.2
1
88.E02

FILA16
FILA12
FILA2

-33.12
1123.4533128
3.5

FILA6
FILA89

1
1.33E12

FILA7

99.99

(Posici
on)

la variable X06 y las que se denan posteriormente ser


an las que esten restringidas a tomar
valores enteros.
Es importante recalcar que la formulaci
on del problema se habr
a de llevar a cabo de tal
manera que las variables enteras del mismo esten dispuestas en las u
ltimas columnas de
la matriz de condiciones.

E.1.4

Secci
on RHS

En esta seccion se especican los valores del vector b de un problema como (E.1). Un ejemplo
sera:
1

512

1522

2536

4047

5061

RH1
RH1
RH1
RH1

FILA1
FILA19
FILA4
FILA5

1
14.2
1
10.E12

FILA09
FILA12

-3
1123.4533128

(Posici
on)

RHS

Los principios sobre orden de los datos, valores, etc, son exactamente los mismos que los
indicados en la seccion COLUMNS.
Solamente es necesario especicar al programa los elementos del vector b que
son distintos de cero.

E.1.5

Secci
on RANGES

Los margenes se usan para caracterizar condiciones de la forma


l aT x u,

(E.3)

sin que sea necesario denir las dos condiciones l aT x y aT x u por separado. El margen de
una condici
on del tipo (E.3) es r = ul. Si se desea informar al programa que una determinada
condici
on tiene margen de valores, habr
a que denir en la secci
on RHS uno de sus lmites, l o
u, y en esta el valor de r. Los l y u que resultar
an de denir un margen depender
an del tipo
de condici
on que tenga ese margen y del signo de r. La tabla que sigue ilustra los posibles

770

Apendice E. El programa BBMI

resultados.
Condici
on Tipo

Signo de r

Lmite Inferior l

Lmite Superior u

E
E
G
L

+o
+o

b
b |r|
b
b |r|

b + |r|
b
b + |r|
b

Un ejemplo completo puede ser


1

512

ROWS
E FUN01
E FUN02
G CAPITAL1
L CAPITAL2
.
.
.
COLUMNS
X01
X01
X02
X02
.
.
.
INT
X06
X06
.
.
.
RHS
RH1
RH1
RH1
RH1
.
.
.
RANGES
RANGE01
RANGE01

1522

2536

4047

5061

FUN01
CAPITAL1
FUN01
CAPITAL1

1.2
14.2
1
88.E02

FUN02
CAPITAL2
FUN02

-33.12
1123.4533128
3.5

FUN01
CAPITAL1

1
1.33E12

FUN02

99.99

FUN01
FUN02
CAPITAL1
CAPITAL2

4.2
-3.12
4
5

FUN01
CAPITAL1

1
2

FUN02
CAPITAL2

-3
1

(Posici
on)

Las restricciones de este ejemplo tienen los siguientes lmites:


4,20
-6,12
4,00
4,00

FUN01
FUN02
CAPITAL1
CAPITAL2

5,20
-3,12
6,00
5,00.

El orden de los datos, valores, etc, siguen las mismas directrices que las indicadas en la
seccion COLUMNS.

E.1 Datos del problema. Formato MPS

E.1.6

771

Secci
on BOUNDS

En esta seccion se denen los lmites o cotas entre los que estaran denidas las variables del
problema.
Los valores por defecto que el programa asigna a todas las variables xj son 0 y ; es
on nita, no tiene mucho sentido
decir 0 xj . La realidad es que, trabajando en precisi
hablar de , sino de una cantidad muy grande con respeto a las dem
as: 1020 . Si no desea que
los lmites de las variables sean los que asigna el programa, se pueden denir en esta seccion.
En la seccion BOUNDS, la clave de las columnas 2 a 3 del formato general (E.2), se reere
al tipo de lmite que se va a denir para la variable cuyo nombre aparecer
a entre las columnas
15 a 22. Un ejemplo de esta seccion es el que sigue.
1

512

BOUNDS
UP BOUND1
LO BOUND1
UP BOUND1
.
.
.
UP BOUND1
LO BOUND1
.
.
.
FR BOUND1
UP BOUND1
FX BOUND1

1522

2536

X01
X01
X02

4
-8
9

X05
X05

60
-2

X07
X07
X10

1
5

4047

5061

(Posici
on)

Las posibles claves que pueden aparecer en las columnas 2 y 3 son las de la tabla
siguiente.
Clave Lmite Tipo Lmites Resultantes
LO
UP
FX
FR
MI
PL

Inferior
Superior
Fijo
Libre
Menos
M
as

b
l
b

x
x
x
x
x
x

u
b
b
+
u
+

El valor b indica la cantidad que se introduce en las columnas 25 a 36 y u y l otros lmites ya/o
por suministrar al programa, o los que el asigna por defecto.
El efecto en los lmites internos que el programa asigna a las variables del ejemplo anterior
es:
8 X01
4
X02
9
2 X05 60
X07
1
5 X10
5.
Insistimos en que al referirnos a el ordenador lo interpreta como una cantidad muy grande
( 1020 ).

772

Apendice E. El programa BBMI

Antes de nalizar este apartado es importante aclarar que, caso de necesitarse denir
las dos secciones de datos RANGES y BOUNDS, es aconsejable que RANGES preceda
a BOUNDS.

E.2

Par
ametros y especicaciones de la resoluci
on

En esta seccion se consideran los par


ametros variables que se pueden especicar al programa
a n de modicar ligeramente la forma en que se lleva a cabo el proceso de optimizaci
on del
problema que se va a estudiar.
La denici
on de estos par
ametros de lleva a cabo mediante unas palabras clave que a
continuaci
on exponemos. Caso de ser necesarias, se han de incluir en el mismo chero de
datos del problema a resolver y antes de estos: es decir, inmediatamente antes de la palabra
clave NAME.
Los par
ametros son los que se listan seguidamente:

MAXIMIZAR Se reere a que el problema cuyos datos siguen tiene una funci
on objetivo que se
ha de maximizar. Si no se especica, el programa asume por defecto que la funci
on
objetivo del problema se ha de minimizar.
FRECUENCIA DE REINVERSION nnn Se reere a la frecuencia nnn con la que se quiere que
se reinvierta la base. Por defecto, el programa lo har
a cada 50 iteraciones.
LIMITE DE ITERACIONES nnn Se reere al n
umero maximo de iteraciones simplex nnn
que se permite realizar al programa. Por defecto, el programa realiza un n
umero
de iteraciones m
aximo igual a 100.000.
TOLERANCIA DE CERO xxx.x Se reere al n
umero que identica cu
ando otro cualquiera
se puede considerar cero. Es decir si un n
umero x es T ol x T ol, a los efectos de
ciertos calculos, el programa lo considera como si fuese cero. El programa asume por
defecto el valor 1,0106 .
TOLERANCIA DE COSTES xxx.x Se reere al n
umero que identica cu
ando un coste reducido se considera positivo o negativo. Es decir, si un coste reducido, cj , es cj T ol, el
programa lo considerar
a positivo; si cj T ol, negativo. Si T ol < cj < T ol, cero. El
programa asume por defecto un valor 1,0106 .
TOLERANCIA DE PIVOTE xxx.x Se reere al n
umero que identica cu
ando un elemento
pivote se considera cero. Este elemento pivote se reere al yp del paso 3 del algoritmo
de la tabla 7.1 de la p
agina 420, en la que se expone el metodo simplex revisado. Por
defecto el programa asume una tolerancia igual a 3,61011 .
PROCESO ITERATIVO nnn Esta especicacion se debera hacer constar cuando se desee que
el programa explicite completamente en la unidad nnn el proceso de resolucion de un
programa entero; es decir que informe en todo momento sobre que variables de separaci
on utiliza, en que nudo del arbol enumerativo est
a, si las iteraciones son del metodo
primal del simplex o dual, etc. No es aconsejable su inclusi
on si se desea que la salida de
ordenador no sea muy extensa. Si no se indica ninguna unidad nnn, pero s las palabras
clave PROCESO ITERATIVO, el programa incluir
a esa informaci
on en el mismo chero
de salida, Nombre.pbb, intercal
andola all donde sea necesario.

E.3 Resultados

773

COTA INICIAL F.O. nnn Esta especicacion se debera hacer constar cuando se desee orientar al programa sobre cu
al puede ser una cota inferior de la funci
on objetivo, caso
de estar maximizando, o cota superior caso de estar minimizando, cuando se resuelva un programa entero. Su inclusi
on puede disminuir el tiempo total de resoluci
on
de forma apreciable; sobre todo si es pr
oxima al valor nal. Si no se incluye, el programa
no asume ninguna.

E.3
E.3.1

Resultados
Programas lineales

Como ejemplo de las posibilidades del programa Bbmi, primero resolveremos el programa lineal
del ejemplo 7.10 de la p
agina 453:
min. 2x1 4x2 x3
s. a

2x1 + x2
x1 + x2
0
0
1

x3
x3
x1
x2
x3

10
4
4
6
4.

El chero de datos de este ejemplo es el que se detalla a continuacion.


NAME
ROWS
N OBJ
L FILA1
L FILA2
COLUMNS
X1
X1
X2
X2
X3
X3
RHS
RHS1
RHS1
BOUNDS
UP
UP
LO
UP
ENDATA
El resultado obtenido
Problema Ejelibro

Ejelibro

OBJ
FILA2
OBJ
FILA2
OBJ
FILA2

-2
1
-4
1
-1
-1

FILA1
FILA2

10
4

X1
X2
X3
X3

4
6
1
4

con Bbmi es el que sigue.

FILA1

FILA1

FILA1

774

Apendice E. El programa BBMI

*** Estad
sticas del Problema
3 Fila(s)
2 Restricci
on(es)
3 Variable(s) de decisi
on
2 Variable(s) de holgura/artificiales
9 Elementos no cero
0 Variable(s) entera(s)
Densidad de la matriz de coeficientes A: 100.000%
*** Estad
sticas de INVERT
3 elementos no cero en la base
0 columnas estructurales en la base
0 vectores columna antes del "bump"
3 vectores columna despu
es del "bump"
L:
0 elementos no cero;
0 vectores ETA
U:
0 elementos no cero;
0 vectores ETA
Total:
0 elementos no en la diagonal;
0 vectores ETA
M
aximo de transformaciones ETA:
0; m
aximo n
umero de elementos ETA:
Error relativo en x:
.000000D+00
Ite. Inf. Nopt. Sum.Inf/F.Obj Entra de-a Cost.Red Sale de-a
1
0
3 -.2100000D+02
2 L->B -.40D+01
5 B->L
2
0
1 -.2600000D+02
3 L->B -.50D+01
2 B->U
3
0
2 -.2800000D+02
1 L->B -.30D+01
4 B->L

12

Paso
Pivote
.50D+01 .10D+01
.10D+01 -.10D+01
.67D+00 .30D+01

El.Eta
0
3
6

--- SOLUCION INICIAL PROGRAMA LINEAL ---------------------------------Nombre del problema: Ejelibro


No. de iteraciones:
4
Valor de la funci
on objetivo:

-28.0000000000000

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1 OBJ
2 FILA1
3 FILA2

BS-28.000000
LS 10.000000
LS 4.0000000

28.000000
.00000000
.00000000

Ninguno
Ninguno
Ninguno

Ninguno
10.000000
4.0000000

1.000
-1.000
.0000

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 X1
2 X2
3 X3

BS .66666667
LS 6.0000000
BS 2.6666667

-2.0000000
-4.0000000
-1.0000000

Tiempo total de CPU en c


alculos:

.00000000
.00000000
1.0000000

4.0000000
6.0000000
4.0000000

.000
-3.00
.000

.0002 segundos

El problema de la dieta alimenticia


El problema quiz
as mas clasico de programaci
on lineal es el denominado de la dieta alimenticia.
Se trata ver captulo 5 de elaborar una dieta diaria para un colectivo de personas de tal
forma que se suministre a cada individuo una cantidad mnima de varios ingredientes nutritivos.
En la tabla E.1 se especica un problema de este tipo. Para su resoluci
on con Bbmi, el chero
de datos es el que sigue.
NAME

Dieta

E.3 Resultados

775

ROWS
N OBJETIVO
E CAN.TOT.
G ALFALFA
G VITAMINA
G FAC.CRE.
G PESCADO
G PROTEINA
G RIBOFLA.
G NIACINA
G ACI.PAN.
G FOSFORO
G CALCIO
G SAL 1
L SAL 2
COLUMNS
CARNE

Pescado

Factor de crecimiento

Vitaminas

3,08

Alfalfa

2,63

Sal

5,80

Minerales

Soja en grano

Cantidad total
Alfalfa
Vitaminas
Factor de crecimiento
Pescado
Protenas
Riboavina
Niacina
Acido pantotenico
Fosforo
Calcio
Sal 1
Sal 2

Soja en harina

Funcion objetivo

Carne

Tabla E.1
Especicaciones numericas de un problema de dieta alimenticia como el introducido en el
captulo 5

1,13 1,00 2,26 35,72 6,00 7,00


1

1
1

1
1
0,55
0,26
0,23
0,20
0,40
0,80
0,10
0,10

0,450
0,130
0,090
0,055
0,065
0,025

OBJETIVO

5.8

0,500
0,120
0,045
0,060
0,060 0,26
0,020 3
0,9
0,9

0,17
0,70
0,14
0,14
0,02
0,15
10
10

0,25
41,6
20,4
9
0,1
0,05

0,25
2
0,4
0,4
0,05
0,05

1
0,63
0,20
0,25
0,04
0,30
0,50

= 100

1
1,1

5
43
70
45
16
14
35
19
24

776

Apendice E. El programa BBMI

CARNE
CARNE
CARNE
CARNE
CARNE
CARNE
CARNE
CARNE
CARNE
SOJA-HAR
SOJA-HAR
SOJA-HAR
SOJA-HAR
SOJA-HAR
SOJA-HAR
SOJA-HAR
SOJA-HAR
SOJA-GRA
SOJA-GRA
SOJA-GRA
SOJA-GRA
SOJA-GRA
SOJA-GRA
SOJA-GRA
SOJA-GRA
MINERAL.
MINERAL.
MINERAL.
MINERAL.
MINERAL.
MINERAL.
SAL
SAL
SAL
SAL
ALFALFA
ALFALFA
ALFALFA
ALFALFA
ALFALFA
ALFALFA
ALFALFA
ALFALFA
ALFALFA
VITAMINA
VITAMINA
VITAMINA

CAN.TOT.
PROTEINA
RIBOFLA.
NIACINA
ACI.PAN.
FOSFORO
CALCIO
SAL 1
SAL 2
OBJETIVO
CAN.TOT.
PROTEINA
RIBOFLA.
NIACINA
ACI.PAN.
FOSFORO
CALCIO
OBJETIVO
CAN.TOT.
PROTEINA
RIBOFLA.
NIACINA
ACI.PAN.
FOSFORO
CALCIO
OBJETIVO
CAN.TOT.
FOSFORO
CALCIO
SAL 1
SAL 2
OBJETIVO
CAN.TOT.
SAL 1
SAL 2
OBJETIVO
CAN.TOT.
ALFALFA
PROTEINA
RIBOFLA.
NIACINA
ACI.PAN.
FOSFORO
CALCIO
OBJETIVO
CAN.TOT.
VITAMINA

1.0
0.55
0.26
0.23
0.02
0.4
0.8
0.1
0.1
2.63
1.0
0.45
0.13
0.09
0.055
0.065
0.025
3.08
1.0
0.5
0.12
0.045
0.06
0.06
0.02
1.13
1.0
0.26
3.0
0.9
0.9
1.0
1.0
10.0
10.0
2.26
1.0
1.0
0.17
0.7
0.14
0.14
0.02
0.15
35.72
1.0
1.0

E.3 Resultados

VITAMINA
VITAMINA
VITAMINA
VITAMINA
VITAMINA
VITAMINA
FAC.CRE.
FAC.CRE.
FAC.CRE.
FAC.CRE.
FAC.CRE.
FAC.CRE.
FAC.CRE.
FAC.CRE.
FAC.CRE.
PESCADO
PESCADO
PESCADO
PESCADO
PESCADO
PESCADO
PESCADO
PESCADO
PESCADO

PROTEINA
RIBOFLA.
NIACINA
ACI.PAN.
FOSFORO
CALCIO
OBJETIVO
CAN.TOT.
FAC.CRE.
PROTEINA
RIBOFLA.
NIACINA
ACI.PAN.
FOSFORO
CALCIO
OBJETIVO
CAN.TOT.
PESCADO
PROTEINA
RIBOFLA.
NIACINA
ACI.PAN.
FOSFORO
CALCIO

0.25
41.6
20.4
9.0
0.1
0.05
6.0
1.0
1.0
0.25
2.0
0.4
0.4
0.05
0.05
7.0
1.0
1.0
0.63
0.2
0.25
0.04
0.3
0.5

CAN.TOT.
ALFALFA
VITAMINA
FAC.CRE.
PESCADO
PROTEINA
RIBOFLA.
NIACINA
ACI.PAN.
FOSFORO
CALCIO
SAL 1
SAL 2

100
1
1.1
5
5
43
70
45
16
14
35
19
24

RHS
RHS2
RHS2
RHS2
RHS2
RHS2
RHS2
RHS2
RHS2
RHS2
RHS2
RHS2
RHS2
RHS2
ENDATA

La resolucion de este problema con Bbmi dara el resultado que sigue.


Problema Dieta
*** Estad
sticas del Problema
14 Fila(s)
13 Restricci
on(es)
9 Variable(s) de decisi
on
13 Variable(s) de holgura/artificiales
72 Elementos no cero

777

778

Apendice E. El programa BBMI

0 Variable(s) entera(s)
Densidad de la matriz de coeficientes A:

57.143%

*** Estad
sticas de INVERT
14 elementos no cero en la base
0 columnas estructurales en la base
0 vectores columna antes del "bump"
14 vectores columna despu
es del "bump"
L:
0 elementos no cero;
0 vectores ETA
U:
11 elementos no cero;
11 vectores ETA
Total:
0 elementos no en la diagonal;
11 vectores ETA
M
aximo de transformaciones ETA:
11; m
aximo n
umero de elementos ETA:
Error relativo en x:
.000000D+00
Ite. Inf. Nopt. Sum.Inf/F.Obj Entra de-a Cost.Red Sale de-a
1
12
9
.3541000D+03
7 L->B -.73D+02
10 B->L
2
7
8
.8200000D+02
5 L->B -.96D+01
21 B->L
3
6
7
.6376000D+02
4 L->B -.29D+01
5 B->L
4
5
7
.3490000D+02
9 L->B -.16D+01
15 B->L
5
2
2
.6000000D+01
6 L->B -.10D+01
11 B->L
6
1
1
.5000000D+01
8 L->B -.10D+01
13 B->L
7
0
7
.6014543D+03
15 L->B -.76D+02
17 B->L
8
0
6
.5708227D+03
21 L->B -.61D+01
22 B->L
9
0
5
.5673594D+03
11 L->B -.46D+01
15 B->L
10
0
5
.5483786D+03
5 L->B -.80D+01
20 B->L
11
0
4
.4423352D+03
2 L->B -.22D+01
19 B->L
12
0
3
.4363499D+03
15 L->B -.37D+01
11 B->L
13
0
2
.4032097D+03
1 L->B -.27D+01
15 B->L
14
0
3
.4004950D+03
19 L->B -.40D+01
14 B->L
15
0
2
.3977449D+03
22 L->B -.55D+00
21 B->L
16
0
1
.3963783D+03
3 L->B -.23D+00
19 B->L

Paso
.10D+03
.19D+01
.21D+02
.61D+02
.10D+01
.50D+01
.39D+01
.50D+01
.76D+00
.24D+01
.47D+02
.16D+01
.12D+02
.68D+00
.50D+01
.59D+01

86

Pivote
.10D+01
-.10D+02
.90D-01
-.38D+00
-.10D+01
-.10D+01
.53D+02
.10D+01
.46D+00
.33D+02
.87D-01
.51D+01
.13D+00
.79D+01
.10D+01
.70D-01

El.Eta
11
20
31
41
51
62
70
80
92
103
115
127
139
150
161
172

--- SOLUCION INICIAL PROGRAMA LINEAL ---------------------------------Nombre del problema: Dieta


No. de iteraciones:
17
Valor de la funci
on objetivo:

396.378264562255

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1
2
3
4
5
6
7
8
9
10
11
12
13
14

OBJETIVO
CAN.TOT.
ALFALFA
VITAMINA
FAC.CRE.
PESCADO
PROTEINA
RIBOFLA.
NIACINA
ACI.PAN.
FOSFORO
CALCIO
SAL 1
SAL 2

BS
EQ
LI
BS
LI
LI
LI
BS
LI
BS
LI
LI
LI
BS

396.37826
100.00000
1.0000000
1.5888503
5.0000000
5.0000000
43.000000
90.253400
45.000000
20.527492
14.000000
35.000000
19.000000
19.000000

-396.37826
.00000000
.00000000
.48885029
.00000000
.00000000
.00000000
20.253400
.00000000
4.5274915
.00000000
.00000000
.00000000
5.0000000

Ninguno
100.00000
1.0000000
1.1000000
5.0000000
5.0000000
43.000000
70.000000
45.000000
16.000000
14.000000
35.000000
19.000000
Ninguno

Ninguno
100.00000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
24.000000

1.000
-2.703
2.657
.0000
5.057
.9198
10.98
.0000
1.731
.0000
3.319
.8790
.3703
.1110E-15

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1
2
3
4

CARNE
SOJA-HAR
SOJA-GRA
MINERAL.

BS
BS
BS
BS

15.967949
58.430072
5.9137668
5.8890572

5.8000000
2.6300000
3.0800000
1.1300000

.00000000
.00000000
.00000000
.00000000

Ninguno
Ninguno
Ninguno
Ninguno

.000
.000
.000
.000

E.3 Resultados

5
6
7
8
9

SAL
ALFALFA
VITAMINA
FAC.CRE.
PESCADO

BS
BS
BS
BS
BS

1.2103054
1.0000000
1.5888503
5.0000000
5.0000000

1.0000000
2.2600000
35.720000
6.0000000
7.0000000

Tiempo total de CPU en c


alculos:

E.3.2

.00000000
.00000000
.00000000
.00000000
.00000000

Ninguno
Ninguno
Ninguno
Ninguno
Ninguno

.000
.000
.000
.000
.000

.0016 segundos

Programas enteros puros

Como ejemplo de programa entero puro, resolvamos el del ejemplo 12.1 de la p


agina 641:
max.
s. a

7x1 + 2x2
x1 + 2x2 4
5x1 + x2 20
2x1 2x2 7
2.
x Z+

El chero de datos de este ejemplo es el que se detalla a continuacion.


MAXIMIZAR
NAME
ROWS
N OBJ
L ROW1
L ROW2
L ROW3
COLUMNS
INT
COL1
COL1
COL2
COL2
RHS
RHS1
RHS1
RHS1
ENDATA
El resultado obtenido

Demos-bb

OBJ
ROW2
OBJ
ROW2

7
5
2
1

ROW1
ROW2
ROW3

4
20
-7

con Bbmi es el que sigue.

Problema Demos-bb
*** Estad
sticas del Problema
4 Fila(s)
3 Restricci
on(es)
2 Variable(s) de decisi
on
3 Variable(s) de holgura/artificiales
8 Elementos no cero
2 Variable(s) entera(s)
Densidad de la matriz de coeficientes A: 100.000%
*** Estad
sticas de INVERT

ROW1
ROW3
ROW1
ROW3

-1
-2
2
-2

779

780

Apendice E. El programa BBMI

4
0
0
4

elementos no cero en la base


columnas estructurales en la base
vectores columna antes del "bump"
vectores columna despu
es del "bump"
L:
0 elementos no cero;
0 vectores ETA
U:
0 elementos no cero;
0 vectores ETA
Total:
0 elementos no en la diagonal;
0 vectores ETA
M
aximo de transformaciones ETA:
0; m
aximo n
umero de elementos ETA:
Error relativo en x:
.000000D+00
Ite. Inf. Nopt. Sum.Inf/F.Obj Entra de-a Cost.Red Sale de-a
1
1
2
.7000000D+01
1 L->B .20D+01
5 B->L
2
0
1
.2800000D+02
5 L->B .35D+01
4 B->L
3
0
1
.3018182D+02
2 L->B .60D+00
3 B->L

12

Paso
Pivote
.35D+01 -.20D+01
.10D+01 .25D+01
.36D+01 .22D+01

El.Eta
0
4
8

--- SOLUCION INICIAL PROGRAMA LINEAL ---------------------------------Nombre del problema: Demos-bb


No. de iteraciones:
4
Valor de la funci
on objetivo:

30.1818181818182

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1
2
3
4

OBJ
ROW1
ROW2
ROW3

BS 30.181818
LS 4.0000000
LS 20.000000
BS-13.818182

-30.181818
.00000000
.00000000
6.8181818

Ninguno
Ninguno
Ninguno
Ninguno

Ninguno
4.0000000
20.000000
-7.0000000

1.000
.2727
1.455
.2220E-15

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 COL1
2 COL2

BS 3.2727273
BS 3.6363636

7.0000000
2.0000000

* Nueva soluci
on entera; z(PE)=

.00000000
.00000000

Ninguno
Ninguno

28.00000; Tiempo desde


ultima:

.000
.000
.0595 seg.

--- SOLUCION ENTERA OPTIMA -----------------------Nombre del problema: Demos-bb


No. de iteraciones:
6
Valor de la funci
on objetivo:

28.0000000000000

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1
2
3
4

OBJ
ROW1
ROW2
ROW3

BS 28.000000
BS-4.0000000
LS 20.000000
BS-8.0000000

-28.000000
8.0000000
.00000000
1.0000000

Ninguno
Ninguno
Ninguno
Ninguno

Ninguno
4.0000000
20.000000
-7.0000000

1.000
-.2017E-16
2.000
.8882E-15

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 COL1
2 COL2

LIB 4.0000000
BS .00000000

7.0000000
2.0000000

Tiempo total de CPU en c


alculos:

4.0000000
.00000000

.0591 segundos

Ninguno
Ninguno

-3.00
.000

E.3 Resultados

781

Observese que solo se imprime la solucion inicial de la relajaci


on inicial y la optima entera. Si
quisieramos que el programa facilitase todo el proceso de optimizacion habra que confeccionar
el chero de datos como sigue.
MAXIMIZAR
PROCESO ITERATIVO
NAME
Demos-b1
ROWS
N OBJ
L ROW1
L ROW2
L ROW3
COLUMNS
INT
COL1
OBJ
7
ROW1
COL1
ROW2
5
ROW3
COL2
OBJ
2
ROW1
COL2
ROW2
1
ROW3
RHS
RHS1
ROW1
4
RHS1
ROW2
20
RHS1
ROW3
-7
ENDATA
El resultado obtenido con Bbmi en este caso es el que sigue.

-1
-2
2
-2

Problema Demos-b1
*** Estad
sticas del Problema
4 Fila(s)
3 Restricci
on(es)
2 Variable(s) de decisi
on
3 Variable(s) de holgura/artificiales
8 Elementos no cero
2 Variable(s) entera(s)
Densidad de la matriz de coeficientes A: 100.000%
*** Estad
sticas de INVERT
4 elementos no cero en la base
0 columnas estructurales en la base
0 vectores columna antes del "bump"
4 vectores columna despu
es del "bump"
L:
0 elementos no cero;
0 vectores ETA
U:
0 elementos no cero;
0 vectores ETA
Total:
0 elementos no en la diagonal;
0 vectores ETA
M
aximo de transformaciones ETA:
0; m
aximo n
umero de elementos ETA:
Error relativo en x:
.000000D+00
Ite. Inf. Nopt. Sum.Inf/F.Obj Entra de-a Cost.Red Sale de-a
1
1
2
.7000000D+01
1 L->B .20D+01
5 B->L
2
0
1
.2800000D+02
5 L->B .35D+01
4 B->L
3
0
1
.3018182D+02
2 L->B .60D+00
3 B->L
--- SOLUCION INICIAL PROGRAMA LINEAL ---------------------------------Nombre del problema: Demos-b1

12

Paso
Pivote
.35D+01 -.20D+01
.10D+01 .25D+01
.36D+01 .22D+01

El.Eta
0
4
8

782

Apendice E. El programa BBMI

No. de iteraciones:
4
Valor de la funci
on objetivo:

30.1818181818182

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1
2
3
4

OBJ
ROW1
ROW2
ROW3

BS 30.181818
LS 4.0000000
LS 20.000000
BS-13.818182

-30.181818
.00000000
.00000000
6.8181818

Ninguno
Ninguno
Ninguno
Ninguno

Ninguno
4.0000000
20.000000
-7.0000000

1.000
.2727
1.455
.2220E-15

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 COL1
2 COL2
Variable
Separaci
on
2
1

BS 3.2727273
BS 3.6363636

Nivel
1
2

7.0000000
2.0000000

Direcci
on
X<
3
X>
4

Nudos
en Lista
1
2

* Nueva soluci
on entera; z(PE)=

.00000000
.00000000
Variables
Ent. No Ent.
2
1

Ninguno
Ninguno

Iteraci
on
5 D
6 D

28.00000; Tiempo desde


ultima:

.000
.000
Valor
Func. Obj.
2.9800000D+01
2.8000000D+01
.0019 seg.

--- SOLUCION ENTERA ----------------Tiempo desde


ultima:
.0019 seg.
Nombre del problema: Demos-b1
No. de iteraciones:
6
Valor de la funci
on objetivo:

28.0000000000000

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1
2
3
4

OBJ
ROW1
ROW2
ROW3

BS 28.000000
BS-4.0000000
LS 20.000000
BS-8.0000000

-28.000000
8.0000000
.00000000
1.0000000

Ninguno
Ninguno
Ninguno
Ninguno

Ninguno
4.0000000
20.000000
-7.0000000

1.000
-.2017E-16
2.000
.8882E-15

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 COL1
2 COL2
Variable
Separaci
on
1
2

LIB 4.0000000
7.0000000
BS .88817842E-15 2.0000000

Nivel
2
1

Direcci
on
X<
3
X>
4

4.0000000
.00000000

*** FILAS

-3.00
.000

Nudos
Variables
Valor
en Lista Ent. No Ent. Iteraci
on
Func. Obj.
1
-Nudo desechado en BKTRAK- 2.7000000D+01
0
-Nudo desechado en BKTRAK--1.0000000D+20

--- SOLUCION ENTERA OPTIMA -----------------------Nombre del problema: Demos-b1


No. de iteraciones:
6
Valor de la funci
on objetivo:

Ninguno
Ninguno

28.0000000000000

E.3 Resultados

783

No. ..Fila.. en ....Valor.... ...Holgura... .L


.Inferior. .L
.Superior. Val.Dual.
1
2
3
4

OBJ
ROW1
ROW2
ROW3

BS 28.000000
BS-4.0000000
LS 20.000000
BS-8.0000000

-28.000000
8.0000000
.00000000
1.0000000

Ninguno
Ninguno
Ninguno
Ninguno

Ninguno
4.0000000
20.000000
-7.0000000

1.000
-.2017E-16
2.000
.8882E-15

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1 COL1
2 COL2

LIB 4.0000000
BS .00000000

7.0000000
2.0000000

Tiempo total de CPU en c


alculos:

E.3.3

4.0000000
.00000000

Ninguno
Ninguno

-3.00
.000

.0489 segundos

Programas enteros mixtos

Como ejemplo de programa entero mixto resolveremos uno de 35 variables. Las 28 primeras
son continuas; de la 29 a la 35 son enteras, estando restringidas a tomar s
olo valores 0 o 1.
La estructura del problema por lo que se reere a los coecientes distintos de cero es la de la
gura E.1. El chero de datos de este ejemplo es el que sigue.
MAXIMIZAR
NAME
ROWS
N OBJ
E E1C1
E E1C2
G E1A1
G E1A2
G E1T1
G E1T2
E E2C1
E E2C2
G E2A1
G E2A2
G E2T1
G E2T2
E E3C1
E E3C2
G E3A1
G E3A2
G E3J1
G E3J2
L E3D1
L E3D2
G E3D3
L E3JP
G E3T1
G E3T2
E E4C1
E E4C2
G E4A1
G E4A2
G E4J1
G E4J2
L E4D1
L E4D2
G E4D3
L E4JP
G E4T1
G E4T2
E E5C1
E E5C2

P5b

784

Apendice E. El programa BBMI

*
*
*
Max.
*
s. a **
***
*
*
* *
* *
**
*
***
* *
*
* *
* *
**
*
***
* **
*
*
*
*
*
*
*
*
*

*
*

*
xi 0

**
*
*
*
*
*
*
*
*

*
**
*
***
* **
*
*
*
*
*
*
*
*
*

*
*

**
*
*
*
*
*
*
**
*
*

*
**
*
***
* *
*
* *
* *
*
*
* *

**
*
*
*
*
*
*
**
*
*
*
*
*
*

=
=

=
=

=
=

=
=

=
=

=
=

0
0
0
0
-256
-256
0
0
0
0
-125
-125
0
0
0
0
-45
-40
0
125
-125
0
-256
-256
0
0
0
0
0
-40
0
65
-65
0
-189
-189
0
0
0
0
-256
-256
0
0
1

i = 1, . . . , 35; x29 , . . . , x35 enteras.

Figura E.1
Estructura de elementos distintos de cero de un programa entero mixto para prueba de Bbmi

E.3 Resultados

G E5A1
G E5A2
G E5T1
G E5T2
E BIF1
E BIF2
L BIF3
COLUMNS
TO
DTC1
DTC1
TA1
TA1
TA2
A1
T1
T1
DTC2
DTC2
TB1
TB2
A2
T2
T2
DTC3
DTC3
DTC3
DTC3
TD1
TD1
TD2
A3
D3
D3
T3
T3
DTC4
DTC4
DTC4
DTC4
TE1
TE2
A4
D4
D4
T4
T4
DTC5
DTC5
TF1
TF2
TF2
A5
T5
T5
INT
I1
I1
I1
I2
I2
I3
I3
I3
J3
J3
J3
J3
I4
I4

E1C1
E1C1
E1A1
E1C2
BIF1
E1C2
OBJ
E1C1
E2C1
E2C1
E2A1
E2C2
E2C2
OBJ
E2C1
E3C1
E3C1
E3A1
E3J1
E3D2
E3C2
BIF2
E3C2
OBJ
E3A1
E3D2
E3C1
E4C1
E4C1
E4A1
E4J1
E4D2
E4C2
E4C2
OBJ
E4A1
E4D2
E4C1
E5C1
E5C1
E5A1
E5C2
E5C2
BIF1
OBJ
OBJ
E5T1

1
1
-0.0775
1
1
-1
-0.75
-1
1
1
-0.0823
1
-1
-0.75
-1
1
1
-0.103
1
-1
1
1
-1
-0.75
0.035
1
-1
1
1
-0.090
1
-1
1
-1
-0.75
0.031
1
-1
1
1
-0.088
1
-1
-1
-0.75
0.962
-1.

E1T2
E1C2
E1A2
E1T1

-1
0.53
-1
1

E1T2
E1A1
E1T1
E2T2
E2C2
E2A2
E2T1
E2T2
E2A1
E2T1
E3T2
E3C2
E3A2
E3J2
E3D3
E3T1

1
1
-1
-1
2.024
-1
1
1
1
-1
-1
0.53
-1
-1
-1
1

E3T2
E3A1
E3D1
E3D3
E3T1
E4T2
E4C2
E4A2
E4J2
E4D3
E4T1
E4T2
E4A1
E4D1
E4D3
E4T1
E5T2
E5C2
E5A2
E5T1
E5T2
BIF2
E5A1
E5C1

1
1
1
1
-1
-1
0.291
-1
-1
-1
1
1
1
1
1
-1
-1
0.438
-1
1
1
-1
1
-1

E1A1
E1T1
BIF3
E2A1
E2T1
E3A1
E3JP
E3T2
E3A1
E3J2
E3D2
E3JP
E4A1
E4JP

-3.26
-272
1
-3.469
-141
-1.425
-1
-272
-1.425
85
125
1
-1.255
-1

E1A2
E1T2

125
-272

E2A2
E2T2
E3A2
E3T1
BIF3
E3J1
E3D1
E3D3

125
-141
125
-272
1
-85
-125
-125

E4A2
E4T1

64
-205

785

786

Apendice E. El programa BBMI

I4
J4
J4
J4
J4
I5
I5

E4T2
E4A1
E4J2
E4D2
E4JP
E5A1
E5T1

-205
-1.255
40
65
1
-3.7
-272

RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
RHS
BOUNDS
FX BOUND
LO BOUND
FX BOUND
LO BOUND
LO BOUND
FX BOUND
LO BOUND
FX BOUND
UP BOUND
UP BOUND
UP BOUND
UP BOUND
UP BOUND
UP BOUND
UP BOUND
ENDATA

E1T1
E1T2
E2T1
E2T2
E3J1
E3J2
E3D2
E3D3
E3T1
E3T2
E4J2
E4D2
E4D3
E4T1
E4T2
E5T1
E5T2
BIF3

-256
-256
-125
-125
-45
-40
125
-125
-256
-256
-40
65
-65
-189
-189
-256
-256
1

TO
TA2
TB1
TB2
TD2
TE1
TE2
TF1
I1
I2
I3
I4
I5
J3
J4

93.3
182
218
120
182
282
120
349
1
1
1
1
1
1
1

E4J1
E4D1
E4D3

-40
-65
-65

E5A2
E5T2

125
-272

RHS

Los resultados obtenidos (s


olo soluci
on inicial de la relajaci
on lineal y entera optima) son los
que siguen.
Problema P5b
*** Estad
sticas del Problema
46 Fila(s)
45 Restricci
on(es)
35 Variable(s) de decisi
on
45 Variable(s) de holgura/artificiales
129 Elementos no cero
7 Variable(s) entera(s)
Densidad de la matriz de coeficientes A:

8.012%

*** Estad
sticas de INVERT
46 elementos no cero en la base
0 columnas estructurales en la base
0 vectores columna antes del "bump"
46 vectores columna despu
es del "bump"
L:
0 elementos no cero;
0 vectores ETA
U:
26 elementos no cero;
26 vectores ETA
Total:
0 elementos no en la diagonal;
26 vectores ETA
M
aximo de transformaciones ETA:
26; m
aximo n
umero de elementos ETA:
Error relativo en x:
.000000D+00

175

E.3 Resultados

Ite. Inf. Nopt. Sum.Inf/F.Obj Entra de-a Cost.Red Sale de-a


1
6
7
.1066300D+04
3 L->B .10D+01
78 B->L
2
6
6
.1066300D+04
26 L->B .20D+01
79 B->U
3
6
5
.1066300D+04
13 L->B .30D+01
37 B->L
4
4
4
.5203000D+03
4 L->B .10D+01
49 B->L
5
4
4
.5203000D+03
6 L->B .10D+01
42 B->L
6
4
4
.5203000D+03
9 L->B .10D+01
43 B->U
7
3
3
.4223000D+03
11 L->B .10D+01
48 B->L
8
3
3
.4223000D+03
14 L->B .10D+01
73 B->U
9
2
2
.2553000D+03
17 L->B .10D+01
60 B->L
10
2
2
.2553000D+03
20 L->B .10D+01
61 B->U
11
1
1
.9330000D+02
23 L->B .10D+01
72 B->L
12
1
1
.9330000D+02
28 L->B .10D+01
36 B->U
13
0
5
.8975460D+02
2 L->B .96D+00
39 B->L
14
0
5
.8975460D+02
29 L->B .12D+03
38 B->L
15
0
5
.2002940D+03
5 L->B .85D+01
29 B->U
16
0
4
.2002940D+03
7 L->B .96D+00
45 B->L
17
0
4
.2002940D+03
30 L->B .12D+03
44 B->L
18
0
4
.2518301D+03
10 L->B .80D+01
46 B->L
19
0
3
.2518301D+03
12 L->B .96D+00
51 B->L
20
0
3
.2518301D+03
31 L->B .12D+03
50 B->L
21
0
4
.2518301D+03
15 L->B .77D+01
80 B->L
22
0
4
.2680367D+03
29 U->B -.51D+02
53 B->L
23
0
4
.2815437D+03
32 L->B .33D+02
56 B->L
24
0
3
.2815437D+03
18 L->B .96D+00
63 B->L
25
0
3
.2815437D+03
33 L->B .62D+02
62 B->L
26
0
4
.3148538D+03
21 L->B .80D+01
70 B->L
27
0
3
.3148538D+03
24 L->B .96D+00
75 B->L
28
0
3
.3148538D+03
35 L->B .12D+03
74 B->L
29
0
3
.3850864D+03
27 L->B .74D+01
76 B->L
30
0
2
.3982691D+03
16 L->B .11D+00
55 B->L
31
0
1
.3982691D+03
22 L->B .23D-01
66 B->L
32
0
1
.3985560D+03
34 L->B .57D+00
69 B->L

Paso
.00D+00
.00D+00
.18D+03
.00D+00
.00D+00
.98D+02
.00D+00
.17D+03
.00D+00
.16D+03
.00D+00
.93D+02
.00D+00
.00D+00
.13D+02
.00D+00
.00D+00
.64D+01
.00D+00
.00D+00
.00D+00
.32D+00
.40D+00
.00D+00
.00D+00
.41D+01
.00D+00
.00D+00
.95D+01
.13D+03
.00D+00
.50D+00

Pivote
.10D+01
-.10D+01
.10D+01
.10D+01
.10D+01
-.10D+01
.10D+01
-.10D+01
.10D+01
-.10D+01
.10D+01
-.10D+01
.10D+01
.13D+02
-.77D-01
.10D+01
.14D+02
.19D+02
.10D+01
.14D+02
.70D-01
-.13D+03
.21D+03
.10D+01
.70D+01
.38D+02
.10D+01
.15D+02
.27D+02
.12D+01
.10D+01
.10D+01

El.Eta
26
29
35
43
52
56
58
65
75
85
87
100
115
134
154
174
190
206
222
239
258
277
308
339
353
368
383
398
413
428
472
477

--- SOLUCION INICIAL PROGRAMA LINEAL ---------------------------------Nombre del problema: P5b


No. de iteraciones:
33
Valor de la funci
on objetivo:

398.555969357191

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

OBJ
E1C1
E1C2
E1A1
E1A2
E1T1
E1T2
E2C1
E2C2
E2A1
E2A2
E2T1
E2T2
E3C1
E3C2
E3A1
E3A2
E3J1
E3J2
E3D1
E3D2
E3D3

BS 398.55597
-398.55597
Ninguno
EQ .00000000
.00000000
.00000000
EQ .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
BS 288.40591
544.40591
-256.00000
BS 288.40591
544.40591
-256.00000
EQ .00000000
.00000000
.00000000
EQ .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
LI-125.00000
.00000000
-125.00000
BS 229.83684
354.83684
-125.00000
EQ .00000000
.00000000
.00000000
EQ .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
BS 40.000000
85.000000
-45.000000
LI-40.000000
.00000000
-40.000000
BSD-.18735014E-15 .18735014E-15
Ninguno
LS 125.00000
.00000000
Ninguno
LI-125.00000
.00000000
-125.00000

Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
125.00000
Ninguno

1.000
-.3255
.0000
-.7500
-.2674
.0000
.0000
-.3255
.0000
-.7500
-.2638
-.2154
.0000
-.5409
.0000
-.7500
-.2564
.0000
-.2335
.0000
.8825E-01
-.6200E-01

787

788

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

Apendice E. El programa BBMI

E3JP
E3T1
E3T2
E4C1
E4C2
E4A1
E4A2
E4J1
E4J2
E4D1
E4D2
E4D3
E4JP
E4T1
E4T2
E5C1
E5C2
E5A1
E5A2
E5T1
E5T2
BIF1
BIF2
BIF3

BSD-.99990545E-16
BS-225.93431
BS-34.684311
EQ .00000000
EQ .00000000
LI .00000000
LI .00000000
BS 12.076708
BS-12.076708
LS .00000000
BS 33.210948
BS-32.204556
LS .00000000
LI-189.00000
BS-147.42392
EQ .00000000
EQ .00000000
LI .00000000
LI .00000000
LI-256.00000
BS-148.62305
EQ .00000000
EQ .00000000
LS 1.0000000

.99990545E-16
Ninguno
30.065689
-256.00000
221.31569
-256.00000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
12.076708
.00000000
27.923292
-40.000000
.00000000
Ninguno
31.789052
Ninguno
32.795444
-65.000000
.00000000
Ninguno
.00000000
-189.00000
41.576082
-189.00000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
-256.00000
107.37695
-256.00000
.00000000
.00000000
.00000000
.00000000
.00000000
Ninguno

.00000000
Ninguno
Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
65.000000
Ninguno
.00000000
Ninguno
Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
.00000000
1.0000000

.0000
.0000
.0000
-.5409
.0000
-.7500
-.4734
.0000
.0000
.2325E-01
.0000
.0000
.5700
-.1460
.0000
-.6869
.0000
-.7500
-.6209
-.2751
.0000
.0000
.0000
30.98

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

TO
DTC1
TA1
TA2
A1
T1
DTC2
TB1
TB2
A2
T2
DTC3
TD1
TD2
A3
D3
T3
DTC4
TE1
TE2
A4
D4
T4
DTC5
TF1
TF2
A5
T5
I1
I2
I3
J3
I4
J4
I5

FX 93.300000
.00000000
BS-.67515438E-14 .00000000
BS 381.70591
.00000000
BS 381.70591
.00000000
BS-.12689502E-14-.75000000
BS 93.300000
.00000000
BS 117.34023
.00000000
FX 218.00000
.00000000
BS 455.49662
.00000000
BS 12.913527
-.75000000
BS 210.64023
.00000000
BS 125.00000
.00000000
BS 381.70591
.00000000
BS 447.95591
.00000000
BS 11.350000
-.75000000
BS 125.00000
.00000000
BS 335.64023
.00000000
BS 32.204556
.00000000
FX 282.00000
.00000000
BS 291.37153
.00000000
BS 3.1474922
-.75000000
BS 32.707752
.00000000
BS 367.84478
.00000000
BS 74.671039
.00000000
FX 349.00000
.00000000
BS 381.70591
.00000000
BS 8.7813141
-.75000000
BS 442.51582
.96200000
BS-.22730299E-15 .00000000
BS .93872180
.00000000
BS 1.0000000
.00000000
BS 1.0000000
.00000000
BS .50319619
.00000000
BS .50319619
.00000000
BS .59736831
.00000000

93.300000
.00000000
.00000000
182.00000
.00000000
.00000000
.00000000
218.00000
120.00000
.00000000
.00000000
.00000000
.00000000
182.00000
.00000000
.00000000
.00000000
.00000000
282.00000
120.00000
.00000000
.00000000
.00000000
.00000000
349.00000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000

93.300000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
218.00000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
282.00000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
349.00000
Ninguno
Ninguno
Ninguno
1.0000000
1.0000000
1.0000000
1.0000000
1.0000000
1.0000000
1.0000000

.326
.000
.000
.000
.000
.000
.000
.215
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.146
.000
.000
.000
.000
.000
.275
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000

* Nueva soluci
on entera; z(PE)=

296.75024; Tiempo desde


ultima:

.0598 seg.

* Nueva soluci
on entera; z(PE)=

301.48830; Tiempo desde


ultima:

.0512 seg.

E.3 Resultados

--- SOLUCION ENTERA OPTIMA -----------------------Nombre del problema: P5b


No. de iteraciones:
54
Valor de la funci
on objetivo:

301.488300000000

*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

OBJ
E1C1
E1C2
E1A1
E1A2
E1T1
E1T2
E2C1
E2C2
E2A1
E2A2
E2T1
E2T2
E3C1
E3C2
E3A1
E3A2
E3J1
E3J2
E3D1
E3D2
E3D3
E3JP
E3T1
E3T2
E4C1
E4C2
E4A1
E4A2
E4J1
E4J2
E4D1
E4D2
E4D3
E4JP
E4T1
E4T2
E5C1
E5C2
E5A1
E5A2
E5T1
E5T2
BIF1
BIF2
BIF3

BS 301.48830
-301.48830
Ninguno
EQ .00000000
.00000000
.00000000
EQ .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
BS 305.93860
561.93860
-256.00000
BS 305.93860
561.93860
-256.00000
EQ .00000000
.00000000
.00000000
EQ .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
BS 124.70000
249.70000
-125.00000
BS 124.70000
249.70000
-125.00000
EQ .00000000
.00000000
.00000000
EQ .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
BSD-.71054274E-14-.71054274E-14 .00000000
BS 40.000000
85.000000
-45.000000
BSD-40.000000
-.22030988E-14-40.000000
LS .00000000
.00000000
Ninguno
LS 125.00000
.00000000
Ninguno
BSD-125.00000
-.71054274E-14-125.00000
LS .00000000
.00000000
Ninguno
BS-91.061400
164.93860
-256.00000
BS 100.18860
356.18860
-256.00000
EQ .00000000
.00000000
.00000000
EQ .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
BSD .00000000
.00000000
.00000000
BSD .00000000
.00000000
.00000000
BS .00000000
40.000000
-40.000000
LS .00000000
.00000000
Ninguno
BS .00000000
65.000000
Ninguno
BS .00000000
65.000000
-65.000000
LS .00000000
.00000000
Ninguno
BS 63.700000
252.70000
-189.00000
BS 63.700000
252.70000
-189.00000
EQ .00000000
.00000000
.00000000
EQ .00000000
.00000000
.00000000
LI .00000000
.00000000
.00000000
BS 10.300000
10.300000
.00000000
LI-256.00000
.00000000
-256.00000
BS-91.061400
164.93860
-256.00000
EQ .00000000
.00000000
.00000000
EQ .00000000
.00000000
.00000000
BSD 1.0000000
.24231919E-16
Ninguno

Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
125.00000
Ninguno
.00000000
Ninguno
Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
65.000000
Ninguno
.00000000
Ninguno
Ninguno
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
.00000000
.00000000
1.0000000

1.000
-.6600E-01
.0000
-.7500
-.1956E-01
.0000
.0000
-.6600E-01
.0000
-.7500
-.2081E-01
.0000
.0000
-.6600E-01
.0000
-.7500
.0000
.0000
.0000
.1500E-01
.1125E-01
.0000
1.069
.0000
.0000
-.6600E-01
.0000
-.7500
.2168E-18
.0000
.0000
.2325E-01
.0000
.0000
.5700
.0000
.0000
-.6600E-01
.0000
-.7500
-.2082E-16
-.8960
.0000
.0000
.0000
.0000

*** COLUMNAS
No. .Columna en ....Valor.... Coste en F.O. .L
.Inferior. .L
.Superior. Cos.Red.
1
2
3
4
5

TO
DTC1
TA1
TA2
A1

FX
LI
BS
BS
BS

93.300000
.00000000
399.23860
399.23860
.00000000

.00000000
.00000000
.00000000
.00000000
-.75000000

93.300000
.00000000
.00000000
182.00000
.00000000

93.300000
Ninguno
Ninguno
Ninguno
Ninguno

.000
-.117E-01
.000
.000
.000

789

790

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

Apendice E. El programa BBMI

T1
DTC2
TB1
TB2
A2
T2
DTC3
TD1
TD2
A3
D3
T3
DTC4
TE1
TE2
A4
D4
T4
DTC5
TF1
TF2
A5
T5
I1
I2
I3
J3
I4
J4
I5

BS 93.300000
.00000000
LI .00000000
.00000000
FX 218.00000
.00000000
BS 218.00000
.00000000
BS .00000000
-.75000000
BS 93.300000
.00000000
BS 125.00000
.00000000
BS 399.23860
.00000000
BS 465.48860
.00000000
BS 11.350000
-.75000000
BS 125.00000
.00000000
BS 218.30000
.00000000
LI .00000000
.00000000
FX 282.00000
.00000000
BS 282.00000
.00000000
BS-.29869770E-16-.75000000
BS .00000000
.00000000
BS 218.30000
.00000000
BS 114.70000
.00000000
FX 349.00000
.00000000
BS 399.23860
.00000000
BS 13.793600
-.75000000
BS 333.00000
.96200000
BS .00000000
.00000000
BS .00000000
.00000000
BS 1.0000000
.00000000
EQB 1.0000000
.00000000
LI .00000000
.00000000
BS .00000000
.00000000
EQB 1.0000000
.00000000

Tiempo total de CPU en c


alculos:

.00000000
.00000000
218.00000
120.00000
.00000000
.00000000
.00000000
.00000000
182.00000
.00000000
.00000000
.00000000
.00000000
282.00000
120.00000
.00000000
.00000000
.00000000
.00000000
349.00000
.00000000
.00000000
.00000000
.00000000
.00000000
.00000000
1.0000000
.00000000
.00000000
1.0000000

.1095 segundos

Ninguno
Ninguno
218.00000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
282.00000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
349.00000
Ninguno
Ninguno
Ninguno
1.0000000
1.0000000
1.0000000
1.0000000
1.0000000
1.0000000
1.0000000

.000
-.165E-01
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
-.150E-02
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
.000
-.371
.000
.000

E.4 Listado de BBMI

791

E.4 Listado de BBMI

PROGRAM Bbmi
C******************************************************************
C******************************************************************
C
C
BBMI resuelve problemas de programaci
on lineal,
C
entera y programaci
on mixta lineal-entera.
C
C
C
E S T R U C T U R A
d e
S U B R U T I N A S
C
C
------------------------------------------------------C
| Nivel0 | Nivel1 | Nivel2 | Nivel3 | Nivel4 | Nivel5 |
C
------------------------------------------------------C
|
|
|
|
|
|
|
C
|
|
C
|
/ PARAME
|
C
|
| INPUT
|
C
|
|
|
C
|
|
/
/ UNPACK
|
C
|
|
| INVERT < WRETA
|
C
|
|
|
\ FTRAN
|
C
|
|
|
|
C
|
| NORMAL < FORMC
|
C
|
|
| BTRAN
|
C
|
|
| PRICE
|
C
|
|
| UNPACK
|
C
|
|
| FTRAN
|
C
|
|
| CHUZR
|
C
|
|
\ WRETA
|
C
|
|
|
C
|
| WRILPR
|
C
|
|
|
C
|
|
/
| BTRAN
|
C
|
|
| TESTX <
|
C
|
|
|
| WRILPR
|
C
|
|
|
|
C
|
|
|
| UNPACK
|
C
|
|
| PENLTS < FTRAN
|
C
|
|
|
| BRANCH
|
C
|
|
|
|
C
|
|
|
/
| UNPACK
|
C
|
|
|
| BKTRAK <
|
C
|
|
|
|
| FTRAN
|
C
|
|
|
|
|
C
| BBMI
<
|
|
/
/ UNPACK |
C
|
|
|
|
| INVERT < WRETA |
C
|
|
|
|
|
\ FTRAN |
C
|
|
|
|
|
|
C
|
|
| CYCLE < NORMAL < FORMC
|
C
|
|
|
|
| BTRAN
|
C
|
| BANDB <
|
| PRICE
|
C
|
|
|
|
| UNPACK
|
C
|
|
|
|
| FTRAN
|
C
|
|
|
|
| CHUZR
|
C
|
|
|
|
\ WRETA
|
C
|
|
|
|
|
C
|
|
|
|
| BTRAN
|
C
|
|
|
| TESTX <
|
C
|
|
|
\
| WRILPR
|
C
|
|
|
|
C
|
|
|
| UNPACK
|
C
|
|
| DCHUZC <
|
C
|
|
|
| FTRAN
|
C
|
|
|
|
C
|
|
| CYCLE
|
C
|
|
| INVERT
|
C
|
|
| WRETA
|
C
|
|
\ DCHUZR
|
C
|
|
|
C
|
\ WRILPR
|
C
|
|
C
|
|
|
|
|
|
|
C
------------------------------------------------------C
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),

793

yen(1000)

C
call parame
C
C******************************************************************
C
Entrada datos del problema a resolver.
C******************************************************************
call input
call cputim (time1,cput)
C
C******************************************************************
C
Se resuelve relajaci
on lineal inicial y escriben resultados.
C******************************************************************
call normal
call wrilpr (iuno)
if (nvare.le.ncol.and.qstat.ne.INFEAS) then
C
C******************************************************************
C
Si el programa tiene variables enteras, se resuelve aplicando
C
estrategia Branch-and-Bound y se escriben resultados.
C******************************************************************
call bandb
call wrilpr (3)
C
endif
call cputim (time2,cput)
write (lo,9000) cput-time1
C
9000 format(/Tiempo total de CPU en c
alculos:,f9.4, segundos)
C
C
Fin de -BBMIend
subroutine bandb
C
C
Rutina que dirige el proceso de optimizaci
on del programa
C
entero o mixto mediante un procedimiento Branch-and-Bound
C
con relajaciones lineales.
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
C
if (itcnt.ge.itrfrq) return
listl = 0
listsa = 0
idepth = 0
C
C******************************************************************
C
Se comprueba si la soluci
on inicial PL es entera.
C******************************************************************
call testx
if (qstat.eq.ENTERA) return
inibb = 1
C
C******************************************************************
C
Nudo analiz
andose no rechazado; calcular penalizaciones por
C
separar una u otra variable.
C
Las nuevas ramas del
arbol se generan en BRANCH a la que
C
llama PENLTS.
C
Si en PENLTS se rechaza el nudo (IDIR=0), buscar en BKTRAK
C
el siguiente a analizar.
C
Si no se desecha, utilizar el m
etodo dual del simplex para
C
reoptimizar.
C******************************************************************
150 continue
call penlts (irowpd,idir,iptypd)
if (idir.eq.0) then
if (logite.eq.1) write (logu,550)
call cycle (*500,*150)
endif
icolit = jh(irowpd)
if (icolit.le.nrow) then
icolit = icolit+ncol-nrow-1
else
icolit = icolit-nrow

794

Apendice E. El programa BBMI

endif
qupdo =

if (idir.eq.1) then
iax = ipart(irowpd)
write (qupdo,10) X<,iax
else
iax = ipart(irowpd)+1
write (qupdo,10) X>,iax
endif
C
C******************************************************************
C
Sale de la base la variable IROWPD; determinar la columna de
C
pivotaci
on JCOLPD y adaptar la soluci
on.
C
Si no es posible (JCOLPD=0), existe degeneraci
on dual.
C******************************************************************
250 continue
call dchuzc (jcolpd,irowpd,npivod,iptypd,thetad,ivout)
itcnt = itcnt+1
itsinv = itsinv+1
if (jcolpd.eq.0) then
idepth = idepth+1
if (logite.eq.1) write (logu,600) icolit,qfix,idepth,qupdo,
+
listsa,noint,itcnt, D,No factible
call cycle (*500,*150)
endif
C
C******************************************************************
C
Comprobar si hay que reinvertir la base.
C******************************************************************
if (nelem.gt.nemax.or.itsinv.ge.invfrq) then
call invert
itsinv = 0
else
call wreta (irowpd)
endif
C
C******************************************************************
C
Comienzo ciclo iterativo dual del simplex.
C******************************************************************
if (itcnt.ge.itrfrq) then
write (lo,( *** L
mite de iteraciones sobrepasado;,
+
el programa se para))
stop
endif
C
C-----------------------------------------------------------------C
Escoger variable b
asica X(IROWPD) que debe salir de la base.
C-----------------------------------------------------------------call dchuzr (irowpd,iptypd)
if (irowpd.ne.0) go to 250
idepth = idepth+1
if (x(1).le.xincva) then
qplus = ABANDONO
if (logite.eq.1) write (logu,700) icolit,qfix,idepth,qupdo,
+
listsa,noint,itcnt, D,x(1)*min,qplus
call cycle (*500,*150)
endif
qplus =

if (logite.eq.1) write (logu,700) icolit,qfix,idepth,qupdo,listsa,


+
noint,itcnt, D,x(1)*min,qplus
call testx
if (qstat.eq.ENTERA) call cycle (*500,*150)
go to 150
C
500 continue
return
C
10 format(a,i4)
550 format(----- Nudo desechado en PENLTS -----)
600 format(i6,a8,i5,7x,a,i7,4x,i7,8x,i4,a,6x,a)
700 format(i6,a8,i5,7x,a,i7,4x,i7,8x,i4,a,1pd18.7,1x,a)
C
C
Fin de -BANDBend
subroutine bktrak
C
C
Se escoge un nudo del
arbol enumerativo siguiendo la
C
regla LIFO (Last In Firt Out).
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),

+
+
+
+
+

kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
yen(1000)

C
C
ntemp3 = 0
qfix =

C
C******************************************************************
C
Si la lista de nudos del
arbol esta vac
a, terminar.
C******************************************************************
50 continue
if (listl.eq.0) return
C
C******************************************************************
C
Si no esta vac
a, coger el siguiente.
C******************************************************************
if (xiobnd(listl).gt.xincva) then
inco = ivid(listl,1)
if (inco.ge.0) then
dp = xlb(inco)
xlb(inco) = xub(inco)+uno
xub(inco) = vbnd(listl)
if (kinbas(inco).le.0) then
kinbas(inco) = 0
ntemp3 = 1
endif
else
inco = -inco
dp = xub(inco)
xub(inco) = xlb(inco)-uno
xlb(inco) = vbnd(listl)
if (kinbas(inco).le.0) then
kinbas(inco) = -1
ntemp3 = 1
endif
endif
ivid(listl,1) = -ivid(listl,1)
idepth = ivid(listl,2)
vbnd(listl) = dp
xiobnd(listl) = -1.0D50
listsa = listsa-1
if (ntemp3.eq.0) return
C
C------------------------------------------------------------------C
-1
-1
C
Calcular la soluci
on que determina nudo LISTL: x = B b - B Nx
C
N
C------------------------------------------------------------------do i = 1,nrow
y(i) = b(i)
end do
do j = 1,ncol
if (kinbas(j).eq.(-1)) then
de = xub(j)
else if (kinbas(j).eq.0) then
de = xlb(j)
else
cycle
endif
do i = la(j),la(j+1)-1
ir = ia(i)
y(ir) = y(ir)-a(i)*de
end do
end do
call ftran (1)
do i = 1,nrow
x(i) = y(i)
end do
return
C
C******************************************************************
C
Nudo no es de inter
es.
C
Adaptar l
mites de las variables y escoger otro nudo.
C******************************************************************
else
inco = ivid(listl,1)
icolit = iabs(inco)
if (xiobnd(listl).ne.(-1.0D50)) then
listsa = listsa-1
inco = ivid(listl,1)
qupdo =

if (inco.gt.0) then
iax = idnint(xub(icolit))+1
write (qupdo,10) X>,iax
else
iax = idnint(xlb(icolit))-1
write (qupdo,10) X<,iax
endif
if (icolit.le.nrow) then
icolit = icolit+ncol-nrow-1

E.4 Listado de BBMI

else
icolit = icolit-nrow
endif
if (logite.eq.1) write (logu,550) icolit,qfix,ivid(listl,2)+
+
1,qupdo,listsa,xiobnd(listl)*min
endif
if (inco.ge.0) then
if (kinbas(inco).eq.(-1)) then
ntemp3 = 1
dp = xub(inco)-xlb(inco)
dy = vbnd(listl)-xub(inco)
if (dp.lt.dy) kinbas(inco) = 0
endif
xub(inco) = vbnd(listl)
else
inco = -inco
if (kinbas(inco).eq.0) then
ntemp3 = 1
dy = xlb(inco)-vbnd(listl)
dp = xub(inco)-xlb(inco)
if (dp.lt.dy) kinbas(inco) = -1
endif
xlb(inco) = vbnd(listl)
endif
listl = listl-1
go to 50
endif
C
10 format(a,i4)
550 format(i6,a8,i5,7x,a,i7,
C
C

-Nudo desechado en BKTRAK-,1pd14.7)

Fin de -BKTRAKend

subroutine branch(icol,idir)
C
C
Se generan dos nuevas ramas del
arbol enumerativo separando
C
la variable X(ICOL).
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
C******************************************************************
C
ICOL indica variable de separaci
on.
C
IDIR indica direcci
on de bifurcaci
on escogida (1 o -1). A
nadir
C
opuesta a la escogida a la lista de las a analizar m
as tarde
C******************************************************************
listl = listl+1
listsa = listsa+1
if (listl.gt.maxnod) then
write (lo,20) maxnod
stop
endif
if (idir.eq.(-1)) vbnd(listl) = xlb(icol)
if (idir.eq.1) vbnd(listl) = xub(icol)
ivid(listl,1) = idir*icol
ivid(listl,2) = idepth
xiobnd(listl) = xival
return
C
20 format(El n
umero de nudos excede,i5,; incrementar "MAXNOD",
+
y los vectores correspondientes)
C
C
Fin de -BRANCHend
subroutine btran
C
C
C
C
C
C
C
C
C

t -1
Se calculan los multiplicadores simplex pi=c B
realizando
B
t
transformaci
on inversa del vector c ; es decir
B
t
pi=(((c E )E
)...E )
B k) k-1
1

795

C
C******* Descripci
on de vectores afectados *****
C
Y
:= Vector de costes c
C
B
C
C
LE, IE, E := Vectores que definen en forma dispersa las
C
matrices elementales eta.
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
if (neta.le.0) return
do i = neta,1,-1
ll = le(i)
kk = le(i+1)-1
ipiv = ie(ll)
dsum = cero
if (kk.gt.ll) then
do j = ll+1,kk
ir = ie(j)
dsum = dsum+e(j)*y(ir)
end do
endif
y(ipiv) = (y(ipiv)-dsum)/e(ll)
end do
C
return
C
C
Fin de -BTRANend
subroutine chuzr(hrtype,jcolp,irowp,npivot,iptype,theta,ivout)
C
C
Esta rutina, una vez efectuada la transformaci
on directa
C
-1
C
Y = B a
C
jcolp
C
del vector columna de la matriz de condiciones A, a
,
C
jcolp
C
que entrar
a en la base, selecciona la fila IROWP sobre la
C
que pivotar
a dicha columna en esta iteraci
on del m
etodo
C
simplex; selecciona de esta forma la variable b
asica X
C
que ha de salir de la base.
irowp
C
C******* Descripci
on de par
ametros *****
C
KINBAS := Estado en el que se encuentran los componentes del
C
del vector X de variables de decisi
on:
C
=0, variable en su l
mite inferior;
C
=-1, variable en su l
mite superior;
C
=-2, variable libre: especificada FR;
C
=>0, variable b
asica, el n
umero indica
C
sobre qu
e vector fila pivota.
C
C
HRTYPE := Se calcula en FORMC de tal forma que:
C
=-2 si X(j) < XLB(j)-ZTOLZE;
C
= 0 si X(j) es factible y
C
= 2 si X(j) > XUB(j)+ZTOLZE.
C
C
XLB, XUB := L
mites inferior y superior de las variables.
C
C
JH
:= Vector que indica la columna con la que pivota
C
cada vector fila.
C
C
X
:= Valor que en esta iteraci
on toma el vector de
C
variables de decisi
on.
C
-1
C
Y
:= El ya mencionado B a
C
jcolp
C
C*********************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
integer hrtype(*)
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,

796

+
+

Apendice E. El programa BBMI

idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)

C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C-- locales -logical hlow1,hlow2,hitlow,move,unbndd
C
C
jh(nrwm1) = jcolp
C
C---------------------------------------------------------------C Chequear si la variable a entrar en la base se incrementa
C
desde su l
mite inferior, RCOST > 0, o decrementa desde
C
su superior, RCOST < 0.
C---------------------------------------------------------------if (rcost.gt.cero) then
x(nrwm1) = xlb(jcolp)
if (kinbas(jcolp).eq.(-2)) x(nrwm1) = cero
y(nrwm1) = -uno
is = 1
else
x(nrwm1) = xub(jcolp)
if (kinbas(jcolp).eq.(-2)) x(nrwm1) = cero
y(nrwm1) = uno
is = -1
do i = 1,nrow
y(i) = -y(i)
end do
endif
C
ynorm = dnorm(nrow-1,y(2))
stepmn = ztolpv/(uno+ynorm)
stepmx = 1.0D+11/(uno+ynorm)
theta1 = stepmx
theta2 = cero
pertbn = 1.1*ztolze
tol = ztolpv*ynorm
C
C PERTBN debe ser mayor que ZTOLZE.
C
C---------------------------------------------------------------C Primera pasada. Se perturba RES, la distancia a cada l
mite o
C
cota, de tal forma que THETA1 sea ligeramente mayor que el
C
verdadero paso a dar y THETA2 ligeramente inferior. En casos
C
de degeneraci
on, esta estrategia pemite cierta libertad en
C
segunda pasda.
C---------------------------------------------------------------do j = 2,nrwm1
inco = jh(j)
pivot = y(j)
pivabs = dabs(pivot)
if (pivabs.gt.tol) then
jtype = hrtype(j)
if (pivot.gt.cero) then
C
C La posible variable a entrar en la base decrecer
a.
C
Chequear un THETA1 m
as peque
no si se satisface su l
mite
C
inferior.
C
if (jtype.ge.0) then
res = x(j)-xlb(inco)+pertbn
if (theta1*pivot.gt.res) theta1 = res/pivot
C
C Comprobar si existe un THETA2 mayor si se viola su l
mite
C
superior.
C
if (jtype.gt.0) then
res = x(j)-xub(inco)-pertbn
if (theta2*pivot.lt.res) theta2 = res/pivot
endif
endif
C
C La posible variable a entrar en la base se incrementar
a.
C
Chequear un THETA1 m
as peque
no si se satisface su l
mite
C
superior.
C
else if (jtype.le.0) then
res = xub(inco)-x(j)+pertbn
if (theta1*pivabs.gt.res) theta1 = res/pivabs
C
C Comprobar si existe un THETA2 mayor si se viola su l
mite
C
inferior.
C
if (jtype.lt.0) then
res = xlb(inco)-x(j)-pertbn
if (theta2*pivabs.lt.res) theta2 = res/pivabs
endif
endif

endif
end do
C
C---------------------------------------------------------------C Segunda pasada. Recalcular las amplitudes de paso sin
C
perturbaci
on. Entre las que est
en cerca de los pasos
C
perturbados, escoger el elemento pivote asociado m
as grande.
C---------------------------------------------------------------pthet1 = theta1
pthet2 = theta2
pivmx1 = cero
pivmx2 = cero
jhit1 = 0
jhit2 = 0
hlow1 = .FALSE.
C
do j = 2,nrwm1
inco = jh(j)
pivot = y(j)
pivabs = dabs(pivot)
if (pivabs.gt.tol) then
jtype = hrtype(j)
if (pivot.gt.cero) then
C
C La posible variable a entrar en la base decrecer
a.
C
Chequear un THETA1 m
as peque
no si se satisface su l
mite
C
inferior.
C
if (jtype.ge.0) then
res = x(j)-xlb(inco)
if (pthet1*pivot.ge.res.and.pivmx1.lt.pivot) then
pivmx1 = pivot
theta1 = res/pivot
jhit1 = j
hlow1 = .TRUE.
endif
C
C Comprobar si existe un THETA2 mayor si se viola su l
mite
C
superior.
C
if (jtype.gt.0) then
res = x(j)-xub(inco)
if (pthet2*pivot.le.res.and.pivmx2.lt.pivot) then
pivmx2 = pivot
theta2 = res/pivot
jhit2 = j
hlow2 = .FALSE.
endif
endif
endif
C
C La posible variable a entrar en la base se incrementar
a.
C
Chequear un THETA1 m
as peque
no si se satisface su l
mite
C
superior.
C
else if (jtype.le.0) then
res = xub(inco)-x(j)
if (pthet1*pivabs.ge.res.and.pivmx1.lt.pivabs) then
pivmx1 = pivabs
theta1 = res/pivabs
jhit1 = j
hlow1 = .FALSE.
endif
C
C Comprobar si existe un THETA2 mayor si se viola su l
mite
C
inferior.
C
if (jtype.lt.0) then
res = xlb(inco)-x(j)
if (pthet2*pivabs.le.res.and.pivmx2.lt.pivabs) then
pivmx2 = pivabs
theta2 = res/pivabs
jhit2 = j
hlow2 = .TRUE.
endif
endif
endif
endif
end do
C
C---------------------------------------------------------------C Si es factible, s
olo se habr
a obtenido THETA1;
C
si no, hacer THETA = min( THETA1, THETA2 ).
C---------------------------------------------------------------theta = theta1
irowp = jhit1
hitlow = hlow1
if (jhit2.ne.0.and.theta1.gt.theta2) then
theta = theta2
irowp = jhit2
hitlow = hlow2
endif
C

E.4 Listado de BBMI

move = theta.gt.stepmn
unbndd = theta.ge.stepmx.or.irowp.eq.0
if (.not.unbndd) then
if (hitlow) unbndd = xlb(jh(irowp)).le.(-plinfy)
if (.not.hitlow) unbndd = xub(jh(irowp)).ge.plinfy
endif
C
if (.not.move) theta = cero
C
if (unbndd) then
write (lo,( Soluci
on no acotada))
stop
endif
C
C---------------------------------------------------------------C Se adapta el vector soluci
on al final de una pivotaci
on del
C
m
etodo simplex.
C
C
x =x -THETA*y ; 1<=i<=m.
C
j
j
i
C
i
i
C---------------------------------------------------------------if (irowp.eq.nrwm1) then
C
C---------------------------------------------------------------C
No ha habido pivotaci
on; una variable no b
asica va de uno
C
de sus l
mites al otro. Cambiar su estatus: si = -1,
C
hacerlo 0; si = 0, hacerlo -1.
C---------------------------------------------------------------kinbas(jcolp) = -(kinbas(jcolp)+1)
ivout = jcolp
rpivot = cero
npivot = 0
else
C
C---------------------------------------------------------------C
Pivotaci
on normal.
C---------------------------------------------------------------npivot = 1
rpivot = y(irowp)*is
ivout = jh(irowp)
kinbas(jcolp) = irowp
if (hitlow) then
kinbas(ivout) = 0
iptype = 0
else
kinbas(ivout) = -1
iptype = -1
endif
jh(irowp) = jcolp
if (.not.move) go to 1
endif
C
C---------------------------------------------------------------C
Adaptar el vector x.
C---------------------------------------------------------------do i = 1,nrwm1
x(i) = x(i)-y(i)*theta
end do
1 continue
x(irowp) = x(nrwm1)
if (rcost.lt.cero) then
do i = 1,nrow
y(i) = -y(i)
end do
endif
return
C
C
Fin de -CHUZRend
subroutine cycle(*,*)
C
C
Esta rutina lleva a cabo la resoluci
on de la relajaci
on
C
lineal del nudo determinado en BKTRAK. Se utiliza
C
el m
etodo primal del simplex.
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /iolog/ iu,lo,logu
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)

797

C
C
1 continue
call bktrak
C
C******************************************************************
C
Si la lista de nudos a analizar esta vac
a, terminar.
C******************************************************************
if (listl.eq.0) return 1
C
C******************************************************************
C
Si no esta vac
a, optimizar nudo mediante simplex.
C******************************************************************
call normal
inco = ivid(listl,1)
icolit = iabs(inco)
qupdo =

if (inco.gt.0) then
iax = idnint(xub(icolit))
write (qupdo,10) X<,iax
else
iax = idnint(xlb(icolit))
write (qupdo,10) X>,iax
endif
if (icolit.le.nrow) then
icolit = icolit+ncol-nrow-1
else
icolit = icolit-nrow
endif
idepth = idepth+1
if (qstat.eq.FEAS) then
if (x(1).le.xincva) then
qplus = ABANDONO
if (logite.eq.1) write (logu,20) icolit,qfix,idepth,qupdo,
+
listsa,noint,itcnt, P,x(1)*min,qplus
go to 1
endif
qplus =

if (logite.eq.1) write (logu,20) icolit,qfix,idepth,qupdo,


+
listsa,noint,itcnt, P,x(1)*min,qplus
else
if (logite.eq.1) write (logu,30) icolit,qfix,idepth,qupdo,
+
listsa,noint,itcnt, P
go to 1
endif
C
C******************************************************************
C
Comprobar si soluci
on conseguida es entera factible.
C
Si es, coger otro nudo de la lista y comenzar ciclo primal.
C
Si no, retornar para calcular penalizaciones.
C******************************************************************
call testx
if (qstat.eq.ENTERA) go to 1
return 2
C
10 format(a,i4)
20 format(i6,a8,i5,7x,a,i7,4x,i7,8x,i4,a,1pd18.7,1x,a)
30 format(i6,a8,i5,7x,a,i7,4x,i7,8x,i4,a,4x,No factible)
C
C
Fin de -CYCLEend
subroutine dchuzc(jcolp,irowp,npivot,iptype,theta,ivout)
C
C
Se determina la variable no b
asica JCOLP que ha de entrar en
C
la base de acuerdo al m
etodo dual del simplex.
C
C
Si el programa lineal del nudo analiz
andose no es factible
C
se hace JCOLP=0.
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
C
jcolp = 0
if (iptype.eq.(-1)) then
C

798

Apendice E. El programa BBMI

C******************************************************************
C
Se ha impuesto el l
mite x
<=n
C
irowp
irowp
C******************************************************************
dp = plinfy
do j = 1,ncol
if (dabs(xub(j)-xlb(j)).gt.ztolze.and.kinbas(j).le.0) then
call unpack (j)
call ftran (iuno)
if (kinbas(j).eq.0) then
if (y(irowp).gt.ztolpv) then
de = y(1)/y(irowp)
if (de.lt.dp) then
jcolp = j
dp = de
endif
endif
else if (y(irowp).lt.(-ztolpv)) then
de = y(1)/y(irowp)
if (de.lt.dp) then
jcolp = j
dp = de
endif
endif
endif
end do
if (jcolp.eq.0) return
C
C-----------------------------------------------------------------C
-1
C
Se calcula B N
y el paso
C
jcolp
C-----------------------------------------------------------------call unpack (jcolp)
call ftran (iuno)
theta = (x(irowp)-xub(jh(irowp)))/y(irowp)
else
C
C******************************************************************
C
Se ha impuesto el l
mite x
>=n
+1
C
irowp
irowp
C******************************************************************
dp = -plinfy
do j = 1,ncol
if (dabs(xub(j)-xlb(j)).gt.ztolze.and.kinbas(j).le.0) then
call unpack (j)
call ftran (iuno)
if (kinbas(j).eq.(-1)) then
if (y(irowp).gt.ztolpv) then
de = y(1)/y(irowp)
if (de.gt.dp) then
jcolp = j
dp = de
endif
endif
else if (y(irowp).lt.(-ztolpv)) then
de = y(1)/y(irowp)
if (de.gt.dp) then
jcolp = j
dp = de
endif
endif
endif
end do
if (jcolp.eq.0) return
C
C-----------------------------------------------------------------C
-1
C
Se calcula B N
y el paso
C
jcolp
C-----------------------------------------------------------------call unpack (jcolp)
call ftran (iuno)
theta = (x(irowp)-xlb(jh(irowp)))/y(irowp)
endif
npivot = 1
do i = 1,nrow
x(i) = x(i)-y(i)*theta
end do
C
if (kinbas(jcolp).eq.(-1)) then
x(irowp) = xub(jcolp)+theta
else
x(irowp) = xlb(jcolp)+theta
endif
ivout = jh(irowp)
kinbas(jcolp) = irowp
kinbas(ivout) = iptype
jh(irowp) = jcolp
return
C
C
Fin de -DCHUZCend

subroutine dchuzr(irowp,iptype)
C
C
Se determina para una iteraci
on del m
etodo simplex dual la
C
variable x
que ha de salir de la base.
C
irowp
C
C
Si el problema es factible en el primal se acaba; se ha
C
llegado al
optimo haci
endose IROWP=0.
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C******************************************************************
C
Se escoge la fila con mayor no factibilidad.
C******************************************************************
irowp = 0
qstat = FEAS
dp = -plinfy
do i = 2,nrow
inco = jh(i)
if (x(i).le.xlb(inco)-ztolze) then
C
C-----------------------------------------------------------------C
La variable b
asica que pivota en la fila I esta por debajo de
C
su l
mite inferior
C-----------------------------------------------------------------qstat = INFEAS
de = xlb(inco)-x(i)
if (de.gt.dp) then
dp = de
iptype = 0
irowp = i
endif
else if (x(i).ge.xub(inco)+ztolze) then
C
C-----------------------------------------------------------------C
La variable b
asica que pivota en la fila I esta por encima de
C
su l
mite superior
C-----------------------------------------------------------------qstat = INFEAS
de = x(i)-xub(inco)
if (de.gt.dp) then
dp = de
iptype = -1
irowp = i
endif
endif
end do
C
return
C
C
Fin de -DCHUZRend
double precision function dnorm (n,x)
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
doubleprecision x(n)
C
sum = 0.0D+00
if (n.gt.0) then
do i = 1,n
sum = sum+dabs(x(i))
end do
endif
d = n
d = sum/dsqrt(d)
dnorm = d
C
return
C
C

Fin de -DNORMend
subroutine formc(hrtype)

E.4 Listado de BBMI

C
Se forma el vector de coste c en Y. En la Phase II es Y(1)=1
C
B
C
y todos los dem
as componentes cero. En Phase I Y(1)=0
C
a
nadi
endose un una variable artificial Y(i)=1 si x <l
C
i i
C
o Y(i)=-1 si x >u (recordemos que el problema es de
C
i i
C
maximizaci
on).
C
C******* Descripci
on de vectores afectados *****
C
XLB, XUB := L
mites inferior y superior de las variables
C
del problema.
C
C
JH
:= Vector que indica la columna con la que pivota
C
cada vector fila.
C
C
-1
C
X
:= Vector soluci
on actual =B b.
C
C
Y
:= Vector de coste a formar.
C
C
QSTAT
:= Estado de la soluci
on = I si no es factible;
C
= F si es factible.
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
integer hrtype(*)
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
qstat = INFEAS
suminf = cero
y(1) = cero
ninf = 0
C
do i = 2,nrow
icol = jh(i)
xi = x(i)
res = xlb(icol)-xi
if (res.le.ztolze) then
res = xi-xub(icol)
if (res.le.ztolze) then
y(i) = cero
hrtype(i) = 0
else
y(i) = -uno
hrtype(i) = 2
ninf = ninf+1
suminf = suminf+res
endif
else
y(i) = uno
hrtype(i) = -2
ninf = ninf+1
suminf = suminf+res
endif
end do
C
if (ninf.eq.0) then
y(1) = uno
qstat = FEAS
endif
C
return
C
C
Fin de -FORMCend
subroutine ftran(ipar)
C
C
Se lleva a cabo la transformaci
on directa siguiente:
C
-1
C
y <--- B a
C
jcolp
C
C
-1
C
La matriz B
esta almacenada como producto de matrices
C
elementales ETA.
C
C******* Descripci
on de los parametros *****
C
C
IPAR := Indica que transformaciones ETA se van a aplicar

799

C
al vector a
C
jcolp
C
-1
C
Y
:= Vector de entrada con a
y salida con B a
C
jcolp
jcolp
C
C
LE, IE, E := Vectores donde se guarda toda la informaci
on
C
relativa a la matriz inversa de la base en
C
forma de producto de matrices elementales.
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
if (ipar.eq.1) then
nfe = 1
nle = neta
else
nfe = nleta+1
nle = neta
endif
if (nfe.gt.nle) return
do ik = nfe,nle
ll = le(ik)
kk = le(ik+1)-1
ipiv = ie(ll)
if (dabs(y(ipiv)).gt.0) then
y(ipiv) = y(ipiv)/e(ll)
if (kk.gt.ll) then
do j = ll+1,kk
ir = ie(j)
y(ir) = y(ir)-e(j)*y(ipiv)
end do
endif
endif
end do
C
return
C
C
Fin de -FTRANend
subroutine input
C
C
Entrada de los datos del problema a resolver.
C
C******* Descripci
on de vectores afectados *****
C
C
B
:= Termino de la derecha del problema.
C
C
KINBAS := Estado en el que se encuentran los componentes
C
del vector X de variables de decisi
on:
C
=0, variable en su l
mite inferior;
C
=-1, variable en su l
mite superior;
C
=-2, variable libre: especificada FR;
C
=>0, variable b
asica, el n
umero indica
C
el vector fila sobre el que pivota.
C
C
QNAME := Vector CHARACTER donde se guardan los nombres
C
atribuidos en el fichero MPS a las variables
C
de decisi
on y a las condiciones.
C
C
XLB, XUB := L
mites inferior y superior de las variables.
C
C
JH
:= Vector que indica la columna con la que pivota
C
cada vector fila.
C
C
LA, IA, A := Vectores donde se guarda toda la informaci
on
C
relativa a la matriz de los coeficientes
C
de las condiciones.
C
C
QNAMPO
:= Variable CHARACTER con el nombre del caso a
C
resolver.
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
character*1 idf*20,char1*80,qn(3)*8,k1,k2,k3,k4
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos

800

Apendice E. El programa BBMI

C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
min = -1
inibb = 0
nrow = 1
itcnt = 0
nvare = 0
invfrq = 50
itrfrq = 100000
logite = 0
qcs =
a(1) = uno
b(1) = cero
ia(1) = 1
la(1) = 1
jh(1) = 1
kinbas(1) = 1
xincva = -1.D75
nsolen = 0
initbd = 0
C
write (*,(A)) Fichero de datos del problema?
read (*,(A)) idf
open (iu,file=idf)
open (lo,file=idf(:index(idf, )-1)//.pbb)
C
C******************************************************************
C
Leer las especificaciones del proceso de optimizaci
on.
C******************************************************************
1 continue
read (iu,(A)) char1
C
if (index(char1,NAME
).ne.1) then
if (index(char1,MAXIMIZAR).ne.0) then
min = 1
go to 1
endif
ind = index(char1,FRECUENCIA DE REINVERSION)
if (ind.ne.0) then
read (char1(ind+22:),(BN,I50)) invfrq
go to 1
endif
ind = index(char1,LIMITE DE ITERACIONES)
if (ind.ne.0) then
read (char1(ind+18:),(BN,I50)) itrfrq
go to 1
endif
ind = index(char1,COTA INICIAL F.O.)
if (ind.ne.0) then
read (char1(ind+17:),(BN,I50)) initbd
go to 1
endif
ind = index(char1,PROCESO ITERATIVO)
if (ind.ne.0) then
read (char1(ind+17:),(BN,I50)) logu
if (logu.ne.0) then
open(logu,file=idf//.LOG)
else
logu = lo
endif
logite = 1
go to 1
endif
ind = index(char1,TOLERANCIA DE CERO)
if (ind.ne.0) then
read (char1(ind+15:),(BN,D50.0)) ztolze
go to 1
endif
ind = index(char1,TOLERANCIA DE COSTES)
if (ind.ne.0) then
read (char1(ind+17:),(BN,D50.0)) ztcost
go to 1
endif
ind = index(char1,TOLERANCIA DE PIVOTE)
if (ind.ne.0) then
read (char1(ind+17:),(BN,D50.0)) ztolpv
go to 1
endif
go to 1
endif
C
if (initbd.ne.0) xincva = dble(initbd)*min

backspace iu
C
C******************************************************************
C
Leer el fichero de datos en formato MPS.
C******************************************************************
5 continue
read (iu,8000) k1,k2,k3,k4,qn(1),qn(2),vtemp1,qn(3),vtemp2
C
if (k1.ne.E.or.k2.ne.N) then
if (k1.eq. ) then
go to (210,320,500,550,595) l
endif
if (k1.eq.N.and.k2.eq.A) then
qnampo = qn(2)
go to 5
endif
if (k1.eq.R.and.k2.eq.O) then
l = 1
go to 5
endif
if (k1.eq.C.and.k2.eq.O) then
l = 2
go to 5
endif
if (k1.eq.R.and.k2.eq.H) then
l = 3
go to 5
endif
if (k1.eq.B.and.k2.eq.O) then
l = 4
go to 5
endif
if (k1.eq.R.and.k2.eq.A) then
l = 5
go to 5
endif
if (k1.eq.I.and.k2.eq.N.and.k3.eq.T) then
nvare = ncol+1
go to 5
endif
write (lo,( *** Clave ,A, no reconocida))
+
k1//k2//k3//k4
stop
C
C******************************************************************
C
ROWS: nueva fila.
C******************************************************************
210
continue
nrow = nrow+1
qname(nrow) = qn(1)
C
C-----------------------------------------------------------------C
Determinar tipo de fila.
C-----------------------------------------------------------------if (k2.eq.L.or.k3.eq.L) then
xlb(nrow) = cero
xci(nrow) = cero
xub(nrow) = plinfy
xcs(nrow) = plinfy
a(nrow) = uno
endif
if (k2.eq.E.or.k3.eq.E) then
xlb(nrow) = cero
xci(nrow) = cero
xub(nrow) = cero
xcs(nrow) = cero
a(nrow) = uno
endif
if (k2.eq.G.or.k3.eq.G) then
xlb(nrow) = cero
xci(nrow) = cero
xub(nrow) = plinfy
xcs(nrow) = plinfy
a(nrow) = -uno
endif
if (k2.eq.N.or.k3.eq.N) then
nrow = nrow-1
qname(1) = qn(1)
ncol = nrow
go to 5
endif
C
b(nrow) = 0.0
ia(nrow) = nrow
la(nrow) = nrow
jh(nrow) = nrow
kinbas(nrow) = nrow
nelem = nrow
ncol = nrow
go to 5
C
C******************************************************************
C
COLUMNS: coeficientes de la matriz de condiciones.

E.4 Listado de BBMI

C******************************************************************
320
continue
j = 2
if (dabs(vtemp1).lt.ztolze) then
if (dabs(vtemp2).lt.ztolze) go to 5
j = 3
vtemp1 = vtemp2
endif
C
C-----------------------------------------------------------------C
Comprobar si el vector columna ya estaba definido.
C-----------------------------------------------------------------if (qn(1).ne.qcs) then
do i = nrow+1,ncol
if (qn(1).eq.qname(i)) then
write (lo,8250) qn(1)
stop
endif
end do
if (ncol+1.gt.ncolma) then
write (lo,8555) ncolma
stop
endif
ncol = ncol+1
qcs = qn(1)
qname(ncol) = qcs
la(ncol) = nelem+1
xlb(ncol) = cero
xci(ncol) = cero
xub(ncol) = plinfy
xcs(ncol) = plinfy
kinbas(ncol) = 0
endif
C
C-----------------------------------------------------------------C
Comprobar si la fila existe.
C-----------------------------------------------------------------330
continue
do i = 1,nrow
if (qn(j).eq.qname(i)) then
nelem = nelem+1
if (nelem.ge.namax) then
write (lo,8550) namax
stop
endif
ia(nelem) = i
if (qn(j).eq.qname(1).and.min.eq.1) vtemp1 = -vtemp1
a(nelem) = sngl(vtemp1)
la(ncol+1) = nelem+1
if (j.eq.3.or.dabs(vtemp2).lt.ztolze) go to 5
j = 3
vtemp1 = vtemp2
go to 330
endif
end do
write (lo,8300) qn(j),qn(1)
stop
C
C******************************************************************
C
RHS: t
ermino de la derecha.
C******************************************************************
500
continue
j = 2
if (dabs(vtemp1).lt.ztolze) then
if (dabs(vtemp2).lt.ztolze) go to 5
j = 3
vtemp1 = vtemp2
endif
C
C-----------------------------------------------------------------C
Comprobar si la fila existe.
C-----------------------------------------------------------------530
continue
do i = 1,nrow
if (qn(j).eq.qname(i)) then
b(i) = vtemp1
if (j.eq.3.or.dabs(vtemp2).lt.ztolze) go to 5
j = 3
vtemp1 = vtemp2
go to 530
endif
end do
write (lo,8350) qn(j),qn(1)
stop
C
C******************************************************************
C
BOUNDS: l
mites de las variables.
C******************************************************************
550
continue
j = 2
C
C-----------------------------------------------------------------C
Comprobar si la fila existe.

801

C-----------------------------------------------------------------580
continue
do i = nrow+1,ncol
if (qn(j).eq.qname(i)) then
if (k2.eq.U.and.k3.eq.P) then
xub(i) = vtemp1
xcs(i) = vtemp1
endif
if (k2.eq.L.and.k3.eq.O) then
xlb(i) = vtemp1
xci(i) = vtemp1
endif
if (k2.eq.F.and.k3.eq.X) then
xlb(i) = vtemp1
xci(i) = vtemp1
xub(i) = vtemp1
xcs(i) = vtemp1
endif
if (k2.eq.F.and.k3.eq.R) then
xlb(i) = -plinfy
xci(i) = -plinfy
xub(i) = plinfy
xcs(i) = plinfy
kinbas(i) = -2
endif
if (k2.eq.M.and.k3.eq.I) then
xlb(i) = -plinfy
xci(i) = -plinfy
kinbas(i) = -1
endif
if (k2.eq.P.and.k3.eq.L) then
xub(i) = plinfy
xcs(i) = plinfy
endif
if (j.eq.3) go to 5
j = 3
vtemp1 = vtemp2
if (qn(j).eq. ) go to 5
go to 580
endif
end do
write (lo,8400) qn(j),qn(1)
go to 5
C
C******************************************************************
C
RANGES: margen de validez de los elementos t
ermino de derecha
C******************************************************************
595
continue
j = 2
if (dabs(vtemp1).lt.ztolze) then
if (dabs(vtemp2).lt.ztolze) go to 5
j = 3
vtemp1 = vtemp2
endif
C
C-----------------------------------------------------------------C
Comprobar si la fila existe.
C-----------------------------------------------------------------597
continue
do i = 1,nrow
if (qn(j).eq.qname(i)) then
if (dabs(xub(i)).lt.ztolze) then
if (vtemp1.gt.ztolze) then
xub(i) = vtemp1
xcs(i) = vtemp1
a(i) = -1.0
else
xub(i) = dabs(vtemp1)
xcs(i) = dabs(vtemp1)
endif
else
xub(i) = dabs(vtemp1)
xcs(i) = dabs(vtemp1)
endif
if (j.eq.3) go to 5
j = 3
vtemp1 = vtemp2
if (qn(j).eq. ) go to 5
go to 597
endif
end do
write (lo,8450) qn(j),qn(1)
stop
C
C******************************************************************
C
Fin de INPUT; se imprimen algunas estad
sticas.
C******************************************************************
endif
if (nvare.eq.0) nvare = ncol+1
write (lo,8650) qnampo
write (lo,8700) nrow,nrow-1,ncol-nrow,nrow-1,nelem-nrow,ncolnvare
+
+1,dble(nelem-nrow)*100./(nrow*(ncol-nrow))

802

Apendice E. El programa BBMI

nrwm1 = nrow+1
close(iu)
return
C
6500
7000
8000
8250
8300

format(2i3,l2,i3)
format(4i4,i10)
format(4a1,a,2x,a,2x,f12.0,3x,a,2x,f12.0)
format(*** Variable ,a, previamente definida)
format(*** La condici
on ,a, en la l
nea COLUMN ,a,
+
no existe.)
8350 format(*** La condici
on ,a, en la l
nea RHS ,a, no existe.)
8400 format(<Cuidado! La variable ,a, de la l
nea BOUNDS ,a,
+
no existe o los coeficientes de la misma son nulos)
8450 format(*** La condici
on ,a, en la l
nea RANGES ,a,
+
no existe.)
8550 format(*** El n
umero de coeficientes de la matriz A, excede de
+
,i7,; el programa se para.)
8555 format(*** El n
umero de variables del problema, excede de,i7,
+
; el programa se para.)
8650 format(Problema ,a)
8700 format(//*** Estad
sticas del Problema/4x,i5, Fila(s)/4x,i5,
+
Restricci
on(es)/4x,i5, Variable(s) de decisi
on/4x,i5,
+
Variable(s) de ,holgura/artificiales/4x,i5,
+
Elementos no cero/4x,i5, Variable(s) entera(s)/4x,
+
Densidad de la matriz de coeficientes A:,f8.3,%/)
C
C
Fin de -INPUTend
subroutine invert
C
C
Se refactoriza la inversa de la matriz b
asica B en la
C
forma LU.
C
C******* Descripci
on de vectores afectados *****
C
C
B
:= T
ermino de la derecha del problema.
C
C
KINBAS := Estado en el que se encuentran los componentes
C
del vector X de variables de decisi
on:
C
=0, variable en su l
mite inferior;
C
=-1, variable en su l
mite superior;
C
=-2, variable libre: especificada FR;
C
=>0, variable b
asica, el n
umero indica
C
el vector fila sobre el que pivota.
C
C
XLB, XUB := L
mites inferior y superior de las variables.
C
C
JH
:= Vector que indica la columna con la que pivota
C
cada vector fila.
C
C
LA, IA, A := Vectores donde se guarda toda la informaci
on
C
relativa a la matriz de los coeficientes
C
de las condiciones.
C
C
-1
-1
-1
C
X
:= vector B b - B Nx = B (b-Nx )
C
C
LE, IE, E := Vectores donde se guarda toda la informaci
on
C
relativa a la matriz de las
C
transformaciones elementales eta.
C
C
MREG, HREG, VREG := Vectores de trabajo.
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
integer mreg(4000),hreg(4000),vreg(4000)
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
C-----------------------------------------------------------------C
Definir par
ametros.
C-----------------------------------------------------------------ztrel = 0.05
10 continue
neta = 0
nleta = 0

nueta = 0
nelem = 0
nlelem = 0
nuelem = 0
nabove = 0
le(1) = 1
lr1 = 1
kr1 = 0
lr4 = nrwm1
kr4 = nrow
C
C-----------------------------------------------------------------C
Se ponen las variables de holgura y artificiales en la parte
C
4, el resto en la parte 1
C-----------------------------------------------------------------do i = 1,nrow
if (jh(i).le.nrow) then
lr4 = lr4-1
mreg(lr4) = jh(i)
vreg(lr4) = jh(i)
else
kr1 = kr1+1
vreg(kr1) = jh(i)
endif
hreg(i) = -1
jh(i) = 0
end do
C
kr3 = lr4-1
lr3 = lr4
C
do i = lr4,kr4
ir = mreg(i)
hreg(ir) = 0
jh(ir) = ir
kinbas(ir) = ir
end do
C
C-----------------------------------------------------------------C
Recuperar vectores de debajo del pico y contar filas.
C-----------------------------------------------------------------nbnonz = kr4-lr4+1
if (kr1.ne.0) then
j = lr1
210
continue
iv = vreg(j)
ll = la(iv)
kk = la(iv+1)-1
ircnt = 0
do i = ll,kk
nbnonz = nbnonz+1
ir = ia(i)
if (hreg(ir).lt.0) then
ircnt = ircnt+1
hreg(ir) = hreg(ir)-1
irp = ir
endif
end do
if (ircnt-1.gt.0) go to 300
if (ircnt-1.eq.0) go to 250
write (lo,8000)
kinbas(iv) = 0
vreg(j) = vreg(kr1)
kr1 = kr1-1
if (j.gt.kr1) go to 310
go to 210
250
continue
vreg(j) = vreg(kr1)
kr1 = kr1-1
lr3 = lr3-1
vreg(lr3) = iv
mreg(lr3) = irp
hreg(irp) = 0
jh(irp) = iv
kinbas(iv) = irp
if (j.gt.kr1) go to 310
go to 210
300
continue
if (j.ge.kr1) go to 310
j = j+1
go to 210
C
C-----------------------------------------------------------------C
Recuperar el resto de los vectores de encima y debajo del
C
pico y establecer contador de m
erito de las columnas.
C-----------------------------------------------------------------310
continue
nvrem = 0
if (kr1.ne.0) then
j = lr1
320
continue
iv = vreg(j)
ll = la(iv)

E.4 Listado de BBMI

kk = la(iv+1)-1
ircnt = 0
do i = ll,kk
ir = ia(i)
if (hreg(ir).eq.(-2)) then
C
C-----------------------------------------------------------------C
Pivota por encima del pico (parte de L).
C-----------------------------------------------------------------nabove = nabove+1
irowp = ir
call unpack (iv)
call wreta (irowp)
nleta = neta
jh(ir) = iv
kinbas(iv) = ir
vreg(j) = vreg(kr1)
kr1 = kr1-1
nvrem = nvrem+1
hreg(ir) = iv
go to 940
else if (hreg(ir).lt.0) then
ircnt = ircnt+1
irp = ir
endif
end do
C
if (ircnt-1.gt.0) go to 1000
if (ircnt-1.eq.0) go to 900
write (lo,8000)
kinbas(iv) = 0
vreg(j) = vreg(kr1)
nvrem = nvrem+1
kr1 = kr1-1
if (j.gt.kr1) go to 1010
go to 320
C
C-----------------------------------------------------------------C
Poner vector debajo del pico.
C-----------------------------------------------------------------900
continue
vreg(j) = vreg(kr1)
nvrem = nvrem+1
kr1 = kr1-1
lr3 = lr3-1
vreg(lr3) = iv
mreg(lr3) = irp
hreg(irp) = 0
jh(irp) = iv
kinbas(iv) = irp
C
C-----------------------------------------------------------------C
Cambiar contador de filas.
C-----------------------------------------------------------------940
continue
do ii = ll,kk
iir = ia(ii)
if (hreg(iir).lt.0) hreg(iir) = hreg(iir)+1
end do
if (j.gt.kr1) go to 1010
go to 320
1000
continue
if (j.ge.kr1) go to 1010
j = j+1
go to 320
1010
continue
if (nvrem.gt.0) go to 310
C
C-----------------------------------------------------------------C
Obtener contador de meritos.
C-----------------------------------------------------------------if (kr1.ne.0) then
do j = lr1,kr1
iv = vreg(j)
ll = la(iv)
kk = la(iv+1)-1
imcnt = 0
do i = ll,kk
ir = ia(i)
if (hreg(ir).lt.0) imcnt = imcnt-hreg(ir)-1
end do
mreg(j) = imcnt
end do
C
C-----------------------------------------------------------------C
Ordenar columnas segun m
erito usando el algo. SHELL.
C-----------------------------------------------------------------isd = 1
1106
continue
if (kr1.lt.2*isd) go to 1108
isd = 2*isd
go to 1106
1108
continue

1101
1102

1103
1105

1104

803

isd = isd-1
continue
if (isd.gt.0) then
isk = 1
continue
isj = isk
isl = isk+isd
isy = mreg(isl)
isz = vreg(isl)
continue
if (isy.lt.mreg(isj)) go to 1104
continue
isl = isj+isd
mreg(isl) = isy
vreg(isl) = isz
isk = isk+1
if (isk+isd.le.kr1) go to 1102
isd = (isd-1)/2
go to 1101
continue
isl = isj+isd
mreg(isl) = mreg(isj)
vreg(isl) = vreg(isj)
isj = isj-isd
if (isj.gt.0) go to 1103
go to 1105
endif

C
C-----------------------------------------------------------------C
Fin de rutina de ordenaci
on.
C-----------------------------------------------------------------C
C-----------------------------------------------------------------C
Sacar etas debajo del pico (parte de U).
C-----------------------------------------------------------------endif
endif
endif
nslck = 0
nbelow = 0
nelast = nemax
ntlast = ntmax
le(ntlast+1) = nelast+1
C
lr = lr3
if (lr3.ge.lr4) lr = lr4
if (lr.le.kr4) then
jk = kr4+1
do jj = lr,kr4
jk = jk-1
iv = vreg(jk)
i = mreg(jk)
nbelow = nbelow+1
if (iv.le.nrow) nslck = nslck+1
ll = la(iv)
kk = la(iv+1)-1
if (kk.gt.ll.or.dabs(a(ll)-1.0).gt.ztolze) then
nueta = nueta+1
do j = ll,kk
ir = ia(j)
if (ir.eq.i) then
ep = dble(a(j))
else
ie(nelast) = ir
e(nelast) = dble(a(j))
nelast = nelast-1
nuelem = nuelem+1
endif
end do
ie(nelast) = i
e(nelast) = ep
le(ntlast) = nelast
nelast = nelast-1
ntlast = ntlast-1
nuelem = nuelem+1
endif
end do
endif
if (kr1.ne.0) then
C
C-----------------------------------------------------------------C
Descomponer en forma LU en pico.
C-----------------------------------------------------------------do j = lr1,kr1
iv = vreg(j)
call unpack (iv)
call ftran (idos)
ztoly = ztolpv
2070
continue
ymax = cero
irowp = 0
ircmin = -999999
do i = 1,nrow

804

Apendice E. El programa BBMI

yval = dabs(y(i))
if (yval.ge.ztoly.and.hreg(i).lt.0) then
ymax = dmax1(yval,ymax)
if (hreg(i).gt.ircmin) then
ircmin = hreg(i)
irowp = i
endif
endif
end do
if (irowp.eq.0) then
write (lo,8000)
kinbas(iv) = 0
cycle
endif
ztmin = ztrel*ymax
if (dabs(y(irowp)).lt.ztmin) then
ztoly = ztmin
go to 2070
endif
incr = hreg(irowp)+3
C
C-----------------------------------------------------------------C
Escribir etas L y U.
C-----------------------------------------------------------------if (j.lt.kr1) then
nelem = nelem+1
ie(nelem) = irowp
e(nelem) = y(irowp)
endif
do i = 1,nrow
if (i.ne.irowp.and.dabs(y(i)).gt.toleta) then
if (hreg(i).lt.0) then
C
C-----------------------------------------------------------------C
Elementos eta de L.
C-----------------------------------------------------------------nelem = nelem+1
ie(nelem) = i
e(nelem) = y(i)
else
C
C-----------------------------------------------------------------C
Elementos eta de U.
C-----------------------------------------------------------------ie(nelast) = i
e(nelast) = y(i)
nelast = nelast-1
nuelem = nuelem+1
endif
endif
end do
jh(irowp) = iv
kinbas(iv) = irowp
nueta = nueta+1
ie(nelast) = irowp
if (j.eq.kr1) then
e(nelast) = y(irowp)
else
e(nelast) = uno
neta = neta+1
le(neta+1) = nelem+1
endif
nuelem = nuelem+1
le(ntlast) = nelast
nelast = nelast-1
ntlast = ntlast-1
C
C-----------------------------------------------------------------C
Adaptar contadores de filas.
C-----------------------------------------------------------------do i = 1,nrow
if (dabs(y(i)).gt.toleta.and.hreg(i).lt.0) then
hreg(i) = hreg(i)-incr
if (hreg(i).ge.0) hreg(i) = -1
endif
end do
hreg(irowp) = 0
end do
C
C-----------------------------------------------------------------C
Mezclar etas L y U.
C-----------------------------------------------------------------endif
nleta = neta
neta = nleta+nueta
nlelem = nelem
nelem = nlelem+nuelem
if (nelem.ge.nemax) then
write (lo,8005)
stop
endif
if (nuelem.gt.0) then
C

C-----------------------------------------------------------------C
Desplazar vectores IE y E de los elementos de U.
C-----------------------------------------------------------------nf = nemax-nuelem+1
incr = 0
do i = nf,nemax
incr = incr+1
iaux = nlelem+incr
ie(iaux) = ie(i)
e(iaux) = e(i)
end do
C
C-----------------------------------------------------------------C
Redefinir vector LE de los elementos eta.
C-----------------------------------------------------------------idif = nemax-nlelem-nuelem
nf = ntmax-nueta+1
incr = 0
do i = nf,ntmax
incr = incr+1
le(nleta+incr) = le(i)-idif
end do
le(neta+1) = nelem+1
endif
C
C-----------------------------------------------------------------C
Insertar holgura en columnas borradas.
C-----------------------------------------------------------------do i = 1,nrow
if (jh(i).eq.0) then
jh(i) = i
irowp = i
call unpack (i)
call ftran (iuno)
call wreta (irowp)
endif
end do
C
C-----------------------------------------------------------------C
-1
-1
-1
C
Adaptar x:
x = B b - B Nx = B (b-Nx )
C
N
N
C-----------------------------------------------------------------do i = 1,nrow
y(i) = b(i)
end do
do j = 1,ncol
if (kinbas(j).eq.(-2)) then
de = 0
else if (kinbas(j).eq.(-1)) then
de = xub(j)
else if (kinbas(j).eq.0) then
de = xlb(j)
else
cycle
endif
do i = la(j),la(j+1)-1
ir = ia(i)
y(ir) = y(ir)-a(i)*de
end do
end do
call ftran (iuno)
do i = 1,nrow
x(i) = y(i)
end do
C
C-----------------------------------------------------------------C
Imprimir estad
sticas de inversi
on.
C-----------------------------------------------------------------nofd = nelem-neta
nstr = nrow-nslck
if (inibb.eq.0) write (lo,8500) nbnonz,nstr,nabove,nbelow,nlelem,
+
nleta,nuelem,nueta,nofd,neta
C
C-----------------------------------------------------------------C
-1
C
Calcular en y: b - B(B (b - Nx ) - Nx ) y chequear error rela.
C
N
N
C-----------------------------------------------------------------do i = 1,nrow
y(i) = b(i)
end do
x2max = cero
do j = 1,ncol
if (kinbas(j).eq.(-2)) then
de = 0
else if (kinbas(j).eq.(-1)) then
de = xub(j)
else if (kinbas(j).eq.0) then
de = xlb(j)
else
de = x(kinbas(j))
endif

E.4 Listado de BBMI

do i = la(j),la(j+1)-1
ir = ia(i)
y(ir) = y(ir)-a(i)*de
end do
end do
call ftran (iuno)
eemax = cero
do i = 1,nrow
eemax = dmax1(dabs(y(i)),eemax)
x(i) = x(i)+y(i)
x2max = dmax1(dabs(x(i)),x2max)
end do
if (x2max.ne.cero) ermax = eemax/x2max
if (inibb.eq.0) write (lo,(4X,Error relativo en x:,D14.6,))
+
ermax
if (ermax.le.ztolze) go to 8800
if (ztrel.gt.0.1) go to 8800
ztrel = 0.5
go to 10
C
8800 continue
if (inibb.eq.0) write (lo,8900)
return
C
8000 format(*** Matriz singular)
8005 format(*** Espacio para vectores ETA insuficiente; ,
+
el programa se para//
incrementar E(.) y NEMAX)
8500 format(/*** Estad
sticas de INVERT/4x,i5,
+
elementos no cero en la base/4x,i5,
+
columnas estructurales en la base/4x,i5,
+
vectores columna antes del "bump"/4x,i5,
+
vectores columna despu
es del "bump"/4x,L:,i5,
+
elementos no cero;,i5, vectores ETA/4x,U:,i5,
+
elementos no cero;,i5, vectores ETA/4x,Total:,i5,
+
elementos no en la diagonal;,i5, vectores ETA)
8900 format(//Ite. Inf. Nopt. Sum.Inf/F.Obj,
+
Entra de-a Cost.Red Sale de-a
Paso , Pivote El.Eta)
C
C
Fin de -INVERTend
subroutine normal
C
C
Se coordinan todas las subrutinas necesarias para llevar a
C
cabo la resoluci
on de un programa lineal por el m
etodo
C
simplex revisado.
C
C******* Descripci
on de vectores afectados *****
C
C
B
:= Termino de la derecha del problema.
C
C
KINBAS := Estado en el que se encuentran los componentes
C
del vector X de variables de decisi
on:
C
=0, variable en su l
mite inferior;
C
=-1, variable en su l
mite superior;
C
=-2, variable libre: especificada FR;
C
=>0, variable b
asica, el n
umero indica
C
el vector fila sobre el que pivota.
C
C
QSTAT
:= Variable CHARACTER que indica el estado de la
C
soluci
on: I, no factible; F, factible.
C
C
XLB, XUB := L
mites inferior y superior de las variables.
C
C
JH
:= Vector que indica la columna con la que pivota
C
cada vector fila.
C
C
LA, IA, A := Vectores donde se guarda toda la informaci
on
C
relativa a la matriz de los coeficientes
C
de las condiciones.
C
C
-1
-1
-1
C
X
:= vector B b - B Nx = B (b-Nx )
C
C
LE, IE, E := Vectores donde se guarda toda la informaci
on
C
relativa a la matriz de las
C
transformaciones elementales eta.
C
C
YTEMP1, YTEMP2, YTEMP3 := vectores de trabajo.
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
integer hrtype(4000)
C
character*1 ast,move1*4,move2*4
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos

805

C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
if (itsinv.ge.invfrq) then
call invert
itsinv = 0
endif
C
C******************************************************************
C
Comienzo iteraciones del m
etodo simplex revisado.
C
Paso 1. Asignaci
on de precios.
C
C******************************************************************
1500 continue
call formc (hrtype)
call btran
C
C******************************************************************
C
Paso 2. Determinaci
on columna de pivotaci
on JCOLP.
C******************************************************************
call price (jcolp)
C
C---------------------------------------C
Comprobar si se ha llegado al
optimo.
C---------------------------------------itcnt = itcnt+1
itsinv = itsinv+1
if (jcolp.eq.0) return
C
call unpack (jcolp)
call ftran (1)
C
C******************************************************************
C
Paso 3. Determinaci
on fila de pivotaci
on IROWP Y pivotaci
on.
C******************************************************************
call chuzr (hrtype,jcolp,irowp,npivot,iptype,theta,ivout)
C
C******************************************************************
C
Paso 4. Escritura de resultados intermedios.
C******************************************************************
if (inibb.eq.0) then
ast =
if (npivot.eq.1) then
if (rcost.gt.0.0) then
move1 = L->B
else
move1 = U->B
endif
if (iptype.eq.(-1)) then
move2 = B->U
else
move2 = B->L
endif
else
ast = *
if (rcost.gt.0.0) then
move1 = L->U
move2 = L->U
else
move1 = U->L
move2 = U->L
endif
endif
if (jcolp.le.nrow) then
ivines = jcolp+ncol-nrow-1
else
ivines = jcolp-nrow
endif
if (ivout.le.nrow) then
ivoute = ivout+ncol-nrow-1
else
ivoute = ivout-nrow
endif
sumobj = x(1)*min
if (ninf.gt.0) sumobj = suminf
write (lo,8000) itcnt,ninf,nopt,sumobj,ivines,ast,move1,rcost*
+
min,ivoute,ast,move2,theta,rpivot,nelem
endif
C
if (npivot.eq.1) then
if (nelem.ge.nemax) then
call invert
itsinv = 0

806

Apendice E. El programa BBMI

go to 1500
else
call wreta (irowp)
endif
endif
if (itsinv.ge.invfrq) then
call invert
itsinv = 0
go to 1500
endif
if (itcnt.ge.itrfrq) then
write (lo,( L
mite de iteraciones excedido,
+
; el programa se para.))
stop
endif
go to 1500
C
5500 format(i6, iteraciones. La soluci
on en este punto es:)
8000 format(i4,2i5,d15.7,i5,a,1x,a,d9.2,i5,a,a,2d9.2,i6)
C
C

Fin de -NORMALend

subroutine parame
C
C
Se inicializan ciertos parametros.
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
C
iu = 20
lo = 21
C
cero = 0.0D+00
uno = 1.0D+00
dos = 2.0D+00
iuno = 1
idos = 2
plinfy = 1.0D+20
C
ad = 4.0D+00/3.0D+00
20 continue
bd = ad-uno
cd = bd+bd+bd
eps = dabs(cd-uno)
if (eps.eq.cero) go to 20
epmcd = eps
C
nrmax = 1000
nemax = 35000
ntmax = 8000
maxnod = 1500
namax = 15000
ncolma = 4001
itsinv = 999999
ztolze = 1.0D-10
ztolpv = epmcd**(dos/3.0)
ztcost = 1.0D-6
toleta = epmcd**0.8D+00
C
return
C
C
END OF -PARAMEend
subroutine penlts(irowp,idir,iptype)
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C

*
*
Se calculan las penalizaciones P , P y P para cada variable
U
D
G
b
asica no entera debiendo serlo. Tambi
en se comprueba la
existencia de separaciones forzadas para variables no
no b
asicas. Como variable de separaci
on se escoge aquella
con la mayor penalizaci
on. La siguiente acci
on se lleva
a cabo en la direcci
on opuesta a la de m
axima penalizaci
on.
La de m
axima penalizaci
on se a
nade a la lista de las
que se analizar
an m
as adelante. El a
nadido de ramas al

arbol enumerativo se hace en la subrutina BRANCH llamada


desde aqu
.
/--\
| |
\--/
/
/
/

\
\
\

X >= N + 1
P
P

C
X <= N
/P
P \
C
P
P
/
D
U \
C
/
\ IDIR=1
C
/ IDIR=-1
\
C
/--\
/--\
C
| |
| |
C
\--/
\--/
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
C
qfix =

do i = 2,nrow
if (dfpart(i).le.ztolze) then
pu(i) = cero
pd(i) = cero
pg(i) = cero
else
pu(i) = plinfy
pd(i) = plinfy
pg(i) = plinfy
endif
end do
C
C******************************************************************
C
Se analizan todas las variables (COL=J=2,NCOL) no b
asicas:
C
KINBAS(J)=-1 o KINBAS(J)=0.
C******************************************************************
do j = 2,ncol
if (kinbas(j).le.0.and.dabs(xub(j)-xlb(j)).gt.ztolze) then
C
C-----------------------------------------------------------------C
Se calcula
C
-1
C
B N
C
J
C-----------------------------------------------------------------call unpack (j)
call ftran (1)
C
C-----------------------------------------------------------------C
Se comprueban incrementos positivos para variables no b
asicas
C
en su l
mite inferior y negativos para no b
asicas
C
en su l
mite superior.
C-----------------------------------------------------------------if (kinbas(j).eq.(-1)) then
do i = 1,nrow
y(i) = -y(i)
end do
endif
C
C-----------------------------------------------------------------C
Para las variables no b
asicas que no han de tomar
C
valores enteros hacemos el valor TA0K=0;
C
para aquellas que s
, TA0j=Y(1).
C
Y(1) = A
(ver referencia).
C
00
C-----------------------------------------------------------------if (j.lt.nvare) then
ta0j = 0.0
else
ta0j = y(1)
endif
C
C-----------------------------------------------------------------C
Comprobar bifurcaci
on forzada con respecto a la variable x ;
C
j
C
es decir, si al mover una variable no b
asica que ha de tomar
C
un valor entero una unidad, se obtiene peor funci
on
C
objetivo que la calculada hasta este momento; crear una
C
nueva rama en la que esa variable este fija.
C-----------------------------------------------------------------if (j.ge.nvare) then
xival = x(1)-y(1)
if (xival.le.xincva) then
idir = 2*kinbas(j)+1

E.4 Listado de BBMI

icol = j
call branch (icol,idir)
if (idir.eq.(-1)) xlb(icol) = xub(j)
if (idir.eq.1) xub(icol) = xlb(j)
if (icol.le.nrow) then
icol = icol+ncol-nrow-1
else
icol = icol-nrow
endif
if (qfix.eq.
) then
write (qfix,(A,I4,A)) FIJ,icol,
else
write (qfix,(A,I4,A)) FIJ,icol,*
endif
cycle
endif
endif
C
do i = 2,nrow
if (jh(i).ge.nvare.and.dfpart(i).gt.ztolze) then
C
C-----------------------------------------------------------------C
Calcular la penalizaci
on P que determinara el acotar la
C
U
C
variable b
asica x(i), que toma un valor no entero,
C
superiormente y consecuentemente una no b
asica x saldr
a
C
de su l
mite.
j
C-----------------------------------------------------------------if (y(i).lt.(-ztolpv)) then
de = dmax1(y(1)*(dfpart(i)-1)/y(i),ta0j)
pu(i) = dmin1(de,pu(i))
endif
C
C-----------------------------------------------------------------C
Calcular la penalizaci
on P que determinara el acotar la
C
D
C
variable b
asica x(i), que toma un valor no entero,
C
inferiormente y consecuentemente una no b
asica x saldr
a
C
de su l
mite.
j
C-----------------------------------------------------------------if (y(i).gt.ztolpv) then
de = dmax1(y(1)*dfpart(i)/y(i),ta0j)
pd(i) = dmin1(de,pd(i))
endif
C
C-----------------------------------------------------------------C
Calcular la penalizaci
on P asociada a la introducci
on de un
C
corte de Gomory.
G
C
C
Primero, analizar las variables no b
asicas x que no han
C
de tomar valores enteros.
j
C-----------------------------------------------------------------if (j.lt.nvare) then
if (y(i).gt.0.0) then
de = dfpart(i)*y(1)/y(i)
pg(i) = dmin1(de,pg(i))
else if (y(i).lt.0.0) then
de = (dfpart(i)-1)*y(1)/y(i)
pg(i) = dmin1(de,pg(i))
endif
else
C
C-----------------------------------------------------------------C
Segundo, analizar las variables no b
asicas x que s
han de
C
tomar valores enteros.
j
C-----------------------------------------------------------------dp = dabs(y(i))-dble(idint(dabs(y(i))))
if (dp.gt.ztolze.and.dp.lt.1-ztolze) then
if (y(i).lt.0.0) dp = 1-dp
if (dp.gt.dfpart(i)) then
de = (1-dfpart(i))*y(1)/(1-dp)
else
de = dfpart(i)*y(1)/dp
endif
pg(i) = dmin1(de,pg(i))
endif
endif
endif
end do
endif
end do
C
C******************************************************************
C
Calcular la penalizaci
on P m
axima y comprobar si se pueden
C
G
G
C
abandonar las ramas que partir
an del nudo en que nos
C
encontramos y que resultar
an de imponer nuevos l
mites a
C
variables que debiendo ser enteras no cumplen este requisito
C
de momento.
C******************************************************************
pen = cero
do i = 2,nrow
if (jh(i).ge.nvare) pen = dmax1(pen,pg(i))

807

end do
xival = x(1)-pen
if (xival.le.xincva) then
idir = 0
return
endif
C
C******************************************************************
C
Comprobar si las penalizaciones P o P por imponer nuevos
C
U
D
C
l
mites a la variable x(i) hacen que las soluciones
C
continuas obtenibles son peores que la "titular"
C
entera hasta este momento.
C******************************************************************
ntemp2 = 0
do i = 2,nrow
if (jh(i).ge.nvare.and.x(1)-dmax1(pd(i),pu(i)).le.xincva) then
if (pu(i).le.pd(i)) then
C
C-----------------------------------------------------------------C
Asi es: se a
nade a la lista de nudos a analizar
C
posteriormente el que reulta de bifurcar desde el nudo en
C
que nos encontramos en la direcci
on resultante de acotar
C
la variable x(i) inferiormente. Seguiremos inmediatamente
C
analizando la rama resultante de acotar x(i) superiormente.
C-----------------------------------------------------------------xival = x(1)-pd(i)
idir = -1
irowp = i
icol = jh(irowp)
ntemp2 = 1
call branch (icol,idir)
xlb(icol) = dble(ipart(i)+1)
else
C
C-----------------------------------------------------------------C
Asi es: se a
nade a la lista de nudos a analizar
C
posteriormente el que resulta de bifurcar desde el nudo en
C
que nos encontramos en la direcci
on resultante de acotar
C
la variable x(i) superiormente. Seguiremos inmediatamente
C
analizando la rama resultante de acotar x(i) inferiormente.
C-----------------------------------------------------------------xival = x(1)-pu(i)
idir = 1
irowp = i
icol = jh(irowp)
ntemp2 = 1
call branch (icol,idir)
xub(icol) = dble(ipart(i))
endif
endif
end do
C
C******************************************************************
C
Las penalizaciones P o P por imponer nuevos l
mites a la
C
U
D
C
variable x(i) no hacen presagiar que las soluciones
C
continuas obtenibles son peores que la "titular" entera
C
hasta este momento; se elige con respecto a qu
e variable
C
bifurcar y en qu
e direcci
on.
C******************************************************************
if (ntemp2.eq.0) then
pen = 0.0
irowp = 0
C
C-----------------------------------------------------------------C
Se determina como variable de bifurcaci
on aquella que tenga
C
una mayor penalizaci
on P o P esperando as
agotar
C
D
U
C
pronto el
arbol que parta de aqu
.
C-----------------------------------------------------------------do i = 2,nrow
if (jh(i).ge.nvare) then
if (pu(i).le.pd(i)) then
if (pd(i).gt.pen) then
pen = pd(i)
irowp = i
idir = -1
revbnd = dble(ipart(i)+1)
endif
else if (pu(i).gt.pen) then
pen = pu(i)
irowp = i
idir = 1
revbnd = dble(ipart(i))
endif
endif
end do
C
C-----------------------------------------------------------------C
Problemas... Todas las penalizaciones P y P de las variables
C
son cero: degeneraci
on.
D
U
C
Elegir cualquier variable b
asica no entera como variable

808

Apendice E. El programa BBMI

C
de bifurcaci
on; anadir a la lista de nudos a analizar
C
la rama resultante de acotar superiormente la variable x(i)
C
y analizar a continuaci
on la derivada de acotar
C
inferiormente la variable.
C-----------------------------------------------------------------if (irowp.eq.0) then
do irowp = 2,nrow
if (jh(irowp).ge.nvare.and.dfpart(irowp).gt.ztolze)
+
exit
end do
pen = pu(irowp)
idir = 1
revbnd = dble(ipart(irowp))
endif
icol = jh(irowp)
xival = x(1)-pen
call branch (icol,idir)
if (idir.eq.(-1)) xlb(icol) = revbnd
if (idir.eq.1) xub(icol) = revbnd
endif
if (idir.eq.(-1)) iptype = 0
if (idir.eq.1) iptype = -1
C
return
C
C
Fin de -PENLTSend
subroutine price(jcolp)
C
C
Se asignan precios a las columnas no b
asicas y se determina
C
la columna no b
asica JCOLP a entrar en la base.
C
C
t -1
t t -1
t
C
Z = C B b + (c -c B N)x ;
en este caso c = 0.
C
B
N B
N
N
C
C
El coste reducido de la columna no b
asica a es
C
j
C
t -1
C
-c B a .
C
B
j
C
C******* Descripci
on de vectores afectados *****
C
C
KINBAS := Estado en el que se encuentran los componentes
C
del vector X de variables de decisi
on:
C
=0, variable en su l
mite inferior;
C
=-1, variable en su l
mite superior;
C
=-2, variable libre: especificada FR;
C
=>0, variable b
asica, el n
umero indica
C
el vector fila sobre el que pivota.
C
C
XLB, XUB := L
mites inferior y superior de las variables.
C
C
LA, IA, A := Vectores donde se guarda toda la informaci
on
C
relativa a la matriz de los coeficientes
C
de las condiciones.
C
C
Y
:= El vector columna a .
C
j
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
cmin = plinfy
cmax = -plinfy
nopt = 0
C
C******************************************************************
C
C
alculo de los costes reducidos de todas las variables no
C
b
asicas.
C
C
t -1
C
r = c - c B a .
C
j
j
B
j
C
C
en este caso c =0.

C
j
C
C
La funci
on onjetivo se podra mejorar (este es un problema de
C
maximizaci
on, si
C
C
r > 0
para x =l
---> KINBAS(J)=0
C
j
j j
C
O
C
r < 0
FOR
x =u
---> KINBAS(J)=-1
C
j
j j
C
C******************************************************************
jcolp = 0
do j = 1,ncol
if (dabs(xub(j)-xlb(j)).gt.ztolze.and.kinbas(j).le.0) then
dsum = cero
do i = la(j),la(j+1)-1
dsum = dsum-a(i)*y(ia(i))
end do
if (kinbas(j).eq.(-2)) then
jcolp = j
rcost = dsum
if (dabs(dsum).gt.ztcost) nopt = nopt+1
else if (kinbas(j).eq.0) then
if (dsum.gt.ztcost) nopt = nopt+1
if (dsum.gt.cmax) then
cmax = dsum
jcol1 = j
endif
else
if (dsum.lt.(-ztcost)) nopt = nopt+1
if (dsum.lt.cmin) then
cmin = dsum
jcol2 = j
endif
endif
endif
end do
C
if (jcolp.ne.0) return
if (cmax.lt.ztcost) then
if (cmin.gt.(-ztcost)) then
jcolp = 0
rcost = cero
else
jcolp = jcol2
rcost = cmin
endif
else if (cmin.le.(-ztcost)) then
if (cmax.le.dabs(cmin)) then
jcolp = jcol2
rcost = cmin
else
jcolp = jcol1
rcost = cmax
endif
else
jcolp = jcol1
rcost = cmax
endif
C
return
C
C
Fin de -PRICEend
subroutine testx
C
C
Se comprueba la soluci
on
optima obtenida del programa lineal
C
rechaz
andose el nudo no gener
andose, por tanto, a partir
C
de el ninguna rama si:
C
(1) la soluci
on PL no es factible (QSTAT = N);
C
(2) el valor de la funci
on objetivo de PL es peor que el
C
de la mejor soluci
on entera obtenida hasta este
C
momento;
C
(3) la soluci
on PL es entera.
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),

E.4 Listado de BBMI

+
+

b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
yen(1000)

C
C
xival = x(1)
C
C******************************************************************
C
Calcular parte entera y fraccionaria de cada variable b
asica.
C******************************************************************
do i = 2,nrow
if (x(i).ge.(-ztolze)) then
ipart(i) = idint(x(i)+ztolze)
else
ipart(i) = idint(x(i)+ztolze)-1
endif
dfpart(i) = dabs(x(i)-dble(ipart(i)))
end do
C
C******************************************************************
C
Comprobar si se ha obtenido una soluci
on entera.
C******************************************************************
noint = 0
do i = 2,nrow
if (jh(i).ge.nvare.and.dfpart(i).gt.ztolze) noint = noint+1
end do
if (noint.ne.0) return
C
C******************************************************************
C
Si; se ha obtenido una soluci
on entera. Si es mejor que la
C
actual guardarla y sacar informacion.
C******************************************************************
qstat = ENTERA
if (inibb.eq.0) then
write (lo,( *** La soluci
on inicial del programa,
+
lineal es la soluci
on ENTERA OPTIMA ***))
return
endif
if (xival.le.xincva) return
xincva = xival
if (nvare.le.ncol) then
do i = nvare,ncol
kinben(i) = kinbas(i)
if (kinbas(i).eq.(-1)) then
xinc(i) = dnint(xub(i))
if (dabs(xub(i)-xlb(i)).le.ztolze) kinben(i) = -3
endif
if (kinbas(i).eq.0) then
xinc(i) = dnint(xlb(i))
if (dabs(xub(i)-xlb(i)).le.ztolze) kinben(i) = -3
endif
if (kinbas(i).gt.0) xinc(i) = dnint(x(kinbas(i)))
end do
endif
C
do i = 1,nvare-1
kinben(i) = kinbas(i)
if (kinbas(i).eq.(-1)) then
xinc(i) = xub(i)
if (dabs(xub(i)-xlb(i)).le.ztolze) kinben(i) = -3
endif
if (kinbas(i).eq.0) then
xinc(i) = xlb(i)
if (dabs(xub(i)-xlb(i)).le.ztolze) kinben(i) = -3
endif
if (kinbas(i).gt.0) xinc(i) = x(kinbas(i))
end do
do i = 2,nrow
y(i) = cero
end do
y(1) = uno
call btran
do i = 1,nrow
yen(i) = y(i)
end do
nsolen = nsolen+1
call wrilpr (2)
return
C
C
Fin de -TESTXend
subroutine unpack(iv)
C
C
Se expande un vector columna de la matriz A guardado como
C
disperso insertando ceros apropiadamente.
C
C******* Descripci
on de vectores afectados *****
C
C
IV
:= Indice del vector columna a expandir.
C
C
LA, IA, A := Vectores donde se guarda toda la informaci
on
C
relativa a la matriz de los coeficientes
C
de las condiciones.

809

C
C
Y
:= El vector columna a .
C
iv
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
C
do i = 1,nrow
y(i) = cero
end do
C
ll = la(iv)
kk = la(iv+1)-1
do i = ll,kk
ir = ia(i)
y(ir) = dble(a(i))
end do
C
return
C
C
Fin de -UNPACKend
subroutine wreta(irowp)
C
C
Se guarda la nueva matriz elemental eta resultado de la
C
iteraci
on y pivotaci
on correspondiente.
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),
+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
C
C
nelem = nelem+1
ie(nelem) = irowp
e(nelem) = y(irowp)
C
do i = 1,nrow
if (i.ne.irowp.and.dabs(y(i)).gt.ztolpv) then
nelem = nelem+1
ie(nelem) = i
e(nelem) = y(i)
endif
end do
C
neta = neta+1
le(neta+1) = nelem+1
return
C
C
Fin de -WRETAend
subroutine wrilpr(ipa)
C
C
Se escriben los resultados del problema.
C
C******************************************************************
C
implicit integer*4(i-n),real*8(a-h,o-p,r-z),character*8(q)
C
character*3 qll,qllb,qul,qulb,qeq,qeqb,qbas,qbs
character*14 char1,char2
C
common /iolog/ iu,lo,logu
C
common /defpa/ nrmax,ncolma,nemax,ntmax,maxnod,namax,itsinv,ztolze
+
,ztolpv,ztcost,toleta,epmcd,plinfy,cero,uno,dos,iuno,idos
C
common /nodbb/ ipart(1000),ivid(1500,2),nvare,listl,listsa,noint,
+
idepth,qfix,xincva,xival,revbnd,dfpart(1000),xinc(4000),
+
xiobnd(1500),vbnd(1500),pu(1000),nsolen,pd(1000),pg(1000)

810

Apendice E. El programa BBMI

d2 = xubi
if (kinbas(i).gt.0) then
ytempi = x(kinbas(i))
bact = bi+ytempi
qbs = qbas
if (ytempi.lt.ztolze) qbs = qbsd
else if (kinbas(i).eq.0) then
bact = bi
qbs = qll
else
bact = bi+xubi
qbs = qul
endif
endif
if (dabs(xubi-xlb(i)).lt.ztolze) then
qbs = qeq
if (kinbas(i).gt.0) qbs = qbsd
bact = bi
d1 = bi
d2 = bi
endif
write (char1,(G14.8)) d1
if (d1.le.(-plinfy)+ztolze) char1 =
Ninguno
write (char2,(G14.8)) d2
if (d2.ge.plinfy-ztolze) char2 =
Ninguno

common /parlp/ jh(1000),la(4001),ia(15000),le(8001),ie(35000),


+
kinbas(4000),kinben(4000),inibb,itcnt,invfrq,itrfrq,nrow,nrwm1,
+
ncol,nelem,neta,nleta,nueta,ninf,min,nopt,logite,qname(4000),
+
qnampo,qstat,a(15000),suminf,rcost,rpivot,x(1000),y(1000),
+
b(1000),xci(4000),xlb(4000),xcs(4000),xub(4000),e(35000),
+
yen(1000)
C
data
data
data
data
data
data
data
data
data
data

qbas/ BS/
qll/ LI/
qul/ LS/
qeq/ EQ/
qfx/ FX/
qllb/LIB/
qulb/LSB/
qeqb/EQB/
qfr/FR/
qbsd/BSD/

C
C
go to (1,2,3) ipa
C
C******************************************************************
C
Imprimir valor de la funci
on objetivo y alguna estad
stica.
C******************************************************************
1 continue
if (qstat.eq.INFEAS) then
write (lo,910)
stop
endif
write (lo,10)
lode = lo
go to 8
2 continue
call cputim (time,cput)
lode = logu
write (lo,13) x(1)*min,time
if (logite.eq.0) return
write (logu,12) time
go to 8
3 continue
if (inibb.eq.0) return
lode = lo
if (nsolen.eq.0) then
write (lo,16)
return
endif
write (lo,11)
do i = 1,ncol
if (kinben(i).eq.0) xlb(i) = xinc(i)
if (kinben(i).eq.(-1)) xub(i) = xinc(i)
if (kinben(i).eq.(-3)) then
xlb(i) = xinc(i)
xub(i) = xinc(i)
endif
if (kinben(i).gt.0) x(kinben(i)) = xinc(i)
kinbas(i) = kinben(i)
end do
do i = 1,nrow
y(i) = yen(i)
end do
C
8 continue
write (lode,14) qnampo,itcnt,x(1)*min
C
C******************************************************************
C
Imprimir resultados de las condiciones: ROWS
C******************************************************************
char1 =
Ninguno

write (lode,20) 1,qname(1),qbas,x(1)*min,(-x(1)*min),char1,char1,


+
1.0
do i = 2,nrow
ytempi = 0.0
yi = y(i)
bi = b(i)
xubi = xub(i)
if (a(i).gt.0.0) then
d1 = -xubi
d2 = bi
if (kinbas(i).gt.0) then
ytempi = x(kinbas(i))
bact = bi-ytempi
qbs = qbas
if (ytempi.lt.ztolze) qbs = qbsd
else if (kinbas(i).eq.0) then
bact = bi
qbs = qul
else
bact = bi-xubi
qbs = qll
endif
else
d1 = bi

C
write (lode,20) i,qname(i),qbs,bact,ytempi,char1,char2,yi*min
end do
C
C******************************************************************
C
Imprimir resultados de las variables: COLUMNS.
C******************************************************************
write (lode,30)
C
do i = nrow+1,ncol
redco = cero
if (kinbas(i).eq.(-2)) then
xtemp = cero
qbs = qfr
else if (kinbas(i).eq.(-1)) then
xtemp = xub(i)
if (dabs(xub(i)-xcs(i)).le.ztolze) then
qbs = qul
else
qbs = qulb
endif
else if (kinbas(i).eq.0) then
xtemp = xlb(i)
if (dabs(xlb(i)-xci(i)).le.ztolze) then
qbs = qll
else
qbs = qllb
endif
else
xtemp = x(kinbas(i))
qbs = qbas
go to 45
endif
do j = la(i),la(i+1)-1
redco = redco-y(ia(j))*a(j)
end do
45
continue
if (dabs(xub(i)-xlb(i)).le.ztolze) then
xtemp = xlb(i)
if (dabs(xub(i)-xcs(i)).le.ztolze.and.dabs(xlb(i)-xci(i))
+
.le.ztolze) then
qbs = qfx
else
qbs = qeqb
endif
endif
C
write (char1,(G14.8)) xlb(i)
if (xci(i).le.(-plinfy)+ztolze) char1 =
Ninguno

C
write (char2,(G14.8)) xub(i)
if (xcs(i).ge.plinfy-ztolze) char2 =
Ninguno

C
act2 = 0.0
do j = la(i),la(i+1)-1
if (ia(j).eq.1) act2 = -a(j)*min
end do
write (lode,40) i-nrow,qname(i),qbs,xtemp,act2,char1,char2,
+
redco*min
end do
C
if (logite.eq.1.and.ipa.ne.3) write (logu,150)
C
return
C
10 format(/21x,--- SOLUCION INICIAL PROGRAMA LINEAL ---/25x,32()
+
/)

E.4 Listado de BBMI

11 format(/26x,--- SOLUCION ENTERA OPTIMA ---/30x,22(-)/)


16 format(/31x,--- NO SE HA ENCONTRADO SOLUCION ENTERA --/34x,35(
+
-)/)
12 format(/34x,--- SOLUCION ENTERA ---/38x,15(-)//
+

Tiempo desde
ultima:,f9.4, seg.)
13 format(/* Nueva soluci
on entera; z(PE)=,f17.5,
+
; Tiempo desde
ultima:,f9.4, seg.)
14 format(4x,Nombre del problema: ,a/4x,No. de iteraciones: ,i9/
+
4x,Valor de la funci
on objetivo: ,g30.15///*** FILAS//
+
No. ..Fila.. en ....Valor.... ,
+
...Holgura... .L
.Inferior. ,.L
.Superior. Val.Dual./)
20 format(i4,1x,a,a,2g14.8,2a14,g10.4)
30 format(//*** COLUMNAS// No. .Columna en ,
+
....Valor.... Coste en F.O. .L
.,
+
Inferior. .L
.Superior. Cos.Red./)
40 format(i4,1x,a,a,2g14.8,2a14,g9.3)
150 format(// Variable,28x,Nudos,
+

Variables
Valor /
+
Separaci
on
Nivel
Direcci
on
en Lista ,
+
Ent. No Ent. Iteraci
on
Func. Obj.)
910 format(El Problema No es Factible)

C
C

Fin de -WRILPRend
subroutine cputim(cpur,cput)

C
integer*2 ih,im,is,ihs
C
doubleprecision cpur,cput
C
save aux
data aux/0.0/
C
call gettim (ih,im,is,ihs)
aux1 = ih*3600.0+im*60.0+is+ihs/100.0
cpur = dble(aux1-aux)
cput = dble(aux1)
aux = aux1
C
return
C
C

Fin de -CPUTIMend

811

Apendice

EL PROGRAMA CCNET

L PROGRAMA CCNET es una especializacion escrita en C del metodo simplex


revisado, dise
nada para resolver problemas de ujos en redes de mnimo coste de
grandes dimensiones de la forma:
minimizar cT x
sujeta a

Ax = b
lxu,

(F.1)

donde c, x, l, u n , b m y A mn es una matriz de incidencia nudo-arco en la que


cada vector columna, aj , esta dado por:

1, si el arco j llega al nudo i.

aij =

1, si el arco j sale del nudo i.


0, si los nudos i y j no estan unidos por ning
un arco.

Para evitar la singularidad existente en la matriz A, tal como se indica en el captulo 9, se


a
nade un vector unitario e1 = (1, 0, . . . , 0) para conseguir rango completo. Este vector columna,
como es sabido, se puede interpretar como un arco articial desde el nudo raz (nudo 1) a uno
cticio.
Los elementos del vector b representan los ujos ex
ogenos a los nudos de acuerdo con el
criterio siguiente:
bi < 0, si i es un nudo de demanda o sumidero;
bi > 0, si i es un nudo de oferta o fuente;
bi = 0, si i es un nudo de transbordo.
El algoritmo utilizado en Ccnet, su mecanica, estructuras de datos y la forma de adaptarlas,
siguen elmente lo expuesto en el captulo 9.
La soluci
on b
asica factible de partida se obtiene creando una base de arcos (variables)
articiales, es decir, un arbol con raz en el nudo 1 al que se unen todos los restantes de la
813

814

Apendice F. El programa CCNET

red mediante unos arcos articiales orientados de tal forma que se acomoden todos los ujos
exogenos dados. Una vez creada la base de partida, el programa sigue el metodo de Grigoriadis
[1986], denominado de Penalizaci
on Gradual (GPM: Gradual Penalty Method). En el primer
paso de este metodo se asigna una penalizaci
on a todos los arcos articiales del arbol inicial.
Posteriormente, se itera normalmente hasta obtener una soluci
on optima con esa penalizacion.
Si hay arcos articiales con ujo positivo en ese optimo, se aumenta la penalizaci
on, se vuelven
a calcular las variables duales y se contin
ua iterando. El metodo termina cuando:
en la soluci
on optima no hay arcos articiales con ujos positivos;
la penalizaci
on es sucientemente grande:
el problema no tiene soluci
on factible pues hay arcos articiales en el arbol b
asico
con ujo positivo, o
el problema es no acotado pues existe un ciclo negativo de capacidad innita.
Si no se puede aumentar m
as la penalizaci
on, y hay al menos un arco articial positivo en el
arbol b
asico, se produce una salida del programa, indic
andose tal circunstancia.

F.1

Ejecuci
on del programa

Al lanzar el programa para resolver un problema, se puede especicar si se desea o no que en


el chero de resultados aparezca la informaci
on relativa a todo el proceso iterativo que ha sido
necesario efectuar. Si se desea, ademas de teclear el nombre del ejecutable de Ccnet, hay que
incluir la especicaci
on -i. Es decir,
CCNET -i
ejecutar
a el programa Ccnet requiriendosele que incluya entre los resultados informaci
on
relativa al proceso iterativo llevado a cabo.

F.2

Datos del problema

Los datos del problema a resolver deber


an estar en un chero cuyo nombre el propio programa
demandar
a al comienzo de la ejecucion mediante el requerimiento:
Fichero entrada:
Los resultados y el proceso de optimizacion aparecer
an en un chero que el programa automaticamente designa como nombre.cnt, donde nombre es el mismo que el introducido como
respuesta al requerimiento mencionado.
En el chero de datos se introducen los valores de las variables que denen el problema
a resolver. El formato con el que se pueden escribir es libre; no as el orden en que deben

F.2 Datos del problema

815

escribirse. Este
es:

m, n (enteros).
mxit (entero), f rq (doble), p0 (doble), pbar (doble), ncand (entero),
cpmax (doble).
3 a n + 3: para cada arco de la red, nudo origen, f rom (entero); nudo destino, to
(entero); coeciente, coste (doble), en la funci
on objetivo; cota inferior,
l (doble) y cota superior, u, (doble).
n + 4:
nonz (entero), n
umero de ujos ex
ogenos distintos de cero en la red.
n + 5:
vector, bnz (entero), con las posiciones en el vector b de los nonz ujos
exogenos distintos de cero.
n + 6:
vector, rhs (doble), con los valores de los elementos del vector b distintos
de cero (ujos ex
ogenos).

Lnea 1:
Lnea 2:
Lnea

Lnea
Lnea
Lnea

Una vez introducidos los datos numericos de cada lnea, se pueden a


nadir todos aquellos comentarios que puedan contribuir a claricar el signicado de los valores. Este es el caso de los
datos del ejemplo que se incluye en el apartado dedicado a los resultados obtenibles.
El signicado de algunas de las variables apuntadas es el siguiente:

m
n
mxit
f rq

n
umero de nudos de la red.
n
umero de arcos.
n
umero maximo de iteraciones a llevar a cabo.
frecuencia con la que se desea se realice el pricing de los arcos; en % de n.
Los arcos candidatos para entrar en la base se seleccionan tomando cada k-esimo
arco de la lista de arcos, donde k = f rq n 0,01 + 0,5. En cada iteraci
on, el
arco que se toma para esta b
usqueda se elige secuencialmente desde 1 a k 1.
La mejor eleccion de f rq depende de la clase de problema que se quiere resolver.
Generalmente, f rq debe ser elegido en el rango 0,8%8,0%. Un valor aconsejable
para este par
ametro es 1,5.
ncand n
umero de arcos de entre los que se selecciona el que va a entrar en la base. En
este caso, f rq viene dado en % de ncand.
p0
multiplicador constante de la penalizaci
on para los arcos articiales. Se usa para
controlar la magnitud del valor de la penalizaci
on inicial. Un valor aconsejable de
este parametro es 1.
pbar base de la exponencial del multiplicador de p0 (debe ser mayor que 1). Se usa
para controlar el ndice de crecimiento de la penalizaci
on en los pasos sucesivos del
procedimiento. Un valor aconsejable para este par
ametro es 1,5.
cpmax valor m
aximo de la penalizaci
on. Normalmente este valor debe ser grande: mayor
que p0.

816

Apendice F. El programa CCNET

F.3

Resultados

Como ejemplo de las posibilidades de Ccnet resolveremos el ejemplo 9.4 de la pagina 521, es
decir:
min. x1 + x2 + 3x3 + 10x4
s. a

x1
+ x3 + x4
x1 + x2
x2 x3 x4
0 x1
0 x2
0 x3
0 x4

= 5
= 0
= 5
4
2
4
10.

El chero de datos de este problema es el que se detalla a continuaci


on.
3, 4
500, 8.0, 1.0, 1.5, 100
1, 2, 1.0, 0.0, 4.0
2, 3, 1.0, 0.0, 2.0
1, 3, 3.0, 0.0, 4.0
1, 3, 10., 0.0, 10.
2
1, 3
5.0, -5.0

Tama
no del problema: nudos(M), arcos(N)
mxit, frq, p0, pbar, cpmax
Arco 1: nudo FROM, nudo TO, coste, cotas
Arco 2:
"
"
"
"
Arco 3:
"
"
"
"
Arco 4:
"
"
"
"
N
umero de flujos ex
ogenos no iguales a cero
Nudos con flujos ex
ogenos no iguales a cero
Flujos ex
ogenos

El resultado que produce Ccnet es el que sigue.


--- ESTADISTICAS DEL PROBLEMA --------------------------3 Nudos
4 Arcos
2 Arcos artificales
Iter.
1
2
3

Artif.
1
1
0

Sum.Inf/F.Obj
5.00000
3.00000
13.00000

Entra
1
2*
3

de->a
L->B
L->U
L->B

Cost.Red
-9.000
-8.000
-7.000

Sale de->a
A
2* L->U
A

--- SOLUCION PROGRAMA LINEAL CON CONDICIONES DE RED ------------------------------------------------Valor de la funci


on objetivo:
No. de iteraciones:
No. de pasos con aumento de flujo nulo:
No. de pasos en los que el
arbol no cambia:
No. de incrementos del coste de penalizac.:
Ultimo multiplicador del coste de penalizac.:
Ultima penalizaci
on para arcos artificiales:

*** NUDOS ***


Nudo ..... Valor ..... Valor dual
NUDO1
5.000
0.000
NUDO2
0.000
-1.000
NUDO3
-5.000
-3.000

13.000
3
1
1
1
1.000
10.000

Paso
0.000
2.000
3.000

Artpen
10.000
10.000

F.3 Resultados

817

*** ARCOS ***


Arco ... Estado ... Valor ... Coste F.O. ... L.Inf. ... L.Sup. ... Coste Red.
X1
BS
2.000
1.000
0.000
4.000
0.000
X2
LS
2.000
1.000
0.000
2.000
-1.000
X3
BS
3.000
3.000
0.000
4.000
0.000
X4
LI
0.000
10.000
0.000
10.000
7.000
Tiempo de c
alculos:

0.05 segundos

Para que el lector compruebe la diferencia pr


actica que puede suponer resolver un problema
de optimizaci
on en redes con un procedimiento especialmente dise
nado al efecto y con otro de
prop
osito general, basado en el mismo algoritmo simplex pero sin especializar sus estructuras de datos, en la tabla F.1 se indican los segundos de cpu obtenidos, llegando a la misma
soluci
on, en un ordenador HP APOLLO 9000 730 (23 MFLOPS LINPACK precisi
on doble),
con los programas Ccnet, Bbmi y Minos 5.1, para resolver unos problemas generados con
el codigo Netgen, ver Klingman [1974]. El programa Minos 5.1, ver Murtagh y Saunders
[1987], es un programa general para optimizaci
on lineal y no lineal de problemas de muy grandes dimensiones. Constituye, sin duda, un est
andar mundial entre los c
odigos de optimizaci
on.
Tabla F.1
Segundos de c.p.u. invertidos en una estaci
on de trabajo HP APOLLO 9000 730 para resolver
diversos problemas de optimizaci
on en redes
Nudos
150
500
1000
3000
5000
10000

Arcos
900
3000
5000
10000
30000
85000

CCNET
0,04
0,28
0,65
3,59
18,92
195,69

BBMI
0,70
10,10
51,33
419,90
2.208,56
22.129,18

MINOS 5.1
0,88
9,81
48,47
650,31
2.782,93
24.478,51

F.4 Listado de CCNET

819

F.4 Listado de CCNET

/***********************************************************/
/*
*/
/* Rutinas para la resoluci
on de un problema lineal de
*/
/*
flujo en una red utilizando el m
etodo simplex de
*/
/*
Penalizaci
on Gradual (GPM: Gradual Penalty Method) */
/*
*/
/***********************************************************/

fprintf(ouf,"
}

Artpen\n");

time = time_ib();
xnet();
time = time_ib();
imprime(time);
return;

/***********************************************************/
/* Declaraci
on de variables
*/
/***********************************************************/
/* Variables externas

}
/*************************************************************/
#include <time.h>

*/

int bt,cycl,icom,irt,it,it0,ith,itmi,itmj,itmjd;
int karc,lgam,lencyc,lnod,natlrt,nswp,numart,oldarc,pas;
double artpen,aug,cp,cycst,mac,magnc,maxf,mic,objv;
double tolbg,tolnf,tolpn,tolsm,tolz,totinf;
int *arc,*d,*f,*p,*r;
double *x,*u,*cred;
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int m,mxit,n,modwr;
double cpmax,frq,p0,pbar;
int *bnz,*from,*to;
double *c,*h,*lb,*rhs;
FILE *ouf;

float time_ib()
{
float aux1,aux2;
static float aux;
aux1=clock()/(float)CLOCKS_PER_SEC;
aux2=aux1-aux;
aux=aux1;
return(aux2);
}
/*************************************************************/
void dim()
{
extern int *arc,*d,*f,*p,*r,*bnz;
extern double *x,*u,*cred;
extern void *calloc();

main(argc,argv)
int argc;
char *argv[];
{
FILE *inf;
static char app[] = ".cnt";
char filein[16];
char lin[85];
char flt[20];
int i,nonz;
float time,time_ib();
void dim(),xnet(),imprime();
if(!strcmp(argv[argc-1],"-i")) modwr = 1;
else modwr = 0;
printf("\n Fichero entrada: ");
scanf("%s",filein);
inf = fopen(filein,"r");
fgets(lin,85,inf);
sscanf(lin,"%ld%*c%ld",&m,&n);
fgets(lin,85,inf);
sscanf(lin,"%ld%*c%lf%*c%lf%*c%lf%*c%lf",&mxit,&frq,&p0,
&pbar,&cpmax);
dim();
/* Lectura de los vectores FROM, TO, COSTES, CAPACIDAD */
for(i=0;i<n;i++){
fgets(lin,85,inf);
sscanf(lin,"%ld%*c%ld%*c%lf%*c%lf%*c%lf",&from[i],&to[i],
&c[i],&lb[i],&h[i]);
}

arc
d
f
p
r
from
to
bnz

=
=
=
=
=
=
=
=

(int
(int
(int
(int
(int
(int
(int
(int

*)calloc(m,sizeof(int));
*)calloc(m,sizeof(int));
*)calloc(m,sizeof(int));
*)calloc(m,sizeof(int));
*)calloc(m,sizeof(int));
*)calloc(n,sizeof(int));
*)calloc(n,sizeof(int));
*)calloc(m,sizeof(int));

c
h
lb
x
u
rhs
cred

=
=
=
=
=
=
=

(double
(double
(double
(double
(double
(double
(double

*)calloc(n,sizeof(double));
*)calloc(n,sizeof(double));
*)calloc(n,sizeof(double));
*)calloc(m,sizeof(double));
*)calloc(m,sizeof(double));
*)calloc(m+1,sizeof(double));
*)calloc(n,sizeof(double));

}
/*************************************************************/
/*
XNET()
*/
/*
*/
/*
Entrada directa al m
etodo simplex
*/
/*************************************************************/
void xnet()
{
void xnmach(),xnchlim1(),xnsmpx(),xnchlim2();
xnmach();
xnchlim1();
xnsmpx();
xnchlim2();
}

/* Lectura de los RHS distintos de cero */


fgets(lin,85,inf);
sscanf(lin,"%ld",&nonz);
for (i=0;i<nonz;i++) fscanf(inf,"%ld%*c",&bnz[i]);
fgets(lin,85,inf);
/* Lectura del valor de los RHS */
for (i=0;i<nonz;i++) fscanf(inf,"%lf%*c",&rhs[bnz[i]]);
fclose(inf);
sprintf(flt,"%s%s",filein,app);
printf("
Fichero de salida: %s\n",flt);
ouf=fopen(flt,"w");
fprintf(ouf,"\n
--- ESTADISTICAS DEL ");
fprintf(ouf,"PROBLEMA ---\n
-----");
fprintf(ouf,"--------------------\n\n");
fprintf(ouf,"
%4d Nudos\n",m);
fprintf(ouf,"
%4d Arcos\n",n);
fprintf(ouf,"
%4d Arcos artificales\n\n\n",m-1);
if(modwr){
fprintf(ouf," Iter. Artif.
Sum.Inf/F.Obj Entra
de-");
fprintf(ouf,">a
Cost.Red
Sale de->a
Paso");

/*************************************************************/
/*
XNCHLIM1()
*/
/*
*/
/*
Cambio de variable para resolver el problema con
*/
/* todas las cotas inferiores iguales a cero.
*/
/*************************************************************/
void xnchlim1()
{
int i;
aug= 0.0;
for(i=0;i<n;i++)
/* Cambio de variable para los arcos con capacidad m
nima
distinta de cero */
if(lb[i] != 0.0){
/* -- Cambio de la capacidad
h[i] -= lb[i];

*/

/* -- Cambio del flujo ex


ogeno (lado derecho)
rhs[from[i]] -= lb[i];
rhs[to[i]] += lb[i];

*/

821

822

Apendice F. El programa CCNET

xnpeny(&cpn,&pennew,&numrtn);
/* -- Cambio en la funci
on de coste
aug += c[i]*lb[i];
}
}

*/
/* Se comprueba si la primera penalizaci
on calculada es demasiado grande para esta m
aquina */
if (numrtn != 0) prext(3,1);

/*************************************************************/
/*
XNCHLIM2()
*/
/*
*/
/*
Se deshace el cambio de variable hecho en XNCHLIM1() */
/* para los arcos con capacidad m
nima distinta de cero.
*/
/*************************************************************/

/* La penalizaci
on para los arcos artificiales es acertada
cp = cpn;
artpen = pennew;
/* Variables duales
xndual();

*/

*/

numrtn = xnph0();
if (numrtn != 0) prext(3,2);

void xnchlim2()
{
int i;

/* C
alculo del valor objetivo de la soluci
on o
ptima
xnobjv();
}

for(i=0;i<n;i++)
/* Cambio de variable para los arcos con capacidad m
nima
distinta de cero */
if(lb[i] != 0.0){
/* -- Cambio de la capacidad */
if (h[i] < 0.0) h[i] -= lb[i];
else h[i] += lb[i];
/* -- Cambio del flujo ex
ogeno (lado derecho)
rhs[from[i]] += lb[i];
rhs[to[i]] -= lb[i];
}
}

*/

*/

/*************************************************************/
/*
XNINIT()
*/
/*
*/
/*
Comprobaci
on de los datos pbar, p0, cpmax y c
alculo de */
/*
it.
*/
/*
*/
/*
Sequencia de subrutinas llamadas desde xninit:
*/
/*
xninar()
*/
/*
xnintr()
*/
/*************************************************************/
void xninit()
{
void xninar(),xnintr(),prext();

/*************************************************************/
/*
XNMACH()
*/
/*
*/
/*
Definici
on de los valores de tolerancia por defecto
*/
/* que se utilizan para esta implementaci
on.
*/
/*************************************************************/

/* Contador del n
umero de iteraciones
itmj = 0;

*/

/* Contador del n
umero de veces que ith=3
itmi = 0;

*/

/* Contador del n
umero de veces que maxf=0 (caso degenerado)*/
itmjd = 0;
void xnmach()
{
/* N
umero de bits por longitud de palabra entera
bt
= 32;

artpen = 0.0;
cp = 0.0;
pas = 0;

*/

if((pbar <= 1.0) || (p0 <= tolz) || (cpmax < p0)) prext(4,1);
it = (int)(frq*n*0.01+0.5);

/* Tolerancia de infactibilidad */
tolnf = 1.0e-09;

it = (it > 1) ? it : 1;
/* N
umero suficientemente grande que representa el infinito */
tolbg = 1.0e20;

xninar();
xnintr();

/* N
umero suficientemente peque
no que reprsenta el cero */
tolsm = 1.0e-30;

/* Tolerancia del cero; usada para comprobar contra cero */


tolz = 1.0e-10;

/*************************************************************/
/*
XNINAR()
*/
/*
*/
/*
Comprobaci
on de los datos de capacidad, coste, from,
*/
/* to y c
alculo de los costes m
aximo y m
nimo.
*/
/*************************************************************/

/* Tolerancia del pricing */


tolpn = -1.0e-04;
}
/*************************************************************/
/*
XNSMPX()
*/
/*
*/
/*
Control del flujo del m
etodo simplex para una red uti- */
/* lizando el m
etodo de penalizaci
on.
*/
/*
*/
/* Sequencia de subrutinas llamadas desde xnspmx :
*/
/*
xninit()
*/
/*
xnpeny()
*/
/*
xndual()
*/
/*
xnph0()
*/
/*
xnobjv()
*/
/*
prext(sub,cs) */
/*************************************************************/

mac = -tolbg;
mic = tolbg;
for(j=0;j<n;j++){
if(h[j] < 0.0) prext(5,1);
if(fabs(c[j]) <= tolsm) c[j] = 0.0;
/* mac = m
aximo coste
mic = m
nimo coste

*/

if(c[j] > mac) mac = c[j];


if(c[j] < mic) mic = c[j];

void xnsmpx()
{
void xninit(),xnpeny(),xndual(),xnobjv(),prext();
int xnph0();
int numrtn;
double cpn,pennew;

if((from[j] > m) || (to[j] > m) || (from[j] <= 0) ||


(to[j] <= 0) || (from[j] == to[j])) prext(5,2);
}
/* Asignaci
on de los flujos ex
ogenos a los arcos del a
rbol
artificial inicial; x[i] = flujo por el arco i */

xninit();
/* Penalizaciones iniciales

void xninar()
{
double fabs();
int j;
double imic,imac,flow;

*/

for(j=1,flow=0.0;j<=m;j++){

F.4 Listado de CCNET

x[j] = rhs[j];
flow += rhs[j];
}
if(fabs(flow) > tolnf) prext(5,3);

else {
big = tolbg;
isame = 0;
diffc = mac - mic;
*numrtn = 0;

imic = fabs(mic);
imac = fabs(mac);
magnc = (imic > imac) ? imic : imac;

cmagm = magnc*(m-1)+1;
if(fabs(diffc) >= 1.0) cpt = (cmagm-mic)/diffc;
else {
cpt = cmagm/(1.0+fabs(mic));
isame = 1;
}
cpt = (cpt < cpmax) ? cpt : cpmax;

}
/*************************************************************/
/*
XNINTR()
*/
/*
*/
/*
Construcci
on del a
rbol inicial con arcos artificiales */
/* de profundidad 1 y asignaci
on de los valores iniciales de */
/* las x[i] (= flujo por arco i).
*/
/*************************************************************/

do {
pas++;
ppw = 1.0;
if (pas != 1)
if(pas-2 > bt) {
ictr = 1;
pas--;
}
else {
ppw = pow(pbar,pow(2.0,(double)(pas-2)));
if(ppw >= big/p0) {
ictr = 1;
pas--;
}
}

void xnintr()
{
int i;
totinf = 0.0;
irt = 1;
/* Se hace siempre que irt sea el nudo 1 */
for(i=1;i<=m;i++){
u[i] = 0.0;
f[i] = irt;
p[i] = i+1;
if(i < m) r[i+1] = i;
d[i] = 1;
arc[i] = -1;
if(x[i] < 0) x[i] = -x[i];
else if(x[i] > 0) f[i] = -irt;
totinf += x[i];
}
totinf
x[irt]
p[m] =
r[irt]
f[irt]
d[irt]
numart

-= x[irt];
= 0.0;
irt;
= m;
= 0;
= 0;
= m-1;

/* C
alculo de cpn y pennew

/* -- No se incrementa la penalizaci
on por encima del max
necesitado*/
if(*cpn > cpt) *cpn = cpt;
trialp = (isame == 0) ? (*cpn)*diffc+mic :
(*cpn)*(1+fabs(mic));
*pennew = (double) ((int) (trialp + 0.5));
}
} while ((*pennew <= artpen) && (ictr == 0));
}
/* No se puede incrementar mas el valor de la penalizaci
on

}
/*************************************************************/
/*
XNPENY()
*/
/*
*/
/*
C
alculo de la penalizaci
on para los arcos artificiales.*/
/*
*/
/*
Variables de entrada:
*/
/*
*/
/*
- cp
: u
ltimo multiplicador del coste de penali-*/
/*
zaci
on.
*/
/*
- artpen : u
ltimo coste de penalizaci
on de los arcos*/
/*
artificiales.
*/
/*
- pas
: n
umero de veces que se ha calculado o in-*/
/*
crementado el coste de penalizaci
on.
*/
/*
- cpmax : valor m
aximo para cp.
*/
/*
*/
/*
Variables de salida:
*/
/*
*/
/*
numrtn = 0 penalizaci
on incrementada:
*/
/*
*/
/*
- cpn
: multiplicador del coste de penalizaci
on */
/*
para el nuevo paso.
*/
/*
- pennew : nuevo coste de penalizaci
on para los ar- */
/*
cos artificiales.
*/
/*
*/
/*
numrtn = 1 no se puede incrementar la penalizaci
on : */
/*
*/
/*
Variables de inter
es:
*/
/*
*/
/*
- pas
: n
umero de veces que se ha calculado o in- */
/*
crementado el coste de penalizaci
on.
*/
/*************************************************************/
void xnpeny(cpn,pennew,numrtn)
double *cpn,*pennew;
int *numrtn;
{
double fabs(),pow();
int ictr,isame;
double big,cmagm,cpt,diffc,ppw,trialp;
ictr = 0;
if(cp >= cpmax) ictr = 1;

*/

if (ictr == 0) {
*cpn = p0*ppw;

*/

if(ictr == 1) {
*cpn = cp;
*pennew = artpen;
*numrtn = 1;
}
}
/*************************************************************/
/*
XNDUAL()
*/
/*
*/
/*
C
alculo de las variables duales basadas en el a
rbol
*/
/* actual.
*/
/*************************************************************/
void xndual()
{
int i,idi,nfathr;
double costa;
u[irt] = 0.0;
i = p[irt];
while(i != irt) {
idi = arc[i];
costa = (idi == -1) ? artpen : c[idi];
nfathr = f[i];
if(nfathr > 0) costa = -costa;
u[i] = u[abs(nfathr)] + costa;
i = p[i];
}
}
/*************************************************************/
/*
XNPH0()
*/
/*
*/
/*
Implementaci
on del m
etodo de penalizaci
on gradual (GPM).*/
/*
*/
/*
Secuencia de subrutinas llamadas desde xnph0 :
*/
/*
xnpr20() */
/*
xnatl() */
/*
xnupdf() */
/*
xnpivt() */
/*
xnpeny() */
/*
xndual() */
/*
xncycl() */
/*************************************************************/

823

824

Apendice F. El programa CCNET

/* Se calcula el pricing con todos los arcos */


int xnph0()
{
void xnpr20(),xnatl(),xnupdf(),xnpivt(),xnpeny(),xndual(),
xncycl();
int xnchk();
int iext,nchrtn,npenrt,numrtn;
double cpn,pennew;

while(iter == 0) {
if(it0 >= it){
it0 = 0;
nswp++;
}
it0++;
minz = tolbg;
for(i=it0-1;i<n;i+=it){
iz = u[to[i]] - u[from[i]] + c[i];
cred[i] = iz;
if(h[i] < 0) iz = -iz;

numrtn = nswp = it0 = iext = cycl = 0;


while (iext != 1) {
if(mxit > itmj) {
xnpr20();
if(karc != -1) {
/* C
alculo del arco que sale de la base

/* Se toma el primer arco con coste reducido menor */


if(iz < tolpn)
if (iz < minz) {
minz = iz;
karc = i;
}
}
/* No hay ning
un arco candidato para entrar en la base

*/

xnatl();
oldarc = arc[lnod];
switch(natlrt) {
/* -- Paso no degenarado: se actualiza el flujo para los arcos
en el BEP */
case 1: xnupdf();
if(ith != 3) {
xnpivt();
itmj++;
}
else itmi++;
break;
/* -- Paso degenerado (maxf= 0)
case 2: itmjd++;
xnpivt();
itmj++;
break;

*/

/* -- Arco artificial en un ciclo; se calcula una penalizaci


on
mayor */
case 3: xnpeny(&cpn,&pennew,&npenrt);
if(npenrt == 0) {
/* Se ha podido incrementar la penalizaci
on*/
cp = cpn;
artpen = pennew;
xndual();
}
else numrtn = iext = 1;
break;
/* -- Aumento infinito de flujo; c
alculo del ciclo y salida
case 4: xncycl();
iext = cycl = 1;
break;
}
if(modwr) wrstat();
}
else {
/* No hay ning
un arco candidato para entrar en la base

*/

*/

nchrtn = xnchk();
if(nchrtn == 0) iext = 1;
else if(nchrtn == 2) numrtn = iext = 1;
}
}
else prext(6,1);
}
return(numrtn);
}
/*************************************************************/
/*
XNPR20()
*/
/*
*/
/*
C
alculo de los costes reducidos y del arco que entra
*/
/* en la base karc.
*/
/*
*/
/*
Devuelve :
*/
/*
- karc = -1 todos los arcos sobre los que */
/*
se ha calculado pricing son optimos.*/
/*
- karc != -1 arco karc entra en la base. */
/*************************************************************/
void xnpr20()
{
int i,j,iter,itp;
double iz,minz;
itp = 1;
karc = -1;
iter = 0;

*/

if((karc != -1) || (itp >= it)) iter = 1;


else itp++;
}
}
/*************************************************************/
/*
XNATL()
*/
/*
*/
/*
C
alculo del BEP, del arco que deja la base lnod, y
*/
/* del aumento de flujo a lo largo del BEP.
*/
/*
*/
/*
Devuelve :
*/
/*
*/
/*
- natlrt = 1 aumento de flujo finito (paso no dege-*/
/*
nerado)
*/
/*
= 2 paso degenerado
*/
/*
= 3 aumento de flujo infinito; arco arti- */
/*
ficial en ciclo.
*/
/*
= 4 aumento de flujo infinito no causado */
/*
por artificiales.
*/
/*
*/
/*
Variables de inter
es :
*/
/*
*/
/*
- kbnd = 1 si karc esta saturado y no esta en el*/
/*
a
rbol.
*/
/*
= 0 si karc esta a nivel 0.
*/
/*
*/
/*
- lgam = 1 si el arco que sale lnod esta en el */
/*
lado del from(karc) del BEP.
*/
/*
*/
/*
- ith
= 1 si lnod deja el a
rbol en su cota in- */
/*
ferior.
*/
/*
= 2 si lnod deja el a
rbol en su cota su- */
/*
perior.
*/
/*
= 3 si no se necesita el paso de pivotaje; */
/*
esto pasa cuando el aumento de flujo
*/
/*
m
aximo esta limitado por arco que entra*/
/*
karc.
*/
/*************************************************************/
void xnatl()
{
void prext();
double fabs();
int cmb,ext,i,idarc,idir,idk,idp,ieps,ijgam,kbnd,kfr,kfrfa;
int kto,ktofa,nartub,node,nodefa;
double artflo,curflo,flowi,hkarc,maxfk,mxfapf;
artflo = tolbg;
/* Si nartub=1, uno o mas arcos artificiales en el BEP alcanzar
an sus cotas superiores (infinitas) */
nartub = 0;
ith = 0;
cmb = 0;
ext = 0;
hkarc = h[karc];
kfr = from[karc];
kto = to[karc];
maxfk = hkarc;
kbnd = (hkarc < 0) ? 1 : -1;
/* maxfk es el aumento de flujo m
aximo en karc
maxfk = fabs(maxfk);

*/

F.4 Listado de CCNET

/* mxfapf es el aumento de flujo m


aximo en el BEP sin
considerar karc */

por ambos lados. (Se ejecuta el siguiente if si mxfapf>0 )*/


if(ext == 0){
while(kfr != kto){

mxfapf = tolbg;
/* Diferencia en profundidades de los nudos kfr y kto

*/

idp = d[kfr] - d[kto];


if(idp != 0){
if(idp > 0){
/* -- El lado del nudo from es mas profundo
ieps = -kbnd;
ijgam = 1;
node = kfr;
}
else{
/* -- El lado del nudo to es mas profundo
ieps = kbnd;
idp = -idp;
ijgam = 0;
node = kto;
}

*/

*/

/* Se recorre hacia arriba el lado mas profundo y se busca el


arco que deja la base */
lgam = ijgam;
for(i=0;(i<idp && ext==0);i++) {
idarc = arc[node];
nodefa = f[node];
idir = (nodefa > 0) ? 1 : -1;
curflo = x[node];
/* Se comprueba la direccion del arco idarc con respecto al
BEP */
if(idir == ieps){
/* Arco idarc en la misma direccion que el BEP; puede incrementar su flujo (caso ith = 2). */

/* Avanza un nivel hacia arriba desde el lado del nudo to


( misma logica del for anterior ) */
idarc = arc[kto];
ktofa = f[kto];
idir = (ktofa > 0) ? 1 : -1;
curflo = x[kto];
if(idir == kbnd) {
if(idarc == -1){
flowi = artflo;
if(mxfapf >= flowi) nartub = cmb = 1;
}
else{
flowi = fabs(h[idarc]);
if(flowi < tolbg) flowi = flowi-curflo;
if(mxfapf > flowi) cmb = 1;
}
if(cmb == 1) {
ith = 2;
lgam = 0;
mxfapf = flowi;
lnod = kto;
cmb = 0;
}
}
else if(mxfapf > curflo) {
ith = 1;
mxfapf = curflo;
lnod = kto;
lgam = 0;
}
kto = abs(ktofa);
kfrfa = f[kfr];
if(mxfapf > tolsm){
/* Avanza un nivel hacia arriba desde el lado del nudo from
( misma l
ogica del for anterior ) */

if(idarc == -1) {

idarc = arc[kfr];
idir = (kfrfa > 0) ? 1 : -1;
curflo = x[kfr];
if(idir == kbnd){
if(mxfapf > curflo) {
ith = 1;
mxfapf = curflo;
lnod = kfr;
lgam = 1;
}
}
else{
if(idarc == -1){
flowi = artflo;
if(mxfapf >= flowi) nartub = cmb = 1;
}
else{
flowi = fabs(h[idarc]);
if(flowi < tolbg) flowi = flowi - curflo;
if(mxfapf > flowi) cmb = 1;
}
if(cmb == 1){
ith = 2;
lgam = 1;
mxfapf = flowi;
lnod = kfr;
cmb = 0;
}
}
}

/* Arco idarc es artificial basico; puede incrementar su


flujo a un flujo infinito */
flowi = artflo;
if(mxfapf >= flowi) nartub = cmb = 1;
}
else{
flowi = fabs(h[idarc]);
if(flowi < tolbg) flowi = flowi - curflo;
if(mxfapf > flowi) cmb = 1;
}
if(cmb == 1){
/* El arco que sale lnod se quedara saturado

*/

ith = 2;
lnod = node;
mxfapf = flowi;
cmb = 0;
}
}
/* Arco idarc en la direccion opuesta al BEP; puede disminuir su flujo. */
else if(mxfapf > curflo) {
/* El arco que sale lnod disminuye a su cota inferior (= 0)*/
ith = 1;
mxfapf = curflo;
lnod = node;
}
/* Se mueve al siguiente nudo hacia arriba en el a
rbol

825

kfr = abs(kfrfa);
if(mxfapf <= tolsm)
*/

/* Contin
ua avanzando hacia arriba en el BEP hasta alcanzar un
nudo comun */

node = abs(nodefa);
if(mxfapf <= tolsm) ext = 1;
}
/* Se comprueba en que lado del BEP esta el nudo node (
ultimo nudo procesado anteriormente) */

while(kfr != kto){
kfr = abs(f[kfr]);
kto = abs(f[kto]);
}
}
/* Se ha llegado al nudo comun del BEP

if(ijgam == 0) kto = node;


else kfr = node;
}
/* Profundidades iguales. Se recorre el BEP simult
aneamente

*/

icom = kfr;
}
maxf = (mxfapf < maxfk) ? mxfapf : maxfk;

826

Apendice F. El programa CCNET

else{
/* > Paso degenerado ?

*/
/* Arco karc es no b
asico en su cota inferior

*/

if(maxf <= tolsm){


if(ith == 2){
/* Paso degenerado (maxf= 0; notar que ith no puede ser 3)*/
/* Se pone el arco que sale fuera del a
rbol (no b
asico) y
saturado */

maxf = 0.0;
if(hkarc < 0.0){

idk = arc[lnod];
h[idk] = -h[idk];
}

/* El arco entrante karc esta saturado. Ser


a pivoteado despu
es (en xnpivt) y se pone su flujo igual al flujo actual
evitando asi una llamada a xnupdf */

/* Se pone arco karc no basico y saturado


h[karc] = -hkarc;
maxf = -hkarc;
}
if(ith == 2){
/* El arco que sale lnod queda saturado

/* Se recorre el BEP y se actualizan los flujos: primero por


un lado del BEP hasta llegar al nudo com
un (icom), y luego
por el otro lado */

*/

idk = arc[lnod];
h[idk] = -h[idk];
}
/* Se asigna natlrt= 2 para hacer un paso de pivoteo

i = from[karc];
augflo = maxf;
iter = 0;
while(iter <= 1){
if(i != icom){
idarc = arc[i];
ip = f[i];
change = (ip < 0) ? -augflo : augflo;
x[i] += change;
if(idarc == -1) totinf += change;
i = abs(ip);
}
else{
if(iter == 0){
augflo = -augflo;
i = to[karc];
}
iter++;
}
}

*/

natlrt = 2;
}
else{
/* Paso no degenerado; se asigna ith= 3 (ning
un cambio en el
a
rbol) si maxf est
a limitado por el flujo del arco
que entra */
if(maxf == maxfk) ith = 3;
/* > Aumento de flujo infinito ?

*/

else if(ith == 3) h[karc] = -h[karc];


}

*/

if(maxf >= tolbg) {


natlrt = 4;
if(nartub) natlrt = 3;
}

/* maxf es ahora el nuevo flujo en karc


/* Aumento de flujo finito (aqui maxf= 0 )

*/

*/
maxf = floj;
}

else natlrt = 1;
}
}
/*************************************************************/
/*
XNUPDF()
*/
/*
*/
/*
Actualizaci
on del flujo por los arcos en el BEP.
*/
/*
*/
/*
XNUPDF() es llamada solo despues de XNATL() y siempre */
/*
que:
*/
/*
*/
/*
1) maxf es finito y distinto de cero.
*/
/*
2) ith = 1,2, o
3.
*/
/*
3) XNATL devuelve natlrt = 1.
*/
/*
*/
/*
Devuelve:
*/
/*
- maxf : nuevo flujo del arco que entra karc.*/
/*
- x(.) : flujos actualizados.
*/
/*************************************************************/
void xnupdf()
{
void prext();
int i,idarc,idk,ip,iter;
double augflo,change,floj;
/* maxf = aumento de flujo en el arco karc,indicado en xnatl*/
floj = maxf;
if(h[karc] < 0) {
/* Arco karc est
a saturado y no est
a en el a
rbol

/* Se pone el arco que sale fuera del a


rbol (no b
asico) y saturado */

void xnpivt()
{
int dir,i,id1,id2,ideld,idir1,idir2,iq,isdpth,is,isav,iter;
int j,lf,lr,nsr,nrk;
double ckarc,delu,flo1,flo2;

*/

h[karc] = -h[karc];
maxf = -maxf;
floj = maxf + h[karc];
if(ith == 2){

idk = arc[lnod];
h[idk] = -h[idk];
}

/*************************************************************/
/*
XNPIVT()
*/
/*
*/
/*
Actualizaci
on de la base, despu
es de que el arco
*/
/* karc ha entrado en la base en sustituci
on del arco
*/
/* lnod.
*/
/*
*/
/*
Variables de entrada:
*/
/*
*/
/*
- lnod :
arco que sale de la base.
*/
/*
- karc :
arco que entra en la base.
*/
/*
- maxf :
nuevo flujo en el arco que entra karc.*/
/*
- lgam :
= 1 si lnod est
a en el lado del
*/
/*
from(karc)en el BEP.
*/
/*
= 0 en caso contrario.
*/
/*
- numart : no. arcos artificiales en el a
rbol.
*/
/*
*/
/*
Variables de inter
es:
*/
/*
*/
/*
- nrk :
nudo ra
z del sub
arbol que se va a ac- */
/*
tualizar.
*/
/*
- nsr :
el nuevo primer hijo de nrk
*/
/*
- iq :
nudo tal que p(iq) = lnod
*/
/*************************************************************/

if(arc[lnod] == -1) numart--;


ckarc = c[karc];
if(lgam == 1){
/* El arco lnod est
a en el lado del from(karc) en el BEP */
nsr = from[karc];
nrk = to[karc];
}
else{
/* El arco lnodest
a en el lado del to(karc) en el BEP

*/

F.4 Listado de CCNET

nsr = to[karc];
nrk = from[karc];
}

isdpth = d[is];
ideld = d[lr] - isdpth + 1;
f[is] = -idir1*lr;
idir1 = idir2;
flo2 = x[is];
x[is] = flo1;
flo1 = flo2;
id2 = arc[is];
arc[is] = id1;
id1 = id2;
}

iq = r[lnod];
lf = f[nsr];
idir1 = (lf < 0) ? -1 : 1;
lf = abs(lf);
flo1 = x[nsr];
id1 = arc[nsr];
f[nsr] = nrk;
if(lgam == 1) f[nsr] = -f[nsr];
x[nsr] = maxf;
arc[nsr] = karc;
isdpth = d[nsr];
dir = (f[nsr] >= 0) ? -1 : 1;

}
/* Ya se han recorrido todos los nudos en el tronco de pivotaje;
se conecta el sub
arbol reordenado al a
rbol principal */
if(iq == nrk){

/* Diferencia entre los nuevos y los antiguos valores duales


(delu = coste reducido del arco que entra) */

/* El nudo ra
z del BEP no cambia de sucesor;
se actualiza solo el u
ltimo nudo del sub
arbol

delu = u[nrk] - u[nsr] + dir*ckarc;


/* Diferencia entre las nuevas y las antiguas profundidades */

/* Actualizaci
on del u
ltimo nudo del sub
arbol

ideld = d[nrk] - d[nsr] + 1;


/* Inicializaci
on de las variables del siguiente bucle;
*/
/*
*/
/* Variables de inter
es:
*/
/*
i = recorre los nudos del sub
arbol.
*/
/*
is = indica el nudo ra
z del sub
arbol.
*/
/*
lr = sucesor de nsr en el a
rbol sin actualizar
*/
/*
(nudo ra
z del sub
arbol recorrido anteriormente).*/
/*
lf = recorre el tronco principal de pivotaje hacia
*/
/*
arriba en el a
rbol sin actualizar.
*/

*/

p[i] = j;
r[j] = i;
}
else {
*/

p[i] = isav;
r[isav] = i;
/* Actualizaci
on del nudo del arco que sale y permanece en el
a
rbol principal */
p[iq] = j;
r[j] = iq;
}
}

lr = p[nsr];
isav = p[nrk];
j = lr;
i = nrk;
is = nsr;
iter = 0;

/*************************************************************/
/*
XNOBJV()
*/
/*
*/
/*
C
alculo de la funcion objetivo.
*/
/*************************************************************/

/* Se recorren los nudos del sub


arbol por medio de los sucesores */
while(iter == 0){
p[i] = is;
r[is] = i;
i = is;

void xnobjv()
{
double fabs();
int i,iarc;
objv = 0;

/* Actualizaci
on de las variables duales y la profundidad

*/
for(i=1;i<=m;i++){

u[i] += delu;
d[i] += ideld;

/* Arcos con flujo positivo y no artificiales en el a


rbol

while(p[i] != lr){
i = p[i];
u[i] += delu;
d[i] += ideld;
}
if(d[j] > isdpth){

*/

iarc = arc[i];
if((fabs(x[i]) > tolz) && (iarc != -1))
objv += x[i]*c[iarc];
}

/* Se actualizan los sucesores de is por el lado izquierdo


del sub
arbol */

/* Arcos saturados fuera del a


rbol

*/

for(i=0;i<n;i++)
if(h[i] < 0) objv += (-h[i])*c[i];
}

/* Se actualizan los sucesores de is por el lado derecho del


sub
arbol */
/*************************************************************/
/*
XNCHK()
*/
/*
*/
/*
Comprobaci
on de optimalidad / factibilidad.
*/
/*
*/
/*
Devuelve :
*/
/*
- nirtn = 0 soluci
on o
ptima o no hay soluci
on*/
/*
factible.
*/
/*
= 1 se aumenta el valor de la penali-*/
/*
zaci
on.
*/
/*
= 2 no se puede incrementar mas la
*/
/*
penalizaci
on.
*/
/*************************************************************/

p[i] = j;
r[j] = i;
}
while(d[j] > isdpth){
i = j;
u[i] += delu;
d[i] += ideld;
j = p[j];
}
if(is == lnod) iter = 1;
else{
/* Se mueve al siguiente nudo en el tronco de pivotaje

*/

lr = is;
is = lf;
lf = f[is];
/* Se actualiza la informaci
on para el nuevo nudo is
idir2 = (lf < 0) ? -1 : 1;
lf = abs(lf);

*/

int xnchk()
{
void xndual(),prext();
int nirtn,numrtn;
double cm,dbig,dflm,npenc,ptry,xnumhi;
nirtn = 0;
if(totinf > tolnf){
/* Existen arcos artificiales positivos;

827

828

Apendice F. El programa CCNET

si artpen > (m-1)*m


aximo coste, entonces se garantiza que
no existe soluci
on factible. */
if((artpen/(m-1)) >= magnc) prext(15,1);
else {
/* No se puede decidir si hay soluci
on factible; se incrementa
el valor de la penalizaci
on para todos los arcos artificiales. */
cm = magnc;
xnpeny(&ptry,&npenc,&numrtn);
if(numrtn == 0) {
/* xnpeny sugiere que la penalizaci
on debe ser aumentada.
Se comprueba si es posible implementar este incremento;
( > es la longitud de palabra suficiente para el peor caso
de coste reducido m
aximo con la nueva penalizaci
on ? )
*/
dflm = (double) m;
dbig = tolbg/dflm;
xnumhi = cm*(dflm - 2)/dflm + 2*npenc/dflm;
if(xnumhi < dbig){
/* Se puede incrementar la penalizaci
on

*/

cp = ptry;
artpen = npenc;
xndual();
nirtn = 1;
}
}
/* No se puede incrementar mas la penalizaci
on; se acaba el
proceso */
if((numrtn != 0) || (xnumhi >= dbig)) nirtn = 2;
}
}
return(nirtn);
}
/*************************************************************/
/*
XNCYCL()
*/
/*
*/
/*
Identifica y clasifica el ciclo negativo (cuya existen-*/
/* cia es conocida anteriormente a la llamada a esta subru- */
/* tina).
*/
/*
Mientras se traza el BEP esta subrutina no considera la*/
/* direcci
on de los arcos.
*/
/*
*/
/*
Devuelve:
*/
/*
- lencyc : n
umero de arcos en el ciclo.
*/
/*
- cycst : suma de los costes de los arcos en*/
/*
el ciclo; (sin tener en cuenta su */
/*
direccion).
*/
/*
- r
: vector de la lista de los arcos en*/
/*
el ciclo; (nota: la lista del pre-*/
/*
orden inverso se pierde despues de*/
/*
un ciclo negativo).
*/
/*************************************************************/
void xncycl()
{
int iarc,iter,next,node,i;
double artcs,costa;

cycst = c[karc];

/*************************************************************/
/*
IMPRIME()
*/
/*
*/
/*
Impresi
on de los resultados del proceso.
*/
/*************************************************************/

void imprime(time)
float time;
{
int i,j,alt=0,deg=0;

*/

artcs = artpen;
lencyc = 1;
r[1] = karc;
next = node = from[karc];
iter = 0;
while(iter <= 1)
if(next != icom){
lencyc++;
iarc = arc[next];
r[lencyc] = iarc;
costa = (iarc != -1) ? c[iarc] : artcs;
cycst += costa;
next = abs(f[next]);
}
else{
if(node != to[karc]) next = node = to[karc];
iter++;
}
}

void prext(sub,cs)
int sub,cs;
{
switch(sub){
case 3 : printf("
Stop en xnsmpx.\n
Razon: ");
if(cs == 1){
printf("el numrtn de xnpeny es distinto de ");
printf("0.\nLa primera penalizaci
on no puede");
printf(" ser calculada porque es muy grande ");
printf("para esta m
aquina.\n");
}
if(cs == 2){
printf("el numrtn de xnph0 es distinto de 0");
printf(".\nArco artificial en ciclo; la penal");
printf("izaci
on para los arcos artificiales, ");
printf("particularmente aquellos en el ciclo,");
printf(" no se puede incrementar m
as.\n");
}
break;
case 4 : printf("
Stop en xninit.\n
Raz
on: ");
if(cs == 1) {
printf("pbar <= 1, p0 <= tolz o ");
printf("cpmax < p0\n");
}
break;
case 5 : printf("
Stop en xninar\n
Raz
on: ");
if(cs == 1) {
printf("hay un arco de capacidad negativa o ");
printf("con l
mite inferior mayor que la ca");
printf("pacidad.\n");
}
if(cs == 2){
printf("mala definici
on de los vectores from,");
printf(" to, o ambos.\n");
}
if(cs == 3) printf("Problema infactible\n");
break;
case 6 : printf("
Stop en xnph0\n
Razon: ");
printf("Se ha sobrepasado el m
aximo n
umero de i");
printf("teraciones\n");
break;
case 15: printf("
Stop en xnchk\n
Razon: ");
printf("No existe soluci
on factible, porque art");
printf("pen > (m-1)*magnc\n");
break;
}
exit(0);
}

#include <stdio.h>

/* Asignaci
on a cycst del coste del arco que entra karc */

/* Coste de los arcos artificiales

/*************************************************************/
/*
PREXT()
*/
/*
*/
/*
Impresi
on de los c
odigos de error o salidas anormales */
/*
en las que el problema no es factible, o no se puede
*/
/*
alcanzar el o
ptimo.
*/
/*************************************************************/

fprintf(ouf,"\n\n
--- SOLUCION PROGRAMA LINEAL CON ");
fprintf(ouf,"CONDICIONES DE RED ---\n
---------");
fprintf(ouf,"--------------------------------------\n\n\n");
fprintf(ouf," Valor de la funci
on objetivo:
");
fprintf(ouf,"%14.3f\n",objv+aug);
fprintf(ouf," No. de iteraciones:
");
fprintf(ouf," %8d\n",itmj+itmi);
fprintf(ouf," No. de pasos con aumento de flujo nulo:
");
fprintf(ouf," %4d\n",itmjd);
fprintf(ouf," No. de pasos en los que el a
rbol no cambia:");
fprintf(ouf," %4d\n",itmi);
fprintf(ouf," No. de incrementos del coste de penalizac.:");
fprintf(ouf," %4d\n",pas);
fprintf(ouf," Ultimo multiplicador del coste de penalizac");
fprintf(ouf,".:%8.3f\n",cp);
fprintf(ouf," Ultima penalizaci
on para arcos artificiales");
fprintf(ouf,": %8.3f\n",artpen);
if(cycl){
fprintf(ouf," No. de arcos en el ciclo:
%21d\n",lencyc);

F.4 Listado de CCNET

fprintf(ouf," Suma de costes de los arcos en el ciclo:");


fprintf(ouf,"%13.3f\n",cycst);
fprintf(ouf,"\n\n\n PROBLEMA NO FACTIBLE, por la existe");
fprintf(ouf,"ncia de un ciclo negativo.\n");
fprintf(ouf," Arcos que forman el ciclo:\n\n");
for(i=1;i<=lencyc;i++)
fprintf(ouf,"
X%-3d\n",r[i]+1);
}

{
int i;
double aux = 0.0;
static char lb[] =
static char lu[] =
static char bl[] =
static char bu[] =
static char ul[] =
static char ub[] =
void xnobjv();

fprintf(ouf,"\n\n\n *** NUDOS ***\n\n");


fprintf(ouf," Nudo ..... Valor ..... Valor dual\n");
for (i=1;i<=m;i++)
fprintf(ouf," NUDO%-3d%11.3f%14.3f\n",i,rhs[i],u[i]);
fprintf(ouf,"\n");

fprintf(ouf,"%5d
%5d",itmi+itmj,numart);
if(numart > 0) aux = totinf;
else{
xnobjv();
aux = objv;
}
fprintf(ouf,"
%11.5f
%5d",aux,karc+1);
switch(natlrt){
case 1: if(ith != 3){
if(h[karc] > 0.0) fprintf(ouf,"
%s",lb);
else fprintf(ouf,"
%s",ub);
fprintf(ouf,"
%9.3f",cred[karc]);
if(oldarc != -1){
fprintf(ouf," %5d ",oldarc+1);
if(h[arc[lnod]] > 0.0) fprintf(ouf," %s",bl);
else fprintf(ouf," %s",bu);
}
else fprintf(ouf,"
A
");
}
else{
if(h[karc] < 0) {
fprintf(ouf,"*
%s
%9.3f",lu,cred[karc]);
fprintf(ouf," %5d* %s",karc+1,lu);
}
else {
fprintf(ouf,"*
%s
%9.3f",ul,cred[karc]);
fprintf(ouf," %5d* %s",karc+1,ul);
}
}
if(numart)
fprintf(ouf," %9.3f
%9.3f",maxf,artpen);
else
fprintf(ouf," %9.3f ",maxf);
break;

fprintf(ouf,"\n *** ARCOS ***\n\n ");


fprintf(ouf,"Arco ... Estado ... Valor ... Coste F.O. ...");
fprintf(ouf," L.Inf. ... L.Sup. ... Coste Red.\n");
for(i=0;i<n;i++){
fprintf(ouf,"
X%-3d
",i+1);
if(h[i] < 0.0) {
if(cred[i] == 0.0) alt = 1;
fprintf(ouf,"LS%12.3f%12.3f%13.3f%11.3f%13.3f\n",-h[i],
c[i],lb[i],-h[i],cred[i]);
}
else {
j=1;
while((arc[j] != i) && (j <= m)) j++;
if(i == arc[j]) {
if((x[j] == h[i]) || (x[j] == lb[i])) deg = 1;
fprintf(ouf,"BS%12.3f%12.3f%13.3f",x[j]+lb[i],c[i],
lb[i]);
if(h[i] == tolbg) fprintf(ouf,"%11.0e%13.3f\n",h[i],
cred[i]);
else fprintf(ouf,"%11.3f%13.3f\n",h[i],cred[i]);
}
else {
if(cred[i] == 0.0) alt = 1;
fprintf(ouf,"LI%12.3f%12.3f%13.3f",lb[i],c[i],lb[i]);
if(h[i] == tolbg) fprintf(ouf,"%11.0e%13.3f\n",h[i],
cred[i]);
else fprintf(ouf,"%11.3f%13.3f\n",h[i],cred[i]);
}
}
}
fprintf(ouf,"\n");
if (alt)
fprintf(ouf," Existen soluci
ones optimas alternativas\n");
if (deg) fprintf(ouf," Problema degenerado\n");
fprintf(ouf,"\n Tiempo de c
alculos: %5.2f segundos\n",time);
fclose(ouf);

case 2: if(maxf == 0.0) fprintf(ouf,"


%s",lb);
else fprintf(ouf,"
%s",ub);
fprintf(ouf,"
%9.3f",cred[karc]);
if(oldarc != -1){
fprintf(ouf," %5d ",oldarc+1);
if(h[arc[lnod]] > 0.0) fprintf(ouf," %s",bl);
else fprintf(ouf," %s",bu);
}
else fprintf(ouf,"
A
");
if(numart)
fprintf(ouf," %9.3f
%9.3f",maxf,artpen);
else
fprintf(ouf," %9.3f ",maxf);
break;
}
fprintf(ouf,"\n");

}
/*************************************************************/
/*
WRSTAT()
*/
/*
*/
/*
Impresi
on de resultados intermedios del proceso.
*/
/*************************************************************/
wrstat()

"L->B";
"L->U";
"B->L";
"B->U";
"U->L";
"U->B";

829

Apendice

VERSIONES EN C y
FORTRAN 90 DE LOS
PROGRAMAS DEL TEXTO EN
FORTRAN 77

N ESTE APENDICE
se listan las versiones en C y Fortran 90 de los codigos
presentados en el texto. Como en el caso de sus homologos en Fortran 77, los
que aqu incluimos s
olo intentan presentar una forma de implementar los algoritmos
expuestos base de esos codigos. Para entender estas implementaciones conviene tener
en cuenta que codicar un programa en cualquier lenguaje se parece mucho a redactar cualquier
texto: la personalidad de su autor queda reejada en la forma de hacerlo y en su fondo. El
fondo, en este caso, lo denen los algoritmos que se pretenden implementar por lo que la
delidad a ellos pretende ser absoluta.
Aun cuando el lector se puede hacer la pregunta de por que traducir a Fortran 90 los
codigos que se han listado en el texto en Fortran 77, creemos que puede ser u
til por dos
motivos esencialmente:
Porque Fortran 90 ha introducido unos cambios muy signicativos y trascendentes con
respecto al estandar que deni
o el Fortran 77, que no son trivialmente asumibles y que
potencian de forma sustancial las prestaciones de este frente a sus competidores C y
C++.
Porque una buena forma de aprender c
omo utilizar un nuevo lenguaje de programaci
on
y beneciarse de sus nuevas prestaciones es contrastarlo, con ejemplos concretos, con
codigos de probada utilidad en uno antiguo. Como los que se han estudiado en el texto
en Fortran 77 son la mayora de ellos muy sencillos, puede resultar de gran utilidad
831

832

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

pr
actica para el lector recurrir a estos en Fortran 90 y familiarizarse y entrenarse con
un lenguaje con el que tal vez tenga que convivir en el futuro.
Por lo que respecta a las versiones en C, es indudable que es en este lenguaje, y en C++,
donde se dise
nan muchas de las nuevas aplicaciones en los mundos cientco y tecnol
ogico.
Aunque el C gana terreno da a da al Fortran, los programas de dise
no y an
alisis tradicionales
de la ingeniera, de la tecnica y del an
alisis numerico siguen codicados y se codican en
Fortran. La aparici
on del nuevo est
andar Fortran 90 quiz
as detenga esa perdida de terreno
del Fortran con respecto al C. Los nuevos por venir, HPF (High Performance Fortran) y
Fortran 95, que duda cabe, contribuir
an a mejorar el panorama de lenguajes disponibles para
dise
no e implementacion de nuevas tecnicas, procedimientos de simulacion, etc.: en denitiva,
a aumentar las posibilidades que los ordenadores ofrecen para mejorar la calidad de vida de
la sociedad y resolver los retos tecnologicos que esta se plantea. Autenticos lenguajes como los
que implcitamente proporcionan los paquetes de software Matlab, Mathematica o Gauss (hay
otros, evidentemente) tambien deber
an aportar lo suyo a este respecto.

G.1

C
odigos en C

G.1.1

C
odigos del captulo 1

1. Programa Gauss de la p
agina 15.

*/
#include <stdio.h>
#include <math.h>
#define SWAPi(a,b) {int temp=a; a=b; b=temp;}
main(){
char
int
float
FILE

/*
-- Eliminaci
on de Gauss
*/

printf ("Dimension de la Matriz A?\n");


scanf ("%d", &n);
printf ("Fichero de datos?\n");
scanf ("%s", &fil);
f1
= fopen (fil, "r");
a
= matriz(n,n);
/* Reservar memoria para A */
b
= vector(n);
/*
"
"
para b */
x
= vector(n);
/*
"
"
para x */
n
-= 1;
for (j=0; j<=n; j++){
fgets (linea,81,f1);
for (i=0; i<=n; i++) a[j][i]=atof(linea+i*5);
}
fgets (linea,81,f1);
for (i=0; i<=n; i++) b[i]=atof(linea+i*5);

#include <stdio.h>
#include <math.h>
#define SWAPf(a,b) {float temp=a; a=b; b=temp;}
#define N 3
#define NN 4
main(){
int i, j, k, l;
float smax, r, c, x[NN];
static float a[NN][N+2] = {2,1,0,4,2,-4,-2,3,
-7,-9,4,1,-2,8,2,0,-3,-12,-1,2};
/*

*** Triangularizaci
on ***

*/

for (k=0, l=0; k<N; k++){


smax = fabs(a[k][k]);
for (i=k+1; i<=N; i++) if (fabs(a[i][k]) > smax){
l
= i;
smax = fabs(a[i][k]);
}
if (l) for (i=k; i<=N+1; i++) SWAPf(a[l][i],a[k][i]);
for (i=k+1; i<=N; i++){
r = a[i][k]/a[k][k];
for (j=k+1; j<=NN; j++) a[i][j] -= r*a[k][j];
}
}
/*

*** Sustituci
on inversa *** */
x[N] = a[N][NN]/a[N][N];
for (i=N-1; i>=0; i--){
for (j=i+1, c=a[i][NN]; j<=N; j++) c -= a[i][j]*x[j];
x[i] = c/a[i][i];
}
printf("Soluci
on = [%f,%f,%f,%f]\n", x[0], x[1], x[2], x[3]);
return 0;

2. Programa Gaussc de la p
agina 19.
/*
-- Resoluci
on de un sistema lineal regular cualquiera mediante
eliminaci
on de Gauss

fil[14], linea[81];
i, iaux, ip, *ipvt, *ivector(), j, k, l, n, pi;
**a, *b, c, **matriz(), r, r1, smax, *vector(), *x;
*f1;

ipvt = ivector(n);
/* Reservar memoria para ipvt */
for (i=0; i<=n; i++) ipvt[i]=i;
/*

*** Triangularizaci
on *** */
for (k=0, l=0; k<n; k++){
smax = fabs(a[ipvt[k]][k]);
for (i=k+1; i<=n; i++){
ip = ipvt[i];
if (fabs(a[ip][k]) > smax){
l
= i;
smax = fabs(a[ip][k]);
}
}
if (l) SWAPi(ipvt[k],ipvt[l]);
pi = ipvt[k];
r1 = 1.0/a[pi][k];
for (i=k+1; i<=n; i++){
ip = ipvt[i];
r = a[ip][k]*r1;
for (j=k+1; j<=n; j++) a[ip][j] -= r*a[pi][j];
a[ip][k] = -r;
}
}
for (k=0; k<n; k++){
ip = ipvt[k];
for (i=k+1; i<=n; i++){
pi
= ipvt[i];
b[pi] += a[pi][k]*b[ip];
}
}

G.1 Codigos en C

/*

833

for (l=0, sum=0; l<=k-1; l++ )sum += a[k][l]*a[l][i];


a[k][i] = (a[k][i]-sum)/a[k][k];

*** Sustituci
on inversa *** */
}
x[n] = b[ipvt[n]]/a[ipvt[n]][n];
for (i=n-1; i>=0; i--){
pi = ipvt[i];
for (j=i+1, c=b[pi]; j<=n; j++) c -= a[pi][j]*x[j];
x[i] = c/a[pi][i];
}
printf("Soluci
on: ");
for (i=0; i<=n; i++) printf("%f, ", x[i]);
printf("\n");
return 0;

}
printf ("Matriz A factorizada:\n");
for (i=0; i<=N; i++){
for (j=0; j<=N; j++) printf ("%7.2f", a[i][j]);
printf ("\n");
}
return 0;
}

4. Programa Croutp de la p
agina 33.

}
float **matriz(nf,nc)
int nf,nc;
{
int i;
float **m, *m1;

/*
-- Descomposici
on LU1 mediante el m
etodo de Crout
con pivotaci
on
*/

m1 = (float *) calloc(nf*nc,sizeof(float));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (float **) malloc(nf*sizeof(float *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++){
m[i] = m1;
m1 += nc;
}
return m;
}

#include <stdio.h>
#include <math.h>
#define N 2
#define SWAPf(a,b) {float temp=a; a=b; b=temp;}
#define SWAPi(a,b) {int
temp=a; a=b; b=temp;}
main (){
int
i, iaux, ipvt[N+1], j, k, l;
float aux, sum, smax;
static float a[N+1][N+1]={10.,10.,20.,20.,25.,40.,30.,50.,61};
for (i=0; i<=N; i++) ipvt[i]=i;
/*

m = (float *) malloc(n*sizeof(float));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return m;
}
int *ivector(n)
int n;
{
int *m;
m = (int *) malloc(n*sizeof(int));
if (!m){
printf("Error de asignaci
on de memoria en ivector\n");
abort();
}
return m;

/*
-- Descomposici
on LU1 mediante el m
etodo de Crout
*/
#include <stdio.h>
#include <math.h>

*/

for (j=0; j<=N; j++) printf ("%d", ipvt[j]+1);


printf ("\n");
printf ("Matriz A factorizada:\n");
for (i=0; i<=N; i++){
for (j=0; j<=N; j++) printf ("%8.4f", a[i][j]);
printf ("\n");
}

3. Programa Crout de la p
agina 30

*** Descomposici
on ***

for (k=0; k<=N; k++){


for (i=k, l=0, smax=0; i<=N; i++){
for (j=0, sum=0; j<=k-1; j++) sum += a[i][j]*a[j][k];
a[i][k] -= sum;
if (fabs(a[i][k]) > smax){
l
= i;
smax = fabs(a[i][k]);
}
if (l) {
for (j=0; j<=N; j++) SWAPf(a[l][j],a[k][j]);
SWAPi(ipvt[l],ipvt[k]);
}
}
for (i=k+1; i<=N; i++){
for (l=0, sum=0; l<=k-1; l++ )sum += a[k][l]*a[l][i];
a[k][i] = (a[k][i]-sum)/a[k][k];
}
}

float *vector(n)
int n;
{
float *m;

return 0;
}

5. Programa Croutl1u de la p
agina 36.
/*
-- Descomposici
on L1U mediante el m
etodo de Crout
*/

#define N 2
#include <stdio.h>
#include <math.h>

main (){
int
i, j, k, l;
float sum;
static float a[N+1][N+1]={10.,10.,20.,20.,25.,40.,30.,50.,61};
/*

*** Descomposici
on ***

#define N 2
main (){
int
i, j, k, l;
float sum;
static float a[N+1][N+1]={10.,10.,20.,20.,25.,40.,30.,50.,61};

*/

for (k=0; k<=N; k++){


for (i=k; i<=N; i++){
for (l=0, sum=0; l<=k-1; l++) sum += a[i][l]*a[l][k];
a[i][k] -= sum;
}
for (i=k+1; i<=N; i++){

/*

*** Descomposici
on ***

*/

for (k=0; k<=N; k++){


for (j=k; j<=N; j++){

834

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

for (l=0, sum=0; l<=k-1; l++) sum += a[k][l]*a[l][j];


a[k][j] -= sum;
}
for (i=k+1; i<=N; i++){
for (l=0, sum=0; l<=k-1; l++ )sum += a[i][l]*a[l][k];
a[i][k] = (a[i][k]-sum)/a[k][k];
}

#include <math.h>
#define N 3
main (){
int
i, j, k;
float sum;
static float a[N+1][N+1]={5,1,-2,0,1,2,0,0,-2,0,4,1,0,0,1,3},
b[N+1]={1,5,14,15};

}
printf ("Matriz A factorizada:\n");
for (i=0; i<=N; i++){
for (j=0; j<=N; j++) printf ("%8.3f", a[i][j]);
printf ("\n");
}

/*

return 0;
}

6. Programa Dool de la p
agina 38.
/*
-- Descomposici
on L1U mediante el m
etodo de Doolittle
*/

/*

/*

int
i, iaux, imax, ipvt[N+1], j, k, l;
float aux, sum, smax;
static float a[N+1][N+1]={1,-4,1,1,1,0,1,3,-2,0,-1,0,0,0,1,0};

*/

for (j=0; j<=N; j++){


for (i=0; i<=j-1; i++){
for (k=0,sum=a[i][j]; k<=i-1; k++)
sum -= a[i][k]*a[k][j];
a[i][j] = sum;
}
smax = 0.0;
for (i=j; i<=N; i++){
for (k=0,sum=a[i][j]; k<=j-1; k++)
sum -= a[i][k]*a[k][j];
a[i][j] = sum;
if (fabs(sum) >= smax){
imax = i;
smax = fabs(sum);
}
}
if (j != imax){
for (k=0; k<=N; k++) SWAPf(a[imax][k],a[j][k]);
SWAPi(ipvt[imax],ipvt[j]);
}
if (j != N){
if (!a[j][j]) a[j][j] = 1.e-20;
for (i=j+1, aux=1/a[j][j]; i<=N; i++) a[i][j] *= aux;
}
}
if (!a[N][N]) a[N][N] = 1.e-20;
for (j=0; j<=N; j++) printf ("%d ", ipvt[j]+1);
printf ("\n");
printf ("Matriz A factorizada:\n");
for (i=0; i<=N; i++){
for (j=0; j<=N; j++) printf ("%8.4f", a[i][j]);
printf ("\n");
}
return 0;
}

7. Programa Chol de la p
agina 45.
/*
-- Resoluci
on de un sistema de ecuaciones lineales Ax=b
en el que la matriz A es definida positiva y se
factoriza por Cholesky GG
*/
#include <stdio.h>

*/

*** Sustituci
on inversa ***

*/

printf ("Matriz A factorizada:\n");


for (i=0; i<=N; i++){
for (j=0; j<=i; j++) printf ("%9.4f", a[i][j]);
printf ("\n");
}
printf ("Soluci
on:\n");
for (j=0; j<=N; j++) printf ("%9.4f", b[j]);

for (i=0; i<=N; i++) ipvt[i]=i;


*** Descomposici
on ***

*** Sustituci
on directa ***

b[N] /=a[N][N];
for (i=N-1; i>=0; i--){
for (j=i+1; j<=N; j++) b[i] -= a[j][i]*b[j];
b[i] /=a[i][i];
}

main (){

/*

*/

for (i=0; i<=N; i++){


for (j=0; j<=i-1; j++) b[i] -= a[i][j]*b[j];
b[i] /=a[i][i];
}

#include <stdio.h>
#include <math.h>
#define N 3
#define SWAPf(a,b) {float temp=a; a=b; b=temp;}
#define SWAPi(a,b) {int
temp=a; a=b; b=temp;}

*** Descomposici
on GG ***

for (k=0; k<=N; k++){


for (j=0, sum=a[k][k]; j<=k-1; j++)
sum -= pow(a[k][j],2.0);
a[k][k] = sqrt(sum);
for (i=k+1; i<=N; i++){
for (j=0,sum=a[i][k]; j<=k-1; j++)
sum -= a[i][j]*a[k][j];
a[i][k] = sum/a[k][k];
}
}

return 0;
}

8. Programa Aasen de la p
agina 57.
/*
-- Descomposici
on LTL mediante el m
etodo de Aasen
*/
#include <stdio.h>
#include <math.h>
#define
#define
#define
#define

N
2
Nm1 3
SWAPf(a,b) {float temf=a; a=b; b=temf;}
SWAPi(a,b) {int
temi=a; a=b; b=temi;}

main (){
int
i, iaux, ipvt[Nm1], iq, j, k, k1;
float aux, sum, smax, alfa[Nm1], beta[Nm1], l[Nm1][Nm1],
h[Nm1], v[Nm1], l0[Nm1];
float a[Nm1][Nm1]={1,10,20,10,1,30,20,30,1};
for (i=0; i<=N; i++) ipvt[i] = i;
/*

*** Factorizaci
on ***

*/

for (j=0; j<=N; j++){


if (!j) h[0] = a[0][0];
else if (j == 1){
h[0] = beta[0];
h[1] = a[1][1];
} else{
l0[0] = 0;
for (k=1; k<=j-1; k++) l0[k] = l[j][k];
l0[j] = 1;
h[j] = a[j][j];
h[0] = beta[0]*l0[1];
for (k=1; k<=j-1; k++){
h[k] = beta[k-1]*l0[k-1]+
alfa[k]*l0[k]+beta[k]*l0[k+1];
h[j] -= l0[k]*h[k];
}

G.1 Codigos en C

}
if (j==0 || j==1) alfa[j] = h[j];
else
alfa[j] = h[j]-beta[j-1]*l[j][j-1];
if (j <= N-1){
for (k=j+1, smax=0, iq=j; k<=N; k++){
for (k1=0, sum=0; k1<=j; k1++)
sum -= l[k][k1]*h[k1];
v[k] = a[k][j]+sum;
if (fabs(v[k]) > smax){
smax = fabs(v[k]);
iq
= k;
}
}
SWAPf(v[j+1],v[iq]);
SWAPi(ipvt[j],ipvt[iq]);
for (k=1; k<=j; k++) SWAPf(l[j+1][k],l[iq][k]);
for (k=j+1; k<=N; k++) SWAPf(a[j+1][k],a[iq][k]);
for (k=j+1; k<=N; k++) SWAPf(a[k][j+1],a[k][iq]);
beta[j] = v[j+1];
}
if (j <= N-2){
for (k=j+2; k<=N; k++) l[k][j+1] = v[k];
if (v[j+1]) for (k=j+2; k<=N; k++) l[k][j+1] /=v[j+1];
}

imax
= colmax(k-1,&a[0][k]);
colm
= fabs(a[imax][k]);
if (absakk >= ALPHA*colm){
kstep = 1;
swap = 0;
} else {
for (j=imax+1, rowm=0; j<=k; j++)
rowm=max(rowm,fabs(a[imax][j]));
if (imax) {
jmax = colmax(imax-1,&a[0][imax]);
rowm = max(rowm,fabs(a[jmax][imax]));
}
if (fabs(a[imax][imax]) >= ALPHA*rowm){
kstep = 1;
swap = 1;
} else if (absakk >= ALPHA*colm*(colm/rowm)) {
kstep = 1;
swap = 0;
} else {
kstep = 2;
swap = imax != k-1 ? 1 : 0;
}
}
if (!max(absakk,colm)){
ipvt[k] = k;
k
-= kstep;
continue;
}
if (kstep == 1) {
ipvt[k] = k;
if (swap){
cambia(imax,&a[0][imax],&a[0][k]);
for (j=k; j>=imax; j--) SWAPf(a[j][k],a[imax][j]);
ipvt[k]
= imax;
}
for (j=k-1; j>=0; j--){
mulk = -a[j][k]/a[k][k];
apory(j,mulk,&a[0][k],&a[0][j]);
a[j][k] = mulk;
}
} else {
ipvt[k] = ipvt[k-1] = 1-k;
if (swap){
cambia(imax,&a[0][imax],&a[0][k-1]);
for (j=k-1; j>=imax; j--)
SWAPf(a[j][k-1],a[imax][j]);
SWAPf(a[k-1][k],a[imax][k]);
ipvt[k]
= -imax;
}
if (k > 1){
ak
= a[k][k]/a[k-1][k];
akm1 = a[k-1][k-1]/a[k-1][k];
deno = 1.e0-ak*akm1;
for (j=k-2; j>=0; j--){
bk
= a[j][k]/a[k-1][k];
bkm1
= a[j][k-1]/a[k-1][k];
mulk
= (akm1*bk-bkm1)/deno;
mulkm1 = (ak*bkm1-bk)/deno;
apory(j,mulk,&a[0][k],&a[0][j]);
apory(j,mulkm1,&a[0][k-1],&a[0][j]);
a[j][k]
= mulk;
a[j][k-1] = mulkm1;
}
}
}
k -= kstep;
}
if (!k) ipvt[0] = 0;

}
for (j=0; j<=N; j++) printf ("%9.4f", alfa[j]);
printf ("\n");
for (j=0; j<N; j++) printf ("%9.4f", beta[j]);
printf ("\n");
printf ("Matriz L:\n");
for (i=1; i<=N; i++){
for (j=0; j<=i-1; j++) printf ("%9.4f", l[i][j]);
printf ("\n");
}
for (j=0; j<=N; j++) printf ("%d", ipvt[j]+1);
return 0;
}

9. Programa Bunch y rutina bunchkauf de la


p
agina 66.
/*
-- Descomposici
on UBU mediante el m
etodo de Bunch y Kaufman
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define
#define
#define
#define
#define
void
void
void
int

N
2
Nm1 3
ALPHA (1.0+sqrt(17.0))/8.0
SWAPf(a,b) {float temf=a; a=b; b=temf;}
SWAPi(a,b) {int
temi=a; a=b; b=temi;}

bunchkauf(float a[][Nm1], int ipvt[]);


cambia (int k, float *a, float *b);
apory (int k, float mult, float *a, float *b);
colmax (int k, float *a);

main (){
int i, ipvt[Nm1], j;
static float a[Nm1][Nm1]={1,10,20,10,1,30,20,30,1};
/*

*** Factorizaci
on en rutina bunchkauf ***

*/

bunchkauf (a, ipvt);


for (i=0; i<=N; i++){
for (j=0; j<=N; j++) printf ("%9.4f", a[i][j]);
printf ("\n");
}
for (j=0; j<=N; j++) printf ("%d ", ipvt[j]);
return 0;
}
void bunchkauf(float a[][Nm1], int ipvt[])
{
int
colmax(), i, imax, j, jmax, k, kstep, swap;
float aux, absakk, ak, akm1, deno, bk, bkm1, colm, mulk,
mulkm1, rowm;
k = N;
while (k > 0){
absakk = fabs(a[k][k]);

835

}
int colmax (int k, float *a)
{
int
i, imax;
float dmax;
for (i=0, dmax=0; i<=k; i++){
if (fabs(*(a+Nm1*i)) > dmax){
imax = i;
dmax = fabs(*(a+Nm1*i));
}
}
return imax;
}
void cambia (int k, float *a, float *b)
{
int
i;
float aux;
for (i=0; i<=k; i++){
aux
= *(a+Nm1*i);
*(a+Nm1*i) = *(b+Nm1*i);
*(b+Nm1*i) = aux;
}
}

836

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

void apory (int k, float mult, float *a, float *b)


{
int i;
for (i=0; i<=k; i++) *(b+Nm1*i) += mult*(*(a+Nm1*i));
}

10. Programa Grmsch de las p


agina 87.
/*
-- Resoluci
on del problema lineal de m
nimos cuadrados por
Gram-Schmidt
*/

#include <math.h>
#include <stdlib.h>
#define M 3
#define N 2
#define SIGN(a,b) (b>=0 ? fabs(a) : -fabs(a))
main (){
int i, j, k, l;
float beta, betas[N+1], d[N+1], dmax, s, sigma, x[N+1],
sum, wj;
static float a[M+1][N+1]={1,1,1,1,2,4,1,3,9,1,4,16},
b[M+1]={2,3,5,6};
/*

#include <stdio.h>
#include <math.h>
#include <float.h>
#define
#define
#define
#define

M
3
Mm1 4
N 2
Nm1 3

main (){
int
i, j, k, n=N, nm1=Nm1, m=M, uno=1;
double dmax, u[Nm1][Nm1], x[Nm1], temp, prod();
static double a[Mm1][Nm1]={1,1,1,0,0,0,0,0,0,0,0,0},
b[Mm1]={1,0,0,0};
a[1][0] = sqrt(DBL_EPSILON)*10;
a[2][1] = sqrt(DBL_EPSILON)*10;
a[3][2] = sqrt(DBL_EPSILON)*10;
*** Ortonormalizaci
on de columnas de A ***

*/

for (j=0, dmax=0; j<=n; j++){


for (i=0; i<=j-1; i++){
u[i][j] = prod(m,&a[0][i],nm1,&a[0][j],nm1);
for (k=0; k<=m; k++) a[k][j] -= u[i][j]*a[k][i];
}
temp
= sqrt(prod(m,&a[0][j],nm1,&a[0][j],nm1));
u[j][j] = temp;
for (k=0; k<=m; k++) a[k][j] /= temp;
if (temp > dmax) dmax = temp;
if (dmax+temp == dmax){
printf ("Stop: Existe dependen. lineal columna %d\n",j);
return 0;
}
}
x[n] = prod(m,&a[0][n],nm1,&b,uno)/u[n][n];
for (i=n-1; i>=0; i--){
temp = prod(m,&a[0][i],nm1,&b,uno);
for (j=i+1; j<=n; j++) temp -= u[i][j]*x[j];
x[i] = temp/u[i][i];
}
for (j=0; j<=n; j++){
temp = prod(m,&a[0][j],nm1,&b,uno);
for (i=0; i<=m; i++) b[i] -= temp*a[i][j];
}

/* *** Resoluci
on

return 0;
double prod (int k, double *a, int n, double *b, int nn)
{
int i;
double pro;
for (i=0, pro=0; i<=k; i++) pro += *(a+n*i)*(*(b+nn*i));
return pro;
}

11. Programa Qrdes de las p


agina 96.
/*
-- Resoluci
on del problema lineal de m
nimos cuadrados ||Ax-b||
mediante transformaciones ortogonales de householder
de la matriz A (rango completo)
*/
#include <stdio.h>

Rx = b *** */

x[N] = b[N]/d[N];
for (i=N-1; i>=0; i--){
for (k=i+1, s=0; k<=N; k++) s += a[i][k]*x[k];
x[i] = (b[i]-s)/d[i];
}
/* *** Suma de residuos al cuadrado *** */
for (i=N+1, sum=0; i<=M; i++) sum += pow(b[i],2);
/* *** Vector de residuos *** */
for (i=N; i>=0; i--){
for (k=i+1, s=0; k<=M; k++) s += a[k][i]*b[k];
s
*= betas[i];
b[i] = -a[i][i]*s;
for (k=i+1; k<=M; k++) b[k] -= a[k][i]*s;
}
printf ("Soluci
on:");
for (j=0; j<=N; j++) printf ("%f ",x[j]);
printf ("\n");
printf ("Suma de residuos al cuadrado: %f\n",sum);
printf ("Vector de residuos:");
for (j=0; j<=N; j++) printf ("%f ", b[j]);
printf ("\n");

for (j=0; j<=n; j++) printf ("%f ", x[j]);


printf ("\n");
for (j=0; j<=n; j++) printf ("%f ", b[j]);
printf ("\n");
}

*/

for (j=0; j<=N; j++){


for (i=j, dmax=0; i<=M; i++) dmax=max(dmax,fabs(a[i][j]));
if (!dmax) {
printf ("Stop: La matriz A no es de rango completo\n");
abort();
}
for (i=j+1, beta=0; i<=M; i++) beta += pow(a[i][j],2);
wj
= a[j][j];
sigma
= SIGN(sqrt(beta+wj*wj),wj);
wj
+= sigma;
beta
= 2/(beta+wj*wj);
a[j][j] = wj;
d[j]
= -sigma;
betas[j] = beta;
for (l=j+1; l<=N; l++){
for (k=j, s=0; k<=M; k++) s += a[k][j]*a[k][l];
s *= beta;
for (k=j; k<=M; k++) a[k][l] -= a[k][j]*s;
}
for (k=j, s=0; k<=M; k++) s += a[k][j]*b[k];
s *= beta;
for (k=j; k<=M; k++) b[k] -= a[k][j]*s;
}

double prod (int k, double *a, int n, double *b, int nn);

/*

*** Reducci
on QA = R ***

return 0;
}

12. Programa Mincuad de las p


agina 102.
/*
-- Resoluci
on del problema lineal general de m
nimos cuadrados
||Ax-b|| mediante transformaciones ortogonales de Householder
de A teniendo en cuenta su posible rango incompleto
*/
#include
#include
#include
#include
#define
#define
#define
#define
#define

<stdio.h>
<math.h>
<float.h>
<stdlib.h>

M
Mm1
N
Nm1
TAU

3
4
3
4
0.000001

G.1 Codigos en C

#define SIGN(a,b) (b>=0 ? fabs(a) : -fabs(a))


#define DIVD(a) ((1.0+a)>1.0 ? a : DBL_EPSILON)
#define SWAPf(a,b) {double temp=a; a=b; b=temp;}

for (k=j, *beta=0; k<=m; k++){


*(w+k) = *(x+n*k);
*beta += pow(*(w+k),2);
}
*(w+i)
= *(x+n*i);
sigma
= SIGN(sqrt(*beta+pow(*(w+i),2)),*(x+n*i));
*(w+i) += sigma;
*beta
= 2.0/DIVD(*beta+pow(*(w+i),2));
*(x+n*i) = -sigma;

void h1 (double *beta, int i, int j, int m, double *w, double *x,
int n);
void h1 (double *beta, int i, int j, int m, double *w, double *x,
int n);
main (){

int i, imax, ipvt[Nm1], ira, j, k, k1, kp1, l,


m=M, n=N, nm1=Nm1, mm1=Mm1;
double beta, beta1[Mm1], s, sigma, dmax, x[Nm1],
sum, w[Mm1], w1[Mm1][Nm1], a1[Nm1][Mm1];
static double a[Mm1][Nm1]={1,1,1,1,1,2,4,4,1,3,9,9,1,4,16,16},
b[Mm1]={2,3,5,6};
/*
*** Reducci
on

837

|R
R |
QAP=| 11 12| ***
|0
0 |

void h2 (double *beta, int i, int j, int m, double *w, double *x,
int n)
{
int k;
double s;
s = (*(w+i))*(*(x+n*i));
for (k=j; k<=m; k++) s += (*(w+k))*(*(x+n*k));
s
*= *beta;
*(x+n*i) -= (*(w+i))*s;
for (k=j; k<=m; k++) *(x+n*k) -= (*(w+k))*s;

*/

ira = min(m,n);
for (i=0; i<=ira; i++){
for (j=i, imax=i, dmax=0; j<=n; j++){
for (k=i, s=0; k<=m; k++) s += pow(a[k][j],2);
if (s > dmax) {
dmax = s;
imax = j;
}
}
ipvt[i] = imax;
if (imax!=i) for (j=0; j<=m; j++)
SWAPf(a[j][i],a[j][imax]);
h1 (&beta,i,i+1,m,w,&a[0][i],nm1);
for (j=i+1; j<=n; j++) h2 (&beta,i,i+1,m,w,&a[0][j],nm1);
h2 (&beta,i,i+1,m,w,b,1);
}
k = ira;
for (j=0; j<=ira; j++){
if (fabs(a[j][j]) < TAU){
k = j-1;
break;
}
}
kp1 = k+1;
for (i=kp1, sum=0; i<=m; i++) sum += pow(b[i],2);

13. Programa Givens de las p


agina 107.
/*
-- Resoluci
on del problema lineal de m
nimos cuadrados ||Ax-b||
mediante transformaciones ortogonales de Givens de la
matriz A (rango completo)
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define M 3
#define N 2
main (){
int i, j, k;
float c, s, sum, q, t, x[N+1];
static float a[M+1][N+1]={1,1,1,1,2,4,1,3,9,1,4,16},
b[M+1]={2,3,5,6};
/*

for (i=0; i<=k; i++) for (j=0; j<=n; j++) a1[j][i] = a[i][j];
if (k != n) {
for (i=k; i>=0; i--){
h1(&beta1[i],i,kp1,n,&w1[i][0],&a1[0][i],mm1);
for (j=i-1; j>=0; j--)
h2(&beta1[i],i,kp1,n,&w1[i][0],&a1[0][j],mm1);
}
}
x[k] = b[k]/a1[k][k];
for (i=k-1; i>=0; i--){
for (k1=i+1, s=0; k1<=k; k1++) s += a1[k1][i]*x[k1];
x[i] = (b[i]-s)/a1[i][i];
}
if (k != n) {
for (j=kp1; j<=n; j++) x[j] = 0;
for (i=0; i<=k; i++) h2(&beta1[i],i,kp1,n,&w1[i][0],x,1);
}
for (j=ira; j>=0; j--){
if (ipvt[j] != j){
l = ipvt[j];
SWAPf(x[l],x[j]);
}
}
printf ("Rango de la matriz A: %d\n",k+1);
printf ("Soluci
on:");
for (j=0; j<=n; j++) printf ("%7.4f ",x[j]);
printf ("\n");
printf ("Suma de residuos al cuadrado: %f\n",sum);

*** Reducci
on QA = R ***

*/

for (i=0; i<=N; i++){


for (k=i+1; k<=M; k++){
if (1.0+fabs(a[k][i]) == 1.0) continue;
if (fabs(a[k][i]) >= fabs(a[i][i])){
t = a[i][i]/a[k][i];
s = 1/sqrt(1+t*t);
c = s*t;
} else {
t = a[k][i]/a[i][i];
c = 1/sqrt(1+t*t);
s = c*t;
};
a[i][i] = c*a[i][i]+s*a[k][i];
for (j=i+1; j<=N; j++){
q
= c*a[i][j]+s*a[k][j];
a[k][j]= -s*a[i][j]+c*a[k][j];
a[i][j]= q;
}
q
= c*b[i]+s*b[k];
b[k] = -s*b[i]+c*b[k];
b[i] = q;
}
}
/* *** Resoluci
on

Rx = b *** */

x[N] = b[N]/a[N][N];
for (i=N-1; i>=0; i--){
for (k=i+1, sum=0; k<=N; k++) sum += a[i][k]*x[k];
x[i] = (b[i]-sum)/a[i][i];
}
/* *** Suma de residuos al cuadrado *** */

return 0;

for (i=N+1, sum=0; i<=M; i++) sum += pow(b[i],2);

printf ("Soluci
on:");
for (j=0; j<=N; j++) printf ("%f ",x[j]);
printf ("\n");
printf ("Suma de residuos al cuadrado: %f\n",sum);

void h1 (double *beta, int i, int j, int m, double *w, double *x,
int n)
{
int k;
double sigma;

return 0;
}

838

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

14. Programa Fastgivens de las p


agina 112.
/*
-- Resoluci
on del problema lineal de m
nimos cuadrados ||Ax-b||
mediante transformaciones r
apidas de Givens de la
matriz A (rango completo)
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define M 3
#define N 2
#define SWAPf(a,b) {float temp=a; a=b; b=temp;}

int i, j, k;
float c, d[M+1], r1, r2, s, sqrd, sum, t, x[N+1];
static float a[M+1][N+1]={1,1,1,1,2,4,1,3,9,1,4,16},
b[M+1]={2,3,5,6};
*** Reducci
on QA = R ***

#define
#define
#define
#define
#define

N
2
Nm1 3
M
4
Mm1 5
SIGN(a,b) (b>=0 ? fabs(a) : -fabs(a))

main (){
int i, j, k, m=M, n=N, ns;
double s, sp, sv[Nm1], v[Mm1][Nm1], x[Nm1], tmp[Mm1],
sm;
static double a[Mm1][Nm1]={1,6,11,2,7,12,3,8,13,4,9,14,5,10,
15}, b[Mm1]={5,5,5,5,5};

*/

for (i=0; i<=M; i++) d[i] = 1;


for (j=0; j<=N; j++){
for (i=j+1; i<=M; i++){
if (1.0+fabs(a[i][j]) == 1.0) continue;
c = d[j]*pow(a[j][j],2);
s = d[i]*pow(a[i][j],2);
if (s <= c){
r2
= a[i][j]/a[j][j];
r1
= d[i]*r2/d[j];
c
/= s+c;
d[j] *= c;
d[i] *= c;
for (k=j; k<=N; k++){
t
= a[j][k]+r1*a[i][k];
a[i][k] -= r2*a[j][k];
a[j][k] = t;
}
t
= b[j]+r1*b[i];
b[i] -= r2*b[j];
b[j] = t;
} else {
r2
= a[j][j]/a[i][j];
r1
= d[j]*r2/d[i];
s
/= s+c;
SWAPf(d[j],d[i]);
d[j] *= s;
d[i] *= s;
for (k=j; k<=N; k++){
t
= a[i][k]+r1*a[j][k];
a[i][k] = a[j][k]-r2*a[i][k];
a[j][k] = t;
}
t
= b[i]+r1*b[j];
b[i] = b[j]-r2*b[i];
b[j] = t;
}
}
}
for (i=0; i<=M; i++){
sqrd = sqrt(d[i]);
for (j=0; j<=N; j++) a[i][j] *= sqrd;
b[i] *= sqrd;
}
/* *** Resoluci
on

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void dcmsvd( double a[][Nm1], int m, int n, double sv[Nm1],


double v[][Nm1]);

main (){

/*

/*
-- Resoluci
on del problema lineal general de m
nimos cuadrados
||Ax-b|| mediante descomposici
on en valores singulares
de la matriz A
*/

Rx = b *** */

x[N] = b[N]/a[N][N];
for (i=N-1; i>=0; i--){
for (k=i+1, sum=0; k<=N; k++) sum += a[i][k]*x[k];
x[i] = (b[i]-sum)/a[i][i];
}
/* *** Suma de residuos al cuadrado *** */
for (i=N+1, sum=0; i<=M; i++) sum += pow(b[i],2);
printf ("Soluci
on:");
for (j=0; j<=N; j++) printf ("%f ",x[j]);
printf ("\n");
printf ("Suma de residuos al cuadrado: %f\n",sum);
return 0;
}

15. Programa Svdre y rutina dcmsvd de la


p
agina 128.

/*

*** Descomposici
on en rutina dcmsvd ***

*/

dcmsvd (a,m,n,sv,v);
for (i=0, sm=0; i<=n; i++) sm =max(sm,sv[i]);
sp = sm*1.0e-6;
for (j=0, ns=0; j<=n; j++){
s = 0;
if (sv[j] > sp){
ns++;
for (i=0; i<=m; i++) s += a[i][j]*b[i];
s /= sv[j];
} else sv[j] = 0;
tmp[j] = s;
}
for (j=0; j<=n; j++){
for (k=0, s=0; k<=n; k++) s += v[j][k]*tmp[k];
x[j] = s;
}
printf ("Rango de la matriz A: %d\n",ns);
printf ("Soluci
on: ");
for (j=0; j<=N; j++) printf ("%9.4f", x[j]);
printf ("\n");
printf ("Valores singulares de A: ");
for (j=0; j<=ns; j++) printf ("%9.4f", sv[j]);
printf ("\n");
return 0;
}
void dcmsvd( double a[][Nm1], int m, int n, double sv[Nm1],
double v[][Nm1] )
{
int i, imax, ifl, its, j, jj, jmax, k, l, nm;
double aux, anorm, c, f, g, h, rmax, s,
rv1[20], x, y, z;
g = anorm = 0;
for (i=0; i<=n; i++){
l
= i+1;
rv1[i] = g;
g = s = 0;
if (i <= m){
for (k=i,rmax=0; k<=m; k++)
rmax = max(rmax,fabs(a[k][i]));
if (rmax){
for (k=i; k<=m; k++) s += pow(a[k][i],2);
f
= a[i][i];
g
= -SIGN(sqrt(s),f);
h
= f*g-s;
a[i][i] = f-g;
for (j=l; j<=n; j++){
for (k=i, s=0; k<=m; k++) s += a[k][i]*a[k][j];
f = s/h;
for (k=i; k<=m; k++) a[k][j] += f*a[k][i];
}
}
}
sv[i] = g;
g = s = 0;
if (i <= m && i != n){

G.1 Codigos en C

for (k=l,rmax=0; k<=n; k++)


rmax = max(rmax,fabs(a[i][k]));
if (rmax){
for (k=l; k<=n; k++) s += pow(a[i][k],2);
f
= a[i][l];
g
= -SIGN(sqrt(s),f);
h
= f*g-s;
a[i][l] = f-g;
for (k=l; k<=n; k++) rv1[k] = a[i][k]/h;
for (j=l; j<=m; j++){
for (k=l, s=0; k<=n; k++) s += a[j][k]*a[i][k];
for (k=l; k<=n; k++) a[j][k] += s*rv1[k];
}
}

x
nm
y
g
h
f
g
f

=
=
=
=
=
=
=
=

839

sv[l];
k-1;
sv[nm];
rv1[nm];
rv1[k];
((y-z)*(y+z)+(g-h)*(g+h))/(2*h*y);
sqrt(f*f+1);
((x-z)*(x+z)+h*((y/(f+SIGN(g,f)))-h))/x;

c = s = 1;
for (j=l; j<=nm; j++){
i
= j+1;
g
= rv1[i];
y
= sv[i];
h
= s*g;
g
*= c;
z
= sqrt(f*f+h*h);
rv1[j] = z;
c
= f/z;
s
= h/z;
f
= x*c+g*s;
g
= g*c-x*s;
h
= y*s;
y
*= c;
for (jj=0; jj<=n; jj++){
x
= v[jj][j];
z
= v[jj][i];
v[jj][j] = x*c+z*s;
v[jj][i] = z*c-x*s;
}
z
= sqrt(f*f+h*h);
sv[j] = z;
if (z){
c = f/z;
s = h/z;
}
f = c*g+s*y;
x = c*y-s*g;
for (jj=0; jj<=m; jj++){
y
= a[jj][j];
z
= a[jj][i];
a[jj][j] = y*c+z*s;
a[jj][i] = z*c-y*s;
}
}
rv1[l] = 0;
rv1[k] = f;
sv[k] = x;

}
anorm = max(anorm,fabs(sv[i])+fabs(rv1[i]));
}
for (i=n; i>=0; i--){
if (i < n){
if (g){
for (j=l; j<=n; j++) v[j][i] = (a[i][j]/a[i][l])/g;
for (j=l; j<=n; j++){
for (k=l, s=0; k<=n; k++) s += a[i][k]*v[k][j];
for (k=l; k<=n; k++) v[k][j] += s*v[k][i];
}
}
for (j=l; j<=n; j++) v[i][j] = v[j][i] = 0;
}
v[i][i] = 1;
g
= rv1[i];
l
= i;
}
for (i=n; i>=0; i--){
l = i+1;
g = sv[i];
for (j=l; j<=n; j++) a[i][j] = 0;
if (g){
g = 1/g;
for (j=l; j<=n; j++){
for (k=l, s=0; k<=m; k++) s += a[k][i]*a[k][j];
f = (s/a[i][i])*g;
for (k=i; k<=m; k++) a[k][j] += f*a[k][i];
}
for (j=i; j<=m; j++) a[j][i] *= g;
} else for (j=i; j<=m; j++) a[j][i] = 0;
++a[i][i];
}

}
}

for (k=n; k>=0; k--){


for (its=0; its<=30; its++){
ifl = 1;
for (l=k; l>=0; l--){
nm = l-1;
if (fabs(rv1[l])+anorm == anorm){
ifl = 0;
break;
}
if (fabs(sv[nm])+anorm == anorm) break;
}
if (ifl) {
c = 0;
s = 1;
for (i=l; i<=k; i++){
f = s*rv1[i];
if (fabs(f)+anorm != anorm){
g
= sv[i];
h
= sqrt(f*f+g*g);
sv[i] = h;
c
= g/h;
s
= (-f/h);
for (j=0; j<=m; j++){
y
= a[j][nm];
z
= a[j][i];
a[j][nm] = y*c+z*s;
a[j][i] = z*c-y*s;
}
}
}
}
z = sv[k];
if (l == k){
if (z < 0){
sv[k] = -z;
for (j=0; j<=n; j++) v[j][k] = (-v[j][k]);
}
break;
}
if (its == 30){
printf ("No hay convergencia\n");
abort();
}

16. Programa Mci de la p


agina 134.
/*
-- Resoluci
on del problema lineal general de m
nimos cuadrados
||Ax-b|| sujeto a las condiciones Cx=d
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define
#define
#define
#define
#define
#define
#define
#define
#define

M1
3
M1m1 4
M2
1
M2m1 2
N
2
Nm1 3
TAU 0.000001
SIGN(a,b) ((b)>=0 ? fabs(a) : -fabs(a))
SWAPf(a,b) {float temp=a; a=b; b=temp;}

void h1 ( double
double
void h2 ( double
double

*beta, int i, int j, int m, double *w,


*x, int n );
*beta, int i, int j, int m, double *w,
*x, int n);

main (){
int i, imax, ipvt[Nm1], ira, j, k, k1, l,
m1=M1, m2=M2, n=N, nm1=Nm1, n1;
double beta, s, sigma, dmax, x[Nm1],
sum, w[M1m1];
static double a[M1m1][Nm1]={0.2113,0.4524,0.6538,0.0824,0.8075,
0.4899,0.7599,0.4832,0.7741,0.0087,0.6135,0.9626},
b[M1m1]={3.0775,3.1671,4.0485,4.1237},
c[M2m1][Nm1]={0.8096,0.2749,0.9933,0.8474,0.8807,
0.8360},
d[M2m1]={4.3393,5.1169};

840

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

/*
*** Reducci
on

|R
R |
QCP=| 11 12| ***
|0
0 |

printf ("Rango de la matriz C: %d\n",k1);


printf ("Soluci
on:");
for (j=0; j<=n; j++) printf ("%7.4f ",x[j]);
printf ("\n");

*/

ira = min(m2,n);
for (i=0; i<=ira; i++){
for (j=i, dmax=0, imax=i; j<=n; j++){
for (k=i, s=0; k<=m2; k++) s += pow(c[k][j],2);
if (s > dmax) {
dmax = s;
imax = j;
}
}
ipvt[i] = imax;

return 0;
}
void h1 (double *beta, int i, int j, int m, double *w, double *x,
int n)
{
int k;
double sigma;
*beta = 0;
for (k=j; k<=m; k++){
*(w+k) = *(x+n*k);
*beta += pow(*(w+k),2);
}
*(w+i)
= *(x+n*i);
sigma
= SIGN(sqrt(*beta+pow(*(w+i),2)),*(x+n*i));
*(w+i) += sigma;
*beta
= 2/(*beta+pow(*(w+i),2));
*(x+n*i) = -sigma;

/* Intercambiar columnas de C y A si ha lugar */


if (imax != i){
for (j=0; j<=m2; j++) SWAPf(c[j][i],c[j][imax]);
for (j=0; j<=m1; j++) SWAPf(a[j][i],a[j][imax]);
}
/* Aplicar transforamci
on de Householder a columnas i a n
de C y a vector d */

h1(&beta,i,i+1,m2,&w,&c[0][i],nm1);
for (j=i+1; j<=n; j++) h2(&beta,i,i+1,m2,&w,&c[0][j],nm1);
h2(&beta,i,i+1,m2,&w,&d,1);

void h2 ( double *beta, int i, int j, int m, double *w,


double *x, int n )

}
k1 = ira;
for (j=0; j<=ira; j++){
if (fabs(c[j][j]) <= TAU){
k1 = j-1;
break;
}
}
/*

Determinar A

/* Se determina rango de C */
}

y B
2

int k;
double s;
s = (*(w+i))*(*(x+n*i));
for (k=j; k<=m; k++) s += (*(w+k))*(*(x+n*k));
s
*= *beta;
*(x+n*i) -= (*(w+i))*s;
for (k=j; k<=m; k++) *(x+n*k) -= (*(w+k))*s;

G.1.2

*/

for (i=0; i<=m1; i++){


a[i][0] /= c[0][0];
for (j=1; j<=ira; j++){
for (k=0, s=0; k<=j-1; k++) s += a[i][k]*c[k][j];
a[i][j] = (a[i][j]-s)/c[j][j];
}
for (j=ira+1; j<=n; j++){
for (k=0, s=0; k<=ira; k++) s += a[i][k]*c[k][j];
a[i][j] -= s;
}
for (k=0, s=0; k<=ira; k++) s += a[i][k]*d[k];
b[i] -= s;
}

C
odigos del captulo 2

1. Programa Jacobi de la p
agina 147.
/*
-- Resoluci
on de un sistema lineal de ecuaciones Ax = b
mediante el m
etodo iterativo de Jacobi
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N 3

/* Aplicar transformaci
on de Householder a columnas ira a n

de A para asi obtener R


2
22
*/

main (){
int i, j;
float s1, sm, su, x[N+1], y[N+1];
static float a[N+1][N+1]={10,-1,2,0,-1,11,-1,3,2,-1,10,-1,
0,3,-1,8},
b[N+1]={6,25,-11,15};

for (i=ira+1; i<=n; i++){


k = i-ira-1;
h1(&beta,k,k+1,m1,&w,&a[0][i],nm1);
for (j=i+1; j<=n; j++) h2(&beta,k,k+1,m1,&w,&a[0][j],nm1);
h2(&beta,k,k+1,m1,&w,&b,1);
}

/*

*** Proceso iterativo ***

*/

do {
for (i=0, s1=0; i<=N; i++){
for (j=0, su=b[i]; j<=i-1; j++) su -= a[i][j]*x[j];
for (j=i+1; j<=N; j++) su -= a[i][j]*x[j];
y[i] = su/a[i][i];
s1
= max(s1,fabs(y[i]));
}
for (i=0, sm=0; i<=N; i++){
if (fabs(x[i]-y[i])/s1 > sm) sm = fabs(x[i]-y[i])/s1;
x[i] = y[i];
}
for (i=0; i<=N; i++) printf ("%9.5f ",x[i]);
printf ("\n");
} while (sm >= 0.001);

/* Resolver el sistema
|R
R || |
|d |
| 11 12||x| = | 1|
|0
R || |
|c |
|
22|| |
| 1|

*/

n1
= n-ira-1;
x[n] = b[n1]/a[n1][n];
for (i=n1-1; i>=1; i--){
for (j=i+1, s=0; j<=n1; j++) s += a[i][j+ira]*x[j+ira];
x[i+ira] = (b[i-1]-s)/a[i][i+ira];
}
for (i=ira; i>=0; i--){
for (j=i+1, s=0; j<=n; j++) s += c[i][j]*x[j];
x[i] = (d[i]-s)/c[i][i];
}
for (j=ira; j>=0; j--){
if (ipvt[j] != j){
l = ipvt[j];
SWAPf(x[l],x[j]);
}
}

/* Deshacer permutaci
on */

return 0;
}

2. Programa GaussSeidel de la p
agina 151.
/*
-- Resoluci
on de un sistema lineal de ecuaciones Ax = b
mediante el m
etodo iterativo de Gauss-Seidel
*/

G.1 Codigos en C

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

main (){
int i, j, k=0, n=N;
float alfak, betak, p[N+1], r[N+1], ro0, ro1, su, xn, w[N+1];
static float a[N+1][N+1]={4,-1,0,-1,0,0,-1,4,-1,0,-1,0,0,-1,
4,0,0,-1,-1,0,0,4,-1,0,0,-1,0,-1,4,-1,0,0,-1,0,
-1,4}, b[N+1]={0,5,0,6,-2,6}, x[N+1]={0,0,0,0,0,0};

#define N 3
main (){
int i, j;
float s1, sm, su, xi;
static float a[N+1][N+1]={10,-1,2,0,-1,11,-1,3,2,-1,10,-1,
0,3,-1,8},
b[N+1]={6,25,-11,15}, x[N+1]={0,0,0,0};
/*

*** Proceso iterativo ***

841

/*

*** Proceso iterativo ***

*/

for (i=0; i<=N; i++) r[i] = b[i];


ro0 = ro1 = xnorm(&r,n);
xn = FLT_EPSILON*100*sqrt(xnorm(&b,n));

*/

do {
if (!k) for (i=0; i<=n; i++) p[i] = r[i];
else { betak = ro1/ro0;
for (i=0; i<=n; i++) p[i] = r[i] + betak*p[i];
}
for (i=0; i<=n; i++){
for (j=0, su=0; j<=n; j++) su += a[i][j]*p[j];
w[i] = su;
}
for (i=0, su=0; i<=n; i++) su += p[i]*w[i];
alfak = ro1/su;
for (i=0; i<=n; i++) x[i] += alfak*p[i];
for (i=0; i<=n; i++) r[i] -= alfak*w[i];
ro0 = ro1;
ro1 = xnorm(&r,n);
k
= k+1;
printf ("%d:",k);
for (i=0; i<=N; i++) printf ("%9.5f ",x[i]);
printf ("\n");
} while (sqrt(ro1) >= xn);

do {
for (i=0, s1=0, sm=0; i<=N; i++){
for (j=0, su=b[i]; j<=N; j++) su -= a[i][j]*x[j];
xi = x[i]+su/a[i][i];
if (fabs(x[i]-xi) > sm) sm = fabs(x[i]-xi);
x[i] = xi;
s1
= max(s1,fabs(x[i]));
}
sm /= s1;
for (i=0; i<=N; i++) printf ("%9.5f ",x[i]);
printf ("\n");
} while (sm >= 0.001);
return 0;
}

3. Programa Sor de la p
agina 165.

return 0;
/*
-- Resoluci
on de un sistema lineal de ecuaciones Ax = b mediante
el m
etodo iterativo de relajaciones sucesivas, S.O.R
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N 2
#define W 1.25

}
float xnorm (float *x, int n)
{
int
i;
float aux;
for (i=0, aux=0; i<=n; i++) aux += pow(*(x+i),2);
return aux;
}

5. Programa Cgp de la p
agina 192.

main (){
int i, j;
float s1, sm, su, xi;
static float a[N+1][N+1]={4,3,0,3,4,-1,0,-1,4},
b[N+1]={24,30,-24}, x[N+1]={1,1,1};
/*

*** Proceso iterativo ***

*/

do {
for (i=0, s1=0, sm=0; i<=N; i++){
for (j=0, su=b[i]; j<=i-1; j++) su -= a[i][j]*x[j];
for (j=i+1; j<=N; j++) su -= a[i][j]*x[j];
xi = (1-W)*x[i]+W*su/a[i][i];
if (fabs(x[i]-xi) > sm) sm = fabs(x[i]-xi);
x[i] = xi;
s1
= max(s1,fabs(x[i]));
}
sm /= s1;
for (i=0; i<=N; i++) printf ("%9.5f ",x[i]);
printf ("\n");
} while (sm >= 0.001);
return 0;
}

4. Programa Cg de la p
agina 188.
/*
-- Resoluci
on de un sistema lineal de ecuaciones Ax = b
mediante el m
etodo de los gradientes conjugados
*/
#include
#include
#include
#include

<stdio.h>
<math.h>
<stdlib.h>
<float.h>

#define N 5
float xnorm (float *x, int n);

/*
-- Resoluci
on de un sistema lineal de ecuaciones Ax = b
mediante el m
etodo de los gradientes conjugados con
precondicionamiento
*/
#include
#include
#include
#include

<stdio.h>
<math.h>
<stdlib.h>
<float.h>

double prod (double *x, double *y, int n);


double **matriz(int nf, int nc);
double *vector(int n);
main (){
int i, j, k=0, n;
double alfak, **a, *b, betak, *M, *p, *r, ro1, *x, xn, *w, *z,
*zm2, *rm2, **aux, *baux;
printf ("Dimensi
on de la Matriz A?\n");
scanf ("%d", &n);
a
= matriz(n,n);
aux = matriz(n,n);
b
= vector(n);
baux = vector(n);
M
= vector(n);
p
= vector(n);
r
= vector(n);
rm2 = vector(n);
w
= vector(n);
x
= vector(n);
z
= vector(n);
zm2 = vector(n);
n
-= 1;
/*

*** Generaci
on aleatoria de los datos del problema ***

*/

for (i=0; i<=n; i++){


for (j=0; j<=n; j++) aux[i][j] = (double)(rand())/RAND_MAX;
baux[i] = i;

842

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

}
for (i=0; i<=n; i++) for (j=0; j<=n; j++)
a[i][j] = prod(&aux[i][0],&aux[j][0],n);
for (i=0; i<=n; i++) b[i] = prod(&a[i][0],baux,n);
/* *** Obtenci
on del precondicionador *** */
for (i=0; i<=n; i++) M[i] = sqrt(prod(&a[i][0],&a[i][0],n));
/*

*** Proceso iterativo ***

*/

{
int i;
double aux;
for (i=0, aux=0; i<=n; i++) aux += (*(x+i))*(*(y+i));
return aux;
}
double **matriz(int nf, int nc)
{
int i;
double **m, *m1;

for (i=0; i<=n; i++) r[i] = b[i];


ro1 = prod(b,b,n);
xn = DBL_EPSILON*1000*sqrt(ro1);
do {
for (i=0; i<=n; i++) z[i] = r[i]/M[i];
if (!k) for (i=0; i<=n; i++) p[i] = z[i];
else { betak = prod(z,r,n)/prod(zm2,rm2,n);
for (i=0; i<=n; i++) p[i] = z[i] + betak*p[i];
}
for (i=0; i<=n; i++) w[i] = prod(&a[i][0],p,n);
alfak = prod(z,r,n)/prod(p,w,n);
for (i=0; i<=n; i++) x[i] += alfak*p[i];
for (i=0; i<=n; i++) rm2[i] = r[i];
for (i=0; i<=n; i++) r[i] -= alfak*w[i];
for (i=0; i<=n; i++) zm2[i] = z[i];
ro1 = prod(r,r,n);
k
= k+1;
printf ("%d:",k);
for (i=0; i<=n; i++) printf ("%f ",x[i]);
printf ("\n");
printf ("%f:",ro1);
printf ("\n");
} while (sqrt(ro1) >= xn);

m1 = (double *) calloc(nf*nc,sizeof(double));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (double **) malloc(nf*sizeof(double *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++){
m[i] = m1;
m1 += nc;
}
return m;
}
double *vector(int n)
{
double *v;
v = (double *) calloc(n,sizeof(double));
if (!v){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return v;

return 0;
}
double prod (double *x, double *y, int n)

G.1.3

C
odigos del captulo 3

Una traducci
on literal de los trozos de programas escritos en Fortran de este captulo a
C no tiene mucho sentido puesto que la forma de almacenamiento de matrices dispersas y
las operaciones con ellas realizadas tienen mucho que ver con el lenguaje que se elige y la
maquina donde se implementan estas operaciones. Las presentadas se han realizado con vistas
a su implementacion en Fortran 77; en C, probablemente, deberan ser muy distintas. No
obstante, para compactar todo lo expuesto en Fortran 77 en su versi
on en C, a continuaci
on
se listan trozos de programas en C mas o menos similares a los presentados en Fortran 77.
1. Si se dene una matriz dispersa como una estructura de la forma
typedef struct {
int ifi[ELE], ico[ELE];
float val[ELE];
} MATdis;

donde ELE es el n
umero de elementos distintos de cero que hay en esa matriz, el programa de
la p
agina 203, relativo a la recuperaci
on en VEC() del vector la i de una matriz guardada
de acuerdo con el esquema de almacenamiento por coordenadas, es el que sigue.
void recpr (float *v, MATdis *pa, int i)
{
int ii=0;
while (pa->ifi[ii]!=i) ii++;
for(;pa->ifi[ii]==i;ii++) v[pa->ico[ii]] = pa->val[ii];
}

2. Si se dene ahora la matriz dispersa como una estructura de la forma

G.1 Codigos en C

843

typedef struct {
int ia[N], ico[ELE];
float val[ELE];
} MATdis;

donde ELE es el n
umero de elementos distintos de cero que hay en esa matriz y N el n
umero
de las, el programa de la p
agina 204, relativo a la recuperaci
on en VEC() del vector la i
de una matriz guardada de acuerdo con el esquema de almacenamiento por las, es el que
sigue.
void recpr (float *v, MATdis *pa, int i)
{
int ii;
for (ii=pa->ia[i];ii<pa->ia[i+1];ii++)
v[pa->ico[ii]] = pa->val[ii];
}

3. El programa de la p
agina 204 para recuperar la columna k de esa misma matriz es el que
sigue.
void recpr (float *v, MATdis *pa, int k)
{
int ii, j;
for (j=0; j<=M, j++){
for (ii=pa->ia[i];ii<pa->ia[i+1];ii++) {
if (pa->ico[ii]>k) break;
else if (pa->ico[ii]==k) v[j] = pa->val[ii];
}
}
}

4. Si se dene ahora la matriz dispersa como una estructura de la forma


typedef struct {
int ia[N], ifa[N];
float val[ELE];
} MATdis;

donde ELE es el n
umero de elementos distintos de cero que hay en esa matriz y N el n
umero
de las, el programa de la p
agina 206, relativo a la recuperaci
on en VEC() del vector la i
de una matriz guardada de acuerdo con el esquema de almacenamiento por las, es el que
sigue.
void recpr (float *v, MATdis *pa, int i)
{
int ii, j;
for (ii=pa->ia[i],j=0;ii<pa->ia[i+1];ii++,j++)
v[pa->ifa[i]+j]=ps->val[ii];
}

5. Si se dene ahora la matriz dispersa como una estructura de la forma


typedef struct {
int ifi[N], ico[ELE], link[ELE];
float val[ELE];
} MATdis;

844

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

donde ELE es el n
umero de elementos distintos de cero que hay en esa matriz y N el n
umero
de las, el programa de la p
agina 207, relativo a la recuperaci
on en VEC() del vector la i de
una matriz guardada de acuerdo con el esquema de almacenamiento por listas encadenadas,
es el que sigue.
void recpr (float *v, MATdis *pa, int i)
{
int ii;
ii = pa->ifi[i];
do {
v[pa->ico[ii]] = ps->val[ii];
ii = pa->link[ii];
} while (ii);
}

6. En lo que sigue supondremos la matriz dispersa almacenada seg


un el esquema de las/columnas. Es decir, denido por la estructura anterior
typedef struct {
int i[N], ico[ELE];
float val[ELE];
} MATdis;

donde ELE es el n
umero de elementos distintos de cero que hay en esa matriz y N su n
umero
de las.
El programa de la p
agina 209 para efectuar el producto interior de dos vectores en este
caso el vector IA no es necesario es el que sigue.
float proin (float h, MATdis *pa, MATdis *pb, int n)
{
int i, j;
float g;
for (i=0, h=0; i<=n, i++){
for (j=0; j<=n; j++) {
if (pb->ico[j]>pa->ico[i]) break;
else if (pb->ico[j]==pa->ico[i])
g+=pa->val[pa->ico[i]]*pb->val[pb->ico[j]];
}
}
return g;
}

7. El programa de la p
agina 209 para efectuar el producto interior de dos vectores en este
caso el vector I tampoco es necesario es el que sigue.
float proin (float h, MATdis *pa, MATdis *pb, int n)
{
int i, *ip;
float g;
ip = (int *) calloc(n*sizeof(int));
for (i=0; i<=n, i++) ip[pa->ico[i]] = i;
for (i=0,h=0; i<=n, i++) if (ip[pb->ico[i]])
g+=pa->val[ip[pb->ico[i]]*pb->val[i];
return g;
}

G.1 Codigos en C

845

8. El programa de la p
agina 210 para efectuar el producto de una matriz por un vector es el
que se lista a continuaci
on.
void axb (MATdis *pa, float *b, float *c, int m)
{
int i, j;
float s;
for (i=0, i<=m, i++){
for (j=pa->i[i],s=0;j<pa->i[i+1];j++)
s += pa->val[j]*b[pa->ico[j]];
c[i] = s;
}
}

9. El programa de la p
agina 211 para efectuar el producto de un vector por una matriz es el
que sigue.
void bxa (MATdis *pa, float *b, float *c, int n)
{
int i, j;
float bi;
for (i=0, i<=n, i++){
bi = b[i];
for (j=pa->i[i],s=0;j<pa->i[i+1];j++)
c[pa->ico[j]] += pa->val[j]*bi;
}
}

10. El equivalente en C al programa de la p


agina 214 para efectuar la suma simb
olica de dos
matrices dispersas es el siguiente.
void bmas (MATdis *pa, MATdis *pb, MATdis *pc, int n)
{
int i, *ip, j, nu=1;
ip = (int *) calloc(n*sizeof(int));
for (i=0, i<=n, i++){
pc->i[i] = nu;
for (j=pa->i[i];j<pa->i[i+1];j++,nu++){
pc->ico[nu] = pa->ico[j];
ip[pa->ico[j]] = i;
}
for (j=pb->i[i];j<pb->i[i+1];j++){
if (ip[pb->ico[j]] != i){
pc->ico[nu] = pb->ico[j];
nu++;
}
}
pc->i[n+1] = nu;
}

11. Un programa en C similar al de la p


agina 215 para efectuar la suma numerica de dos
matrices dispersas es el siguiente.
void bmas (MATdis *pa, MATdis *pb, MATdis *pc, int n)
{
int i, j;
float *x;
x = (float *)calloc(n*sizeof(float));

846

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

for (i=0, i<=n, i++){


for (j=pa->i[i];j<pa->i[i+1];j++) x[pa->ico[j]] =pa->val[j];
for (j=pb->i[i];j<pb->i[i+1];j++) x[pb->ico[j]]+=pb->val[j];
for (j=pc->i[i];j<pc->i[i+1];j++) pc->val[j]]=x[pc->ico[j]];
}
}

12. El programa de la p
agina 216 para efectuar el producto simb
olico de dos matrices dispersas
en C podra ser como sigue.
void bmas (MATdis *pa, MATdis *pb, MATdis *pc, int n)
{
int i, *ip, j, k, kk, nu=1;
ip = (int *) calloc(n*sizeof(int));
for (i=0, i<=n, i++){
pc->i[i] = nu;
for (j=pa->i[i];j<pa->i[i+1];j++){
for (k=pb->i[pa->ico[j]];k<pb->i[pa->ico[j]+1];k++){
kk = pb->ico[k];
if (ip[kk] != i){
pc->ico[nu] = kk;
ip[kk]
= i;
nu++;
}
}
}
}
pc->i[n+1] = nu;
}

13. El programa de la p
agina 216 para efectuar ese producto en forma numerica, esta vez en
C, sera como el que sigue.
void bmas (MATdis *pa, MATdis *pb, MATdis *pc, int n)
{
int i, j, k;
float *x;
x = (float *)calloc(n*sizeof(float));
for (i=0, i<=n, i++){
for (j=pa->i[i];j<pa->i[i+1];j++)
for (k=pb->i[pa->ico[j]];k<pb->i[pa->ico[j]+1];k++)
x[pb->ico[k]] += pa->val[j]*pb->val[k];
for (j=pc->i[i];j<pc->i[i+1];j++) pc->val[j]]=x[pc->ico[j]];
}
}

14. El programa de la p
agina 218 para trasponer una matriz dispersa es el siguiente.
void atra (MATdis *pa, MATdis *pat, int m, int n)
{
int i, j, k, l;
for (i=0; i<pa->i[m+1]; i++) if (pa->ico[i]+2<=n+1)
pat->i[pa->ico[i]+2]++;
pat->i[0] = 1;
pat->i[1] = 1;
for (i=2; i<n+1; i++) pat->i[i] += pat->i[i-1];
for (i=0; i<=m; i++){
for (j=pa->i[i]; j<pa->i[i+1]; j++){
k
= pa->ico[j]+1;

G.1 Codigos en C

l
pat->ico[l]
pat->val[l]
pat->i[k]

=
=
=
=

pat->i[k];
i;
pa->val[l];
l+1;

}
}
}

G.1.4

C
odigos del captulo 4

3. Programa Newton de la p
agina 298.

1. Programa Bisec de la p
agina 285.

/*
2
-- Resoluci
on de x -1=0 mediante el m
etodo de Newton
*/

/*
Resoluci
on de x*sen(x)-1=0 mediante el m
etodo de la
bisecci
on
*/
#include <stdio.h>
#include <math.h>
#include <float.h>

#include <stdio.h>
#include <math.h>
#include <float.h>
double fx(double x);
double derfx(double x);
main (){

float fx(float x);

double

main (){
float

/*

a=1.0, b=2.0, fa, fb, c, fc;

*** Proceso iterativo ***

*/

while (fabs(a-b) > FLT_EPSILON*10){


c = (a+b)/2;
fc = fx(c);
if (fc==0) {
a = c;
b = c;
} else if (fb*fc>0) {
b = c;
fb = fc;
} else {
a = c;
fa = fc;
}
printf ("%9.7f,%9.7f\n",a,b);
}

*** Proceso iterativo ***

*/

while (fabs(x-x0) > FLT_EPSILON){


x0 = x;
x = x0-fx(x0)/derfx(x0);
printf ("%19.16f\n",x);
}

fa = fx(a);
fb = fx(b);
if (fa*fb>0) printf("El intervalo [a,b] no contiene soluci
on\n");
/*

x=2, x0=0;

return 0;
}
double fx(double x)
{
double f;
f = x*x-1;
return f;
}
double derfx(double x)
{
double f;
f = 2*x;
return f;
}

return 0;
}

4. Programa Newtondf de la p
agina 298.

float fx(float x)
{
float f;
f = x*sin(x)-1;
return f;
}

/*
2
-- Resoluci
on de x -1=0 mediante el m
etodo de Newton
(Derivadas por diferencias finitas)
*/

2. Programa Newt de la p
agina 290.

#include <stdio.h>
#include <math.h>
#include <float.h>
#define h sqrt(DBL_EPSILON)

/*
3
-- Resoluci
on de X - SEN(X) = 0 mediante el m
etodo de Newton
*/

double fx(double x);


double derfx(double x);

#include <stdio.h>
#include <math.h>
#include <float.h>

main (){

main (){

/*

float
/*

double

x=1, x0;

*** Proceso iterativo ***

return 0;
}

*/

while (fabs(x-x0) > FLT_EPSILON){


x0 = x;
x = x0-fx(x0)/derfx(x0);
printf ("%19.16f\n",x);
}

*/

do {
x0 = x;
x = x0-(x0*x0*x0-sin(x0))/(3*x0*x0-cos(x0));
printf ("%10.6f\n",x);
} while (fabs(x-x0) >= FLT_EPSILON);

x=2, x0=0;

*** Proceso iterativo ***

return 0;
}
double fx(double x)
{
double f;

847

848

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

f = x*x-1;
return f;

z = (-2)*c/(b+SIGN(1.0,b)*di);
x3 = x2+z;
if (fabs(x3-x1)<fabs(x3-x0)) {
u
= x1;
x1 = x0;
x0 = u;
u
= fx1;
fx1 = fx0;
fx0 = u;
}
if (fabs(x3-x2)<fabs(x3-x1)) {
u
= x2;
x1 = u;
u
= fx2;
fx1 = u;
}
x2 = x3;
fx2 = fx(x2);
printf ("%9.7f\n",x1);

}
double derfx(double x)
{
double f;
f = (fx(x+h)-fx(x))/h;
return f;
}

5. Programa Newtonsecante de la p
agina 301.
/*
3
-- Resoluci
on de x - SEN(X)=0 mediante el m
etodo de secantes
*/
#include <stdio.h>
#include <math.h>
#include <float.h>

main (){

/*

x2, x1=1, x0=1.1;

*** Proceso iterativo ***

}
return 0;

double fx(double x);


double secfx(double x, double y);

double

/* Escoger nuevos
/* x0, x1 y x2 los
/* m
as pr
oximos a
/* x3.

*/

x2 = x1-fx(x1)/secfx(x0,x1);
while (fabs(x2-x1) > FLT_EPSILON){
x0 = x1;
x1 = x2;
x2 = x1-fx(x1)/secfx(x0,x1);
printf ("%19.16f\n",x1);
}
return 0;
}

double fx(double x)
{
double f;
f = x*x*x-sin(x);
return f;
}

7. Programa Newtonmod de la p
agina 299.
/*
3
-- Resoluci
on de x - SEN(X)=0 mediante el m
etodo de Newton
modificado
*/
#include <stdio.h>
#include <math.h>
#include <float.h>
double fx(double x);

double fx(double x)
{
double f;
f = x*x*x-sin(x);
return f;
}

main (){
double
/*

double secfx(double x, double y)


{
double f;
f = (fx(y)-fx(x))/(y-x);
return f;
}

x1=1, x2, dx;

*** Proceso iterativo ***

*/

dx = 3*x1*x1-cos(x1);
x2 = x1-fx(x1)/dx;
while (fabs(x2-x1) > DBL_EPSILON){
printf ("%19.16f\n",x1);
x1 = x2;
x2 = x1-fx(x1)/dx;
}

6. Programa Muller de la p
agina 305.

return 0;
}

/*
3
Resoluci
on de x - sen(x)=0 mediante el m
etodo de Muller
*/
#include <stdio.h>
#include <math.h>
#include <float.h>
#define SIGN(a,b) (b>=0 ? fabs(a) : -fabs(a))

double fx(double x)
{
double f;
f = x*x*x-sin(x);
return f;
}

8. Programa Newtrp de la p
agina 307.

double fx(double x);


main (){
double

x0=1.5, x1=1.2, x2=1.0, fx0, fx1, fx2,


c, d0, d1, det, b, a, di, z, x3, u;

fx0 = fx(x0);
fx1 = fx(x1);
fx2 = fx(x2);
/*

*** Proceso iterativo ***

*/

while (fabs(fx2) > DBL_EPSILON){


c
= fx2;
d0 = x0-x2;
d1 = x1-x2;
det = d0*d1*(x0-x1);
b
= (d0*d0*(fx1-fx2)-d1*d1*(fx0-fx2))/det;
a
= (d1*(fx0-fx2)-d0*(fx1-fx2))/det;
di = 0.0;
if (b*b-4*a*c >= 0) di = sqrt(b*b-4*a*c);

/*
-- Resoluci
on de un sistema de ecuaciones no lineales
cualquiera mediante el m
etodo de Newton
*/
#include
#include
#include
#include

<stdio.h>
<math.h>
<float.h>
<stdlib.h>

#define N 3
#define TOL sqrt(DBL_EPSILON)
#define SWAPi(a,b) {int temp=a; a=b; b=temp;}
int
double
double
double
void

*ivector(int n);
*vector(int n);
**matriz(int nf, int nc);
dmax(double *x, int n);
fx(double *f, double *x);

*/
*/
*/
*/

G.1 Codigos en C

void
void

derfx(double **j, double *x);


gauss(double **a, double *b, double *x, int n);

x[n] = b[ipvt[n]]/a[ipvt[n]][n];
for (i=n-1; i>=0; i--){
pi = ipvt[i];
for (j=i+1, c=b[pi]; j<=n; j++) c -= a[pi][j]*x[j];
x[i] = c/a[pi][i];
}
free(ipvt);

main (){
int
double
j
f
x
x1

=
=
=
=

i, n=N, nm1=N-1;
**j, *f, *x, *x1, dnor;

matriz(n,n);
vector(n);
vector(n);
vector(n);

for (i=0; i<=nm1; i++) x[i] = x1[i] = 1;


/*

*** Proceso iterativo ***

849

double **matriz(int nf, int nc)


{
int i;
double **m, *m1;

*/

m1 = (double *) calloc(nf*nc,sizeof(double));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (double **) malloc(nf*sizeof(double *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++){
m[i] = m1;
m1 += nc;
}
return m;

do {
for (i=0; i<=nm1; i++) x[i] = x1[i];
fx(f,x);
derfx(j,x);
gauss(j,f,x,nm1);
for (i=0; i<=nm1; i++) x1[i] -= x[i];
for (i=0; i<=nm1; i++) printf("%e ",x1[i]);
printf ("\n");
dnor = dmax(x,nm1)/dmax(x1,nm1);
printf ("%e\n",dnor);
}
while (dnor > TOL);
return 0;

}
void fx(double *f, double *x)
{
f[0] = 3*x[0]-cos(x[1]*x[2])-0.5;
f[1] = x[0]*x[0]-81*pow((x[1]+0.1),2)+sin(x[2])+1.06;
f[2] = exp((-x[0])*x[1])+20*x[2]+(10*acos(-1.e0)-3)/3;
}
void derfx(double **j, double *x)
{
j[0][0] = 3.;
j[0][1] = sin(x[1]*x[2])*x[2];
j[0][2] = sin(x[1]*x[2])*x[1];
j[1][0] = 2*x[0];
j[1][1] = (-162)*(x[1]+0.1);
j[1][2] = cos(x[2]);
j[2][0] = -exp((-x[0])*x[1])*x[1];
j[2][1] = -exp((-x[0])*x[1])*x[0];
j[2][2] = 20;
}
void gauss(double **a, double *b, double *x, int n)
{
int
i, ip, *ipvt, j, k, l, pi;
double c, r, r1, smax;
ipvt = ivector(n);
for (i=0; i<=n; i++) ipvt[i]=i;
/*

*** Triangularizaci
on *** */
for (k=0; k<n; k++){
smax = fabs(a[ipvt[k]][k]);
for (i=k+1, l=0; i<=n; i++){
ip = ipvt[i];
if (fabs(a[ip][k]) > smax){
l
= i;
smax = fabs(a[ip][k]);
}
}
if (l) SWAPi(ipvt[k],ipvt[l]);
pi = ipvt[k];
r1 = 1.0/a[pi][k];
for (i=k+1; i<=n; i++){
ip = ipvt[i];
r = a[ip][k]*r1;
for (j=k+1; j<=n; j++) a[ip][j] -= r*a[pi][j];
a[ip][k] = -r;
}
}
for (k=0; k<n; k++){
ip = ipvt[k];
for (i=k+1; i<=n; i++){
pi
= ipvt[i];
b[pi] += a[pi][k]*b[ip];
}
}

/*

*** Sustituci
on inversa *** */

double *vector(int n)
{
double *m;
m = (double *) malloc(n*sizeof(double));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return m;
}
int *ivector(int n)
{
int *m;
m = (int *) malloc(n*sizeof(int));
if (!m){
printf("Error de asignaci
on de memoria en ivector\n");
abort();
}
return m;
}
double dmax(double *x, int n)
{
int i;
double dm;
for (i=0, dm=0; i<=n; i++) dm = max(fabs(x[i]),dm);
return dm;
}

9. Programa Newtrpdf de la p
agina 314.
/*
-- Resoluci
on de un sistema de ecuaciones no lineales
cualquiera mediante el m
etodo de Newton
(Derivadas por Diferencias Finitas)
*/
#include
#include
#include
#include
#define
#define
#define
#define
int
double
double
double
void
void
void

<stdio.h>
<math.h>
<float.h>
<stdlib.h>

N 3
TOL sqrt(DBL_EPSILON)
H
sqrt(DBL_EPSILON)
SWAPi(a,b) {int temp=a; a=b; b=temp;}
*ivector(int n);
*vector(int n);
**matriz(int nf, int nc);
dmax(double *x, int n);
fx(double *f, double *x, int n);
derfx(double **j, double *x, int n, double *f, double *f1,
double *x1);
gauss(double **a, double *b, double *x, int n);

850

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

main (){
int
double
j
f
f1
x
x1
x2

=
=
=
=
=
=

}
i, n=N, nm1=N-1;
**j, *f, *f1, *x, *x1, *x2, dnor;

matriz(n,n);
vector(n);
vector(n);
vector(n);
vector(n);
vector(n);

*** Proceso iterativo ***

*** Sustituci
on inversa *** */
x[n] = b[ipvt[n]]/a[ipvt[n]][n];
for (i=n-1; i>=0; i--){
pi = ipvt[i];
c = b[pi];
for (j=i+1; j<=n; j++) c -= a[pi][j]*x[j];
x[i] = c/a[pi][i];
}
free(ipvt);

for (i=0; i<=nm1; i++) x[i] = x1[i] = 1;


/*

/*

*/

do {
for (i=0; i<=nm1; i++) x[i] = x1[i];
fx(f,x,nm1);
derfx(j,x,nm1,f,f1,x2);
gauss(j,f,x,nm1);
for (i=0; i<=nm1; i++) x1[i] -= x[i];
for (i=0; i<=nm1; i++) printf("%e ",x1[i]);
printf ("\n");
dnor = dmax(x,nm1)/dmax(x1,nm1);
printf ("%e\n",dnor);
}
while (dnor > TOL);

}
double **matriz(int nf, int nc)
{
int i;
double **m, *m1;
m1 = (double *) calloc(nf*nc,sizeof(double));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (double **) malloc(nf*sizeof(double *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++){
m[i] = m1;
m1 += nc;
}
return m;

return 0;
}
void fx(double *f, double *x, int n)
{
f[0] = 3*x[0]-cos(x[1]*x[2])-0.5;
f[1] = x[0]*x[0]-81*pow((x[1]+0.1),2)+sin(x[2])+1.06;
f[2] = exp((-x[0])*x[1])+20*x[2]+(10*acos(-1.e0)-3)/3;
}

}
double *vector(int n)
{
double *m;

void derfx(double **j, double *x, int n, double *f, double *f1,
double *x1)

m = (double *) malloc(n*sizeof(double));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return m;

{
int i, k;
for (i=0; i<=n; i++) x1[i] = x[i];
for (i=0; i<=n; i++){
x1[i] += H;
fx(f,x1,n);
for (k=0; k<=n; k++) f1[k] = f[k];
fx(f,x,n);
for (k=0; k<=n; k++) f1[k] = (f1[k]-f[k])/H;
for (k=0; k<=n; k++) j[i][k] = f1[k];
x1[i] = x[i];
}

}
int *ivector(int n)
{
int *m;
m = (int *) malloc(n*sizeof(int));
if (!m){
printf("Error de asignaci
on de memoria en ivector\n");
abort();
}
return m;

}
void gauss(double **a, double *b, double *x, int n)
{
}
int
i, ip, *ipvt, j, k, l, pi;
double c, r, r1, smax;
ipvt = ivector(n);
for (i=0; i<=n; i++) ipvt[i]=i;
/*

*** Triangularizaci
on *** */
for (k=0; k<n; k++){
smax = fabs(a[ipvt[k]][k]);
for (i=k+1, l=0; i<=n; i++){
ip = ipvt[i];
if (fabs(a[ip][k]) > smax){
l
= i;
smax = fabs(a[ip][k]);
}
}
if (l) SWAPi(ipvt[k],ipvt[l]);
pi = ipvt[k];
r1 = 1.0/a[pi][k];
for (i=k+1; i<=n; i++){
ip = ipvt[i];
r = a[ip][k]*r1;
for (j=k+1; j<=n; j++) a[ip][j] -= r*a[pi][j];
a[ip][k] = -r;
}
}
for (k=0; k<n; k++){
ip = ipvt[k];
for (i=k+1; i<=n; i++){
pi
= ipvt[i];
b[pi] += a[pi][k]*b[ip];
}

double dmax(double *x, int n)


{
int i;
double dm;
for (i=0, dm=0; i<=n; i++) dm = max(fabs(x[i]),dm);
return dm;
}

10. Programa Newjac de la p


agina 317.
/*
-- Resoluci
on de un sistema de ecuaciones no linelaes
cualquiera mediante el m
etodo de Newton
(Variante Jacobi)
*/
#include
#include
#include
#include

<stdio.h>
<math.h>
<float.h>
<stdlib.h>

#define N 3
#define TOL sqrt(DBL_EPSILON)
double
double
void
void

*vector(int n);
dmax(double *x, int n);
fx(double *f, double *x, int n);
derfx(double *j, double *x, int n);

main (){

G.1 Codigos en C

int
double
j
f
x
x1

=
=
=
=

i, n=N, nm1=N-1;
*j, *f, *x, *x1, dnor;

j
f
x
x1

vector(n);
vector(n);
vector(n);
vector(n);

=
=
=
=

matriz(n,n);
vector(n);
vector(n);
vector(n);

printf ("Valor de OMEGA?\n");


scanf ("%lf", &omega);

for (i=0; i<=nm1; i++) x[i] = x1[i] = 1;


for (i=0; i<=nm1; i++) x[i] = x1[i] = 1;
/*

*** Proceso iterativo ***

*/
/*

*** Proceso iterativo ***

*/

do {
for (i=0; i<=nm1; i++) x[i] = x1[i];
fx(f,x,nm1);
derfx(j,x,nm1);
for (i=0; i<=nm1; i++) x[i] = f[i]/j[i];
for (i=0; i<=nm1; i++) x1[i] -= x[i];
for (i=0; i<=nm1; i++) printf("%e ",x1[i]);
printf ("\n");
dnor = dmax(x,nm1)/dmax(x1,nm1);
printf ("%e\n",dnor);
}
while (dnor > TOL);

do {
for (i=0; i<=nm1; i++) x[i] = x1[i];
fx(f,x,nm1);
derfx(j,x,nm1,omega);
susdi(j,f,x,nm1);
for (i=0; i<=nm1; i++) x1[i] -= x[i];
for (i=0; i<=nm1; i++) printf("%e ",x1[i]);
printf ("\n");
dnor = dmax(x,nm1)/dmax(x1,nm1);
printf ("%e\n",dnor);
}
while (dnor > TOL);

return 0;
}

return 0;
}

void fx(double *f, double *x, int n)


{
f[0] = 3*x[0]-cos(x[1]*x[2])-0.5;
f[1] = x[0]*x[0]-81*pow((x[1]+0.1),2)+sin(x[2])+1.06;
f[2] = exp((-x[0])*x[1])+20*x[2]+(10*acos(-1.e0)-3)/3;
}
void derfx(double *j, double *x, int n)
{
j[0] = 3;
j[1] = (-162)*(x[1]+0.1);
j[2] = 20;
}
double *vector(int n)
{
double *m;
m = (double *) malloc(n*sizeof(double));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return m;
}

void fx(double *f, double *x, int n)


{
f[0] = 3*x[0]-cos(x[1]*x[2])-0.5;
f[1] = x[0]*x[0]-81*pow((x[1]+0.1),2)+sin(x[2])+1.06;
f[2] = exp((-x[0])*x[1])+20*x[2]+(10*acos(-1.e0)-3)/3;
}
void derfx(double **j, double *x, int n, double omega)
{
j[0][0] = 3*(1+omega);
j[1][0] = 2*x[0];
j[1][1] = (-162)*(x[1]+0.1)*(1+omega);
j[2][0] = -exp((-x[0])*x[1])*x[1];
j[2][1] = -exp((-x[0])*x[1])*x[0];
j[2][2] = 20*(1+omega);
}
void susdi(double **a, double *b, double *x, int n)
{
int
i, j;
double c;
/*

double dmax(double *x, int n)


{
int i;
double dm;
for (i=0, dm=0; i<=n; i++) dm = max(fabs(x[i]),dm);
return dm;
}

11. Programa Newsor de la p


agina 319.

x[0] = b[0]/a[0][0];
for (i=1; i<=n; i++){
for (j=0, c=b[i]; j<=i-1; j++) c -= a[i][j]*x[j];
x[i] = c/a[i][i];
}
}
double **matriz(int nf, int nc)
{
int i;
double **m, *m1;
m1 = (double *) calloc(nf*nc,sizeof(double));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (double **) malloc(nf*sizeof(double *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++){
m[i] = m1;
m1 += nc;
}
return m;

/*
-- Resoluci
on de un sistema de ecuaciones no lineales
cualquie mediante el m
etodo de Newton
(Variante Sobrerelajaci
on)
*/
#include
#include
#include
#include

<stdio.h>
<math.h>
<float.h>
<stdlib.h>

#define N 3
#define TOL sqrt(DBL_EPSILON)
#define SWAPi(a,b) {int temp=a; a=b; b=temp;}
int
double
double
double
void
void
void

*ivector(int n);
*vector(int n);
**matriz(int nf, int nc);
dmax(double *x, int n);
fx(double *f, double *x, int n);
derfx(double **j, double *x, int n, double omega);
susdi(double **a, double *b, double *x, int n);

main (){
int
double

i, n=N, nm1=N-1;
**j, *f, *x, *x1, dnor, omega;

*** Sustituci
on directa *** */

}
double *vector(int n)
{
double *m;
m = (double *) malloc(n*sizeof(double));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return m;

851

852

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

double dmax(double *x, int n)


{
int i;
double dm;
for (i=0, dm=0; i<=n; i++) dm = max(fabs(x[i]),dm);
return dm;
}

void broyd(double **j, double *y, double *s, int n)


{
int
i, jj;
double sum, prod;
for (i=0, prod=0; i<=n; i++) prod += pow(s[i],2);
for (i=0; i<=n; i++){
for (jj=0, sum=0; jj<=n; jj++) sum += j[i][jj]*s[jj];
y[i] = (y[i]+sum)/prod;
}
for (i=0; i<=n; i++) for(jj=0; jj<=n; jj++)
j[i][jj]-=y[i]*s[jj];

12. Programa Broyden de la p


agina 323.
/*
-- Resoluci
on de un sistema de ecuaciones no lineales
cualquiera mediante el m
etodo cuasi Newton
resultante de aplicar la f
ormula de Broyden
*/
#include
#include
#include
#include

void gauss(double **a, double *b, double *x, int n)


{
int
i, ip, *ipvt, j, k, l, pi;
double c, r, r1, smax;

<stdio.h>
<math.h>
<float.h>
<stdlib.h>

ipvt = ivector(n);
for (i=0; i<=n; i++) ipvt[i]=i;

#define N 3
#define TOL sqrt(DBL_EPSILON)
#define SWAPi(a,b) {int temp=a; a=b; b=temp;}
int
double
double
double
void
void
void
void

/*

*ivector(int n);
*vector(int n);
**matriz(int nf, int nc);
dmax(double *x, int n);
fx(double *f, double *x);
derfx(double **j, double *x);
broyd(double **j, double *y, double *s, int n);
gauss(double **a, double *b, double *x, int n);

main (){
int
double
j
f
f1
s
xk
xkm1
y

=
=
=
=
=
=
=

i, n=N, nm1=N-1;
**j, *f, *f1, *s, *xk, *xkm1, *y, dnor;
matriz(n,n);
vector(n);
vector(n);
vector(n);
vector(n);
vector(n);
vector(n);

for (k=0; k<n; k++){


ip = ipvt[k];
for (i=k+1; i<=n; i++){
pi
= ipvt[i];
b[pi] += a[pi][k]*b[ip];
}
}

for (i=0; i<=nm1; i++) xk[i] = 1;


derfx(j,xk);
/*

*** Proceso iterativo ***

*/

do {
fx(f,xk);
for (i=0; i<=nm1; i++) f1[i] = f[i];
gauss(j,f,s,nm1);
for (i=0; i<=nm1; i++) xkm1[i] = xk[i]-s[i];
fx(f,xkm1);
for (i=0; i<=nm1; i++) y[i] = f[i]-f1[i];
broyd(j,y,s,nm1);
for (i=0; i<=nm1; i++) xk[i] = xkm1[i];
for (i=0; i<=nm1; i++) printf("%e ",xkm1[i]);
printf ("\n");
dnor = dmax(s,nm1)/dmax(xkm1,nm1);
printf ("%e\n",dnor);
}
while (dnor > TOL);

/*

*** Sustituci
on inversa *** */
x[n] = b[ipvt[n]]/a[ipvt[n]][n];
for (i=n-1; i>=0; i--){
pi = ipvt[i];
c = b[pi];
for (j=i+1; j<=n; j++) c -= a[pi][j]*x[j];
x[i] = c/a[pi][i];
}
free(ipvt);

}
double **matriz(int nf, int nc)
{
int i;
double **m, *m1;
m1 = (double *) calloc(nf*nc,sizeof(double));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (double **) malloc(nf*sizeof(double *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++){
m[i] = m1;
m1 += nc;
}
return m;

return 0;
}
void fx(double *f, double *x)
{
f[0] = 3*x[0]-cos(x[1]*x[2])-0.5;
f[1] = x[0]*x[0]-81*pow((x[1]+0.1),2)+sin(x[2])+1.06;
f[2] = exp((-x[0])*x[1])+20*x[2]+(10*acos(-1.e0)-3)/3;
}
void derfx(double **j, double *x)
{
j[0][0] = 3.;
j[0][1] = sin(x[1]*x[2])*x[2];
j[0][2] = sin(x[1]*x[2])*x[1];
j[1][0] = 2*x[0];
j[1][1] = (-162)*(x[1]+0.1);
j[1][2] = cos(x[2]);
j[2][0] = -exp((-x[0])*x[1])*x[1];
j[2][1] = -exp((-x[0])*x[1])*x[0];
j[2][2] = 20;

*** Triangularizaci
on *** */
for (k=0; k<n; k++){
smax = fabs(a[ipvt[k]][k]);
for (i=k+1, l=0; i<=n; i++){
ip = ipvt[i];
if (fabs(a[ip][k]) > smax){
l
= i;
smax = fabs(a[ip][k]);
}
}
if (l) SWAPi(ipvt[k],ipvt[l]);
pi = ipvt[k];
r1 = 1.0/a[pi][k];
for (i=k+1; i<=n; i++){
ip = ipvt[i];
r = a[ip][k]*r1;
for (j=k+1; j<=n; j++) a[ip][j] -= r*a[pi][j];
a[ip][k] = -r;
}
}

}
double *vector(int n)
{
double *m;

G.1 Codigos en C

m = (double *) malloc(n*sizeof(double));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return m;

f[0] = 6*atan(x[0]-10)-2*exp(-x[1])2*exp(-x[2])+2*x[1]+2*x[2]-9;
f[1] = 2*atan(x[0]-10)-4*exp(-x[1])exp(-x[2])+7*x[1]-2*x[2]-3;
f[2] = 2*atan(x[0]-10)-exp(-x[1])3*exp(-x[2])-x[1]+5*x[2]-3;

int *ivector(int n)
{
int *m;

void derfx(double **j, double *x)


{
j[0][0] = 6/(1+(x[0]-10)*(x[0]-10));
j[0][1] = 2*exp(-x[1])+2;
j[0][2] = 2*exp(-x[2])+2;
j[1][0] = 2/(1+(x[0]-10)*(x[0]-10));
j[1][1] = 4*exp(-x[1])+7;
j[1][2] = exp(-x[2])-2;
j[2][0] = 2/(1+(x[0]-10)*(x[0]-10));
j[2][1] = exp(-x[1])-1;
j[2][2] = 3*exp(-x[2])+5;
}

m = (int *) malloc(n*sizeof(int));
if (!m){
printf("Error de asignaci
on de memoria en ivector\n");
abort();
}
return m;
}
double dmax(double *x, int n)
{
int i;
double dm;
for (i=0, dm=0; i<=n; i++) dm = max(fabs(x[i]),dm);
return dm;
}

13. Programa Newtarmijo de la p


agina 333.

void gauss(double **a, double *b, double *x, int n)


{
int
i, ip, *ipvt, j, k, l, pi;
double c, r, r1, smax;
ipvt = ivector(n+1);
for (i=0; i<=n; i++) ipvt[i]=i;
/*

/*
Resoluci
on de un sistema de ecuaciones no lineales
mediante el m
etodo de Newton con el mecanismo
de salvaguarda de Armijo.
*/
#include
#include
#include
#include

<stdio.h>
<math.h>
<float.h>
<stdlib.h>

#define N 3
#define TOL sqrt(DBL_EPSILON)
#define SWAPi(a,b) {int temp=a; a=b; b=temp;}
int
double
double
double
void
void
void

*ivector(int n);
*vector(int n);
**matriz(int nf, int nc);
dnor(double *f, int n);
fx(double *f, double *x);
derfx(double **j, double *x);
gauss(double **j, double *f, double *x, int n);

for (k=0; k<n; k++){


ip = ipvt[k];
for (i=k+1; i<=n; i++){
pi
= ipvt[i];
b[pi] += a[pi][k]*b[ip];
}
}

main (){
int
double
j
f
s
x
x1

=
=
=
=
=

n=N, im1=N-1, i;
**j, *f, *x, *x1, *s, dnr, dnx, alfa;

matriz(n,n);
vector(n);
vector(n);
vector(n);
vector(n);

for (i=0; i<n; i++) x[i] = 0;


fx(f,x);
dnx = dnor(f,n);
while (dnx>TOL) {
derfx(j,x);
gauss(j,f,s,im1);
for (i=0; i<n; i++) x1[i] = x[i]-s[i];
fx(f,x1);
dnr = dnor(f,n);
alfa = 1.0;
while (dnr>(1.0-alfa/2)*dnx) {
alfa = alfa/2;
for (i=0; i<n; i++) x1[i] = x[i]-alfa*s[i];
fx(f,x1);
dnr = dnor(f,n);
}
printf ("%e,%e,%e,%e,%e\n",x[0],x[1],x[2],alfa,dnr);
for (i=0; i<=n; i++) x[i] = x1[i];
dnx = dnr;
}

/*

on inversa *** */
*** Sustituci
x[n] = b[ipvt[n]]/a[ipvt[n]][n];
for (i=n-1; i>=0; i--){
pi = ipvt[i];
for (j=i+1, c=b[pi]; j<=n; j++) c -= a[pi][j]*x[j];
x[i] = c/a[pi][i];
}
free(ipvt);

}
double **matriz(int nf, int nc)
{
int i;
double **m, *m1;
m1 = (double *) calloc(nf*nc,sizeof(double));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (double **) malloc(nf*sizeof(double *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++){
m[i] = m1;
m1 += nc;
}
return m;

return 0;
}
void fx(double *f, double *x)
{

*** Triangularizaci
on *** */
for (k=0; k<n; k++){
smax = fabs(a[ipvt[k]][k]);
for (i=k+1, l=0; i<=n; i++){
ip = ipvt[i];
if (fabs(a[ip][k]) > smax){
l
= i;
smax = fabs(a[ip][k]);
}
}
if (l) SWAPi(ipvt[k],ipvt[l]);
pi = ipvt[k];
r1 = 1.0/a[pi][k];
for (i=k+1; i<=n; i++){
ip = ipvt[i];
r = a[ip][k]*r1;
for (j=k+1; j<=n; j++) a[ip][j] -= r*a[pi][j];
a[ip][k] = -r;
}
}

853

854

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

double *vector(int n)
{
double *m;

f[1] = exp(x[0]-x[1])-1;
f[2] = exp(x[0])-2;
f[3] = exp(x[0]+x[1])-4;
}

m = (double *) malloc(n*sizeof(double));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return m;
}
int *ivector(int n)
{
int *m;
m = (int *) malloc(n*sizeof(int));
if (!m){
printf("Error de asignaci
on de memoria en ivector\n");
abort();
}
return m;

void derfx(double **j, double *x)


{
j[0][0] = exp(x[0]-2*x[1]);
j[0][1] = (-2)*exp(x[0]-2*x[1]);
j[1][0] = exp(x[0]-x[1]);
j[1][1] = -exp(x[0]-x[1]);
j[2][0] = exp(x[0]);
j[2][1] = 0;
j[3][0] = exp(x[0]+x[1]);
j[3][1] = exp(x[0]+x[1]);
}
double **matriz(int nf, int nc)
{
int i;
double **m, *m1;

m1 = (double *) calloc(nf*nc,sizeof(double));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (double **) malloc(nf*sizeof(double *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++){
m[i] = m1;
m1 += nc;
}
return m;

double dnor(double *x, int n)


{
int i;
double dm;
for (i=0, dm=0; i<n; i++) dm = x[i]*x[i];
return dm;
}

14. Programa Gausnewt de la p


agina 347
/*
-- Resoluci
on de un problema no lineal de m
nimos
cuadrados mediante el m
etodo de Gauss-Newton
*/
#include
#include
#include
#include
#define
#define
#define
#define
#define
double
double
double
void
void
void

<stdio.h>
<math.h>
<float.h>
<stdlib.h>

M 4
N 2
TOL sqrt(DBL_EPSILON)
SWAPi(a,b) {int temp=a; a=b; b=temp;}
SIGN(a,b) (b>=0 ? fabs(a) : -fabs(a))
*vector(int n);
**matriz(int nf, int nc);
dmax(double *x, int n);
fx(double *f, double *x);
derfx(double **j, double *x);
qrdes(double **a, double *b, double *x,
double *ax1, int m, int n, double *s);

j
f
x
p
ax1

=
=
=
=
=

i, n=N, nm1=N-1, m=M, mm1=M-1;


**j, *f, *x, *p, *ax1, s, dnor;
matriz(m,n);
vector(m);
vector(n);
vector(n);
vector(m);

m = (double *) malloc(n*sizeof(double));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return m;
}
double dmax(double *x, int n)
{
int i;
double dm;
for (i=0, dm=0; i<=n; i++) dm = max(fabs(x[i]),dm);
return dm;
}

*** Proceso iterativo ***

*/

do {
fx(f,x);
derfx(j,x);
qrdes(j,f,p,ax1,mm1,nm1,&s);
for (i=0; i<=nm1; i++) x[i] -= p[i];
for (i=0; i<=nm1; i++) printf("%e ",x[i]);
printf ("\n");
dnor = dmax(p,nm1)/dmax(x,nm1);
printf ("%e, %e\n",dnor,s);
}
while (dnor > TOL);
return 0;
}
void fx(double *f, double *x)
{
f[0] = exp(x[0]-2*x[1])-0.5;

qrdes(double **a, double *b, double *x,


double *d, int m, int n, double *s)

{
int
i, j, k, l;
double beta, sigma, sum, dmax, wj;
/*

for (i=0; i<=nm1; i++) x[i] = 1;


/*

double *vector(int n)
{
double *m;

void

main (){
int
double

*** Reducci
on QA = R ***

*/

for (j=0; j<=n; j++){


for (i=j, dmax=0; i<=n; i++)
dmax = max(dmax,fabs(a[i][j]));
if (!dmax) {
printf ("Stop: La matriz A no es de rango completo\n");
abort();
}
for (i=j+1, beta=0; i<=m; i++) beta += pow(a[i][j],2);
wj
= a[j][j];
sigma
= SIGN(sqrt(beta+wj*wj),wj);
wj
+= sigma;
beta
= 2/(beta+wj*wj);
a[j][j] = wj;
d[j]
= -sigma;
for (l=j+1; l<=n; l++){
for (k=j, sum=0; k<=m; k++) sum += a[k][j]*a[k][l];
sum *= beta;
for (k=j; k<=m; k++) a[k][l] -= a[k][j]*sum;
}
for (k=j, sum=0; k<=m; k++) sum += a[k][j]*b[k];
sum *= beta;
for (k=j; k<=m; k++) b[k] -= a[k][j]*sum;
}

G.1 Codigos en C

/* *** Resoluci
on

Rx = b *** */

x[n] = b[n]/d[n];
for (i=n-1; i>=0; i--){
for (k=i+1, sum=0; k<=n; k++) sum += a[i][k]*x[k];
x[i] = (b[i]-sum)/d[i];
}
/* *** Suma de residuos al cuadrado *** */
for (i=n+1, *s=0; i<=m; i++) *s += pow(b[i],2);
}

15. Programa Levmar de la p


agina 353.
/*
-- Resoluci
on de un problema no lineal de m
nimos cuadrados
mediante el m
etodo de Levenberg-Marquardt
*/
#include
#include
#include
#include

f[2] = exp(x[0])-2;
f[3] = exp(x[0]+x[1])+4;
}
void derfx(double **j, double *x)
{
j[0][0] = exp(x[0]-2*x[1]);
j[0][1] = (-2)*exp(x[0]-2*x[1]);
j[1][0] = exp(x[0]-x[1]);
j[1][1] = -exp(x[0]-x[1]);
j[2][0] = exp(x[0]);
j[2][1] = 0;
j[3][0] = exp(x[0]+x[1]);
j[3][1] = exp(x[0]+x[1]);
}
void gauss(double **a, double *b, double *x, int n)
{
int
i, ip, *ipvt, j, k, l, pi;
double c, r, r1, smax;
ipvt = ivector(n);
for (i=0; i<=n; i++) ipvt[i]=i;

<stdio.h>
<math.h>
<float.h>
<stdlib.h>

/*

#define M 4
#define N 2
#define SWAPi(a,b) {int temp=a; a=b; b=temp;}
int
double
double
double
double
void
void
void

*ivector(int n);
*vector(int n);
**matriz(int nf, int nc);
dmax(double *x, int n);
prod(double *x, double *y, int n, int m, int l1);
fx(double *f, double *x);
derfx(double **j, double *x);
gauss(double **a, double *b, double *x, int n);

main (){
int
double
j
jtj
a
f
f1
x
p
b

=
=
=
=
=
=
=
=

i, l, n=N, nm1=N-1, m=M, mm1=M-1, uno=1;


**j, **jtj, **a, *f, *f1, *x, *p, *b, amu, dnor, res,
res1, TOL=sqrt(DBL_EPSILON);
matriz(m,n);
matriz(n,n);
matriz(n,n);
vector(m);
vector(m);
vector(n);
vector(n);
vector(n);

for (k=0; k<n; k++){


ip = ipvt[k];
for (i=k+1; i<=n; i++){
pi
= ipvt[i];
b[pi] += a[pi][k]*b[ip];
}
}

amu = 0.1;
for (i=0; i<=nm1; i++) x[i] = 1;
/*

*** Proceso iterativo ***

}
void fx(double *f, double *x)
{
f[0] = exp(x[0]-2*x[1])-5;
f[1] = exp(x[0]-x[1])-1;

/*

*** Sustituci
on inversa *** */
x[n] = b[ipvt[n]]/a[ipvt[n]][n];
for (i=n-1; i>=0; i--){
pi = ipvt[i];
for (j=i+1, c=b[pi]; j<=n; j++) c -= a[pi][j]*x[j];
x[i] = c/a[pi][i];
}
free(ipvt);

*/

do {
fx(f,x);
derfx(j,x);
for (i=0; i<=nm1; i++) for (l=0; l<=nm1; l++)
jtj[i][l] = prod(&j[0][i],&j[0][l],mm1,n,n);
for (i=0; i<=nm1; i++) b[i] = prod(&j[0][i],f,mm1,n,uno);
res = prod(f,f,mm1,uno,uno);
for (i=0; i<=nm1; i++) for (l=0; l<=nm1; l++)
a[i][l] = jtj[i][l];
do {
for (i=0; i<=nm1; i++) a[i][i] = jtj[i][i]+amu;
gauss(a,b,p,nm1);
for (i=0; i<=nm1; i++) b[i] = x[i]-p[i];
fx(f1,b);
res1 = prod(f1,f1,mm1,uno,uno);
amu *= 10;
} while (res1 > res);
for (i=0; i<=nm1; i++) x[i] = b[i];
for (i=0; i<=nm1; i++) f[i] = f1[i];
dnor = dmax(p,nm1)/dmax(x,nm1);
for (i=0; i<=nm1; i++) printf("%e ",x[i]);
printf ("\n");
amu /= 100;
printf ("%e, %e, %e\n",res1,dnor,amu);
} while (dnor > TOL);
return 0;

*** Triangularizaci
on *** */
for (k=0; k<n; k++){
smax = fabs(a[ipvt[k]][k]);
for (i=k+1, l=0; i<=n; i++){
ip = ipvt[i];
if (fabs(a[ip][k]) > smax){
l
= i;
smax = fabs(a[ip][k]);
}
}
if (l) SWAPi(ipvt[k],ipvt[l]);
pi = ipvt[k];
r1 = 1.0/a[pi][k];
for (i=k+1; i<=n; i++){
ip = ipvt[i];
r = a[ip][k]*r1;
for (j=k+1; j<=n; j++) a[ip][j] -= r*a[pi][j];
a[ip][k] = -r;
}
}

}
double **matriz(int nf, int nc)
{
int i;
double **m, *m1;
m1 = (double *) calloc(nf*nc,sizeof(double));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (double **) malloc(nf*sizeof(double *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++, m1+=nc) m[i] = m1;
return m;
}
double *vector(int n)
{
double *m;
m = (double *) malloc(n*sizeof(double));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();

855

856

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

}
return m;

xp1 = eps+1;
while (xp1!=1) {
eps /= 2;
xp1 = eps+1;
}

}
int *ivector(int n)
{
int *m;

xp1d = epsd+1;
while (xp1d!=1) {
epsd /= 2;
xp1d = epsd+1;
}

m = (int *) malloc(n*sizeof(int));
if (!m){
printf("Error de asignaci
on de memoria en ivector\n");
abort();
}
return m;

printf ("eps = %15.9e, epsd = %15.9e\n",eps*2,epsd*2);


return 0;

}
}
double dmax(double *x, int n)
{
int i;
double dm;
for (i=0, dm=0; i<=n; i++) dm = max(fabs(x[i]),dm);
return dm;
}
double prod(double *x, double *y, int n, int m, int l1)
{
int i;
double dm;
for (i=0, dm=0; i<=n; i++) dm += (*(x+m*i))*(*(y+l1*i));
return dm;
}

3. Programa Suma-de-serie de la p
agina 710.
/*
Suma de una serie de infinitos sumandos
*/
#include <stdio.h>
#include <math.h>
#include <float.h>
#define R 1e10
main (){
double i,suma,sqrt();

G.1.5

C
odigos del ap
endice B

suma = 0.0;
for (i=R;i>0.0;i--) suma += 1.0/(i*i);

1. Programa Beta-y-t de la p
agina 701
/*
C
alculo de los par
ametros beta y t de una m
aquina
*/

printf ("suma = %15.14f\n",suma);


printf ("pi
= %15.14f\n",sqrt(suma*6));
return 0;
}

G.1.6

#include <stdio.h>
#include <math.h>
#include <float.h>

C
odigos del ap
endice H

1. Programa Condest de la p
agina 882

main (){

/*
Estimaci
on del n
umero de condici
on de una matriz.
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double a=1,b=2,t=1,beta,f();
while ((f(a+1)-a)==1) a *= 2;
while ((a+b)==a) b *= 2;
beta = (a+b)-a;
a
= beta;
while ((f(a+1)-a)==1) {
t++;
a *= beta;
}

#define N 10

printf ("beta = %f, t = %15.9e\n",beta,t);


return 0;

int
*ivector(int n);
double *vector(int n);
double **matriz(int nf, int nc);
void
gau(int n, double **a, int *ipvt);
double rcond(int n, int *ipvt, double **a, double anorm, double *z);

}
main (){
double f(s)
double s;
{
return s;
}

int
i, j, n=N, *ipvt;
double cond, anorm, aux, **a, *z;
FILE *f_in;
FILE *f_out;

2. Programa EPSILON de la p
agina 705.
/*
C
alculo de la precisi
on de una m
aquina
*/
#include <stdio.h>
#include <math.h>
#include <float.h>
main (){
float eps=1.0, xp1;
double epsd=1.0, xp1d;
/*

*** C
alculo recurrente ***

/* entrada de datos */
/* salida de datos */

ipvt = ivector(n);
a
= matriz(n,n);
z
= vector(n);
if ((f_in=fopen("clin1","r"))==NULL) {
printf("No se ha podido abrir el fichero clin1\n");
exit(-1);
}
f_out=fopen("sal.txt","w");
if ((f_out=fopen("sal.txt","w"))==NULL) {
printf("No se ha podido abrir el fichero sal.txt\n");
exit(-1);
}
for (i=0;i<n;i++) for (j=0;j<n;j++) fscanf(f_in,"%lf ",&a[i][j]);

*/

/*
norma 1 de la matriz

G.1 Codigos en C

*/
anorm=0.0;
for (i=0;i<n;i++) {
aux=0.0;
for (j=0;j<n;j++) aux+=fabs(a[j][i]);
if (anorm<aux) anorm=aux;
}

z[i]=z[k];
z[k]=t;
for (l=k+1;l<n;l++) z[l]=z[l]+t*a[l][k];
if (fabs(z[k])>1.0) {
s=1.0/fabs(z[k]);
for (l=0;l<n;l++) z[l]=s*z[l];
ynorm=s*ynorm;
}

/*
Estimaci
on del n
umero de condici
on. Factorizar primero PA=LU
*/
gau(n,a,ipvt);
for(j=0;j<n;j++) z[j]=0.0;
cond=rcond(n,ipvt,a,anorm,z);

}
z3=0.0;
for (l=0;l<n;l++) z3=z3+fabs(z[l]);
s=1.0/z3;
for (l=0;l<n;l++) z[l]=s*z[l];
ynorm=s*ynorm;
for (k=n-1;k>=0;k--) {
if (fabs(z[k])>fabs(a[k][k])) {
s=fabs(a[k][k])/fabs(z[k]);
for (l=0;l<n;l++) z[l]=s*z[l];
ynorm=ynorm*s;
}
if (a[k][k]!=0.0) z[k]=z[k]/a[k][k];
else z[k]=1.0;
t=-z[k];
for (l=0;l<=k-1;l++) z[l]=z[l]+t*a[l][k];
}
sumb=0.0;
for (l=0;l<n;l++) sumb=sumb+fabs(z[l]);
s=1.0/sumb;
for (l=0;l<n;l++) z[l]=s*z[l];
ynorm=ynorm*s;
if (anorm==0.0) cond=0.0;
else cond=anorm/ynorm;

fprintf(f_out,"La soluci
on es cond = %15.7le\n",cond);
fclose(f_in);
fclose(f_out);
return 0;
}
/*

----------------------------------------Subrutina rcond
*/
double rcond(int n, int *ipvt, double **a, double anorm, double *z)
{
int i,k,l;
double ek,z1,z2,z3,auxil,wk,wkm,sm,sumb,sumz,s,t;
double ynorm,cond;
ek=1.0;
for (k=0;k<n;k++){
if(z[k]>0.0) if(ek>0.0) ek=-ek;
else
if (ek<0.0) ek=-ek;
if (fabs(ek-z[k])>fabs(a[k][k])) {
s= fabs(a[k][k])/fabs(ek-z[k]);
for(l=0;l<n;l++) z[l]=s*z[l];
ek=s*ek;
}
wk=ek-z[k];
wkm=(-ek)-z[k];
s=fabs(wk);
sm = fabs(wkm);
if (a[k][k]!=0.0) {
wk=wk/a[k][k];
wkm=wkm/a[k][k];
}
else {
wk=1.0;
wkm=1.0;
}
z1=0.0;
for(l=k+1;l<n;l++) z1=z1+fabs(z[l]+wkm*a[k][l]);
sm=sm+z1;
for(l=k+1;l<n;l++) z[l]=z[l]+wk*a[k][l];
auxil=0.0;
for(l=k+1;l<n;l++) auxil=auxil+fabs(z[l]);
s=s+auxil;
if (s<sm) {
t=wkm-wk;
wk=wkm;
for(l=k+1;l<n;l++) z[l]=z[l]+t*a[k][l];
}
z[k]=wk;
}
z2=0.0;
for(l=0;l<n;l++) z2=z2+fabs(z[l]);
s=1.0/z2;
for(l=0;l<n;l++) z[l]=s*z[l];
for(k=n-1;k>=0;k--) {
sumz=0.0;
for(l=k+1;l<n;l++) sumz=sumz+a[l][k]*z[l];
z[k]=z[k]+sumz;
if (fabs(z[k])>1.0) {
s=1.0/fabs(z[k]);
for (l=0;l<n;l++) z[l]=s*z[l];
}
i=ipvt[k];
t=z[i];
z[i]=z[k];
z[k]=t;
}
sumb=0.0;
for(l=0;l<n;l++) sumb=sumb+fabs(z[l]);
s=1.0/sumb;
for(l=0;l<n;l++) z[l]=s*z[l];
ynorm=1.0;
for(k=0;k<n;k++) {
i=ipvt[k];
t=z[i];

return cond;
}
/*

----------------------------------------Subrutina gauss
*/
void gau(int n, double **a, int *ipvt)
{
int i,j,k,l;
double smax, r, r1;
for (k=0;k<n-1;k++) {
smax=0.0;
for (i=k;i<n;i++) {
if (fabs(a[i][k])>smax) {
l=i;
smax=fabs(a[i][k]);
}
}
ipvt[k]=l;
if (l!=k) {
r=a[l][k];
a[l][k]=a[k][k];
a[k][k]=r;
}
r1=-1.0/a[k][k];
for (j=k+1;j<n;j++) a[j][k]=a[j][k]*r1;
for (i=k+1;i<n;i++) {
r=a[l][i];
if (l!=k) {
a[l][i]= a[k][i];
a[k][i]=r;
}
for (j=k+1;j<n;j++) a[j][i]=a[j][i]+r*a[j][k];
}
}
ipvt[n-1]=n-1;
}
double **matriz(int nf, int nc)
{
int i;
double **m, *m1;
m1 = (double *) calloc(nf*nc,sizeof(double));
if (!m1){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
m = (double **) malloc(nf*sizeof(double *));
if (!m){
printf("Error de asignaci
on de memoria en matriz\n");
abort();
}
for (i=0; i<nf; i++){
m[i] = m1;
m1 += nc;
}
return m;
}

857

858

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

!
double *vector(int n)
{
double *m;

print *,"Dimensi
on de la Matriz A?"
read *,n
allocate (ipoint(n),a(n,n),b(n),x(n))
print *,"Fichero de datos?"
read (A),fil
open (10,FILE=fil)
read (10,*) a,b

m = (double *) malloc(n*sizeof(double));
if (!m){
printf("Error de asignaci
on de memoria en vector\n");
abort();
}
return m;

!
ipoint = (/(i,i=1,n)/)
!
!
!

}
int *ivector(int n)
{
int *m;
m = (int *) malloc(n*sizeof(int));
if (!m){
printf("Error de asignaci
on de memoria en ivector\n");
abort();
}
return m;
}

G.2

C
odigos en Fortran 90

G.2.1

C
odigos del captulo 1

!
do k=1,n-1
pi = ipoint(k)
do i=k+1,n
ip = ipoint(i)
b(ip) = b(ip)+a(ip,k)*b(pi)
enddo
enddo

1. Programa Gauss de la p
agina 15.
PROGRAM Eliminacion_de_Gauss
!
integer, parameter :: n=4
integer
:: k,l,i
real
:: a(n,n+1),x(n),temp(n+1),smax
!
data a/2.,-4.,4.,0.,1.,-2.,1.,-3.,0.,3.,-2.,-12.,4.,-7.,8.,
-1.,2.,-9.,2.,2./
!
! *** Eliminaci
on de Gauss ***
!
! * Triangularizaci
on *
!
do k=1,n-1
l = 0; smax = abs(a(k,k))
do i=k+1,n
if (abs(a(i,k))>smax) then
l = i; smax = abs(a(i,k))
endif
enddo
if (l/=0) then
temp = a(l,:); a(l,:)=a(k,:); a(k,:)=temp;
endif
a(k,:) = a(k,:)/a(k,k)
do i=k+1,n
a(i,k+1:n+1) = a(i,k+1:n+1)-a(i,k)*a(k,k+1:n+1)
enddo
enddo
!
! * Sustituci
on inversa *
!
x(n) = a(n,n+1)/a(n,n)
do i=n-1,1,-1
x(i) = (a(i,n+1)-dot_product(a(i,i+1:n),x(i+1:n)))/a(i,i)
enddo
!
print *,x
!
END PROGRAM Eliminacion_de_Gauss

2. Programa Gaussc de la p
agina 19.
PROGRAM Gaussc
!
integer, allocatable :: ipoint(:)
integer
:: pi,n,i,k,ip,l,iaux
real, allocatable
:: a(:,:),b(:),x(:)
real
:: smax,r,r1
character
:: fil*12
!
! *** Resoluci
on de un sistema lineal regular cualquiera Ax=b
!
mediante eliminaci
on de Gauss ***

* Triangularizaci
on *
do k=1,n-1
l = 0; smax = abs(a(ipoint(k),k))
do i=k+1,n
ip = ipoint(i)
if (abs(a(ip,k))>smax) then
l = i; smax = abs(a(ip,k))
endif
enddo
if (l/=0) then
iaux = ipoint(k); ipoint(k) = ipoint(l); ipoint(l) = iaux
endif
pi = ipoint(k)
r1 = 1/a(pi,k)
do i=k+1,n
ip = ipoint(i)
r = a(ip,k)*r1
a(ip,k+1:n) = a(ip,k+1:n)-r*a(pi,k+1:n)
a(ip,k)
= -r
enddo
enddo

!
!
!

* Sustituci
on inversa *
x(n) = b(ipoint(n))/a(ipoint(n),n)
do i=n-1,1,-1
ip = ipoint(i)
x(i) = (b(ip)-dot_product(a(ip,i+1:n),x(i+1:n)))/a(ip,i)
enddo

&

!
print ("Soluci
on:",9f7.3:),x(:)
!
END PROGRAM Gauss

3. Programa Crout de la p
agina 30.
PROGRAM Crout
!
integer, parameter :: n=3
integer
:: i,j,k
real
:: a(n,n)
!
data a/10.,20.,30.,10.,25.,50.,20.,40.,61/
!
! *** Factorizaci
on LU1 por el m
etodo de Crout ***
!
do k=1,n
do i=k,n
a(i,k)=a(i,k)-dot_product(a(i,1:k-1),a(1:k-1,k))
enddo
do i=k+1,n
a(k,i)=(a(k,i)-dot_product(a(k,1:k-1),a(1:k-1,i)))/a(k,k)
enddo
enddo
!
print (3f7.2),(a(j,:),j=1,n)
!
END PROGRAM Crout

4. Programa Croutp de la p
agina 33.
PROGRAM Croutp
!
implicit none
!
integer, parameter :: n = 3
!
integer , dimension(n) :: ipvt
integer :: i, k, l, j, iaux

G.2 Codigos en Fortran 90

real , dimension(n,n) :: a
real :: smax, suma, aux

data a/10.,20.,30.,10.,25.,50.,20.,40.,61/

implicit none

integer, parameter :: n = 4

integer , dimension(n) :: ipvt


integer :: i, j, k, imax, iaux
real , dimension(n,n) :: a
real :: suma, amax, dum

do i = 1,n
ipvt(i) = i
end do
!
!
!

!
*** Factorizaci
on LU1 con pivotaci
on: m
etodo de Crout ***

data a/1.,1.,-2.,0.,-4.,0.,0.,0.,1.,1.,-1.,1.,1.,3.,0.,0./
!

do k = 1,n
l
= 0
smax = 0.0
do i = k,n
suma = 0.0
l = 1
if (k-1>0) then
suma = sum(a(i,:k-1)*a(:k-1,k))
l = k
endif
a(i,k) = a(i,k)-suma
if (abs(a(i,k))>smax) then
smax = abs(a(i,k))
l
= i
endif
end do
if (l/=0) then
do j = 1,n
aux
= a(l,j)
a(l,j) = a(k,j)
a(k,j) = aux
end do
iaux
= ipvt(l)
ipvt(l) = ipvt(k)
ipvt(k) = iaux
endif
do i = k+1,n
suma = 0.0
suma = sum(a(k,:k-1)*a(:k-1,i))
a(k,i) = (a(k,i)-suma)/a(k,k)
end do
end do

do i = 1,n
ipvt(i) = i
end do
!
!
!

print *,ipvt
print *,(a(i,:),i=1,n)
!
END PROGRAM Croutp

5. Programa Croutl1u de la p
agina 36.
PROGRAM Croutl1u
!
implicit none

!
print *,ipvt
print 1,((a(i,j),j=1,n),i=1,n)
!
1 format(4f8.3)
!
END PROGRAM Dool

!
integer, parameter :: n = 3
!
integer :: k, j, l, i
real , dimension(n,n) :: a
real :: suma
!
data a/10.,20.,30.,10.,25.,50.,20.,40.,61/
*** Factorizaci
on L1U por el m
etodo de Crout ***
do k = 1,n
do j = k,n
suma = 0.0
suma = sum(a(k,:k-1)*a(:k-1,j))
a(k,j) = a(k,j)-suma
end do
do i = k+1,n
suma = 0.0
suma = sum(a(i,:k-1)*a(:k-1,k))
a(i,k) = (a(i,k)-suma)/a(k,k)
end do
end do

7. Programa Chol de la p
agina 45.
PROGRAM Chol
!
implicit none
!
integer, parameter :: n = 4
!
integer :: i, j
real , dimension(n,n) :: a
real , dimension(n) :: b
real :: suma
!
!
!
!

print 20,(a(i,:),i=1,n)
!
20 format(3f7.2)
!
END PROGRAM Croutl1u

PROGRAM Dool
!

data a/5.,1.,-2.,0.,1.,2.,0.,0.,-2.,0.,4.,1.,0.,0.,1.,3./
data b/1.,5.,14.,15./
T
*** Factorizaci
on de Cholesky G G ***
do i = 1,n
suma = a(i,i)
suma = suma-sum(a(:i-1,i)**2)
a(i,i) = sqrt(suma)
do j = i+1,n
suma = a(i,j)
suma = suma-sum(a(:i-1,i)*a(:i-1,j))
a(i,j) = suma/a(i,i)
end do
end do

6. Programa Dool de la p
agina 38.

*** Factorizaci
on L1U con pivotaci
on; m
etodo de Doolittle ***
do j = 1,n
do i = 1,j-1
suma = a(i,j)
suma = suma-sum(a(i,:i-1)*a(:i-1,j))
a(i,j) = suma
end do
amax = 0.0
do i = j,n
suma = a(i,j)
suma = suma-sum(a(i,:j-1)*a(:j-1,j))
a(i,j) = suma
if (abs(suma)>=amax) then
imax = i
amax = abs(suma)
endif
end do
if (j/=imax) then
do k = 1,n
dum
= a(imax,k)
a(imax,k) = a(j,k)
a(j,k)
= dum
end do
iaux
= ipvt(imax)
ipvt(imax) = ipvt(j)
ipvt(j)
= iaux
endif
if (j/=n) then
if (a(j,j).eq.0.0) a(j,j) = 1.0e-20 ! Se divide la
dum = 1.0/a(j,j)
!
columna por
a(j+1:n,j) = a(j+1:n,j)*dum
!
A(j,j)
endif
end do
if (a(n,n).eq.0.0) a(n,n) = 1.0e-20

!
!
!

859

!
!
!

*** Sustituci
on directa
do i = 1,n
b(i) = b(i)-sum(a(:i-1,i)*b(:i-1))
b(i) = b(i)/a(i,i)

860

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

end do
!
!
!

a(iq,k) = aux
end do
do k = j+1,n
aux
= a(k,j+1)
a(k,j+1) = a(k,iq)
a(k,iq) = aux
end do
beta(j) = v(j+1)
endif
if (j<=n-2) then
l(j+2:n,j+1) = v(j+2:n)
if (v(j+1)/=0.) then
l(j+2:n,j+1) = l(j+2:n,j+1)/v(j+1)
endif
endif
end do

*** Sustituci
on inversa
b(n) = b(n)/a(n,n)
do i = n-1,1,-1
b(i) = b(i)-sum(a(i,i+1:n)*b(i+1:n))
b(i) = b(i)/a(i,i)
end do

!
print 1,(a(i,:),i=1,n)
print 1,b
!
1 format(4f9.4)
!
END PROGRAM Chol
!

print
print
print
print

8. Programa Aasen de la p
agina 57.
PROGRAM Aasen

*,alfa
*,beta(:n-1)
*,((l(j,i),j=i+1,n),i=1,n-1)
*,ipvt

!
END PROGRAM Aasen

!
implicit none
!
integer, parameter :: n = 3
!
integer , dimension(n) :: ipvt
integer :: i, j, k, iq, iaux
real , dimension(n,n) :: a
real , dimension(n) :: alfa, beta
real , dimension(n,n) :: l
real , dimension(n) :: h, v
real , dimension(0:n) :: l0
real :: smax, suma, aux
!

9. Programa Bunch y rutina bunchkauf de la


p
agina 66.
PROGRAM Bunch
!
implicit none
!
integer, parameter :: n = 3
!

data a/1.,10.,20.,10.,1.,30.,20.,30.,1./

integer , dimension(n) :: ipvt


integer :: i, j
real, dimension(n,n) :: a

!
do i = 1,n
ipvt(i) = i
end do
!
!
!

T
*** Factorizaci
on LTL ***
do j = 1,n
if (j==1) then
h(j) = a(1,1)
else if (j==2) then
h(1) = beta(1)
h(2) = a(2,2)
else
l0(0) = 0.
l0(1) = 0.
l0(2:j-1) = l(j,2:j-1)
l0(j) = 1
h(j) = a(j,j)
h(:j-1) = beta(0:j-2)*l0(:j-2)+alfa(:j-1)*l0(1:j-1)+ &
beta(:j-1)*l0(2:j)
h(j)
= h(j)-sum(l0(1:j-1)*h(:j-1))
endif

!
data a/1.,10.,20.,10.,1.,30.,20.,30.,1./
!
call bunchkauf (a,n,ipvt)
print *,((a(i,j),j=1,n),i=1,n)
print *,ipvt
!
END PROGRAM Bunch
SUBROUTINE bunchkauf (a,n,ipvt)
!
implicit none
!
integer , intent(in) :: n
integer , intent(inout) :: ipvt(n)
real a(n,n)
!
integer :: k, km1, imax, kstep, j, jmax
real :: mulk, mulkm1, alpha, absakk, colmax, rowmax, t,
ak, akm1, deno, bk, bkm1
logical :: swap

&

!
if (j==1.or.j==2) then
alfa(j) = h(j)
else
alfa(j) = h(j)-beta(j-1)*l(j,j-1)
endif

!
if (j<=n-1) then
smax = 0.
iq
= j
do k = j+1,n
suma = 0.
suma = -sum(l(k,:j)*h(:j))
v(k) = a(k,j)+suma
if (abs(v(k))>smax) then
smax = abs(v(k))
iq
= k
endif
end do
aux
= v(j+1)
v(j+1) = v(iq)
v(iq) = aux
do k = 2,j
aux
= l(j+1,k)
l(j+1,k) = l(iq,k)
l(iq,k) = aux
end do
iaux
= ipvt(j+1)
ipvt(j+1) = ipvt(iq)
ipvt(iq) = iaux
do k = j+1,n
aux
= a(j+1,k)
a(j+1,k) = a(iq,k)

integer , external :: isamax


!
!
!
!
!
!
!
!
!
!

a(-,-)

Al final de la factorizaci
on contiene la matriz
diagonal en bloques y los multiplicadores necesarios
para obtenerla.
T
Se puede escribir de la forma a=u*b*u , donde u es
el producto de matrices de permutaci
on y matrices
triangular superior.

ipvt()

Indicador de la pivotaciones realizadas.

alpha = (1.0e0+sqrt(17.0e0))/8.0e0
k
= n
do while(k>1)
!
! *** Determinar pivotaci
on diagonal.
!
kstep indica el tama
no del bloque;
!
swap si se realizan intercambios de filas y columnas.
!
km1
= k-1
! Se determina el mayor
absakk = abs(a(k,k))
! elemento no en la
imax
= isamax(k-1,a(1,k))
! diagonal de columna
colmax = abs(a(imax,k))
! k.
if (absakk>=alpha*colmax) then
kstep = 1
swap = .false.
else
rowmax = 0.0e0
!
Mayor elemento no en la diagonal en la fila imax.
rowmax = amax1(rowmax,maxval(abs(a(imax,imax+1:k))))
if (imax/=1) then
jmax
= isamax(imax-1,a(1,imax))

G.2 Codigos en Fortran 90

rowmax = amax1(rowmax,abs(a(jmax,imax)))
endif
if (abs(a(imax,imax))>=alpha*rowmax) then
kstep = 1
swap = .true.
else if (absakk>=alpha*colmax*(colmax/rowmax)) then
kstep = 1
swap = .false.
else
kstep = 2
swap = imax/=km1
endif
endif
if (amax1(absakk,colmax)==0.0e0) then
ipvt(k) = k
! La columna k es cero;
go to 190
!
seguir a otra.
endif
if (kstep==1) then
!
! * Bloque pivote 1 x 1 *
!
ipvt(k) = k
if (swap) then
call sswap (imax,a(1,imax),a(1,k))! Intercambiar
do j = k,imax,-1
! filas y
t
= a(j,k)
! columnas.
a(j,k)
= a(imax,j)
!
a(imax,j) = t
!
end do
!
ipvt(k) = imax
!
endif
!
do j = k-1,1,-1
! Eliminaci
on.
mulk = -a(j,k)/a(k,k)
call saxpy (j,mulk,a(1,k),a(1,j))
a(j,k) = mulk
end do
else
! KSTEP=2
!
! * Bloque pivote 2 x 2 *
!
ipvt(k)
= 1-k
ipvt(k-1) = ipvt(k)
if (swap) then
call sswap (imax,a(1,imax),a(1,k-1)) ! Intercambiar
do j = k-1,imax,-1
! filas y
t
= a(j,k-1)
! columnas.
a(j,k-1) = a(imax,j)
!
a(imax,j) = t
!
end do
!
t
= a(k-1,k)
!
a(k-1,k) = a(imax,k)
!
a(imax,k) = t
!
ipvt(k)
= -imax
!
endif
!
!
if (k-2/=0) then
! Eliminaci
on
ak
= a(k,k)/a(k-1,k)
akm1 = a(k-1,k-1)/a(k-1,k)
deno = 1.0e0-ak*akm1
do j = k-2,1,-1
bk
= a(j,k)/a(k-1,k)
bkm1
= a(j,k-1)/a(k-1,k)
mulk
= (akm1*bk-bkm1)/deno
mulkm1 = (ak*bkm1-bk)/deno
call saxpy (j,mulk,a(1,k),a(1,j))
call saxpy (j,mulkm1,a(1,k-1),a(1,j))
a(j,k)
= mulk
a(j,k-1) = mulkm1
end do
endif
endif
190
continue
k = k-kstep
end do
ipvt(1) = 1
!
return
END SUBROUTINE bunchkauf
SUBROUTINE sswap(n,a,b)
!
implicit none

a(i) = b(i)
b(i) = aux
end do
return
END SUBROUTINE sswap
INTEGER FUNCTION isamax (n,a)
!
implicit none
!
integer , intent(in) :: n
real , intent(in) :: a(n)
!
integer :: i
real :: dmax
!
isamax = 1
dmax
= abs(a(1))
do i = 2,n
if (abs(a(i))>dmax) then
isamax = i
dmax
= abs(a(i))
endif
end do
return
END FUNCTION isamax
SUBROUTINE saxpy(j,t,a,b)
!
implicit none
!
integer , intent(in)
real , intent(in) ::
real , intent(in) ::
real , intent(inout)
!
b(:j) = b(:j)+t*a(:j)
return
END SUBROUTINE saxpy

10. Programa Grmsch de la p


agina 87.
PROGRAM Grmsch
!
implicit none
!
integer, parameter :: m = 4
integer, parameter :: n = 3
!
integer :: j, i, k
real(kind=2), dimension(m,n) :: a
real(kind=2), dimension(n,n) :: u
real(kind=2), dimension(n) :: x
real(kind=2), dimension(m) :: b, res
real(kind=2) :: epsi, dmax, temp
!
real(kind=2), external :: prod
!
data a/1.d0,0.,0.,0.,1.d0,0.,0.,0.,1.d0,0.,0.,0./
data b/1.d0,0.,0.,0./
!
!
!

!
!
!

integer , intent(in) :: n
real , intent(inout) :: a(n)
real , intent(inout) :: b(n)
!
!
do i = 1,n
aux = a(i)

*** Ortonormalizar columnas de A ***


epsi
= dsqrt(epsilon(1.d0))*10
a(2,1) = epsi
a(3,2) = epsi
a(4,3) = epsi
dmax
= 0.d0
do j = 1,n
do i = 1,j-1
u(i,j) = prod(m,a(1,i),a(1,j))
a(:m,j) = a(:m,j)-u(i,j)*a(:m,i)
end do
temp
= dsqrt(prod(m,a(1,j),a(1,j)))
u(j,j) = temp
a(:m,j) = a(:m,j)/temp
k = m+1

integer :: i
real :: aux

:: j
t
a(1)
:: b(1)

!
!
!

* Comprobar dependencia lineal de los vectores columna *


dmax = dmax1(temp,dmax)
if (dmax+temp==dmax) then
print *,Stop: dependencia lineal de columna ,k
stop
endif
end do
T
*** Resolver Ux=E b ***
x(n) = prod(m,a(1,n),b)/u(n,n)
do i = n-1,1,-1

861

862

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

temp = prod(m,a(1,i),b)
temp = temp-sum(u(i,i+1:n)*x(i+1:n))
x(i) = temp/u(i,i)
end do
!
!
!
!

!
!

*** Vector de residuos


do i = n,1,-1
s
= betas(i)*sum(a(i+1:m,i)*b(i+1:m))
b(i)
= -a(i,i)*s
b(i+1:m) = b(i+1:m)-a(i+1:m,i)*s
end do

*** Residuos: sustraer del vector b sus componentes en la base


ortonormal que define E ***
!
res = b
do j = 1,n
temp
= prod(m,a(1,j),res)
res(:m) = res(:m)-temp*a(:m,j)
end do

print 50,x
print 60,s1
print 70,b
!
50 format(x=(,f6.4,,,f6.4,,,f6.4,))
60 format(Suma de residuos al cuadrado=,f9.6)
70 format(Vector de residuos,4f8.4)

!
print *,x,res
!

!
END PROGRAM Grmsch
REAL(kind=2) FUNCTION prod (n,x,y)

!
implicit none

END PROGRAM Qrdes

12. Programa Mincuad de la p


agina 102.

!
integer , intent(in) :: n
real(kind=2), intent(in) :: x(1)
real(kind=2), intent(in) :: y(1)
!
real(kind=2) :: suma

PROGRAM Mincuad
!
implicit none
!
integer, parameter :: m = 4
integer, parameter :: n = 4

!
suma = 0.d0
if (n==0) then
prod = 0.d0
else
suma = dot_product(x(:n),y(:n))
prod = suma
endif

!
integer , dimension(n) :: ipiv
integer :: ira, i, imax, j, k, kp1, l
real(kind=2), dimension(m,n) :: a
real(kind=2), dimension(n,m) :: a1
real(kind=2), dimension(m) :: b, w
real(kind=2), dimension(n,m) :: w1
real(kind=2), dimension(n) :: x
real(kind=2), dimension(m) :: beta1
real(kind=2) :: tau, rmax, h, tmp, beta, s1, suma

!
return
END FUNCTION prod
!

11. Programa Qrdes de la p


agina 96.
!
!
!

PROGRAM Qrdes
!
implicit none
!
integer, parameter :: m = 4
integer, parameter :: n = 3
!
integer :: j, i, l
real, dimension(m,n) :: a
real, dimension(m) :: b
real, dimension(n) :: d, x, betas
real :: rmm, beta, wj, sigma, s, s1
!
data a/1.,1.,1.,1.,1.,2.,3.,4.,1.,4.,9.,16./
data b/2.,3.,5.,6./
!
!
!

*** Reducci
on QA=R ***
do j = 1,n
rmm = 0.0
rmm = amax1(rmm,maxval(abs(a(j:m,j))))
if (rmm==0.0) stop Matriz A de rango incompleto
beta
= 0.0
beta
= sum(a(j+1:m,j)**2)
wj
= a(j,j)
sigma
= sign(sqrt(beta+wj*wj),wj)
wj
= wj+sigma
beta
= 2.0/(beta+wj*wj)
a(j,j)
= wj
d(j)
= -sigma
betas(j) = beta
do l = j+1,n
s
= beta*sum(a(j:m,j)*a(j:m,l))
a(j:m,l) = a(j:m,l)-a(j:m,j)*s
end do
s
= beta*sum(a(j:m,j)*b(j:m))
b(j:m) = b(j:m)-a(j:m,j)*s
end do

!
!
!

*** Resoluci
on

!
!
!

*** Suma de residuos al cuadrado


s1 = sum(b(n+1:m)**2)

!
k = ira
do j = 1,ira
if (dabs(a(j,j))<=tau) then
k = j-1
exit
endif
end do
kp1
= k+1
s1
= sum(b(kp1:m)**2)
a1(:n,:k) = transpose(a(:k,:n))
if (k/=n) then

Rx = b

x(n) = b(n)/d(n)
do i = n-1,1,-1
x(i) = (b(i)-sum(a(i,i+1:n)*x(i+1:n)))/d(i)
end do

data a/1.,1.,1.,1.,1.,2.,3.,4.,1.,4.,9.,16.,1.,4.,9.,16./
data b/2.,3.,5.,6./
data tau/0.000001/
|R
R |
*** Reducci
on QAP=| 11 12| ***
|0
0 |
ira = min0(m,n)
do i = 1,ira
imax = i
rmax = 0.0
do j = i,n
! B
usqueda de columna con
h = sum(a(i:m,j)**2)
! mayor norma eucl
dea
if (h>rmax) then
! en componentes I a N.
rmax = h
imax = j
endif
end do
ipiv(i) = imax
if (imax/=i) then
do j = 1,m
! Intercambio de columnas.
tmp
= a(j,i)
a(j,i)
= a(j,imax)
a(j,imax) = tmp
end do
endif
if (i+1<=m) then
call h1 (beta,i,i+1,m,w,a(1,i))
! Aplicar trans.
do j = i+1,n
! de Householder
call h2 (beta,i,i+1,m,w,a(1,j))! a columnas i a n.
end do
call h2 (beta,i,i+1,m,w,b)
! Aplicar trans. a b
endif
end do

!
!
!
!

! Calc. rango de A.

! Residuos al cuadra.
! Trasponer matriz A.

Reducir R
a cero y R
a T.
12
11
do i = k,1,-1
call h1 (beta1(i),i,kp1,n,w1(1,i),a1(1,i))
do j = i-1,1,-1
call h2 (beta1(i),i,kp1,n,w1(1,i),a1(1,j))
end do

G.2 Codigos en Fortran 90

end do
endif

real :: t, s, c, q, suma
!

!
x(k) = b(k)/a1(k,k)
do i = k-1,1,-1
suma = sum(a1(i+1:k,i)*x(i+1:k))
x(i) = (b(i)-suma)/a1(i,i)
end do

data a/1.,1.,1.,1.,1.,2.,3.,4.,1.,4.,9.,16./
data b/2.,3.,5.,6./

! Resoluci
on de Tx=Qb
!
!
!

if (k/=n) then
! Aplicar trans de
x(kp1:n) = 0.0
! reduc. de R
a
do i = 1,k
!
12
call h2 (beta1(i),i,kp1,n,w1(1,i),x)! x.
end do
endif
do j = ira,1,-1
if (ipiv(j)/=j) then
! Deshacer permutaci
on introl
= ipiv(j)
! ducida por pivotaciones.
tmp = x(l)
x(l) = x(j)
x(j) = tmp
endif
end do
!
print ( Rango de A:,I3),k
print ( Soluci
on:,6F8.4),x
print ( Suma de residuos al cuadrado:,F9.6),s1
!
END PROGRAM Mincuad
SUBROUTINE h1 (beta,i,j,m,w,x)
!
implicit none
!
integer , intent(in) :: i
integer , intent(in) :: j
integer , intent(in) :: m
real(kind=2) , intent(inout) :: beta
real(kind=2) , intent(inout) :: w(m)
real(kind=2) , intent(inout) :: x(m)

!
!
!

!
!
!

Construir transformaci
on

Rx = b ***

*** Suma de residuos al cuadrado


s = dot_product(b(n+1:m),b(n+1:m))

w(j:m)
beta
w(i)
sigma
w(i)
beta
x(i)

=
=
=
=
=
=
=

x(j:m)
dot_product(w(j:m),w(j:m))
x(i)
sign(sqrt(beta+w(i)*w(i)),x(i))
w(i)+sigma
2.0/(beta+w(i)*w(i))
-sigma

!
return
END SUBROUTINE h1

print 50,x
print 60,s
!
50 format( X=(,f6.4,,,f6.4,,,f6.4,))
60 format( Suma de residuos al cuadrado=,f9.6)
!
END PROGRAM Givens

14. Programa Fastgivens de la p


agina 112.

SUBROUTINE h2(beta,i,j,m,w,x)
!
implicit none
!
integer , intent(in) :: i
integer , intent(in) :: j
integer , intent(in) :: m
real(kind=2) , intent(in) :: beta
real(kind=2) , intent(in) :: w(m)
real(kind=2) , intent(inout) :: x(m)

PROGRAM Fastgivens
!
implicit none
!
integer, parameter :: m = 4
integer, parameter :: n = 3
!
integer :: i, j, k
real, dimension(m,n) :: a
real, dimension(m) :: b
real, dimension(n) :: x
real, dimension(m) :: d
real :: c, s, r2, r1, t, sqrd, suma

!
real(kind=2) :: s
!
!
!

*** Resoluci
on

x(n) = b(n)/a(n,n)
do i = n-1,1,-1
suma = sum(a(i,i+1:n)*x(i+1:n))
x(i) = (b(i)-suma)/a(i,i)
end do

real :: sigma

*** Reducci
on QA=R ***
do i = 1,n
do k = i+1,m
if (1.0+abs(a(k,i))/=1.0) then
if (abs(a(k,i))>=abs(a(i,i))) then
t = a(i,i)/a(k,i)
s = 1.0/sqrt(1.0+t*t)
c = s*t
else
t = a(k,i)/a(i,i)
c = 1.0/sqrt(1.0+t*t)
s = c*t
endif
a(i,i) = c*a(i,i)+s*a(k,i)
do j = i+1,n
q
= c*a(i,j)+s*a(k,j)
a(k,j) = ((-s*a(i,j)))+c*a(k,j)
a(i,j) = q
end do
q
= c*b(i)+s*b(k)
b(k) = ((-s*b(i)))+c*b(k)
b(i) = q
endif
end do
end do

!
!
!

863

Aplicar transformaci
on de Householder.
s
= beta*(w(i)*x(i)+dot_product(w(j:m),x(j:m)))
x(i)
= x(i)-w(i)*s
x(j:m) = x(j:m)-w(j:m)*s

!
return
END SUBROUTINE h2

13. Programa Givens de la p


agina 107.
PROGRAM Givens
!
implicit none
!
integer, parameter :: m = 4
integer, parameter :: n = 3
!
integer :: i, k, j
real, dimension(m,n) :: a
real, dimension(m) :: b
real, dimension(n) :: x

!
data a/1.,1.,1.,1.,1.,2.,3.,4.,1.,4.,9.,16./
data b/2.,3.,5.,6./
!
!
!

*** Reducci
on QA=R ***
d(:m) = 1.0
do j = 1,n
do i = j+1,m
if (1.0+abs(a(i,j))/=1.0) then
c = d(j)*a(j,j)**2
s = d(i)*a(i,j)**2
if (s<=c) then
r2
= a(i,j)/a(j,j)
r1
= d(i)*r2/d(j)
c
= c/(s+c)
d(j) = c*d(j)
d(i) = c*d(i)
do k = j,n
t
= a(j,k)+r1*a(i,k)
a(i,k) = a(i,k)-r2*a(j,k)
a(j,k) = t
end do
t
= b(j)+r1*b(i)

864

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

b(i) = b(i)-r2*b(j)
b(j) = t
else
r2
= a(j,j)/a(i,j)
r1
= d(j)*r2/d(i)
s
= s/(s+c)
t
= d(j)
d(j) = d(i)
d(i) = t
d(j) = s*d(j)
d(i) = s*d(i)
do k = j,n
t
= a(i,k)+r1*a(j,k)
a(i,k) = a(j,k)-r2*a(i,k)
a(j,k) = t
end do
t
= b(i)+r1*b(j)
b(i) = b(j)-r2*b(i)
b(j) = t
endif
endif
end do
end do

s = 0.0
s = sum(v(j,:n)*tmp(:n))
x(j) = s
end do
!
print ( Rango de A:,I3),ns
print ( Soluci
on:, 3(F11.7:,)),x
print ( Valores singulares de A:,3(F11.7:,)),sv
!
end program svdre
SUBROUTINE dcmsvd(a,m,n,sv,v)
!
implicit none
!
integer , intent(in)
integer , intent(in)
real , intent(inout)
real , intent(inout)
real , intent(inout)

!
!
!

*** Resoluci
on

integer :: i, l, k, j, its, nm, jj


real , dimension(20) :: rv1
real :: g, anorm, s, rmax, f, h, c, y, z, x
!
g
= 0.0
anorm = 0.0
!
!
!

*** Suma de residuos al cuadrado ***


s = dot_product(b(n+1:m),b(n+1:m))

!
print 50,x
print 60,s
!
50 format( x=(,f6.4,,,f6.4,,,f6.4,))
60 format( Suma de residuos al cuadrado=,f9.6)
!
END PROGRAM Fastgivens

15. Programa Svdre y rutina dcmsvd de la


p
agina 128.
PROGRAM Svdre
!
implicit none
!
integer, parameter :: m = 5
integer, parameter :: n = 3
!
integer :: ns, j
real , dimension(m,n) :: a
real , dimension(n) :: sv
real , dimension(m,n) :: v
real , dimension(m) :: b
real , dimension(n) :: x
real , dimension(m) :: tmp
real :: sm, sp, s
!
data a/1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15./
data b/5.,5.,5.,5.,5./
!
call dcmsvd (a,m,n,sv,v)
!
ns
sm
sm
sp
do

= 0
= 0.0
= amax1(sm,maxval(sv(:n)))
= sm*1.0E-6
j = 1,n
s = 0.0
if (sv(j)>sp) then
ns = ns+1
s = sum(a(:m,j)*b(:m))
s = s/sv(j)
else
sv(j) = 0.0
endif
tmp(j) = s
end do
do j = 1,n

*** Reducir matriz A a matriz bidiagonal.


do i = 1,n
l
= i+1
rv1(i) = g
g
= 0.0
s
= 0.0
if (i<=m) then
rmax = 0.0
rmax = amax1(rmax,maxval(abs(a(i:m,i))))
if (rmax/=0.0) then
s = sum(a(i:m,i)**2)
f
= a(i,i)
g
= -sign(sqrt(s),f)
h
= f*g-s
a(i,i) = f-g
do j = l,n
s = 0.0
s = sum(a(i:m,i)*a(i:m,j))
f = s/h
a(i:m,j) = a(i:m,j)+f*a(i:m,i)
end do
endif
endif
sv(i) = g
g
= 0.0
s
= 0.0
if (i<=m.and.i/=n) then
rmax = 0.0
rmax = amax1(rmax,maxval(abs(a(i,l:n))))
if (rmax/=0.0) then
s = sum(a(i,l:n)**2)
f
= a(i,l)
g
= -sign(sqrt(s),f)
h
= f*g-s
a(i,l) = f-g
rv1(l:n) = a(i,l:n)/h
do j = l,m
s = sum(a(j,l:n)*a(i,l:n))
a(j,l:n) = a(j,l:n)+s*rv1(l:n)
end do
endif
endif
anorm = amax1(anorm,abs(sv(i))+abs(rv1(i)))
end do

Rx = b ***

x(n) = b(n)/a(n,n)
do i = n-1,1,-1
suma = sum(a(i,i+1:n)*x(i+1:n))
x(i) = (b(i)-suma)/a(i,i)
end do
!
!
!

m
n
a(m,n)
sv(n)
v(m,n)

!
do i = 1,m
sqrd = sqrt(d(i))
a(i,i:n) = sqrd*a(i,i:n)
b(i) = sqrd*b(i)
end do

::
::
::
::
::

!
!
!
!

*** Acumular en la matriz V las transformaciones


por la derecha hechas a A. ***
do i = min(m,n),1,-1
if (i<n) then
if (g/=0.0) then
v(l:n,i) = (a(i,l:n)/a(i,l))/g
do j = l,n
s = sum(a(i,l:n)*v(l:n,j))
v(l:n,j) = v(l:n,j)+s*v(l:n,i)
end do
endif
v(i,l:n) = 0.0
v(l:n,i) = 0.0
endif
v(i,i) = 1.0
g
= rv1(i)
l
= i
end do

G.2 Codigos en Fortran 90

!
!
!
!

sv(j) = z
if (z/=0.0) then
c = f/z
s = h/z
endif
f = c*g+s*y
x = ((-s*g))+c*y
do jj = 1,m
y
= a(jj,j)
z
= a(jj,i)
a(jj,j) = y*c+z*s
a(jj,i) = ((-y*s))+z*c
end do
end do
rv1(l) = 0.0
rv1(k) = f
sv(k) = x
end do
end do
return
END SUBROUTINE dcmsvd

*** Acumular en la matriz A las transformaciones


por la izquierda hechas a A.
do i = n,1,-1
l = i+1
g = sv(i)
a(i,l:n) = 0.0
if (g/=0.0) then
g = 1.0/g
do j = l,n
s = 0.0
s = sum(a(l:m,i)*a(l:m,j))
f = (s/a(i,i))*g
a(i:m,j) = a(i:m,j)+f*a(i:m,i)
end do
a(i:m,i) = a(i:m,i)*g
else
a(i:m,i) = 0.0
endif
a(i,i) = a(i,i)+1.0
end do

!
!
!
!

*** Diagonalizar la matriz bidiagonal almacenada en sv(.) y en


rv1(.). S
olo se realizan 30 iteraciones como m
aximo.
do k = n,1,-1
do its = 1,30
do l = k,1,-1
nm = l-1
if (abs(rv1(l))+anorm==anorm) exit
if (abs(sv(nm))+anorm==anorm) then
c = 0.0
s = 1.0
do i = l,k
f
= s*rv1(i)
rv1(i) = c*rv1(i)
if (abs(f)+anorm==anorm) exit
g
= sv(i)
h
= sqrt(f*f+g*g)
sv(i) = h
c
= g/h
s
= -f/h
do j = 1,m
y
= a(j,nm)
z
= a(j,i)
a(j,nm) = y*c+z*s
a(j,i) = ((-y*s))+z*c
end do
end do
exit
endif
end do
z = sv(k)
if (l==k) then
if (z<0.0) then
sv(k) = -z
v(:n,k) = -v(:n,k)
endif
exit
endif
if (its==30) stop No hay convergencia
x = sv(l)
nm = k-1
y = sv(nm)
g = rv1(nm)
h = rv1(k)
f = ((y-z)*(y+z)+(g-h)*(g+h))/(2.0*h*y)
g = sqrt(f*f+1.0)
f = ((x-z)*(x+z)+h*(y/(f+sign(g,f))-h))/x
c = 1.0
s = 1.0
do j = l,nm
i
= j+1
g
= rv1(i)
y
= sv(i)
h
= s*g
g
= c*g
z
= sqrt(f*f+h*h)
rv1(j) = z
c
= f/z
s
= h/z
f
= x*c+g*s
g
= ((-x*s))+g*c
h
= y*s
y
= y*c
do jj = 1,n
x
= v(jj,j)
z
= v(jj,i)
v(jj,j) = x*c+z*s
v(jj,i) = ((-x*s))+z*c
end do
z
= sqrt(f*f+h*h)

865

16. Programa Mci de la p


agina 134.
PROGRAM Mci
!
implicit none
!
integer, parameter :: m1 = 4
integer, parameter :: m2 = 2
integer, parameter :: n = 3
!
integer, dimension(n) :: ipiv
integer :: ira, i, imax, j, k, n1, l
real(kind=2), dimension(m1,n) :: a
real(kind=2), dimension(m1) :: b
real(kind=2), dimension(m2,n) :: c
real(kind=2), dimension(m2) :: d
real(kind=2), dimension(m1) :: w
real(kind=2), dimension(n) :: x
real(kind=2) :: tau, rmax, h, tmp, beta, s
!
data a/0.2113,0.0824,0.7599,0.0087,0.4524,0.8075,0.4832, &
0.6135,0.6538,0.4899,0.7741,0.9626/
b/3.0775,3.1671,4.0485,4.1237/
c/0.8096,0.8474,0.2749,0.8807,0.9933,0.8360/
d/4.3393,5.1169/
tau/0.000001/
|R
R |
*** Reducci
on QCP=| 11 12| ***
|0
0 |
ira = min0(m2,n)
do i = 1,ira
imax = i
rmax = 0.0
do j = i,n
! B
usqueda de columna con
h = sum(c(i:m2,j)**2)
! mayor norma eucl
dea
if (h>rmax) then
! en componentes I a N de
rmax = h
! matriz C.
imax = j
!
endif
!
end do
!
ipiv(i) = imax
if (imax/=i) then
do j = 1,m2
! Intercambio de columnas:
tmp
= c(j,i)
!
c(j,i)
= c(j,imax)
!
en matriz C.
c(j,imax) = tmp
!
end do
!
do j = 1,m1
!
---------------tmp
= a(j,i)
!
a(j,i)
= a(j,imax)
!
en matriz A.
a(j,imax) = tmp
!
end do
!
endif
if (i+1.le.m2) then
call h1 (beta,i,i+1,m2,w,c(1,i))
! Aplicar transf.
do j = i+1,n
! de Householder a
call h2 (beta,i,i+1,m2,w,c(1,j))! columnas i a n
end do
! de la matriz C.
call h2 (beta,i,i+1,m2,w,d)
! Aplicar tra. a d.
endif
end do
data
data
data
data

!
!
!

!
k = ira
do j = 1,ira
if (dabs(c(j,j))<=tau) then
k = j-1
exit
endif
end do

! Calc. rango de C.

866

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

!
do i = 1,m1
!

a(i,1) = a(i,1)/c(1,1)
! Determinar A y B
do j = 2,ira
!
2
s
= sum(a(i,:j-1)*c(:j-1,j))
a(i,j) = (a(i,j)-s)/c(j,j)
end do
do j = ira+1,n
s
= sum(a(i,:ira)*c(:ira,j))
a(i,j) = a(i,j)-s
end do
s = 0.0
k = 1
if (ira>0) then
s = sum(a(i,:ira)*d(:ira))
k = ira+1
endif
b(i) = b(i)-s
end do
!
do i = ira+1,n
! Aplicar trans. de
k = i-ira
! Householder a
call h1 (beta,k,k+1,m1,w,a(1,i))
! columnas ira+1 a N
do j = i+1,n
! de matriz A;
call h2 (beta,k,k+1,m1,w,a(1,j))! es decir a
end do
!
A
call h2 (beta,k,k+1,m1,w,b)
!
2
end do
! Aplicar trans. a b.

s = s+dot_product(w(j:m),x(j:m))
s
= s*beta
x(i) = x(i)-w(i)*s
x(j:m) = x(j:m)-w(j:m)*s
!
return
END SUBROUTINE h2

G.2.2

1. Programa Jacobi de la p
agina 147.
PROGRAM Jacobi
!
implicit none
!
integer, parameter :: n = 4
!
integer :: i
real, dimension(n,n) :: a
real, dimension(n) :: b, x, y
real :: s1, su, sm
!
data a/10.,-1.,2.,0.,-1.,11.,-1.,3.,2.,-1.,10.,-1.,0.,3.,
-1.,8./
data b/6.,25.,-11.,15./
data sm/1.0/

!
n1
= n-ira
! Resolver el sistema
x(n) = b(n1)/a(n1,n)
!
do i = n1-1,1,-1
!
s = sum(a(i,i+1+ira:n1+ira)*x(i+1+ira:n1+ira))
x(i+ira) = (b(i)-s)/a(i,i+ira)
! |R
R || | |D |
end do
! | 11 12||x|=| 1|
do i = ira,1,-1
! |0
R || | |C |
s = sum(c(i,i+1:n)*x(i+1:n))
! |
22|| | | 1|
x(i) = (d(i)-s)/c(i,i)
!
end do
!

x = 0.
!
!
!

print ( Rango de C:,I3),k


print ( Soluci
on:, 6(F8.4:,)),x

*** Proceso iterativo ***


do while (sm>=0.001)
s1 = 0.0
do i = 1,n
su
= b(i)-sum(a(i,:i-1)*x(:i-1))&
sum(a(i,i+1:n)*x(i+1:n))
y(i) = su/a(i,i)
s1
= amax1(s1,abs(y(i)))
end do
sm = maxval(abs(x(:n)-y(:n))/s1)
x = y
print *,x
! Salida de resultados
end do

! Deshacer permutaci
on intro! ducida por pivotaciones.

&

!
do j = ira,1,-1
if (ipiv(j)/=j) then
l
= ipiv(j)
tmp = x(l)
x(l) = x(j)
x(j) = tmp
endif
end do

C
odigos del captulo 2

!
END PROGRAM Jacobi

!
END PROGRAM Mci

2. Programa GaussSeidel de la p
agina 151.

SUBROUTINE h1(beta,i,j,m,w,x)
!

PROGRAM GaussSeidel

implicit none

integer, intent(in) :: i
integer, intent(in) :: j
integer, intent(in) :: m
real(kind=2), intent(inout) :: beta
real(kind=2), intent(inout) :: w(m)
real(kind=2), intent(inout) :: x(m)

real :: sigma

implicit none
integer, parameter :: n = 4
!
integer :: i
real, dimension(n,n) :: a
real, dimension(n) :: b, x
real :: s1, su, sm, xi

!
!
beta = 0.0
w(j:m) = x(j:m)
beta
= dot_product(w(j:m),w(j:m))
w(i) = x(i)
sigma = sign(sqrt(beta+w(i)*w(i)),x(i))
w(i) = w(i)+sigma
beta = 2.0/(beta+w(i)*w(i))
x(i) = -sigma
!

data a/10.,-1.,2.,0.,-1.,11.,-1.,3.,2.,-1.,10.,-1.,0.,
3.,-1.,8./
data b/6.,25.,-11.,15./
data sm/1.0/
!
x = 0.
!
!
!

do while (sm>=0.001)
s1 = 0.
sm = 0.
do i = 1,n
su
= b(i)-sum(a(i,:n)*x(:n))
xi
= x(i)+su/a(i,i)
sm
= amax1(abs(x(i)-xi),sm)
x(i) = xi
s1
= amax1(s1,abs(x(i)))
end do
sm = sm/s1
print *,x
! Salida de resultados
end do

return
END SUBROUTINE h1
SUBROUTINE h2(beta,i,j,m,w,x)
!
implicit none
!
integer, intent(in) :: i
integer, intent(in) :: j
integer, intent(in) :: m
real(kind=2), intent(in) :: beta
real(kind=2), intent(in) :: w(m)
real(kind=2), intent(inout) :: x(m)
!
real(kind=2) :: s
!
s = w(i)*x(i)

*** Proceso iterativo ***

!
END PROGRAM GaussSeidel

3. Programa Sor de la p
agina 165.

&

G.2 Codigos en Fortran 90

PROGRAM Sor

real , dimension(n,n) :: a
real , dimension(n) :: b, x, r, p, w
real :: ro0, ro1, xnormb, betak, alfak

!
implicit none
!

!
integer, parameter :: n = 3

data a/4.,-1.,0.,-1.,0.,0.,-1.,4.,-1.,0.,-1.,0.,0.,-1.,
&
4.,0.,0.,-1.,-1.,0.,0.,4.,-1.,0.,0.,-1.,0.,-1.,4., &
-1.,0.,0.,-1.,0.,-1.,4./
data b/0.,5.,0.,6.,-2.,6./

!
integer :: i
real, dimension(n,n) :: a
real, dimension(n) :: b, x
real :: s1, su, sm, xi, w

!
x
r
ro0
ro1

!
data a/4.,3.,0.,3.,4.,-1.,0.,-1.,4./
data b/24.,30.,-24./
data sm/1.0/

!
!
!

!
x = 1.
w = 1.25
!
!
!

867

0.
b
dot_product(r,r)
ro0

*** Proceso iterativo ***


xnormb = epsilon(1.0)*sqrt(ro0)*5
k
= 0
do while(sqrt(ro1)>xnormb)
if (k==0) then
p = r
else
betak = ro1/ro0
p
= r+betak*p
endif
do i = 1,n
w(i) = dot_product(a(1:n,i),p)
end do
alfak = ro1/dot_product(p,w)
x
= x+alfak*p
r
= r-alfak*w
ro0
= ro1
ro1
= dot_product(r,r)
k
= k+1
print *,k,x
end do

*** Proceso iterativo ***


do while (sm>=0.001)
s1 = 0.
sm = 0.
do i = 1,n
su
= b(i)-sum(a(i,:i-1)*x(:i-1))sum(a(i,i+1:n)*x(i+1:n))
xi
= (1-w)*x(i)+w*su/a(i,i)
sm
= amax1(abs(x(i)-xi),sm)
x(i) = xi
s1
= amax1(s1,abs(x(i)))
end do
sm = sm/s1
print *,x
end do

=
=
=
=

&

!
END PROGRAM Sor
!

END PROGRAM Cg

4. Programa Steep de la p
agina 176.

6. Programa Cgp de la p
agina 192.
PROGRAM Steep
!

PROGRAM Cgp

implicit none

implicit none

integer, parameter :: n = 50

!
integer :: k, i
real(kind=2), dimension(n,n) :: a
real(kind=2), dimension(n) :: b, x, r
real(kind=2) :: ro1, xnormb, rar

integer, parameter :: n = 40
!
integer :: i, j, k
real :: ra
real(kind=2), dimension(n,n) :: a
real(kind=2), dimension(n) :: b, x, r, p, w, m, z, zm2, rm2
real(kind=2), dimension(n,n) :: aux
real(kind=2), dimension(n) :: baux
real(kind=2) :: xnormb, ro1, betak, alfak

!
open(10,file=stp.dat)
!
read (10,*) a,b
!
x
r
ro1
!
!
!

= 0.0
= b
= dot_product(r,r)

do i = 1,n
! Generaci
on aleatoria
do j = 1,n
! de un problema con
call random_number (ra)
! soluci
on = | 1|
aux(i,j) = dble(ra)
!
| 2|
end do
!
| 3|
baux(i) = dble(i)
!
| .|
end do
!
| .|
do i = 1,n
!
T
|40|
do j = 1,n
! A=AUX *AUX
a(i,j) = dot_product(aux(1:n,i),aux(1:n,j))
end do
end do
do i = 1,n
b(i) = dot_product(a(1:n,i),baux)
end do

*** Proceso iterativo ***


xnormb = epsilon(1.0)*dsqrt(ro1)*5
k
= 1
do while (dsqrt(ro1)>xnormb)
rar = 0.0
do i = 1,n
rar = rar+r(i)*dot_product(a(1:n,i),r)
end do
x = x+(ro1/rar)*r
do i = 1,n
r(i) = b(i)-dot_product(a(1:n,i),x)
end do
ro1 = dot_product(r,r)
k
= k+1
print *,k,ro1
! Resultados de iteraciones
end do

!
print (10f8.5),x
END PROGRAM Steep

! Soluci
on

5. Programa Cg de la p
agina 188.
PROGRAM Cg
!
implicit none
!
integer, parameter :: n = 6
!
integer :: k, i

!
do i = 1,n
! Obtenci
on del precondicionador
m(i) = dsqrt(dot_product(a(1:n,i),a(1:n,i)))
end do
!
!
!

*** Proceso iterativo ***


xnormb = epsilon(1.D0)*1000.*sqrt(dot_product(b,b))
x
= 0.
r
= b
k
= 0
ro1
= dot_product(b,b)
do while (dsqrt(ro1)>xnormb)
z = r/m
if (k==0) then
p = z
else
betak = dot_product(z,r)/dot_product(zm2,rm2)
p
= z+betak*p
endif
do i = 1,n

868

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

w(i) = dot_product(a(1:n,i),p)
end do
alfak = dot_product(z,r)/dot_product(p,w)
x
= x+alfak*p
rm2
= r
r
= r-alfak*w
zm2
= z
ro1
= dot_product(r,r)
k
= k+1
print *,k,x,ro1
! Salida de resultados
end do
!
END PROGRAM Cgp

!
tol = epsilon(1.0)
x0 = 0
x
= 1
do while (abs(x-x0)>tol)
x0 = x
x = x0-(x0**3-sin(x0))/(3*x0*x0-cos(x0))
print (f10.7),x
! Salida de resultados
end do
END PROGRAM Newt

3. Programa Newton de la p
agina 298.
PROGRAM Newton

G.2.3

C
odigos del captulo 3

!
implicit none
!

No creemos que tenga especial interes listar la


version en Fortran 90 de los programas del
captulo en Fortran 77. Las versiones adecuadas se deberan parecer bastante a las de C
listadas anteriormente.

real(kind=2), parameter :: eps = epsilon(1.D0)


!
real(kind=2) :: x1 = 2., x0 = 0.
!
real(kind=2) , external :: fx, derfx
!
do while(dabs(fx(x1))>eps)
x0 = x1
x1 = x0-fx(x0)/derfx(x0)
print *,x1
end do
!
END PROGRAM Newton

G.2.4

C
odigos del captulo 4

REAL(kind=2) FUNCTION fx(x)


!

1. Programa Bisec de la p
agina 285.

implicit none
!
real(kind=2) , intent(in) :: x

PROGRAM Bisec
implicit none

!
fx = x**2-1.
return
END FUNCTION fx

!
real :: a, b, fa, fb, tol, c, fc
!
real , external :: fx
!
!
!

*** Resoluci
on de la ecuaci
on x*sin(x)-1=0 ***
data a/1.0/
data b/2.0/

REAL(kind=2) FUNCTION derfx(x)


!
implicit none
!
real(kind=2) , intent(in) :: x
!
derfx = 2.0*x
return
END FUNCTION derfx

!
fa = fx(a)
fb = fx(b)
if (fa*fb>0) stop El intervalo [a,b] no contiene soluci
on
!
tol = epsilon(1.0)*10
do while(abs(a-b)>tol)
c = (a+b)/2.
fc = fx(c)
if (fc==0) then
a = c
b = c
else if (fb*fc>0) then
b = c
fb = fc
else
a = c
fa = fc
endif
print (2f10.7),a,b
end do

4. Programa Newtondf de la p
agina 298.
PROGRAM Newtondf
!
implicit none
!
real(kind=2), parameter :: eps = epsilon(1.d0)
!
real(kind=2) :: h, x1 = 2., x0 = 0.
!
real(kind=2) , external :: fx, derfx
!
h = dsqrt(eps)
do while(dabs(fx(x1))>eps)
x0 = x1
x1 = x0-fx(x0)/derfx(x0,h)
print *,x1
end do

!
END PROGRAM Bisec
REAL FUNCTION fx (x)

!
end program newtondf

!
implicit none
!
real , intent(in) :: x
!
fx = x*sin(x)-1
return
END FUNCTION fx

REAL(kind=2) FUNCTION fx(x)


!
implicit none
!
real(kind=2) , intent(in) :: x
!
fx = x**2-1.
return
END FUNCTION fx

2. Programa Newt de la p
agina 290.

REAL(kind=2) FUNCTION derfx(x,h)


!
implicit none

PROGRAM Newt
!

real(kind=2) x
real(kind=2) , intent(in) :: h

implicit none
!
real :: x, x0, tol

G.2 Codigos en Fortran 90

869

secfx = (fx(x1)-fx(x0))/(x1-x0)
return
END FUNCTION secfx

real(kind=2) , external :: fx
!
derfx = (fx(x+h)-fx(x))/h
return
END FUNCTION derfx

7. Programa Muller de la p
agina 305.
5. Programa Newtonmod de la p
agina 299.
PROGRAM Muller
!

PROGRAM Newtonmod

implicit none

implicit none

real :: x0, x1, x2, fx0, fx1, fx2, eps, c, d0, d1, det,
b, a, di, z, x3, u

!
real(kind=2), parameter :: eps = epsilon(1.d0)

real(kind=2) :: x1, dx, x2

!
!
!

real, external :: fx

!
real(kind=2) , external :: fx
!
!
!

data x0/1.5/
data x1/1.2/
data x2/1.0/

*** Resoluci
on de la ecuaci
on x**3-sen(x)=0 ***
x1 = 1.
dx = 3.0*x1*x1-dcos(x1)
x2 = x1-fx(x1)/dx

!
fx0 = fx(x0)
fx1 = fx(x1)
fx2 = fx(x2)

!
do while (dabs(fx(x2))>eps)
print *,x1
x1 = x2
x2 = x1-fx(x1)/dx
end do

! Salida de resultados

!
eps = epsilon(1.0)
do while(abs(fx2)>eps)
c
= fx2
d0 = x0-x2
d1 = x1-x2
det = d0*d1*(x0-x1)
b
= (d0*d0*(fx1-fx2)-d1*d1*(fx0-fx2))/det
a
= (d1*(fx0-fx2)-d0*(fx1-fx2))/det
di = 0.
if (b*b-4*a*c.ge.0) di = sqrt(b*b-4*a*c)
z = (-2)*c/(b+sign(1.0,b)*di)
x3 = x2+z
if (abs(x3-x1)<abs(x3-x0)) then ! Escoger como nuevos
u
= x1
!
x0, x1 y x2 los
x1 = x0
!
m
as pr
oximos a
x0 = u
!
x3.
u
= fx1
fx1 = fx0
fx0 = u
endif
if (abs(x3-x2)<abs(x3-x1)) then
u
= x2
x1 = u
u
= fx2
fx1 = u
endif
x2 = x3
fx2 = fx(x2)
print (F9.7),x2
end do

!
end program newtonmod
REAL(kind=2) FUNCTION fx(x)
!
implicit none
!
real(kind=2) , intent(in) :: x
!
fx = x**3-dsin(x)
return
END FUNCTION fx

6. Programa Newtonsecante de la p
agina 301.
PROGRAM Newtonsecante
!
implicit none
!
real(kind=2), parameter :: eps = epsilon(1.D0)
!
real(kind=2) :: x0, x1, x2
!
real(kind=2) , external :: fx, secfx
!
!
!

*** Resoluci
on de la ecuaci
on x**3-sen(x)=0 ***

!
END PROGRAM Muller

*** Resoluci
on de la ecuaci
on x**3-sen(x)=0 ***

REAL FUNCTION fx(x)

x0 = 1.1
x1 = 1.0
x2 = x1-fx(x1)/secfx(x0,x1)

do while (dabs(fx(x2))>eps)
x0 = x1
x1 = x2
x2 = x1-fx(x1)/secfx(x0,x1)
print *,x2
end do

implicit none
!

real, intent(in) :: x
fx = x**3-sin(x)
return
END FUNCTION fx

! Salida de resultados

!
END PROGRAM Newtonsecante

8. Programa Newtrp de la p
agina 307.

REAL(kind=2) FUNCTION fx (x)


!

PROGRAM Newtrp
implicit none

real(kind=2) , intent(in) :: x

fx = x**3-dsin(x)
return
END FUNCTION fx

implicit none

integer, parameter :: n = 3
real(kind=2), dimension(n) :: f
real(kind=2), dimension(n,n) :: j
real(kind=2), dimension(n) :: x, x1, s
real(kind=2) :: tol, dnr

REAL(kind=2) FUNCTION secfx (x0,x1)


!

!
implicit none

real(kind=2) , external :: dnor


!

real(kind=2) x0
real(kind=2) x1

tol = dsqrt(epsilon(1.0d0))
x
= 1.0
call fx (f,x,n)
dnr = dnor(f,n)

!
real(kind=2) , external :: fx
!

&

870

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

! *** Proceso iterativo ***


!
do while (dnr>=tol)
call derfx (j,x,n)
call gauss (j,f,s,n)
x1 = x-s
call fx (f,x1,n)
dnr = dnor(f,n)
print *,x1,dnr
x = x1
end do
!
END PROGRAM Newtrp

endif
end do
if (l/=0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip = ipvt(i)
r = a(ip,k)*r1
a(ip,k+1:n) = a(ip,k+1:n)-r*a(pi,k+1:n)
a(ip,k) = -r
end do
end do

! Salida de resultados

SUBROUTINE fx(f,x,n)
!
implicit none

do k = 1,n-1
ip = ipvt(k)
do i = k+1,n
pi
= ipvt(i)
b(pi) = b(pi)+a(pi,k)*b(ip)
end do
end do

integer , intent(in) :: n
real(kind=2) , intent(out) :: f(n)
real(kind=2) , intent(in) :: x(n)
!
f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20*x(3)+(10*dacos(-1.0d0)-3)/3
!
return
END SUBROUTINE fx

!
!
!

x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi = ipvt(i)
c = b(pi)
c = c-sum(a(pi,i+1:n)*x(i+1:n))
x(i) = c/a(pi,i)
end do

SUBROUTINE derfx(j,x,n)
!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(out) :: j(n,n)
real(kind=2) , intent(in) :: x(n)

!
return
END SUBROUTINE gauss

!
j(1,1)
j(1,2)
j(1,3)
j(2,1)
j(2,2)
j(2,3)
j(3,1)
j(3,2)
j(3,3)

=
=
=
=
=
=
=
=
=

3.0
dsin(x(2)*x(3))*x(3)
dsin(x(2)*x(3))*x(2)
2.0*x(1)
-162.0*(x(2)+0.1)
dcos(x(3))
-dexp((-x(1)*x(2)))*x(2)
-dexp((-x(1)*x(2)))*x(1)
20.0

!
return
END SUBROUTINE derfx

9. Programa Newtrpdf de la p
agina 314.
PROGRAM Newtrpdf
!
implicit none
!
integer, parameter :: n = 3
!
integer, dimension(n) :: ipvt
real(kind=2), dimension(n) :: f
real(kind=2), dimension(n,n) :: j
real(kind=2), dimension(n) :: x, x1, f1, s
real(kind=2) :: tol, dnr, h

REAL(kind=2) FUNCTION dnor(x,n)


!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(in) :: x(n)
!

!
real(kind=2), external :: dnor
!
tol = dsqrt(epsilon(1.0d0))
h
= tol
x
= 1.0
call fx (f,x,n)
dnr = dnor(f,n)

dnor = sum(x**2)
!
dnor = dsqrt(dnor)
return
END FUNCTION dnor
SUBROUTINE gauss(a,b,x,n)
!
implicit none
!
integer, intent(in) :: n
real(kind=2) , intent(inout) :: a(n,n)
real(kind=2) , intent(inout) :: b(n)
real(kind=2) , intent(inout) :: x(n)
!
integer, dimension(10) :: ipvt
integer :: pi, i, k, l, ip, iaux
real(kind=2) :: smax, r, r1, c
!
!
!
!

!
! *** Proceso iterativo ***
!
do while (dnr>tol)
call derfxdf (j,x,n,f,f1,x1,h)
call gauss (j,f,s,ipvt,n)
x1 = x-s
call fx (f,x1,n)
dnr = dnor(f,n)
print *,x1,dnr
! Salida de resultados
x = x1
end do
!
END PROGRAM Newtrpdf

*** Resoluci
on del sistema lineal mediante eliminaci
on de Gauss

SUBROUTINE fx(f,x,n)
!

do i = 1,n
ipvt(i) = i
end do
!
!
!

*** Sustituci
on inversa ***

*** Triangularizaci
on ***
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k))>smax) then
l
= i
smax = dabs(a(ip,k))

implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(out) :: f(n)
real(kind=2) , intent(in) :: x(n)
!
f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81.0*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20.0*x(3)+
&
(10.0*dacos(-1.0D0)-3.0)/3.0
!
return
END SUBROUTINE fx
SUBROUTINE derfxdf(j,x,n,f,f1,x1,h)

G.2 Codigos en Fortran 90

!
implicit none

!
!

!
integer n
real(kind=2)
real(kind=2)
real(kind=2)
real(kind=2)
real(kind=2)
real(kind=2)

, intent(in) :: h
, intent(out) :: j(n,n)
x(n)
f(n)
f1(n)
x1(n)

*** Sustituci
on inversa ***
x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi
= ipvt(i)
c
= b(pi)-sum(a(pi,i+1:n)*x(i+1:n))
x(i) = c/a(pi,i)
end do

!
return
END SUBROUTINE gauss

!
integer :: i
!
x1(:n) = x(:n)
call fx (f,x,n)
do i = 1,n
x1(i) = x1(i)+h
call fx (f1,x1,n)
j(:n,i) = (f1(:n)-f(:n))/h
x1(i) = x(i)
end do

10. Programa Newjac de la p


agina 317.
PROGRAM Newjac
!
implicit none
!
integer, parameter :: n = 3

!
return
END SUBROUTINE derfxdf

REAL(kind=2) FUNCTION dnor (x,n)

implicit none

real(kind=2), dimension(n) :: f, j, x, x1
real(kind=2) :: tol, dnr
real(kind=2) , external :: dnor

tol = dsqrt(epsilon(1.0D0))
x
= 1.0
call fx (f,x,n)
dnr = dnor(f,n)

!
integer , intent(in) :: n
real(kind=2) , intent(in) :: x(n)
!
dnor = sum(x**2)

!
do while(dnr>tol)
call derfx (j,x,n)
x1 = x-f/j
call fx (f,x1,n)
dnr = dnor(f,n)
print *,x1,dnr
x = x1
end do

!
dnor = dsqrt(dnor)
return
END FUNCTION dnor
SUBROUTINE gauss(a,b,x,ipvt,n)
!
implicit none
!

!
integer , intent(in) :: n
integer , intent(inout) :: ipvt(n)
real(kind=2) , intent(inout) :: a(n,n)
real(kind=2) , intent(inout) :: b(n)
real(kind=2) , intent(inout) :: x(n)

END PROGRAM Newjac


SUBROUTINE fx(f,x,n)
!
implicit none
!

integer , intent(in) :: n
real(kind=2) , intent(out) :: f(n)
real(kind=2) , intent(in) :: x(n)

integer :: pi, i, k, l, ip, iaux


real(kind=2) :: smax, r, r1, c
!
!
!
!

*** Resoluci
on del sistema lineal mediante eliminaci
on
de Gauss ***
do i = 1,n
ipvt(i) = i
end do

!
!
!

f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81.0*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20.0*x(3)+
&
(10.0*dacos(-1.0D0)-3.0)/3.0
!
return
END SUBROUTINE fx

*** Triangularizaci
on ***
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k))>smax) then
l
= i
smax = dabs(a(ip,k))
endif
end do
if (l/=0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip
= ipvt(i)
r
= a(ip,k)*r1
a(ip,k+1:n) = a(ip,k+1:n)-r*a(pi,k+1:n)
a(ip,k)
= -r
end do
end do

!
do k = 1,n-1
ip = ipvt(k)
do i = k+1,n
pi
= ipvt(i)
b(pi) = b(pi)+a(pi,k)*b(ip)
end do
end do
!

SUBROUTINE derfx(j,x,n)
!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(out) :: j(n)
real(kind=2) , intent(in) :: x(n)
!
j(1) = 3.0
j(2) = -162.0*(x(2)+0.1)
j(3) = 20.0
!
return
END SUBROUTINE derfx
REAL(kind=2) FUNCTION dnor (x,n)
!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(in) :: x(n)
!
dnor = sum(x**2)
!
dnor = dsqrt(dnor)
return
END FUNCTION dnor

11. Programa Newsor de la p


agina 319.
PROGRAM Newsor

871

872

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

x(1) = b(1)/a(1,1)
do i = 2,n
c = b(i)
c = c-sum(a(i,:i-1)*x(:i-1))
x(i) = c/a(i,i)
end do

implicit none
!
integer, parameter :: n = 3
!
real(kind=2), dimension(n) :: f
real(kind=2), dimension(n,n) :: j
real(kind=2), dimension(n) :: x, x1, s
real(kind=2) :: tol, dnr, omega, ro

!
return
END SUBROUTINE sustdi

!
real(kind=2) , external :: dnor
!
tol = dsqrt(epsilon(1.0D0))
x
= 1.0
print (a), Valor de OMEGA --->
read (bn,f9.0) ,omega
ro = (1-omega)/omega
call fx (f,x,n)
dnr = dnor(f,n)
!
do while (dnr>tol)
call derfx (j,x,n,ro)
call sustdi (j,f,s,n)
x1 = x-s
call fx (f,x1,n)
dnr = dnor(f,n)
print *,x1,dnr
x = x1
end do
!

12. Programa Broyden de la p


agina 323.
PROGRAM Broyden
!
implicit none
!
integer, parameter :: n = 3
!
integer, dimension(n) :: ip
real(kind=2), dimension(n) :: f
real(kind=2), dimension(n,n) :: j, ja
real(kind=2), dimension(n) :: x, x1, f1, y, s
real(kind=2) :: tol, dnr
!
real(kind=2) , external :: dnor
!
tol
= dsqrt(epsilon(1.0d0))
x
= 1.d0
j(1,1) = 3.d0
j(2,2) = -178.2d0
j(3,3) = 20.d0
call fx (f,x,n)
dnr = dnor(f,n)

END PROGRAM Newsor


SUBROUTINE fx(f,x,n)
!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(out) :: f(n)
real(kind=2) , intent(in) :: x(n)
!
f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81.0*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20.0*x(3)+
&
(10.0*dacos(-1.0D0)-3.0)/3.0
!
return
END SUBROUTINE fx
SUBROUTINE derfx(j,x,n,ro)
!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(in) :: ro
real(kind=2) , intent(out) :: j(n,n)
real(kind=2) , intent(in) :: x(n)
!
j(1,1)
j(2,1)
j(2,2)
j(3,1)
j(3,2)
j(3,3)

=
=
=
=
=
=

3.0*(1.0+ro)
2.0*x(1)
-162.0*(x(2)+0.1)*(1.0+ro)
-dexp((-x(1)*x(2)))*x(2)
-dexp((-x(1)*x(2)))*x(1)
20.0*(1.0+ro)

!
! *** Proceso iterativo ***
!
do while(dnr>tol)
f1 = f
ja = j
call gauss (ja,f,s,ip,n)
x1 = x-s
call fx (f,x1,n)
dnr = dnor(f,n)
print *,x1,dnr
y = f-f1
call broyd (j,y,s,n)
x = x1
end do
!
END PROGRAM Broyden
SUBROUTINE fx(f,x,n)
!
implicit none
!

integer , intent(in) :: n
real(kind=2) , intent(out) :: f(n)
real(kind=2) , intent(in) :: x(n)
!
f(1) = 3*x(1)-dcos(x(2)*x(3))-0.5
f(2) = x(1)**2-81.0*(x(2)+0.1)**2+dsin(x(3))+1.06
f(3) = dexp((-x(1)*x(2)))+20.0*x(3)+
&
(10.0*dacos(-1.0d0)-3.0)/3.0

!
return
END SUBROUTINE derfx
REAL(kind=2) FUNCTION dnor (x,n)

!
return
END SUBROUTINE fx

!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(in) :: x(n)
!
dnor = sum(x**2)

REAL(kind=2) FUNCTION dnor (x,n)


!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(in) :: x(n)

!
dnor = dsqrt(dnor)
return
END FUNCTION dnor

!
dnor = sum(x**2)
!
dnor = dsqrt(dnor)
return
END FUNCTION dnor

SUBROUTINE sustdi(a,b,x,n)
!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(in) :: a(n,n)
real(kind=2) , intent(in) :: b(n)
real(kind=2) , intent(inout) :: x(n)

SUBROUTINE broyd(a,y,s,n)
!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(inout) :: a(n,n)
real(kind=2) , intent(inout) :: y(n)
real(kind=2) , intent(in) :: s(n)

!
integer :: i
real(kind=2) :: c
!
!

*** Sustituci
on directa ***

! Salida de resultados

!
integer :: i

873

G.2 Codigos en Fortran 90

real(kind=2) :: prod
!

dnx = dnor(f,n)
!

prod = sum(s**2)

do while(dnx>tol)
call derfx (j,x,n)
call gauss (j,f,s,n)
x1 = x-s
call fx (f,x1,n)
dnr = dnor(f,n)
alfa = 1.D0
do while(dnr>(1.D0-alfa/2.)*dnx)
alfa = alfa/2.
x1
= x-alfa*s
call fx (f,x1,n)
dnr = dnor(f,n)
end do
print *,x1,alfa,dnr
! Salida de resultados
x
= x1
dnx = dnr
end do

!
do i = 1,n
y(i) = (y(i)+sum(a(i,:)*s))/prod
end do
!
a = a-spread(y,dim=2,ncopies=n)*spread(s,dim=1,ncopies=n)
!
return
END SUBROUTINE broyd
SUBROUTINE gauss(a,b,x,ipvt,n)
!
implicit none
!
integer , intent(in) :: n
integer , intent(inout) :: ipvt(n)
real(kind=2) , intent(inout) :: a(n,n)
real(kind=2) , intent(inout) :: b(n)
real(kind=2) , intent(inout) :: x(n)

!
end program newtarmijo

SUBROUTINE fx(f,x,n)
integer :: ip, pi, l, i, k, iaux
real(kind=2) :: smax, r, r1, c

!
!
!
!
!

!
implicit none
!

*** Resoluci
on del sistema de ecuaciones lineales
mediante eliminaci
on de Gauss

integer , intent(in) :: n
real(kind=2) , intent(out) :: f(n)
real(kind=2) , intent(in) :: x(n)
!

do i = 1,n
ipvt(i) = i
end do
!
!
!

*** Triangularizaci
on ***
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k))>smax) then
l
= i
smax = dabs(a(ip,k))
endif
end do
if (l/=0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip
= ipvt(i)
r
= a(ip,k)*r1
a(ip,k+1:n) = a(ip,k+1:n)-r*a(pi,k+1:n)
b(ip)
= b(ip)-r*b(pi)
end do
end do

!
!
!

f(1) = 6*datan(x(1)-10)-2*dexp(-x(2))2*dexp(-x(3))+2*x(2)+2*x(3)-9
f(2) = 2*datan(x(1)-10)-4*dexp(-x(2))dexp(-x(3))+7*x(2)-2*x(3)-3
f(3) = 2*datan(x(1)-10)-dexp(-x(2))3*dexp(-x(3))-x(2)+5*x(3) -3
!
return
END SUBROUTINE fx
SUBROUTINE derfx(j,x,n)
!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(out) :: j(n,n)
real(kind=2) , intent(in) :: x(n)
!
j(1,1)
j(1,2)
j(1,3)
j(2,1)
j(2,2)
j(2,3)
j(3,1)
j(3,2)
j(3,3)

=
=
=
=
=
=
=
=
=

6/(1+(x(1)-10)**2)
2*dexp(-x(2))+2
2*dexp(-x(3))+2
2/(1+(x(1)-10)**2)
4*dexp(-x(2))+7
dexp(-x(3))-2
2/(1+(x(1)-10)**2)
dexp(-x(2))-1
3*dexp(-x(3))+5

!
return
END SUBROUTINE derfx
REAL(kind=2) FUNCTION dnor (x,n)

*** Sustituci
on inversa ***
!
x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi
= ipvt(i)
c
= b(pi)-sum(a(pi,i+1:n)*x(i+1:n))
x(i) = c/a(pi,i)
end do

implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(in) :: x(n)
!
dnor = dsqrt(sum(x**2))
!

return
END SUBROUTINE gauss

13. Programa Newtarmijo de la p


agina 333.

return
END FUNCTION dnor
SUBROUTINE gauss(a,b,x,n)
!
implicit none
!
integer , intent(in) :: n
real(kind=2) , intent(inout) :: a(n,n)
real(kind=2) , intent(inout) :: b(n)
real(kind=2) , intent(inout) :: x(n)

PROGRAM Newtarmijo
!
implicit none
!
integer, parameter :: n = 3

!
integer , dimension(10) :: ipvt
integer :: pi, i, k, l, ip, iaux
real(kind=2) :: smax, r, r1, c

!
real(kind=2), dimension(n) :: f
real(kind=2), dimension(n,n) :: j
real(kind=2), dimension(n) :: x, x1, s
real(kind=2) :: tol, dnr, dnx, alfa
!
real(kind=2) , external :: dnor
!
tol = dsqrt(epsilon(1.0d0))
x
= 0.D0
call fx (f,x,n)

!
!
!
!
!

** Resoluci
on del sistema lineal de ecuaciones mediante
eliminaci
on de Gauss
do i = 1,n
ipvt(i) = i
end do

&
&
&

874

!
!
!

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

f(3) = dexp(x(1))-2.0
f(4) = dexp(x(1)+x(2))-4.0

*** Triangularizaci
on ***
!
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k))>smax) then
l
= i
smax = dabs(a(ip,k))
endif
end do
if (l/=0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip
= ipvt(i)
r
= a(ip,k)*r1
a(ip,k+1:n) = a(ip,k+1:n)-r*a(pi,k+1:n)
a(ip,k)
= -r
end do
end do

return
END SUBROUTINE fx
SUBROUTINE derfx(j,x,m,n)
implicit none
!
integer, intent(in) :: m
integer, intent(in) :: n
real(kind=2), intent(out) :: j(m,n)
real(kind=2), intent(in) :: x(n)
!
j(1,1)
j(1,2)
j(2,1)
j(2,2)
j(3,1)
j(3,2)
j(4,1)
j(4,2)

=
=
=
=
=
=
=
=

dexp(x(1)-2.0*x(2))
-2.0*dexp(x(1)-2.0*x(2))
dexp(x(1)-x(2))
-dexp(x(1)-x(2))
dexp(x(1))
0.0
dexp(x(1)+x(2))
dexp(x(1)+x(2))

!
return
END SUBROUTINE derfx
SUBROUTINE qrdes(a,b,x,m,n,s1)

!
!

do k = 1,n-1
ip = ipvt(k)
do i = k+1,n
pi
= ipvt(i)
b(pi) = b(pi)+a(pi,k)*b(ip)
end do
end do
!
!
!

! Evaluaci
on de la matriz

implicit none
!
integer, intent(in) :: m
integer, intent(in) :: n
real(kind=2), intent(out) :: s1
real(kind=2), intent(inout) :: a(m,n)
real(kind=2), intent(inout) :: b(m)
real(kind=2), intent(inout) :: x(n)

*** Sustituci
on inversa ***
!
x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi
= ipvt(i)
c
= b(pi)-sum(a(pi,i+1:n)*x(i+1:n))
x(i) = c/a(pi,i)
end do

!
return
END SUBROUTINE gauss

integer :: j, i, l
real(kind=2), dimension(20) :: d
real(kind=2) :: wj, s, suma, rmax, beta, sigma
!
!
!
!
!
!
!

PROGRAM Gausnewt
!
implicit none
!
integer, parameter :: m = 4
integer, parameter :: n = 2
!
integer :: i
real(kind=2), dimension(m) :: f
real(kind=2), dimension(m,n) :: j
real(kind=2), dimension(n) :: x, p
real(kind=2) :: tol, dnor, s
!

SUBROUTINE fx(f,x,m,n)

*** Reducci
on QA=R y vector b a b ***
do j = 1,n
rmax = 0.0d0
rmax = dmax1(rmax,maxval(dabs(a(j:m,j))))
if (rmax==0.0) stop Matriz A de rango incompleto
beta
= sum(a(j+1:m,j)**2)
wj
= a(j,j)
sigma = sign(dsqrt(beta+wj*wj),wj)
wj
= wj+sigma
beta
= 2.0/(beta+wj*wj)
a(j,j) = wj
d(j)
= -sigma
do l = j+1,n
s
= beta*sum(a(j:m,j)*a(j:m,l))
a(j:m,l) = a(j:m,l)-a(j:m,j)*s
end do
s = sum(a(j:m,j)*b(j:m))
s = beta*s
b(j:m) = b(j:m)-a(j:m,j)*s
end do

14. Programa Gausnewt de la p


agina 347.

tol = dsqrt(epsilon(1.0d0))
x
= 1.0
!
! *** Proceso iterativo ***
!
do i = 1,100
call fx (f,x,m,n)
call derfx (j,x,m,n)
call qrdes (j,f,p,m,n,s)
x
= x-p
dnor = maxval(dabs(p))/maxval(dabs(x))
if (dnor<tol) stop
print *,x,s,dnor
! Salida de resultados
end do
!
end program gausnewt

*** Resoluci
on del problema lineal de m
nimos cuadrados con
factorizaci
on QR por transformaciones de Householder.

!
!
!

*** Resoluci
on

Rx = b ***

x(n) = b(n)/d(n)
do i = n-1,1,-1
suma = sum(a(i,i+1:n)*x(i+1:n))
x(i) = (b(i)-suma)/d(i)
end do
!
!
!

*** Suma de residuos al cuadrado ***


s1 = sum(b(n+1:m)**2)

!
return
END SUBROUTINE qrdes

! C
alculo de residuos

!
implicit none
!
integer, intent(in) :: m
integer, intent(in) :: n
real(kind=2), intent(out) :: f(m)
real(kind=2), intent(in) :: x(n)

15. Programa Levmar de la p


agina 353.
PROGRAM Levmar
!

implicit none
f(1) = dexp(x(1)-2.0*x(2))-0.5
f(2) = dexp(x(1)-x(2))-1.0

!
integer, parameter :: m = 12

G.2 Codigos en Fortran 90

integer, parameter :: n = 3

j(3,2)
j(3,3)
j(4,1)
j(4,2)
j(4,3)
j(5,1)
j(5,2)
j(5,3)
j(6,1)
j(6,2)
j(6,3)
j(7,1)
j(7,2)
j(7,3)
j(8,1)
j(8,2)
j(8,3)
j(9,1)
j(9,2)
j(9,3)
j(10,1)
j(10,2)
j(10,3)

!
integer :: k, i, l
real(kind=2), dimension(m) :: f
real(kind=2), dimension(m,n) :: j
real(kind=2), dimension(n,n) :: jtj, a
real(kind=2), dimension(n) :: x, s
real(kind=2) :: tol, dnor, mu, res
real(kind=2), dimension(n) :: b
real(kind=2), dimension(m) :: f1
real(kind=2) :: res1
!
tol
x(1)
x(2)
x(3)
mu

=
=
=
=
=

dsqrt(epsilon(1.0d0))*10
200.
30.
-0.4
0.01d0

! Valores de partida
!
de los par
ametros
!
a estimar

!
do k = 1,100
call fx (f,x)
call derfx (j,x,m,n)
do i = 1,n
do l = 1,n
jtj(i,l) = dot_product(j(1:m,i),j(1:m,l))
end do
end do
2
continue
do i = 1,n
b(i) = dot_product(j(1:m,i),f)
end do
res = dot_product(f,f)
a
= jtj
do i = 1,n
a(i,i) = jtj(i,i)+mu
end do
call gauss (a,b,s,n)
b = x-s
call fx (f1,b)
res1 = dot_product(f1,f1)
if (res1<res) then
x
= b
f
= f1
dnor = maxval(dabs(s))/maxval(dabs(x))
if (dnor<=tol) stop
print *,x,res1,mu,dnor
mu = mu/10.D0
else
mu = mu*10.D0
go to 2
endif
end do
!
END PROGRAM Levmar

j(11,1) =
j(11,2) =
j(11,3) =
j(12,1) =
j(12,2) =
j(12,3) =

return
END SUBROUTINE derfx
SUBROUTINE gauss(a,b,x,n)
!
implicit none
!
integer , intent(in) :: n
real(kind=2), intent(inout) :: a(n,n)
real(kind=2), intent(inout) :: b(n)
real(kind=2), intent(inout) :: x(n)
!
integer , dimension(10) :: ipvt
integer :: pi, i, k, l, ip, iaux
real(kind=2) :: smax, r, r1, c
!
!
!
!
!
!

implicit none
!
!
!

=
=
=
=
=
=
=
=
=
=
=
=

x(1)/(1+x(2)*dexp(x(3)))-5.308
x(1)/(1+x(2)*dexp(2*x(3)))-7.24
x(1)/(1+x(2)*dexp(3*x(3)))-9.638
x(1)/(1+x(2)*dexp(4*x(3)))-12.866
x(1)/(1+x(2)*dexp(5*x(3)))-17.069
x(1)/(1+x(2)*dexp(6*x(3)))-23.192
x(1)/(1+x(2)*dexp(7*x(3)))-31.443
x(1)/(1+x(2)*dexp(8*x(3)))-38.558
x(1)/(1+x(2)*dexp(9*x(3)))-50.156
x(1)/(1+x(2)*dexp(10*x(3)))-62.948
x(1)/(1+x(2)*dexp(11*x(3)))-75.995
x(1)/(1+x(2)*dexp(12*x(3)))-91.972

!
return
END SUBROUTINE fx
SUBROUTINE derfx(j,x,m,n)
!
implicit none
!
integer, intent(in) :: m
integer, intent(in) :: n
real(kind=2), intent(out) :: j(m,n)
real(kind=2), intent(in) :: x(n)

!
do k = 1,n-1
ip = ipvt(k)
do i = k+1,n
pi
= ipvt(i)
b(pi) = b(pi)+a(pi,k)*b(ip)
end do
end do

!
j(1,1)
j(1,2)
j(1,3)
j(2,1)
j(2,2)
j(2,3)
j(3,1)

=
=
=
=
=
=
=

1/(1+x(2)*dexp(x(3)))
-x(1)*dexp(x(3))/(1+x(2)*dexp(x(3)))**2
-x(1)*x(2)*dexp(x(3))/(1+x(2)*dexp(x(3)))**2
1/(1+x(2)*dexp(2*x(3)))
-x(1)*dexp(2*x(3))/(1+x(2)*dexp(2*x(3)))**2
-x(1)*x(2)*dexp(2*x(3))*2/(1+x(2)*dexp(2*x(3)))**2
1/(1+x(2)*dexp(3*x(3)))

*** Triangularizaci
on ***
do k = 1,n-1
l
= 0
smax = dabs(a(ipvt(k),k))
do i = k+1,n
ip = ipvt(i)
if (dabs(a(ip,k))>smax) then
l
= i
smax = dabs(a(ip,k))
endif
end do
if (l/=0) then
iaux
= ipvt(k)
ipvt(k) = ipvt(l)
ipvt(l) = iaux
endif
pi = ipvt(k)
r1 = 1.0/a(pi,k)
do i = k+1,n
ip = ipvt(i)
r = a(ip,k)*r1
a(ip,k+1:n) = a(ip,k+1:n)-r*a(pi,k+1:n)
a(ip,k) = -r
end do
end do

!
f(1)
f(2)
f(3)
f(4)
f(5)
f(6)
f(7)
f(8)
f(9)
f(10)
f(11)
f(12)

*** Resoluci
on del sistema lineal de ecuaciones mediante
eliminaci
on de Gauss

do i = 1,n
ipvt(i) = i
end do

SUBROUTINE fx(f,x)

real(kind=2), intent(out) :: f(*)


real(kind=2), intent(in) :: x(*)

-x(1)*dexp(3*x(3))/(1+x(2)*dexp(3*x(3)))**2
-x(1)*x(2)*dexp(3*x(3))*3/(1+x(2)*dexp(3*x(3)))**2
1/(1+x(2)*dexp(4*x(3)))
-x(1)*dexp(4*x(3))/(1+x(2)*dexp(4*x(3)))**2
-x(1)*x(2)*dexp(4*x(3))*4/(1+x(2)*dexp(4*x(3)))**2
1/(1+x(2)*dexp(5*x(3)))
-x(1)*dexp(5*x(3))/(1+x(2)*dexp(5*x(3)))**2
-x(1)*x(2)*dexp(5*x(3))*5/(1+x(2)*dexp(5*x(3)))**2
1/(1+x(2)*dexp(6*x(3)))
-x(1)*dexp(6*x(3))/(1+x(2)*dexp(6*x(3)))**2
-x(1)*x(2)*dexp(6*x(3))*6/(1+x(2)*dexp(6*x(3)))**2
1/(1+x(2)*dexp(7*x(3)))
-x(1)*dexp(7*x(3))/(1+x(2)*dexp(7*x(3)))**2
-x(1)*x(2)*dexp(7*x(3))*7/(1+x(2)*dexp(7*x(3)))**2
1/(1+x(2)*dexp(8*x(3)))
-x(1)*dexp(8*x(3))/(1+x(2)*dexp(8*x(3)))**2
-x(1)*x(2)*dexp(8*x(3))*8/(1+x(2)*dexp(8*x(3)))**2
1/(1+x(2)*dexp(9*x(3)))
-x(1)*dexp(9*x(3))/(1+x(2)*dexp(9*x(3)))**2
-x(1)*x(2)*dexp(9*x(3))*9/(1+x(2)*dexp(9*x(3)))**2
1/(1+x(2)*dexp(10*x(3)))
-x(1)*dexp(10*x(3))/(1+x(2)*dexp(10*x(3)))**2
-x(1)*x(2)*dexp(10*x(3))*10/(1+x(2)*
&
dexp(10*x(3)))**2
1/(1+x(2)*dexp(11*x(3)))
-x(1)*dexp(11*x(3))/(1+x(2)*dexp(11*x(3)))**2
-x(1)*x(2)*dexp(11*x(3))*11/(1+x(2)*
&
dexp(11*x(3)))**2
1/(1+x(2)*dexp(12*x(3)))
-x(1)*dexp(12*x(3))/(1+x(2)*dexp(12*x(3)))**2
-x(1)*x(2)*dexp(12*x(3))*12/(1+x(2)*
&
dexp(12*x(3)))**2

!
!

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

875

876

!
!

Apendice G. Version en C y FORTRAN 90 de los programas del texto en FORTRAN 77

*** Sustituci
on inversa ***

z = z*s
!

x(n) = b(ipvt(n))/a(ipvt(n),n)
do i = n-1,1,-1
pi
= ipvt(i)
c
= b(pi)-sum(a(pi,i+1:n)*x(i+1:n))
x(i) = c/a(pi,i)
end do

do k = n,1,-1
z(k) = z(k)+sum(a(k+1:n,k)*z(k+1:n))
if (dabs(z(k))>1.0) then
s = 1.0/dabs(z(k))
z = z*s
endif
l
= ipvt(k)
t
= z(l)
z(l) = z(k)
z(k) = t
end do
s = 1.0/sum(dabs(z))
z = z*s

!
return
END SUBROUTINE gauss

16. Programa Condest de la p


agina 882.
!
PROGRAM Condest
!
! *** Estimaci
on del n
umero de condici
on 1 de una matriz
!
implicit none
!
integer, parameter :: n = 10
!
integer, dimension(n) :: ipvt
integer :: i
real(kind=2), dimension(n,n) :: a
real(kind=2), dimension(n) :: z
real(kind=2) :: cond, anorm
open(10,file=clin1)
read (10,*) a
!
! --- Norma 1 de la matriz
!
anorm = 0
do i = 1,n
anorm = dmax1(anorm,sum(dabs(a(:,i))))
end do
!
!
- Estimaci
on del n
umero de condici
on. Factorizar primero PA=LU.
!
call gau (a,ipvt,n)
z = 0
call rcond (a,n,ipvt,anorm,cond,z)
!
print *,cond
!
end program Condest

ynorm = 1.0
!
do k = 1,n
l
= ipvt(k)
t
= z(l)
z(l) = z(k)
z(k) = t
z(k+1:n) = z(k+1:n)+t*a(k+1:n,k)
if (dabs(z(k))>1.0) then
s
= 1.0/dabs(z(k))
z
= z*s
ynorm = s*ynorm
endif
end do
s
= 1.0/sum(dabs(z))
z
= z*s
ynorm = s*ynorm
!
do k = n,1,-1
if (dabs(z(k))>dabs(a(k,k))) then
s = dabs(a(k,k))/dabs(z(k))
z = z*s
ynorm = s*ynorm
endif
if (a(k,k)/=0.0) then
z(k) = z(k)/a(k,k)
else
z(k) = 1.0
endif
t = -z(k)
z(:k-1) = z(:k-1)+t*a(:k-1,k)
end do
s
= 1.0/sum(dabs(z))
z
= z*s
ynorm = s*ynorm
if (anorm==0.0) then
cond = 0.0
else
cond = anorm/ynorm
endif
return

subroutine rcond(a,n,ipvt,anorm,cond,z)
!
implicit none
!
integer n
integer , intent(in) :: ipvt(n)
real(kind=2), intent(in) :: anorm
real(kind=2), intent(out) :: cond
real(kind=2), intent(inout) :: a(n,n), z(n)

!
end subroutine rcond

!
integer :: k, j, l, i
real(kind=2) :: ek, wk, wkm, sm, s, t, ynorm
!
ek = 1.0
do k = 1,n
ek = dsign(ek,-z(k))
if (dabs(ek-z(k))>dabs(a(k,k))) then
s = dabs(a(k,k))/dabs(ek-z(k))
z = z*s
ek = s*ek
endif
wk = ek-z(k)
wkm = -ek-z(k)
s
= dabs(wk)
sm = dabs(wkm)
if (a(k,k)/=0.0) then
wk = wk/a(k,k)
wkm = wkm/a(k,k)
else
wk = 1.0
wkm = 1.0
endif
sm
= sm+sum(dabs(z(k+1:n)+wkm*a(k,k+1:n)))
z(k+1:n) = z(k+1:n)+wk*a(k,k+1:n)
s
= s+sum(dabs(z(k+1:n)))
if (s<sm) then
t
= wkm-wk
wk
= wkm
z(k+1:n) = z(k+1:n)+t*a(k,k+1:n)
endif
z(k) = wk
end do
s = 1.0/sum(dabs(z))

subroutine gau(a,ipvt,n)
!
!
!

*** Eliminaci
on de Gauss de la matriz A
implicit none

!
integer, intent(in) :: n
integer, intent(out) :: ipvt(n)
real(kind=2), intent(inout) :: a(n,n)
!
integer :: l, i, j, k
real(kind=2) :: smax, r, r1
!
! --- Triangularizaci
on !
do k = 1,n-1
smax = 0
do i = k,n
if (dabs(a(i,k))>smax) then
l
= i
smax = dabs(a(i,k))
endif
end do
ipvt(k) = l
if (l/=k) then
r
= a(l,k)
a(l,k) = a(k,k)
a(k,k) = r
endif
r1 = -1.0/a(k,k)
a(k+1:n,k) = a(k+1:n,k)*r1
do i = k+1,n
r = a(l,i)

G.2 Codigos en Fortran 90

if (l/=k) then
a(l,i) = a(k,i)
a(k,i) = r
endif
a(k+1:n,i) = a(k+1:n,i)+r*a(k+1:n,k)
end do

end do
ipvt(n) = n
!
return
end subroutine gau

877

Apendice

DEL NUMERO

ESTIMACION
DE
DE CONDICION
MATRICES CUADRADAS

de la denici
OMO SE RECORDARA
on dada en el captulo 1, el n
umero de condici
on de una matriz cuadrada, A,
(A) = A A1 

para una norma matricial   consistente con una norma vectorial, informa, entre otras cosas,
de la proximidad de esa matriz a la singularidad, teniendo una importancia extraordinaria para
determinar la sensibilidad del vector soluci
on de un sistema de ecuaciones lineales Ax = b a
peque
nos cambios tanto en el termino de la derecha, b, como en los coecientes que denen
la matriz A. Cuanticar o estimar el n
umero de condici
on de una matriz puede ser necesario
para calibrar que va a ocurrir con las operaciones en las que interviene o con el algoritmo que
se le aplique para factorizarla, reducirla, etc.
Como se puede deducir de la observaci
on de su denici
on, determinar estrictamente el
n
umero de condici
on de una matriz cuadrada es una operaci
on prohibitiva desde el punto de
vista del n
umero de calculos a realizar. A pesar de que contar con la informaci
on que suministra
puede resultar interesante, puede que no el precio que hay que pagar por ello en terminos del
n
umero de operaciones a llevar a cabo y del tiempo del ordenador a invertir en ello. Para evitar
esto, en los u
ltimos a
nos se han desarrollado un conjunto de buenos algoritmos para estimar un
n
umero aproximado al del n
umero de condici
on de una matriz, haciendolo con una cantidad
signicativamente inferior de operaciones de c
omputo.
879

880

H.1

Apendice H. Estimacion del n


umero de condicion de matrices cuadradas

El estimador de Cline, Moler, Stewart y Wilkinson

Si se desea obtener el n
umero 1 (A) = A1 A1 1 , el calculo de A1 no representa mayor
dicultad ya que
A1 = max

1jn

n


|aij |.

i=1

1,
Ahora bien, A1 1 no es tan f
acil. Una forma de hacerlo sera estimando el valor de X

n] y x
i se obtendra resolviendo A
donde X = [
x1 , . . . , x
xi = ei , lleg
andose a que
1 (A) =

A1 X1 sera una buena aproximaci


on de 1 (A). El n
umero de operaciones necesario para

calcular
1 (A) sera del orden de 3 veces el que se requerira para obtener la matriz X.
En 1971, Cline, Moler, Stewart y Wilkinson propusieron un algoritmo para estimar 1 (A) en
O(n2 ) operaciones, que se utiliza mucho desde entonces, siendo referencia obligada al respecto.
Se basa en la utilizaci
on de la siguiente implicaci
on:
Ay = d

A1 1 y1 /d1 .

La idea b
asica del procedimiento de obtenci
on de
1 (A) radica en escoger d de tal manera que
la soluci
on y tenga una norma grande y hacer entonces

1 (A) = A1 y1 /d1 .


Lo buena o mala que sea la aproximaci
on
1 (A) de 1 (A) depender
a de lo proxima que este la
relacion y1 /d1 a su valor m
aximo, A1 1 .
Para comprender como funciona este algoritmo, considerese primero el caso en que A = T
es una matriz triangular superior. La relaci
on entre d e y estara totalmente denida por la
siguiente versi
on de un proceso de sustituci
on inversa:
p(1:n) = 0
for j = n to 1
Escoger d(j)
y(j) = (d(j) p(j))/T (j, j)
p(1:j 1) = p(1:j 1) + y(j)T (1:j 1, j)
end

(H.1)

La diferencia entre este u


ltimo y un proceso de sustituci
on inversa ordinario, T y = d, es que
en (H.1) el termino de la derecha, d, hay que elegirlo de tal manera que la norma de y sea
grande con respecto a la de el.
Una forma de forzar a que y crezca con respecto a d consiste en obligar a que d(j) sea 1
a 1; si p(j) < 0, d(j) se har
a +1. En
o +1, maximizando as y(j). Si p(j) 0, d(j) se har
otras palabras, en (H.1), d(j) debe hacerse igual a sign(p(j)). Como d(1:n) = [1, . . . , 1]T ,
el estimador del n
umero de condici
on 1 (A) de A = T es

1 (A) = T 1 y1 .
Se puede conseguir un estimador m
as able si d(j) {1, +1} se escoge de tal manera que
que crezcan simultaneamente y(j) y p(1:j 1, j) + y(j)T (1:j 1, j). En concreto, en el paso j

H.1 El estimador de Cline, Moler, Stewart y Wilkinson

se calcularan

y(j)+
s(j)+
y(j)
s(j)

=
=
=
=

881

(1 p(j))/T (j, j)
|y(j)+ | + p(1:j 1) + y(j)+ T (1:j 1, j)1
(1 p(j))/T (j, j)
|y(j) | + p(1:j 1) + y(j) T (1:j 1, j)1

y se hara

y(j) =

y(j)+
y(j)

si s(j)+ s(j)
si s(j)+ < s(j) .

El algoritmo completo para estimar el n


umero de condici
on 1 (T ) de una matriz T nn ,
triangular superior regular, es el que se lista en la tabla H.1.
Tabla H.1
Algoritmo para la estimaci
on del n
umero de condici
on 1 (T ) de una matriz triangular
superior
p(1:n) = 0
for j = n to 1
y(j)+ = (1 p(j))/T (j, j)
y(j) = (1 p(j))/T (j, j)
p(j)+ = p(1:j 1) + y(j)+ T (1:j 1, j)
p(j) = p(1:j 1) + y(j) T (1:j 1, j)
if |y(j)+ | + p(j)+ 1 |y(j) | + p(j) 1 then
y(j) = y(j)+
p(1:j 1) = p(j)+
else
y(j) = y(j)
p(1:j 1) = p(j)
end
end
= y1 T 1
y = y/y1

Para estimar el n
umero de condici
on 1 (A) de una matriz A nn , de la que se conoce
su factorizaci
on P A = LU , habra que llevar a cabo las siguientes operaciones:
Aplicar una versi
on del algoritmo de la tabla H.1 a la matriz U T para obtener una
T
soluci
on de U y = d de norma grande.
Resolver LT r = y, Lw = P r y U z = w.
Calcular
1 (A) = A1 z1 /r1 .
Hay que hacer notar que z1 A1 1 r1 .
Esta forma de llegar al n
umero de condici
on deseado se basa en las siguientes reglas
heursticas:

882

Apendice H. Estimacion del n


umero de condicion de matrices cuadradas

Si A esta mal condicionada y P A = LU , la matriz U estara tambien mal condicionada.


L, por el contrario estara bien condicionada.
on del vector singular
El vector soluci
on de AT P T r = d tiende a estar situado en la direcci
izquierdo asociado al valor singular min (A).
Terminos de la derecha como r producen soluciones de norma grande en el sistema
Az = r.
A continuaci
on se lista un c
odigo en Fortran 77 que utiliza el algoritmo de la tabla H.1
para estimar el n
umero de condici
on 1 de una matriz de Hilbert, H10 1010 . La matriz de
Hilbert, cuyos coecientes se denen de la siguiente manera,
hij =
es una matriz conocida por estar muy mal
son:
1 (H10 )
2 (H10 )
(H10 )

1
,
i+j1

condicionada. De hecho, sus n


umeros de condici
on
= 3,5353 1013
= 1,6025 1013
= 3,5353 1013 .

PROGRAM Condest
C
C
C

*** Estimaci
on del n
umero de condici
on 1 de una matriz de Hilbert.
parameter (n=10)
double precision a(n,n),z(n),cond,anorm,absum
integer ipvt(n)

C
open (10,file=clin1)
read (10,*) a
C
C - Norma 1 de la matriz
C
anorm = 0
do i=1,n
anorm = dmax1(anorm,absum(a(1,i),n))
end do
C
C - Estimaci
on del n
umero de condici
on. Factorizar primero PA=LU.
C
call gau (a,ipvt,n)
call rcond (a,n,ipvt,anorm,cond,z)
C
print *,cond
C
end
subroutine rcond (a,n,ipvt,anorm,cond,z)
C
C
C

*** Se estima es n
umero de condici
on 1 de PA=LU.
integer ipvt(n)
double precision a(n,n),z(n),anorm,ek,wk,wkm,sm,s,t,ynorm,cond,
+
absum,produ

H.1 El estimador de Cline, Moler, Stewart y Wilkinson

C
T
C - Resolver U y=d
C
ek = 1.0
do k=1,n
if (z(k).ne.0.0) ek = dsign(ek,-z(k))
if (dabs(ek-z(k)).gt.dabs(a(k,k))) then
s = dabs(a(k,k))/dabs(ek-z(k))
call scalm (z,s,n)
ek = s*ek
end if
wk = ek-z(k)
wkm = -ek-z(k)
s
= dabs(wk)
sm = dabs(wkm)
if (a(k,k).ne.0.0) then
wk = wk/a(k,k)
wkm = wkm/a(k,k)
else
wk = 1.0
wkm = 1.0
end if
do j=k+1,n
sm
= sm+dabs(z(j)+wkm*a(k,j))
z(j) = z(j)+wk*a(k,j)
s
= s+dabs(z(j))
end do
if (s.lt.sm) then
t = wkm-wk
wk = wkm
do j=k+1,n
z(j) = z(j)+t*a(k,j)
end do
end if
z(k) = wk
end do
s = 1.0/absum(z,n)
call scalm (z,s,n)
C
T
C - Resolver L r=y
C
do k=n,1,-1
if (k.lt.n) z(k) = z(k)+produ(a(k+1,k),z(k+1),n-k)
if (dabs(z(k)).gt.1.0) then
s = 1.0/dabs(z(k))
call scalm (z,s,n)
end if
l
= ipvt(k)
t
= z(l)
z(l) = z(k)
z(k) = t
end do
s = 1.0/absum(z,n)
call scalm (z,s,n)
C
ynorm = 1.0
C
C - Resolver Lw=Pr
C

883

884

Apendice H. Estimacion del n


umero de condicion de matrices cuadradas

do k=1,n
l
= ipvt(k)
t
= z(l)
z(l) = z(k)
z(k) = t
do i=1,n-k
z(k+i) = z(k+i)+t*a(k+i,k)
end do
if (dabs(z(k)).gt.1.0) then
s = 1.0/dabs(z(k))
call scalm (z,s,n)
ynorm = s*ynorm
end if
end do
s = 1.0/absum(z,n)
call scalm (z,s,n)
ynorm = s*ynorm
C
C - Resolver Uz=w
C
do k=n,1,-1
if (dabs(z(k)).gt.dabs(a(k,k))) then
s = dabs(a(k,k))/dabs(z(k))
call scalm (z,s,n)
ynorm = s*ynorm
end if
if (a(k,k).ne.0.0) then
z(k) = z(k)/a(k,k)
else
z(k) = 1.0
end if
t = -z(k)
do i=1,k-1
z(i) = z(i)+t*a(i,k)
end do
end do
s = 1.0/absum(z,n)
call scalm (z,s,n)
ynorm = s*ynorm
if (anorm.eq.0.0) then
cond = 0.0
else
cond = anorm/ynorm
end if
return
end
double precision function absum (a,n)
double precision a(n)
absum = 0.0
do i=1,n
absum = absum +dabs(a(i))
end do
return
end
double precision function produ (a,b,n)
double precision a(n),b(n)
produ = 0.0

H.1 El estimador de Cline, Moler, Stewart y Wilkinson

do i=1,n
produ = produ+a(i)*b(i)
end do
return
end
subroutine scalm (a,t,n)
double precision a(n),t
do i=1,n
a(i) = a(i)*t
end do
return
end
subroutine gau (a,ipvt,n)
C
C
C

*** Eliminaci
on de Gauss de la matriz A
integer ipvt(n),l,i,j,k,n
double precision a(n,n),smax,r,r1

C
C - Triangularizaci
on C
do k = 1,n-1
smax = 0
do i = k,n
if (dabs(a(i,k)).gt.smax) then
l
= i
smax = dabs(a(i,k))
endif
end do
ipvt(k) = l
if (l.ne.k) then
r
= a(l,k)
a(l,k) = a(k,k)
a(k,k) = r
endif
r1 = -1.0/a(k,k)
do i = k+1,n
a(i,k) = a(i,k)*r1
enddo
do i = k+1,n
r = a(l,i)
if (l.ne.k) then
a(l,i) = a(k,i)
a(k,i) = r
endif
do j = k+1,n
a(j,i) = a(j,i)+r*a(j,k)
end do
end do
end do
ipvt(n) = n
C
return
end

Si se ejecuta este programa, la solucion que se obtiene es


2.678770454061916E+013

885

886

Apendice H. Estimacion del n


umero de condicion de matrices cuadradas

Como se puede observar, la estimacion del valor real de 1 (H10 ) = 3,5353 1013 que se obtiene
es muy buena.

H.2

El algoritmo de Hager

Propuesto por W. Hager en 1984, este algoritmo se basa en estimar el valor de A1  a partir de
una tecnica de optimizacion. Si se hace A1 = B, design
andose los coecientes de B mediante
bij , y se dene la funci
on



n
n 




bij xj  ,
f (x) = Bx1 =


i=1 j=1

entonces

B1 = A1 1 = max {f (x) : x1 1} .

El problema se plantea en terminos de encontrar el m


aximo de la funci
on convexa f (x) en el
conjunto convexo
S = {x n : x1 1} .
Como se ha estudiado en la parte del libro dedicada a la programaci
on lineal, el m
aximo
de una funci
on convexa dentro del conjunto de soluciones que dene un conjunto convexo se
produce en un punto extremo de ese conjunto convexo. El algoritmo completo de Hager es el
de la tabla H.2. Seg
un hace notar Hager en su artculo, Hager [1984], el algoritmo converge
normalmente en muy pocas iteraciones (en la mayora de los casos en dos iteraciones).
A continuaci
on se lista un programa escrito para Matlab basado en el algoritmo de Hager
para estimar el n
umero de condici
on 1 (A).
function [cnd,iter] = condhag(A);
%
%CONDHAG Esta funci
on estima el n
umero de condici
on 1 de la matriz A.
%
%[CND,ITER] = produce el n
umero de condici
on estimado CND y el n
umero
%
de iteraciones empleado para conseguirlo.
%
%El programa necesita de las rutinas SUSINV y PIVPAR.
%
[m,n] = size(A);
if m=n
disp(la matriz A no es cuadrada);
return;
end;
rho = 0;
b = zeros(n,1);
y = zeros(n,1);
for i = 1 : n
b(i) = 1/n;
end;
flag = 0;
iter = 0;
while flag == 0
%
% Resolver Ax = b usando PIVPAR.
%
[stora,U,M] = pivpar(A);

H.2 El algoritmo de Hager

Tabla H.2
El algoritmo de Hager para estimar el n
umero de condici
on 1 de una matriz A
Paso 0 Hacer = A1 1 = 0 y b = [1/n, . . . , 1/n]T .
Paso
Paso
Paso
Paso

1
2
3
4

Resolver Ax = b.
Comprobar si x1 : si es as, ir al paso 6; si no, hacer = x1 e ir al paso 3.
Resolver AT z = y, donde yi = 1, si xi 0, e yi = 1, si xi < 0.
Hacer j = max1in {|zi |}.

Paso 5 Si |zj | > z T b, hacer


0
.
.
.


1 la j
b=

0

.
..
0

y volver al paso 1. Si no se cumple lo anterior, seguir al paso 6.


umero de condicion
1 (A) = A1 .
Paso 6 Hacer A1 1 = . El n

bprim = M*b;
x = susinv(U,bprim) ;
if norm(x,1) <= rho
flag = 1;
return;
end;
iter = iter + 1;
rho = norm(x,1);
for i = 1:n
if x(i) >= 0
y(i) = 1;
else
y(i) = -1;
end;
end;
%
% Resolver Az = y usando PIVPAR.
%
c1 = A;
[stora,U,M] = pivpar(c1);
bprim = M * y;
z = susinv(U,bprim);
[j] = absmax(z);
if abs(z(j)) > z*b
b = zeros(n,1);
b(j) = 1;
else

887

888

Apendice H. Estimacion del n


umero de condicion de matrices cuadradas

flag = 1;
end;
cnd = rho * norm(A,1);
end;
end;
function [A,U,M] = pivpar(A);
%
%PIVPAR Triangulariza, mediante eliminaci
on de Gauss con pivotaci
on parcial,
%
la matriz A.
%
%[A,U,M] = pivpar(A) produce una matriz triangular superior U
%
y una matriz triangular inferior permutada M,
%
tales que MA = U. La parte triangular inferior de A
%
contiene los multiplicadores y la triangular superior U.
%
[m,n] = size(A);
if m=n
disp(La matriz T no es cuadrada)
return;
end;
M = eye(n,n);
U = zeros(n,n);
for k = 1:n-1
M1 = eye(n,n);
d = k ;
s = A(k,k);
for i = k+1:n
if abs(A(i,k)) > abs(s)
s = A(i,k);
d = i;
end;
end;
if (s == 0)
disp(se ha encontrado un elemento pivote cero)
A =[];
U =[];
M =[];
return;
end;
p(k) = d;
if d = k
[A(k,k:n),A(d,k:n)] = inter(A(k,k:n),A(d,k:n));
[M(k,:),M(d,:)] = inter(M(k,:),M(d,:));
end;
M1(k+1:n,k) = -A(k+1:n,k)/A(k,k);
A(k+1:n,k) = M1(k+1:n,k);
A(k+1:n,k+1:n) = A(k+1:n,k+1:n) +M1(k+1:n,k) * A(k,k+1:n);
M(k+1:n,1:n) = M(k+1:n,1:n) +M1(k+1:n,k) * M(k,1:n);
end;
U = triu(A);
end;
function [y] = susinv(T,b);
%
%SUSINV Sustituci
on inversa.
%
%y = susinv(T,b) Calcula la soluci
on y del sistema Ty = b.
%

H.2 El algoritmo de Hager

889

[m,n] = size(T);
if m=n
error(la matriz T no es cuadrada)
end;
y = zeros(n,1);
for i = n:-1:1
sum = 0;
if (i = n)
sum = T(i,i+1:n)*y(i+1:n);
end;
if (T(i,i) == 0)
error(la matriz T es singular)
end;
y(i) = (b(i)-sum )/T(i,i);
end;
end;
function [p] = absmax(y);
%
%ABSMAX Determina la posici
on p en el vector y del coeficiente de
%
mayor valor absoluto.
%
%p = absmax(y) Devuelve la posici
on p.
%
[m,n] = size(y);
s = y(1);
n1 = 1;
for k=1:m
if abs(y(k))>abs(s)
p = k;
s = y(k);
end;
end;
end;
function [y,z] = inter(y,z);
%
%INTER
Intercambia dos vectores.
%
c = y;
y = z;
z = c;
end;

Usando este estimador, el valor que proporciona para la matriz de Hilbert que us
abamos
antes es
3.535374081066318e+013
habiendo utilizado 2 iteraciones para conseguirlo.

Referencias
Todo lo que se expone en este apendice se puede encontrar detalladamente en cualquier buen
libro de c
alculo numerico o de algebra lineal numerica. Lo presentado esta basado en Golub y
Van Loan [1996], Highman [1996] y Datta [1995]. Los programas son del autor; est
an basados

890

Apendice H. Estimacion del n


umero de condicion de matrices cuadradas

en los correspondientes de LINPACK y MATMOD. Este u


ltimo disponible con el libro de
Datta.

Apendice

SOFTWARE DISPONIBLE EN
INTERNET

XISTE UNA GRAN CANTIDAD de software disponible para resolver los problemas
que hemos abordado en este libro. Como f
acilmente puede imaginar el lector, el
mas probado, robusto y con total garanta de funcionar en las circunstancias m
as
adversas no suele ser de dominio p
ublico,1 es decir, no se puede obtener si no se
abona una cierta cantidad de dinero. No obstante, gracias a Internet, cada vez es mas el de
buena calidad que la comunidad cientco-tecnica tiene a su disposicion estando conectado a
la red.
Para saber que software emplear en cada circunstancia, como hemos recalcado en varias
ocasiones a lo largo del libro, es importante conocer bien el problema que se tiene que resolver, la forma en la que se presenta, su previsible dicultad numerica, su tama
no e incluso la
impresi
on personal al respecto de la persona que lo ha de resolver. Como la disponibilidad de
programas de ordenador para resolver problemas de sistemas de ecuaciones lineales y no lineales, as como de programaci
on lineal y entera, cada vez es mayor, una buena forma de proceder
desde nuestro punto de vista consistira en tratar de resolver lo m
as rapidamente posible un
prototipo del problema que se estudie, utilizando si es factible software de dominio p
ublico, o
programas especcos de alto nivel como Matlab, Mathematica u otros parecidos, y luego,
si se tiene que resolver el mismo problema muchas veces mas, o va a ser parte de un proceso
mas complejo, plantearse la idoneidad de adquirir las rutinas concretas que interesen de alguno
de los paquetes de programas que indicaremos posteriormente, o programarse uno mismo en
Fortran o C la forma de dar soluci
on al problema tomando como base el dise
no del prototipo
que mencion
abamos.
Una gua muy buena para conocer el software disponible para resolver los problemas que
hemos presentado en el libro, as como cualquier problema de optimizaci
on en general, es
Optimization Software Guide de More y Wright [1993]. Informaci
on al respecto, actualizada
1

Aunque no siempre sea as.

891

892

Apendice I. Software disponible en Internet

continuamente, se puede obtener de unos de los mejores sitios de Internet con informaci
on
y documentaci
on sobre matematica aplicada industrialmente: su direcci
on de World Wide
Web, o simplemente Web, es la que sigue.

http://www.netlib.org
Esta informaci
on tambien esta disponible va FTP en

ftp://ftp.netlib.org
En estas direcciones se puede obtener directamente copia del mucho software disponible en
Internet de dominio p
ublico, como Linpack, Lapack, Eispack, Minpack, as como enlaces
(links), con direcciones donde se puede encontrar otro mucho tanto de dominio p
ublico como
de pago.
La sociedad norteamericana INFORMS, en su revista OR/MS Today, publica peri
odicamente
unas revisiones muy interesantes sobre los programas de ordenador que se encuentran disponibles, tanto de dominio p
ublico como de pago. La direcci
on Web donde se pueden consultar
estos estudios es

http://lionhrtpub.com/ORMS.html
En los estudios se revisan programas para optimizaci
on, algebra lineal numerica, toma de
decisiones, estadstica y otras muchas ramas del computo.
En la sociedad norteamericana Society for Industrial and Applied Mathematics, editora de
la gua antes indicada, tambien se pueden consultar listas actualizadas de software matematico.
Su direcci
on de Web es la que sigue.

http://www.siam.org
Una direcci
on donde se pueden obtener sin coste alguno todos los algoritmos que la Association for Computing Machinery ha ido recolectando las u
ltimas decadas en su serie Collected
Algorithms from ACM es la siguiente

http://www.acm.org/calgo

I.1

Software de pago

Los paquetes de ordenador generales que consideramos mas interesante dentro de este dominio
son:
NAG

La librera de Numerical Algorithms Group contiene programas de ordenador para tratar cualquier tipo de problemas de c
omputo que se puedan dar.
Se venden versiones para ordenador personal, estaci
on de trabajo, grandes
ordenadores, ordenadores con arquitectura en paralelo, etc. Tambien incluye compiladores y otros productos generales de software. La direcci
on Web
donde se puede recabar informaci
on sobre este paquete es la que sigue.

http://www.nag.co.uk

I.2 Software de dominio p


ublico

893

Estas siglas se reeren a International Mathematical and Statistical Libraries.


Contiene rutinas en Fortran y C para resolver cualquier tipo de problema
relacionado con algebra lineal numerica, optimizaci
on, ecuaciones diferenciales, estadstica, integraci
on numerica, elementos nitos, etc. La direccion de
Internet donde se puede encontrar informaci
on sobre esta librera es la que
sigue.

IMSL

http://www.vni.com/products/imsl/index.html
Matlab

Sobre este programa ya hemos incidido varias veces a lo largo de todo el libro.
Informaci
on directa sobre el se puede consultar en la direcci
on siguiente

http://www.mathworks.com
Mathematica Esta es una alternativa muy interesante de Matlab. La direcci
on de Internet donde se puede obtener informaci
on al respecto es la que sigue.

http://www.wri.com
CPLEX

Bajo este nombre se agrupan un amplio conjunto de programas escritos en


C para resolver problemas de programaci
on lineal utilizando varios algoritmos, secuenciales y paralelos, de los mas modernos y ecientes: el simplex, de
puntos interiores, etc. La direcci
on de Internet donde se puede consultar
informaci
on sobre este paquete es la que sigue.

http://www.cplex.com
OSL

Esta librera de IBM, Optimization Software Library, contiene programas de


ordenador para resolver problemas computacionales de optimizaci
on de cualquier tipo. La direcci
on de Internet donde se puede recabar informaci
on
sobre este paquete es la que sigue.

http://www.research.ibm.com/osl

I.2

Software de dominio p
ublico

Como ya hemos indicado, existe gran cantidad de software de dominio p


ublico disponible para
resolver problemas como los que hemos presentado en este libro.
Dada la gran novedad que ha supuesto, y supone, poder acceder a Internet cualquiera que
sea la circunstancia, existe una proliferaci
on muy importante de direcciones donde se pueden
encontrar cosas valiosas. El problema de listar aqu siquiera algunas es que en unos pocos meses
la informaci
on puede resultar irrelevante, bien porque las personas encargadas de mantener los
datos o los programas que en ellas guren no se dediquen m
as a ello, o simplemente porque
desaparezcan las direcciones. Nuestra mejor recomendacion es dirigirse a las direcciones de
instituciones consolidadas como las que hemos listado al comienzo de este captulo y en la
seccion anterior.
En cualquier caso, a continuaci
on se citan cuatro direcciones que llevan ya varios a
nos
funcionando muy bien y en las cuales se puede consultar mucha informaci
on relativa a software
disponible, artculos interesantes, libros y u
ltimas novedades a estos respectos.

894

Apendice I. Software disponible en Internet

http://www.simtel.net
http://mat.gsia.cmu.edu
http://www.mats.mu.oz.au/worms
http://ucsu.colorado.edu/xu/software.html
En el libro de Brian J. Thomas, The Internet for Scientists and Engineers, de 1996, se
listan una gran cantidad de direcciones de Internet donde se puede encontrar respuesta a
cualquiera de las necesidades del lector en asuntos cientco-tecnologicos.

Apendice

EL SOFTWARE DEL LIBRO

L SOFTWARE QUE SE suministra con el libro, en el CD-ROM que se adjunta,


esta almacenado seg
un el esquema que representa la gura J.1. Todos los programas
que se han codicado y listado para probar los algoritmos que se han presentado
en el libro se incluyen en el disco en sus versiones en Fortran 77, Fortran 90 y
C. Tambien estan las versiones mas recientes de Bbmi y Ccnet y bastantes casos y ejemplos,
academicos y comerciales, con los que se pueden poner a prueba las prestaciones de estos dos
codigos.
Los codigos fuente en Fortran 77, Fortran 90 y C se encuentran en los subdirectorios,
o carpetas, correspondientes. Los casos de prueba para el programa Bbmi, y su ejecutable
bbmi.exe, se encuentran en el subdirectorio o carpeta con su nombre. La carpeta CCNET contiene el codigo fuente de Ccnet, su ejecutable ccnet.exe y varios cheros para probar sus
prestaciones.
La carpeta HERRAMI contiene programas u
tiles si no se dispone de compilador de Fortran
o de C y se quiere modicar y compilar los fuentes que se suministran. Los compiladores que
se proporcionan son de dominio p
ublico por lo que su bondad no se espera que sea comparable
a la de comerciales como los que se han usado para procesar los codigos que se presentan en el
libro: FORTRAN Powerstation 4.0 de Microsoft y Borland C/C++ 5.0. En las carpetas que
cuelgan de HERRAMI estan todos esos programas comprimidos y algunos descomprimidos. Entre
estos u
ltimos se pueden encontrar un compilador de C y otro de FORTRAN 77, y todos los
programas auxiliares que necesitan. Para expandir los cheros que est
an en la carpeta ZIPS,
lo que dara lugar a algo similar a lo que cuelga de EXPANDI, hay que seguir las instrucciones
que guran en los cheros readme.1st, readme.dj y similares.
La direccion de Internet de donde se ha obtenido gran parte del software de dominio
p
ublico que se incluye en la carpeta HERRAMI del CD-ROM es la siguiente.

http://www.simtel.net
Esta direcci
on, mantenida por Keith Petersen, es un centro mundial de distribuci
on muy interesante para encontrar programas de todo tipo de los denominados de dominio p
ublico: shareware
895

896

Apendice J. El software del libro

d:\

F77

BBMI

CCNET

F90

HERRAMI

ZIPS

EXPANDI

Figura J.1
Representacion de la disposici
on del software del libro que se incluye en el CD-ROM que se
adjunta al mismo
y freeware. De toda la informaci
on que se puede obtener en este servidor, a la que nos referimos esta ubicada dentro del apartado denominado DJ Delories DJGPP. Como se actualiza
peri
odicamente, es conveniente consultarla de vez en cuando por si ha cambiado algo de los
programas o se ha incluido nuevo software mejor que el que hemos utilizado para elaborar el
CD.
Ademas de los cheros readme.1st y readme.dj, en la direcci
on

ftp://x2ftp.oulu.fi
en el directorio /pub/msdos/programming/djgpp2, existe un chero, djtut255.zip donde se
dan instrucciones detalladas (en cheros .txt y .html) sobre como proceder con los programas
apuntados. El n
umero 255 puede variar dependiendo de la versi
on de que se trate.

Bibliografa
[1] Aasen, J.O. 1971. On the Reduction of a Symmetric Matrix to Tridiagonal Form. BIT 11, pp.
233-242.
[2] Abadie, J. ed. 1970. Integer and Nonlinear Programming. North-Holland Publishing Company.
[3] Acton, F.S. 1990. Numerical Methods that Work. The Mathematical Association of America.
[4] Adams, J.C., Brainerd, W.S., Martin, J.T., Smith, B.T. y Wagener, J.L. 1992. Fortran 90 Handbook. Complete ANSI/ISO Reference. Intertext Publications, MacGraw-Hill Book
Company.
[5] Adobe Systems Incorporated 1990. PostScript Language. Reference Manual. Addison-Wesley
Publishing Company.
[6] Adobe Systems Incorporated 1986. PostScript Language. Tutorial and Cookbook. AddisonWesley Publishing Company.
[7] Ahuja, R.K., Magnati, T.L. y Orlin, J.B. 1989. Network Flows. En Handbooks in Operations
Research and Management Science. Volume 1: Optimization. Nemhauser, G.L., Rinnooy Kan,
A.H.G. y Todd, M.J. eds. North-Holland Publishing Company.
[8] Alj, A. y Faure. R. 1988. Investigaci
on operativa. Elementos fundamentales. Vol. 1. Masson,
S.A.
[9] Alvarado, F.L. 1979. A Note on Sorting Sparse Matrices. Proceedings of the IEEE 67, pp.
1362-1363.
[10] Alvarado, F.L. 1990. Manipulation and Visualization of Sparse Matrices. ORSA J. Computing
2, pp. 186-207.
[11] Anders, G.J. 1990. Probability Concepts in Electric Power Systems. John Wiley and Sons.
[12] Anderson, E., Bai, Z,, Bischof, C., Demmel, J., Dongarra, J., Du Croz, J., Greenbaum, A., Hammarling S., McKenney, A., Ostrouchov, S. y Sorensen, D. 1992. LAPACK Users Guide. SIAM.
[13] Anderson, E., Bai, Z,, Bischof, C., Demmel, J., Dongarra, J., Du Croz, J., Greenbaum, A., Hammarling S., McKenney, A., Ostrouchov, S. y Sorensen, D. 1995. LAPACK Users Guide. Second Edition. SIAM.
[14] Arbel, A. 1993. Exploring Interior-Point Linear Programming. Algorithms and Software. The
MIT Press.
[15] Armijo, L. 1966. Minimization of Functions Having Lipschitz Continuos First Partial Derivatives. Pacic J. Math. 16, pp. 1-3.
[16] Arrillaga, J. y Arnold, C.P. 1990. Computer Analysis of Power Systems. John Wiley and
Sons.
[17] Atkinson, K. 1993. Elementary Numerical Analysis. John Wiley and Sons.

897

898

Bibliografa

[18] Atkinson, L.V., Harley, P.J. y Hudson, J.D. 1989. Numerical Methods with Fortran 77.
A Practical Introduction. Addison-Wesley Publishing Company.
ements dAnalyse Numerique. Cepadues-Editions.
[19] Atteia, M. y Pradel, M. 1990. El
[20] Avriel, M. 1976. Nonlinear Programming. Analysis and Methods. Prentice Hall.
[21] Axelsson, O. 1996. Iterative Solution Methods. Cambridge University Press.
[22] Bartels, R.H. y Golub, G.H. 1969. The Simplex Method of Linear Programming Using LU
Decomposition. Communications of the ACM 12, pp. 266-268.
[23] Bazaraa, M.S. y Jarvis, J.J. 1977. Linear Programming and Network Flows. John Wiley and
Sons.
[24] Bazaraa, M.S., Jarvis, J.J. y Sherali, H.D. 1990. Linear Programming and Network Flows.
John Wiley and Sons.
[25] Bazaraa, M.S. y Shetty, C.M. 1979. Nonlinear Programming. Theory and Algorithms. John
Wiley and Sons.
[26] Beale, E.M.L. 1954. An Alternative Method for Linear Programming. Proceedings of the Cambridge Philosophical Society 50, pp. 513-523.
[27] Beckmann, M.J. 1968. Dynamic Programming of Economic Decisions. Springer Verlag.
[28] Bellman, R. 1960. Introduction to Matrix Analysis. McGraw-Hill Book Company.
[29] Bellman, R. 1972. Dynamic Programming. Princeton University Press.
[30] Bellman, R. 1985. Introducci
on al an
alisis matricial. Editorial Reverte.
[31] Bellman, R. y Dreyfus, S.E. 1962. Applied Dynamic Programming. Princeton University
Press.
[32] Berge, C. 1970. Graphes et Hypergraphes. Dunod.
[33] Bergen, A.R. 1986. Power Systems Analysis. Prentice Hall.
[34] Berman, A. y Plemmons, R.J. 1974. Cones and Iterative methods for Best Least Squares
Solutions of Linear Systems. SIAM J. Numer. Anal. 11, pp. 145-154.
[35] Bertsekas, D. P. 1982. Constrained Optimization and Lagrange Multiplier Methods. Academic
Press, Inc.
[36] Bertsekas, D. P. 1991. Linear Newtwork Optimization: Algorithms and Codes. The MIT Press.
[37] Bertsekas, D. P. 1995. Nonlinear Programming. Athena Scientic.
[38] Bertsekas, D. P. y Tsitsiklis, J.N. 1989. Parallel and Distributed Computation. Numerical
Methods. Prentice Hall.
[39] Bertsimas, D. y Tsitsiklis, J.N. 1997. Introduction to Linear Optimization. Athena Scientic.
[40] Best, M.J. y Ritter, K. 1985. Linear Programming. Active Set Analysis and Computer Programms. Prentice Hall.
rk, rA 1990. Least Squares Methods. En Handbook of Numerical Analysis. Volume 1: Finite
[41] Bjo
Dierence Methods (Part 1); Solution of Equations in n (Part 1). Ciarlet, P.G. y Lions, J.L.
eds. North-Holland Publishing Company.
rk, rA 1996. Numerical Methods for Least Squares Problems. SIAM.
[42] Bjo
rk, rA y Elfving, T. 1979. Accelerated Projection Methods for Computing Psudoinverse
[43] Bjo
Solutions of Systems of Linear Equations. BIT 19, pp. 145-163.
[44] Boggs, P.T., Byrd, R.H. y Schnabel, R.B. eds. 1985. Numerical Optimization 1984. SIAM.

Bibliografa

899

[45] Bland, R.G. 1977. New Finite Pivoting Rules for the Simplex Method. Mathematics of Operations Research 2, pp. 103-107.
[46] Bradley, G.H., Brown, G.G. y Graves, G.W. 1977. Design and Implementation of Large
Scale Transshipment Algorithms. Management Science 24, pp. 1-34.
[47] Brainerd, W.S., Goldberg, C.H. y Adams, J.C. 1990. Programmers Guide to Fortran
90. Intertext Publications, MacGraw-Hill Book Company.
[48] Brainerd, W.S., Goldberg, C.H. y Adams, J.C. 1996. Programmers Guide to Fortran
90. Springer Verlag.
[49] Brown, H.E. 1975. Solution of Large Networks by Matrix Methods. John Wiley and Sons.
[50] Broyden, C.G. 1965. A Class of Methods for Solving Nonlinear Simultaneous Equations. Mathematics of Computation 19, pp. 577-593.
[51] Bunch, J.R. 1971. Analysis of the Diagonal Pivoting Method. SIAM J. Numer. Anal. 8, pp.
656-680.
[52] Bunch, J.R. 1974. Partial Pivoting Strategies for Symmetric Matrices. SIAM J. Numer. Anal.
11, pp. 521-528.
[53] Bunch, J.R. y Kaufman, L. 1977. Some Stable Methods for Calculating Inertia and Solving
Symmetric Linear Systems. Mathematics of Computation 31, pp. 163-179.
[54] Bunch, J.R., Kaufman, L. y Parlett, B.N. 1976. Decomposition of a Symetric Matrix.
Numerische Mathematik 27, pp. 95-109.
[55] Bunch, J.R. y Parlett, B.N. 1971. Direct Methods for Solving Symmetric Indenite Systems
of Linear Equations. SIAM J. Numer. Anal. 8, pp. 639-655.
[56] Bunch, J.R. y Rose, D.J. eds. 1976. Sparse Matrix Computations. Academic Press, Inc.
[57] Burden, R.L. y Faires, J.D. 1985. An
alisis numerico. Grupo Editorial Iberoamerica.
[58] Buzzi-Ferraris, G. 1993. Scientic C++. Building Numerical Libraries the Object-Oriented
Way. Addison-Wesley Publishing Company.
[59] Ciarlet, P.G. 1988. Introduction `
a LAnalyse Numerique Matricielle et a
` LOptimisation. Masson, S.A.
[60] Ciarlet, P.G. 1989. Introduction to Numerical Linear Algebra and Optimisation. Cambridge
University Press.
[61] Ciarlet, P.G. y Lions, J.L. eds. 1990. Handbook of Numerical Analysis. Volume 1: Finite
Dierence Methods (Part 1); Solution of Equations in n (Part 1). North-Holland Publishing
Company.
[62] Ciriani, T.A. y Leachman, R.C. 1993. Optimization in Industry. Mathematical Programming
and Modeling Techniques in Practice. John Wiley and Sons.
[63] Cline, A.K., Moler, C.B., Stewart, G.W. y Wilkinson, J.H. 1979. An Estimate for the
Condition Number of a Matrix. SIAM J. Numer. Anal. 16, pp. 368-375.
[64] Coleman, T.F., Edenbrandt, A. y Gilbert, J.R. 1986. Predicing Fill for Sparse Orthogonal
Factorization. Journal ACM 33, pp. 517-532.
[65] Coleman, T.F. y Li, Y. eds. 1990. Large-Scale Numerical Optimization. SIAM.
[66] Coleman, T.F. y Van Loan, C. 1988. Handbook for Matrix Computations. SIAM.
[67] Conte, S.D. y de Boor, C. 1981. Elementary Numerical Analysis. An Algorithmic Approach.
McGraw-Hill Book Company.
[68] Cook, T.M. y Russell, R.A. 1977. Introduction to Management Science. Prentice Hall.

900

Bibliografa

[69] Cormen, T.H., Leiserson, C.E. y Rivest, R.L. 1992. Introduction to Management to Algorithms. The MIT Press, McGraw-Hill Book Company.
[70] Cowell, W.R. ed. 1984. Sources and Development of Mathematical Software. Prentice Hall.
[71] Cuthill, E. y McKee, J. 1969. Reducing the bandwidth of Sparse Symmetric Matrices. Proceedings of the 24th Nationeal Conference of the Association for Computing Machinery (ACM), pp.
157-172. Brandon Systems Press.
[72] Chamberland, L. 1995. Fortran 90. A Reference Guide. Prentice Hall PTR.
[73] Chan, T.F. 1982. An Improved Algorithm for Computing the Singular Value Decomposition.
ACM Trans. on Mathematical Software 8, pp. 72-83.
[74] Chan, T.F. 1982. Algorithm 581: An Improved Algorithm for Computing the Singular Value
Decomposition. ACM Trans. on Mathematical Software 8, pp. 84-88.
[75] Cheney, W. y Kincaid, D. 1985. Numerical Mathematics and Computing. Brooks/Cole Publishing Company.
[76] Chivers, I. y Sleightholme, J. 1995. Introducing Fortran 90. Springer Verlag.

[77] Chong, E.K.P. y Zak,


S.H. 1996. An Introduction to Optimization. John Wiley and Sons.
[78] Chu, E., George, A., Liu, J, y Ng, E. 1984. SPARSPAK: Waterloo Sparse Matrix Package.
Users Guide for SPARSPAK-A. Research Report CS-84-36, Department of Computer Science,
University of Waterloo, Waterloo, Ontario, Canad
a.

[79] Chvatal, V. 1983. Linear Programming. W.H. Freeman and Company.


rk, rA 1974. Numerical Methods. Prentice Hall.
[80] Dahlquist, G. y Bjo
[81] Dakin, R.J. 1965. A Tree-Search Algorithm for Mixed Integer Programming Problems. Computer
Journal 8, pp. 250-255.
[82] Dantzig, G.B. 1963. Linear Programming and Extensions. Princeton University Press.
[83] Dantzig, G.B. 1987. Origins of the Simplex Method. Technical Report SOL 87-5. Systems Optimization Laboratory, Department of Operations Research, Stanford University.
[84] Dantzig, G.B.y Wolfe, Ph. 1960. Decomposition Principle for Linear Programming. Operations Research 8, pp. 101-111.
[85] Darst, R.B. 1991. Introduction to Linear Programming: Applications and Extensions. Marcel
Dekker, Inc.
[86] Datta, B.N. 1995. Numerical Linear Algebra and Applications. Brooks/Cole Publishing Company.
[87] Davenport, J.H. Siret, Y. y Tournier, E. 1993. Computer Algebra. Systems and Algorithms
for Algebraic Computation. Academic Press.
[88] De la Fuente, J.L. 1986. Programaci
on en redes no lineales. El problema de redes electricas.
Actas Optimizacion de Flujos en Redes86.
[89] De la Fuente, J.L. 1987. Programaci
on no lineal: Aplicaciones en an
alisis, gesti
on y planicaci
on de sistemas electricos. Actas I Seminario Internacional de Investigacion OperativaProgramacion Matematica86. J.P. Vilaplana y L.F. Escudero eds., pp. 255-278.
[90] De la Fuente, J.L. y Lumbreras, J. 1987. A New Implementation of an Optimal Power Flow
System Based on a General Purpose Nonlinear Programming Program. Proc. IEEE PICA, pp.
422-428.
[91] De la Fuente, J.L. 1988. Application of Nonlinear Network Optimization Techniques to Large
Scale Power Schedulling Problems. TIMS/ORSA National Meeting.

Bibliografa

901

[92] De la Fuente, J.L. 1989. La programaci


on matem
atica y la planicaci
on de redes electricas.
Actas Programacion Matematica89.
[93] Demidovich, B.P. y Maron, I.A. 1985. C
alculo Numerico Fundamental. Paraninfo.
[94] Dennis, J.E. y Schnabel, R.B. 1983. Numerical Methods for Unconstrained Optimization and
Nonlinear Equations. Prentice Hall.
[95] Dennis, J.E. y Schnabel, R.B. 1996. Numerical Methods for Unconstrained Optimization and
Nonlinear Equations. SIAM.
[96] Dommel, H.W. y Tinney, W.F. 1968. Optimal Power Flow Solutions. IEEE Trans. on Power
Apparatus and Systems PAS-87, pp. 1866-1876.
[97] Dongarra, J.J., Bunch, J.R., Moler, C.B. y Stewart, G.W. 1979. LINPACK Users
Guide. SIAM.
[98] Dongarra, J.J., Duff, I.S., Sorensen, D.C. y van der Vorst, H.A. 1991. Solving Linear
Systems on Vector and Shared Memory Computers. SIAM.
[99] Dorfman, R., Samuelson, P. y Solow, R. 1958. Linear Programming and Economic Analysis.
McGraw-Hill Kogakusha Ltd.
[100] Duff, I.S. 1981. MA32 - A Package for Solving Sparse Unsymmetric Systems Using the Frontal
Method. AERE Harwell Report AERE-R 10079. Computer Science & Systems Division, AERE
Harwell.
[101] Duff, I.S. 1981. MA32 - A Package for Solving Sparse Unsymmetric Systems Using the Frontal
Method. AERE Harwell Report AERE-R 10079. Computer Science & Systems Division, AERE
Harwell.
[102] Duff, I.S., Grimes, G. y Lewis, J.G. 1989. Sparse Matrix Test Problems. ACM Trans. on
Mathematical Software 15, pp. 1-14.
[103] Duff, I.S. y Reid, J.K. 1979. Some Design Features of a Sparse Matrix Code. ACM Trans. on
Mathematical Software 5, pp.18-35.
[104] Duff, I.S., Erisman, A.M. y Reid, J.K. 1986. Direct Methods for Sparse Matrices. Oxford
University Press.
[105] Duff, I.S. y Stewart, G.W. eds. 1979. Sparse Matrix Proceedings 1978. SIAM.
[106] Eisentat, S.C., Schultz, M.H. y Sherman, A.H. 1981. Algorithms and Data Structures for
Sparse Symmetric Gaussian Elimination. SIAM J. Sci. and Statist. Comput. 2, pp. 225-237.
[107] Elgerd, O.I. 1983. Electric Energy Systems Theory: An Introduction. McGraw-Hill Book Company.
[108] El-Hawary, M.E. y Christensen, G.S. 1979. Optimal Economic Operation of Electric Power
Systems. Academic Press, Inc.
[109] Ellis, T.M.R., Philips, I.R. y Lahey, T.M. 1994. Fortran 90 Programming. Addison-Wesley
Publishing Company.
llges, G. y Uhlig, F. 1996. Numerical Algorithms with C. Springer Verlag.
[110] Engeln-Mu
llges, G. y Uhlig, F. 1996. Numerical Algorithms with Fortran. Springer Verlag.
[111] Engeln-Mu
[112] Erisman, A.M., Neves, K.W. y Dwarakanath, M.H. eds. 1980. Electric Power Problems:
The Mathematical Challenge. SIAM.
[113] Evans, J.R. y Minieka, E. 1992. Optimization Algorithms for Network and Graphs. Marcel
Dekker, Inc.
[114] Faires, J.D. y Burden, R.L. 1993. Numerical Methods. PWS Publishing Company.

902

Bibliografa

[115] Fang, S.C., Puthenpura, S. 1993. Linear Optimization and Extensions. Theory and Algorithms. Prentice Hall.
[116] Farkas, J. 1902. Theorie der Einfachen Ungleichungen. Journal f
ur die Reine und Angewandte
Mathematik 124, pp. 1-27.
[117] Fiacco, A.V. y McCormick, G.P. 1968. Nonlinear Programming: Sequential Unconstrained
Minimization Techniques. John Wiley and Sons.
[118] Fiacco, A.V. y McCormick, G.P. 1990. Nonlinear Programming: Sequential Unconstrained
Minimization Techniques. SIAM.
[119] Fletcher, R. 1987. Practical Methods of Optimization. John Wiley and Sons.
[120] Ford, L.R. y Fulkerson, D.R. 1962. Flows in Networks. Princeton University Press.
[121] Forrest, J.J.H. y Tomlin, J.A. 1972. Updated Triangular Factors of the Basis to Maintain
Sparsity in the Product Form Simplex Method. Mathematical Programming 2, pp. 263-278.
[122] Forsythe, G.E., Malcolm, M.A. y Moler, C.B. 1977. Computer Methods for Mathematical
Computations. Prentice Hall.
[123] Fourer, R., Gay, D.M. y Kernigham, B.W. 1993. AMPL. A Modeling Language for Mathematical Programming. Boyd & Fraser Publishing Company.
[124] Gal, T. 1979. Postoptimal Analysis, Parametric Programming, and Related Topics. McGraw-Hill
Book Company.
ebc
ek, Jir
1993. Solving Problems in Scientic Computing Using Maple
[125] Gander, W. y Hr
and Matlab. Springer Verlag.
[126] Garbow, B.S., Boyle, J.M., Dongarra, J.J. y Moler, C.B. 1977. Matrix Eigensystem
Routines-EISPACK Guide Extension. Springer Verlag.
[127] Garca, C.B. y Zangwill, W.I. 1981. Pathways to Solutions, Fixed Points, and Equilibria.
Prentice Hall.
[128] Garfinkel, R.S. y Nemhauser, G.L. 1972. Integer Programming. John Wiley and Sons.
[129] George, A. 1971. Computer Implementation of the Finite Element Method. Ph.D. Dissertation,
Computer Science Department Report STAN-CS-71208, Stanford University.
[130] George, A. 1980. An Automatic One-way Disecction Algorithm for Irregular Finite Element
Problems. SIAM J. Numer. Anal. 17, pp. 740-751.
[131] George, A. y Heath, M.T. 1980. Solution of Sparse Linear Least Squares Problems Using
Givens Rotations. Linear Algebra and its Applications 34, pp. 69-83.
[132] George, A. y Liu, J.W. 1979. The Design of a User Interface for a Sparse Matrix Package.
ACM Trans. on Mathematical Software 5, pp. 139-162.
[133] George, A. y Liu, J.W. 1979. An Implementation of a Pseudoperipherial Node Finder. ACM
Trans. on Mathematical Software 5, pp. 284-295.
[134] George, A. y Liu, J.W. 1981. Computer Solution of Large Sparse Positive Denite Systems.
Prentice Hall.
[135] George, A. y Ng, E. 1985. An Implementation of Gaussian Elimination with Partial Pivoting
for Sparse Systems. SIAM J. Sci. and Statist. Comput. 6, pp. 390-409.
[136] George, A. y Ng, E. 1984. SPARSPAK: Waterloo Sparse Matrix Package. Users Guide for
SPARSPAK-B. Research Report CS-84-37, Department of Computer Science, University of Waterloo, Waterloo, Ontario, Canad
a.
[137] Gerald, C.F. y Wheatley, P.O. 1994. Applied Numerical Analysis. Addison-Wesley Publishing Company.

Bibliografa

903

[138] Gibbs, N.E., Poole, W.G. y Stockmeyer, P.K. 1976. An Algorithm for Reducing the Bandwidth and prole of a Sparse Matrix. SIAM J. Numer. Anal. 13, pp. 236-250.
[139] Gill, P.E. y Murray, W. 1974. Numerical Methods for Constrained Optimization. Academic
Press, Inc.
[140] Gill, P.E., Murray, W. y Wright, M.H. 1981. Practical Optimization. Academic Press, Inc.
[141] Gill, P.E., Murray, W. y Wright, M.H. 1991. Numerical Linear Algebra and Optimization.
Volume 1. Addison-Wesley Publishing Company.
[142] Gill, P.E., Murray, W., Saunders, M.A. y Wright, M.H. 1986. Maintaining LU Factors of a General Sparse Matrix. Technical Report SOL 86-8. Systems Optimization Laboratory,
Department of Operations Research, Stanford University.
[143] Gill, P.E., Murray, W., Saunders, M.A., Tomlin, J.A. y Wright, M.H. 1986. On Projected Newton Barrier Methods for Linear Programming and an Equivalence to Karmarkars Projective Method. Technical Report SOL 85-11R, revision of May 1986. Systems Optimization Laboratory, Department of Operations Research, Stanford University.
[144] Gillett, B.E. 1976. Introduction to Operations Research: A Computer Oriented Algorithmic
Approach. McGraw-Hill Book Company.
[145] Goldfarb, D. y Todd, M.J. 1989. Linear Programming. En Handbooks in Operations Research
and Management Science. Volume 1: Optimization. Nemhauser, G.L., Rinnooy Kan, A.H.G. y
Todd, M.J. eds. North-Holland Publishing Company.
[146] Goldstein, A.A. 1965. On Steepest Descent. SIAM J. Control 3, pp. 147-151.
[147] Golovina, L.I. 1974. Algebra lineal y algunas de sus aplicaciones. Editorial Mir.
[148] Golub, G.H. y Meurant, G.A. 1983. Resolution Numerique des Grands Syst`emes Lineaires.
Editions Eyrolles.
[149] Golub, G.H. y OLeary, D.P. 1989. Some History of the Conjugate Gradient and Lanczos
Algorithms: 1948-1976. SIAM Review 31, pp.50-102.
[150] Golub, G.H. y Reinsch, C. 1970. Singular Value Decomposition and Least Squares Solutions.
Numerische Mathematik 14, pp. 403-20.
[151] Golub, G.H. y Van Loan, C.F. 1983. Matrix Computations. The Johns Hopkins University
Press.
[152] Golub, G.H. y Van Loan, C.F. 1989. Matrix Computations. Second Edition. The Johns Hopkins University Press.
[153] Golub, G.H. y Van Loan, C.F. 1996. Matrix Computations. Third Edition. The Johns Hopkins
University Press.
[154] Gomory, R.E. 1960. An Algorithm for the Mixed Integer Problem. RAND Corporation paper
RM-2597.
[155] Gomory, R.E. 1963. An Algorithm for Integer Solutions to Linear Programs. en Recent Advances
in Mathematical Programming. Graves, R. y Wolfe, Ph. eds. McGraw-Hill Book Company.
[156] Gondran, M. y Minoux, M. 1979. Graphes et Algorithmes. Editions Eyrolles.
[157] Gonin, R. y Money, A.H. 1989. Nonlinear Lp Estimation. Marcel Dekker, Inc.
[158] Goossens, M., Mittelbach, F. y Samarin, A. 1994. The LATEX Companion. Addison-Wesley
Publishing Company.
[159] Goossens, M., Rahtz, S. y Mittelbach, F. 1997. The LATEX Graphics Companion. Illustrating Documents with TEX and PostScript. Addison-Wesley Publishing Company.

904

Bibliografa

[160] Grainger, J.J. y Stevenson Jr., W.D. 1994. Power Systems Analysis. McGraw-Hill Book
Company.
[161] Greenberg, H. 1971. Integer Programming. Academic Press, Inc.
[162] Grigoriadis, M.D. 1986. An Ecient Implementation of the Network Simplex Method. Mathematical Programming Study 26, pp. 83-111.
tschel, M., Lova
sz, L. y Schrijver, A. 1988. Geometric Algorithms and Combinatorial
[163] Gro
Optimization. Springer Verlag.
fele, W. y Kirchmayer, L.K. eds. 1981. Modeling of Large-Scale Energy Systems. Perga[164] Ha
mon Press.
[165] Hager, W.W. 1984. Condition Estimates. SIAM J. Sci. and Statist. Comput. 5, pp. 311-316.
[166] Hager, W.W. 1988. Applied Numerical Linear Algebra. Prentice Hall.
[167] Hall, M. 1956. An Algorithm for Distinct Representatives. Amer. Math. Monthly 63, pp. 716-717.
[168] Halmos, P.R. 1974. Finite-Dimensional Vector Spaces. Springer Verlag.
[169] Hammer, P.L., Johnson, E.L. y Korte, B.H. eds. 1979. Discrete Optimization III. NorthHolland Publishing Company.
mmerlin, G. y Hoffmann, K. H. 1991. Numerical Mathematics. Springer Verlag.
[170] Ha
[171] Hamming, R.W. 1986. Numerical Methods for Scientists and Engineers. Dover Publications, Inc.
[172] Harwell Laboratory 1987. HARWELL Subroutine Library: A Catalogue of Subroutines
(1987). Computer Science and Systems Division, AERE Harwell.
[173] Hellerman, E, y Rarick, D. 1971. Reinversion with the Preassigned Pivot Procedure. Mathematical Programming 1, pp. 195-216.
[174] Hellerman, E, y Rarick, D. 1972. The Partitioned Preassigned Pivot Procedure (P4 ). En
Sparse Matrices and their Applications. Rose, D.J. y Willoughby, R.A. eds. Plenum Press.
[175] Henrici, P. 1982. Essentials of Numerical Analysis with Pocket Calculator Demonstrations. John
Wiley and Sons.
[176] Hestenes, M. 1980. Conjugate Direction Methods in Optimization. Springer Verlag.
[177] Higham, N.J. 1996. Accuracy and Stability of Numerical Algorithms. SIAM.
[178] Hildebrand, F.B. 1987. Introduction to Numerical Analysis. Dover Publications, Inc.
[179] Hillier, F.S. y Lieberman, G.J. 1974. Introduction to Operations Research. Holden-Day Inc.
[180] Hillier, F.S. y Lieberman, G.J. 1995. Introduction to Mathematical Programming. McGrawHill, Inc.
[181] Himmelblau, D.M. ed. 1973. Decomposition of Large-Scale Problems. North-Holland Publishing
Company.
[182] Hockney, R.W. 1996. The Science of Computer Benchmarking. SIAM.
[183] Horn, R.A. y Johnson, C.R. 1985. Matrix Analysis. Cambridge University Press.
[184] Householder, A.S. 1975. The Theory of Matrices in Numerical Analysis. Dover Publications,
Inc.
[185] Hu, T.C. 1970. Integer Programming and Network Flows. Addison-Wesley Publishing Company.
[186] Ignizio, J.P. y Cavalier, T.M. 1994. Linear Programming. Prentice Hall.
, M.D. y Liu, S. 1996. Hierarchical Power Systems Control. Its Value in a Changing Industry.
[187] Ilic
Springer Verlag.

Bibliografa

905

[188] Infanger, G. 1994. Planning under Uncertainty. Solving Large-Scale Stochastic Linear Programs.
Boyd & fraser Publishing Company.
[189] Isaacson, E. y Keller, H.B. 1994. Analysis of Numerical Methods. Dover Publications, Inc.
[190] Jacobs, D. ed. 1977. The State of the Art in Numerical Analysis. Academic Press, Inc.
[191] Jennings, A. y McKeown, J.J. 1992. Matrix Computation. Second Edition. John Wiley and
Sons.
[192] Karloff, H. 1991. Linear Programming. Birkhauser.
[193] Karmarkar, N. 1984. A New Polynomial-Time Algorithm for Linear Programming. Combinatorics 4, pp. 373-395.
[194] Karush, W. 1939. Minima of Functions of Several Variables with Inequalities as Side Constraints.
M.Sc. Dissertation, Department of Mathematics, University of Chicago.
`re, A. 1974. Methodes et Mod`eles de la Recherche
[195] Kaufmann, A. y Henry-Laborde
Operationnelle. Dunod.
[196] Kennington, J.L. y Helgason, R.V. 1980. Algorithms for Network Programming. John Wiley
and Sons.
[197] Kincaid, D.R. y Hayes, L.J. eds. 1990. Iterative Methods for Large Linear Systems. Academic
Press, Inc.
[198] Klee, V. y Minty, G.J. 1972. How good is the Simplex Algorithm? En Inequalities III. Shisha,
O. ed. Academic Press, Inc.
[199] Klingman, D., Napier, A. y Stutz, J. 1974. NETGEN-A Program for Generating Largescale (Un)Capacitated Assigment, Transportation and Minimum Cost Flow Network Problems.
Management Science 20, pp. 814-821.
[200] Kolman, B. y Beck, R.E. 1995. Elementary Linear Programming with Applications. Academic
Press, Inc.
[201] Kopka, H. y Daly, P.W. 1995. A Guide to LATEX 2 . Document Preparation for Beginners and
Advanced Users. Addison Wesley Publishing Company.
[202] Kuester, J.L. y Mize, J.H. 1973. Optimization Techniques with Fortran. McGraw-Hill Book
Company.
[203] Kuhn, H.W. y Tucker, A.W. 1951. Nonlinear Programming. En Proceedings of the Second
Berkeley Symposium on Mathematical Statistics an Probability. University of California Press.
nzi, H.P. y Krelle, W. 1969. La Programmation Non Lineaire. Gauthier-Villars.
[204] Ku
[205] Lamport, L. 1994. LATEX. A Document Preparation System. Users Guide and Reference Manual.
Addison-Wesley Publishing Company.
[206] Land, A. y Powell, S. 1973. Fortran Codes for Mathematical Programming. John Wiley and
Sons.
[207] Lang, S. 1968. Analysis I. Addison-Wesley Publishing Company.
[208] Lang, S. 1969. Analysis II. Addison-Wesley Publishing Company.
[209] Lang, S. 1983. Linear Algebra. Addison-Wesley Publishing Company.
[210] Larson, R.E. 1968. State Increment Dynamic Programming. American Elsevier Publishing Company, Inc.
odor, R. 1986. Analyse Numerique Matricielle Appliquee a lArt de
[211] Lascaux, P. y The
lIngenieur. Tome 1. Masson, S.A.

906

Bibliografa

odor, R. 1987. Analyse Numerique Matricielle Appliquee a lArt de


[212] Lascaux, P. y The
lIngenieur. Tome 2. Masson, S.A.
[213] Lasdon, L.S. 1970. Optimization Theory for Large Systems. Macmillan Publishing Company
Inc.
[214] Lawler, E.L. 1976. Combinatorial Optimization: Networks and Matroids. Holt, Rinehart and
Winston.
[215] Lawson, C.L. y Hanson, R.J. 1974. Solving Least Squares Problems. Prentice Hall.
[216] Lawson, C.L. y Hanson, R.J. 1995. Solving Least Squares Problems. SIAM.
[217] Leifman, L.J. ed. 1990. Functional Analysis, Optimization, and Mathematical Economics. Oxford University Press.
[218] Lemke, C.E. 1954. The Dual Method of Solving the Linear Programming Problem. Naval Research
Logistics Quarterly 1, pp. 36-47.
[219] Lerman, S.R. 1993. Problem Solveing and Computation for Scientists and Engineers. An Introduction Using C. Prentice Hall.
[220] Levenberg, K. 1944. A Method for the Solution of Certain Problems in Least Squares. Quart.
Appl. Math. 2, pp. 164-168.
[221] Liebman, J., Lasdon, L., Schrage, L. y Waren, A. 1986. Modeling and Optimization with
GINO. The Scientic Press.
[222] Liebman, J., Lasdon, L., Schrage, L. y Waren, A. 1986. Modeling and Optimization with
GINO. The Scientic Press.
[223] Lindfield, G. y Penny, J. 1995. Numerical Methods Using Matlab. Ellis Horwood.
[224] Luenberger, D.G. 1969. Optimization by Vector Space Methods. John Wiley and Sons.
[225] Luenberger, D.G. 1984. Linear and Nonlinear Programming. Addison-Wesley Publishing Company.
[226] Luenberger, D.G. 1989. Programaci
on lineal y no lineal. Addison-Wesley Iberoamericana.
[227] Lustig, I.J., Marsten, R.E. y Shanno, D.F. 1992. On Implementing Mehrotras PredictorCorrector Interior-Point Method for Linear Programming. SIAM J. Optimization, Vol. 2, No. 3,
pp. 435-449.
[228] Mandl, C. 1979. Applied Network Optimization. Academic Press, Inc.
[229] Mangasarian, O.L. 1994. Nonlinear Programming. SIAM.
[230] Manneback, P. 1985. On Some Numerical Methods for Solving Large Sparse Linear Least Squares Problems. Ph.D. Dissertation, Facultes Iniversitaires Notre-Dame de la Paix, Namur, Belgica.
[231] Markowitz, H.M. 1957. The Elimination Form of the Inverse and its Application to Linear
Programming. Management Science 3, pp. 255-269.
[232] Marquardt, D. 1963. An Algorithm for Least Squares Estimation of Nonlinear Parameters.
SIAM J. Appl. Math. 11, pp. 431-441.
[233] Mathews, J.H. 1992. Numerical Methods for Mathematics, Science, and Engineering. Prentice
Hall.
[234] Mehrotra, S. 1992. On the Implementation of a Primal-Dual Interior Point Method. SIAM J.
Optimization, Vol. 2, No. 4, pp. 575-601.
[235] Mesirov, J.P. ed. 1991. Very Large Scale Computation in the 21st Century. SIAM.
[236] Metcalf, M. y Reid, J. 1990. Fortran 90 Explained. Oxford University Press.

Bibliografa

907

[237] Metcalf, M. y Reid, J. 1996. Fortran 90/95 Explained. Oxford University Press.
[238] McCormick, G.P. 1983. Nonlinear Programming. John Wiley and Sons.
[239] Moler, C.B., Little, J.N. y Bangert, S. 1987. PC-Matlab Users Guide. The MathWorks,
Inc.
, J.J. y Wright, S.J. 1993. Optimization Software Guide. SIAM.
[240] More
[241] Minoux, M. 1986. Mathematical Programming: Theory and Algorithms. John Wiley and Sons.
[242] Minoux, M. y Bartnik, G. 1986. Graphes, Algorithmes, Logiciels. Dunod.
[243] Murtagh, B.A. y Saunders, M.A. 1978. Large Scale Linearly Constrained Optimization. Mathematical Programming 14, pp. 41-72.
[244] Murtagh, B.A. y Saunders, M.A. 1982. A Projected Lagrangian Algorithm and its Implementation for Sparse Nonlinear Constraints. Mathematical Programming Study 16, pp. 84-117.
[245] Murtagh, B.A. y Saunders, M.A. 1987. MINOS 5.1 Users Guide. Systems Optimization
Laboratory, Department of Operations Research, Stanford University.
[246] Murty, K.G. 1983. Linear Programming. John Wiley and Sons.
[247] Murty, K.G. 1992. Network Programming. Prentice Hall.
[248] NAG 1992. C Library Manual. Numerical Algorithms Group, Mark 2, Oxford, England.
[249] NAG 1993. Fortran Library Manual. Numerical Algorithms Group, Mark 16, Oxford, England.
[250] Nakamura, S. 1996. Numerical Analysis and Graphic Visualization with Matlab. Prentice Hall
PTR.
[251] Nash, S.G. y Sofer, A. 1996. Linear and Nonlinear Programming. The McGraw-Hill Companies.
[252] Nemhauser, G.L., Rinnooy Kan, A.H.G. y Todd, M.J. eds. 1989. Handbooks in Operations
Research and Management Science. Volume 1: Optimization. North-Holland Publishing Company.
[253] Nemhauser, G.L. y Wolsey, L.A. 1988. Integer and Combinatorial Optimization. John Wiley
and Sons.
[254] Nemhauser, G.L. y Wolsey, L.A. 1989. Integer Programming. En Handbooks in Operations
Research and Management Science. Volume 1: Optimization. Nemhauser, G.L., Rinnooy Kan,
A.H.G. y Todd, M.J. eds. North-Holland Publishing Company.
[255] Nering, E.D. y Tucker, A.W. 1993. Linear Programs and Related Problems. Academic Press,
Inc.
[256] Nesterov, Y. y Nemirovskii, A. 1994. Interior-Point Polynomial Algorithms in Convex Programming. SIAM.
[257] Niederreiter, H. 1992. Random Number Generation and Quasi-Monte Carlo Methods. SIAM.
[258] Orchard-Hays, W. 1968. Advanced Linear Programming Computing Techniques. McGraw-Hill
Book Company.
[259] Ortega, J.M. 1988. Introduction to Parallel and Vector Solution of Linear Systems. Plenum
Press.
[260] Ortega, J.M. y Rheinboldt, W.C. 1970. Iterative Solution of Nonlinear Equations in Several
Variables. Academic Press, Inc.
[261] Padberg, M. 1995. Linear Programming and Extensions. Springer Verlag.
[262] Pai, M. A. 1986. Computer Techniques in Power System Analysis. McGraw-Hill Book Company.
[263] Paige, C.C. 1979. Computer Solution of Perturbation Analysis of Generalized Linear Least Squares Problems. Mathematics of Computation 33, pp. 171-184.

908

Bibliografa

[264] Paige, C.C. 1979. Fast Numerically Stable Computations for Generalized Linear Least Squares
Problems. SIAM J. Numer. Anal. 16, pp. 165-171.
[265] Pannell, D.J. 1997. Introduction to Practical Linear Programming. John Wiley and Sons.
[266] Panik, M.J. 1996. Linear Programming: Mathematics, Theory and Algorithms. Kluver Academic
Publishers.
[267] Parker, R.G. y Rardin, R.L. 1988. Discrete Optimization. Academic Press, Inc.
[268] Parter, S.V. 1961. The Use of Linear Graphs in Gaussian Elimination. SIAM Review 3, pp.
119-130.
[269] Patel, R.V. Laub, A.J. y Van Dooren, P.M. eds. 1994. Numerical Linear Algebra Techniques
for Systems and Control. IEEE Press.
[270] Pfaffenberger, R.C. y Walker, D.A. 1976. Mathematical Programming for Economics and
Business. The Iowa State University Press.
[271] Phillips, C. y Cornelius, B. 1986. Computational Numerical Methods. Ellis Horwood Limited.
[272] Phillips, D.T., Ravindran, A. y Solberg, J. 1976. Operations Research: Principles and
Practice. John Wiley and Sons.
[273] Phillips, G.M. y Taylor, P.J. 1996. Theory and Applications of Numerical Anaylis. Academic
Press, Inc.
[274] Pierre, D.A. 1986. Optimization Theory with Applications 1986. Dover Publications, Inc.
[275] Pierre, D.A. y Lowe, M.J. 1975. Mathematical Programming Via Augmented Lagrangians. An
Introduction with Computer Programs. Addison-Wesley Publishing Company.
[276] Pike, R.W. 1986. Optimization for Engineering Systems. Van Nostrand Reinhold Company.
[277] Pissanetzky, S. 1984. Sparse Matrix Technology. Academic Press, Inc.
[278] Plybon, B.F. 1992. An Introduction to Applied Numerical Analysis. PWS-Kent Publishing Company.
[279] Powell, M.J.D. ed. 1982. Nonlinear Optimization. Academic Press, Inc.
[280] Press, W.H., Flannery, B.P., Teukolsky, S.A. y Vetterling, W.T. 1986. Numerical
Recipes in Fortran. The Art of Scientic Computing. Cambridge University Press.
[281] Press, W.H., Teukolsky, S.A., Vetterling, W.T. y Flannery, B.P. 1992. Numerical
Recipes in C. The Art of Scientic Computing. Second Edition. Cambridge University Press.
[282] Press, W.H., Teukolsky, S.A., Vetterling, W.T. y Flannery, B.P. 1996. Numerical
Recipes in Fortran 90. The Art of Parallel Scientic Computing. Cambridge University Press.
[283] Reid, J.K. ed. 1971. Large Sparse Sets of Linear Equations. Academic Press, Inc.
[284] Redwine, C. 1995. Upgrading to Fortran 90. Springer Verlag.
[285] Reid, J.K. 1982. A Sparsity-Exploiting Variant of the Bartels-Golub Decomposition for Linear
Programming Bases. Mathematical Programming 24, pp. 55-69.
[286] Reklaitis, G.V., Ravindran, A. y Ragsdell, K.M. 1983. Engineering Optimization. Methods
and Applications. John Wiley and Sons.

[287] Riaza, R. y Alvarez,


M. 1996. C
alculo Innitesimal. Vol. I. Sociedad de Amigos de la Escuela
Tecnica Superior de Ingenieros Industriales de Madrid.

[288] Riaza, R. y Alvarez,


M. 1997. C
alculo Innitesimal. Vol. II. Sociedad de Amigos de la Escuela
Tecnica Superior de Ingenieros Industriales de Madrid.
[289] Rbnikov, K. 1987. Historia de las matem
aticas. Editorial Mir.

Bibliografa

909

[290] Rice, J.R. 1966. Experiments on Gram-Schmidt Orthogonalization. Mathematics of Computation


20, pp. 325-328.
[291] Rice, J,R. 1983. Matrix Computations and Mathematical Software. McGraw-Hill Book Company.
[292] Rice, J,R. 1993. Numerical Methods, Software, and Analysis. Academic Press, Inc.
[293] Roos, C. Terlaky, T. y Vial, J.-Ph. 1997. Theory and Algorithms for Linear Optimization.
An Interior Point Approach. John Wiley and Sons.
[294] Rose, D.J. y Willoughby, R.A. eds. 1972. Sparse Matrices and Their Applications. Plenum
Press.
[295] Rosen, J.B., Mangasarian, O.L. y Ritter, K. eds. 1970. Nonlinear Programming. Academic
Press, Inc.
[296] Rutishauser, H. 1990. Lectures on Numerical Mathematics. Birkhauser.
[297] Saad, Y. 1994. SPARSKIT: A Basic Tool Kit for Sparse Matrix Computations. Version 2. Computer Science Department, University of Minnesota, Minneapolis, EE. UU.
[298] Saigal, R. 1995. Linear Programming. A Modern Integrated Analysis. Kluver Academic Publishers.
[299] Salkin, H.M. 1975. Integer Programming. Addison-Wesley Publishing Company.
[300] Salkin, H.M. y Mathur, K 1989. Introduction to Integer Programming. North-Holland Publishing Company.
[301] Salkin, H.M. y Saha, J. eds. 1975. Studies in Linear Programming. North-Holland Publishing
Company.
[302] Sargent, R.W.H. y Westerberg, A.W. 1964. Speed-up in Chemical Engineering Design.
Trans. Inst. Chem. Eng. 42, pp.190-197.
[303] Saunders, M.A. 1976. A Fast Stable Implementation of the Simplex Method using Bartels-Golub
Updating. En Sparse Matrix Computations. Bunch, J.R. y Rose, D.J. eds. Academic Press, Inc.
[304] Saville, D.J. y Wood, G.R. 1991. Statistical Methods: The Geometric Approach. Springer
Verlag.
[305] Schendel, U. 1989. Sparse Matrices. Numerical Aspects with Applications to Scientists and
Engineers. Ellis Horwood Limited.
[306] Scherer, C.R. 1977. Estimating Electric Power System Marginal Costs. North-Holland Publishing Company.
[307] Schittkowski, K. 1980. Nonlinear Programming Codes. Information, Tests, Performance. Lecture Notes in Economics and Mathematical Systems, 183. Springer Verlag.
[308] Schittkowski, K. 1981. Test Examples for Nonlineal Programming Codes. Lecture Notes in
Economics and Mathematical Systems, 187. Springer Verlag.
[309] Schittkowski, K. ed. 1985. Computational Mathematical Programming. Springer Verlag.
[310] Schrage, L. 1989. Users Manual for Linear, Integer, and Quadratic Programming with LINDO.
The Scientic Press.
[311] Schrage, L. 1991. LINDO. An Optimization Modeling System. Boyd & Fraser Publishing Company.
[312] Schrijver, A. 1986. Theory of Linear and Integer Programming. John Wiley and Sons.
[313] Sedgewick, R. 1992. Algorithms in C++. Addison-Wesley Publishing Company.
[314] Senior, T.B.A. 1986. Mathematical Methods in Electrical Engineering. Cambridge University
Press.

910

Bibliografa

[315] Shapiro, J.F. 1979. Mathematical Programming. Structures and Algorithms. John Wiley and
Sons.
[316] Siddall, J.N. 1982. Optimal Engineering Design. Principles and Applications. Marcel Dekker,
Inc.
[317] Sierksma G. 1996. Linear and Integer Programming: Theory and Practice. Marcel Dekker, Inc.

[318] Simonnard, M. 1972. Programmation Lineaire. Technique du Calcul Economique.


Fondements.
Dunod.

[319] Simonnard, M. 1973. Programmation Lineaire. Technique du Calcul Economique.


Extensions.
Dunod.
[320] Smith, B.T., Boyle, J.M., Dongarra, J.J., Garbow, B.S., Ikebe, Y., Klema, V.C. y
Moler, C.B. 1976. Matrix Eigensystem Routines-EISPACK Guide. Springer Verlag.
[321] Sordet, J. 1970. La Programmation Lineaire Appliquee `
a lEntreprise. Dunod.
[322] Spedicato, E. ed. 1991. Computer Algorithms for Solving Linear Algebraic Equations. The State
of the Art. Springer Verlag, NATO Scientic Aairs.
[323] Stagg, G.W. y El-Abiad, A.H. 1968. Computer Methods in Power Systems Analysis. McGrawHill Book Company.
[324] Stevenson, W. D. 1984. Elements of Power System Analysis. McGraw-Hill Book Company.
[325] Stewart, G.W. 1973. Introduction to Matrix Computations. Academic Press, Inc.
[326] Stewart, G.W. 1996. Afternotes on Numerical Analysis. SIAM.
[327] Stoer, J. y Bulirsch, R. 1980. Introduction to Numerical Analysis. Springer Verlag.
[328] Stott, B. y Alsa
c, O. 1974. Fast Decoupled Load Flow. IEEE Trans. on Power Apparatus and
Systems PAS-93, pp. 859-869.
[329] Strang, G. 1976. Linear Algebra and its Applications. Academic Press, Inc.
[330] Sultan, A. 1993. Linear Programming. An Introduction with Applications. Academic Press, Inc.
[331] Tarjan, R. 1972. Depth-First Search and Linear Graph Algorithms. SIAM J. Computing 1, pp.
146-160.
[332] Tewarson, R.P. 1973. Sparse Matrices. Academic Press, Inc.
[333] Thomas, B.J. 1996. The Internet for Scientists and Engineers. Oxford University Press.
[334] Tinney, W.F. y Walker, J.W. 1967. Direct Solution of Sparse Network Equations by Optimally
Ordered Triangular Factorizations. Proceedings of the IEEE 55, pp.1801-1809.
[335] Tomlin, J.A. 1970. Branch-and-Bound Methods for Integer and Non-Convex Programming. En
Integer and Nonlinear Programming. Abadie, J. ed. North-Holland Publishing Company.
[336] Tomlin, J.A. 1972. Pivoting for Size and Sparsity in Linear Programming. J. Inst. Maths. Applics. 10, pp. 289-295.
[337] Trefethen, L.N. y Bau, D. 1997. Numerical Linear Algebra. SIAM.
[338] Van de Panne, C. 1976. Linear Programming and Related Techniques. North-Holland Publishing
Company.
[339] Van Loan, C.F. 1997. Introduction to Scientic Computing. A MAtrix-Vector Approach Using
Matlab. Prentice Hall.
[340] Vanderbei, R.J. 1995. LOQO: An Interior Point Code for Quadratic Programming. Princeton
University.

Bibliografa

911

[341] Vanderbei, R.J. 1996. Linear Programming. Foundations and Extensions. Kluver Academic
Publishers.
[342] Varga, R.S. 1962. Matrix Iterative Analysis. Prentice Hall.
[343] Walsh, G.R. 1975. Methods of Optimization. John Wiley and Sons.
[344] Watkins, D.S. 1991. Fundamentals of Matrix Computations. John Wiley and Sons.
[345] White, R.E. 1985. An Introduction to Finite Element Method with Applications to Nonlinear
Problems. John Wiley and Sons.
[346] Whitehouse, G.E. y Wechsler, B. 1976. Applied Operations Research: A Survey. John Wiley
and Sons.
[347] Wilkinson, J.H. 1965. The Algebraic Eigenvalue Problem. Oxford University Press.
[348] Wilkinson, J.H. 1994. Rounding Errors in Algebraic Processes. Dover Publications Inc.
[349] Winston, W.L. 1994. Operations Research. Applications and Algorithms. Duxbury Press.
[350] Wolfe, M.A. 1978. Numerical Methods for Unconstrained Optimization. An Introduction. Van
Nostrand Reinhold Company.
[351] Wolfe, P. 1961. A Duality Theorem for Non-Linear Programming. Quart. Appl. Math. 19, N 3.
[352] Wolfe, P. 1967. Methods of Nonlinear Programming. En Nonlinear Programming. Abadie J. ed.
North-Holland Publishing Company.
[353] Wood, A.J. y Wollenberg, B.F. 1984. Power Generation Operation and Control. John Wiley
and Sons.
[354] Wright, S.J. 1997. Primal-Dual Interior Point Methods. SIAM.
[355] Young, D.M. y Gregory, R.T. 1988. A Survey of Numerical Mathematics. Vol. I y II. Dover
Publications, Inc.

Indice de materias
eliminacion directa, para resolucion de MCI,
132
escalado afn, de puntos interiores para
programacion lineal,
primal, 578
dual, 591
primal-dual, 602
Cholesky, para la factorizacion GT G de una
matriz simetrica denida positiva,
por las, 44
por columnas, 46
Cholesky, con pivotacion, para la factorizaci
on
GT G de una matriz simetrica
semidenida positiva, 49
Cholesky, sin pivotacion, para la factorizacion
GT G de una matriz simetrica
semidenida positiva, 48
Crout, para la factorizaci
on LU1 de una
matriz, 30
con pivotacion parcial, 33
Crout, para la factorizaci
on L1 U de una
matriz, 36
Cuthill-McKee, para reduccion del ancho de
banda de una matriz dispersa simetrica,
238
seleccion nudo inicial, 241
Cuthill-McKee inverso, para reducci
on de la
envolvente de una matriz dispersa
simetrica, 242
Dantzig y Wolfe, descomposicion para
programacion lineal, 538
dual del simplex, 481
para variables acotadas, 483
Doolittle, para la factorizaci
on L1 U de una
matriz, 37
factorizacion LDLT , de una matriz simetrica,
41
Gauss-Newton, para solucion de problemas no
lineales de mnimos cuadrados, 346
Gauss-Seidel, para solucion de Ax = b

, base de numeracion de un ordenador, 700

A
Aasen, metodo de 5358
n
umero de operaciones, 54
Abierto, conjunto o subconjunto, 691
Accesibilidad, de un nudo en un grafo, en un
digrafo, 230, 248
matriz de, en un digrafo, 248
Adherencia, 691
de un conjunto, 691
punto de, 691
Adyacente,
conjunto,
de un digrafo, 248
de un grafo, 229
nudo,
de un digrafo, 248
de un grafo, 229
Algebra, 681
Algoritmo, 3
Algoritmo(s), ver tambien Metodo(s)
Aasen, para la factorizacion LT LT de una
matriz simetrica indenida sin
pivotacion, 55
con pivotacion, 56
actualizacion del vector s() en el metodo
simplex especializado para optimizacion
de ujos en redes, 520
arbol maximal, obtencion en un digrafo, 507
branch and bound, enumerativos, o de
ramicacion y acotamiento, 649
Broyden, cuasi Newton para solucion de
sistemas de ecuaciones no lineales, 323
Bunch y Kaufman, para la factorizaci
on
U BU T de una matriz simetrica
indenida con pivotaci
on, 63
eliminacion de Gauss con pivotacion parcial,
para solucion de Ax = b, 16

913

914

Indice de materias

iterativamente, 150
George y Heath, para la ortogonalizaci
on de
una matriz dispersa y resolucion de
mnimos cuadrados, 272
Golub-Kahan, etapa k del de Golub-Reinsch
para la descomposicion numerica en
valores singulares de una matriz
cualquiera, 121
Golub-Reinsch, para la descomposicion
numerica en valores singulares de una
matriz cualquiera, 122
Gradientes conjugados, para soluci
on de
ecuaciones normales, AT (Ax b), 196
Gradientes conjugados, para soluci
on de
Ax = b, 188
Gradientes conjugados con
precondicionamiento, para soluci
on de
Ax = b, 191
grado mnimo, para reduccion del n
umero de
elementos de relleno en una matriz
dispersa, 235
Gram-Schmidt clasico, para la
ortonormalizacion de los vectores
columna de una matriz, 84
Gram-Schmidt modicado, para la
ortonormalizacion de los vectores
columna de una matriz, 86
Hall, para la b
usqueda de un transversal
completo de una matriz dispersa,
251254
inverso de Cuthill-McKee, para reducir la
envolvente de una matriz dispersa
simetrica, 242
Jacobi, para solucion de Ax = b
iterativamente, 147
Jacobi, variante de Newton-Raphson para
sistemas de ecuaciones no lineales, 316
Karmarkar, escalado proyectivo, para
programacion lineal, 567
Levenberg-Marquardt, para soluci
on de
problemas no lineales de mnimos
cuadrados, 353
Maxima pendiente, para soluci
on de Ax = b,
176
multiplicadores simplex, obtencion en
programacion lineal para ujos en redes,
514
Newton-Raphson, para sistemas de ecuaciones
no lineales, 307
Newton-Raphson para sistemas de ecuaciones
no lineales con el criterio de salvaguarda

de Armijo, 333
Paige, para la resolucion del problema
generalizado de mnimos cuadrados, 130
planos cortantes de Gomory, 643
primaldual del simplex, 489
programas enteros, algoritmo general basado
en relajaciones sucesivas lineales, 640
puntos interiores, para soluci
on de programas
lineales,
primal de escalado afn, 578
dual de escalado afn, 591
primal-dual, 602
relajacion SOR, para soluci
on de Ax = b
iterativamente, 165
Sargent y Westerberg, para triangularizar por
bloques una matriz dispersa no
simetrica, 256
simplex revisado, para programaci
on lineal, 420
dual del simplex, 481
en dos fases, 432
forma producto de la inversa de la base, 446
para variables acotadas, 454
primaldual del simplex, 489
solucion de minxn Ax b2 mediante
transformaciones ortogonales de
Householder, 95
solucion de minxn Ax b2 mediante
transformaciones ortogonales de Givens,
108
solucion de minxn Ax b2 mediante
transformaciones ortogonales rapidas de
Givens, 113
solucion de Ax = b siendo A dispersa, 221
solucion de problemas de mnimos cuadrados
con matrices dispersas mediante
ecuaciones normales, 269
ramicacion y acotamiento o branch and
bound, 649
Tarjan, para triangularizar por bloques una
matriz dispersa no simetrica, 260
triangularizacion de una base, en programacion
lineal para ujos en redes mediante el
metodo simplex, 510
Almacenamiento, en ordenador de matrices
dispersas, 202208
por coordenadas, 202
por las/columnas, 203
por listas encadenadas, 207
por perl o envolvente, 204
Amplitud de paso, 171
en el metodo simplex, 416

Indice de materias
Analisis post-optimizacion, en programacion
lineal, 492
Analisis de sensibilidad, en programaci
on lineal,
492493
Ancho de banda de una matriz, 205
simetrica, 206
Aplicacion, 672
biyectiva, 672
dominio de denici
on, origen, 672
dominio de valores, 672
imagen, 672
inyectiva, 672
lineal, 678
n
ucleo, 679
permutaciones, 672
suprayectiva, 672
traspuesta, 679

Arbol, de un digrafo, 500


maximal, 500
algoritmo para obtencion en digrafo, 507

Arbol,
de un grafo, 230
ascendiente/descendiente, relaciones, 230
enraizado, 230
cociente, 230
maximal, 230
nudo raz, 230
numeracion monotona, 230
particion, 230
Arbol de enumeracion o enumerativo, en
programacion entera, 646
poda, 646
criterios de, 647
ver tambien algoritmos enumerativos, de
ramicacion y acotamiento o branch and
bound
Arco(s) de un grafo, de un digrafo, 227, 248, 500
nudo origen, 227, 248, 500
nudo destino, 227, 248, 500
Aristas de un grafo, ver Arcos de un grafo
Aritmetica en ordenador, 699
Armijo, regla de, 331
Ascendiente/descendiente, relaciones en un arbol,
230
Asignacion de precio, price out, en programacion
lineal, 415, 420, 454
Asignacion de traco, problema, 375
Autovalor, 682

B
B, base o matriz basica de un programa lineal,
392

915

Banach, espacio vectorial de, 677


Barrera, funcion, para programaci
on lineal, 585
Bartels y Golub, factorizacion LU de la base en
simplex, 447
Base, de un espacio vectorial, 674
canonica, 674
Base, de un programa lineal, 392
Basica, solucion de un programa lineal, 392
factible, 395
factible degenerada, 395
BBMI, programa, 450, 660
listado, 791
Bilineal, forma, 678
Bit, 699
Biyectiva, aplicacion, 672
Bland, regla para el metodo simplex, 429
Bola,
abierta, 691
cerrada, 691
BOUNDS, 771
Branch and bound, algoritmo enumerativo, o de
ramicacion y acotamiento, 649
Broyden, metodo para solucion de sistemas de
ecuaciones no lineales, 321
convergencia, 326
formula de, 321
implementacion practica, 330
BTRAN, operacion del simplex, 446
Bunch y Kaufman, metodo de, 6066
n
umero de operaciones, 63
Bunch y Parlett, metodo de, 59
n
umero de operaciones, 60
B
usqueda, en amplitud o anchura, en
programacion entera, 653
Byte, 699

C
C, cuerpo de los n
umeros complejos, 671, 672
Cabeza, de un arco, ver Nudo Destino
Cadena, en un grafo dirigido, 500
euleriana, 500
hamiltoniana, 500
Camino,
de un digrafo, 248, 500
creciente, 251
euleriano, 500
hamiltoniano, 500
de un grafo, 229
longitud, 229
nudo de partida, 229
nudo de llegada, 229

916

Indice de materias

Canonica,
base de un espacio vectorial, 674
forma de las condiciones de un programa
lineal, 392
Cara, de un politopo, 627
apropiada, 627
Cauchy, metodo de, 174
ver tambien metodo de maxima pendiente
sucesion de, 677
Cauchy-Schwarz, desigualdad de 678
CCNET, programa, 521
listado, 819
Chan, metodo de, 116
n
umero de operaciones, 127
Cholesky, factorizacion, 4149
con pivotacion para matrices simetricas
semidenidas positivas, 49
existencia y unicidad, 42
n
umero de operaciones, 47
CHUZR, operacion del simplex, 446
Ciclado, en programacion lineal, 429
ver tambien reglas lexicograca y de Bland
Ciclo,
en un digrafo, 248, 500
en un grafo, 229
euleriano, 500
hamiltoniamo 500
Circuito, de un grafo dirigido, 500
Coecientes de coste, de programa lineal, 366
Cola, de un arco, ver Nudo Origen
COLUMNS, 768
Combinaciones convexas, 383
Combinacion lineal, de vectores, 674
Compacto, subconjunto o conjunto, 691
Complementariedad de holguras, teorema, en
programacion lineal, 473
condicion o condiciones, 475
Complemento, de un subconjunto, 672
Completo, espacio vectorial, 677
Componentes conexos, 230
fuertemente conexos, en un digrafo, 249
Condicion,
de complementariedad de holguras, en
programacion lineal, 475
de Lipschitz, 693
n
umero de, de una matriz, 69
Condicionamiento,
de un problema, 66
de un sistema de ecuaciones lineales, 66
Condiciones,
de complementariedad de holguras, 475

de enlace, en descomposicion de
Dantzig-Wolfe, 528
de Karush-Kuhn-Tucker, 476
de Kuhn-Tucker, 476
de un programa lineal, 366
necesarias y sucientes de primer y segundo
orden de un mnimo, 695
Conexo,
digrafo, 249
grafo, 230
componentes conexos, 230
Conjunto, 671
abierto, 691
accesible, de un grafo, 230
adyacente
de un digrafo, 248
de un grafo, 229
cerrado, 691
compacto, 691
complemento, de un subconjunto, 672
convexo, 383
punto extremo, 384
elementos de, 671
interior de, 691
numerable, 672
separador, de un grafo, 230
vaco, 671
Cono, 384
convexo, 384
Continuidad, 693
de Lipschitz, 693
Convergencia, de una sucesion en espacio
vectorial normado, 677
Convergencia, orden, 281
cuadratica, 281
lineal, 281
superlineal, 281
Convergencia, tasa o relacion, 281
Convexo,
conjunto, 383
cono, 384
Coordenadas, forma de almacenar matrices
dispersas en un ordenador, 202
Corte de materiales, problema, 546
Corte fraccionario de Gomory, 641
Coste reducido, en programacion lineal, 412
Cota
inferior maxima, o nmo, 672
superior mnima, o supremo, 672
COTA INICIAL F.O., 772
Cramer, formulas, 22

Indice de materias
Criterio o regla
de Armijo, 331
de Markowitz, 261
Crout, metodo de, 2936
version LU1 , 29
con pivotacion, 32
n
umero de operaciones, 34
version L1 U , 34
y su relacion con la eliminacion de Gauss, 31
Cuadratica, forma, 170, 687
Cuasi Newton, metodos para resolver sistemas de
ecuaciones no lineales, 320331
Broyden, 320331
Cuthill-McKee,
algoritmo para la reduccion del ancho de
banda de una matriz dispersa simetrica,
238243
seleccion nudo inicial, 241
inverso, algoritmo para la reducci
on de la
envolvente de una matriz dispersa
simetrica, 242243

D
Dantzig-Wolfe, descomposicion de, 527545
Denida positiva,
forma cuadratica, 687
matriz, 689
Degeneracion, en programacion lineal, 429
Dependencia lineal, vectores de espacio vectorial,
674
Depth, profundidad, estructura de datos para
programacion lineal para ujos en redes,
512
Descomposicion, ver tambien Factorizacion,
de Benders, 633
de Dantzig-Wolfe, 527545
problema maestro, 532
problemas con estructura en escalera, 545
en valores singulares, 75
numerica, 115
Desigualdad,
de Cauchy-Schwarz, 678
dominante, 627
valida, 627
maximal, 627
Desigualdades, generacion de, en programacion
entera, 627632
desigualdades disyuntivas, 630
desigualdades superaditivas, 631
redondeo entero, 627
Destino, nudo destino de un arco, 227, 248, 500

917

Diagonal dominante, matriz de, 156, 691


Diametro, de un grafo, 229
Dicotoma, problema, 617
Dieta alimenticia, problema, 368
Diferencias nitas, metodo de Newton-Raphson,
para ecuaciones no lineales de una variable, 295
para sistemas de ecuaciones no lineales, 313
Dgitos signicativos, n
umero, de una maquina,
705
Digrafo, ver tambien Grafo dirigido, 227, 248, 500
acclico, 500
conexo, 249, 500
de eliminacion, 202
fuertemente conexo, 249
componente, 249
Dimension, de espacio vectorial, 674
Direccion,
de descenso, en metodos iterativos para
solucion de Ax = b, 170
de maxima pendiente, 171
direcciones conjugadas, 177
relajacion en una variable, 171
relajacion SOR, 173
de un politopo, 397
extrema, 397, 531
Direcciones conjugadas, 178
Dispersas, matrices, 202
Distancia,
en espacio vectorial normado, 677
entre dos nudos de un digrafo, 248
entre dos nudos de un grafo, 229
Division, de la region factible de un programa
entero, 645
Dominio
de denicion, de una aplicaci
on, 672
de valores, de una aplicacion, 672
Doolittle, metodo de, 3639
n
umero de operaciones, 36
Dual,
combinaciones posibles primal-dual, 471
del simplex, algoritmo, 481
espacio vectorial, 679
programa, 468
de uno lineal en forma estandar, 468
Dualidad, en programaci
on lineal, 465493
debil, 469
interpretacion economica, 476

E
Ecuacion caracterstica, de una matriz, 685
Ecuaciones normales, 79, 267

918

Indice de materias

condicionamiento, 81
y dispersidad, 81
y mnimos cuadrados lineales, 7981
con matrices dispersas, 267
EISPACK, 138
Elemento pivote en eliminacion de Gauss, 9
ver tambien Pivote
Elementos de relleno, ll-in, 219
Eliminacion,
digrafo de, 250
e interpretacion grafo-teorica de la
eliminacion de Gauss en matrices
dispersas de estructura no simetrica, 250
grafo de, 231
e interpretacion grafo-teorica de la
eliminacion de Gauss en matrices
dispersas de estructura simetrica, 231
Eliminacion directa, metodo para resolucion de
MCI, 132
Eliminacion de Gauss, 723
en matrices dispersas, 226261
de estructura simetrica, 226246
de estructura no simetrica, 246261
y teora de grafos, 231, 250
matriz de transformacion, 10
multiplicadores, 9
n
umero de operaciones, 2023
pivotacion, 1420
parcial, 15
total, 15
y factorizacion LU , 24
Emision de deuda, problema, 369
Endomorsmo, 678
Entorno, de un punto, 691
Enumerativo, branch and bound, algoritmo de
ramicacion y acotamiento, 649
Envoltura convexa, 391, 625
Envolvente de una matriz, 205
simetrica, 206
Epsilon de una maquina, precision, 704
Errores numericos,
de cancelacion, 267, 707
de la representacion de un n
umero en
ordenador, 703
absoluto, 703
relativo, 703
de redondeo, 703
Escalar(es), 673
Escalado afn, para programaci
on lineal, 571
Escalado proyectivo de Karmarkar, para
programacion lineal, 561

Espacio vectorial, 673


base, 674
dimension, 674
dual, 679
metrico, 677
normado, 675
completo, 677
de Banach, 677
de Hilbert, 678
eucldeo, 678
prehilbertiano, 678
subespacio, 674
Espectral, norma de una matriz, 682
Espectro de una matriz, 152, 685
Esquema iterativo,
de descenso para solucion de Ax = b, 170
direccion, 170
factor de avance o amplitud de paso, 171
de Gauss-Seidel,
para mnimos cuadrados, 195
para sistemas de ecuaciones no lineales, 318
para solucion de Ax = b, 150
de Jacobi,
para mnimos cuadrados, 194
para sistemas de ecuaciones no lineales, 316
para solucion de Ax = b, 146
de relajacion SOR,
para mnimos cuadrados, 195
para sistemas de ecuaciones no lineales, 319
para solucion de Ax = b, 164
de Richardson, 144
de SGS (Symmetric Gauss-Seidel), para
solucion de Ax = b, 169
de SSOR, para soluci
on de Ax = b, 169
Estimacion del estado, de sistemas electricos, 336
Estimador,
de mnimos cuadrados, 341
de maxima verosimilitud, 341
de norma l1 , 376
Estructuras de datos de programacion lineal para
ujos en redes, 512
Estructura de niveles,
de un digrafo, 250
de un grafo general, 230
Estudio de cargas, 279
Eucldeo, espacio vectorial, 678
Excentricidad, de un nudo en un grafo, 229

F
Faceta, de un politopo, 627
Factorizacion

Indice de materias
de Cholesky para matrices simetricas denidas
positivas, 4147
de Cholesky con pivotacion para matrices
simetricas semidenidas positivas, 49
LBLT , matrices simetricas indenidas, 5866
Bunch y Kaufman, 60
Bunch y Parlett, 59
LDLT , matrices simetricas, 4041
LT LT , matrices simetricas indenidas, 5058
Aasen, 5358
Parlett y Reid, 50
LU , 2439
condiciones de existencia, 26
de la base en simplex, 447
metodos directos para su obtencion, 2939
unicidad, 28
y eliminacion de Gauss, 31
LU1 , 29
metodo de Crout, 29
L1 U , 34
metodo de Crout, 34
metodo de Doolittle, 3639
matrices simetricas, 3966
denidas positivas, Cholesky, 4147
indenidas, 50
LDLT , 40
semidenidas positivas, 47
QR, 88115
por transformaciones ortogonales de
Householder, 90105
por transformaciones ortogonales de Givens,
105110
por transformaciones ortogonales rapidas de
Givens, 110115
Familia libre, en espacio vectorial, 674
Farkas, lema, 471
Fase I y II, del metodo simplex, 432
Fill-in, 219
ver tambien Elementos de relleno
Filas/columnas, forma de almacenar matrices
dispersas en un ordenador, 203
Flujo de cargas, ver estudios de cargas
Flujos en redes, problemas lineales de, 501
Forma,
bilineal, 678
cuadratica, 170, 687
rango, 687
signatura, 687
hermtica, 678
lineal, 678
sesquilineal, 678

919

Forma simetrica de la dualidad, 473


Forma canonica, de las condiciones de un
programa lineal, 392
Forma estandar, de un programa lineal, 367
Formato,
entero, 699
coma otante, o punto otante, 699
Formula de Broyden, 321
Formula de Sherman-Morrison-Woodbury, 330
Formulas de Cramer, 22
FRECUENCIA REINVERSION, 772
Frentes, metodo, matrices dispersas, 263
Frontera, de un conjunto, 691
FTRAN, operacion del simplex, 446
Fuertemente conexo, digrafo, 249
componente, 249
Funcion, 672
barrera logartmica, metodos para
programacion lineal, 586595
continua, 693
matriz Hessiana de, 694
matriz Jacobiana de, 694
no decreciente, 631
objetivo, de un programa lineal, 366
superaditiva, 631
vector gradiente de, 694

G
Gauss, Carl Friedrich, 7
Gauss-Jordan, metodo de, 23
matriz de transformacion, 23
n
umero de operaciones, 23
Gauss-Newton, metodo de, 345352
convergencia, 350
Gauss-Seidel, metodo iterativo,
para mnimos cuadrados, 195
para solucion de Ax = b, 149163
esquema iterativo, 150
matriz, 150
relacion de recurrencia, 150
variante de Newton-Raphson para soluci
on de
sistemas de ecuaciones no lineales, 318
Generacion de desigualdades, en programaci
on
entera, 627632
desigualdades disyuntivas, 630
desigualdades superaditivas, 631
redondeo entero, 627
George y Heath, metodo de transformaciones
ortogonales en matrices dispersas,
269272
Gerschgorin, teorema, 691

920

Indice de materias

Gestion de un servicio hospitalario, problema, 615


GT G, 41
Gilmore y Gomory, y el problema del corte de
materiales, 546
Givens, matriz de, 105
Givens, transformaciones de, 105
y factorizacion QR, 105110
n
umero de operaciones, 109
y resolucion numerica de mnimos cuadrados
lineales, 105110
n
umero de operaciones, 109
y su utilizacion con matrices dispersas, 109
transformaciones rapidas de, 110115
resolucion numerica de mnimos cuadrados
lineales, 110115
n
umero de operaciones, 112
Golub-Kahan, metodo de, 121
Golub-Reinsch, metodo de, 115132
n
umero de operaciones, 127
Gomory,
algoritmo de los planos cortantes, 643
corte fraccionario, 641
Gradientes conjugados, metodo iterativo para
solucion de Ax = b, 179192
con precondicionamiento, 190192
convergencia, 183
implementacion practica, 188
relacion de recurrencia, 180
y mnimos cuadrados, 196
Grado, de un nudo de un grafo, 229, 500
de entrada de un nudo de un digrafo, 248
de salida de un nudo de un digrafo, 248
Grado mnimo, algoritmo para la reducci
on del
n
umero de elementos de relleno en una
matriz dispersa, 234
Grafo, 227, 248, 500
arbol, 230, 500
cociente, 230
enraizado, 230
maximal, 231
particion, 230
asociado a una matriz de estructura simetrica,
227
componentes conexos, 230
conexo, 230
conjunto accesible, 230
conjunto separador, 230
de eliminacion, 231, 250
diametro, 229
dirigido, 227, 248, 500
estructura de niveles, 230

inconexo, 230
numerado, 227, 248
particion, 230
separador de un grafo, 230
mnimo, 230
teora de y eliminacion de Gauss, 227, 248
Gram-Schmidt, metodo para la ortonormalizaci
on
de los vectores columna de una matriz,
8388
clasico, 84
modicado, 86
n
umero de operaciones, 88
y solucion del problema lineal de mnimos
cuadrados, 87

H
h, parametro para el calculo de derivadas
mediante diferencias nitas, 313
Hall,
algoritmo de, 251
propiedad fuerte de, 273
Hanson y Lawson, metodo de, 117
Harwell Subroutine Library, 225, 262
Hebra, depth, estructura de datos para
programacion lineal para ujos en redes,
512
Hermtica, forma, 678
Hessemberg, matriz, 54
Hessiana, matriz, de una funcion, 694
Hijo, nudo, 230, 645
Hilbert, espacio vectorial, 678
matriz, 882
Hiperplano, 389
separador, 471, 697
teorema de existencia, 696
soporte, 391, 697
teorema de existencia, 697
vector caracterstico, 389
Holder, normas p, 675
Homomorsmo, 678
Householder, matriz, 90
Householder, transformaciones, 90
factorizacion QR, 90105
n
umero de operaciones, 97
resolucion numerica de mnimos cuadrados
lineales, 90105
n
umero de operaciones, 97

I
Imagen,
de una aplicacion, 672

Indice de materias
de una matriz, 681
subespacio, 679
Incidencia nudo-arco, matriz de, 500
Independencia lineal, vectores en espacio
vectorial, 674
Inmo, o cota inferior maxima, 672
INT, 768
Interior, de un conjunto, 691
punto, 691
Interpretacion geometrica
de la factibilidad y de la b
usqueda de optimo
de un programa lineal, 379388
de la factibilidad de un programa lineal con
condiciones de desigualdad, 387
de la factibilidad de un programa lineal con
condiciones de igualdad, 385
en el subespacio de bienes, 383
sistemas lineales de ecuaciones, 7
en 2 , 7
en n , 7
en Im(A), 8
Interpretacion grafo-teorica de la eliminacion de
Gauss de matrices dispersas,
simetricas, 231
no simetricas, 250
Interseccion, de conjuntos, 671
INVERT, operacion del simplex, 447
Inyectiva, aplicacion, 672
Isometrico, operador, 679

L, lmite underow de un ordenador, 700


Lagrangiana, relajaci
on, 632
Lagrange,
multiplicadores, 415, 476
LAPACK, 138
LBLT , 58
LDLT , 40
Lexicograca, regla para el metodo simplex, 429
Levenberg-Marquardt, metodo de, 352357
Libre, familia, en espacio vectorial, 674
LIFO, regla en algoritmos branch and bound, 652
Lmite, de una sucesion, 677
LIMITE ITERACIONES, 772
Lineal, forma, 678
Linesearch, 171
LINPACK, 138
Lipschitz,
condicion de, 693
funcion continua, 693
Listas encadenadas, forma de almacenar matrices
dispersas en un ordenador, 207
Llegada,
de un arco de un digrafo, 248
de un arco de un grafo, 229
Localizacion de almacenes, problema, 618
Longitud, de un camino de un grafo, 229
LT LT , 50
LU , 24
LU1 , 29
L1 U , 34

J
Jacobi, metodo iterativo
para mnimos cuadrados, 194
para sistemas de ecuaciones no lineales, 316
para solucion de Ax = b, 145149
esquema iterativo matricial, 146
matriz, 146
relacion de recurrencia, 146
variante de Newton-Raphson para soluci
on de
sistemas de ecuaciones no lineales, 316
Jacobiana, matriz, de una funci
on vectorial, 694

K
Karmarkar, metodo de escalado proyectivo para
programacion lineal, 561
Karush-Kuhn-Tucker, condiciones en
programacion lineal, 476
Kuhn-Tucker, condiciones en programaci
on lineal,
476

921

M
M, gran, metodo para llegar a solucion basica
factible inicial en simplex, 441
MA17, rutina del paquete de software Harwell
Subroutine Library, 225
MA28, rutina del paquete de software Harwell
Subroutine Library, 225
MA32, rutina del paquete de software Harwell
Subroutine Library, 225
MA37, rutina del paquete de software Harwell
Subroutine Library, 225
Maestro, problema, en descomposicion de
Dantzig-Wolfe, 532
Markowitz, criterio, 261
Matriz, 679
ancho de banda, 205
matriz simetrica, 206
aumentada, 9
B, o basica de un programa lineal, 392
basica, de un programa lineal, 392

922

Indice de materias

birreducible, 247
congruente ortogonal, 686
denida negativa, 691
denida positiva, 41, 689
de coecientes de un sistemas de ecuaciones
lineales, 4
de covarianzas, 341
de curvatura, 345
de diagonal dominante, 156, 691
de Gauss, 10
de Givens, 105
de Hessemberg, 54
de Hilbert, 882
de Householder, 90
de incidencia nudo-arco de un digrafo, 500
de Jacobi, 146
de permutacion, 684
de proyeccion, 684
de proyeccion ortogonal, 684
de transformacion de Gauss, 10
de transformacion de Gauss-Jordan, 23
de Vandermonde, 74
dispersa, 144, 202
almacenamiento en ordenador, 202208
por coordenadas, 202
por las/columnas, 203
por listas encadenadas, 207
por perl o envolvente, 204
operaciones algebraicas, 208219
multiplicacion AB, 215
multiplicacion AT A, 217
multiplicacion por vector, 210
suma, 211
numerica, 215
simbolica, 211
paquetes software,
Harwell Surroutine Library, 225, 262 268
NAG, 225, 268
SMMS, 225, 268
SPARSKIT, 274
SPARSPAK, 225, 263, 268
YSMP, 225, 263, 268
ecuacion caracterstica, 685
en banda, 204
ancho de banda, 205
matriz simetrica, 206
envolvente de, 205
matriz simetrica, 206
espectro, 152, 685
eta, en metodo simplex, 445
Hessiana, de una funcion, 694

imagen, 681
indenida, 691
inversa generalizada Moore-Penrose, 77
Jacobiana, de una funci
on vectorial, 694
N , o no basica de un programa lineal, 392
no basica de un programa lineal, 392
n
ucleo, 681
n
umero de condicion, 69
matriz invertible, 69
matriz cualquiera, 69
ortogonal, 683
pseudoinversa, 69, 687
radio espectral, 152, 685
rango, 681
completo, 681
reducible, 247
regular, 681
semejante a otra, 686
semidenida negativa, 689
semidenida positiva, 41, 689
simbolicamente singular, 251
simetrica, 683
ancho de banda, 206
envolvente, 206
singular, 681
totalmente unimodular, 503
triangular inferior unitaria, 10
Maxima pendiente, metodo de 174
MAXIMIZAR, 772
MCDQ, mnimos cuadrados con restricciones
cuadraticas de desigualdad, 131
MCI, mnimos cuadrados con restricciones
lineales de igualdad, 131
resolucion numerica, 132138
MCLD, mnimos cuadrados con restricciones
lineales de desigualdad, 131
Menores, n
umeros de una matriz, 687
Metodo(s), ver tambien Algoritmo
Aasen, 5358
Broyden, para solucion de sistemas de
ecuaciones no lineales, 321
convergencia, 326
implementacion practica, 330
Bunch y Kaufman, 60
Bunch y Parlett, 59
Crout, 2936
version LU1 , 2934
con pivotacion parcial, 32
version L1 U , 3436
directos, para solucion de sistemas lineales de
ecuaciones, por medio de factorizacion,

Indice de materias
24
Aasen, 5358
basados en transformaciones ortogonales,
Givens, 105110
Householder, 90105
rapidas de Givens, 110115
Bunch y Kaufman, 60
Bunch y Parlett, 59
Crout, 2936
Doolittle, 3639
eliminacion de Gauss, 723
Gauss-Jordan, 23
Gram-Schmidt, 8388
Diseccion,
anidada, 244
en un sentido, 245
Doolittle, version L1 U , 3639
eliminacion de Gauss, 723
con pivotacion parcial, 1420
escalado afn para programaci
on lineal, 571
escalado proyectivo de Karmarkar para
programacion lineal, 561
falsa posicion, regula falsi, para solucion de
sistemas de ecuaciones en una variable,
303
frentes, 263
funcion barrera logartmica, para programacion
lineal, 586595
Gauss-Jordan, 23
Gauss-Newton, metodo de, 345352
convergencia, 350
George y Heath, 269272
Golub-Kahan, 121
Golub-Reinsch, 115132
Gradientes conjugados, 179192
con precondicionamiento, 190192
implementacion practica, 188
y mnimos cuadrados, 196
Gram-Schmidt, 8388
clasico, 84
modicado, 86
gran M, para soluci
on basica factible inicial en
simplex, 441
iterativos,
de descenso para solucion de Ax = b, 170
direccion, 170
factor de avance o amplitud de paso, 170
Gauss-Seidel,
en mnimos cuadrados, 195
en solucion de Ax = b, 149163
esquema iterativo, 150

923

matriz, 150
relacion de recurrencia, 150
variante de Newton-Raphson para soluci
on
de sistemas de ecuaciones no lineales,
318
Jacobi,
en mnimos cuadrados, 194
en sistemas de ecuaciones no lineales, 316
en solucion de Ax = b, 145149
esquema iterativo matricial, 146
matriz, 146
relacion de recurrencia, 146
variante de Newton-Raphson para soluci
on
de sistemas de ecuaciones no lineales,
316
Jacobi y Gauss-Seidel, convergencia, 152163
matriz de diagonal dominante, 156
matriz generales, 152
matriz simetrica denida positiva, 159
Relajacion, SOR,
para mnimos cuadrados, 195
para sistemas de ecuaciones no lineales,
319
para solucion de Ax = b, 163168
esquema iterativo matricial, 164
matriz, 164
relacion de recurrencia, 164
variante de Newton-Raphson para soluci
on
de sistemas de ecuaciones no lineales,
319
Relajacion, SSOR,
para solucion de Ax = b, 168
esquema iterativo matricial, 169
relacion de recurrencia, 169
SGS (Symmetric Gauss-Seidel), 169
esquema iterativo matricial, 169
Richardson, 144
solucion de sistemas de ecuaciones lineales,
esquema iterativo tipo, 144
de minimizacion, 170
direcciones conjugadas, 177
gradientes conjugados, 179192
con precondicionamiento, 190192
direccion de descenso, 170
maxima pendiente, 173
relajacion univariante, 171
relajacion SOR, 173
iterativos estacionarios, 144
iterativos y mnimos cuadrados, 194
Gauss-Seidel, 195
Jacobi, 194

924

Indice de materias

Relajacion SOR, 195


Gradientes conjugados, 196
multifrentes, 266
Newton, ver Newton-Raphson
Newton-Raphson, para solucion de ecuaciones
no lineales en una variable, 286300
convergencia, 291
relacion de recurrencia, 289
variantes, 294300
de la secante, 300
diferencias nitas, 295
Newton modicado, 299
regula falsi, 303
y mecanismo de salvaguarda, 294
Newton-Raphson, para solucion de sistemas de
ecuaciones no lineales, 306320
convergencia, 310
relacion de recurrencia, 306
variantes, 313320
diferencias nitas, 313
Gauss-Seidel, 318
Jacobi, 316
Newton modicado, 316
relajacion SOR, 318
Parlett y Reid, 50
primaldual, en programaci
on lineal, 487
punto interior, metodos en programacion
lineal, 557
Richardson, 144
simplex, 411
factorizacion LU de la base, B, 447
fase I y II, 441
forma de tableau, 441
forma producto de la inversa de la base, 445
para problemas de ujos en redes, 505
para variables acotadas, 450
solucion basica factible inicial, 429
variables articiales, 431
secante, para solucion de sistemas de
ecuaciones no lineales en una variable,
300
Metrico, espacio vectorial, 677
Minimizacion, metodos iterativos para solucion de
sistemas de ecuaciones lineales, 170194
direcciones conjugadas, 177
gradientes conjugados, 179192
con precondicionamiento, 190192
direccion de descenso, 170
maxima pendiente, 171
relajacion univariante, 171
relajacion SOR, 173

Mnimos cuadrados lineales, 73


comparacion n
umero de operaciones diversos
metodos, 129
con matrices dispersas, 266
ecuaciones normales, 266
transformaciones ortogonales Givens de
George y Heath, 269272
con restricciones lineales, 131
resolucion numerica, 132
resolucion numerica, 81
descomposicion en valores singulares, 115
Gram-Schmidt, 8388
transformaciones de Givens, 105110
transformaciones de Householder, 90105
transformaciones rapidas de Givens, 110-115
sistemas incompatibles, ecuaciones normales,
79
sistemas indeterminados, 81
y ajuste de curvas, 73
Mnimos cuadrados no lineales, 335358
resolucion numerica, metodos, 345
de Gauss-Newton, 345352
convergencia, 350
de region de conanza, 353
Levenberg-Marquardt, 352357
Newton, 358
Mnimos cuadrados ponderado, 129
Mnimo relativo, de una funci
on, 695
Mnimo relativo estricto, de una funci
on, 695
Mochila, problema, 547, 616
Modelizacion con variables binarias, en
programacion entera, 622
Modelo matematico, 3
Monotona, numeracion de un arbol, 230
Moore-Penrose, matriz inversa generalizada, 77
MPS, formato, 765
Multifrentes, metodo, 266
Multiplicaciones/divisiones, de un metodo o
lagoritmo, 20
Multiplicadores, en eliminaci
on de Gauss, 9
Multiplicadores simplex, 415
algoritmo para obtencion, en programacion
lineal para ujos en redes, 514
y multiplicadores de Lagrange, 415, 476

N
N, conjunto de los n
umeros naturales, 671
N , matriz no basica de un programa lineal, 392
NAG, paquete de software, 225, 268
NAME, 766
Nested Dissection, ver Diseccion anidada

Indice de materias
Newton, Isaac 288
teorema, 291
ver tambien Newton-Raphson
Newton modicado,
para solucion de ecuaciones no lineales en una
variable, 295
para solucion de ecuaciones no lineales en mas
de una variable, 316
Newton-Raphson, para solucion de ecuaciones no
lineales en una variable, 286300
convergencia, 291
relacion de recurrencia, 289
variantes, 294300
de la secante, 300
diferencias nitas, 295
Newton modicado, 299
regula falsi, 303
y mecanismo de salvaguarda, 294
Newton-Raphson, para solucion de sistemas de
ecuaciones no lineales, 306320
convergencia, 310
relacion de recurrencia, 306
variantes, 313320
diferencias nitas, 313
Gauss-Seidel, 318
Jacobi, 316
Newton modicado, 316
relajacion SOR, 318
Niveles, estructura de, en un grafo, 230
Norma,
matricial, 681
consistente, 681
de Frobenius, 681
espectral, 682
inducida, 682
vectorial, 675
eucldea, 675
p de Holder, 675
N
ucleo,
de una aplicacion, 679
de una matriz, 681
Nudo(s), de un grafo, de un digrafo, 227, 248, 500
accesibilidad, 230
adyacentes, 229, 248
compuesto, 256
de demanda, en un digrafo, 248, 501
de demanda, en ujos en redes, 501
de holgura, 279
ver tambien Estudio de Cargas
de oferta en un digrafo, 248, 501
de oferta, en ujos en redes, 501

925

de llegada de un camino, 229


de llegada de un arco en un digrafo, 248
de partida de un camino, 229
de transbordo, en ujos en redes, 501
destino de un arco, 227, 248, 500
distancia entre, 229, 248
excentricidad, 229
fuente, en ujos en redes, 501
grado, 229
hijo, 230, 645
origen de un arco, 227, 248, 500
padre, 230, 645
periferico, 229
raz, de un arbol, 230, 506
sumidero, en ujos en redes, 501
Numerable, conjunto, 672
Numeracion, monotona de un arbol, 230
N
umero de condicion de una matriz, 69
invertible, 69
cualquiera, 69
N
umero de dgitos signicativos, de una maquina,
705
N
umero de operaciones del metodo o algoritmo,
Aasen, 53
Bunch y Parlett, 59
Bunch y Kaufman, 60
Cholesky, 47
Crout, 34
Doolittle, 36
eliminacion de Gauss, 2023
formulas de Cramer, 22
factorizacion LDLT de una matriz simetrica,
40
factorizacion QR por transformaciones de
Householder, 97
factorizacion QR por transformaciones de
Givens, 109
factorizacion QR por transformaciones rapidas
de Givens, 112
Gauss-Jordan, 23
Gram-Schmidt,
clasico, 84
modicado, 86
Parlett y Reid, 50
resolucion de minxn Ax b2 ,
mediante transformaciones ortogonales de
Householder, 90
mediante transformaciones ortogonales de
Givens, 109
mediante transformaciones ortogonales
rapidas de Givens, 112

926

Indice de materias

N
umeros, representacion en ordenador, 700
exponente, 700
mantisa, 700

O
Operaciones aritmeticas de un metodo, 20
ver tambien multiplicaciones/divisiones,
sumas/restas
Operador,
adjunto, 679
autoadjunto, 679
hermtico, 679
isometrico, 679
lineal 678
simetrico, 679
unitario, 679
Optimizacion, 365
en redes, problemas lineales, 499
Orden de convergencia, 281
Ordenacion de las ecuaciones, matrices dispersas,
219
Ordenador,
dgitos signicativos, 705
epsilon, 704
errores, 703
de cancelacion, 267, 707
de redondeo, 703
de truncamiento, 703
precision, 704
representacion de n
umeros, 700
Origen, nudo origen de un arco, 227, 248, 500
Ortogonal(es),
matriz, 683
subespacio, 678
vectores, 678
Ortonormales, vectores, 678
Overow, lmite de, en un ordenador, 700

P
p3 y p4 , en metodo simplex, 447
Padre, nudo, 230, 645
Paige, metodo de, 129
n
umero de operaciones, 130
Parte generadora, de un espacio vectorial, 674
Particion, de la region factible de un programa
entero, 645
Particion, de un grafo, 230
arbol, 230
Parlett y Reid, metodo de, 50
n
umero de operaciones, 52

Penalizacion, o gran M, metodo para llegar a


solucion basica factible inicial en
simplex, 441
Penalizaciones, en programacion entera, 654
Perl, de una matriz, 204
monotono, 238
perl o envolvente, forma de almacenar
matrices dispersas en un ordenador, 204
Periferico, nudo de un grafo, 229
Permutacion, matriz de, 683
Permutacion simetrica, 49, 229
Pivote, 9
Pivotacion, 15
operacion en metodo simplex revisado, 420, 454
en el algoritmo de descomposicion de
Dantzig-Wolfe, 538
en metodo simplex para programacion lineal de
ujos en redes, 516
parcial, 15
total, 15
Plan de fabricaci
on, problema, 369
Planicacion de la generacion de energa en una
empresa electrica, problema, 370, 616
Polihedro, 390
Politopo(s), 390
conico, 390
racional, 625
y region factible de un programa lineal, 390
Ponderacion, metodo de la, 138
Ponderado, mnimos cuadrados, 129
Post-optimizacion, analisis en programacion
lineal, 492
Potencial, de nudos en programaci
on lineal para
ujos en redes, 514
Precios,
de equilibrio, 477
sombra, 477
Precision de la maquina, u ordenador, 704
ver epsilon
Precondicionador, 191
gradientes conjugados con
precondicionamiento, 190192
Predecesor, en estructura de datos para
programacion lineal de ujos en redes,
512
Prehilbertiano, espacio vectorial, 678
Preorden, en implementacion del metodo simplex
para ujos en redes, 512, 518
Prestaciones de algoritmos, criterios, 20
y errores de redondeo, 20
y tiempo de calculo, 20

Indice de materias
Price-out, ver Asignacion de precio
Principio de descomposicion de Dantzig-Wolfe,
527545
Problema,
del corte de materiales, 546
del plan de fabricaci
on, 369
del representante de comercio, 620
del transporte, 370
de la asignacion de traco, 375
de la dieta alimenticia, 368
de la dicotoma, 617
de la emision de deuda, 369
de la gestion de un servicio hospitalario, 615
de la localizacion de almacenes, 618
de la mochila, 547, 616
de la planicacion de la generacion de energa
en una empresa electrica, 370, 616
de los mnimos cuadrados ponderado, 129
Problema generalizado de mnimos cuadrados, 129
Problema lineal de mnimos cuadrados, 73
descomposicion en valores singulares y
solucion, 75
formulacion, 73
resolucion numerica, 81
Problema maestro, en descomposicion de
Dantzig-Wolfe, 532
Problema no lineal de mnimos cuadrados, 335
formulacion, 335
resolucion numerica, 345
metodo de Gauss-Newton, 345352
convergencia, 350
metodos de region de conanza, 353
Levenberg-Marquardt, 352357
Newton, 358
Problema primal restringido, 487
ver tambien metodo primaldual
Problemas con estructura en escalera, 545
Problemas de ujos en redes, 499
asignacion, 505
camino mas corto, 503
coste mnimo, 502
ujo maximo, 504
transbordo, 502
PROCESO ITERATIVO, 772
Producto de la inversa de la base, forma del
algoritmo simplex para programas
lineales, 446
Producto escalar, 678
Profundidad, depth, estructura de datos para
programacion lineal para ujos en redes,
512

927

Programa combinatorio, 614


Programa dual, de uno lineal, 468
Programa entero, 614
combinatorio, 614
de la gestion de un servicio hospitalario, 615
de la localizacion de almacenes, 618
de la mochila, 547, 616
del representante de comercio, 620
dicotomas, 617
mixto, 614
puro, 614
region factible, 625
set covering, 622
set partitioning, 622
simple matching, 622
Programa(s) en Fortran 77, C y Fortran 90,
Aasen, factorizacion LT LT de una matriz
simetrica indenida, 57, 834, 860
Bbmi, solucion de problemas de programacion
lineal, entera pura y mixta, 791
Beta-y-t, calculo de los parametros y t de
una maquina, 701, 856
Bisec, solucion de ecuaciones no lineales en
una variable, 285, 847, 868
Broyden, solucion de sistemas de ecuaciones no
lineales mediante metodo cuasi Newton,
323, 852, 872
Condest, estimacion del n
umero de condicion 1
de una matriz cuadrada mediante el
algoritmo de Cline, Moler, Stewart y
Wilkinson, 882, 856, 876
CondHag, estimacion del n
umero de condicion 1
de una matriz cuadrada mediante el
algoritmo de Hager, 886
Bunchkauf, factorizacion LBLT de una matriz
simetrica indenida, 66, 835, 860
Ccnet, solucion de problemas de optimizacion
de ujos en redes, 703
Cg, gradientes conjugados para soluci
on
iterativa de Ax = b, 188, 841, 867
Cgp, gradientes conjugados con
precondicionamiento para soluci
on
iterativa de Ax = b, 192, 841, 867
Chol, factorizacion de Cholesky, 45, 834, 859
dcmsvd, descomposicion en valores singulares
de una matriz cualquiera mediante
Golub-Reinsch, rutina de Svdre.
eliminacion de Gauss con pivotacion parcial
para solucion de Ax = b,
Gauss, un solo termino independiente, 15,
832, 858

928

Indice de materias

mediante el metodo de Newton


Gaussc, cualquier termino independiente, 19,
modicado, 299, 848, 869
832, 858
Newtonsecante, solucion de x3 sen x = 0
Epsmaq, calculo de la precision de una
mediante el metodo de la secante, 301,
maquina, 705, 856
848, 869
Fastgivens, resolucion de minxn Ax b2
Newtrp, solucion de sistemas de ecuaciones no
mediante transformaciones ortogonales
lineales por Newton-Raphson, 307, 848,
rapidas de Givens, 112, 838, 863
869
GaussSeidel, para solucion de Ax = b
Newtrpdf, solucion de sistemas de ecuaciones
iterativamente, 151, 840, 866
no lineales por Newton-Raphson con
Gausnewt, para resolver problemas no lineales
diferencias nitas, 314, 849, 870
de mnimos cuadrados, 347, 854, 874
Newsor, solucion de sistemas de ecuaciones no
factorizacion LU1 ,
lineales por Newton-Raphson, variante
Crout, metodo de Crout, 30, 833, 858
de relajacion, 319, 851, 871
Croutp, metodo de Crout con pivotacion
Qrdes, resolucion de minxn Ax b2
parcial, 33, 833, 858
mediante transformaciones ortogonales
factorizacion L1 U ,
de Householder, 96, 836, 862
Croutl1u, metodo de Crout, 36, 833, 859
Sor, para solucion de Ax = b iterativamente,
Dool, metodo de Doolottle, 38, 834, 859
165, 841, 866
Givens, resolucion de minxn Ax b2
Steep,
para solucion de Ax = b iterativamente
mediante transformaciones ortogonales
mediante
el metodo de la maxima
de Givens, 107, 837, 863
pendiente,
176, 867
n
Grmsch, resolucion de minx Ax b2
Suma-de-serie,
para
sumar una serie de
mediante Gram-Schmidt modicado, 87,
innitos
sumandos,
710, 856
836, 861
Svdre,
resoluci
o
n
de
Ax
=
b, Amn , m > n o
Jacobi, para solucion de Ax = b
m < n y rango incompleto mediante
iterativamente, 147, 840, 866
descomposicion de A en valores
Levmar, para resolver problemas no lineales de
singulares, 128, 838, 864
mnimos cuadrados, 353, 855, 874
Programa
lineal, 366
Mci, resolucion del problema MCI (mnimos
coecientes de coste, 366
cuadrados con restricciones lineales de
dual, 468
igualdad), 134, 839, 865
forma estandar, 367
Mincuad, resolucion de Ax = b, Amn , m > n
formulacion de Karmarkar, 561
o m < n y rango incompleto, 102, 836,
funcion objetivo, 366
862
inconsistente, o no factible, 382
Muller, resolucion de x3 sen x = 0 mediante
punto factible, 366
el metodo de Muller, 305, 848, 869
primal restringido, 487
Newt, solucion de x3 sen x = 0 mediante
region factible, 366
Newton-Raphson, 290, 847, 868
restricciones o condiciones, 366
Newtarmijo, solucion de sistemas de
solucion optima, 381
ecuaciones no lineales mediante
alternativas, 381
Newton-Raphson con el mecanismo de
no acotada, 381
salvaguarda de Armijo, 333
u
nica, 381
Newjac, solucion de sistemas de ecuaciones no
termino de la derecha, 366
lineales por Newton-Raphson, variante
variables de decision, 366
de Jacobi, 317, 850, 871
variables de holgura, 367
Newton, solucion de x2 1 = 0 mediante
Programacion matematica, 365
Newton-Raphson, 298, 847, 868
dinamica, 547
Newtondf, solucion de x2 1 = 0 mediante
entera, 613
Newton-Raphson por diferencias nitas,
298, 847, 868
lineal, 365
3
parametrica, 492
Newtonmod, solucion de x sen x = 0

Indice de materias
Propiedad fuerte de Hall, 273
Proyeccion,
matriz de, 684
ortogonal de un vector, 77, 684
matriz de, 78, 684
sobre un subespacio, 78
teorema de la, 692
Proyector suplementario, 684
Punto,
de acumulacion, 691
de adherencia, 691
de equilibrio, 529
de silla, 345
extremo, de region factible de programa lineal,
384
de conjunto convexo, 384
y solucion basica, 393
factible, de un programa lineal, 366
interior, 691
y programacion lineal, 557

Q
Q, conjunto de los n
umeros racionales, 671
QR, 88
ver Factorizacion QR

, cuerpo de los n
umeros reales, 671, 672
Radio espectral de una matriz, 152, 685
Raz, nudo de un arbol, 230, 506
RANGES, 769
Rango,
de una forma cuadr
atica, 687
de una matriz, 681
completo, 681
simbolico, de una matriz, 251
Rapidas de Givens, transformaciones, 110
Rapidez de convergencia, 281
Razon aurea, 301
Red, electrica de 30 nudos de IEEE, 337
Redes, ujos en, 501
optimizacion en, 499
Redondeo, en ordenador, 703
Reexiones de Householder, 90
ver tambien Factorizacion QR,
transformaciones de Householder
Region de conanza, metodos, 353
Levenberg-Marquardt, 352357
Region factible,
de un programa entero, 625
de un programa lineal, 366

929

vaca, 382
punto extremo, o vertice, 380
y politopo, 390
Regla,
de Bland, 429
del triangulo, 675
lexicograca, 429
LIFO, 652
Regula falsi, 303
Relajacion, SOR,
para mnimos cuadrados, 195
para sistemas de ecuaciones no lineales, 319
para solucion de Ax = b, 163168
esquema iterativo matricial, 164
matriz, 164
relacion de recurrencia, 164
variante de Newton-Raphson para soluci
on de
sistemas de ecuaciones no lineales, 319
Relajacion, SSOR,
para solucion de Ax = b, 169
esquema iterativo matricial, 169
relacion de recurrencia, 169
SGS (Symmetric Gauss-Seidel), 169
esquema iterativo matricial, 169
Relajaciones, de un programa entero, 626
lineal, 626
Lagrangiana, 632
descomposicion y separacion de costes, 632
descomposicion de Benders, 633
Relleno, elementos de, 219
Representacion de n
umeros en ordenador, 700
exponente, 700
mantisa, 700
Representante de comercio, problema, 620
Restricciones, de un programa lineal, 366
RHS, 769
Richardson, esquema iterativo para resolucion de
sistemas de ecuaciones lineales, 144
ROWS, 767
E, 767
G, 767
L, 767
N, 767

S
Salida, grado de un nudo de un digrafo, 248
Sargent y Westerberg, algoritmo, 256
Schwarz, desigualdad de Cauchy-Shwarz, 678
Secante, metodo para solucion de ecuaciones no
lineales en una variable, 300
Semidenida negativa,

930

Indice de materias

matriz, 689
Semidenida positiva,
matriz, 689
Semiespacio,
abierto, 389
cerrado, 389
Sensibilidad, an
alisis en programacion lineal,
492493
Separacion y acotacion, algoritmos enumerativos
o branch and bound, 649
Separador,
conjunto, de un grafo, 230
hiperplano, 471, 697
mnimo, de un grafo, 230
Serie geometrica, 154
Sesquilineal, forma, 678
Set covering, 622
Set partitioning, 622
Sherman-Morrison-Woodbury, f
ormula de, 330
Simplex, metodo, 411
factorizacion LU de la base, B, 447
fase I y II, 432
forma de tableau, 441
forma producto de la inversa de la base, 445
para problemas de ujos en redes, 505
para variables acotadas, 450
solucion basica factible inicial, 429
variables articiales, 431
Signatura, de una forma cuadr
atica, 687
Simple matching, 622
Sistema de ecuaciones lineales, 4
coecientes, 4
con matriz dispersa, 201
de estructura simetrica, 226246
de estructura no simetrica, 246261
interpretacion geometrica,
en 2 , 7
en n , 7
en Im(A), 8
matriz de coecientes, 4
teorema de la compatibilidad, 4
terminos independientes, 4
Sistema de ecuaciones no lineales, 465
Sistema de numeracion en ordenador, 700
Sistema lineal triangular superior, 7
Software,
Harwell Subroutine Library, 225, 262
para matrices dispersas, 225
Solucion basica, de un programa lineal, 392
degenerada, 395
factible, 395

factible, 395
inicial para el metodo simplex, 429
optima, condicion, 418
y punto extremo, 393
Solucion de Ax = b, y mnimo de forma
cuadratica, 170
ver metodos concretos
Solucion optima, de programa lineal, 418
alternativas, 381
no acotada, 381
u
nica, 381
SPARSKIT, 274
SPARSPAK, 225, 263, 268
SMMS, Sparse Matrix Manipulation System, 263
Subconjunto, 671
abierto, 691
cerrado, 691
compacto, 691
Subespacio(s),
de actividad, en programaci
on lineal, 383
de Krylov, 184
de productos, en programacion lineal, 383
fundammatriz A, 78
imagen, de una aplicacion, 679
ortogonal, 678
propio, 685
requisito, en programacion lineal, 383
suplementarios, 674
vectorial, 674
Subgrafo,
de un digrafo, 500
maximal, 500
de un grafo, 229
seccion,
de un digrafo 249
de un grafo, 229
Sucesion, 672
convergencia en un espacio vectorial normado,
677
de Cauchy, 677
de elementos de un conjunto, aplicacion, 672
lmite de, 677
Sucesor, estructura de datos de programacion
lineal para ujos en redes, 512
Suma directa, de dos subespacios vectoriales, 674
Sumas/restas, de un metodo o lagoritmo, 20
Sustitucion inversa, 9
Suprayectiva, aplicaci
on, 672
Supremo, o cota superior mnima, 672

Indice de materias
t, precision de un ordenador, 700
Tableau, metodo simplex en forma de, 441
Tasa, o relacion de convergencia, 281
Taylor, teorema de, 695
desarrollo en serie de, 291
Teorema
de Gerschgorin, 691
de la compatibilidad de un sistema de
ecuaciones lineales, 4
de la dualidad, en programaci
on lineal, 470
de las direcciones conjugadas, 178
de la proyeccion, 692
de Newton, 291
de Taylor, 695
de Weierstrass, 691
fundamental de la programaci
on lineal, 402
Termino de la derecha, de un programa lineal, 366
Thread, estructura de datos para programaci
on
lineal para ujos en redes, 512
Tiempo,
de calculo de un algoritmo, 20
de multiplicacion/division, 20
de suma/resta, 20
TOLERANCIA CERO, 772
TOLERANCIA COSTES, 772
TOLERANCIA PIVOTE, 772
Transformaciones de Gauss, 10
Transformaciones ortogonales, 88
de Givens, 105
de Householder, 90
rapidas de Givens, 110
Transformacion proyectiva, Karmarkar, 562
Transporte, problema, 370
Transversal de una matriz dispersa, 247
completo, 247
b
usqueda, 251254
Triangularizacion, de una base de un programa de
ujos en redes, 510
Triangularizacion en bloques de una matriz
dispersa, 247
algoritmo de Hall, 251
algoritmo de Sargent y Westerberg, 256
algoritmo de Tarjan, 260
fases del proceso, 247
Triangularizacion ortogonal, ver Factorizaci
on QR
Triangulo, regla, 675
Tronco de pivotacion, en implementacion del
metodo simplex para ujos en redes, 518
Truncamiento, en un ordenador, 703

931

U , lmite de overow de un ordenador, 700


Underow, lmite de, en un ordenador, 700
Unimodular, matriz, 503
Union, de conjuntos, 671

V
Valores singulares, de una matriz, 75, 686
descomposicion en, 75
numerica, 115
Valor propio, 685
Vandermonde, matriz de, 74
Variables,
articiales, en el metodo simplex, 431
basicas, 392
binarias, 620
de decision, de un programa lineal, 366
de holgura, de un programa lineal, 367
de ramicacion, en programacion entera, 654
penalizaciones, 654
no basicas, 392
Variedad lineal, 679
ver tambien Hiperplano
Vector(es), 672
caracterstico, de un hiperplano o variedad
lineal, 389
conjugados, 179
de Householder, 90
gradiente, 694
linealmente dependientes, 674
linealmente independientes, 674
ortogonales, 678
A ortogonales, 177
ortonormales, 678
propio, 685
Velocidad de convergencia, 281
Verosimilitud, 341
estimador de maxima verosimilitud, 341
Vertice,
de un grafo, ver Nudo de un grafo
de una region factible, ver Punto extremo

W
Weierstrass, teorema de, 691
WRETA, operacion del simplex, 446

Y
YSMP, Yale Sparse Matrix Package, 225, 263, 268

Z
Z, conjunto de los n
umeros enteros, 671, 672

También podría gustarte