Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Técnicas de Cálculo para Sistemas de Ecuaciones, Programación Lineal y Programación Entera
Técnicas de Cálculo para Sistemas de Ecuaciones, Programación Lineal y Programación Entera
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
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
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
3.1
3.2
3.3
3.4
3.5
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
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
342
344
346
349
351
4.6.1
4.6.2
lineal
II Programacion
Captulo 5.
363
LINEAL. FORMULACION
PROGRAMACION
LINEAL
TEORIA BASICA
DE LA PROGRAMACION
6.1
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
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
9.1
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
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.
639
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
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
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
Apendice
I.
I.1
I.2
891
Apendice
J.
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
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
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
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
6.1
6.2
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
441
460
Indice de Figuras
XXI
8.2
8.3
8.4
9.1
9.2
9.3
9.4
9.5
9.6
9.7
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 . . . . . . . . . . . . . . . . . . . . . . . .
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 .
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
712
716
718
718
719
D.1
D.2
D.3
D.4
744
746
747
E.1
644
646
647
651
653
661
665
750
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
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
147
150
165
176
188
221
4.1
4.2
4.3
4.4
283
286
300
307
2.7
2.8
2.9
3.1
3.2
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
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
7.1
7.2
7.3
7.4
420
432
446
454
8.1
8.2
8.3
8.4
471
481
483
489
9.1
9.2
9.3
9.4
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
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
725
742
748
749
752
762
E.1
F.1
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
Primera parte
Sistemas de ecuaciones
Captulo
METODOS
DIRECTOS DE
DE SISTEMAS DE
SOLUCION
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
A = ..
.. ,
...
.
.
am1 am2 amn
x1
x2
x = ..
.
xn
b1
b2
y b = .. ,
.
xm
m=n
m=n
rango(A) = m = n
rango(A) < m = n
1a
1b
m>n
m>n
rango(A) = n < m
2a
2b
m<n
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
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
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 .
i = 1, . . . , n,
n
1
xk =
bk
uki xi ,
ukk
i=k+1
k = 1, . . . , n.
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.
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
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.
+
+
+
+
21
20
24
22
= 0
= 3
= 1
= 5;
10
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
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.
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
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
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,
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
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
1.2.1
Pivotaci
on
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
x2 =
1 1
A =
104 1
2
y b =
.
1
1
1
=
0 1 104
b1
2
=
.
1 2 104
15
1 1
=
0 1
b1
2
=
,
1
siendo la soluci
on del sistema de ecuaciones correspondiente
x1
x2
1
=
,
1
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
Tabla 1.1
Algoritmo para la resoluci
on de Ax = b mediante eliminaci
on de Gauss con pivotaci
on parcial
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
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
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
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.
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
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
21
realizan son:
ni
divisiones para el c
alculo de los factores o multiplicadores;
(n i)(n i + 1)
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
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
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
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
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.
23
740
500.000.000
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
i /ai
a1i
ii
..
1/ai la i ,
i =
ii
.
..
i
i
ani /aii
24
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
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
..
..
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 .
26
(1.2)
Li
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.
27
k = 1, . . . , n,
A =
A p
.
qT r
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
I
0
q T A1 1
1
I
0
=
.
q T A1 1
A =
I
0
T
1
q A
1
A
p
.
T
T
0 r q A1 p
28
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
=
L
L
0
q T U 1 1
=
y U
U
L1 p
,
T
T
0 r q U 1 L1 p
A = L
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.1
29
M
etodos directos para la obtenci
on de factorizaciones LU
M
etodo de Crout. Versi
on LU1
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
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
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
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)
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
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
l31 = -2,000;
u12
2,000
= fl
0,001
u13
3,000
= fl
0,001
= 2000;
= 3000;
u23
4,623 + (1,000)(3000)
= fl
2004
= 1,500 y
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
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
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
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
M
etodo de Crout. Versi
on L1 U
35
1a la de U :
u11 = a11
u12 = a12
u13 = a13 ;
1a columna de L:
2a columna de L:
l31 u12 + l32 u22 = a32
3a la de U :
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
1
10 10 20
5 0 .
LU = 2 1
3 4 1
1
36
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
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
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)
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
Figura 1.5
Ilustraci
on del proceso del algoritmo de Doolittle para la factorizaci
on LU por columnas de
una matriz
40
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:
=
=
=
=
=
=
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
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
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
42
manera:
xk = xk
xj = 0
k = 1, 2, . . . , r,
j = r + 1, . . . , n.
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
GT 0
G G =
gT
T
G g
GT G G T g
=
.
0
g T G g T g + 2
43
GT G G T g
g T G g T g + 2
A a
.
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
44
=
=
=
=
=
=
2
g11
g11 g12
g11 g13
2 + g2
g12
22
g12 g13 + g22 g23
2 + g2 + g2 .
g13
23
33
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
1,3416
0,2981
0
G=
.
1,7638 0,5669
1,6366
La soluci
on del problema es [1, 2, 3, 4]T .
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
46
=
=
=
=
=
=
g11
a12 /g11
"
2
a22 g12
a13 /g11
(a23 g12 g13 ) /g22
"
2 g2 .
a33 g13
23
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.
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
(1.5)
(1.6)
(1.7)
(1.8)
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 ,
48
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
1.5.4
Matrices sim
etricas indenidas
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
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
(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
A(1)
1
1
0
= M1 P1 AP1T M1T =
0
0
1
2
v3
v4
v5
0
v3
0
v4
v5
,
v3
v3
P2 v4 = v4 ,
v5
v5
donde |
v3 | = max{|v3 |, |v4 |, |v5 |}.
51
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
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
En la segunda:
P2 = [e1 , e2 , e4 , e3 ]
0 [0, 0, 1, 0]
M2 = I4
0
1/2
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.4.2
53
El m
etodo de Aasen
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
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.
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
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
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
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.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
P1 AP1T
Is
0
=
1
CB
Ins
B
0
0 D CB 1 C T
Is B 1 C T
0 Ins
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
mientras que si s = 2,
|
aij |
3
0 .
1
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
Is
0
.
1
CB
Ins
El m
etodo de Bunch y Kaufman
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
bk22 bk21
.
bk21 bk11
U = Pn Un1 P1 U11
Uk1
Iks Mk 0
0
Is
0 ,
=
0
0 Ink
62
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()
alpha = (1.0e0+sqrt(17.0e0))/8.0e0
k
= n
do while (k.gt.1)
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)
63
64
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 *
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
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
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
1.6
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
= 0,0057,
42 + 122
68
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
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)
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.
70
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
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)
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).
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.
72
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
73
1
1
1
1
1
2
x0
4 3
x1 = .
9
5
x
16 2
6
x
A
b
1
2
3
4
74
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
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
75
donde
(1.19)
r 0
=
,
0 0
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 .
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
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.
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
77
donde
Ur = [u1 , . . . , ur ]
y Vr [v 1 , . . . , v r ] .
r1 0
UT b
0 0
minimizar
Ax b2 ,
xn
z1
z=V x=
z2
T
c
y c=U b= 1 ,
c2
T
=
(
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
78
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 .
=
=
=
=
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.1.2
79
(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
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
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
81
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.
1.7.2
Resoluci
on num
erica del problema
82
u
x1
x
x1+ker(A)
ker(A)
Interpretaci
on geometrica en
Figura 1.11
del problema x = minx3 {x2 : Ax = b}
3
1 1 1 1 1
A=
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
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.
83
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
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 =
e3 =
.
..
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
i=1
j1
i=1
uij ei .
84
a3
e3
a3
a
e 1
e1
|
3
a3 a3 |e1 e1 a3 |e2 e2
a3 |e2 e2
e2
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
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
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
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
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
C
C
C
C
C
C
88
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
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
"
Qx|Qx =
"
xT QT Qx =
xT x = x2 .
Seg
un esto, si Q es una tal matriz ortogonal, al aplicar su transformaci
on correspondiente
89
c
Qb =
d
n
,
mn
entonces
(
(
"
( R1 x c (
( = R1 x c2 + d2 ,
Ax b2 = QAx Qb2 = (
2
2
(
(
d
2
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 ,
T
0 QQ
R1
0
= R1T R1 .
90
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.
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
Hk ak =
aik para i = 1, 2, . . . , k 1
0 para i = k + 1, . . . , m.
92
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
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
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 .
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
0 T
T =
Hj = I 0 , w
w
I 0
j
0 H
q = Hj q =
I 0
j
0 H
-
q
=
.
Hj q
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
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
95
Tabla 1.18
Algoritmo para la resoluci
on de minxn Ax b2 por transformaciones de Householder
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
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)
97
end do
x(i) = (b(i)-suma)/d(i)
end do
C
C
C
C
C
C
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
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
end
1.7.2.2.1.2
Resoluci
on num
erica de Ax = b, Amn , n > m y rango completo
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
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
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
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
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)
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
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
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.
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
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.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
o, lo que es equivalente,
c = cos = "
y
xi
xi2 + x2j
xj
s = sen = "
.
x2i + xj2
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
....
....
....
....
....
....
...
...
...
...
...
...
...
..
..
...
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
...
..
..
..
1
............................
.....
...
...
...
.....
...
.
.
..
..
.
..
.
.
.
.
.............
x
Figura 1.20
Ejemplo de una transformaci
on de Givens en el espacio eucldeo tridimensional
107
A=
R=
0
0
0
0
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
*** 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
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
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
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
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
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)
dj pjj
(dj pjj )2 + (di pij )2
di pij
y s= "
.
(dj pjj )2 + (di pij )2
(1.24)
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
#
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
#
y P = E 1 D1 G(i, j)DP.
112
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
*** Reducci
on QA=R ***
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
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
115
suma = suma+a(i,k)*x(k)
end do
x(i) = (b(i)-suma)/a(i,i)
end do
C
C
C
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.
rT
U A=
0 B
T
116
z=
r/r2 si r = 0
e1
si r = 0.
Como rT V1 = 0, entonces
cT
U AV =
0 C
T
1 0
Q=U
0 Q
y P =V
1 0
.
0 P
B=
d1 f2
d2 f3
.. ..
. .
..
,
. fn
dn
0
0
(1.29)
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
UBT AB
B1
=
0
= B.
118
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
= eTk+1
hik W ei =
i=1
hik eTk+1 ei = 0.
i=1
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
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
los sucesivos pasos de esta etapa k para conseguir que Bk siga siendo bidiagonal, seran:
U1T Bk =
U1T Bk V2 =
;
;
+
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 .
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
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
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).
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
C
C
C
C
C
C
C
C
a(i,i) = a(i,i)+1.0
end do
C
C
C
C
125
126
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
127
r
uTi b
i=1
vi.
(1.30)
1
2
3
4
5
6
7
8
9
10
11
5
12 x1
5
13 x2 = 5 ,
5
14 x3
15
5
x
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
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 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
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
2mn2 + 4n3
mn2 +
17 3
3 n
(1.32)
(1.33)
130
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)
P C2T
0
=
ST
n
,
mn
(1.36)
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
Paso 3. Resolver
131
R1 x = c1 C1 P2T S 1 c2
1.9
(1.37)
132
rango
A
B
= n.
(1.38)
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
R11 R12
QB BPB =
0
0
r
,
pr
(1.39)
QB d = d =
d2
(1.40)
1
x b = [A1 , A2 ] x
Ax b = A
b,
2
x
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 .
(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
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
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)
!
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
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.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
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
c1
c=
c2
= QTA (b Ax1 ),
obteniendose, nalmente, x = x1 + Q2 y 2 , la u
nica soluci
on de MCI.
138
1.9.1.3
M
etodo de la ponderaci
on
(1.44)
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
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
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
140
(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 =
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
0 1
1
:
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.
142
x1 + 5x2 = 36
2x1 x2 = 45
3x1 + x2 = 0.
x1 + 2x2 3x3 = 42
5x1 x2 + 3x3 = 54.
5 13
.
12 26
,
A=
0,6 0,8 0
0,8 0,6 0
0
0 1
- ,
1 1
0 2
0 0
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
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.
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
(k+1)
xi
1
(k)
b
aij xj
;
i
aii
j=1
i = 1, . . . , n.
(2.4)
j
=i
146
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
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
148
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
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
149
M
etodo de Gauss-Seidel
(k+1)
xi
i1
1
(k+1)
(k)
bi
aij xj
aij xj ;
aii
j=1
j=i+1
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
150
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)
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
151
(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
! Salida de resultados
152
end do
C
end
2.3
2.3.1
Convergencia de los m
etodos de Jacobi y Gauss-Seidel
Matrices generales
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.
153
De la denici
on de valor propio de una matriz A, para x = 0, se tiene que
Ax = x.
Por consiguiente
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) + .
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
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,
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 .
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
2.3.2
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
|ari | |xi |
i
=r
i
=r
|ari |,
157
G = (D E)1 F = (I D1 E)1 D1 F.
L = D1 E
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
(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|.
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.
159
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
2.3.3
Matriz sim
etrica denida positiva
I I D1/2 AD1/2
160
v M QM v = ||2 v Qv
#
v (Q M QM ) v = 1 ||2 v Qv,
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.
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
162
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,
A(I M )1 = R.
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
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
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 ] .
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
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
166
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
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|.
167
k = (1 )n .
k=1
De la denici
on de radio espectral de una matriz se tiene obviamente que
(G()) |k |,
k = 1, . . . , 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.
168
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 =
2
1>0
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.
169
2.5
M
etodos de minimizaci
on
170
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)
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.
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)
(2.11)
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 ,
b) =
n
j=1
Tambien de b
usqueda lineal o linesearch.
aij xj bi .
p(n) = e1 , . . .
172
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 ,
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,
#
$T
p,
g (k)
$T
< 0,
p
174
"
p|Ap,
la soluci
on al problema de minimizaci
on es:
p(k) = A1 g (k) .
(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)
k = #
g (k)
g (k)
$T
$T
g (k)
.
Ag (k)
$T
$T
Q x(k+1) = 0,
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
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)
! 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
177
prod = prod+x(i)*y(i)
end do
C
return
end
2.5.2
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.
(i)
i p
#
p(i)
$T
$T
Ap(i) = 0.
178
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
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
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
180
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) .
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)
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)
r(k)
$T
r(j) = 0,
0 j < k,
k = 1, . . . , n 1.
(2.23)
181
r(j)
$T
r (k+1) =
#
#
r(j)
r(j)
$T #
$T
r (k) + k p(k)
$T
$T
r(k) + k p(k)
$T
Ar (j)
A p(j) j1 p(j1) = 0
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
$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
. 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 #
$T
r(j) .
(2.24)
j = #
r (j)
p(j)
$T
$T
r(j)
.
(2.25)
Ap(j)
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)
$T
p(k) .
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
183
i = 0, . . . , n 2;
(2.27)
i = 0, . . . , n 1;
(2.28)
i = 0, . . . , n 1.
(2.29)
Ap
01
(1)
(0)
0 p
(0)
j p(j) + k
j=0
k+1
j p(j) .
j=0
k (0)
=A A p
= A
(j)
j p
j=0
(j)
j Ap
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
j=0
j p(j) .
j=0
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,
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
=
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.
(2.32)
r (j)
$T
p(k1) = 0,
j k.
186
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.
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
(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
$
(1) 2
f (x(1) ) = x1
3 # (1) $2
(1)
(1)
x2
4x1 x2 = 4,1.
2
187
x2
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
#
$T
Ap(0) = 0 es inmediato:
2 0
[3, 2]
0 3
1
= 0.
1
188
2.5.2.2.3
Implementaci
on pr
actica del m
etodo de los gradientes conjugados
= 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
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
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
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
p = C 1 p
x = C 1 x
1
z = C r
r = C
r = b Ax
191
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)
192
! 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
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
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
xi
(k)
= xi
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:
#
2.7.2
M
etodo de Gauss-Seidel
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 .
195
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
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 .
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
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
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
2 1
x1
1 2 1
x2
1 2 1 x3
x4
1 2
x
A
19
19
= 3 .
12
b
(k)
(k)
(k)
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
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=
a)
b)
c)
d)
e)
f)
g)
1 a a
a 1 a
a a 1
con
a .
5 1
B=
y el vector
0 21
Considerese el metodo iterativo denido por
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
para
n 1 y = 0.
200
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
202
3.1
3.1.1
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.
203
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
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
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
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
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.
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),
1 2 3 4 5 6 7
0 0
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
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
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
10
2
3
B=
0
0
2
4
0
3
0
3
0
6
0
0
0
3
0
1
8
0
8
3
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
3.1.4
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
208
vec(ico(ii)) = val(ii)
ii = link(ii)
end do
3.2
3.2.1
n
ai bi ,
i=1
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
1
0
2
0
3
2
4
4
5
0
Elementos
6 7 8 9
0 3 0 0
10
1
11
0
Elementos
1
2
3
5
4 10
0,6 0,7 0,5
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
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
3.2.2.2
Multiplicaci
on de un vector por una matriz
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 .
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
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
212
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
1
1
Elementos
2 3 4 5
0 1 0 1
6
1
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
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
1
3
Elementos
2 3 4 5
3 2 3 2
6
3
ic
icoc
1
1
5
3
9
5
Matriz C
13
6 1 3 4
214
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
1
1
5
3
9
5
13
6
16
1
3.2.3.2
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
=
=
=
=
216
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)
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
bT1
T
b2
B=
..
.
bTp
p
ai bTi .
i=1
Multiplicaci
on AT A
ai aTi ,
i=1
218
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.
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
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
220
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
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
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
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
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
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
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
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.2
225
Proceso de soluci
on
226
3.4
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
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
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
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
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
231
3.4.2
Interpretaci
on grafo-te
orica de la eliminaci
on de Gauss de matrices
dispersas de estructura sim
etrica
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
12
19
10
17
18
11
14
16
13
15
20
6
Figura 3.13
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
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
235
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
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
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
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).
1 2 3 4 5 6 7
1 2 3 4 5 6 7
Perl Mon
otono
Perl No Mon
otono
239
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
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
Selecci
on del nudo inicial
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).
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
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
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
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
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
S11
R22
R23
S0
S12
R24
c)
R22
S11
R23
R24
S12
S0
Figura 3.26
Metodo de la diseccion anidada
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
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
247
A11
x1
b1
A21 A22
x2 b2
..
.. = .. ,
.
.
.
. .
.
xn
bn
An1 An2 Ann
(3.1)
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
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).
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
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
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
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
252
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
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
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
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
255
2
2
.
4
4
256
Figura 3.33
Digrafo de una matriz triangular
3.5.4.1
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
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
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
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
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.
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
262
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
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
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 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
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)
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
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
(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.1
267
El m
etodo de las ecuaciones normales
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
A=
,
(3.7)
268
A A
entonces
Prob
A A
jk
jk
m
aij aik ,
i=1
= 0 = 1 1 p2
m
emp .
2
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
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.
(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
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 ),
270
3.6.2
M
etodos basados en transformaciones ortogonales. M
etodo de GeorgeHeath
R1
QA =
0
c
,
y Qb =
d
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 =
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
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.
273
M2 U2k U2 k+1
.
.
..
P AQ =
,
. ..
..
Mk Uk k+1
Mk+1
(3.12)
A=
y A =
(3.13)
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
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
A=
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 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
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
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
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
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
|2
n
j=1
j=i
Qi = |Vi
|2
n
n
j=1
j=i
j=1
j=i
n
j=1
j=i
Variables dadas
P, Q
P, V
V,
Inc
ognitas
V,
Q,
P, Q
La deducci
on de estas expresiones se puede ver en el apendice C.
281
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
j=1,2
4.1
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
= 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 ,
283
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
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
1
.
kk
284
Captulo 4. Soluci
on de sistemas de ecuaciones no lineales
4.2
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, . . .
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.
x=
sen(x).
xk+1 =
sen(xk ).
x1 =
2
Radianes.
sen(x0 ) = 0,944; x2 =
sen(0,944) = 0,932; x3 =
sen(0,932) = 0,929;
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
sen(xk )
,
x2k
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 (x) =
cos(x)
sen(x)
2
;
2
x
x3
(4.2)
289
(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)
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
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
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)
f (x) = f (xk ) +
f (z) dz,
xk
x
xk
f (xk )(x xk ),
f (z) dz =
4.2.3
Convergencia del m
etodo de Newton para una variable
y
z = x + t(y x),
Ver el teorema de Taylor en el apendice A.
(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,
1
0
1
0
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)
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 )
Recordemos la expresi
on (4.6).
2|f (x0 )|
|x0 x |2 .
293
|x0 x |2 .
2
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
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 )
(4.10)
xk + (xk+1 + xk )/2
=
.
2
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
f (xk ) = lim
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
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)
|h|2
.
2
(ek + |h|)ek .
2|ak |
297
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, . . . ,
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| =
PROGRAM Newton
C
double precision fx,derfx,eps,
+
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
1,250000000000000
1,025000001341104
1,000304878259699
1,000000046463482
1,000000000000001
1,000000000000000
299
M
etodo de Newton modicado
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
*** 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
301
xk xk1
f (xk ).
f (xk ) f (xk1 )
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
*** 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
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
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 )
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 )
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.
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
306
Captulo 4. Soluci
on de sistemas de ecuaciones no lineales
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
J(xk ) =
f1 (x)
f1 (x)
x1
xn
..
..
...
.
.
fn (x)
fn (x)
x1
xn
x= xk
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)
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 ***
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
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.
0
J(x + tp)p dt
x+ p
f (z) dz.
p2 .
2
1
0
=
0
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
p2
t dt
0
p2 .
2
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)
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 , ).
1
.
2
312
Captulo 4. Soluci
on de sistemas de ecuaciones no lineales
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.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
k = 0, 1, . . . ,
converge linealmente a x . Si
lim hk = 0,
k0
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
! 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
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
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
(4.18)
317
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
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)
4.3.2.5
Relajaci
on SOR
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
*** 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
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
Recordemos la aproximaci
on en el de una variable de f (xk ) por
f (xk )f (xk1 )
.
xk xk1
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
(4.21)
(4.22)
322
Captulo 4. Soluci
on de sistemas de ecuaciones no lineales
y que
AB AB
(4.23)
(4.24)
vw T
(4.25)
(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.
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.
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
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
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 )],
327
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,
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 +
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)
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
T
sk1 sk1
I T
=1
sk1 sk1 2
pues I
sk1 sTk1
'
329
y k1 J sk1 2
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
330
Captulo 4. Soluci
on de sistemas de ecuaciones no lineales
A + uv
1
=A
1
A1 uv T A1 .
w
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
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 (xk ).
f (y()) 1
2
(4.32)
(4.33)
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.
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
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
4.6
(4.36)
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
337
Figura 4.16
Red electrica IEEE de 30 Nudos
338
Captulo 4. Soluci
on de sistemas de ecuaciones no lineales
Pi = |Vi |2
n
j=1
j=i
Qi = |Vi |2
n
j=1
j=i
n
j=1
j=i
n
j=1
j=i
Figura 4.17
Conjunto tpico de medidas para la estimaci
on del estado de un sistema electrico
339
(4.37)
m
i=1
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
j=2,3
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 .
1
F DP (b) = e
2
b breal
2 2
2
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
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
4.6.1
Referencias te
oricas del problema
2 ri (x)
,
xj xk
i = 1, . . . , m.
m
i=1
y
2 f (x) =
m
i=1
donde,
Q(x) =
m
ri (x)Gi (x).
i=1
2 f (x)
t1 et1 x1
t2 x1
t2 et x
J(x) =
t3 e 3 1
t4 et4 x1
9
t1 et1 x2
t2 et2 x2
.
t3 et3 x2
t4 et4 x2
343
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
t2 eti x1
0
ri (x) = i
,
0
ti2 eti x2
2
es,
4
i=1
ti2 eti x1
4
ti x1
4
ri (x) + e
4
i=1
i=1
.
ti x2
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
4.6.2
Resoluci
on num
erica del problema
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
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
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
347
La funci
on r(x) es en este caso de 2 en 4 . Su matriz Jacobiana es
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
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
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
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
350
Captulo 4. Soluci
on de sistemas de ecuaciones no lineales
(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
J(xk )T r(xk )
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 )) .
x0 x 2 .
2
(4.45)
351
(4.46)
x
T
T
1
(J0 J0 ) J0 r + J0 r r 0 J0 (x x0 )
c
x0 x +
x0 x 2 ,
x
=
<
c c
+
x0 x
x0
2
c c
+
x0 x
2
c +
x0 x
2
x0 x ,
x
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
352
Captulo 4. Soluci
on de sistemas de ecuaciones no lineales
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
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
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
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)
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
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
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
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 ,
(4.49)
.
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
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.
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
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
J
,
1/2 I
b=
R
.
0
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
365
366
Captulo 5. Programaci
on lineal
5.1
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 a12
a21 a22
A = ..
.
.
..
am1 am2
a1n
a2n
.. .
..
. .
amn
Ax b
x 0.
La regi
on factible es
F = {x n : Ax b, x 0} .
367
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,
368
Captulo 5. Programaci
on lineal
5.2
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
369
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.
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.
1 TWh=109 kWh
1 GW=106 kW
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.
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
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
Ejercicios
373
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
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
Ejercicios
377
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
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.
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
lineal.
6.1
Consideraciones geom
etricas sobre la programaci
on lineal
x1 + x2 6
x1 + 2x2 8
x1 , x2 0.
379
380
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
381
tim
tim
(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
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
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
= b
0
= (1 )b
0.
(6.1)
(6.2)
(6.3)
(6.4)
384
6.1.1.1
con
0<<1
y y, z C
x = y = z.
Ax = b
x 0,
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
385
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
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
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
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.
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
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,
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
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
391
6.3
x1 0, . . . , xn 0.
392
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
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
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
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
= 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
395
C(n, m) =
n
m
n!
.
m!(n m)!
(6.6)
6
3
9
0.
396
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
397
6.3.1
Teorema de la representaci
on
398
(0, 1),
> 0.
(0, 1),
> 0.
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
i v i + d,
iI
iI
i = 1, i 0, y d, o es
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,
i = i + (1 )i 0
para todo i I,
401
i = 1,
iI
d = d + (1 )d 0
y Ad = 0,
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
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
6.3.2
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
404
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
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
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
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.
406
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
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.
Ejercicios
{[x1 ,
{[x1 ,
{[x1 ,
{[x1 ,
{[x1 ,
{[x1 ,
3x2 15
3
+ x2 4
3x2
9
3x2
6.
x1 + 3x2 .
x1 + x2 .
4x1 3x2 .
x1 + x2 .
407
408
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.
para j = 1, 2, 3.
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
Ax = b
x 0,
412
7.1
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)
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)
(7.5)
413
j > m.
z() = c x() = c x + c j =
cTB B 1 b
+ cj
T 1
cB
B aj
cT
j ,
= min
j
q
j
cT q
j>m
T
c q
.
q = arccos
c2 q
2
414
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
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
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
= [aB , aB , . . . , aB , aq , aB , . . . , aBm ].
B
1
2
p1
p+1
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
Ax = b
x 0,
n
yj j ,
yj 0,
j=m+1
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
Ax = b
x 0,
Ax = b
x 0,
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
Ax = b
x 0
419
s. a
2x1 + 3x2 + x3
= 6
x1 + x2 +
x4 = 1
x1 , x2 , x3 , x4 0.
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
2
c1 = c1 a1 = 1 [0, 0]
= 1
1
T
420
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 B {q}\{jp }
N N {jp }\{q}.
Ir al paso 1.
421
3
= 3.
c2 = c2 a2 = 3 [0, 0]
1
T
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
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
2
= 4
c1 = c1 a1 = 1 [0, 3]
1
T
0
c4 = c4 a4 = 0 [0, 3]
= 3.
1
T
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
3
5
3
5
(1) =
5 = 0.
8
5
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
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
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
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.
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
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
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
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
1
c1 = c1 a1 = 1 [0, 3]
= 4
1
T
0
c4 = c4 a4 = 0 [0, 3]
= 3.
1
T
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.
s. a
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
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
2
=0
c2 = c2 a2 = 4 [2, 0]
1
T
1
c3 = c3 a3 = 0 [2, 0]
= 2.
0
T
x1
x4
=B
bB
1 0
a2 x2 =
1 1
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
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
430
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
431
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)
m
xai
i=1
s. a Ax + xa = b
x, xa 0.
(7.7)
432
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.
433
x1 2x2
x1 + x2 x3
=
x1 + x2
x4
=
x2
+ x5 =
x1 , x2 , x3 , x4 , x5
2
1
3
0.
min.
s. a
x1 + x2 x3
+ x6
= 2
x1 + x2
x4
+ x7 = 1
x2
+ x5
= 3
x1 , x2 , x3 , x4 , x5 , x6 , x7 0.
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
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
= 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 .
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
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
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
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
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
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
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
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
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
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.
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
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
442
7.5.1
El m
etodo simplex en forma de tableau
xB
xN
TD
T cT B 1 N
cN
B
cTB B 1 b
xB
B 1 N
B 1 b
(7.8)
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 .
443
min.
s. a
x1 + x2 + 2x3
x1 + x2 x3
x1 + x2 + x3
x1 , x2 , x3
9
2
4
0.
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
x1
x2
x3
x4
x5
x6
TD
16
x4
x5
x3
444
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
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
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)
E 1
1
..
y1
.
..
1 yp1
yp
yp+1 1
.
..
.
..
ym
1
446
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
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
(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
el 5 y el 6 a la operaci
on
T
T Lm Pm L1 P1 .
Um Um1 Ek1 y
= y.
449
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
450
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
451
Ax = b
lxu .
(7.11)
Ax
x + x1
x x2
x, x1 , x2
=
=
=
b
u
l
0
452
(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
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 .
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
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 ).
455
2x1 + x2
x1 + x2
0
0
1
x3
x3
x1
x2
x3
10
4
4
6
4.
2x1 + x2 + x3 + x4
x1 + x2 x3
+
0
0
1
x4 ,
x5
x1
x2
x3
x5
=
=
10
4
4
6
4
0.
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
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
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 :
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
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
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
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
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
1
c2 = c2 a2 = 4 [1, 0]
= 3,
1
T
1
c4 = c4 a4 = 0 [1, 0]
=1
0
T
2
1
=
.
1
0
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
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
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
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
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
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
= 21
= 2
= 3
0.
0 0
1 0
0 1
"
,
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
=
=
=
1
7
4
0.
10x3
3x3
2x3
7x3
5x3
+
+
+
+
10x4
60x4 + x5
x4
4x4
+ x6
3x4
x1 , . . . , x6
=
=
=
=
10
2
1
5
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
x1
x1
x1
2x1
2x1
2x1
x2
+ x2
+ 3x2
+ x2
3x2
3x2
x1 , x2
3
13
16
8
6
0.
464
+ x4 = 10
= 6
x1 4
x2 4
x3 4
x4 12.
2x1 + x2
x1 + 2x2
x1 + x2
x1 , x2
8
6
6
0.
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
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)
(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
468
Captulo 8. Dualidad y an
alisis de sensibilidad
1
,
c=
3
1
a =
,
1
1
1
a =
0
0
y a =
.
1
(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
469
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)
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
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
cB
cA y =
cN
T
BT
NT
0
=
N
c
0.
Ademas
T 1
B b = y T b,
cT x = cB
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
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 .
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
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)
474
Captulo 8. Dualidad y an
alisis de sensibilidad
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)
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
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
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.
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
477
(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
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
479
8.3
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
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
cj = cj j ,
j > m, j = q,
y
cp = ,
donde
uT = eTp B 1 ,
j = uT aj
y = cq /q .
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
481
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
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
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
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 ,
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.
484
Captulo 8. Dualidad y an
alisis de sensibilidad
2x1 + x2
x1 + x2
0
0
1
x3
x3
x1
x2
x3
10
4
4
6
2.
2x1 + x2 + x3 + x4
x1 + x2 x3
+
0
0
1
x4 ,
x5
x1
x2
x3
x5
=
=
10
4
4
6
2
0.
2 1
.
B = [a1 , a3 ] =
1 1
La soluci
on,
x1
2/3
x2 6
x3 = 8/3 .
x4 0
x5
0
2 1
= B T cB =
1 1
1
2
=
1
1
3
1
3
1
3
23
"
1
c2 = c2 a2 = 4 [1, 0]
= 3;
1
T
1
c4 = c4 a4 = 0 [1, 0]
=1
0
T
2
1
=
.
1
0
485
0
= 0.
c5 = c5 a5 = 0 [1, 0]
1
T
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
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
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
487
aj xj + xa = b
(8.19)
jT
xj 0,
xa 0,
jT
y T aj 0,
y e.
jT
(8.20)
xT
xa
"
488
Captulo 8. Dualidad y an
alisis de sensibilidad
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
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
(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
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
1
c1 a1 = 2 [1, 3]
= 2;
1
T
491
1
=1
c3 a3 = 0 [1, 3]
0
T
0
= 3.
c4 a4 = 0 [1, 3]
1
T
= min
2 3
,
1 1
= 2,
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
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
(8.22)
493
z () =
T
cB
dTB
B 1 b = z (0 ) + ( 0 )dTB xB .
= max
min
max
1im
min
1im
,
bi /di : di > 0 ,
,
bi /di : di < 0 , = .
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:
0
0
5/2
x =
.
7/2
0
1/2
495
1
4
4
5
7
7
0.
4
3
5
2
2
7
0.
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
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
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.
"
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.
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,
x 0,
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
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
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
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.
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
9.1.2
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
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)
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.
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
504
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
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
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
m
m
cij xij
i=1 j=1
s. a
m
j=1
xij
m
xki = bi ,
i = 1, . . . , m,
k=1
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.
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
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
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
509
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
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
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
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
512
9.1.3.1
Implementaci
on pr
actica del m
etodo simplex
9.1.3.1.1
Paso 1. Asignaci
on de precios. Comprobaci
on de condiciones de
optimo
El
arbol maximal, dentro del metodo simplex, tambien se suele designar en la literatura especializada como
arbol b
asico.
5
Thread en ingles.
513
3
5
4
9
Figura 9.7
Digrafo o grafo correspondiente a los datos de la tabla 9.3
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
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.
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
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
+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) =
516
= min
min
Oek (C)=
{xek lek , } ,
min
Oek (C)=
{uek xek , } , uq lq .
Paso 4. Pivotaci
on. Actualizaci
on de las estructuras de datos
para ej C.
k s(q)
517
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
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
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
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 .
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
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.
1
1
1
A= 2
0
3
0
1
1
1
0
1
1
0
1
e2
e3
e4
Figura 9.11
Grafo correspondiente al problema del ejemplo 9.4
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
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
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 =
Oei (C)=
min
Oei (C)=
x1
1
x2 1
x3 = 4 .
x4
0
525
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
Iteraci
on 2. Paso 3
Denamos:
1 =
2 =
Oei (C)=
min
Oei (C)=
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
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.
527
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
(9.5)
528
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
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].
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)
X = x = x1T , . . . , xTN
T
: Ajj xj = bj , xj 0, j = 1, . . . , N
SPj ( 0 )
min.
cTj T0 A0j xj
s. a xj Xj .
(9.8)
530
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)
A0j
0 + ATjj
j cj
AT0j
T
j cj AT0j
0
ATjj
j = 0.
x
T
j = 0,
x
(9.10a)
(9.10b)
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.
531
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 .
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
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)
(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
min.
T0 A0 x : x X .
cT
533
Este
no es otro que el problema que introducamos en (9.8). Veamos los posibles resultados
0 ):
que podemos obtener al resolver SP (
q =
y
eqm1
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 .
534
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)
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
(9.15)
535
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
536
= 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
(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 ,
537
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
= 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
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 (
539
A11
1 1
=
0 1
y A22
1 1
=
.
1 1
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,
h1
6
h2 4
11 = 1 .
21
1
540
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
c1T v 11
0
0
= [2, 1]
= 0 y cB4 = cT2 v 21 = [3, 1]
= 0.
0
0
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.
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
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
= 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
cB1 = 0, cB2 =
cT2 v 22
5
= [3, 1]
= 15, cB3 = c1T v 11 = 0 y cB4 = cT2 v 21 = 0.
0
541
542
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:
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.
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
aq =
1 1
0 1
A01 v 13
1 =
0
1
0
6
0
6
0
= 1 .
0
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
01
1/6
0 1/6
0
12
2
0
T
2 = B cB =
=
.
1
0
0
1
0
0
0
2
0
0
0
1
0
0
543
544
Iteraci
on 3. Paso 2
Planteemos los nuevos subproblemas:
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.
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
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
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
9.3
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)
547
548
bobinas
bobinas
bobinas
bobinas
de
de
de
de
25,5
22,5
20
15
pulgadas,
pulgadas.
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
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.
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
Iteraci
on 2. Paso 4
Determinemos la columna que ha de salir de la base:
= min
= min
16 10 5
,
,
2/3 1/4 1/6
= 24.
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
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
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
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
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.
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)
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
558
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
En la p
agina 562 se explica lo que es esta estructura.
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
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.
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)
AT y + ez c.
(10.3)
562
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
563
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
(10.6a)
X
1
(x)
=
x
=
Tx
.
e Xx
(10.6b)
y su inversa
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
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
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
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
min. c
x = 0
s. a A
= 1,
eT x
0.
x
566
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
T x
min. c
x = 0
s. a A
S (e/n, ),
x
(10.7)
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.
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.
= 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
[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:
&
= 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
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
"
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
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
571
n
n
cT x
ln xj =
ln
f (x, c) = n ln cT x
xj
j=1
j=1
10.3
(10.10)
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
572
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
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)
574
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
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,
= 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)
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
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 .
cT x = uk
T
Ax = uk
T
b.
577
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
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.
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
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
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
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
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
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
x
[A|v]
=b
u
x 0, u 0.
(10.15)
581
Es f
acilmente comprobable que
x0
=
x
u0
x0
=
1
> 0,
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
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
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
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
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 ,
10.4.4
M
etodo del empuje potencial
j=1
ln xj .
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)
584
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.
k
d
x
'T
g = 0,
=
De aqu que
pk
T
g
.
gT g
T
k
g
k
p
k
dx = p
g.
gT g
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.
585
n
n
cT x
ln xj =
ln
f (x, c) = n ln cT x
xj
j=1
j=1
M
etodo de funci
on barrera logartmica
n
ln xj
j=1
s. a Ax = b,
(10.17)
x > 0,
586
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)
X 2 AT
A
0
c X 1 e
=
.
0
#
$
2
X d = AT c X 1 e .
587
= AX 2 AT
1
AX 2 c X 1 e .
1
1 k
AXk e.
dx + Xk I Xk AT AXk2 AT
10.5
El m
etodo dual de escalado afn
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
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)
(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)
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 .
589
k
dw
= ASk2 AT
1
ASk1 duk .
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.
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,
k = min
i
sik
: dski < 0 ,
dski
590
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.
x1 x2 + x3
= 15
x2
+ x4 = 15
x1 , x2 , x3 , x4 0.
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
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
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
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
0 = min
i
0,99s0i
: ds0i < 0
d0si
0,99 1
= 0,04207.
23,53211
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.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
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
Ax = b
0 x u,
AT w + s v = c
s 0, v 0,
594
10.5.3
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
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
M
etodo de funci
on barrera logartmica
595
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
j=1
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
Ax = b
x0
(10.29)
y su dual
maximizar bT w
sujeta a
AT w + s = c
s 0,
(10.30)
596
minimizar cT x
n
ln xj
j=1
sujeta a
Ax = b
> 0,
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
597
(10.32)
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
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)
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)
k
2 AT
dw
= AD
k
1
ASk1 v k
k
dks = AT dw
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
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
Amplitud de movimiento
10.6.2
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.
601
T
/n,
10.6.2.1
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.
w1
w1 +
w1
+ s1
w2 + s2
+ s3
w2 + s4
s1 , s2 , s3 , s4
= 2
= 1
= 0
= 0
0.
602
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
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
+
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
=
.
604
* = 1,0
y
dk =
max
1, dksi /sik
* =
1
= 0,086282.
11,4740/0,99
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
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.
605
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,
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,
> 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
> b Ax0
>
se supone que
$T
w0
AT w 0 + s0 c
>
#
T
AT w 0 + s0 c
> b Ax0
$T
x0 ,
T
w ,
[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
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
607
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
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
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
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 =
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
Ax = b
x q,
610
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.
614
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,
615
11.1
Formulaci
on y ejemplos de programas lineales en variables
enteras
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
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
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,
617
618
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.
619
(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
11.1.1
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
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}
xij 1.
{(i,j)E:iU,jV \U }
1
622
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.
623
(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
o por,
(ii)
(lj
k
k=0 2 tkj , donde las
(lj
k
lj +1 1
k=0 2 = 2
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
k=0
(6
k
k=0 2 tkj
107.
11.2
Resoluci
on gr
aca de programas enteros
Ax + Gy b
x, y 0,
ai+1
,
ai
624
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
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
11.4
626
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)
(P R)
con las propiedades siguientes:
SP R S
(R1)
y
cT x zP R (x)
(R2)
para x S.
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.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
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
(6
4
.
0
= 1}. Como
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
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
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
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
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
632
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
donde Q = {x Zn : A2 x b2 , x 0},
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
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 ,
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
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
(P EM )
Ax + Gy b
x, y 0
s. a
x X Zn ,
y p ,
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
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
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)
max. cT x : x S .
(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
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
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
(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
641
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+
maximizar
s. a
x1 + 2x2 + x3
= 4
5x1 + x2
+ x4
= 20
2x1 2x2
+ x5 = 7
x1 , x2 Z+ ; x3 , x4 , x5 0.
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
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 =
T
(1)
(1)
332
11
36
11
40
11
75
,
11
(1)
= [x0 , x1 , . . . , x5 ] =
x6 Z+ .
332 36 40
11 , 11 , 11 ,
0, 0,
75
11
. El
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
k = 1, . . . , m, xn+i Z+ ,
jH (i)
(i+1)
(i)
n+i
SR
= SR x0 , x
:
fkj xj xn+i = fk0 , x 0 .
(i)
jH
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 .
x7 Z+ .
644
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 .
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].
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.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
fij xj +
fi0
1 fi0
a
ij yj
(jH\HI :
aij >0)
(1 fij )xj
fi0
1 fi0
a
ij yj fi0 .
(jH\HI :
aij <0)
12.2
Algoritmos de ramicaci
on y acotamiento o branch and
bound
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
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)
A este
arbol lo denominaremos en lo sucesivo
arbol enumerativo o
arbol de enumeraci
on.
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 )
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
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.
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)
(P E)
max. cT x : x S ,
donde S = {x Zn : Ax b, x 0} ,
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
(i)
max. cT x : x SP L ,
(i)
650
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)
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
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
652
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:
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
z (i) z P E
,
z (i) z(i)
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
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
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
(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)
656
apq
si a
pq < 0 y xq = lq
(12.4a)
1 fp0
apq
si a
pq > 0 y xq = uq .
(12.4b)
o por
657
si a
pq > 0 y xq = lq
(12.5a)
fp0
a
pq
si a
pq < 0 y xq = uq .
(12.5b)
o por
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 .
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
PD = min
j, a
pj <0
a
0j fp0 /
apj ,
jM
max{
a0j , a
0j fp0 /
apj }, j J
si xj = uj ,
(12.7b)
(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
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)
659
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)
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
+ 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)
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
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 .
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
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
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
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.
*** 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)=
-.0017 seg.
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
707.000000000000
*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .L
.Inferior. .L
.Superior. Val.Dual.
663
664
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
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
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
e) minimizar
s. a
x1 + x2 +
x2 69
7
5
x1 = 6
x2 70
666
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.
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
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 .
maximizar
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
672
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} .
xS
A.2
inf {x : x S} .
Aplicaciones
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
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.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
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
676
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
|p
|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]
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
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
fn (x)
/
1
n
1
n
Figura A.2
Gr
aca de una de las funciones de una sucesi
on de Cauchy
678
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 .
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
679
x E;
x E y K.
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
Matrices
a11 a1n
A = ... . . . ... K mn .
am1 amn
Los elementos aij estan denidos por
g(ej ) =
m
1 j n.
aij f i ,
i=1
a1j
a2j
..
.
amj
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
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
;
.
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
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 =
1i,jn
A2 =
sup
0 =x
n
xT AT Ax
xT x
1/2
A.4 Matrices
683
1jn
A = max
1im
m
i=1
n
|aij | y
|aij | .
j=1
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
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
[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 ,
685
veric
andose que P x2 x2 y que
x P x2 =
A.5
A.5.1
min
x y2 .
y Im(P )=F
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
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.
{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 .
A.5.3
Formas cuadr
aticas
688
q(x) =
yi2
i=1
p+q
yi2 .
i=p+1
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 .
1 y12 + + n yn2
,
y12 + + yn2
xT Qx
max (Q) .
xT x
689
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
n. Para x
= 0 se tendr
Demostracio
a que
q(x) =
i
>
aii xi2
j =i
|aij | |x2 |
|aij ||xi ||xj |
i
j =i
i
aij xi xj
j =i
i
j =i
j =i
1
|aij | (|xi | |xj |)2 0.
2 i j =i
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
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
x()
$
L
LN
A.7
Teorema de la proyecci
on
A.8 Funciones
693
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
A.8
Funciones
694
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
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
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
A.8 Funciones
695
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
696
Proposici
on A.4 (Condiciones sucientes de segundo orden) Sea f C 2 una funci
on
A.9
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.
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
T
x.
aT y = lim a(k)
kH
T
T
x = aT x.
Apendice
ERRORES DE REDONDEO Y
ARITMETICA
DE PRECISION
FINITA
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
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 ).
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
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
702
Los resultados que se obtendran al hacerlo funcionar en un ordenador personal seran los
siguientes.
beta=
2.0000000000000000 , t=
53.0000000000000000
703
B.2
Precisi
on de un ordenador. Errores de redondeo
(B.1)
y la aplicaci
on f l() : G F de tal forma que
'
f l(x) =
(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
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.
y y2 = et .
|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
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
&
&
&
&
&
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
B.3
Aritm
etica en un ordenador
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
=
=
=
=
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
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
708
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!
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
709
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
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
C.1
Lnea
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
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
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:
Yii , admitancia propia del nudo i (con respecto claro esta a la lnea entre i y j).
C.1 Lnea
713
Pi = Real
n
Vi
j=1
Qi = Ima. Vi
Yij Vj
n
Yij Vj
j=1
n
j=1
n
Desarrollando la expresi
on entre llaves se llega a:
|Vi | (cos i + i sen i )
j=1
n
j=1
n
j=1
n
j=1
714
n
j=1
n
j=1
Qi = |Vi |
n
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
j=1
j=i
Qi = |Vi |
n
n
j=1
j=i
j=1
j=i
n
j=1
j=i
C.1.2
(C.1)
)*
Isij
( )* +
Ipij
(C.2)
C.1 Lnea
715
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
= |Vi |2 |Vi ||Vj | cos(i j ) i|Vi ||Vj | sen(i j ) Ysij cos sij i sen sij
= |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
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
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
717
&
Sji
Vi
Ysij + Vj Ypij .
Iji = = Vj
Vj
a
&
&
Yp
Ys
Ysij
Iij =
+ 2ij Vi + ij Vj
2
a
a
a
&
%
Ys
Iji = ij Vi + Ysij + Ypij Vj .
a
(C.3)
(C.4)
I = |Ynudos |V.
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
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
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
(C.5)
(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
Figura C.5
Esquema en del transformador entre i y j con el regulador conectado a j
C.2.3
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
720
n
Pj = |V j|2
i=1
i=j
Qj = |Vj |
n
n
i=1
i=j
i=1
i=j
n
i=1
i=j
Regulador en el secundario
n
Pi = |Vi |2
j=1
j=i
Qi = |Vi |
n
n
j=1
j=i
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
j=1
j=i
&
n %
Gpij + Gsij
n
|Vi |
i=1
i=j
|Vj |
n
|Vi |
i=1
i=j
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 |
|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
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
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
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
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
:
:
:
:
:
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,
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.
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
4
5
4
Cgj xgj +
j=1
4
Fg wg .
g=1
i=j+1 j=1
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
(D.1)
(D.2)
(D.3)
1,0204x44 = 2300
(D.4)
w1 + w2 + w3 + w4 850
(D.5)
1,002z21 75
(D.6)
(D.7)
(D.8)
(D.9)
(D.10)
(D.11)
b2 b1 + x12 + x22 z32 z42 z52 + y32 + y42 + y52 w2 1,001y21 + 1,002z21 = 1.425 (D.12)
728
(D.13)
(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
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
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
65.6958680270542
118
El.Eta
1
3
6
10
12
14
18
25
30
33
37
41
44
52
60
67
74
81
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
.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
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
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
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
.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
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
735
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
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
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
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
738
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
122
El.Eta
1
3
6
10
12
14
18
23
26
31
37
41
45
50
53
57
63
68
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
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
.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
+ 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
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.
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
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
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
743
maximizarla.
D.1.3.1
An
alisis de los valores duales de las condiciones
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
D.2
Gesti
on operativa de una renera de crudo de petr
oleo
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
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
Instalaciones donde se mejora el octanaje de las gasolinas o se realizan otros procesos qumicos.
746
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
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
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
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
4,0
-12,6
-1,80
-1,3
4,3
3,8
24,0
0,5
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
-3,1
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
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
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
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
751
D.2.2
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
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
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
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
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
:
:
:
:
:
:
:
:
:
:
:
:
:
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 .
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
x15 0,3f01 = 0.
756
(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.
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
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
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
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
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
761
D.2.4
An
alisis de sensibilidad
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
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
763
764
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
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
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
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)
E.1.1
Clave NAME
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
Condici
on Tipo
E
G
L
N
N
Funci
on Objetivo
Libre
aT x b1
y aT x b1 ,
768
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)
E.1.3.1
Clave INT
769
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)
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
(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
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
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)
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.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
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
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.
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
FILA1
FILA1
FILA1
774
*** 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
-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
.00000000
.00000000
1.0000000
4.0000000
6.0000000
4.0000000
.000
-3.00
.000
.0002 segundos
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
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
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
777
778
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
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
E.3.2
.00000000
.00000000
.00000000
.00000000
.00000000
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
.000
.000
.000
.000
.000
.0016 segundos
7x1 + 2x2
x1 + 2x2 4
5x1 + x2 20
2x1 2x2 7
2.
x Z+
Demos-bb
OBJ
ROW2
OBJ
ROW2
7
5
2
1
ROW1
ROW2
ROW3
4
20
-7
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
4
0
0
4
12
Paso
Pivote
.35D+01 -.20D+01
.10D+01 .25D+01
.36D+01 .22D+01
El.Eta
0
4
8
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
.000
.000
.0595 seg.
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
4.0000000
.00000000
.0591 segundos
Ninguno
Ninguno
-3.00
.000
E.3 Resultados
781
-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
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
.000
.000
Valor
Func. Obj.
2.9800000D+01
2.8000000D+01
.0019 seg.
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
Ninguno
Ninguno
28.0000000000000
E.3 Resultados
783
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
E.3.3
4.0000000
.00000000
Ninguno
Ninguno
-3.00
.000
.0489 segundos
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
*
*
*
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
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
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
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
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
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
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)=
.0598 seg.
* Nueva soluci
on entera; z(PE)=
.0512 seg.
E.3 Resultados
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
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
.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
791
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
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 =
+
+
+
+
+
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
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
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
+
+
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
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 =
798
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)
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
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.
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
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)
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
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
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
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
\
\
\
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
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
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),
+
+
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
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
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
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()
+
/)
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
Ax = b
lxu,
(F.1)
aij =
814
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
F.2
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
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
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.
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
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
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
0.05 segundos
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
819
/***********************************************************/
/*
*/
/* 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();
}
/*************************************************************/
/*
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];
*/
*/
821
822
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;
/*************************************************************/
/*
XNINAR()
*/
/*
*/
/*
Comprobaci
on de los datos de capacidad, coste, from,
*/
/* to y c
alculo de los costes m
aximo y m
nimo.
*/
/*************************************************************/
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
*/
void xnsmpx()
{
void xninit(),xnpeny(),xndual(),xnobjv(),prext();
int xnph0();
int numrtn;
double cpn,pennew;
xninit();
/* Penalizaciones iniciales
void xninar()
{
double fabs();
int j;
double imic,imac,flow;
*/
for(j=1,flow=0.0;j<=m;j++){
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
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;
*/
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;
*/
*/
*/
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;
*/
*/
mxfapf = tolbg;
/* Diferencia en profundidades de los nudos kfr y kto
*/
*/
*/
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;
}
}
}
*/
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
*/
icom = kfr;
}
maxf = (mxfapf < maxfk) ? mxfapf : maxfk;
826
else{
/* > Paso degenerado ?
*/
/* Arco karc es no b
asico en su cota inferior
*/
maxf = 0.0;
if(hkarc < 0.0){
idk = arc[lnod];
h[idk] = -h[idk];
}
*/
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 ?
*/
*/
*/
*/
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
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
*/
/*************************************************************/
*/
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){
/* El nudo ra
z del BEP no cambia de sucesor;
se actualiza solo el u
ltimo nudo del sub
arbol
/* Actualizaci
on del u
ltimo nudo del sub
arbol
*/
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.
*/
/*************************************************************/
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;
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];
}
*/
for(i=0;i<n;i++)
if(h[i] < 0) objv += (-h[i])*c[i];
}
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
*/
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 */
/*************************************************************/
/*
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);
{
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,"%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;
}
/*************************************************************/
/*
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
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
*/
#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 ***
*/
*** 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
*** 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>
*/
3. Programa Crout de la p
agina 30
*** Descomposici
on ***
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};
*/
/*
*** Descomposici
on ***
*/
834
#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};
*/
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 ***
*/
*** 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 (){
/*
*/
#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 ***
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 ***
*/
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;
}
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;}
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 ***
*/
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
#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 ***
*/
/* *** 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;
}
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");
*/
double prod (int k, double *a, int n, double *b, int nn);
/*
*** Reducci
on QA = R ***
return 0;
}
<stdio.h>
<math.h>
<float.h>
<stdlib.h>
M
Mm1
N
Nm1
TAU
3
4
3
4
0.000001
G.1 Codigos en C
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 (){
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);
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 ***
*/
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;
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
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};
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
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;
}
/*
*** 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
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];
}
}
}
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
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
/*
*** Reducci
on
|R
R |
QCP=| 11 12| ***
|0
0 |
*/
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;
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);
}
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
*/
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
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};
/*
*/
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};
/*
841
/*
*/
*/
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};
/*
*/
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>
*** Generaci
on aleatoria de los datos del problema ***
*/
842
}
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));
/*
*/
{
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;
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];
}
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];
}
}
}
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];
}
844
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);
}
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;
}
}
846
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 (){
double
main (){
float
/*
*/
*/
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
*/
#include <stdio.h>
#include <math.h>
#include <float.h>
main (){
main (){
/*
float
/*
double
x=1, x0;
return 0;
}
*/
*/
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;
return 0;
}
double fx(double x)
{
double f;
847
848
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 (){
/*
}
return 0;
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
/*
*/
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.
fx0 = fx(x0);
fx1 = fx(x1);
fx2 = fx(x2);
/*
*/
/*
-- 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
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);
849
*/
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
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);
*** 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);
/*
*/
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];
}
<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);
*/
/*
*/
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;
}
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
<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);
*/
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;
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;
}
/*
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);
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);
/*
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
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;
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;
<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
=
=
=
=
=
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;
}
*/
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;
{
int
i, j, k, l;
double beta, sigma, sum, dmax, wj;
/*
double *vector(int n)
{
double *m;
void
main (){
int
double
*** Reducci
on QA = R ***
*/
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);
}
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
=
=
=
=
=
=
=
=
amu = 0.1;
for (i=0; i<=nm1; i++) x[i] = 1;
/*
}
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
}
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;
}
}
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
*/
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
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
!
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
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
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
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
!
data a/1.,10.,20.,10.,1.,30.,20.,30.,1./
!
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)
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()
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))
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
!
!
!
integer , intent(in) :: n
real , intent(inout) :: a(n)
real , intent(inout) :: b(n)
!
!
do i = 1,n
aux = a(i)
integer :: i
real :: aux
:: j
t
a(1)
:: b(1)
!
!
!
861
862
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
!
!
!
!
!
!
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
!
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
!
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
!
!
!
!
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
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 ***
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
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
!
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
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
!
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
= 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
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
::
::
::
::
::
!
!
!
!
!
!
!
!
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
!
!
!
!
865
!
!
!
!
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
!
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.
!
!
!
! 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)
!
END PROGRAM GaussSeidel
3. Programa Sor de la p
agina 165.
&
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
=
=
=
=
&
!
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
!
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
!
!
!
868
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
!
G.2.4
C
odigos del captulo 4
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/
!
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
2. Programa Newt de la p
agina 290.
PROGRAM Newt
!
real(kind=2) x
real(kind=2) , intent(in) :: h
implicit none
!
real :: x, x0, tol
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, 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 ***
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.
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
!
implicit none
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
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), 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)
!
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
!
return
END SUBROUTINE derfxdf
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)
integer , intent(in) :: n
real(kind=2) , intent(out) :: f(n)
real(kind=2) , intent(in) :: x(n)
*** 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
871
872
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
!
=
=
=
=
=
=
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)
!
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
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
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
!
!
!
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
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
!
!
!
!
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)
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
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)
-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
!
!
*** 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
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)
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
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) =
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
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
(H.1)
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
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) .
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
1
,
i+j1
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
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
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
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
885
886
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
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 |}.
0
.
.
.
1 la j
b=
0
.
..
0
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
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.
%
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
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
891
892
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
893
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
http://www.cplex.com
OSL
http://www.research.ibm.com/osl
I.2
Software de dominio p
ublico
894
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
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
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.
Bibliografa
901
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
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.
Bibliografa
909
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.
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
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 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
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
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
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
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
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
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
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
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
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
928
Indice de materias
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
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