Introducción A La Física Matemática. Apuntes - José Rogan, Victor Muñoz - 2ed
Introducción A La Física Matemática. Apuntes - José Rogan, Victor Muñoz - 2ed
Introducción A La Física Matemática. Apuntes - José Rogan, Victor Muñoz - 2ed
net
Apuntes de un curso de
www.elsolucionario.net
INTRODUCCIÓN A LA FÍSICA
MATEMÁTICA
segunda edición
José Rogan C.
Vı́ctor Muñoz G.
www.elsolucionario.net
www.elsolucionario.net
www.elsolucionario.net
Índice
I Análisis Vectorial. 1
1. Análisis vectorial. 3
1.1. Definiciones, una aproximación elemental. . . . . . . . . . . . . . . . . . . . . 3
1.2. Rotación de los ejes de coordenadas. . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1. Vectores y espacios vectoriales. . . . . . . . . . . . . . . . . . . . . . . 12
1.3. Producto escalar o producto punto. . . . . . . . . . . . . . . . . . . . . . . . . 13
www.elsolucionario.net
1.3.1. Invariancia del producto escalar bajo rotaciones. . . . . . . . . . . . . . 16
1.4. Producto vectorial o producto cruz. . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5. Productos escalar triple y vectorial triple. . . . . . . . . . . . . . . . . . . . . . 21
1.5.1. Producto escalar triple. . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.5.2. Producto vectorial triple. . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.6. Gradiente, ∇ ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.6.1. Una interpretación geométrica . . . . . . . . . . . . . . . . . . . . . . . 26
~
1.7. Divergencia, ∇·. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.7.1. Una interpretación fı́sica. . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.8. Rotor, ∇×~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.9. Aplicaciones sucesivas de ∇. ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.10. Integración vectorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.10.1. Integrales lineales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.10.2. Integrales de superficie. . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.10.3. Integrales de volumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.10.4. Definiciones integrales de gradiente, divergencia y rotor. . . . . . . . . . 39
1.11. Teorema de Gauss. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.11.1. Teorema de Green. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.11.2. Forma alternativa del Teorema de Gauss. . . . . . . . . . . . . . . . . . 42
1.12. El Teorema de Stokes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.12.1. Forma alternativa del Teorema de Stokes. . . . . . . . . . . . . . . . . 44
1.13. Teorı́a potencial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
1.13.1. Potencial escalar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
1.13.2. Termodinámica, diferenciales exactas. . . . . . . . . . . . . . . . . . . . 47
1.13.3. Potencial vectorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1.14. Ley de Gauss y ecuación de Poisson. . . . . . . . . . . . . . . . . . . . . . . . 49
1.14.1. Ecuación de Poisson. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1.15. La delta de Dirac. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.15.1. Representación de la delta por funciones ortogonales. . . . . . . . . . . 56
iii
www.elsolucionario.net
iv ÍNDICE
www.elsolucionario.net
2.6.2. Definición de tensores de rango dos. . . . . . . . . . . . . . . . . . . . . 76
2.6.3. Suma y resta de tensores. . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.6.4. Convención de suma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.6.5. Simetrı́a–Antisimetrı́a. . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2.6.6. Spinores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
2.7. Contracción y producto directo. . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.7.1. Contracción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.7.2. Producto Directo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.7.3. Convención de la suma. . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.7.4. Contracción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.8. Regla del cociente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.9. Pseudo tensores y tensores duales. . . . . . . . . . . . . . . . . . . . . . . . . . 81
2.9.1. Sı́mbolo de Levi-Civita. . . . . . . . . . . . . . . . . . . . . . . . . . . 85
2.9.2. Tensores duales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
2.9.3. Tensores irreducibles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
2.10. Tensores no cartesianos, diferenciación covariante. . . . . . . . . . . . . . . . . 87
2.10.1. Tensor métrico, subida y bajada de ı́ndices. . . . . . . . . . . . . . . . 87
2.10.2. Derivadas y sı́mbolos de Christoffel. . . . . . . . . . . . . . . . . . . . . 89
2.10.3. Derivada covariante. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
2.10.4. Los sı́mbolos de Christoffel como derivadas del tensor métrico. . . . . . 91
2.11. Operadores diferenciales de tensores. . . . . . . . . . . . . . . . . . . . . . . . 91
2.11.1. Divergencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.11.2. Laplaciano. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2.11.3. Rotor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3. Determinantes y matrices. 95
3.1. Determinantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.1.1. Ecuaciones lineales homogéneas. . . . . . . . . . . . . . . . . . . . . . . 95
3.1.2. Ecuaciones lineales no homogéneas. . . . . . . . . . . . . . . . . . . . . 96
www.elsolucionario.net
ÍNDICE v
www.elsolucionario.net
3.3.4. Matriz inversa A−1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
3.3.5. Matriz transpuesta, Ã. . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
3.3.6. Ángulos de Euler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
3.3.7. Propiedades de simetrı́a. . . . . . . . . . . . . . . . . . . . . . . . . . . 116
3.4. Matrices Hermı́ticas, matrices unitarias. . . . . . . . . . . . . . . . . . . . . . 117
3.4.1. Definiciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
3.4.2. Matrices de Pauli y de Dirac. . . . . . . . . . . . . . . . . . . . . . . . 119
3.5. Diagonalización de matrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
3.5.1. Momento de la matriz de inercia. . . . . . . . . . . . . . . . . . . . . . 120
3.5.2. Autovectores y autovalores (eigenvector y eigenvalues). . . . . . . . . . 121
3.5.3. Matrices hermı́ticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
3.5.4. Matrices antihermı́ticas. . . . . . . . . . . . . . . . . . . . . . . . . . . 124
3.5.5. Funciones de matrices. . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
3.6. Matrices normales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
3.6.1. Modos normales de vibración. . . . . . . . . . . . . . . . . . . . . . . . 129
3.6.2. Sistemas con condiciones patológicas. . . . . . . . . . . . . . . . . . . . 131
vi ÍNDICE
www.elsolucionario.net
5. Ecuaciones diferenciales de primer orden. 173
5.1. Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.2. Ecuaciones de primer orden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.3. Ecuaciones con variables separables. . . . . . . . . . . . . . . . . . . . . . . . . 177
5.4. Ecuaciones que se reducen a ecuaciones de variables separables . . . . . . . . . 179
5.4.1. Ecuaciones homogéneas. . . . . . . . . . . . . . . . . . . . . . . . . . . 180
5.4.2. Ecuaciones que se reducen a homogéneas. . . . . . . . . . . . . . . . . . 181
5.5. Ecuaciones lineales de primer orden. . . . . . . . . . . . . . . . . . . . . . . . 182
5.5.1. Ecuaciones lineales no homogéneas. . . . . . . . . . . . . . . . . . . . . 183
5.5.2. Ecuaciones de Bernoulli y Riccati. . . . . . . . . . . . . . . . . . . . . . 184
5.6. Ecuaciones en diferenciales totales. . . . . . . . . . . . . . . . . . . . . . . . . 186
5.6.1. Factor integrante. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
5.7. Teoremas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
ÍNDICE vii
www.elsolucionario.net
8. Elementos del sistema operativo unix. 239
8.1. Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
8.2. Ingresando al sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
8.2.1. Terminales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
8.2.2. Login. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
8.2.3. Passwords. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
8.2.4. Cerrando la sesión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
8.3. Archivos y directorios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
8.4. Órdenes básicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
8.4.1. Archivos y directorios. . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
8.4.2. Órdenes relacionadas con directorios. . . . . . . . . . . . . . . . . . . . 245
8.4.3. Visitando archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
8.4.4. Copiando, moviendo y borrando archivos. . . . . . . . . . . . . . . . . 246
8.4.5. Espacio de disco. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
8.4.6. Links. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
8.4.7. Protección de archivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
8.4.8. Filtros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
8.4.9. Otros usuarios y máquinas . . . . . . . . . . . . . . . . . . . . . . . . . 256
8.4.10. Fecha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
8.4.11. Transferencia a diskettes. . . . . . . . . . . . . . . . . . . . . . . . . . . 256
8.4.12. Diferencias entre los sistemas. . . . . . . . . . . . . . . . . . . . . . . . 257
8.5. Shells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
8.5.1. Variables de entorno. . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
8.5.2. Redirección. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
8.5.3. Ejecución de comandos. . . . . . . . . . . . . . . . . . . . . . . . . . . 260
8.5.4. Aliases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
8.5.5. Las shells csh y tcsh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
8.5.6. Las shell sh y bash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
8.5.7. Archivos de script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
www.elsolucionario.net
viii ÍNDICE
www.elsolucionario.net
9.1. Estructura básica de un programa en C++. . . . . . . . . . . . . . . . . . . . 283
9.1.1. El programa más simple. . . . . . . . . . . . . . . . . . . . . . . . . . . 283
9.1.2. Definición de funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . 284
9.1.3. Nombres de variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
9.1.4. Tipos de variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
9.1.5. Ingreso de datos desde el teclado. . . . . . . . . . . . . . . . . . . . . . 288
9.1.6. Operadores aritméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . 288
9.1.7. Operadores relacionales. . . . . . . . . . . . . . . . . . . . . . . . . . . 289
9.1.8. Asignaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
9.1.9. Conversión de tipos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
9.2. Control de flujo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
9.2.1. if, if... else, if... else if. . . . . . . . . . . . . . . . . . . . . . 292
9.2.2. Expresión condicional. . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
9.2.3. switch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
9.2.4. for. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
9.2.5. while. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
9.2.6. do... while. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
9.2.7. goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
9.3. Funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
9.3.1. Funciones tipo void. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
9.3.2. return. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
9.3.3. Funciones con parámetros. . . . . . . . . . . . . . . . . . . . . . . . . . 300
9.3.4. Parámetros por defecto. . . . . . . . . . . . . . . . . . . . . . . . . . . 303
9.3.5. Ejemplos de funciones: raı́z cuadrada y factorial. . . . . . . . . . . . . . 304
9.3.6. Alcance, visibilidad, tiempo de vida. . . . . . . . . . . . . . . . . . . . 307
9.3.7. Recursión. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
9.3.8. Funciones internas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
9.4. Punteros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
9.5. Matrices o arreglos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
www.elsolucionario.net
ÍNDICE ix
www.elsolucionario.net
9.8.6. Constructor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
9.8.7. Destructor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
9.8.8. Arreglos de clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
9.9. Sobrecarga. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
9.9.1. Sobrecarga de funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . 332
9.9.2. Sobrecarga de operadores. . . . . . . . . . . . . . . . . . . . . . . . . . 332
9.9.3. Coerción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
9.10. Herencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
9.11. Compilación y debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
9.11.1. Compiladores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
9.12. make & Makefile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
10.Gráfica. 339
10.1. Visualización de archivos gráficos. . . . . . . . . . . . . . . . . . . . . . . . . . 339
10.2. Modificando imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
10.3. Conversión entre formatos gráficos. . . . . . . . . . . . . . . . . . . . . . . . . 340
10.4. Captura de pantalla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
10.5. Creando imágenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
10.6. Graficando funciones y datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
10.7. Graficando desde nuestros programas. . . . . . . . . . . . . . . . . . . . . . . . 343
x ÍNDICE
www.elsolucionario.net
11.6.9. Manejo de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
ÍNDICE xi
www.elsolucionario.net
12.9.1. Estilos de página. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
12.9.2. Corte de páginas y lı́neas. . . . . . . . . . . . . . . . . . . . . . . . . . 397
12.10.Figuras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
12.10.1.graphicx.sty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
12.10.2.Ambiente figure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
12.11.Cartas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
12.12.LATEX y el formato pdf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
12.13.Modificando LATEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
12.13.1.Definición de nuevos comandos. . . . . . . . . . . . . . . . . . . . . . . 406
12.13.2.Creación de nuevos paquetes y clases . . . . . . . . . . . . . . . . . . . 411
12.14.Errores y advertencias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
12.14.1.Errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
12.14.2.Advertencias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
www.elsolucionario.net
xii ÍNDICE
www.elsolucionario.net
www.elsolucionario.net
Índice de figuras
www.elsolucionario.net
1.7. Producto escalar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.8. Ley distributiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.9. Un vector normal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.10. La ley de los cosenos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.11. Momento angular. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.12. Paralelogramo que representa el producto cruz. . . . . . . . . . . . . . . . . . 19
1.13. Paralelepı́pedo que representa el producto escalar triple. . . . . . . . . . . . . 22
1.14. Triple producto cruz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.15. Gradiente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.16. Gradiente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.17. Diferenciación de un vector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.18. Diferencial paralelepı́pedo rectangular (en el primer octante). . . . . . . . . . . 29
1.19. Circulación alrededor de un loop diferencial. . . . . . . . . . . . . . . . . . . . 32
1.20. Regla de la mano derecha para la normal positiva. . . . . . . . . . . . . . . . . 38
1.21. Paralelepı́pedo rectangular diferencial con el origen en el centro. . . . . . . . . 40
1.22. Flujo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.23. Circulación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
1.24. Posible camino para hacer el trabajo. . . . . . . . . . . . . . . . . . . . . . . . 46
1.25. Formulaciones equivalentes para una fuerza conservativa. . . . . . . . . . . . . 47
1.26. Ley de Gauss. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
1.27. Exclusión del origen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
1.28. Sucesión a la delta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1.29. Sucesión a la delta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
1.30. Sucesión a la delta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
1.31. Campo y fuente puntual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
xiii
www.elsolucionario.net
www.elsolucionario.net
4.3. Octeto bariónico diagrama de peso para SU(3). . . . . . . . . . . . . . . . . . 147
4.4. Separación de masa bariónica. . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
4.5. Representación de SU(3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
4.6. Molécula Diatómica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
4.7. Simetrı́a D2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
4.8. Operaciones de simetrı́a en un triángulo equilátero. . . . . . . . . . . . . . . . 166
4.9. Operaciones de simetrı́a sobre un triángulo. . . . . . . . . . . . . . . . . . . . 167
4.10. Rutenoceno, (C5 H5 )2 Ru. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Parte I
www.elsolucionario.net
Análisis Vectorial.
1
www.elsolucionario.net
www.elsolucionario.net
www.elsolucionario.net
Capı́tulo 1
Análisis vectorial.
versión final 2.05-2609031
www.elsolucionario.net
En ciencia e ingenierı́a encontramos frecuentemente cantidades que tienen magnitud y
sólo magnitud: la masa, el tiempo o la temperatura. Estas cantidades las llamamos escala-
res. En contraste, muchas cantidades fı́sicas interesantes tienen magnitud y, adicionalmente,
una dirección asociada. Este segundo grupo incluye el desplazamiento, la velocidad, la ace-
leración, la fuerza, el momento, el momento angular. Cantidades con magnitud y dirección
serán llamadas cantidades vectoriales. Usualmente, en tratamientos elementales, un vector
es definido como una cantidad que tiene magnitud y dirección. Para distinguir vectores de
escalares, identificaremos las cantidades vectoriales con una flecha arriba, V~ , o bien, con letra
en “negrita”, esto es, V.
Un vector puede ser convenientemente representado por una flecha con largo proporcional
a la magnitud. La dirección de la flecha da la dirección del vector, el sentido positivo de la
dirección es indicado por la punta. En esta representación la suma vectorial
~ =A
C ~+B
~ , (1.1)
→
B
→
A
→
C
Figura 1.1: Ley del triángulo para la suma de vectores.
~ hasta la punta de B.
el representado por una flecha dibujada desde la parte posterior de A ~
1
Este capı́tulo está basado en el primer capı́tulo del libro: Mathematical Methods for Physicists, fourth
edition de George B. Arfken & Hans J. Weber, editorial Academic Press.
3
www.elsolucionario.net
Este procedimiento, la ley del triángulo para la suma, le asigna un significado a la ecuación
(1.1) y es ilustrado en la figura 1.1. Al completar el paralelogramo, vemos que
~ =A
C ~+B
~ =B
~ +A
~, (1.2)
www.elsolucionario.net
Para la suma de tres vectores
~ =A
D ~+B
~ +C
~ ,
~yB
figura 1.3, podemos primero sumar A ~
~+B
A ~ =E
~ .
~
Entonces a esta suma le agregamos C
~ =E
D ~ +C
~ .
~ yC
Similarmente, podemos primero sumar B ~
→
B
→
A → → →
E F C
→
D
~ +C
B ~ = F~ .
Entonces
~ =A
D ~ + F~ .
En términos de la expresión original,
~ + B)
(A ~ +C
~ =A
~ + (B
~ + C)
~ .
www.elsolucionario.net
→ →
F1 + F2
→ →
F1 F2
o
→ →
→ F1 F2
w
o
→
→ F3
F3
www.elsolucionario.net
Figura 1.4: Equilibrio de fuerzas. F~1 + F~2 = −F~3 .
~−B
A ~ =A
~ + (−B)
~ .
En la figura 1.3
~=E
A ~ −B
~
Notemos que los vectores son tratados como objetos geométricos que son independientes
de cualquier sistema de coordenadas. Realmente, no hemos presentado aún un sistema de
coordenadas. Este concepto de independencia de un particular sistema de coordenadas es
desarrollado en detalle en la próxima sección.
La representación del vector A~ por una flecha sugiere una segunda posibilidad. La flecha A ~
3
(figura 1.5), partiendo desde el origen, y terminando en el punto (Ax , Ay , Az ). Ası́, acordamos
2
Estrictamente hablando la ley de suma del paralelogramo fue introducida como definición. Los experi-
mentos muestran que si suponemos que las fuerzas son cantidades vectoriales y las combinamos usando la
ley de suma del paralelogramo, la condición de una fuerza resultante nula como condición de equilibrio es
satisfecha.
3
Se verá que se puede partir desde cualquier punto en el sistema de referencias cartesiano, hemos elegido
www.elsolucionario.net
que los vectores partan en el origen y su final puede ser especificado dando las coordenadas
cartesianas (Ax , Ay , Az ) de la punta de la flecha.
z
Az
(A x ,A y ,A z)
→
γ A
β Ay
α y
Ax
(A x ,A y ,0)
www.elsolucionario.net
x
~
Figura 1.5: Componentes cartesianas y cosenos directores de A.
Los cos α, cos β y cos γ son llamados los cosenos directores, donde α es el ángulo entre el
vector dado y el eje-x positivo, y ası́ sucesivamente. Un poco de vocabulario: las cantidades
Ax , Ay y Az son conocidas como las componentes (cartesianas) de A ~ o las proyecciones de A.~
~ puede ser resuelto en sus componentes (o proyecciones sobre los
Ası́, cualquier vector A
ejes coordenados) produciendo Ax = A cos α, etc., como en la ecuación (1.4). Podemos elegir
referirnos al vector como un cantidad simple A ~ o por sus componentes (Ax , Ay , Az ). Notemos
que el subı́ndice x en Ax denota la componente x y no la dependencia sobre la variable x. La
~ o sus
componente Ax puede ser función de x, y y z tal que Ax (x, y, z). La elección entre usar A
componentes (Ax , Ay , Az ) es esencialmente una elección entre una representación geométrica
y una algebraica. En el lenguaje de teorı́a de grupos (capı́tulo 4), las dos representaciones
son isomórficas.
el origen por simplicidad. Esta libertad de desplazar el origen del sistema de coordenadas sin afectar la
geometrı́a es llamada invariancia translacional.
www.elsolucionario.net
Usaremos la representación que nos convenga más en cada caso. La representación geométri-
ca “flecha en el espacio” puede ayudar en la visualización. El conjunto algebraico de compo-
nentes es usualmente mucho más conveniente para calcular.
Los vectores entran en la Fı́sica de dos maneras distintas : (1) Un vector A ~ puede re-
presentar una sola fuerza actuando sobre un único punto. La fuerza de gravedad actuando
~ puede estar definido sobre una
sobre el centro de gravedad ilustra esta forma. (2) Un vector A
~
región extendida; esto es, A y sus componentes son funciones de la posición: Ax = Ax (x, y, z),
y ası́ sucesivamente. Ejemplos de este tipo incluyen el campo de velocidades de un fluido.
Algunos autores distinguen estos dos casos refiriéndose a los vectores definidos sobre una
región como un campo vectorial. Los conceptos de campos vectoriales como funciones de la
posición serán extremadamente importantes más adelante.
En este punto es conveniente presentar los vectores unitarios a lo largo de cada eje coorde-
nado. Sea x̂ un vector de magnitud uno apuntando en la dirección x-positiva, ŷ, un vector de
magnitud uno apuntando en la dirección y-positiva, y ẑ, un vector de magnitud unitaria en
la dirección z-positiva. Entonces x̂Ax , es un vector con magnitud igual a Ax , en la dirección
de x-positiva. Por suma de vectores
www.elsolucionario.net
~ = x̂Ax + ŷAy + ẑAz ,
A (1.5)
lo cual establece que un vector es igual a la suma vectorial de sus componentes. Notemos que
~ se anula, todas sus componentes deben anularse individualmente; esto es, si
si A
~=0,
A entonces Ax = Ay = Az = 0 .
~ es
Finalmente, por el Teorema de Pitágoras, la magnitud del vector A
A = (A2x + A2y + A2z )1/2 . (1.6)
Esta resolución de un vector en sus componentes puede ser llevada a cabo en una variedad de
sistemas de coordenadas, como mostramos en el próximo capı́tulo. Aquı́ nos restringiremos
a coordenadas cartesianas.
La ecuación (1.5) es realmente la afirmación de que los tres vectores unitarios x̂, ŷ y ẑ
“abarcan” nuestro espacio real tridimensional. Cualquier vector constante puede ser escrito
como una combinación lineal de x̂, ŷ y ẑ. Ya que x̂, ŷ y ẑ son linealmente independientes
(ninguno es una combinación lineal de los otros dos), ellos forman una base para el espacio
real tridimensional.
Como un reemplazo a la técnica gráfica, la suma y resta de vectores puede ser llevada a
cabo en términos de sus componentes. Para A ~ = x̂Ax + ŷAy + ẑAz y B ~ = x̂Bx + ŷBy + ẑBz ,
~±B
A ~ = x̂(Ax ± Bx ) + ŷ(Ay ± By ) + ẑ(Az ± Bz ) . (1.7)
Deberı́amos enfatizar aquı́ que los vectores unitarios x̂, ŷ, y ẑ son usados por conveniencia.
Ellos no son esenciales; podemos describir vectores y usarlos enteramente en términos de sus
componentes: A ~ ↔ (Ax , Ay , Az ). Esta manera de acercarse es la más poderosa, definiciones
más sofisticadas de vectores serán discutidas en las próximas secciones.
Hasta aquı́ hemos definido las operaciones de suma y resta de vectores. Tres variedades
de multiplicaciones son definidas sobre las bases de sus aplicaciones: un producto interno o
escalar, un producto propio del espacio tridimensional, y un producto externo o directo que
produce un tensor de rango dos. La división por un vector no está definida.
www.elsolucionario.net
www.elsolucionario.net
Por otro lado, nuestra aproximación ingenua es inconveniente para generalizar y extenderla
a cantidades más complejas. Obtendremos una nueva definición de campo vectorial, usando
nuestro vector desplazamiento ~r como un prototipo.
Hay una importante base fı́sica para el desarrollo de una nueva definición. Describimos
nuestro mundo fı́sico por matemáticas, pero él y cualquier predicción Fı́sica que podamos
hacer debe ser independiente de nuestro análisis matemático. Algunos comparan el sistema
fı́sico a un edificio y el análisis matemático al andamiaje usado para construir el edificio. Al
final el andamiaje es sacado y el edificio se levanta.
En nuestro caso especı́fico suponemos que el espacio es isotrópico; esto es, no hay direc-
ciones privilegiadas o, dicho de otra manera, todas las direcciones son equivalentes. Luego,
cualquier sistema fı́sico que está siendo analizado o más bien las leyes fı́sicas que son enuncia-
das no pueden ni deben depender de nuestra elección u orientación de los ejes coordenados.
Ahora, volveremos al concepto del vector ~r como un objeto geométrico independiente del
sistema de coordenadas. Veamos un ~r en dos sistemas diferentes, uno rotado respecto al otro.
Por simplicidad consideremos primero el caso en dos dimensiones. Si las coordenadas x e
y son rotadas en el sentido contrario a los punteros del reloj en un ángulo ϕ, manteniendo
~r fijo (figura 1.6) obtenemos las siguientes relaciones entre las componentes resueltas en el
sistema original (sin primas) y aquellas resueltas en el nuevo sistema rotado (con primas):
x0 = x cos ϕ + y sen ϕ ,
(1.8)
y 0 = −x sen ϕ + y cos ϕ .
Vimos, en la sección anterior, que un vector podrı́a ser representado por las coordenadas
de un punto; esto es, las coordenadas eran proporcionales a los componentes del vector. En
consecuencia las componentes de un vector deberı́an transformar bajo rotaciones como las
coordenadas de un punto (tal como ~r). Por lo tanto cualquier par de cantidades Ax (x, y) y
Ay (x, y) en el sistema de coordenadas xy son transformadas en (A0X , A0y ) por esta rotación
del sistema de coordenadas con
A0x = Ax cos ϕ + Ay sen ϕ ,
(1.9)
A0y = −Ax sen ϕ + Ay cos ϕ ,
www.elsolucionario.net
y
y’
y
nϕ
e
ys x’
x’
→
r
y’
x s y cos
en
ϕ
s ϕ
ϕ ϕ
o
xc ϕ
x
www.elsolucionario.net
x
Figura 1.6: Rotación de los ejes coordenados cartesianos respecto del eje z.
4
La definición correspondiente de una cantidad escalar es S 0 = S, esto es, invariante ante rotaciones de
los ejes de coordenadas.
www.elsolucionario.net
compacta. Sea
x → x1
(1.10)
y → x2
Los coeficientes aij pueden ser interpretados como los cosenos directores, es decir, el coseno
del ángulo entre x0i y xj ; esto es,
www.elsolucionario.net
0
π (1.13)
a21 = cos(x2 , x1 ) = cos ϕ + = − sen ϕ .
2
La ventaja de la nueva notación5 es que nos permite usar el sı́mbolo suma
P
y reescribir las
ecuaciones (1.12) como
X2
0
xi = aij xj , i = 1, 2 . (1.14)
j=1
Note que i permanece como un parámetro que da origen a una ecuación cuando este conjunto
es igual a 1 y a una segunda ecuación cuando este conjunto es igual a 2. El ı́ndice j, por
supuesto, es un ı́ndice de suma, es un ı́ndice mudo, como una variable de integración, j puede
ser reemplazada por cualquier otro sı́mbolo.
La generalización para tres, cuatro, o N dimensiones es ahora muy simple. El conjunto
de N cantidades, Vj , se dice que son las componentes de un vector de N dimensiones, V~ , si
y sólo si sus valores relativos a los ejes coordenados rotados están dados por
N
X
Vi0 = aij Vj , i = 1, 2, . . . , N . (1.15)
j=1
Como antes, aij es el coseno del ángulo entre x0i y xj . A menudo el lı́mite superior N y
el correspondiente intervalo de i no será indicado. Se da por descontado que se sabe en
qué dimensión se está trabajando.
5
Podemos extrañarnos por qué hemos sustituido un parámetro ϕ por cuatro parámetros aij . Claramente,
los aij no constituyen un conjunto mı́nimo de parámetros. Para dos dimensiones los cuatro aij están sujetos
a tres restricciones dadas en la ecuación (1.19). La justificación para el conjunto redundante de cosenos
directores es la conveniencia que provee. Se tiene la esperanza que esta conveniencia sea más aparente en los
próximos capı́tulos. Para rotaciones en tres dimensiones son nueve los aij , pero solamente tres de ellos son
independientes, existen además descripciones alternativas como: los ángulos de Euler, los cuaterniones o los
parámetros de Cayley-Klein. Estas alternativas tienen sus respectivas ventajas y sus desventajas.
www.elsolucionario.net
A partir de la definición de aij como el coseno del ángulo entre la dirección positiva de x0i
y la dirección positiva de xj podemos escribir (coordenadas cartesianas)6
∂x0i
aij = . (1.16)
∂xj
Notemos que estas son derivadas parciales. Por uso de las ecuaciones (1.16), (1.17) y (1.15)
se convierten en
N N
X ∂x0i X ∂xj
Vi0 = Vj = V .
0 j
(1.18)
j=1
∂x j j=1
∂x i
www.elsolucionario.net
Los cosenos directores aij satisfacen una condición de ortogonalidad
X
aij aik = δjk , (1.19)
i
o, equivalentemente, X
aji aki = δjk . (1.20)
i
Podemos fácilmente verificar las ecuaciones (1.19) y (1.20) manteniéndose en el caso de dos
dimensiones y sustituyendo los especı́ficos aij desde la ecuación (1.11). El resultado es la bien
conocida identidad sen2 ϕ + cos2 ϕ = 1 para el caso no nulo. Para verificar la ecuación (1.19)
en forma general, podemos usar la forma en derivadas parciales de las ecuaciones (1.16) y
(1.17) para obtener
X ∂xj ∂xk X ∂xj ∂x0 ∂xj
i
0 0
= 0
= . (1.22)
i
∂x i ∂x i i
∂x i ∂x k ∂x k
El último paso sigue las reglas usuales para las derivadas parciales, suponiendo que xj es
una función de x01 , x02 , x03 , etc. El resultado final, ∂xj /∂xk , es igual a δij , ya que xj y xk son
coordenadas lineales (j 6= k) que se suponen perpendiculares (en dos o tres dimensiones)
u ortogonales (para cualquier número de dimensiones). Equivalentemente, podemos suponer
que xj y xk con j 6= k son variables totalmente independientes. Si j = k, la derivada parcial es
claramente igual a 1. Al redefinir un vector en términos de cómo sus componentes transforman
bajo rotaciones del sistema de coordenadas, deberı́amos enfatizar dos puntos:
6
Diferenciando x0i =
P
aik xk con respecto a xj .
www.elsolucionario.net
1.- Esta definición se desarrolla porque es útil y apropiada en describir nuestro mundo fı́sico.
Nuestras ecuaciones vectoriales serán independientes de cualquier sistema particular de
coordenadas. (El sistema de coordenadas no necesita ser cartesiano.) La ecuación vectorial
siempre puede ser expresada en algún sistema particular de coordenadas y, para obtener
resultados numéricos, deberı́amos finalmente expresarla en algún sistema de coordenadas
especı́fico.
2.- Esta definición se puede generalizar abriendo la rama de la matemática conocida como
análisis tensorial, (próximo capı́tulo).
www.elsolucionario.net
1.2.1. Vectores y espacios vectoriales.
Es habitual en matemáticas etiquetar un vector en tres dimensiones ~x por un triplete
ordenado de números reales (x1 , x2 , x3 ). El número xn es llamado la componente n del vector
~x. El conjunto de todos los vectores (que obedecen las propiedades que siguen) forman un es-
pacio vectorial sobre los reales en este caso de tres dimensiones. Atribuimos cinco propiedades
a nuestros vectores: si ~x =(x1 , x2 , x3 ) e ~y = (y1 , y2 , y3 ),
Ya que nuestras componentes vector son números reales, las siguientes propiedades tam-
bién se mantienen:
Además, el vector nulo ~0 es único, tal como lo es el inverso aditivo de un vector ~x dado.
Esta formulación nos permite formalizar la discusión de componentes de la sección 1.1.
Su importancia radica en las extensiones, las cuales serán consideradas en los capı́tulos pos-
teriores. En el capı́tulo (4), mostraremos que los vectores forman tanto un grupo Abeliano
bajo la suma, como un espacio lineal con las transformaciones en el espacio lineal descrito
por matrices. Finalmente, y quizá lo más importante, para la Fı́sica avanzada el concepto
de vectores presentado aquı́ puede ser generalizado a números complejos, funciones, y a un
número infinito de componentes. Esto tiende a espacios de funciones de dimensión infinita,
espacios de Hilbert, los cuales son importantes en la teorı́a cuántica moderna.
www.elsolucionario.net
posibilidad es introducida en el capı́tulo 2, en la cual formaremos tensores.
La proyección de un vector A ~ sobre los ejes coordenados, la cual define su componente
~ y los vectores
cartesiana en la ecuación (1.4), es un caso especial del producto escalar de A
unitarios coordenados,
~ · x̂ ,
Ax = A cos α ≡ A ~ · ŷ ,
Ay = A cos β ≡ A ~ · ẑ .
Az = A cos γ ≡ A (1.23)
~ · (B
A ~ + C)
~ =A
~·B
~ +A
~·C
~ , (1.24)
~ · yB
A ~ = (y A)
~ ·B
~ = yA
~·B
~ , (1.25)
donde y es un número. Ahora podemos usar la descomposición de B ~ en sus componentes
~ = Bx x̂ + By ŷ + Bz ẑ, para construir el producto
cartesianas de acuerdo a la ecuación (1.5), B
escalar general o producto punto de los vectores A~yB ~ como
~·B
A ~ =A~ · (Bx x̂ + By ŷ + Bz ẑ)
= Bx A~ · x̂ + By A
~ · ŷ + Bz A
~ · ẑ
= Bx Ax + By Ay + Bz Az ,
por lo tanto X X
~·B
A ~ ≡ Bi Ai = ~ ·A
Ai Bi = B ~. (1.26)
i i
~=B
Si A ~ en la ecuación
~ en la ecuación (1.26), recuperamos la magnitud A = (P A2i )1/2 de A
(1.6) a partir de la ecuación (1.26).
Es obvio, a partir de la ecuación (1.26), que el producto escalar trata a A~ y B ~ de la
misma manera, i.e. es simétrico en A ~ y B,
~ luego es conmutativo. Ası́, alternativamente y
equivalentemente, podemos primero generalizar la ecuación (1.23) a la proyección AB de un
www.elsolucionario.net
z
→ →
B A
x
~·B
Figura 1.7: Producto escalar A ~ = AB cos θ.
www.elsolucionario.net
vector A~ sobre la dirección de un vector B~ 6= 0 como AB = A cos θ ≡ A ~ · B̂, donde B̂ = B/B
~
~ ~ ~
es el vector unitario en la dirección de B y θ es el ángulo entre A y B como muestra la figura
1.7. Similarmente, proyectamos B ~ sobre A~ como BA = B cos θ ≡ B ~ · Â. Segundo, hacemos
esta proyección simétrica en A~ y B,
~ la cual produce la definición
~·B
A ~ ≡ AB B = ABA = AB cos θ . (1.27)
→
→ C
B →→
B+C
→
A
BA CA
→ →
(B+C)A
~ · (B
Figura 1.8: La ley distributiva A ~ + C)
~ = ABA + ACA = A(B
~ + C)
~ A , ecuación (1.24).
x̂ · x̂ = ŷ · ŷ = ẑ · ẑ = 1 , (1.28)
www.elsolucionario.net
mientras
x̂ · ŷ = x̂ · ẑ = ŷ · ẑ = 0 . (1.29)
Si la definición de las componentes, ecuación (1.26), es etiquetada como una definición al-
gebraica, entonces la ecuación (1.27) es una definición geométrica. Una de las más comunes
aplicaciones del producto escalar en Fı́sica es el cálculo del trabajo ejercido por una fuerza
constante = fuerza × desplazamiento × cos θ, lo cual es interpretado como el desplazamiento
por la proyección de la fuerza en la dirección del desplazamiento, i.e., el producto escalar de
la fuerza y el desplazamiento, W = F~ · S.~
→
n
y
www.elsolucionario.net
r =xx^+yy^
x
~·B
Si A ~ = 0 y sabemos que A ~ 6= 0 y B~ 6= 0, entonces desde la ecuación (1.27), cos θ = 0
implica θ = π/2 o θ = 3π/2. Los vectores A ~ y B
~ deben ser perpendiculares. Alternativa-
mente, podemos decir que son ortogonales. Los vectores unitarios x̂, ŷ y ẑ son mutuamente
ortogonales. Para desarrollar esta noción de ortogonalidad demos un paso más, supongamos
que ~n es un vector unitario y ~r es un vector distinto de cero en el plano-xy; esto es ~r = x̂x+ ŷy
(figura 1.9). Si
~n · ~r = 0 ,
para todas las elecciones posibles de ~r, entonces ~n debe ser perpendicular (ortogonal) al
plano-xy.
A menudo es conveniente reemplazar x̂, ŷ y ẑ por vectores unitarios con subı́ndice ~em con
m = 1, 2, 3, con x̂ = ~e1 y ası́ sucesivamente. Entonces las ecuaciones (1.28) y (1.29) llegan a
ser
~em · ~en = δmn . (1.30)
Para m 6= n los vectores unitarios ~em y ~en son ortogonales. Para m = n cada vector es
normalizado a la unidad, esto es, tiene magnitud uno. El conjunto de vectores ~em se dice que
es ortonormal. La mayor ventaja de la ecuación (1.30) sobre las ecuaciones (1.28) y (1.29)
es que la ecuación (1.30) puede ser fácilmente generalizada a un espacio de N dimensiones;
m, n = 1, 2, . . . , N . Finalmente, escogeremos un conjunto de vectores unitarios ~em que sean
ortonormales por conveniencia.
www.elsolucionario.net
www.elsolucionario.net
k l i j i j i
Los dos últimos pasos se siguen de la ecuación (1.19), la condición de ortogonalidad de los
cosenos directores, y de la ecuación (1.21) la cual define la delta de Kronecker. El efecto de
la delta de Kronecker es cancelar todos los términos en la suma sobre uno de sus dos ı́ndices
excepto el término en el cual son iguales. En la ecuación (1.33) su efecto es fijar j = i y
eliminar la suma sobre j. Por supuesto, podrı́amos fijar i = j y eliminar la suma sobre i. la
ecuación (1.33) nos da X X
A0k Bk0 = Ai Bi , (1.34)
k i
la cual es justo nuestra definición de una cantidad escalar, una que permanece invariante
ante rotaciones de los sistemas de coordenadas.
→
C →
B
α θ
→
A
Figura 1.10: La ley de los cosenos.
~ ·C
C ~ = (A
~ + B)
~ · (A~ + B)
~
(1.35)
=A~·A~+B ~ ·B~ + 2A
~·B
~ .
www.elsolucionario.net
Ya que
~ ·C
C ~ = C2 , (1.36)
~ y por esto una cantidad invariante, veamos que
el cuadrado de la magnitud del vector C
2 2 2
A ~ = C −A −B ,
~·B es invariante. (1.37)
2
Ya que la mano derecha de la ecuación (1.37) es invariante –esto es, una cantidad escalar–
el lado izquierdo, A~ · B,
~ también debiera ser invariante bajo una rotación del sistema de
coordenadas. En consecuencia A ~·B~ es un escalar.
La ecuación (1.35) es realmente otra forma de escribir el teorema del coseno, el cual es
C 2 = A2 + B 2 + 2AB cos θ ,
= A2 + B 2 + 2AB cos(π − α) , (1.38)
= A2 + B 2 − 2AB cos α ,
Comparando las ecuaciones (1.35) y (1.38), tenemos otra verificación de la ecuación (1.27),
www.elsolucionario.net
o, si se prefiere, una derivación vectorial del teorema del coseno (figura 1.10).
El producto punto, dado por la ecuación (1.26), podrı́a ser generalizado en dos formas.
El espacio no necesita ser restringido a tres dimensiones. En un espacio n-dimensional, la
ecuación se aplica con la suma corriendo desde 1 a n. Donde n puede ser infinito, con la suma
como una serie convergente infinita. La otra generalización extiende el concepto de vector
para abarcar las funciones. La funcional análoga a un producto punto o interno aparece más
adelante.
Momento Lineal θ
con
C = AB sen θ . (1.39)
~ ahora es un vector, y le asignamos una
A diferencia del caso anterior del producto escalar, C
dirección perpendicular al plano que contiene a A~yB ~ tal que A,
~ B~ yC~ forman un sistema
diestro. Con esta elección de dirección tenemos
~×B
A ~ = −B
~ ×A
~, anticonmutación. (1.40)
x̂ × x̂ = ŷ × ŷ = ẑ × ẑ = 0 , (1.41)
www.elsolucionario.net
mientras
x̂ × ŷ = ẑ , ŷ × ẑ = x̂ , ẑ × x̂ = ŷ ,
(1.42)
ŷ × x̂ = −ẑ , ẑ × ŷ = −x̂ , x̂ × ẑ = −ŷ .
Entre los ejemplos del producto cruz en Fı́sica Matemática están la relación entre el momento
~ (que define al momento angular),
lineal p~ y el momento angular L
~ = ~r × p~ ,
L
~ × ~r .
~v = ω
Los vectores ~v y p~ describen propiedades de las partı́culas o un sistema fı́sico. Sin embargo,
la posición del vector ~r está determinado por la elección del origen de las coordenadas. Esto
significa que ω
~ yL ~ dependen de la elección del origen.
El campo magnético B ~ usualmente está definido por el producto vectorial de la ecuación
de fuerza de Lorentz7
q
F~ = ~v × B ~ , (cgs).
c
Donde ~v es la velocidad de la carga eléctrica q, c es la velocidad de la luz en el vacı́o y F~ es
la fuerza resultante sobre la carga en movimiento.
El producto cruz tiene una importante interpretación geométrica, la cual se usará en
secciones futuras. En el paralelogramo definido por A ~ yB~ (figura 1.12), B sen θ es la altura
~ ~
si A es tomada como la longitud de la base. Luego (A × B) = AB sen θ es el área del
paralelogramo. Como un vector, A ~ ×B ~ es el área del paralelogramo definido por A ~ y B,
~ con
el vector normal al plano del paralelogramo. Esto sugiere que el área podrı́a ser tratada como
una cantidad vectorial.
7 ~ lo hemos supuesto nulo.
El campo eléctrico E
www.elsolucionario.net
→
B sen θ B
θ x
→
A
Entre paréntesis, podemos notar que la ecuación (1.42) y una ecuación modificada (1.41)
forman el punto de partida para el desarrollo de los cuaterniones. La ecuación (1.41) es
www.elsolucionario.net
remplazada por x̂ × x̂ = ŷ × ŷ = ẑ × ẑ = −1.
Una definición alternativa del producto vectorial puede ser derivada del caso especial de
los vectores unitarios coordenados en las ecuaciones (1.40-1.42), en conjunto con la linealidad
del producto cruz en ambos argumentos vectoriales, en analogı́a con la ecuación (1.24) y
(1.25) para el producto punto,
A~ × (B
~ + C)
~ =A~×B
~ +A
~×C~ ,
(1.43)
(A~ + B)
~ ×C ~ =A
~×C
~ +B
~ ×C
~ ,
~ × (y B)
A ~ = yA
~×B
~ = (y A)
~ ×B
~ , (1.44)
~yB
donde y es un número. Usando la descomposición de A ~ en sus componentes cartesianas
de acuerdo a la ecuación (1.5), encontramos
~×B
A ~ ≡C
~ = (Cx , Cy , Cz ) = (Ax x̂ + Ay ŷ + Az ẑ) × (Bx x̂ + By ŷ + Bz ẑ)
= (Ax By − Ay Bx )x̂ × ŷ + (Ax Bz − Az Bx )x̂ × ẑ + (Ay Bz − Az By )ŷ × ẑ ,
por aplicación de las ecuaciones (1.43),(1.44) y sustituyendo en las ecuaciones (1.40-1.42), tal
que las componentes cartesianas de A ~×B ~ sean
Cx = Ay Bz − Az By , Cy = Az Bx − Ax Bz , Cz = Ax By − Ay Bx , (1.45)
o
Ci = Aj Bk − Ak Bj , i, j, k todos diferentes, (1.46)
y con la permutación cı́clica de los ı́ndices i, j, ~ puede ser conve-
k. El producto vectorial C
nientemente representado por un determinante
x̂ ŷ ẑ
~
C = det Ax Ay Az . (1.47)
Bx By Bz
www.elsolucionario.net
La expansión del determinante por la fila superior reproduce las tres componentes de C ~
listadas en la ecuación (1.45).
La ecuación (1.39) podrı́a ser llamada una definición geométrica del producto vectorial.
Luego la ecuación (1.45) podrı́a ser una definición algebraica.
Para mostrar la equivalencia de la ecuación (1.39) y la definición de componente, ecuación
(1.45), formemos A ~·C ~ yB ~ · C,
~ usando la ecuación (1.45). Tenemos
~·C
A ~ =A~ · (A
~ × B)
~ ,
= Ax (Ay Bz − Az By ) + Ay (Az Bx − Ax Bz ) + Az (Ax By − Ay Bx ) , (1.48)
=0.
Similarmente,
~ ·C
B ~ =B
~ · (A
~ × B)
~ =0. (1.49)
Las ecuaciones (1.48) y (1.49) muestran que C ~ es perpendicular tanto al vector A ~ como al
~ (cos θ = 0, θ = ±90 ) y por lo tanto perpendicular al plano que ellos determinan.
◦
www.elsolucionario.net
vector B
La dirección positiva está determinada considerando el caso especial de los vectores unitarios
x̂ × ŷ = ẑ (Cz = +Ax By ).
~ × B)
(A ~ · (A
~ × B)
~ = A2 B 2 − (A ~ · B)
~ 2,
= A2 B 2 − A2 B 2 cos2 θ , (1.50)
= A2 B 2 sen2 θ .
De donde
C = AB sen θ . (1.51)
El gran primer paso en la ecuación (1.50) puede ser verificado expandiendo en componentes,
~ B
usando la ecuación (1.45) para A× ~ y la ecuación (1.26) para el producto punto. A partir de
las ecuaciones (1.48), (1.49) y (1.51) vemos la equivalencia de las ecuaciones (1.39) y (1.45),
las dos definiciones del producto vectorial. Todavı́a permanece el problema de verificar que
C~ = A ~×B ~ es por cierto un vector; esto es, que obedece la ecuación (1.15), la ley de
transformación vectorial. Comencemos en un sistema rotado (sistema prima)
de cosenos directores8
a11 a22 − a21 a12 = a33 ,
a13 a21 − a23 a11 = a32 , (1.53)
a12 a23 − a22 a13 = a31 ,
y sus negativos. Las ecuaciones (1.53) son identidades que satisfacen los cosenos directores.
Ellas pueden ser verificadas con el uso de determinantes y matrices. Sustituyendo hacia atrás
en la ecuación (1.52),
~ es
Permutando los ı́ndices para levantar C10 y C20 , vemos que la ecuación (1.15) se satisface y C
www.elsolucionario.net
por cierto un vector. Podrı́a mencionarse aquı́ que esta naturaleza vectorial del producto cruz
es un accidente asociado con la naturaleza tridimensional del espacio ordinario9 . Veremos en el
capı́tulo siguiente que el producto cruz también puede ser tratado como un tensor asimétrico
de rango dos.
Definimos un vector como un triplete ordenado de números (o funciones) como en la
última parte de la sección 1.2, luego no hay problemas en identificar el producto cruz como
un vector. La operación de producto cruz mapea los dos tripletes A ~yB ~ en un tercer triplete
~ el cual por definición es un vector.
C,
Ahora tenemos dos maneras de multiplicar vectores; una tercera forma aparece en el
próximo capı́tulo . Pero ¿qué hay de la división por un vector? resulta ser que la razón B/~ A~
no está unı́vocamente especificada a menos que A ~yB ~ sean paralelos. Por lo tanto la división
de un vector por otro no está bien definida.
~ ×C
es conocida como el producto escalar triple. El producto B ~ produce un vector, el cual
~ da un escalar. Notemos que (A·
producto punto con A, ~ B)×
~ C ~ representa un escalar producto
8
La ecuación (1.53) se mantiene ante rotaciones porque ellas mantienen el volumen.
9
Especı́ficamente la ecuación (1.53) se mantiene sólo para un espacio tridimensional. Técnicamente, es
posible definir un producto cruz en R7 , el espacio de dimensión siete, pero el producto cruz resulta tener
propiedades inaceptables (patológicas).
www.elsolucionario.net
cruz con un vector, una operación que no está definida. Por lo tanto, si estamos de acuerdo
en excluir estas interpretaciones no definidas, los paréntesis puede ser omitidos y el producto
de escalar triple puede ser escrito como A~·B ~ × C.
~
Usando la ecuación (1.45) para el producto cruz y la ecuación (1.26) para el producto
punto, obtenemos
~·B
A ~ ×C
~ = Ax (By Cz − Bz Cy ) + Ay (Bz Cx − Bx Cz ) + Az (Bx Cy − By Cx ) ,
=B~ ·C~ ×A ~=C ~ ·A~×B ~ , (1.55)
~·C
= −A ~ ×B
~ = −C
~ ·B
~ ×A
~ = −B
~ ·A
~×C
~ , y ası́ sucesivamente.
Notemos el alto grado de simetrı́a presente en la expansión en componentes. Cada término
contiene los factores Ai , Bj y Ck . Si i, j, k están en un orden cı́clico (x, y, z), el signo es
positivo. Si el orden es anticı́clico, el signo es negativo. Por lo tanto, el punto y la cruz
pueden ser intercambiados,
~·B
A ~ ×C ~ =A ~×B ~ ·C
~ . (1.56)
Una representación conveniente de la componente de expansión de la ecuación (1.55) está da-
www.elsolucionario.net
da por el determinante
Ax A y Az
~·B ~ ×C~ = Bx By Bz .
A (1.57)
Cx Cy Cz
La regla para intercambiar filas por columnas de un determinante provee una inmediata
~ B
verificación de la permutación listada en la ecuación (1.55), mientras la simetrı́a de A, ~ y
~
C en la forma determinante sugiere la relación dada en la ecuación (1.56).
El producto triple encontrado en la sección 1.4, en la cual se muestra que A ~×B ~ era
perpendicular a ambos, A ~ y B,
~ es un caso especial del resultado general (ecuación (1.55)).
→
→ → C
B C
→
A
y
→
B
x
El producto escalar triple tiene una interpretación geométrica directa. Los tres vectores
~ B,
A, ~ yC ~ pueden ser interpretados como la definición de un paralelepı́pedo (figura 1.13).
~ ~ = BC sen θ ,
B × C
(1.58)
= área de la base del paralelógramo.
www.elsolucionario.net
La dirección, por supuesto, es normal a la base. Haciendo el producto punto con A, ~ esto
significa multiplicar el área de la base, por la proyección de A sobre la normal, o la base
tantas veces por la altura. Por lo tanto
~·B
A ~ ×C
~ = volumen del paralelepı́pedo definido por A,
~ B~ y C.
~
www.elsolucionario.net
~b × ~c ~a × ~b
~a 0 = , ~b 0 = ~c × ~a , ~c 0 = . (1.60)
~a · ~b × ~c ~a · ~b × ~c ~a · ~b × ~c
Vemos que ~a 0 es perpendicular al plano que contiene a ~b y a ~c y tiene una magnitud propor-
cional a a−1 . En efecto, podemos rápidamente mostrar que
~a 0 · ~a = ~b 0 · ~b = ~c 0 · ~c = 1 , (1.61)
mientras
~a0 · ~b = ~a0 · ~c = ~b0 · ~a = ~b0 · ~c = ~c0 · ~a = ~c0 · ~b = 0 . (1.62)
Esto es a partir de las ecuaciones (1.61) y (1.62) derivamos el nombre de red recı́proca. El
espacio matemático en el cual esta red recı́proca existe es llamado a veces espacio de Fourier.
Esta red recı́proca es útil en problemas que intervienen el scattering de ondas a partir de
varios planos en un cristal. Más detalles pueden encontrarse en R.B. Leigthon’s Principles of
Modern Physics, pp. 440-448 [ New York: McGraw-Hill (1995)].
→ →
B C
→
A
y
→
→ C
B
→ → →
A (B C)
x
www.elsolucionario.net
es mostrado aquı́ a lo largo del eje z. Entonces A
lo tanto está de regreso en el plano xy.
deseamos mostrar que z = 1 en la ecuación (1.64), una importante relación algunas veces
conocida como la regla BAC − CAB. Ya que la ecuación (1.64) es lineal en A, ~ B~ y C,~ z
es independiente de esas magnitudes. Entonces, sólo necesitamos mostrar que z = 1 para
vectores unitarios Â, B̂, Ĉ. Denotemos B̂ · Ĉ = cos α, Ĉ · Â = cos β, Â · B̂ = cos γ, y el
cuadrado de la ecuación (1.64) para obtener
[Â × (B̂ × Ĉ)]2 = Â2 (B̂ × Ĉ)2 − [Â · (B̂ × Ĉ)]2 = 1 − cos2 α − [Â · (B̂ × Ĉ)]2 ,
= z 2 [(Â · Ĉ)2 + (Â · B̂)2 − 2Â · B̂ Â · Ĉ B̂ · Ĉ] , (1.65)
= z 2 (cos2 β + cos2 γ − 2 cos α cos β cos γ) ,
usando (v̂ × ŵ)2 = v̂ 2 ŵ2 − (v̂ · ŵ)2 repetidas veces. Consecuentemente, el volumen abarcado
por Â, B̂ y Ĉ que aparece en la ecuación (1.65) puede ser escrito como
Podemos notar aquı́ que los vectores son independientes de las coordenadas tal que una
ecuación vectorial es independiente de un particular sistema de coordenadas. El sistema de
coordenadas sólo determina las componentes. Si la ecuación vectorial puede ser establecida
en coordenadas cartesianas, ella se puede establecer y es válida en cualquier sistema de
coordenadas que será introducido en el próximo capı́tulo.
1.6. ~
Gradiente, ∇
Suponga que ϕ(x, y, z) es una función de punto escalar, esto es, una función cuyo valor
depende de los valores de las coordenadas (x, y, z). Como un escalar, deberı́a tener el mismo
valor en un punto fijo dado en el espacio, independiente de la rotación de nuestro sistema de
coordenadas, o
ϕ0 (x01 , x02 , x03 ) = ϕ(x1 , x2 , x3 ) . (1.66)
www.elsolucionario.net
Diferenciando con respecto a x0i obtenemos
por las reglas de diferenciación parcial y las ecuaciones (1.16) y (1.17). Pero la comparación
con la ecuación (1.18), la ley de transformación vectorial, ahora nos muestra que hemos
construido un vector con componentes ∂ϕ/∂xj . Este vector lo etiquetamos como la gradiente
de ϕ. Un simbolismo conveniente es
~ = x̂ ∂ϕ + ŷ ∂ϕ + ẑ ∂ϕ
∇ϕ (1.68)
∂x ∂y ∂z
o
~ = x̂ ∂ + ŷ ∂ + ẑ ∂ .
∇ (1.69)
∂x ∂y ∂z
∂f (r) df (r) ∂r
= .
∂x dr ∂x
De r como función de x, y, z
p
∂r ∂ x2 + y 2 + z 2 x x
= =p = .
∂x ∂x x2 + y 2 + z 2 r
Por lo tanto
∂f (r) df (r) x
= .
∂x dr r
Permutando las coordenadas obtenemos las otras derivadas, para que finalmente podamos
escribir
~ (r) = (x̂x + ŷy + ẑz) 1 df = ~r df = r̂ df .
∇f
r dr r dr dr
www.elsolucionario.net
Aquı́ r̂ es un vector unitario ~r/r en la dirección radial positiva. El gradiente de una función
de r es un vector en la dirección radial.
Ası́ obtenemos
~ ∂ϕ ∂ϕ ∂ϕ
(∇ϕ) · d~s = dx + dy + dz = dϕ , (1.71)
∂x ∂y ∂z
el cambio en la función escalar ϕ corresponde al cambio de posición ds. Ahora consideremos
P y Q para ser dos puntos sobre una superficie ϕ(x, y, z) = C, una constante. Esos puntos
son escogidos tal que Q está a un distancia d~s de P . Entonces moviéndose de P a Q, el
cambio en ϕ(x, y, z) = C está dado por
~
dϕ = (∇ϕ) · d~s = 0 , (1.72)
∂f (r, θ, ϕ) ∂f ∂r ∂f ∂θ ∂f ∂ϕ
= + + .
∂x ∂r ∂x ∂θ ∂x ∂ϕ ∂x
z
→
ϕ
∆
Q
P →
ds
ϕ (x,y,z)=C
y
Figura 1.15: Requerimos que el diferencial de longitud d~s permanezca sobre la superficie
ϕ = C.
Si ahora permitimos que d~s vaya desde la superficie ϕ = C1 a una superficie adyacente
www.elsolucionario.net
ϕ = C2 (figura 1.16),
dϕ = C2 − C1 = ∆C = (∇ϕ) ~ · d~s . (1.73)
Para un dϕ dado, | d~s | es un mı́nimo cuando se escoge paralelo a ∇ϕ~ (cos θ = 1); o, para un
~
| d~r | dado, el cambio en la función escalar ϕ es maximizado escogiendo d~s paralelo a ∇ϕ.
~
Esto identifica ∇ϕ como un vector que tiene la dirección de la máxima razón espacial de
cambio de ϕ, una identificación que será útil en el próximo capı́tulo cuando consideremos
sistemas de coordenadas no cartesianos.
z →
ϕ ϕ =C2 > C 1
∆
Q
ϕ =C1
x
Figura 1.16: Gradiente.
Esto es ilustrado para ambos campos, gravitacional y electroestático, entre otros. Debemos
notar que el signo menos en la ecuación (1.74) viene del hecho que el agua fluye cerro abajo
y no cerro arriba.
1.7. ~
Divergencia, ∇·.
Diferenciar una función vectorial es una extensión simple de diferenciación de cantidades
escalares. Supongamos que ~r(t) describe la posición de un satélite en algún tiempo t. Luego,
por diferenciación con respecto al tiempo,
d~r(t) ~r(t + ∆t) − ~r(t)
= lı́m ,
dt ∆t→0 ∆t
= ~v , la velocidad lineal.
Gráficamente, tenemos la pendiente de la curva, órbita, o trayectoria, como se muestra en la
figura 1.17.
www.elsolucionario.net
y
∆→
r
→
r(t)
→
r (t + ∆ t)
x
Figura 1.17: Diferenciación de un vector.
Si resolvemos r(t) dentro de las componentes cartesianas, dr/dt siempre se reduce a una
suma vectorial de no más que tres (para el espacio tridimensional) derivadas escalares. En
otro sistema de coordenadas la situación es un poco más complicada, los vectores unitarios
no son más constantes en dirección. La diferenciación con respecto al espacio de coordenadas
se maneja de la misma manera como la diferenciación con respecto al tiempo, como veremos
en los siguientes párrafos.
~ fue definido como un operador vectorial. Ahora, poniendo cuidadosa-
En la sección 1.6, ∇
mente atención a ambas: sus propiedades vectoriales y sus propiedades diferenciales, operemos
sobre un vector. Primero, como un vector le hacemos producto punto con un segundo vector
para obtener
~ · V~ = ∂Vx + ∂Vy + ∂Vz ,
∇ (1.75)
∂x ∂y ∂z
www.elsolucionario.net
~
1.7. DIVERGENCIA, ∇·. 29
~ · ~r = 3 .
∇
G H
www.elsolucionario.net
C D
E F
dz y
dx
A dy B
x
Figura 1.18: Diferencial paralelepı́pedo rectangular (en el primer octante).
(La masa de fluido que sale por unidad de tiempo)ABCD = ρvx |x=dx dydz ,
∂
= ρvx + (ρvx )dx dydz .
∂x x=0
www.elsolucionario.net
Ahora el eje x no requiere ningún tratamiento especial. El resultado precedente para las dos
caras perpendiculares al eje x debe mantenerse para las dos caras perpendiculares al eje y,
reemplazando x por y y los correspondientes cambios para y y z: y → z, z → x. Esta es
una permutación cı́clica de las coordenadas. Una ulterior permutación cı́clica produce los
resultados para las restantes dos caras de nuestro paralelepı́pedo. Sumando la velocidad de
www.elsolucionario.net
flujo neto para los tres pares de superficies de nuestro elemento de volumen, tenemos
∂ ∂ ∂
la masa neta de fluido que sale = (ρvx ) + (ρvy ) + (ρvz ) dx dy dz
∂x ∂y ∂z
(por unidad de tiempo) (1.76)
~ · (ρ~v ) dx dy dz .
=∇
Por lo tanto, el flujo neto de nuestro fluido compresible del elemento volumen dx dy dz
por unidad de volumen por unidad de tiempo es ∇ ~ · (ρ~v ). De aquı́ el nombre de divergencia.
Una aplicación directa es en la ecuación de continuidad
∂ρ ~
+ ∇ · (ρ~v ) = 0 , (1.77)
∂t
la cual simplemente establece que el flujo neto resulta en una disminución de la densidad
dentro del volumen. Note que en la ecuación (1.77), ρ es considerada como una función
posible del tiempo tanto como del espacio: ρ(x, y, z, t). La divergencia aparece en una amplia
variedad de problemas fı́sicos, pasando desde una densidad de corriente de probabilidad en
mecánica cuántica, a la pérdida de neutrones en un reactor nuclear.
La combinación ∇ ~ · (f V~ ), en la cual f es una función escalar y V~ una función vectorial,
puede ser escrita
~ · (f V~ ) = ∂ (f Vx ) + ∂ (f Vy ) + ∂ (f Vz )
∇
∂x ∂y ∂z
∂f ∂Vx ∂f ∂Vy ∂f ∂Vz (1.78)
= Vx + f + Vy + f + Vz + f
∂x ∂x ∂y ∂y ∂z ∂z
~ ) · V~ + f ∇
= (∇f ~ · V~ ,
11
Estrictamente hablando, ρvx es promediado sobre la cara EF GH y la expresión ρvx + ∂/∂x(ρvx )dx
es también promediada sobre la cara ABCD. Usando un diferencial de volumen arbitrariamente pequeño,
encontramos que los promedios se reducen a los valores empleados aquı́.
www.elsolucionario.net
~
1.8. ROTOR, ∇× 31
la cual es justo lo que uno deberı́a esperar para la derivada de un producto. Notemos que ∇~
~
como un operador diferencial, diferencia a ambos, f y V ; como un vector, se le hace producto
punto con V~ (en cada término).
Si tenemos el caso especial de la divergencia de un campo vectorial igual a cero,
∇ ~ =0,
~ ·B (1.79)
~ se dice que es solenoidal, el término viene del ejemplo en cual B
el vector B ~ es el campo o
inducción magnética y la ecuación (1.79) aparece como una de las ecuaciones de Maxwell.
Cuando un vector es solenoidal puede ser escrito como el rotor de otro vector conocido como
el vector potencial. Más adelante calcularemos tal vector potencial.
1.8. ~
Rotor, ∇×
~ es hacerlo producto cruz contra otro
Otra posible operación con el operador vectorial ∇
vector. Obtenemos
www.elsolucionario.net
~ ~ ∂ ∂ ∂ ∂ ∂ ∂
∇ × V = x̂ Vz − Vy + ŷ Vx − Vz + ẑ Vy − Vx
∂y ∂z ∂z ∂x ∂x ∂y
x̂ ŷ ẑ
(1.80)
∂ ∂ ∂
=
,
∂x ∂y ∂z
Vx Vy Vz
la cual es el producto vectorial análogo a (1.78). De nuevo, como operador diferencial dife-
rencia a ambos f y V~ . Como vector hace producto cruz contra V~ en cada término.
12
En este mismo espı́ritu, si A~ es un operador diferencial, no necesariamente es cierto que A
~×A ~ = 0.
~ ~
Especı́ficamente, en mecánica cuántica el operador de momento angular, L = −i(~r × ∇), encontramos que
~ ×L
L ~ = iL.~
www.elsolucionario.net
Primero,
x̂ ŷ ẑ
~ × ~r = ∂ ∂ ∂
∇ ∂x =0. (1.84)
∂y ∂z
x y z
~ (r) = r̂(df /dr), obtenemos
Segundo, usando ∇f
~ × ~rf (r) = df r̂ × ~r .
∇ (1.85)
dr
El producto vectorial se anula, ya que ~r = r̂ r y r̂ × r̂ = 0.
www.elsolucionario.net
y (x ,y +dy)
0 0 3 (x 0+dx,y0 +dy)
4 2
x
Figura 1.19: Circulación alrededor de un loop diferencial.
Para desarrollar un mejor sentido del significado fı́sico del rotor, consideremos la circula-
ción de un fluido alrededor de un loop diferencial en el plano xy, figura 1.19.
Aunque la circulación técnicamente está dada por la integral lineal de un vector V~ · d~λ
R
(sección 1.10), podemos establecer las integrales escalares equivalentes. Tomemos la circula-
ción como
Z Z Z Z
circulación1234 = Vx (x, y)dλx + Vy (x, y)dλy + Vx (x, y)dλx + Vy (x, y)dλy . (1.86)
1 2 3 4
La circulación14 alrededor de nuestra área diferencial en el plano xy está dada por la compo-
~ V~ . En principio, el rotor, ∇×
nente z de ∇× ~ V~ en (x0 , y0 ), podrı́a ser determinado insertando
www.elsolucionario.net
una rueda con paleta (diferencial) dentro del fluido en movimiento en el punto (x0 , y0 ). La
rotación de la pequeña rueda de paleta podrı́a ser una medida del rotor, y su eje a lo largo
~ × V~ , la cual es perpendicular al plano de circulación.
de la dirección de ∇
Usaremos el resultado, ecuación (1.87), en la sección 1.13 para derivar el teorema de
Stokes. Cada vez que el rotor de un vector V~ se anula,
~ × V~ = 0 ,
∇ (1.89)
1. reglas vectoriales, y
www.elsolucionario.net
2. reglas de diferenciación parcial incluyendo la de diferenciación de un producto.
~ A
∇( ~ · B)
~ = (B
~ · ∇)
~ A~ + (A
~ · ∇)
~ B~ +B
~ × (∇ ~ +A
~ × A) ~ × (∇ ~ .
~ × B) (1.91)
~ A
En este particular ejemplo el factor más importante es reconocer que ∇( ~ · B)
~ es el tipo de
términos que aparecen en la expansión BAC −CAB de un producto triple vectorial, ecuación
(1.64). Por ejemplo,
~ × (∇
A ~ × B)~ = ∇(
~ A~ · B)
~ − (A~ · ∇)
~ B~ ,
con ∇ ~ no a A.
~ diferenciando sólo a B, ~ De la conmutatividad de los factores en el producto
escalar nosotros podemos intercambiar A~ con B
~ y escribimos
~ × (∇
B ~ = ∇(
~ × A) ~ A~ · B)
~ − (B
~ · ∇)
~ A~,
~ no a B.
~ diferenciando sólo a A,
ahora con ∇ ~ Sumando estas ecuaciones, obtenemos ∇~ dife-
~ ~
renciando al producto A · B y la identidad (1.91).
Esta identidad es usada frecuentemente en teorı́a electromagnética avanzada.
1.9. ~
Aplicaciones sucesivas de ∇.
Hemos definido gradiente, divergencia y rotor para obtener un vector, un escalar y una
~ sobre cada una de estas cantida-
cantidad vectorial, respectivamente. Usando el operador ∇
des, obtenemos
~ · ∇ϕ
(a) ∇ ~ ~ × ∇ϕ
(b) ∇ ~ ~∇
(c)∇ ~ · V~
(d) ∇ ~ × V~
~ ·∇ ~ × V~ ) ,
~ × (∇
(e) ∇
www.elsolucionario.net
~
1.9. APLICACIONES SUCESIVAS DE ∇. 35
las cinco expresiones involucran una segunda derivada y las cinco aparecen en las ecuacio-
nes diferenciales de segundo orden de la Fı́sica Matemática, particularmente en la teorı́a
electromagnética.
~ · ∇ϕ,
La primera expresión, ∇ ~ la divergencia del gradiente, es llamada el Laplaciano de
ϕ. Tenemos
~ ~ ∂ ∂ ∂ ∂ϕ ∂ϕ ∂ϕ
∇ · ∇ϕ = x̂ + ŷ + ẑ · x̂ + ŷ + ẑ
∂x ∂y ∂z ∂x ∂y ∂z
2 2 2
(1.92)
∂ ϕ ∂ ϕ ∂ ϕ
= + 2 + 2 .
∂x2 ∂y ∂z
~ ·∇
la cual es la ecuación de Laplace de la electroestática. A menudo la combinación ∇ ~ es
2
www.elsolucionario.net
escrita como ∇ ~ .
la expresión (b) puede ser escrita
x̂ ŷ ẑ
∂ ∂ ∂
~ × ∇ϕ~ =
∇ ∂x ∂y ∂z .
∂ϕ ∂ϕ ∂ϕ
∂x ∂y ∂z
suponiendo que el orden de las derivadas parciales puede ser intercambiado. Esto es cierto
ya que estas segundas derivadas parciales de ϕ son funciones continuas.
Luego, de la ecuación (1.94), el rotor de un gradiente es idénticamente nulo. Todos los
gradientes, por lo tanto, son irrotacionales. Note cuidadosamente que el cero en la ecuación
(1.94) se vuelve una identidad matemática, independiente de cualquier Fı́sica. El cero en la
ecuación (1.93) es una consecuencia de la Fı́sica.
La expresión (d) es un producto escalar triple el cual puede ser escrito
∂ ∂ ∂
∂x ∂y ∂z
~ ~ ~
∇·∇×V = ∂
∂ ∂ . (1.95)
∂x ∂y ∂z
V Vy Vz
x
www.elsolucionario.net
~
1 ∂E
∇ ~ =
~ ×B , (1.100)
c ∂t
~
∇ ~ = − 1 ∂B ,
~ ×E (1.101)
c ∂t
~ es el campo eléctrico, B
Aquı́ E ~ es el campo magnético c la velocidad de la luz en el vacı́o
(unidades cgs). Supongamos que eliminamos B ~ de las ecuaciones (1.100) y (1.101). Podemos
hacer esto tomando rotor a ambos lados de (1.101) y la derivada temporal a ambos lados de
(1.100). Ya que las derivadas espaciales y temporales conmutan
∂ ~ ~
∇×B ~ × ∂B ,
~ =∇ (1.102)
∂t ∂t
y obtenemos
2~
∇~ × (∇ ~ =−1 ∂ E .
~ × E) (1.103)
c2 ∂t2
Aplicando las ecuaciones (1.97) y (1.99) se produce
1 ∂2E~
~ =
∇2 E , (1.104)
c2 ∂t2
que es la ecuación de onda para el vector electromagnético. De nuevo, si E~ es expresado en
coordenadas cartesianas, la ecuación (1.104) se separa en tres ecuaciones escalares.
www.elsolucionario.net
Z Z Z Z
ϕ d~s = x̂ ϕ(x, y, z) dx + ŷ ϕ(x, y, z) dy + ẑ ϕ(x, y, z) dz . (1.108)
c c c c
la cual es permisible porque los vectores unitarios cartesianos x̂, ŷ, ẑ son constantes en
magnitud y dirección. Quizás esta relación es obvia aquı́, pero no será verdadera en los
sistemas no cartesianos encontrados en el siguiente capı́tulo.
Las tres integrales sobre el lado derecho de la ecuación (1.108) son integrales escalares
ordinarias. Note, sin embargo, que la integral con respecto a x no puede ser evaluada a menos
que y y z sean conocidos en términos de x y similarmente para las integrales con respecto
a y y z. Esto simplemente significa que el camino de integración C debe ser especificado.
A menos que el integrando tenga propiedades especiales que lleve a la integral a depender
solamente de los valores de los puntos extremos, el valor dependerá de la elección particular
del contorno de C. Por ejemplo, si escogemos el caso muy especial de ϕ = 1, la ecuación
(1.108) es sólo la distancia vectorial desde el comienzo del contorno C al punto final, en
este caso es independiente de la elección del camino que conecta los puntos extremos. Con
d~s = x̂dx + ŷdy + ẑdz, las segunda y tercera formas también se reducen a una integral escalar
y, como la ecuación (1.105), son dependientes, en general, de la elección del camino. La
forma (ecuación (1.106)) es exactamente la misma, como la encontrada cuando calculamos
el trabajo hecho por una fuerza que varı́a a lo largo del camino,
Z
W = F~ · d~s
Z Z Z (1.110)
= Fx (x, y, z)dx + Fy (x, y, z)dy + Fz (x, y, z)dz .
www.elsolucionario.net
z
→
n
x
Figura 1.20: Regla de la mano derecha para la normal positiva.
www.elsolucionario.net
V~ · d~a
R
~ · V~ = R lı́m
∇ R , (1.113)
dv→0 dv
d~a × V~
R
~ ~
∇ × V = R lı́m R . (1.114)
dv→0 dv
R
En estas tres ecuaciones dv es el volumen de una pequeña región del espacio y da es el
elemento de área vectorial de ese volumen. La identificación de la ecuación (1.113) como la
divergencia de V~ fue realizada en la sección 1.7. Aquı́ mostramos que la ecuación (1.112) es
~ (ecuación (1.68)). Por simplicidad escogemos
consistente con nuestra definición inicial de ∇ϕ
dv como la diferencial de volumen dxdydz (figura 1.21). Esta vez colocamos el origen en el
centro geométrico de nuestro elemento de volumen. La integral de área tiende a seis integrales,
una por cada una de las seis caras. Recordando que d~a es hacia afuera, d~ax̂ = − | d~a | para
la superficie EF HG, y + | d~a | para la superficie ABCD, tenemos
Z Z Z
∂ϕ dx ∂ϕ dx
ϕ d~a = −x̂ ϕ− dydz + x̂ ϕ+ dydz−
EF GH ∂x 2 ABDC ∂x 2
Z Z
∂ϕ dy ∂ϕ dy
− ŷ ϕ− dxdz + +ŷ ϕ− dxdz−
AEGC ∂y 2 BF HD ∂y 2
Z Z
∂ϕ dz ∂ϕ dz
− ẑ ϕ− dxdy + ẑ ϕ− dxdy .
ABF E ∂z 2 CDHG ∂z 2
Usando los dos primeros términos de la expansión de Maclaurin, evaluamos cada integrando
en el origen con una corrección incluida para corregir por el desplazamiento (±dx/2, etc.)
del centro deR la cara desde el origen. Habiendo escogido el volumen total como el tamaño
diferencial ( dv = dxdydz), obtenemos
Z
∂ϕ ∂ϕ ∂ϕ
ϕ d~a = x̂ + ŷ + ẑ dxdydz . (1.115)
∂x ∂y ∂z
15
Frecuentemente se denota d3 r o d3 x al elemento de volumen.
www.elsolucionario.net
G H
C D
E F y
A B
x
Figura 1.21: Paralelepı́pedo rectangular diferencial con el origen en el centro.
www.elsolucionario.net
Dividiendo por Z
dv = dxdydz ,
Esto, por supuesto, son las razones especificadas en las ecuaciones (1.112), (1.113) y (1.114),
en las cuales este lı́mite es tomado.
La verificación de la ecuación (1.114) sigue esta misma lı́nea exactamente, usando un
volumen diferencial dxdydz.
En otras palabras, la integral de superficie de un vector sobre una superficie cerrada es igual
a la integral de volumen de la divergencia del vector integrada sobre el volumen encerrado
definido por la superficie.
www.elsolucionario.net
Figura 1.22: Cancelación exacta de los d~a sobre las superficies interiores. Sobre la superficie
www.elsolucionario.net
externa no hay cancelación.
X
V~ · d~a = ∇
~ · V~ dv , (1.117)
seis superficies
del análisis de la sección 1.7, la ecuación (1.76), con ρ~v reemplazado por V~ . La suma es sobre
las seis caras del paralelepı́pedo. Sumando sobre todos los paralelepı́pedos, encontramos que
el término V~ · d~a se cancela para todas las caras internas; solamente las contribuciones de
las superficies externas sobreviven (figura 1.22). Análoga a la definición de una integral de
Riemann como el lı́mite de una suma, tomamos el lı́mite sobre el número de paralelepı́pedos
tendiendo a infinito (→ ∞) y las dimensiones de cada uno tendiendo a cero (→ 0).
X X
V~ · d~a = ~ · V~ dv
∇
superficies externas volúmenes
↓ ↓
Z Z
V~ · d~a = ~ · V~ dv
∇
S V
~ · (u∇v)
∇ ~ = u∇
~ · ∇v
~ + (∇u)
~ · (∇v)
~ , (1.118)
~ · (v ∇u)
∇ ~ = v∇
~ · ∇u
~ + (∇v)
~ · (∇u)
~ . (1.119)
Este es el teorema de Green. Una forma alternativa del teorema de Green derivada de la
ecuación (1.118) es
www.elsolucionario.net
Z Z Z
~
u∇v · d~a = ~ ~
u∇ · ∇v dv + ~ · ∇v
∇u ~ dv . (1.121)
S V V
www.elsolucionario.net
1.8 mostramos que la circulación alrededor de tales rectángulos diferenciales (en el plano xy)
~ × V~ |2 dxdy. De la ecuación (1.87) aplicada a un rectángulo diferencial
es ∇
X
V~ · d~v = ∇
~ × V~ · d~a . (1.127)
Sumamos sobre todos los pequeños rectángulos como en la definición de una integral de
Riemann. Las contribuciones superficiales (lado derecho de la ecuación (1.127)) son sumadas
juntas. Las integrales de lı́nea (lado izquierdo de la ecuación (1.127)) sobre todos los segmentos
internos se cancelan. Solamente la integral de lı́nea alrededor del perı́metro sobrevive (figura
1.23). Tomando el lı́mite usual con el número de rectángulos tendiendo a infinito mientras
dx → 0, dy → 0, tenemos
X X
V~ · d~s = ∇~ × V~ · d~a
segmentos externos rectángulos
↓ = ↓ (1.128)
I Z
V~ · d~s = ~ × V~ · d~a .
∇
S
ds
Figura 1.23: Cancelación exacta de los caminos interiores. Sobre el perı́metro externo no hay
cancelación.
www.elsolucionario.net
posibles. Encontramos
Z I
~
d~a × ∇ϕ = ϕ d~s (1.129)
S
y
Z I
~ × P~ =
(d~a × ∇) d~s × P~ . (1.130)
S
obtenemos I
Z
~a · ~aϕ · d~s + ~
∇ϕ × d~a = 0 . (1.133)
S
~ × F~ = 0
∇ (1.135)
www.elsolucionario.net
y I
F~ · d~s = 0 , (1.136)
para todo camino cerrado en nuestra región S. Procedemos a mostrar que cada una de esas
ecuaciones implica las otras dos.
Comencemos con
F~ = −∇ϕ~ . (1.137)
Entonces
~ × F~ = −∇
∇ ~ × ∇ϕ
~ =0 (1.138)
por las ecuaciones (1.94) o (1.18) implica la ecuación (1.135). Volviendo a la integral de lı́nea,
tenemos I I I
F~ · d~s = − ∇ϕ~ · d~s = − dϕ , (1.139)
usando la ecuación (1.71). Al integrar dϕ nos da ϕ. Ya que hemos especificado un loop cerrado,
los puntos extremos coinciden y obtenemos cero para cada camino cerrado en nuestra región
S, por lo cual la ecuación (1.134) se mantiene. Es importante notar aquı́ la restricción de que
el potencial sea univaluado y que la ecuación (1.134) se mantenga para todos los puntos sobre
S. Este problema puede presentarse al usar un potencial escalar magnético, un procedimiento
perfectamente válido mientras el camino no rodeé corriente neta. Tan pronto como escojamos
un camino que rodeé una corriente neta, el potencial magnético escalar cesa de ser mono
valuado y nuestro análisis no tiene mayor aplicación.
ContinuandoH esta demostración de equivalencia, supongamos que la ecuación (1.136) se
mantiene. Si F~ · d~s = 0 para todos los caminos en S, vemos que el valor de la integral
cerrada para dos puntos distintos A y B es independiente del camino (figura 1.24). Nuestra
premisa es que I
F~ · d~s = 0 . (1.140)
ACBDA
www.elsolucionario.net
B
D
A C
Por lo tanto Z Z Z
F~ · d~s = − F~ · d~s = F~ · d~s , (1.141)
ACB BDA ADB
cambiando el signo al revertir la dirección de integración. Fı́sicamente, esto significa que el
www.elsolucionario.net
trabajo hecho al ir de A a B es independiente del camino y que el trabajo hecho sobre un
camino cerrado es cero. Esta es la razón para etiquetar como una fuerza conservativa: la
energı́a es conservada.
Con el resultado mostrado en la ecuación (1.141), tenemos que el trabajo hecho depende
solamente de los puntos extremos, A y B. Esto es,
Z B
trabajo hecho por la fuerza = F~ · d~s = ϕ(A) − ϕ(B) . (1.142)
A
F~ · d~s = −dϕ
(1.143)
~ · d~s .
= −∇ϕ
→ →ϕ
F =− ∇
→ → →. →
∇ F=0
∫
www.elsolucionario.net
F d s =0
Para resumir, una función potencial escalar univaluada ϕ existe si y sólo si F~ es irrotacio-
nal o el trabajo hecho en torno a loops cerrados es cero. Los campos de fuerza gravitacional y
electroestáticos dados por la ecuación (1.91) son irrotacionales y por lo tanto, conservativos.
Un potencial escalar gravitacional y electroestático existen.
se satisfaga. Esto, sin embargo, es exactamente análogo a la ecuación (1.135), con el re-
querimiento de que F~ sea irrotacional. Por cierto, la componente z de la ecuación (1.135)
es
∂Fx ∂Fy
= , (1.151)
∂y ∂x
con
∂f ∂f
Fx = , Fy = .
∂x ∂y
~ =∇
B ~.
~ ×A (1.152)
www.elsolucionario.net
solenoidal. Aquı́ queremos desarrollar el converso, mostrar que cuando B ~ es solenoidal un
potencial vectorial A ~ existe. Demostramos la existencia de A ~ calculándolo. Suponga que
~ ~
B = x̂b1 + ŷb2 + ẑb3 y nuestra incógnita A = x̂a1 + ŷa2 + ẑa3 . Por la ecuación (1.152)
∂a3 ∂a2
− = b1 , (1.153)
∂y ∂z
∂a1 ∂a3
− = b2 , (1.154)
∂z ∂x
∂a2 ∂a1
− = b3 . (1.155)
∂x ∂y
~ es paralelo al plano yz; esto
Supongamos que las coordenadas han sido escogidas tal que A
16
es, a1 = 0 . Entonces
∂a3
b2 = −
∂x (1.156)
∂a2
b3 = .
∂x
Integrando, obtenemos
Z x
a2 = b3 dx + f2 (y, z) ,
Zx0x (1.157)
a3 = − b2 dx + f3 (y, z) ,
x0
donde f2 y f3 son funciones arbitrarias de y y z pero no son funciones de x. Estas dos ecua-
ciones pueden ser comprobadas diferenciando y recobrando la ecuación (1.156). La ecuación
16
Claramente esto puede hacerse en cualquier punto, y su justificación final será que obtendremos un
potencial con dos componentes que satisfaga la ecuación 1.152.
www.elsolucionario.net
(1.153) se convierte en
Z x
∂a3 ∂a2 ∂b2 ∂b3 ∂f3 ∂f2
− =− + dx + −
∂y ∂z x0 ∂y ∂z ∂y ∂z
Z x (1.158)
∂b1 ∂f3 ∂f2
= dx + − ,
x0 ∂x ∂y ∂z
~ = 0. Integrando con respecto a x, tenemos
~ ·B
usando ∇
∂a3 ∂a2 ∂f3 ∂f2
− = b1 (x, y, z) − b1 (x0 , y, z) + − . (1.159)
∂y ∂z ∂y ∂z
Recordando que f3 y f2 son funciones arbitrarias de y y z, escogemos
f2 = 0 ,
Z y
(1.160)
f3 = b1 (x0 , y, z)dy ,
y0
www.elsolucionario.net
tal que el lado derecho de la ecuación (1.159) se reduce a b1 (x, y, z) en acuerdo con la ecuación
(1.153). Con f2 y f3 dado por la ecuación (1.160), podemos construir A. ~
Z x Z y Z x
~
A = ŷ b3 (x, y, z)dx + ẑ b1 (x0 , y, z)dy − b2 (x, y, z)dx . (1.161)
x0 y0 x0
Esto no es muy completo. Podemos añadir una constante, ya que B ~ es una derivada de
~
A. Y mucho más importante, podemos añadir un gradiente de una función escalar ∇ϕ ~ sin
~ Finalmente, las funciones f2 y f3 no son únicas. Otras elecciones podrı́an haber
afectar a B.
sido hechas. En vez de ajustar a1 = 0 para obtener las ecuaciones (1.153)-(1.155) cualquier
permutación cı́clica de 1, 2, 3, x, y, z, x0 , y0 , z0 también podrı́a funcionar.
Agregar un gradiente de una función escalar, digamos Λ, al vector potencial A ~ no afecta
~
a B, por la ecuación (1.94), esta transformación es conocida como transformación de gauge.
~→A
A ~0 = A
~ + ∇Λ
~ . (1.162)
S q
→ →
∫ E. d a =0
→
∫ E. d →
S
q a = 4π q
www.elsolucionario.net
^r 0
S
siempre que la superficie S no incluya el origen, donde el integrando no está bien definido.
Esto prueba la segunda parte de la ley de Gauss.
La primera parte, en la cual la superficie S deberı́a incluir el origen, puede ser tomada por
los alrededores del origen con una pequeña esfera S 0 de radio δ (figura 1.27). De esa manera
no habrá duda de que si está afuera o si está adentro, imaginemos que el volumen externo a
la superficie más externa y el volumen del lado interno de la superficie S 0 (r > δ) se conectan
por un pequeño espacio. Estas superficies unidas S y S 0 , las combinamos en una superficie
cerrada. Ya que el radio del espacio interior puede hacerse infinitamente pequeño, allı́ no hay
contribución adicional de la integral de superficie. La superficie interna está deliberadamente
escogida para que sea esférica tal que seamos capaces de integrar sobre ella. El teorema de
www.elsolucionario.net
q r̂ · d~a q r̂ · da~0
Z Z
+ =0, (1.165)
S r2 S0 δ2
Podemos evaluar la segunda integral, para d~a0 = −r̂δ 2 dΩ, donde dΩ es el diferencial de ángulo
sólido. El signo menos aparece porque concordamos en la sección 1.10 para tener la normal
positiva r̂0 fuera del volumen. En este caso r̂0 externo está en la dirección radial, r̂0 = −r̂.
Integrando sobre todos los ángulos, tenemos
q r̂ · da~0 q r̂ · r̂δ 2 dΩ
Z Z
=− = −4πq , (1.166)
S0 δ2 S0 δ2
independiente del radio δ. Luego tenemos
Z
~ · d~σ = 4πq ,
E (1.167)
s
www.elsolucionario.net
completando la prueba de la ley de Gauss. Note cuidadosamente que aunque la superficie S
puede ser esférica, no necesariamente es esférica.
Avanzando un poco más, consideremos una carga distribuida tal que
Z
q= ρ dv . (1.168)
V
La ecuación (1.167) todavı́a se aplica, con q interpretada como la distribución de carga total
encerrada por la superficie S. Z Z
E~ · d~a = 4π ρ dv . (1.169)
s V
Usando el teorema de Gauss, tenemos
Z Z
∇ ~ =
~ · Edv 4πρ dv . (1.170)
V V
Ya que nuestro volumen es completamente arbitrario, los integrandos deben ser iguales o
∇ ~ = 4πρ ,
~ ·E (1.171)
∇2 ϕ = 0 , (1.173)
www.elsolucionario.net
∇2 ϕ = +4πGρ (1.174)
www.elsolucionario.net
1.15. La delta de Dirac.
Del desarrollo de la ley de Gauss en la sección 1.14
(
−4π
Z Z
~ ·∇
~ 1 ~ · r̂
∇ dv = − ∇ dv = , (1.175)
r r2 0
δ(x) = 0 , x 6= 0 (1.177)
Z
f (x)δ(x)dx = f (0) , (1.178)
donde f (x) es cualquiera función bien comportada y la integración incluye el origen. Un caso
especial de la ecuación (1.178), Z
δ(x)dx = 1 . (1.179)
De la ecuación (1.178), δ(x) debe ser un pico infinitamente alto y delgado en x = 0, como
en la descripción de un impulso de fuerza o la densidad de carga para una carga puntual. El
problema es que tales funciones no existen en el sentido usual de una función. Sin embargo
la propiedad crucial en la ecuación (1.178) puede ser desarrollada rigurosamente como el
lı́mite de una sucesión de funciones, una distribución. Por ejemplo, la función delta puede
www.elsolucionario.net
3/2
f3
1
f2
1/2
f1
www.elsolucionario.net
Figura 1.28: Sucesión a la delta.
ser aproximada por la sucesión de funciones, ecuaciones (1.180) a (1.182) y las figuras 1.28 a
1.30 :
0 ,
si x < −1/n
δn (x) = n/2 , si −1/n < x < 1/n (1.180)
0, si x > 1/n
n 2 2
δn (x) = √ e−n x (1.181)
π
Z n
sen(nx) 1
δn (x) = = eixt dt . (1.182)
πx 2π −n
f3
f2
f1
t
Figura 1.29: Sucesión a la delta.
www.elsolucionario.net
f3
f2
f1
no existen.
Una salida para esta dificultad está dada por la teorı́a de las distribuciones. Reconociendo
que la ecuación (1.178) es la propiedad fundamental, enfocaremos nuestra atención sobre algo
más que δ(x). Las ecuaciones (1.180)-(1.182) con n = 1, 2, 3, . . . pueden ser interpretadas como
una sucesión de funciones normalizadas:
Z ∞
δn (x) dx = 1 . (1.184)
−∞
www.elsolucionario.net
Note que la ecuación (1.185) es el lı́mite de una sucesión de integrales. Nuevamente , el lı́mite
δn (x) , n → ∞, no existe. (El lı́mite para todas las formas de δn diverge en x = 0.)
Podemos tratar δ(x) consistentemente en la forma
Z ∞ Z ∞
δ(x)f (x) dx = lı́m δn (x)f (x) dx . (1.186)
−∞ n→∞ −∞
δ(x) es etiquetado como una distribución (no una función) definida por la sucesión δn (x)
como está indicado en la ecuación (1.186). Podrı́amos enfatizar que la integral sobre el lado
izquierdo de la ecuación (1.186) no es una integral de Riemann. Es un lı́mite.
Esta distribución δ(x) es solamente una de una infinidad de posibles distribuciones, pero
es la única en que estamos interesados en la ecuación (1.178). A partir de estas sucesión
www.elsolucionario.net
de funciones vemos que la “función” delta de Dirac debe ser par en x, δ(−x) = δ(x). La
propiedad integral, la ecuación (1.178), es útil en casos donde el argumento de la función
delta es una función g(x) con ceros simples sobre el eje real, el cual tiende a las reglas
1
δ(ax) = δ(x) , a>0, (1.187)
a
X δ(x − a)
δ(g(x)) = . (1.188)
| g 0 (a) |
a,g(a)=0,g 0 (a)6=0
en una suma de integrales sobre pequeños intervalos que contiene los ceros de g(x). En esos
intervalos, g(x) ≈ g(a) + (x − a)g 0 (a) = (x − a)g 0 (a). Usando la ecuación (1.187) sobre el lado
derecho de la ecuación (1.189) obtenemos la integral de la ecuación (1.188).
Usando integración por partes también podemos definir la derivada δ 0 (x) de la delta de
Dirac por la relación
Z ∞ Z ∞
0
δ (x − x0 )f (x) dx = − f 0 (x)δ(x − x0 ) dx = −f 0 (x0 ) . (1.190)
−∞ −∞
Usamos δ(x) frecuentemente y la llamamos la delta de Dirac17 por razones históricas. Re-
cuerde que no es realmente una función. Es esencialmente una notación más taquigráfica,
17
Dirac introdujo la delta para Mecánica Cuántica.
www.elsolucionario.net
También podrı́a ser clasificada como un mapeo lineal o simplemente como una función ge-
neralizada. Desplazando nuestra singularidad al punto x = x0 , escribimos la delta de Dirac
como δ(x − x0 ). La ecuación (1.178) se convierte en
Z ∞
f (x)δ(x − x0 ) dx = f (x0 ) (1.192)
−∞
Como una descripción de una singularidad en x = x0 , la delta de Dirac puede ser escrita
como δ(x −x0 ) o como δ(x0 −x). En tres dimensiones y usando coordenadas polares esféricas,
obtenemos
www.elsolucionario.net
Z 2π Z π Z ∞ Z ∞Z ∞Z ∞
2
δ(~r) r dr sen θ dθ dϕ = δ(x)δ(y)δ(z) dx dy dz = 1 . (1.193)
0 0 0 −∞ −∞ −∞
donde el intervalo (a, b) puede ser infinito en uno de los lados o en ambos. [Por conveniencia
suponemos que ϕn (x) ha sido definida para incluir (w(x))1/2 si las relaciones de ortogonalidad
contienen una función de peso positivo adicional w(x)]. Usamos ϕn (x) para expandir la delta
como ∞
X
δ(x − t) = an (t)ϕn (x) , (1.196)
n=1
donde los coeficientes an son funciones de la variable t. Multiplicando por ϕm (x) e integrando
sobre el intervalo ortogonal (ecuación (1.195)), tenemos
Z b
am (t) = δ(x − t)ϕm (x) dx = ϕm (t) (1.197)
a
www.elsolucionario.net
o ∞
X
δ(x − t) = ϕm (t)ϕm (x) = δ(t − x) . (1.198)
m=1
Esta serie ciertamente no es uniformemente convergente, pero puede ser usada como parte
de un integrando en el cual la integración
R resultante la hará convergente.
Suponga que forma la integral F (t)δ(t − x)dx, donde se supone que F (t) puede ser
expandida en una serie de funciones ortogonales ϕp (t), una propiedad llamada completitud.
Luego obtenemos
Z Z X ∞ ∞
X
F (t)δ(t − x)dt = ap ϕp (t) ϕn (x)ϕn (t) dt
p=0 n=0
∞ (1.199)
X
= ap ϕp (x) = F (x) ,
p=0
R
los productos cruzado ϕp ϕn dt con (n 6= p) se anulan por ortogonalidad (ecuación (1.195)).
www.elsolucionario.net
Refiriéndonos a la anterior definición de la función delta de Dirac, ecuación (1.178), vemos
que nuestra representación en serie, ecuación (1.198), satisface la propiedad de definición de
la delta de Dirac que es llamada clausura. La suposición de completitud de un conjunto de
funciones para la expansión de δ(x − t) produce la relación de clausura. Lo converso, que
clausura implica completitud.
www.elsolucionario.net
1.16. Teorema de Helmholtz.
~
En la sección 1.13 enfatizamos que la elección de un potencial vectorial magnético A
~
no era único. La divergencia de A estaba aún indeterminada. En esta sección dos teoremas
acerca de la divergencia y el rotor de un vector son desarrollados. El primer teorema es el
siguiente:
Un vector está únicamente especificado dando su divergencia y su rotor dentro de una
región y su componente normal sobre el contorno.
Tomemos
~ · V~1 = s ,
∇
(1.206)
~ × V~1 = ~c ,
∇
donde s puede ser interpretado como una fuente (densidad de carga) y ~c como una circulación
(densidad de corriente). Suponiendo también que la componente normal V1n sobre el lı́mite
está dada, deseamos mostrar que V~1 es único. Hacemos esto suponiendo la existencia de un
segundo vector V~2 , el cual satisface la ecuación (1.206) y tiene la misma componente normal
sobre el borde, y luego mostrando que V~1 − V~2 = 0. Sea
~ = V~1 − V~2 .
W
Luego
∇ ~ =0
~ ·W (1.207)
y
∇ ~ =0.
~ ×W (1.208)
~ es irrotacional podemos escribir (por la sección 1.13)
Ya que W
~ = −∇ϕ
W ~ . (1.209)
www.elsolucionario.net
la ecuación de la Laplace.
Ahora hagamos uso del teorema de Green en la forma dada en la ecuación (1.121, siendo
u y v cada uno igual a ϕ. Ya que
~ ·W
La cantidad W ~ = W 2 es no negativa y por eso tenemos
~ = V~1 − V~2 = 0 ,
W (1.213)
www.elsolucionario.net
en todo lugar. Por lo tanto V~1 es único, probando el teorema.
Para nuestro potencial vectorial magnético A~ la relación B
~ =∇~ ×A ~ especifica el rotor de
~ A menudo por conveniencia ajustamos ∇
A. ~ = 0. Luego (con las condiciones de borde)
~ ·A
~ está fijo.
A
Este teorema puede ser escrito como un teorema de unicidad para las soluciones de ecua-
ciones de Laplace. En esta forma, este teorema de unicidad es de gran importancia en la
solución de los problemas de contorno de electroestática y otras de ecuaciones tipo Laplace
con condiciones de borde. Si podemos encontrar una solución de las ecuación de Laplace que
satisfaga las condiciones de borde necesarias, nuestra solución es la solución completa.
V~ = −∇ϕ
~ +∇ ~,
~ ×A (1.214)
~ irrotacional y ∇
−∇ϕ ~ ×A ~ solenoidal. Procederemos a justificar la ecuación (1.214).
Sea V~ un vector conocido. Le tomamos la divergencia y el rotor
~ · V~ = s(~r)
∇ (1.215)
~ × V~ = ~c(~r) .
∇ (1.216)
con s(~r) y ~c(~r) funciones conocidas de la posición. A partir de estas dos funciones construimos
un potencial escalar ϕ(~r1 ), Z
1 s(~r2 )
ϕ(~r1 ) = dv2 , (1.217)
4π r12
www.elsolucionario.net
~ r1 ),
y un potencial vector A(~ Z
~ r1 ) = 1
A(~
~c(~r2 )
dv2 . (1.218)
4π r12
Si s = 0, luego V~ es solenoidal y la ecuación (1.217) implica ϕ = 0. De la ecuación (1.214),
V~ = ∇ ~ ×A ~ con A~ como en la ecuación (1.161) es consistente con la sección 1.13. Además,
si ~c = 0, luego V~ es irrotacional y la ecuación (1.218) implica A ~ = 0, y la ecuación (1.214)
implica V~ = −∇ϕ, ~ consistente con la teorı́a de potencial escalar de la sección 1.13.
Aquı́, el argumento ~r1 indica que (x1 , y1 , z1 ), es el campo puntual; ~r2 , las coordenadas de
la fuente puntual (x2 , y2 , z2 ), mientras
Cuando una dirección está asociada con r12 , la dirección positiva se toma alejándose de la
fuente. Vectorialmente, ~r12 = ~r1 − ~r2 , como se muestra en la figura 1.31. Por supuesto, s y ~c
deben anularse suficientemente rápido en distancias grandes tal que existan las integrales. La
www.elsolucionario.net
expansión actual y la evaluación de las integrales tales como las ecuaciones (1.217) y (1.218)
están tratadas más adelante,
Campo puntual
z (x1 ,y1 ,z 1 )
→ (x2 ,y2 ,z 2 )
r12
→
r1
Fuente puntual
→
r2
y
A partir del teorema de unicidad en los comienzos de esta sección, V~ es único al especificar
su divergencia, s, y su rotor, ~c (y su valor sobre el contorno). Volviendo a la ecuación (1.214),
tenemos
∇~ · V~ = −∇~ · ∇ϕ
~ , (1.220)
la divergencia del rotor se anula y
~ × V~ = ∇
∇ ~ ×∇ ~,
~ ×A (1.221)
~ · ∇ϕ(~
−∇ ~ r1 ) = s(~r1 ) (1.222)
www.elsolucionario.net
y
~ ×∇
∇ ~ r1 ) = ~c(~r1 ),
~ × A(~ (1.223)
luego V~ está dado en la ecuación (1.214) tendrá la divergencia y el rotor apropiado. Nuestra
descripción será internamente consistente y la ecuación (1.214) estará justificada.
Z
~ ~ ~ ~ 1 ~ ~ s(~r2 )
∇ · V = −∇ · ∇ϕ = − ∇ · ∇ dv2 . (1.224)
4π r12
~ ·∇
El operador Laplaciano, ∇ ~ ó ∇2 , opera sobre las coordenadas de campo (x1 , y1 , z1 ) y por
lo tanto conmuta con la integración con respecto a (x2 , y2 , z2 ). Tenemos
Z
~ ~ 1 2 1
∇·V =− s(~r2 )∇1 dv2 (1.225)
4π r12
www.elsolucionario.net
ley de Gauss aparece si y sólo si la superficie incluye el punto ~r = ~r2 . Para mostrar esto,
reescribimos la ecuación (1.175):
2 1
∇1 = −4πδ(~r1 − ~r2 ) . (1.226)
r12
Este corrimiento de la fuente a ~r2 puede ser incorporado en las ecuaciones de definición
(1.178) como
δ(~r1 − ~r2 ) = 0 , ~r1 6= ~r2 , (1.227)
Z
f (~r1 )δ(~r1 − ~r2 ) dv1 = f (~r2 ) . (1.228)
−1
Segundo, notando que diferenciando dos veces r12 con respecto a x2 , y2 , z2 es la misma cuando
diferenciamos dos veces con respecto a x1 , y1 , z1 , tenemos
2 1 2 1
∇1 = ∇2 = −4πδ(~r1 − ~r2 )
r12 r12 (1.229)
= −4πδ(~r2 − ~r1 ) .
El paso final se sigue de la ecuación (1.228) con los subı́ndices 1 y 2 intercambiados. Nuestros
resultados, ecuación (1.230), muestran que la forma supuesta de V~ y del potencial escalar ϕ
están en concordancia con la divergencia dada (ecuación (1.215)). Para completar la prueba
www.elsolucionario.net
del teorema de Helmholtz, necesitamos mostrar que nuestras suposiciones son consistentes
con la ecuación (1.216), esto es, que el rotor de V~ es igual a ~c(~r1 ). De la ecuación (1.214),
~ × V~ = ∇
∇ ~ ×∇ ~=∇
~ ×A ~∇ ~ − ∇2 A
~ ·A ~. (1.231)
~∇
El primer término, ∇ ~ tiende a
~ ·A
Z
~∇ ~=
~ ·A 1
4π ∇ ~c(~r2 ) · ∇1 ∇1 dv (1.232)
r12
www.elsolucionario.net
= ∇2 · ~c(~r2 ) dv2 − [∇2 · ~c(~r2 )] dv2 .
∂x2 r12 ∂x2 r12
Esto es exactamente como la ecuación (1.225) excepto que el escalar s(~r2 ) es reemplazado por
la densidad de circulación vectorial ~c(~r2 ). Introduciendo la delta de Dirac, como antes, como
una manera conveniente de llevar a cabo la integración, definimos que la ecuación (1.234) se
reduce a la ecuación (1.206). Vemos que nuestra forma supuesta de V~ , dada por la ecuación
(1.214), y del potencial vectorial A,~ dado por la ecuación (1.218), están de acuerdo con la
ecuación (1.206), especı́ficamente con el rotor de V~ .
Esto completa la prueba del teorema de Helmholtz, mostrando que un vector puede ser
resuelto en una parte irrotacional y otra solenoidal. Aplicado al campo electromagnético,
hemos resuelto nuestro campo vectorial V~ en un campo eléctrico irrotacional E, ~ derivado
de un potencial escalar ϕ, y un campo de magnético solenoidal B, ~ derivado de un potencial
~
vectorial A. La densidad de fuente s(~r) puede ser interpretada como una densidad de carga
eléctrica (dividida por la permitividad eléctrica ), mientras que la densidad de circulación
~c(~r) se convierte en la densidad de corriente eléctrica.
www.elsolucionario.net
Capı́tulo 2
Anteriormente nos hemos restringido casi por completo a coordenadas cartesianas. Estas
coordenadas ofrecen la ventaja de que los tres vectores unitarios, x̂, ŷ, ẑ, son constantes
www.elsolucionario.net
tanto en dirección como en magnitud. Infortunadamente, no todos los problemas fı́sicos se
adaptan bien a una solución en coordenadas cartesianas. Por ejemplo, si tenemos un problema
de fuerzas centrales, F~ = r̂F (r), tal como una fuerza gravitacional o electroestática, las
coordenadas cartesianas son particularmente poco apropiadas. Tales problemas llaman a
usar un sistema de coordenadas en el cual la distancia radial es tomada como una de las
coordenadas, es decir, coordenadas polares esféricas.
El sistema de coordenadas debe ser elegido apropiadamente para el problema, explotando
cualquier restricción o simetrı́a presente en él.
Naturalmente, hay un precio que pagar por usar un sistema no cartesiano de coorde-
nadas. Debemos desarrollar nuevas expresiones para el gradiente, la divergencia, el rotor
y el Laplaciano en estos nuevos sistemas de coordenadas. En este capı́tulo desarrollaremos
tales expresiones de una manera muy general para luego particularizarla a los sistemas de
coordenadas más usados: coordenadas circulares cilı́ndricas y coordenadas polares esféricas.
63
www.elsolucionario.net
q1 , q2 , q3 ρ, ϕ, z
x = x(q1 , q2 , q3 ) −∞ < x = ρ cos ϕ < ∞
(2.1)
y = y(q1 , q2 , q3 ) −∞ < y = ρ sen ϕ < ∞
z = z(q1 , q2 , q3 ) −∞ < z = z < ∞ ,
especificando x,y,z en términos de los qi y las relaciones inversas,
Como una ilustración especı́fica de los abstractos (q1 , q2 , q3 ) incluimos las ecuaciones de trans-
formación para las coordenadas circulares cilı́ndricas. Para cada familia de superficies qi =
www.elsolucionario.net
constante, podemos asociar un vector unitario êi normal a la superficie qi = constante y en
la dirección de crecimiento de qi . Entonces un vector V~ puede ser escrito
Los êi están normalizados por ê2i = 1 y forman un sistema de coordenadas diestro con volumen
ê1 · (ê2 × ê3 ) > 0.
Diferenciando a x en (2.1) conduce a
∂x ∂x ∂x
dx = dq1 + dq2 + dq3 , (2.4)
∂q1 ∂q2 ∂q3
de la misma manera diferenciando y y z. A partir del teorema de Pitágoras en coordenadas
cartesianas, el cuadrado de la distancia entre dos puntos vecinos es
El cuadrado del elemento de distancia en nuestras coordenadas curvilı́neas puede ser escrito
ds2 =g11 dq12 + g12 dq1 dq2 + g13 dq1 dq3 + g21 dq2 dq1 + g22 dq22
(2.6)
X
g23 dq2 dq3 + g31 dq3 dq1 + g32 dq3 dq2 + g33 dq32 = gij dqi dqj ,
ij
donde2
∂x ∂x ∂y ∂y ∂z ∂z
gij = + + . (2.7)
∂qi ∂qj ∂qi ∂qj ∂qi ∂qj
Estos coeficientes gij pueden verse como especificando la naturaleza del sistema de coordena-
das (q1 , q2 , q3 ). Colectivamente estos coeficientes son referidos como la métrica. Mostraremos
más adelante que forman un tensor simétrico de segundo rango. En Relatividad General los
2
Los dqi son arbitrarios. Por ejemplo, haciendo dq2 = dq3 = 0 aislamos g11 .
www.elsolucionario.net
Los especı́ficos sistemas de coordenadas ortogonales son descritos en las secciones siguientes,
especificando estos factores de escala h1 , h2 y h3 . Por otra parte, los factores de escala pueden
ser identificados por la relación
dsi = hi dqi , (2.10)
www.elsolucionario.net
para algún dqi dado, manteniendo los otros qi constantes. Notemos que las tres coordenadas
curvilı́neas (q1 , q2 , q3 ) no necesariamente son una longitud. Los factores de escala hi pueden
depender de las qi y pueden tener dimensiones. Los productos hi dqi deben tener dimensiones
de longitud y ser positivos. El vector de desplazamiento diferencial d~s puede ser escrito
X
d~s = h1 dq1 ê1 + h2 dq2 ê2 + h3 dq3 ê3 = hi dqi êi .
i
Usando las componentes curvilı́neas, encontramos que la integral de lı́nea llega a ser
Z XZ
~
V · d~s = Vi hi dqi .
i
y
dv = ds1 ds2 ds3 = h1 h2 h3 dq1 dq2 dq3 . (2.12)
Estas expresiones coinciden con los resultados obtenidos al usar las transformaciones explı́ci-
tamente y el Jacobiano.
A partir de la ecuación (2.11) un elemento de área puede ser expandido:
d~a = ds2 ds3 ê1 + ds3 ds1 ê2 + ds1 ds2 ê3
= h2 h3 dq2 dq3 ê1 + h3 h1 dq3 dq1 ê2 + h1 h2 dq1 dq2 ê3 .
Debemos dejar claro que el álgebra vectorial es el mismo en coordenadas curvilı́neas ortogo-
nales que en coordenadas cartesianas. Especı́ficamente, el producto punto
~·B
A ~ = A1 B1 + A2 B2 + A3 B3 , (2.14)
donde los subı́ndices indican componentes curvilı́neas. Para el producto cruz
ê1 ê2 ê3
~×B ~ = A1 A2 A3
A (2.15)
B1 B2 B3
www.elsolucionario.net
que tiene la magnitud y dirección de la razón máxima de crecimiento. A partir de esta inter-
~
pretación las componentes de ∇ψ(q 1 , q2 , q3 ) en la dirección normal a la familia de superficies
q1 = constante es dado por
~ = ∂ψ = ∂ψ ,
~ = ∇ψ
ê1 · ∇ψ 1
(2.16)
∂s1 h1 ∂q1
ya que esta es la razón de cambio de ψ para variaciones de q1 , manteniendo q2 y q3 fijos.
La cantidad ds1 es un diferencial de longitud en la dirección de incremento de q1 . El vector
unitario ê1 indica la dirección. Si repetimos este cálculo para las otras componentes q2 y q3 y
sumamos vectorialmente obtenemos la expresión del gradiente
~ ∂ψ ∂ψ ∂ψ
∇ψ(q 1 , q2 , q3 ) = ê1 + ê2 + ê3
∂s1 ∂s2 ∂s3
∂ψ ∂ψ ∂ψ
= ê1 + ê2 + ê3 (2.17)
h1 ∂q1 h2 ∂q2 h3 ∂q3
X 1 ∂ψ
= êi .
i
hi ∂qi
2.2.2. Divergencia.
El operador divergencia puede obtenerse de una de sus definiciones
V~ · d~a
R
~ · V~ (q1 , q2 , q3 ) = R lı́m
∇ R , (2.18)
dv→0 dv
con un volumen diferencial h1 h2 h3 dq1 dq2 dq3 (figura 2.1). Notemos que la dirección positiva
ha sido escogida tal que (q1 , q2 , q3 ) o (ê1 , ê2 , ê3 ) formen un sistema diestro, ê1 × ê2 = ê3 .
La integral de área sobre las dos caras q1 = constante es dada por
∂ ∂
V1 h2 h3 + (V1 h2 h3 )dq1 dq2 dq3 − V1 h2 h3 dq2 dq3 = (V1 h2 h3 )dq1 dq2 dq3 , (2.19)
∂q1 ∂q1
www.elsolucionario.net
z
ds3= h 3 dq 3
4 3
1 2
ds2= h 2 dq 2 ds1= h 1 dq 1
y
x
www.elsolucionario.net
considerando las otras componentes
Z
∂ ∂ ∂
V~ (q1 , q2 , q3 ) · d~a = (V1 h2 h3 ) + (V2 h3 h1 ) + (V3 h1 h2 ) dq1 dq2 dq3 . (2.20)
∂q1 ∂q2 ∂q3
2.2.3. Rotor.
Finalmente, para desarrollar ∇ ~ × V~ , apliquemos el teorema de Stokes y, como con la
divergencia, tomemos el lı́mite en que el área de la superficie llega a ser despreciablemente
pequeña. Trabajando sobre una componente a la vez, consideremos un diferencial de área en
la superficie curvilı́nea q1 = constante. A partir de
Z
∇~ × V~ · d~σ = ê1 · (∇
~ × V~ ) h2 h3 dq2 dq3 , (2.23)
S
www.elsolucionario.net
www.elsolucionario.net
Tomamos el signo positivo cuando vamos en la dirección positiva sobre las partes 1 y 2 y
negativa sobre las partes 3 y 4 porque aquı́ vamos en la dirección negativa. Los términos más
altos en las expansiones de Taylor son omitidos. Ellos desaparecerán en el lı́mite en que la
superficie llega a ser despreciablemente pequeña (dq2 → 0, dq3 → 0).
z 3
4
(q 2 ,q 3 ) 2 ds3= h 3 dq 3
e^2 1 e^3
ds2= h 2 dq 2
y
Las dos componentes restantes pueden ser evaluadas tomando una permutación cı́clica de
www.elsolucionario.net
Notemos que esta ecuación no es idéntica a la forma del producto cruz de dos vectores, ya
~ no es un vector ordinario, sino que es un vector operador.
que ∇
www.elsolucionario.net
rieron importancia en el desarrollo histórico de la Mecánica Cuántica. Otros como el bipolar
satisfacen necesidades especı́ficas. Debido al desarrollo de computadores de alta velocidad
y a la eficiencia de las técnicas de programación se ha reducido la necesidad de utilizar es-
tos sistemas. Nos limitaremos a coordenadas cartesianas, coordenadas polares esféricas, y
coordenadas circulares cilı́ndricas.
h1 = hx = 1 ,
h2 = hy = 1 , (2.28)
h3 = hz = 1 .
Las familias de superficies coordenadas son tres conjuntos de planos paralelos: x = constante,
y = constante, y z = constante. Las coordenadas cartesianas es el único sistema en que todos
los hi son constantes. Notemos también que los vectores unitarios, ê1 , ê2 , ê3 o x̂, ŷ, ẑ tienen
direcciones fijas.
Los operadores vectoriales corresponden a
~ = x̂ ∂ψ + ŷ ∂ψ + ẑ ∂ψ ,
∇ψ (2.29)
∂x ∂y ∂z
www.elsolucionario.net
ρ y
ϕ
z = constante.
Notemos que estamos usando ρ como la distancia perpendicular al eje z. Las relaciones de
transformación inversas
x = ρ cos ϕ ,
y = ρ sen ϕ , (2.33)
z=z ,
de acuerdo a las ecuaciones anteriores los factores de escala son
h1 = hρ = 1 ,
h2 = hϕ = ρ, (2.34)
h3 = hz = 1 .
Los vectores unitarios ê1 , ê2 , ê3 son reetiquetados (ρ̂, ϕ̂, ẑ), figura 2.4. El vector unitario ρ̂ es
normal a la superficie cilı́ndrica apuntando en la dirección de crecimiento del radio ρ. El vector
unitario ϕ̂ es tangencial a la superficie cilı́ndrica, perpendicular al semi plano ϕ = constante
y apuntando en la dirección de crecimiento del ángulo ϕ. El tercer vector unitario, ẑ, es el
www.elsolucionario.net
vector unitario cartesiano usual.
z
∧
z
∧
ϕ
y
ϕ ∧
ρ
x
Figura 2.4: Vectores unitarios en coordenadas circulares cilı́ndricas.
~ ∂ψ 1 ∂ψ ∂ψ
∇ψ(ρ, ϕ, z) = ρ̂ + ϕ̂ + ẑ , (2.36)
∂ρ ρ ∂ϕ ∂z
www.elsolucionario.net
2. Conos circulares centrados sobre el eje z y vértice en el origen
!
z
θ = arc cos = constante.
(x2 + y 2 + z 2 )1/2
midiendo θ desde el eje z positivo y ϕ en el plano xy desde el eje x positivo. Los intervalos
de valores son 0 ≤ r < ∞, 0 ≤ θ ≤ π, y 0 ≤ ϕ ≤ 2π. A partir de la ecuación (2.7)
h1 = hr = 1 ,
h2 = hθ = r, (2.41)
h3 = hϕ = r sen θ .
El elemento de arco
d~s = r̂dr + θ̂rdθ + ϕ̂r sen θdϕ .
En este sistema de coordenadas esféricas el elemento de área (para r = constante) es
dθ y
dϕ
x
Figura 2.5: Elementos de área en coordenadas polares esféricas.
www.elsolucionario.net
el área sombreada en la figura 2.5. Integrando sobre el azimutal ϕ, encontramos que el ele-
mento de área llega a ser un anillo de ancho dθ,
Esta forma aparece con frecuencia en problemas en coordenadas polares con simetrı́a azimu-
tal. Por definición el stereoradian, un elemento de ángulo sólido dΩ, es dado por
dA
dΩ = = sen θdθdϕ . (2.44)
r2
Integrando sobre la superficie esférica completa, obtenemos
Z
dΩ = 4π .
Los vectores unitarios en coordenadas polares esféricas son mostrados en la figura 2.6.
Debemos enfatizar que los vectores unitarios r̂, θ̂ y ϕ̂ varı́an en dirección cuando los
ángulos θ y ϕ varı́an. Cuando diferenciamos vectores en coordenadas polares esféricas (o en
cualquier otro sistema no cartesiano) estas variaciones de los vectores unitarios con respecto
a la posición no deben ser despreciadas. Escribamos los vectores unitarios r̂, θ̂ y ϕ̂ en término
de los vectores unitarios cartesiano de dirección fija x̂, ŷ, ẑ
z
∧
r
∧
(x,y,z)
ϕ
∧
θ
θ
r
y
ϕ
∧
ϕ
∧ ∧
x θ r
www.elsolucionario.net
Notemos que un vector dado puede ser expresado en un número de diferentes (pero equiva-
lentes) maneras. Por ejemplo, el vector posición ~r puede ser escrito
~r = r̂r
1/2
= r̂ x2 + y 2 + z 2
= x̂x + ŷy + ẑz
= x̂r sen θ cos ϕ + ŷr sen θ sen ϕ + ẑr cos θ . (2.47)
Podemos seleccionar la forma que nos es más útil para nuestro problema particular.
A partir de la sección 2.2 reetiquetando los vectores unitarios en coordenadas curvilı́neas
ê1 , ê2 , ê3 como r̂, θ̂, y ϕ̂ tenemos
~ ∂ψ 1 ∂ψ 1 ∂ψ
∇ψ(ρ, ϕ, z) = r̂ + θ̂ + ϕ̂ , (2.48)
∂r r ∂θ r sen θ ∂ϕ
~ · V~ = 1 ∂ 2 ∂ ∂Vϕ
∇ sen θ (r Vr ) + r (sen θVθ ) + r , (2.49)
r2 sen θ ∂r ∂θ ∂ϕ
1 ∂2ψ
2 1 ∂ 2 ∂ψ ∂ ∂ψ
∇ψ= 2 sen θ r + sen θ + , (2.50)
r sen θ ∂r ∂r ∂θ ∂θ sen θ ∂ϕ2
r̂ rθ̂ r sen θϕ̂
~ × V~ = 1
∂ ∂ ∂
∇ . (2.51)
2
r sen θ ∂r ∂θ
∂ϕ
Vr rVθ r sen θVϕ
www.elsolucionario.net
www.elsolucionario.net
Hay una posible ambigüedad en la ley de transformación de un vector
X
A0i = aij Aj , (2.52)
j
~ = x̂ ∂ϕ + ŷ ∂ϕ + ẑ ∂ϕ ,
∇ϕ (2.56)
∂x1 ∂x2 ∂x3
usando (x1 , x2 , x3 ) para (x, y, z), transforma como
∂ϕ0 X ∂ϕ ∂xj
= , (2.57)
∂x0i j
∂xj ∂x0i
www.elsolucionario.net
www.elsolucionario.net
Ahora procedemos a definir tensores de rango dos contravariantes, mixtos y covariantes
por las siguientes ecuaciones para sus componentes bajo transformación de coordenadas:
X ∂x0 ∂x0j
0 ij i
A = Akl ,
kl
∂xk ∂xl
i
X ∂x0 ∂xl
B0j = i
0
Blk , (2.59)
kl
∂xk ∂xj
X ∂xk ∂xl
Cij0 = Ckl .
kl
∂x0i ∂x0j
El tensor de segundo rango A (de componentes Akl ) puede ser convenientemente escrito
por sus componentes en un arreglo cuadrado (de 3×3 si estamos en un espacio tridimensional),
A11 A12 A13
A = A21 A22 A23 . (2.60)
A31 A32 A33
Esto no significa que cualquier arreglo de números o funciones formen un tensor. La condición
esencial es que las componentes transformen de acuerdo a la ecuación (2.59).
www.elsolucionario.net
entonces
Aij + B ij = C ij .
Naturalmente, A y B deben ser tensores del mismo rango y ambos expresados en un espacio
del mismo número de dimensiones.
i ∂x0i ∂xl k
B0j = B , (2.62)
∂xk ∂x0j l
con las sumas sobre k y l implı́citas en el lado derecho. Esta es la convención de suma.
Para ilustrar el uso de la convención de suma y algunas técnicas del análisis tensorial,
mostremos que la familiar delta de Kronecker, δkl , es realmente un tensor mixto de rango dos,
δlk .5 La pregunta es: ¿La δlk transformará de acuerdo a la ecuación (2.59)? Este es nuestro
criterio para llamarlo un tensor. Usando la convención de suma tenemos
a partir de la regla de la cadena. Sin embargo, x0i y x0j son coordenadas independientes, y por
tanto la variación de una respecto a la otra debe ser cero si ellas son diferentes y uno si ellas
coinciden, esto es
∂x0i i
0
= δ0j . (2.65)
∂xj
Por tanto
i ∂x0i ∂xl k
δ0j = δ ,
∂xk ∂x0j l
mostrando que δlk son realmente las componentes de un tensor mixto de rango dos. Notemos
que el resultado es independiente del número de dimensiones de nuestro espacio.
www.elsolucionario.net
La delta de Kronecker posee además una interesante propiedad. Tiene las mismas com-
ponentes en todos los sistemas de coordenadas rotados y por lo tanto es llamada isotrópica.
Tensores de primer rango (vectores) no isotrópicos existen.
2.6.5. Simetrı́a–Antisimetrı́a.
El orden en el cual los ı́ndices aparecen en nuestra descripción de un tensor es importante.
En general, Amn es independiente de Anm , pero hay algunos casos de interés especial. Si, para
todo m y n,
Amn = Anm , (2.66)
lo llamaremos un tensor simétrico. Si, por otra parte,
el tensor lo llamaremos antisimétrico. Claramente, cada tensor (de segundo rango) puede ser
resuelto en una parte simétrica y otra antisimétrica por la identidad
1 mn 1
Amn = (A + Anm ) + (Amn − Anm ) , (2.68)
2 2
el primer término de la derecha es un tensor simétrico y el segundo, un tensor antisimétrico.
Una similar resolución de las funciones en una parte simétrica y otra antisimétrica es de
extrema importancia en Mecánica Cuántica.
2.6.6. Spinores.
Podrı́amos pensar que un sistema de escalares, vectores, tensores (de rango dos) y su-
periores forman un sistema matemático completo, uno que es adecuado para describir una
Fı́sica independiente de nuestra elección de sistema de coordenadas. Pero el universo y la
Fı́sica Matemática no es ası́ de simple. En el reino de las partı́culas elementales, por ejemplo,
www.elsolucionario.net
partı́culas de spin cero (mesones π, partı́culas α) pueden ser descritos con escalares; partı́cu-
las de spin 1 (deuterones) por vectores, y partı́culas de spin 2 (gravitones), por tensores. Esta
lista omite a las partı́culas más comunes: electrones, protones y neutrones, todas ellas con
spin 12 . Estas partı́culas son propiamente descritas por spinores. Un spinor no es un escalar,
vector o tensor.
www.elsolucionario.net
contracción. Dos ı́ndices, uno covariante y el otro contravariante, se igualan uno con otro
y luego sumamos sobre ese ı́ndice repetido. Por ejemplo, veamos la contracción del tensor
mixto de segundo orden Bji .
Nuestro tensor contraı́do es invariante y por lo tanto un escalar. Esto es exactamente lo que
obtuvimos anteriormente para el producto punto de dos vectores y para la divergencia de un
vector. En general, la operación de contracción reduce el orden de un tensor en 2.
del esquema del análisis vectorial. En general, el producto directo de dos tensores es un tensor
de rango igual a la suma de los dos rangos iniciales; esto es,
www.elsolucionario.net
sido mantenida ya que existe en espacio no cartesiano y porque es de gran importancia en
relatividad general. Ahora, sin embargo, nos restringimos al tensor cartesiano. Como se hizo
notar en el caso cartesiano, la distinción entre contravariancia y covariancia desaparece y
todos los ı́ndices están, a partir de ahora en adelante, mostrados como subı́ndices.
2.7.4. Contracción.
La contracción consiste en fijar dos ı́ndices distintos (subı́ndices), igualar uno a otro y
luego sumarlos según la convención de suma.
K i Ai =B , (2.76a)
Kij Aj = Bi , (2.76b)
Kij Ajk = Bik , (2.76c)
Kijkl Aij = Bkl , (2.76d)
Kij Ak = Bijk . (2.76e)
En cada una de esas expresiones A y B son tensores conocidos cuyo rango está indicado por
el número de ı́ndices y el tensor A es arbitrario. En cada caso K es una cantidad desconocida.
www.elsolucionario.net
K 0 ij A0 j = B 0 i = aik Bk , (2.77)
www.elsolucionario.net
(2.55)), tenemos
K 0 ij A0 j = aik Kkl ajl A0 j . (2.79)
Reordenando, tenemos
(K 0 ij − aik ajl Kkl )A0 j = 0 . (2.80)
Esto debe mantenerse para cada valor del ı́ndice i y para cada sistema de coordenadas prima.
Ya que A0j es arbitrario, concluimos
xi = −x0i , (2.82)
la cual es una inversión o transformación de paridad. Notemos que esta transformación cambia
nuestro sistema de coordenadas inicialmente diestro a un sistema de coordenadas siniestro.6
Nuestro vector prototipo ~r con componentes (x1 , x2 , x3 ) se transforma en el vector ~r 0 =
(x01 , x02 , x03 ) = (−x1 , −x2 , −x3 ). Este nuevo vector ~r 0 tiene componentes negativas, relativas
6
Esta es una inversión del sistema de coordenadas, los objetos en el mundo fı́sico permanecen fijos.
www.elsolucionario.net
al nuevo conjunto de ejes transformados. Como se muestra en la figura 2.7, invirtiendo las
direcciones de los ejes de coordenadas y cambiando los signos de las componentes da ~r 0 =
~r. El vector (una flecha en el espacio) permanece exactamente como estaba antes de que
la transformación se llevara a cabo. El vector posición ~r y todos los otros vectores cuyas
componentes se comporten de esta manera (cambiando el signo con una inversión de los ejes
de coordenadas) son llamados vectores polares y tienen paridad impar.
x2
x’3
r r’
x1 x’1
www.elsolucionario.net
x3
x’2
Una diferencia fundamental aparece cuando encontramos un vector definido como el pro-
~ = A
ducto cruz de dos vectores polares. Sea C ~ × B,
~ donde tanto A~ como B ~ son vectores
~ están dadas por
polares. Las componentes de C
C1 = A2 B3 − A3 B2 . (2.83)
y ası́ sucesivamente. Ahora cuando los ejes de coordenadas son invertidos, Ai → A0i , Bj → Bj0 ,
~ no se comporta
de su definición Ck → +Ck0 ; esto es, nuestro vector producto cruz, vector C,
como un vector polar bajo inversión. Para distinguir, lo etiquetamos como pseudo vector o
vector axial (ver figura 2.8) que tiene paridad par.
Ejemplos son:
velocidad angular, ~ × ~r ,
~v = ω
momento angular, ~ = ~r × p~ ,
L
torque, ~τ = ~r × F~ ,
~
∂B
campo magnético, = −c∇ ~ ×E ~ .
∂t
~ × ~r, el vector axial es la velocidad angular ω
En ~v = ω ~ , y ~r y ~v = d~r/dt son vectores polares.
Claramente, los vectores axiales ocurren frecuentemente en Fı́sica elemental, aunque este
hecho usualmente no es recalcado. En un sistema de coordenadas de mano derecha un vector
~ tiene un sentido de rotación asociado con el dado por la regla de la mano derecha. En
axial C
www.elsolucionario.net
y
C z’
x x’
z
C’ y’
www.elsolucionario.net
el sistema invertido de mano izquierda, el sentido de la rotación es una rotación de la mano
izquierda. Esto es indicado por las flechas curvadas en la figura 2.8.
La distinción entre vectores polares y axiales también puede ser ilustrada por una reflexión.
Un vector polar se refleja en un espejo como un flecha fı́sica real, figura 2.9a. En la figuras
2.7 y 2.8 las coordenadas están invertidas; el mundo fı́sico permanece fijo. Aquı́ los ejes
de coordenadas permanecen fijos; el mundo es reflejado como en un espejo en el plano xz.
Especı́ficamente, en esa representación mantenemos los ejes fijos y asociamos un cambio de
signo con la componente del vector. Para un espejo en el plano xz, Py → −Py . Tenemos
P = (Px , Py , Pz ) ,
P 0 = (Px , −Py , Pz ) , vector polar.
(a) (b)
y y
P’ P µ
I I
x µ x
z z
Figura 2.9: (a) Espejo en el plano xz; (b) Espejo en el plano xz.
Un vector axial tal como el momento magnético ~µ (corriente × área de loop) o el campo
~ se comporta muy diferentemente bajo reflexión.
magnético B
www.elsolucionario.net
~ = (µx , µy , µz ) ,
µ
~µ 0 = (−µx , µy , −µz ) vector axial.
S0 = | a | S
www.elsolucionario.net
Ci0 = | a | aij Cj , (2.84)
A0ij = | a | aik ajl Akl ,
y nuevamente el determinante es | a | = −1. Por otra parte, para todas las rotaciones puras el
determinante | a | es siempre +1. A menudo las cantidades que transforman de acuerdo a la
ecuación (2.84) son conocidas como densidad tensorial. Ellos son tensores regulares en cuanto
a rotaciones se refiere, diferenciándose de los tensores solamente en reflexiones o inversiones
de las coordenadas, y luego la única diferencia es la aparición de un signo menos adicional
del determinante | a |.
Anteriormente mostramos que el producto escalar triple S = A ~×B ~ ·C~ es un escalar
(bajo rotaciones). Ahora considerando la transformación de paridad dada por la ecuación
(2.82), vemos que S → −S, probando que el producto escalar triple es un pseudo escalar.
Este comportamiento fue presagiado por la analogı́a geométrica de un volumen. Si los tres
parámetros del volumen, longitud, ancho, profundidad, cambian de distancias positivas a
distancias negativas, el producto de los tres será negativo.
7
La gran excepción a esto está en el decaimiento beta, interacciones débiles. Aquı́ el Universo distingue
entre sistemas derechos y sistemas izquierdos.
www.elsolucionario.net
Note que εijk es totalmente antisimétrico con respecto a todo par de ı́ndices. Suponga que
tenemos un pseudo tensor de tercer rango δijk , el cual en un sistema de coordenadas particular
es igual a εijk . Luego
0
δijk = | a | aip ajq akr εpqr , (2.88)
por definición de pseudo tensor. Ahora, podemos expresar el determinante de a como
www.elsolucionario.net
0
por directa expansión del determinante, mostrando que δ123 = | a |2 = 1 = ε123 . Considerando
las otras posibilidades una a una, encontramos
0
δijk = εijk , (2.90)
para rotaciones y reflexiones. Luego εijk es un pseudo tensor. Además, se ve como un pseudo
tensor isotrópico con las mismas componentes en todos los sistemas de coordenadas cartesia-
nos rotados.
Sabemos que Ci debe transformar como un vector bajo rotaciones a partir de la doble con-
tracción del (pseudo) tensor de quinto rango εijk Cmn , pero éste es realmente un pseudo vector
desde la naturaleza “pseudo” de εijk . Especı́ficamente, las componentes de C ~ están dadas por
Note que el orden cı́clico de los ı́ndices vienen del orden cı́clico de las componentes de εijk . Esta
dualidad, dada por la ecuación (2.93), significa que nuestro producto vectorial tridimensional
www.elsolucionario.net
puede, literalmente, ser tomado ya sea como un pseudo vector o como un tensor antisimétrico
de segundo rango, dependiendo de como escojamos escribirlo.
Si tomamos tres vectores (polares) A,~ B,~ y C,
~ podemos definir
Ai Aj Ak
Vijk = Bi Bj Bk = Ai Bj Ck − Ai Bk Cj + . . . . (2.94)
Ci Cj Ck
Por una extensión del análisis de la sección 2.6 cada término Ap Bq Cr es visto como un
tensor de tercer rango, haciendo Vijk un tensor de rango tres. A partir de su definición como
un determinante, Vijk es totalmente antisimétrico, cambiando signo bajo el intercambio de
cualquier par de ı́ndices, esto es, el intercambio de cualquier par de filas del determinante.
La cantidad dual es
1
V = εijk Vijk , (2.95)
3!
claramente un pseudo escalar. Por expansión se ve que
www.elsolucionario.net
A1 A2 A3
V = B1 B2 B3 , (2.96)
C1 C2 C3
El término −r2 δij representa una resta de la traza escalar (los 3 términos i = j). El resultante
Qij tiene traza cero.
www.elsolucionario.net
coordenadas no cartesianas y resurge la distinción entre contravariante y covariante. Como
en la sección 2.6, un superı́ndice será usado para denotar la dependencia contravariante y un
subı́ndice para diferenciar la covariante. El tensor métrico de la sección 2.1 será usado para
relacionar los ı́ndices contravariante y covariante.
El énfasis en esta sección es sobre diferenciación, culminando en la construcción de una
derivada covariante. Vimos en la sección 2.7 que la derivada de un campo vectorial es un
tensor de segundo orden en coordenadas cartesianas. La derivada covariante de un campo
vectorial es un tensor de segundo orden en sistemas de coordenadas no cartesianas.
∂~s
~εi = , (2.103)
∂q i
Note, sin embargo, que los ~εi no tienen necesariamente magnitud uno. Se puede probar que
los vectores unitarios son
1 ∂~s
êi = , (no hay suma),
hi ∂q i
y por lo tanto
~εi = hi êi , (no hay suma). (2.104)
www.elsolucionario.net
Los ~εi están relacionados a los vectores unitarios êi por el factor de escala hi de la sección
2.2. Los êi no tienen dimensiones, los ~εi tienen dimensiones de hi . En coordenadas polares
esféricas, como un ejemplo especı́fico,
~εr = êr ,
~εθ = r êθ , (2.105)
~εφ = r sen θ êφ .
Como en la sección 2.1, construimos el cuadrado de un desplazamiento diferencial
Comparando esto con (ds)2 de la sección 2.1, ecuación (2.6), definimos ~εi · ~εj como el tensor
métrico covariante
~εi · ~εj = gij . (2.107)
Claramente gij es simétrico. La naturaleza del tensor gij se deduce a partir de la regla del
cociente. Tomemos la relación
www.elsolucionario.net
g ik gkj = δji , (2.108)
para definir el correspondiente tensor contravariante g ik . El contravariante g ik entra como el
inverso8 del covariante gkj . Usemos este contravariante g ik para subir ı́ndices, convirtiendo
un ı́ndice covariante en uno contravariante, como se muestra más adelante. Ası́ mismo el
covariante gkj será usado para bajar ı́ndices. La elección de g ik y gkj para esta operación de
subir y bajar es arbitraria. Cualquier tensor de segundo orden (y su inverso) podrı́a hacerlo.
Especı́ficamente, tenemos
g ij ~εj = ~ε i , relación de covariante y
contravariante de vectores bases
(2.109)
g ij F~j = F~ i , relación de covariante y
contravariante de componentes vectoriales.
Entonces
gij ~ε j = ~εi , son las correspondientes relaciones
(2.110)
gij F~ j = F~i , de bajada de ı́ndices.
Como un ejemplo de esas transformaciones comenzaremos con la forma contravariante del
vector
F~ = F i ~εi . (2.111)
De las ecuaciones (2.109) y (2.110)
F~ = Fj g ji gik ~ε k = Fj ~ε j , (2.112)
Deberı́amos enfatizar de nuevo que ~εi y ~ε j no son unitarios. Esto puede verse en las
ecuaciones (2.105) y en el tensor métrico gij para coordenadas polares esféricas y su inverso
g ij :
1 0 0
1 0 0 1
(gij ) = 0 r 2
0 (g ij ) = 0 r2 0 .
2
0 0 r sen θ2 1
0 0
r2 sen2 θ
www.elsolucionario.net
a ser
~ = ∂ψ ~ε i .
∇ψ (2.114)
∂q i
Deberı́amos notar que ∂ψ/∂q i no son las componentes del gradiente de la sección 2.2, ya que
~ε i 6= êi de la sección 2.2.
Continuando con las derivadas de un vector, encontramos que la situación es mucho más
complicada porque los vectores bases ~εi , en general, no son constantes. Recordemos que no
estamos más restringidos a las coordenadas cartesianas con sus convenientes x̂, ŷ, ẑ. La
diferenciación directa es
∂ V~ ∂V i ∂~εi
j
= j
~εi + V i j . (2.115)
∂q ∂q ∂q
Ahora ∂~εi /∂q j será alguna combinación lineal de ~εk con coeficientes que dependen de los
ı́ndices i y j de las derivadas parciales y el ı́ndice k del vector base. Escribimos
∂~εi
= Γkij ~εk . (2.116)
∂q j
Multiplicando por ~ε m y usando ~ε m · ~εk = δkm (pruébelo).
∂~εi
Γm εm ·
ij = ~ . (2.117)
∂q j
El Γkij es un sı́mbolo de Christoffel (del segundo tipo). También se le conoce como “coeficiente
de conexión”. Estos Γkij no son tensores de rango tres y las ∂V i /∂q j de la ecuación (2.115) no
son tensores de segundo rango. En coordenadas cartesianas, Γkij = 0 para todos los valores
de los ı́ndices i, j, k.
Usando la ecuación (2.103), obtenemos
∂~εi ∂ 2~s ∂~εj
j
= j i
= i == Γkji ~εk . (2.118)
∂q ∂q ∂q ∂q
Luego estos sı́mbolos de Christoffel son simétricos en los dos ı́ndices inferiores:
Γkij = Γkji . (2.119)
www.elsolucionario.net
∂ V~ ∂V i
= ~εi + V i Γkij ~εk . (2.120)
∂q j ∂q j
∂ V~ ∂V i
k i
= + V Γkj ~εi . (2.121)
∂q j ∂q j
∂V i
V;ji ≡ + V k Γikj . (2.122)
∂q j
www.elsolucionario.net
Los subı́ndices ; j indican que la diferenciación es con respecto a q j . La diferencial dV~ se
convierte en
∂ V~
dV~ = j dq j = [V;ji dq j ]~εi . (2.123)
∂q
Una comparación con las ecuaciones (2.102) o (2.111) muestra que la cantidad entre paréntesis
cuadrados es la i-ésima componente de un vector contravariante. Ya que dq j es la j-ésima
componente de un vector contravariante, V;ji debe ser la componente ij-ésima de un tensor
mixto de segundo rango (regla del cociente). Las derivadas covariantes de las componentes
contravariantes de un vector forma un tensor mixto de segundo rango, V;ji .
Ya que los sı́mbolos de Christoffel desaparecen en coordenadas cartesianas, la derivada
covariante y la derivada parcial ordinaria coinciden
∂V i
= V;ji , (En coordenadas cartesianas). (2.124)
∂q j
Se puede demostrar que la derivada covariante de un vector covariante Vi está dada por
∂Vi
Vi;j = − Vk Γkij . (2.125)
∂q j
[ij, k] ≡ gmk Γm
ij . (2.126)
∂~εi
[ij, k] = gmk ~ε m · ,
∂q j
(2.127)
∂~εi
= ~εk · j .
∂q
www.elsolucionario.net
∂gij ∂~εi ∂~εj
k
= k · ~εj + ~εi · k ,
∂q ∂q ∂q (2.128)
= [ik, j] + [jk, i] ,
Γsij = g ks [ij, k] ,
(2.130)
1 ks ∂gik ∂gjk ∂gij
= g + − k .
2 ∂q j ∂q i ∂q
Estos sı́mbolos de Christoffel y las derivadas covariantes son aplicadas en la próxima sección.
2.11.1. Divergencia.
Reemplazando las derivadas parciales por la derivada covariante, tomamos la divergencia
como
i
∇~ · V~ = V;ii = ∂V + V k Γiik . (2.131)
∂q i
www.elsolucionario.net
www.elsolucionario.net
1 ∂g 1 ∂g 1/2
Γiik = = . (2.136)
2g ∂q k g 1/2 ∂q k
Esto da
~ · V~ = V;ii = 1 ∂ (g 1/2 V k ) .
∇ (2.137)
g 1/2 ∂q k
Para comparar este resultado con la ecuación (2.21), note que h1 h2 h3 = g 1/2 y V i = Vi /hi
(V i es el coeficiente contravariante de ~εi y no hay suma), donde Vi es el coeficiente de êi .
2.11.2. Laplaciano.
En la sección 2.2 reemplazamos el vector V~ en ∇
~ · V~ por ∇ψ
~ para obtener al Lapla-
~ · ∇ψ.
ciano ∇ ~ i
Aquı́ tenemos un V contravariante. Usando el tensor métrico para crear un
~
contravariante ∇ψ, hacemos la sustitución
∂ψ
V i → g ik . (2.138)
∂q k
~ · ∇ψ
Entonces el Laplaciano ∇ ~ se convierte
∇ ~ = 1 ∂ (g 1/2 g ik ∂ψ ) .
~ · ∇ψ (2.139)
g 1/2 ∂q i ∂q k
Para los sistemas ortogonales de la sección 2.2 el tensor métrico es diagonal y el contravariante
g ii (no hay suma) llega a ser
g ii = (hi )−2 .
La ecuación (2.139) se reduce a
~ · ∇ψ
~ = 1 ∂ h1 h2 h3 ∂ψ
∇ .
h1 h2 h3 ∂q i h2i ∂q k
en concordancia con la ecuación (2.22).
www.elsolucionario.net
2.11.3. Rotor.
La diferencia de derivadas que aparece en el rotor (ecuación (2.26)) será escrita
∂Vi ∂Vj
− i .
∂q j ∂q
Nuevamente, recordemos que las componentes de Vi aquı́ son los coeficientes contravariantes
de los vector no unitarios base ~ε i . Los Vi de la sección 2.2 son coeficientes de los vectores
unitarios êi . Usando
Γkij = Γkji ,
obtenemos
∂Vi ∂Vj ∂Vi ∂Vj
j
− i = j − Vk Γkij − i + Vk Γkji
∂q ∂q ∂q ∂q (2.140)
= Vi;j − Vj;i .
www.elsolucionario.net
Las diferencias caracterı́sticas de derivadas de un rotor llegan a ser diferencias en derivadas
covariantes y por lo tanto es un tensor de segundo orden (covariante en ambos ı́ndices).
Como enfatizamos en la sección 2.9, la forma vectorial especial del rotor existe solamente en
el espacio tridimensional.
De la ecuación (2.130) es claro que todos los sı́mbolos de Christoffel de tres ı́ndices se
anulan en el espacio de Minkowski y en el espacio-tiempo real de la relatividad especial con
1 0 0 0
0 −1 0 0
gλµ = 0 0 −1 0 .
(2.141)
0 0 0 −1
Aquı́
x0 = ct , x1 = x , x2 = y , y x3 = z .
Esto completa el desarrollo de los operadores diferenciales en la forma tensorial general.
En adición a los campos elásticos y electromagnéticos, estas formas diferenciales encuentran
aplicación en mecánica (mecánica Lagrangiana, Hamiltoniana, y las ecuaciones de Euler para
la rotación de cuerpos rı́gidos); mecánica de fluidos, y quizás mucho más importante que
todas, en el espacio-tiempo curvado de la teorı́a moderna gravitacional.
www.elsolucionario.net
www.elsolucionario.net
www.elsolucionario.net
Capı́tulo 3
Determinantes y matrices.
versión final 2.20-0210151
3.1. Determinantes.
Comenzamos el estudio de matrices resolviendo ecuaciones lineales las cuales nos llevan
www.elsolucionario.net
a determinantes y matrices. El concepto de determinante y su notación fueron introducidos
por Leibniz.
a1 x 1 + a2 x 2 + a3 x 3 = 0 ,
b1 x 1 + b2 x 2 + b3 x 3 = 0 , (3.1)
c1 x1 + c2 x2 + c3 x3 = 0 .
El problema es: ¿en qué condiciones hay alguna solución, aparte de la solución trivial x1 = 0,
x2 = 0, x3 = 0? Si usamos notación vectorial ~x = (x1 , x2 , x3 ) para la solución y tres filas
~a = (a1 , a2 , a3 ), ~b = (b1 , b2 , b3 ), ~c = (c1 , c2 , c3 ) para los coeficientes, tenemos que las tres
ecuaciones, ecuación (3.1), se convierten en
~a · ~x = 0 , ~b · ~x = 0 , ~c · ~x = 0 . (3.2)
Estas tres ecuaciones vectoriales tienen la interpretación geométrica obvia que ~x es ortogonal
a ~a, ~b, ~c. Si el volumen sustentado por ~a, ~b, ~c dado por el determinante (o el producto escalar
triple)
a1 a2 a3
D3 = (~a × ~b) · ~c = det(~a, ~b, ~c) = b1 b2 b3 ,
(3.3)
c1 c2 c3
1
Este capı́tulo está basado en el tercer capı́tulo del libro: Mathematical Methods for Physicists, fourth
edition de George B. Arfken & Hans J. Weber, editorial Academic Press.
95
www.elsolucionario.net
www.elsolucionario.net
El caso más simple es de dos ecuaciones con dos incógnitas
a1 x 1 + a2 x 2 = a3 ,
(3.5)
b1 x 1 + b2 x 2 = b3 ,
puede ser reducido al caso previo embebiéndolo en un espacio tridimensional con una solución
vectorial ~x = (x1 , x2 , −1) y el vector fila ~a = (a1 , a2 , a3 ), ~b = (b1 , b2 , b3 ). Como antes, ecuación
(3.5) en notación vectorial, ~a · ~x = 0 y ~b · ~x = 0, implica que ~x ∼ ~a × ~b tal que el análogo de la
ecuación (3.4) se mantiene. Para que esto se aplique, la tercera componente de ~a × ~b debiera
ser distinta de cero, i.e., a1 b2 − a2 b1 6= 0, ya que la tercera componente de ~x es −1 6= 0. Esto
produce que los xi tengan la forma
a3 a2
(a3 b2 − a2 b3 ) b3 b2
x1 = = (3.6a)
(a1 b2 − a2 b1 ) a 1 a 2
b1 b2
a1 a3
(a1 b3 − a3 b1 ) b1 b3
x2 = = . (3.6b)
(a1 b2 − a2 b1 ) a 1 a 2
b1 b2
El determinante
en el numerador de x1 (x2 ) es obtenido a partir del determinante de
los
a1 a2 a 3
coeficientes reemplazando el primer vector columna (segundo) por el vector
b1 b2 b3
del lado inhomogéneo de la ecuación (3.5).
Estas soluciones de ecuación lineal en términos de determinantes pueden ser generalizados
a n dimensiones. El determinante es un arreglo cuadrado
a1 a2 . . . an
b1 b2 . . . b n
Dn = , (3.7)
c1 c2 . . . cn
· · ... ·
www.elsolucionario.net
3.1. DETERMINANTES. 97
www.elsolucionario.net
producto es sumado si las columnas (los ı́ndices) representan una permutación par de (123) y
restando si corresponde a una permutación impar. La ecuación (3.3) puede ser considerada la
notación abreviada de la ecuación (3.9). El número de términos en la suma (ecuación (3.8))
es 24 para un determinante de cuarto orden, en general, n! para un determinante de orden
n. A causa de la aparición de signos negativos en la ecuación (3.9) puede haber cancelacio-
nes. Debido a esto es muy posible que un determinante de elementos grandes tenga un valor
pequeño.
Algunas propiedades útiles de los determinantes de n-ésimo orden siguen de la ecuación
(3.8). De nuevo, para ser especı́fico, la ecuación (3.9) para determinantes de orden tres es
usada para ilustrar estas propiedades.
www.elsolucionario.net
0 1
D = (−1) · (−1)1+1 · (−1)
−1 0
(3.14)
0 1
= =1.
−1 0
Este determinante D (ecuación (3.12)) está formado de una de las matrices de Dirac que
aparecen en la teorı́a relativista del electrón de Dirac.
3.1.4. Antisimetrı́a.
El determinante cambia de signo si cualquier par de filas son intercambiadas o si cualquier
par de columnas son intercambiadas. Esto deriva del carácter par-impar del Levi-Civita ε en
la ecuación (3.8) o explı́citamente de la forma de las ecuaciones (3.9) y (3.10).
Esta propiedad fue usada en la sección 2.9 para desarrollar una combinación lineal to-
talmente antisimétrica. Esto es también frecuentemente usado en Mecánica Cuántica en la
construcción de una función de onda de muchas partı́culas que, en concordancia con el princi-
pio de exclusión de Pauli, será antisimétrica bajo el intercambio de cualquier par de partı́culas
idénticas con spin 1/2 (electrones, protones, neutrones, etc).
Como un caso especial de antisimetrı́a, cualquier determinante con dos filas iguales o dos
columnas iguales es nulo.
Si cada elemento en una fila o de una columna es cero el determinante completo es nulo.
Si cada elemento en una fila o de una columna es multiplicado por una constante, el
determinante completo es multiplicado por esa constante.
El valor de un determinante es inalterado si un múltiplo de una fila es añadido (columna
por columna) a otra fila o si un múltiplo de una columna es añadido (fila por fila) a otra
columna. Tenemos
a1 a2 a3 a1 + ka2 a2 a3
b1 b2 b3 = b1 + kb2 b2 b3 . (3.15)
c1 c2 c3 c1 + kc2 c2 c3
www.elsolucionario.net
3.1. DETERMINANTES. 99
entonces por la propiedad de antisimetrı́a, el segundo determinante del lado derecho se anula,
verificando la ecuación (3.15).
En un caso especial, un determinante es igual a cero si cualquier par de filas o columnas
son proporcionales.
Volviendo a las ecuaciones homogéneas (3.1) y multiplicando el determinante de los coe-
ficientes por x1 , y luego sumando x2 veces la segunda columna y x3 veces la tercera columna,
podemos establecer directamente la condición para la presencia de una solución no trivial
para la ecuación (3.1):
a1 a2 a3 x1 a1 a2 a3 a1 x1 + a2 x2 + a3 x3 a2 a3 0 a2 a3
www.elsolucionario.net
x1 b1 b2 b3 = x1 b1 b2 b3 = b1 x1 + b2 x2 + b3 x3 b2 b3 = 0 b2 b3 = 0 . (3.17)
c1 c2 c3 x1 c1 c2 c3 c1 x1 + c2 x2 + c3 x3 c2 c3 0 c2 c3
Por lo tanto x1 (x2 y x3 ) deberı́an ser cero a menos que el determinante de los coeficientes
sea nulo. Podemos mostrar que si el determinante de los coeficientes es nulo, existe realmente
una solución no trivial.
Si nuestras ecuaciones lineales son inhomogéneas, esto es, como en la ecuación (3.5) o si
los ceros en el lado derecho de la ecuación (3.1) fueran reemplazados por a4 , b4 , c4 , respecti-
vamente, y con de la ecuación (3.17) obtenemos,
a4 a2 a3
b4 b2 b3
c4 c2 c3
x1 = , (3.18)
a1 a2 a3
b1 b2 b3
c1 c2 c3
Resolvamos
3x + 2y + z = 11
2x + 3y + z = 13 (3.19)
x + y + 4z = 12 .
El determinante de la ecuación lineal no homogénea ecuación (3.19) es 18, por lo tanto existe
una solución.
Por conveniencia y para una óptima precisión numérica, las ecuaciones son reordenadas
tal que los coeficientes mayores corran a lo largo de la diagonal principal (superior izquierda
a inferior derecha). Esto ha sido hecho en el conjunto anterior.
La técnica de Gauss es usar la primera ecuación para eliminar la primera incógnita x de
las ecuaciones restantes. Entonces la (nueva) segunda ecuación es usada para eliminar y de la
última ecuación. En general, descendemos poco a poco a través del conjunto de ecuaciones,
y luego, con una incógnita determinada, avanzamos gradualmente para resolver cada una de
las otras incógnitas en sucesión.
www.elsolucionario.net
Dividiendo cada fila por su coeficiente inicial, vemos que las ecuaciones (3.19) se convierten
en
2 1 11
x+ y+ z =
3 3 3
3 1 13 (3.20)
x+ y+ z =
2 2 2
x + y + 4z = 12 .
Ahora, usando la primera ecuación, eliminamos x de la segunda y la tercera:
2 1 11
x+ y+ z =
3 3 3
5 1 17
y+ z= (3.21)
6 6 6
1 11 25
y+ z= ,
3 3 3
y
2 1 11
x+ y+ z =
3 3 3
1 17 (3.22)
y+ z=
5 5
y + 11z = 25 .
Repitiendo la técnica, usamos la segunda ecuación para eliminar y a partir de la tercera
ecuación:
2 1 11
x+ y+ z =
3 3 3
1 17 (3.23)
y+ z=
5 5
54z = 108 ,
www.elsolucionario.net
o
z=2.
Finalmente, al reemplazar obtenemos
1 17
y+ ×2= ,
5 5
o
y=3.
Luego con z e y determinados,
2 1 11
x+ ×3+ ×2= ,
3 3 3
y
x=1.
La técnica podrı́a parecer no tan elegante como la ecuación (3.17), pero está bien adaptada
www.elsolucionario.net
a los computadores modernos y es más rápida que el tiempo gastado con los determinantes.
Esta técnica de Gauss puede ser usada para convertir un determinante en una forma
triangular:
a1 b 1 c 1
D = 0 b2 c2 ,
0 0 c3
para un determinante de tercer orden cuyos elementos no deben ser confundidos con aquellos
en la ecuación (3.3). De esta forma D = a1 b2 c3 . Para un determinante de n-ésimo orden la
evaluación de una forma triangular requiere solamente n − 1 multiplicaciones comparadas
con las n! requeridas para el caso general.
Una variación de esta eliminación progresiva es conocida como eliminación de Gauss-
Jordan. Comenzamos como si fuera el procedimiento de Gauss, pero cada nueva ecuación
considerada es usada para eliminar una variable de todas las “otras” ecuaciones, no sólo
de aquellas bajo ella. Si hemos usado esta eliminación de Gauss-Jordan, la ecuación (3.23)
llegarı́a a ser
1 7
x+ z =
5 5
1 17 (3.24)
y+ z=
5 5
z=2,
x=1
y=3 (3.25)
z=2,
www.elsolucionario.net
3.2. Matrices.
El análisis matricial pertenece al álgebra lineal ya que las matrices son operadores o
mapas lineales tales como rotaciones. Supongamos, por ejemplo, que rotamos las coordenadas
cartesianas de un espacio bidimensional tal que, en notación vectorial,
0
x1 x1 cos ϕ + x2 sen ϕ P
0 = = j aij xj . (3.26)
x2 −x1 sen ϕ + x2 cos ϕ
www.elsolucionario.net
Etiquetamos el arreglo de elementos aij por la matriz A de 2 × 2 consistente de dos filas y
dos columnas, además, consideramos los vectores x, x0 como matrices de 2 × 1. Tomemos la
suma de productos de la ecuación (3.26) como una definición de la multiplicación matricial
que involucra el producto escalar de cada uno de los vectores fila de A con el vector columna
x. Ası́ en notación matricial la ecuación (3.26) se convierte en
x0 = Ax . (3.27)
Para extender esta definición de multiplicación de una matriz por un vector columna a el
producto de dos matrices de 2 × 2, consideremos la rotación de coordenada seguida por una
segunda rotación dada por la matriz B tal que
Por componentes
!
X X X X X
x00i = bij x0j = bij ajk xk = bij ajk xk . (3.29)
j j k k j
por sus efectos sobre las coordenadas o vectores base. Los elementos de matriz aij constituyen
una representación del operador, una representación que depende de la elección de una base.
El caso especial donde una matriz tiene una columna y n filas es llamada un vector
columna, |xi, con componentes xi , i = 1, 2, . . . ., n. Si A es una matriz de n × n, |xi es un
vector columna de n componentes, A|xi está definida como en la ecuación (3.27) y (3.26).
Similarmente, si una matriz tiene una fila y n columnas, es llamada un vector fila, hx| con
componentes xi , i = 1, 2, . . . .n. Claramente, hx| resulta de |xi por el intercambio de filas
y columnas, una operación matricial llamada transposición, y para cualquier matriz A, Ã
es llamada 2 la transpuesta de A con elementos de matriz (Ã)ik = Aki . Transponiendo un
producto de matrices AB se invierte el orden y da BA; similarmente, A|xi se transpone como
hx|A. El producto escalar toma la forma hx|yi.
www.elsolucionario.net
o funciones que obedecen ciertas leyes. Esto es una extensión perfectamente lógica de los
conceptos matemáticos familiares. En aritmética tratamos con números simples. En la teorı́a
de variable compleja tratamos con pares ordenados de números, (1, 2) = 1 + 2i, en el cual
el orden es importante. Ahora consideremos números (o funciones) ordenados en un arreglo
cuadrado o rectangular. Por conveniencia en el trabajo posterior los números son distinguidos
por dos subı́ndices, el primero indica la fila (horizontal) y el segundo indica la columna
(vertical) en la cual aparecen los números. Por ejemplo, a13 es el elemento de matriz en la
primera fila y tercera columna. De este modo, si A es una matriz con m filas y n columnas,
a11 a12 ··· a1n
a21 a22 ··· a2n
A = .. .. . (3.31)
.. ..
. . . .
am1 am2 · · · amn
Quizás el hecho más importante a notar es que los elementos aij no están combinados unos
con otros. Una matriz no es un determinante. Es un arreglo ordenado de números, no un
simple número.
La matriz A hasta ahora es sólo un arreglo de números que tiene las propiedades que le
asignamos. Literalmente, esto significa construir una nueva forma de matemáticas. Postula-
mos que las matrices A, B y C, con elementos aij , bij y cij , respectivamente, combinan de
acuerdo a las siguientes reglas.
3.2.2. Igualdad.
Matriz A = Matriz B si y sólo si aij = bij para todos los valores de i y j. Esto, por
supuesto, requiere que A y B sean cada uno arreglos de m × n (m filas y n columnas).
2
Algunos textos denotan A transpuesta por AT .
www.elsolucionario.net
3.2.3. Suma.
A + B = C si y sólo si aij + bij = cij para todos los valores de i y j, los elementos se
combinan de acuerdo a las leyes del álgebra lineal (o aritmética si hay números simples). Esto
significa que A + B = B + A, la conmutación. También, se satisface la ley de asociatividad
(A + B) + C = A + (B + C). Si todos los elementos son cero, la matriz es llamada matriz nula
y se denota por 0. Para todo A,
A+0=0+A=A ,
con
0 0 ··· 0
0 0 · · · 0
0 = .. .. . . .. . (3.32)
. . . .
0 0 ··· 0
Tal que las matrices de m × n forman un espacio lineal con respecto a la suma y la resta.
www.elsolucionario.net
3.2.4. Multiplicación (por un escalar).
La multiplicación de la matriz A por una cantidad escalar α está definida como
αA = (αA) , (3.33)
en la cual los elementos de αA son αaij ; esto es, cada elemento de la matriz A es multiplicado
por el factor escalar. Esto contrasta con el comportamiento de los determinantes en el cual el
factor α multiplica solamente una columna o una fila y no cada elemento del determinante.
Una consecuencia de esta multiplicación por escalar es que
αA = Aα , conmutación. (3.34)
El elemento 11 del producto, (σ1 σ3 )11 está dado por la suma de productos de elementos de la
primera fila de σ1 con el correspondiente elemento de la primera columna de σ3 :
AB 6= BA . (3.40)
www.elsolucionario.net
Sin embargo, de la definición de multiplicación de matrices podemos mostrar que se mantiene
una ley de asociatividad, (AB)C = A(BC). También se satisface una ley de distributividad,
A(B + C) = AB + AC. La matriz unidad tiene elementos δij , la delta de Kronecker, y la
propiedad de que 1A = A1 = A para toda A,
1 0 ··· 0
0 1 · · · 0
1 = .. .. . . .. . (3.41)
. . . .
0 0 ··· 1
Notamos que es posible que el producto de dos matrices sea una matriz nula sin ser ninguna
de ellas una matriz nula. Por ejemplo, si
1 1 1 0
A= y B= .
0 0 −1 0
con
α = n(i − 1) + k , β = n(j − 1) + l .
www.elsolucionario.net
a11 B a12 B
A⊗B=
a21 B a22 B
a11 b11 a11 b12 a12 b11 a12 b12 (3.45)
a11 b21 a11 b22 a12 b21 a12 b22
=a21 b11 a21 b12
.
a22 b11 a22 b12
a21 b21 a21 b22 a22 b21 a22 b22
Una interpretación fı́sica de tales matrices diagonales y el método de reducir matrices a esta
forma diagonal son considerados en la sección 3.5. Aquı́ nos limitamos a notar la importante
propiedad de que la multiplicación de matrices es conmutativa, AB = BA, si A y B son cada
una diagonales.
www.elsolucionario.net
3.2.8. Traza.
En cualquier matriz cuadrada la suma de los elementos diagonales es llamada la traza.
Claramente la traza es una operación lineal:
Una de sus interesantes y útiles propiedades es que la traza de un producto de dos matrices
A y B es independiente del orden de la multiplicación:
X XX
traza(AB) = (AB)ii = aij bji
i i j
XX X
= bji aij = (BA)jj (3.46)
i j j
= traza(BA) .
Esto se mantiene aún cuando AB 6= BA. La ecuación (3.46) significa que la traza de cualquier
www.elsolucionario.net
conmutador, [A, B] = AB − BA, es cero. De la ecuación (3.46) obtenemos
www.elsolucionario.net
las técnicas de eliminación de Gauss-Jordan a los elementos de matriz. Por tanto existe una
matriz ML (o MR ) tal que5
ML A = 1 . (3.49)
La ML = A−1 . Determinamos ML realizando las operaciones de eliminación idénticas sobre
la matriz unidad. Luego
ML 1 = ML . (3.50)
Para clarificar ésto consideremos un ejemplo especı́fico.
Deseamos invertir la matriz
3 2 1
A = 2 3 1 . (3.51)
1 1 4
Por conveniencia escribimos A y 1 lado a lado realizando operaciones idénticas sobre cada
una de ellas
3 2 1 1 0 0
2 3 1 0 1 0 . (3.52)
1 1 4 0 0 1
Para ser sistemáticos, multiplicamos cada fila para obtener ak1 = 1,
2 1 1
1 3 3 3
0 0
3 1 1
1 2 2 0 2 0 . (3.53)
1 1 4 0 0 1
Restando la primera fila de la segunda y tercera, obtenemos
2 1 1
1 3 3 3
0 0
5 1 1 1
0 6 6 − 3 2 0 . (3.54)
0 13 11
3
− 13 0 1
5
Recordemos que det(A) 6= 0.
www.elsolucionario.net
Entonces dividimos la segunda fila (de ambas matrices) por 5/6 y sustrayéndola 2/3 veces
de la primera fila, y 1/3 veces de la tercera fila. Los resultados para ambas matrices son
1
3
1 0 5 5
− 25 0
1 2 3
0 1 − 5 0 . (3.55)
5 5
18
0 0 5
− 15 − 15 1
Dividimos la tercera fila (de ambas matrices) por 18/5. Luego como último paso 1/5 veces
la tercera fila es sustraı́da de cada una de las dos primeras filas (de ambas matrices). Nuestro
par final es
11 7 1
1 0 0 8
− 18
− 18
7
0 1 0 − 18 11 − 1
. (3.56)
18 18
1 1 5
0 0 1 − 18 − 18 18
El chequeo es multiplicar la original A por la calculada A−1 para ver si realmente obtuvimos
www.elsolucionario.net
la matriz unidad 1.
Como con la solución de Gauss-Jordan de ecuaciones algebraicas simultáneas, esta técnica
está bien adaptada para computadores.
x3 x’2
x’3
x2
∧
x1 ∧
x1’
x1
x’1
Podemos decir que el sistema de ejes prima ha sido rotado respecto al inicial sistema de
coordenadas sin prima. Ya que esta rotación es una operación lineal, esperamos una ecuación
matricial que relacione la base con primas con la sin primas.
www.elsolucionario.net
www.elsolucionario.net
Ahora la ecuación (3.57) puede ser reescrita como
x̂01 = x̂1 a11 + x̂2 a12 + x̂3 a13
y también
x̂02 = x̂1 a21 + x̂2 a22 + x̂3 a23
(3.60)
x̂03 = x̂1 a31 + x̂2 a32 + x̂3 a33 .
También podemos ir de la otra manera resolviendo x̂1 , x̂2 y x̂3 en sus componentes en el
sistema con primas. Entonces
x̂1 = x̂01 a11 + x̂02 a21 + x̂03 a31
x̂2 = x̂01 a12 + x̂02 a22 + x̂03 a32 (3.61)
x̂3 = x̂01 a13 + x̂02 a23 + x̂03 a33 .
y similarmente para las coordenadas primas. En esta notación el conjunto de tres ecuaciones
(3.64) pueden ser escritas como
X 3
0
xi = aij xj , (3.65)
j=1
www.elsolucionario.net
X X 2
x2i = x0i
i i
! !
X X X
= aij xj aik xk (3.66)
i j k
X X
= xj xk aij aik .
j,k i
Esto sólo puede ser cierto para todos los puntos si y sólo si
X
aij aik = δjk , j, k = 1, 2, 3 . (3.67)
i
x2
x’2 x2 nϕ
s e
x2
x’1
ϕ ϕ
ϕ c os
x1
ϕ x1
x1
Figura 3.2: Sistemas de coordenadas rotados en dos dimensiones.
www.elsolucionario.net
Por lo tanto por la ecuación (3.68)
cos ϕ sen ϕ
A= . (3.70)
− sen ϕ cos ϕ
Notemos que A se reduce a la matriz unidad para ϕ = 0. La rotación cero significa que nada
ha cambiado. Es claro a partir de la figura 3.2 que
sen2 ϕ + cos2 ϕ = 1 ,
(3.72)
sen ϕ cos ϕ − sen ϕ cos ϕ = 0 .
La extensión a tres dimensiones (rotación de las coordenadas a lo largo del eje z en un ángulo
ϕ en el sentido contrario a los punteros del reloj) es simplemente
cos ϕ sen ϕ 0
A = − sen ϕ cos ϕ 0 . (3.73)
0 0 1
El a33 = 1 expresa el hecho que x03 = x3 , ya que la rotación ha sido en torno al eje x3 . Los
ceros garantizan que x01 y x02 no dependen de x3 y que x03 no depende de x1 y x2 . En un
lenguaje más sofisticado, x1 y x2 se extienden sobre un subespacio invariante, mientras que
x3 forma un subespacio invariante por sı́ solo. La forma de A es reducible. La ecuación (3.73)
da una posible descomposición.
www.elsolucionario.net
www.elsolucionario.net
usando las ecuaciones (3.68) y (3.74) y eliminando |x0 i en vez de |xi.
AÃ = 1 , (3.81)
o X
aji aki = δjk , (3.82)
i
Cualquiera de estas relaciones es condición necesaria y suficiente para que A sea ortogonal.
Es posible ahora ver y entender porqué el nombre ortogonal es apropiado para estas
matrices. Tenemos la forma general
a11 a12 a13
A = a21 a22 a23 ,
www.elsolucionario.net
a31 a32 a33
de una matriz de cosenos directores en la cual aij es el coseno del ángulo entre x0i y xj . Por lo
tanto, a11 , a12 , a13 , son los cosenos directores de x01 relativo a x1 , x2 , x3 . Estos tres elementos
de A definen una unidad de longitud a lo largo de x01 , esto es, un vector unitario x̂01 ,
La relación de ortogonalidad (ecuación (3.82)) es simplemente una declaración que los vec-
tores unitarios x̂01 , x̂02 , y x̂03 son mutuamente perpendiculares u ortogonales. Nuestra matriz
de transformación ortogonal, A, transforma un sistema ortogonal en un segundo sistema
ortogonal de coordenadas por rotación y/o reflexión.
1. Los ejes x01 , x02 , y x03 son rotados respecto al eje x3 en un ángulo α en el sentido horario
relativo a x1 , x2 y x3 . (Los ejes x3 y x03 coinciden.)
6
No hay una única manera de definir los ángulos de Euler. Usamos la elección usual en Mecánica Cuántica
de momento angular.
www.elsolucionario.net
x 3= x’3
x 3= x’3 x’’
3 = x’’’
3 x 3= x’3
x’’ γ
3
β β
x1
x’1 α
α
x2 x’1
x’2 β x’’’
α 2
x’=
2 x’’ x’= x’’
x’’
1 x2
2 x’’
1
2 2
x’’’
1
(a) (b) (c)
Figura 3.3: (a) Rotación respecto al eje x3 en un ángulo α; (b) Rotación respecto a un eje x02
en un ángulo β; (c) Rotación respecto a un eje x003 en un ángulo γ.
www.elsolucionario.net
2. los ejes x001 , x002 , y x003 son rotados respecto al eje x02 en un ángulo β en el sentido horario
relativo a x01 , x02 y x03 . (Los ejes x02 y x002 coinciden.)
3. la tercera y final rotación es en un ángulo γ en sentido horario respecto al eje x003 produ-
ciendo el sistema (x000 000 000 00 000
1 , x2 , x3 ). (Los ejes x3 y x3 coinciden.)
Comparando A(aij ) con A(α, β, γ), elemento por elemento, nos produce los cosenos directores
en términos de los ángulos de Euler.
www.elsolucionario.net
quier matriz cuadrada puede ser escrita como la suma de una matriz simétrica y una anti-
simétrica. Consideremos la identidad
1h i 1h i
A= A + Ã + A − Ã . (3.91)
2 2
A + Ã es claramente simétrica, mientras que A − Ã es claramente antisimétrica. Esta es la
análoga matricial a la ecuación tensorial (2.68).
Hasta ahora hemos interpretado las matrices ortogonales como rotaciones del sistema de
coordenadas. Éstas cambian las componentes de un vector fijo. Sin embargo, una matriz orto-
gonal A puede ser interpretada igualmente bien como una rotación del vector en la dirección
opuesta (figura 3.4).
r
y r 1= A r
y’
x’
α
β x
Figura 3.4: Vector fijo con coordenadas rotadas.
Estas dos posibilidades, (1) rotar el vector manteniendo la base fija y (2) rotar la base
(en el sentido opuesto) manteniendo el vector fijo.
www.elsolucionario.net
Supongamos que interpretamos la matriz A como rotar un vector ~r en una nueva posición
~r1 , i.e., en un particular sistema de coordenadas tenemos la relación
Ahora rotemos las coordenadas aplicando una matriz B, la cual rota (x, y, z) en (x0 , y 0 , z 0 ),
B~r1 es justo ~r1 0 en el nuevo sistema de coordenadas con una interpretación similar se mantiene
para B~r. Ya que en este nuevo sistema (B~r) es rotado a la posición (B~r1 ) por la matriz BAB−1 .
www.elsolucionario.net
~r 01 = A0 ~r 0 .
En el nuevo sistema las coordenadas han sido rotadas por la matriz B, A tiene la forma A0 ,
en la cual
A0 = BAB−1 . (3.94)
A0 opera en el espacio x0 , y 0 , z 0 como A opera en el espacio x, y, z.
La transformación definida por la ecuación (3.94) con B cualquier matriz, no necesaria-
mente ortogonal, es conocida como trasformación de similaridad. Por componentes la ecuación
(3.94) llega a ser X
a0ij = bik akl (B−1 )lj . (3.95)
k,l
Ahora si B es ortogonal,
(B−1 )lj = (B̃)lj = bjl , (3.96)
y tenemos X
a0ij = bik bjl akl . (3.97)
k,l
embargo, en Mecánica Cuántica las variables complejas son inevitables por la forma de las
reglas de conmutación básicas (o la ecuación tiempo dependiente de Schödinger). Con esto
en mente, generalizamos al caso de matrices con elementos complejos. Para manejar estos
elementos, definamos algunas propiedades.
1. Compleja conjugada, A∗ , √
formada por tomar los complejos conjugados (i → −i) de
cada elemento, donde i = −1.
A = A† . (3.99)
www.elsolucionario.net
Si A es real, entonces A† = Ã, y las matrices hermı́ticas reales son matrices reales y
simétricas. En Mecánica Cuántica las matrices son hermı́ticas o unitarias.
U† = U−1 . (3.100)
Si U es real, entonces U−1 = Ũ, tal que las matrices reales unitarias son matrices
ortogonales. Éste representa una generalización del concepto de matriz ortogonal.
5. (AB)∗ = B∗ A∗ , (AB)† = B† A† .
Si los elementos son complejos, a la Fı́sica casi siempre le interesan las matrices adjuntas,
hermı́ticas y unitarias. Las matrices unitarias son especialmente importantes en Mecánica
Cuántica porque ellas dejan el largo de un vector (complejo) inalterado, análoga a la operación
de una matriz ortogonal sobre un vector real. Una importante excepción a este interés en las
matrices unitarias es el grupo de matrices de Lorentz.
En un espacio n-dimensional complejo el cuadrado del largo de P un punto x̃ P
= (x1 , x2 , . . . , xn ),
o el cuadrado de su distancia al origen, es definido como x x = i xi xi = i | xi |2 . Si una
† ∗
A0 = UAU† ,
donde 12 es la matriz unidad de 2×2. El vector ~σ /2, con componentes σi , satisface las mismas
reglas de conmutación
[σi , σj ] ≡ σi σj − σj σi = 2iεijk σk , (3.105)
www.elsolucionario.net
que el momento angular L.~
Las tres matrices de Pauli ~σ y la matriz unitaria forman un conjunto completo tal que
cualquier matriz de 2 × 2 M puede ser expandida como
~ · ~σ ,
M = m0 1 + m1 σ1 + m2 σ2 + m3 σ3 = m0 1 + m (3.106)
donde los mi son constantes. Usando σi2 = 1 y tr(σi ) = 0 nosotros obtenemos a partir de la
ecuación (3.106) los coeficientes mi de la expansión formando las trazas,
En 1927 P.A.M. Dirac extendió este formalismo para partı́culas de spin 21 moviéndose a
velocidades cercana a la de la luz tales como electrones. Para incluir la relatividad especial
su punto de partida es la ecuación de Einstein para la energı́a E 2 = p~ 2 c2 + m2 c4 en vez de
la energı́a cinética y potencial no relativista E = p~ 2 /2m + V . La clave para la ecuación de
Dirac es factorizar
(γ0 E − γc~σ · p~)2 = γ02 E 2 + γ 2 c2 (~σ · p~)2 − Ec~σ · p~(γ0 γ + γγ0 ) = E 2 − p~ 2 c2 = m2 c4 . (3.110)
Si reconocemos
γ0 E − γc~σ · p~ = γ · p = (γ0 , γ~σ ) · (E, c~p) , (3.111)
www.elsolucionario.net
debe satisfacerse que las cuatro matrices γ µ anticonmuten, justo como las tres matrices de
Pauli. Ya que estas últimas son un conjunto completo de matrices anticonmutantes de 2 × 2,
la condición (3.112) no puede satisfacerse para matrices de 2×2, pero ella puede ser satisfecha
para matrices de 4 × 4
1 0 0 0
0
0 1 0 0 12 0
γ0 = γ = = ,
0 0 −1 0 0 −12
0 0 0 −1
(3.113)
0 0 0 1
0 0 1 0 0 12
www.elsolucionario.net
γ= 0 −1 0 0 = −12 0 .
−1 0 0 0
Alternativamente, el vector de matrices de 4 × 4
0 ~σ
γ= = γ~σ = σ1 × ~σ , (3.114)
−~σ 0
puede obtenerse como el producto directo en el mismo sentido de la sección 3.2 de las matrices
de 2 × 2 de Pauli. De la misma manera, γ0 = σ3 × 12 y 14 = 12 × 12 .
Resumiendo el tratamiento no relativista de una partı́cula de spin 21 , produce matrices de
4 × 4, mientras que las partı́culas no relativistas de spin 21 son descritas por las matrices de
Pauli σ de 2 × 2.
donde ω
~ viene a ser la velocidad angular. La matriz de inercia I tiene elementos diagonales
X
Ixx = mi (ri2 − x2i ) , y ası́ sucesivamante, (3.116)
i
www.elsolucionario.net
www.elsolucionario.net
variable, n̂ = (α, β, γ), entonces en notación de Dirac
hn̂|I|n̂i = I , (3.118)
donde I es el momento de inercia respecto a la dirección n̂ y es un número positivo (escalar).
Llevando a cabo la multiplicación, obtenemos
I = Ixx α2 + Iyy β 2 + Izz γ 2 + 2Ixy αβ + 2Ixz αγ + 2Iyz βγ . (3.119)
Si introducimos
n̂
~n = √ = (n1 , n2 , n3 ) , (3.120)
I
la cual es variable en dirección y magnitud, entonces la ecuación (3.119) llega a ser
1 = Ixx n21 + Iyy n22 + Izz n23 + 2Ixy n1 n2 + 2Ixz n1 n3 + 2Iyz n2 n3 , (3.121)
una forma cuadrática positiva, la cual debe ser un elipsoide (ver figura 3.5).
A partir de la geometrı́a analı́tica es sabido que los ejes de coordenadas pueden ser rotados
para coincidir con los ejes de nuestro elipsoide. En muchos casos elementales, especialmente
cuando hay simetrı́a, estos nuevos ejes, llamados ejes principales, pueden ser encontrados por
inspección. Ahora nosotros procederemos a desarrollar un método general de hallazgo de los
elementos diagonales y los ejes principales.
Si R−1 = R̃ es la correspondiente matriz ortogonal real tal que ~n0 = R~n, o |n0 i = R|ni, en
la notación de Dirac son las nuevas coordenadas; luego, obtenemos usando hn0 |R = hn| en la
ecuación (3.121)
2 2 2
hn|I|ni = hn0 |RIR̃|n0 i = I10 n01 + I20 n02 + I30 n03 , (3.122)
0
donde los Ii0 > 0 son los momentos de inercia principales. La matriz de inercia I en la ecuación
(3.122) es diagonal en las nuevas coordenadas,
0
I1 0 0
I0 = R1R̃ = 0 I20 0 . (3.123)
0
0 0 I3
www.elsolucionario.net
n3
n’3
n’1 n2
n1
n’2
www.elsolucionario.net
Si reescribimos la ecuación (3.123) usando R−1 = R̃
y tomando R̃ = (~v1 , ~v2 , ~v3 ) compuesto de tres vectores columnas, entonces la ecuación (3.124)
se separa en tres ecuaciones de autovalores
con autovalores Ii0 y autovectores ~vi . Como estas ecuaciones son lineales y homogéneas (para
un i fijo), por la sección 3.1 los determinantes tienen que anularse:
I11 − I10 I12 I13
0
I21
I22 − I2 I23 = 0 . (3.126)
0
I31 I32 I33 − I3
Reemplazando los autovalores Ii0 por una variable λ veces la matriz unidad 1, podrı́amos
reescribir la ecuación (3.125) como
(I − λ1)|vi = 0 , (3.127)
cuyo determinante
|I − λ1| = 0 , (3.128)
es un polinomio cúbico en λ; sus tres raı́ces, por supuesto, son los Ii0 . Sustituyendo una raı́z
de regreso en la ecuación (3.125), podemos encontrar los correspondientes autovectores. La
ecuación (3.126) (o la (3.128)) es conocida como la ecuación secular. El mismo tratamiento
se aplica a una matriz simétrica real I, excepto que sus autovalores no necesitan ser todos po-
sitivos. También, la condición de ortogonalidad en la ecuación (3.83a-3.83d) para R dice que,
en términos geométricos, los autovectores ~vi son vectores mutuamente ortogonales unitarios.
Por cierto ellos forman las nuevas coordenadas del sistema. El hecho que cualquier par de
www.elsolucionario.net
autovectores ~vi , ~vj son ortogonales si Ii0 6= Ij0 se deduce de la ecuación (3.125) en conjunción
con la simetrı́a de I multiplicando con ~vi y ~vj , respectivamente,
hvj |I|vi i = Ii0 hvj |vi i = hvi |I|vj i = Ij0 hvj |vi i . (3.129)
Ya que Ii0 6= Ij0 y la ecuación (3.129) implica que (Ii0 − Ij0 ) ~vi · ~vj = 0, por lo tanto ~vi · ~vj = 0.
Ahora mostramos que si A es una matriz hermı́tica, sus autovalores son reales y sus
www.elsolucionario.net
autovectores ortogonales.
Sean λi y λj dos autovalores y |ri i y |rj i, los correspondientes autovectores de A, una
matriz hermı́tica. Entonces
o
hrj |A|ri i = λ∗j hrj |ri i , (3.136)
ya que A es hermı́tica. Sustrayendo la ecuación (3.136) de la ecuación (3.133), obtenemos
Este es un resultado general para todas las combinaciones posibles de i y j. Primero, sea
j = i. Luego la ecuación (3.137) se convierte en
Ya que hri |ri i = 0 serı́a una solución trivial de la ecuación (3.138), concluimos que
λi = λ∗i , (3.139)
www.elsolucionario.net
o
hri |rj i = 0 (3.141)
lo cual significa que los autovectores de distintos autovalores son ortogonales, la ecuación
(3.141) es la generalización de ortogonalidad en este espacio complejo.
Si λi = λj (caso degenerado), hri | no es automáticamente ortogonal a |rj i, pero podrı́a
hacerse ortogonal. Consideremos el problema fı́sico de la matriz del momento de inercia
nuevamente. Si xi es un eje de simetrı́a rotacional, entonces encontraremos que λ2 = λ3 . Los
autovectores |r2 i y |r3 i son cada uno perpendiculares al eje de simetrı́a, |r1 i, pero ellos yacen
en alguna parte en el plano perpendicular a |r1 i; esto es, alguna combinación lineal de |r2 i y
|r3 i es también un autovector. Considere (a2 |r2 i + a3 |r3 i) con a2 y a3 constantes. Entonces
www.elsolucionario.net
A(a2 |r2 i + a3 |r3 i) = a2 λ2 |r2 i + a3 λ3 |r3 i
(3.142)
= λ2 (a2 |r2 i + a3 |r3 i) ,
como es esperado, para x1 un eje de simetrı́a rotacional. Por lo tanto, si |r1 i y |r2 i son
fijos, |r3 i, puede simplemente escogerse yaciendo en el plano perpendicular a |r1 i y también
perpendicular a |r2 i. Un método general para ortogonalizar soluciones conocido como proceso
de Gram-Schmidt, es aplicado a funciones más adelante.
El conjunto de n autovectores ortogonales de nuestra matriz hermı́tica de n × n forma un
conjunto completo, generando el espacio de n dimensiones complejo. Este hecho es útil en un
cálculo variacional de los autovalores. Los autovalores y los autovectores no están limitados
a las matrices hermı́ticas. Todas las matrices tienen autovalores y autovectores. Por ejemplo,
la matriz T de población estocástica satisface una ecuación de autovalores
TP~equilibrio = λP~equilibrio ,
con λ = 1. Sin embargo, solamente las matrices hermı́ticas tienen todos los autovectores
ortogonales y todos sus autovalores reales.
A† = −A .
www.elsolucionario.net
correspondiente a λ = −1, sustituimos este valor de vuelta en la ecuación de autovalores,
ecuación (3.130),
−λ 1 0 x 0
1 −λ 0 y = 0 . (3.146)
0 0 −λ z 0
Con λ = −1, esto produce
x+y =0 , z=0. (3.147)
Dentro de un factor de escala arbitrario, y un signo arbitrario (factor de fase), hr1 | = (1, −1, 0).
Notemos que (para el real |ri en el espacio ordinario) el autovector define una lı́nea en el
espacio. El sentido positivo o negativo no está determinado. Esta indeterminación puede
ser entendida si notamos que la ecuación (3.130) es homogénea en |ri. Por conveniencia
requeriremos que los autovectores estén normalizados a la unidad, hr1 |r1 i = 1. Con esta
elección de signo
1 1
hr1 | = r~1 = √ , − √ , 0 , (3.148)
2 2
está fijo. Para λ = 0, la ecuación (3.130) produce
−x + y = 0 ,
(3.150)
z=0,
o
1 1
hr3 | = r~3 = √ , √ ,0 . (3.151)
2 2
La ortogonalidad de ~r1 , ~r2 y ~r3 , correspondientes a los tres autovalores distintos, puede ser
fácilmente verificada.
www.elsolucionario.net
www.elsolucionario.net
1 1
hr1 | = r~1 = 0, √ , − √ . (3.156)
2 2
para λ = 1, tenemos
−y + z = 0 . (3.157)
Cualquier autovector que satisface la ecuación (3.157) es perpendicular a ~r1 . Tenemos infinito
número de opciones. Tomemos una elección posible tomando
1 1
hr2 | = r~2 = 0, √ , √ , (3.158)
2 2
la cual claramente satisface la ecuación (3.157). Entonces ~r3 debe ser perpendicular a ~r1 y
puede ser escogido perpendicular a ~r2 por7
~r3 = ~r1 × ~r2 = (1, 0, 0) . (3.159)
son matrices de n × n bien definidas. Para todas las matrices de Pauli σk la identidad de
Euler para θ real y k =1, 2 ó 3
sale a partir de colectar las potencias pares e impares en series separadas usando σk2 = 1.
Para las matrices de Dirac σ ij de 4 × 4 con (σ ij )2 = 1, si j 6= k = 1, 2 ó 3, obtenemos de
manera similar (sin escribir las obvias matrices 14 nunca más)
mientras
exp(iσ 0k ζ) = cosh(ζ) + iσ 0k senh(ζ) , (3.163)
manteniendo ζ real porque (iσ 0k )2 = 1 para k = 1, 2 ó 3.
Para una matriz hermı́tica A hay una matriz unitaria U que la diagonaliza, es decir,
UAU† = [a1 , a2 , . . . , an ]. Entonces la fórmula de la traza
www.elsolucionario.net
det(exp(A)) = exp(tr(A)) . (3.164)
[G, H] = GH − HG
[A, A† ] = 0 .
Ejemplos obvios e importantes son las matrices hermı́ticas y unitarias. Mostraremos que
las matrices normales tienen autovectores ortogonales (ver tabla 3.1). Procederemos en dos
pasos:
www.elsolucionario.net
Autovectores
Matriz Autovalores (para diferentes autovalores)
Hermı́tica Real Ortogonal
Antihermı́tica Imaginaria puro (o cero) Ortogonal
Unitaria Magnitud uno Ortogonal
Normal Si A tiene autovalor λ Ortogonal
† ∗ †
A tiene autovalor λ A y A tienen los mismos autovectores
Cuadro 3.1:
o
(A − λ1)|xi = 0 .
www.elsolucionario.net
(3.167)
Por conveniencia la combinación A − λ1 la etiquetamos B. Tomando la adjunta de la ecuación
(3.167), obtenemos
hx|(A − λ1)† = 0 = hx|B† . (3.168)
Porque
[(A − λ1), (A − λ1)† ] = [A, A† ] = 0 ,
tenemos
[B, B† ] = 0 . (3.169)
La matriz B es también normal.
A partir de las ecuaciones (3.167) y (3.168) formamos
Usando (3.169)
hx|BB† |xi = 0 . (3.171)
Ahora la ecuación (3.171) puede ser rescrita como
Ası́
B† |xi = (A† − λ∗ 1)|xi = 0 . (3.173)
Vemos que para matrices normales, A† tiene los mismos autovectores que A pero los autova-
lores son los complejos conjugados.
II. Ahora, consideremos más de un autovector-autovalor, tenemos
www.elsolucionario.net
Ésta es la misma que la ecuación (3.140).
Para λi 6= λj
hxi |xj i = 0 .
Los autovectores correspondientes a diferentes autovalores de una matriz normal son ortogo-
nales. Esto significa que una matriz normal puede ser diagonalizada por una transformación
unitaria. La matriz unitaria requerida puede ser construida a partir de los vectores ortonor-
males como se mostró en la sección anterior.
El converso también es válido. Si A puede ser diagonalizada por una transformación
unitaria, entonces A es normal.
k k
M m M
x1 x2 x3
El sistema de masas está vibrando. Buscamos las frecuencias comunes, ω tal que todas las
masas vibren en esta misma frecuencia. Éstos son los modos normales. Sea
www.elsolucionario.net
xi = xi0 eiωt , i = 1, 2, 3.
dividiendo por el factor común eiωt . Tenemos una ecuación matricial de autovalores con la
matriz asimétrica. La ecuación secular es
k k
2
−ω − 0
M M
k 2k k
− − ω2 − =0. (3.183)
m m m
k k
2
− −ω
0
M M
Ésto conduce a
2 k 2k k
ω − ω2 2
ω − − =0
M m M
Los autovalores son
k k 2k
ω2 = 0 , , y + ,
M M m
todas reales.
www.elsolucionario.net
x1 − x2 = 0
−x1 + 2x2 − x3 = 0
−x2 + x3 = 0 .
Entonces, tenemos
x1 = x2 = x3 .
Ésto describe una translación pura sin movimiento relativo de las masas y sin vibración.
k
Para ω 2 = , la ecuación (3.182) produce
M
x1 = −x3 , x2 = 0 . (3.184)
Las masas exteriores se mueven en direcciones opuestas. El masa del centro está estacionaria.
www.elsolucionario.net
k 2k
Para ω 2 = + , las componentes de los autovectores son
M M
2M
x1 = x3 , x2 = − x1 .
m
Las dos masas exteriores se están moviendo juntas. La masa del centro se está moviendo
opuesta a las otras dos. El momento neto es cero.
Cualquier desplazamiento de estas tres masas a lo largo del eje x puede ser descrito como
una combinación lineal de estos tres tipos de movimiento: translación más dos formas de
vibración.
con A y |yi conocido y |xi desconocido. Podemos encontrar ejemplos en los cuales un pequeño
error en |yi resulta en un gran error en |xi. En este caso la matriz A es llamada de condición
patológica. Si |δxi es el error en |xi y |δyi es el error en |yi, entonces los errores relativos
pueden ser escritos como
1/2 1/2
hδx|δxi hδy|δyi
≤ K(A) . (3.186)
hx|xi hy|yi
Aquı́ K(A), una propiedad de la matriz A, es llamada la condición de número. Para A hermı́ti-
ca una forma de la condición de número es dada por
| λ |max
K(A) = . (3.187)
| λ |min
www.elsolucionario.net
1 1 1
1
2 3 4
1 1 1 1
H4 = 2 3 4 5 . (3.189)
1 1 1 1
3 4 5 6
1 1 1 1
www.elsolucionario.net
4 5 6 7
Los elementos de la matriz inversa (orden n) son dados por
Para n = 4
16 −120 240 −140
−120 1200 −2700 1680
H−1
4 =
240 −2700
. (3.191)
6480 −4200
−140 1680 −4200 2800
A partir de la ecuación (3.188) la estimación de Turing de la condición de número para H4
llega a ser
KTuring = 4 × 1 × 6480
= 2.59 × 104 .
Ésto es una advertencia de que un error en la entrada puede ser multiplicado por 26000
en el cálculo del resultado de salida. Ésto indica que H4 tiene condición patológica. Si usted
encuentra un sistema altamente patológico tiene un par de alternativas (además de abandonar
el problema).
b. Hacer arreglos para llevar más cifras significativas y, a costa de fuerza bruta, empujar de
principio a fin.
www.elsolucionario.net
Capı́tulo 4
Teorı́a de grupo.
versión final 2.31-0210301
www.elsolucionario.net
how nature work.
Murray Gell-Mann
4.1. Introducción.
En mecánica clásica la simetrı́a de un sistema fı́sico conduce a una ley de conservación.
La conservación del momento angular es una consecuencia directa de la simetrı́a rotacional, lo
cual significa invariancia bajo rotaciones espaciales. A principios del siglo pasado, Wigner y
otros comprendieron que la invariancia era el concepto clave en el entendimiento de los nuevos
fenómenos y en el desarrollo de teorı́as apropiadas. Ası́, en mecánica cuántica los conceptos de
momento angular y spin han llegado a ser aún más centrales. Sus generalizaciones, el isospin,
en fı́sica nuclear y la simetrı́a de sabor en fı́sica de partı́culas, son herramientas indispensables
en la construcción teórica y en sus soluciones. Las generalizaciones del concepto de invariancia
de gauge de la electrodinámica clásica para la simetrı́a del isospin conduce a la teorı́a de gauge
electro-débil.
En cada caso el conjunto de estas operaciones de simetrı́a forman un grupo. La teorı́a
de grupo es la herramienta matemática para tratar las invariancias y las simetrı́as. Ella
trae consigo unificación y formalización de principios tales como reflexión espacial, paridad,
momento angular y geometrı́a, que son ampliamente usados por los fı́sicos.
En geometrı́a el rol fundamental de la teorı́a de grupo fue reconocido hace mucho tiempo
por los matemáticos. En geometrı́a euclidiana, la distancia entre dos puntos y el producto
escalar de dos vectores, o métrica, no cambia, bajo rotaciones o translaciones. Estas simetrı́as
son caracterı́sticas de esta geometrı́a. En relatividad especial la métrica, o producto escalar
de cuadrivectores, difiere del de la geometrı́a euclidiana en que ya no es más positivo definido
y es invariante ante transformaciones de Lorentz.
1
Este capı́tulo está basado en el cuarto capı́tulo del libro: Mathematical Methods for Physicists, fourth
edition de George B. Arfken & Hans J. Weber, editorial Academic Press.
133
www.elsolucionario.net
Para un cristal el grupo de simetrı́a contiene sólo un número finito de rotaciones en valores
discretos del ángulo y reflexiones. La teorı́a de tales grupos discretos o finitos, desarrollada
inicialmente como una rama de las matemáticas pura, ahora es una útil herramienta para
el desarrollo de la cristalografı́a y la fı́sica de la materia condensada. Haremos una breve
introducción a ellos. Cuando las rotaciones dependen de un ángulo continuo el grupo de
rotaciones tiene un número infinito de elementos. Estudiaremos tales grupos continuos o de
Lie.
www.elsolucionario.net
2. Esta multiplicación es asociativa, (ab)c = a(bc).
4. Debe haber un inverso o recı́proco de cada elemento a de G, etiquetado a−1 , tal que
aa−1 = a−1 a = I.
] −1 −1 −1
O 1 O2 = Õ2 Õ1 = O1 O2 = (O1 O2 )
www.elsolucionario.net
(U1 U2 )† = U†2 U†1 = U−1 −1
2 U1 = (U1 U2 )
−1
,
tal que el producto es unitario y un elemento de SU(n). Cada matriz unitaria tiene una
inversa, la cual es también unitaria.
continuos pueden ser representados por matrices. Ejemplos son las rotaciones descritas en la
ecuación (4.1) y (4.3).
Para ilustrar cómo las representaciones matriciales surgen a partir de una simetrı́a, con-
sideremos la ecuación estacionaria de Schrödinger (o alguna otra ecuación de autovalores tal
como I vi = Ii vi para los momentos principales de inercia de un cuerpo rı́gido en mecánica
clásica)
Hψ = Eψ . (4.4)
Supongamos que la ecuación (4.4) se mantiene invariante bajo la acción de un grupo G de
transformaciones R en G (rotaciones de coordenadas, por ejemplo, para un potencial central
V (r) en el Hamiltoniano H), i.e.,
HR = RHR−1 = H . (4.5)
www.elsolucionario.net
RHψ = E(Rψ) = (RHR−1 )Rψ = H(Rψ) . (4.6)
En otras palabras, todas las soluciones rotadas Rψ son degeneradas en energı́a o forman lo
que los fı́sicos llaman un multiplete. Supongamos que este espacio vectorial Vψ de soluciones
transformadas tiene una dimensión finita n. Sean ψ1 , ψ2 , . . . , ψn una base. Ya que Rψj es un
miembro del multiplete, podemos expandirlo en términos de esta base
X
Rψj = rjk ψk . (4.7)
k
Ası́, cada R en G puede ser asociado a una matriz (rjk ), y este mapeo R → (rjk ) es llamada
una representación de G. Si podemos tomar cualquier elemento de Vψ y por rotaciones con
todos los elementos de R de G transforman en todos los otros elementos de Vψ entonces la
representación es irreducible. Si todos los elementos de Vψ no son alcanzados, entonces Vψ
se separa en una suma directa de dos o más subespacios vectoriales, Vψ = V1 ⊕ V2 ⊕ . . ., los
cuales son mapeados dentro de ellos mismos por rotación de sus elementos. En este caso la
representación es llamada reducible. Entonces podemos encontrar una base en Vψ (i.e., hay
una matriz unitaria U) tal que
r1 0 . . .
U(rjk )U† = 0 r2 . . . (4.8)
.. .. . .
. . .
para todos los R de G y todas las matrices (rjk ). Aquı́ r1 , r2 , . . ., son matrices de menor
dimensión que (rjk ), las que están alineadas a lo largo de la diagonal y los 0 son matrices
de ceros. Podemos decir que R ha sido descompuesta en r1 + r2 + . . . en paralelo con Vψ =
V1 ⊕ V2 ⊕ . . ..
Las representaciones irreducibles juegan un rol en teorı́a de grupo que es aproximadamente
análogo a los vectores unitarios en el análisis vectorial. Ellas son las representaciones más
simples, toda otra puede ser construida desde ellas.
www.elsolucionario.net
www.elsolucionario.net
R(ϕ2 )R(ϕ1 ) = exp(iσ2 ϕ2 ) exp(iσ2 ϕ1 ) = exp(iσ2 (ϕ1 + ϕ2 )) = R(ϕ1 + ϕ2 ) .
tr(S) = 0 . (4.11)
Este es el caso para el grupo de rotaciones SO(n) y el grupo unitario SU(n), como veremos
más adelante.
Si R de G en la ecuación (4.1) es unitario, entonces S† = S es hermı́tica, lo cual también
es el caso para SO(n) y SU(n). Ya que hay un i extra en la ecuación (4.10).
Expandamos los elementos del grupo
1
Ri = exp(iεi Si ) = 1 + iεi Si − ε2i S2i + . . . ,
2 (4.12)
1 2 2
R−1
i = exp(−iεi Si ) = 1 − iεi Si − εi Si + . . . ,
2
a segundo orden en el pequeño parámetro del grupo εi porque los términos lineales y varios
términos cuadráticos se cancelan en el producto (figura 4.1)
www.elsolucionario.net
−1
Rj
Ri
−1
Ri
Rj
R ij
R−1 −1
i Rj Ri Rj = 1 + εi εj [Sj , Si ] + . . . ,
X (4.13)
ckji Sk + . . . ,
www.elsolucionario.net
= 1 + εi εj
k
cuando las ecuaciones (4.12) son sustituidas dentro de la ecuación (4.13). La última lı́nea
es debido a que el producto en la ecuación (4.13) es nuevamente un elemento, Rij , cercano
a la unidad en el grupo G. Por tanto su exponente debe ser una combinación lineal de los
generadores Sk y sus parámetros infinitesimales del grupo tienen que ser proporcionales al
producto εi εj . Comparando ambas lı́neas (4.13) encontramos la relación de clausura de los
generadores del grupo de Lie G,
X
[Si , Sj ] = ckij Sk (4.14)
k
Los coeficientes ckij son las constantes de estructura del grupo G. Ya que el conmutador en la
ecuación (4.14) es antisimétrico en i y en j, también lo son las constantes de estructura en
los ı́ndices inferiores,
ckij = −ckji . (4.15)
Si el conmutador en la ecuación (4.14) es tomado como la regla de multiplicación de los
generadores, vemos que el espacio vectorial de los generadores llega a ser un álgebra, el álgebra
de Lie G del grupo G. Para SU(l + 1) el álgebra de Lie es llamada Al , para SO(2l + 1) es Bl
y para SO(2l) es Dl , donde l = 1, 2, . . . es un entero positivo, esto será llamado el rango de
grupo de Lie G o de su álgebra G.
Finalmente, la identidad de Jacobi se satisface para los dobles conmutadores
donde el factor común Sn (y la suma sobre n) pueden eliminarse porque los generadores son
linealmente independientes. Por tanto
X
cm n m n m n
ij cmk + cjk cmi + cki cmj = 0 . (4.19)
m
Las relaciones (4.14), (4.15) y (4.19) forman la base de las álgebras de Lie desde la cual los
elementos finitos del grupo de Lie cerca de su unidad puede ser reconstruido.
Volviendo a la ecuación (4.5), el inverso de R es exactamente R−1 = exp(−iεS). Expandi-
mos HR de acuerdo a la fórmula de Baker-Haudorff, ecuación (3.17),
[S, [iS, H]]
H = HR = exp(iεS)H exp(−iεS) = H + iε[S, H] − ε2 + ··· . (4.20)
2!
www.elsolucionario.net
Al simplificar H de la ecuación (4.20), dividiendo por ε y haciendo ε → 0. Entonces la
ecuación (4.20) implica que para cualquier rotación cercana a 1 en G el conmutador
[S, H] = 0 . (4.21)
Si S y H son matrices hermı́ticas, la ecuación (4.21) dice que S y H pueden ser simultáneamente
diagonalizados. Si S y H son operadores diferenciales como el Hamiltoniano y el momento
angular orbital en mecánica cuántica, entonces la ecuación (4.21) dice que S y H tienen
autofunciones en común y que los autovalores degenerados de H pueden ser distinguidos por
los autovalores de los generadores S. Esta, es con mucho, la más importante aplicación de
teorı́a de grupos a mecánica cuántica.
A continuación, estudiaremos los grupos ortogonales y unitarios como ejemplos.
Para las rotaciones Rz (ϕ) sobre el eje z descritas por la ecuación (4.3), el generador es
dado por
0 −i 0
dR(ϕ)
−i = Sz = i 0 0 , (4.23)
dϕ ϕ=0
0 0 0
donde el factor extra i es insertado para hacer Sz hermı́tica. La rotación Rz (δϕ) en un ángulo
infinitesimal δϕ puede ser escrita como
Rz (δϕ) = 13 + iδϕSz , (4.24)
www.elsolucionario.net
www.elsolucionario.net
Rx (ψ) = 0 cos ψ sen ψ , Ry (θ) = 0 1 0 , (4.27)
0 − sen ψ cos ψ sen θ 0 cos θ
El lado derecho puede ser expandido como una serie de Taylor de primer orden en δϕ para
dar
∂ψ ∂ψ
Rz (δϕ)ψ(x, y, z) = ψ(x, y, z) − δϕ x −y + O(δϕ)2
∂y ∂x (4.32)
= (1 − iδϕLz )ψ(x, y, z) ,
Rz (ϕ + δϕ) − Rz (ϕ)
= −iLz Rz (ϕ) . (4.34)
δϕ
www.elsolucionario.net
El lado izquierdo es justo dRz (ϕ)/δϕ (para δϕ → 0). En esta forma la ecuación (4.34) se
integra inmediatamente a
Rz (ϕ) = exp(−iϕLz ) . (4.35)
Note cuidadosamente que Rz (ϕ) rota funciones (en el sentido antihorario) relativa a las coor-
denadas fijadas y que Lz es la componente z del momento angular orbital L. ~ La constante
de integración está fijada por la condición de borde Rz (0) = 1.
Si reconocemos que los elementos de matriz
∂
∂x
∂
Lz = (x, y, z)Sz
∂y ,
(4.36)
∂
∂z
claramente Lx , Ly , Lz satisface la misma relación de conmutación
Por supuesto, las matrices de Pauli son todas de traza nula y hermı́ticas.
Con las matrices de Pauli como generadores, los elementos (U1 , U2 , U3 ) de SU(2) pueden
ser generados por
U1 = exp(ia1 σ1 /2) , U2 = exp(ia2 σ2 /2) , U3 = exp(ia3 σ3 /2) . (4.40)
Los tres parámetros ai son reales. El factor extra 1/2 está presente en los exponentes ya que
www.elsolucionario.net
si = σi /2 satisface las mismas relaciones de conmutación 4
[si , sj ] = iεijk sk (4.41)
como el momento angular en la ecuación (4.37).
La ecuación (4.3) da un operador de rotación para rotar las coordenadas cartesianas en el
espacio tridimensional. Usando la matriz de momento angular s3 , tenemos el correspondiente
operador de rotación en el espacio de dos dimensiones (complejo) Rz (ϕ) = exp(iϕσ3 /2).
Para rotar una función de onda vectorial de dos componentes (spinor) o una partı́cula de
spin 1/2 relativa a coordenadas fijas, el operador de rotación es Rz (ϕ) = exp(−iϕσ3 /2) de
acuerdo a la ecuación (4.35).
Usando la ecuación (4.40) la identidad de Euler, la ecuación (3.161), obtenemos
a a
j j
Uj = cos + iσj sen .
2 2
Aquı́ el parámetro aj aparece como un ángulo, el coeficiente de una matriz tipo momento
angular ϕ en la ecuación (4.26). Con esta identificación de los exponenciales, la forma general
de la matriz SU(2) (para rotar funciones más que coordenadas) podrı́a ser escrita como
U(α, β, γ) = exp(−iγσ3 /2) exp(−iβσ2 /2) exp(−iασ1 /2) .
Como vimos, los elementos de SU(2) describen rotaciones en un espacio complejo bidi-
mensional que deja invariante a |z1 |2 + |z2 |2 . El determinante es +1. Hay tres parámetros
independientes. Nuestro grupo ortogonal real SO(3) de determinante +1, claramente descri-
be rotaciones comunes en el espacio tridimensional con la importante caracterı́stica de dejar
invariante a x2 + y 2 + z 2 . También hay tres parámetros independientes. Las interpretaciones
de rotación y la igualdad de números de parámetros sugiere la existencia de alguna clase de
correspondencia entre los grupos SU(2) y SO(3). Aquı́ desarrollamos esta correspondencia.
4
Las constantes de estructuras (iεijk ) conducen a las representaciones de SU(2) de dimensión 2J = 1
para generadores de dimensión 2j + 1, con J = 0, 1/2, 1, . . .. Los casos con J entero también conducen a las
representaciones de SO(3).
www.elsolucionario.net
M
M’
U
Figura 4.2: Ilustración de M0 = UMU† ecuación (4.42).
La operación SU(2) sobre una matriz está dada por una transformación unitaria, la ecua-
ción (4.5), con R = U y la figura (4.2)
www.elsolucionario.net
M0 = UMU† . (4.42)
Tomando M como una matriz de 2 × 2, notemos que cualquier matriz de 2 × 2 puede ser
escrita como una combinación lineal de la matriz unidad y las tres matrices de Pauli. Sea M
la matriz de traza cero,
z x − iy
M = xσ1 + yσ2 + zσ3 = , (4.43)
x + iy −z
z0 x0 − iy 0
0 0 0 0
M = x σ1 + y σ2 + z σ3 = . (4.44)
x0 + iy 0 −z 0
o (x2 + y 2 + z 2 ) es invariante bajo esta operación de SU(2), como con SO(3). SU(2) debe,
por lo tanto, describir una rotación. Esto sugiere que SU(2) y SO(3) pueden ser isomórficos
o homomórficos.
Aproximemos el problema de qué rotación describe SU(2), considerando casos especiales.
Retomando la ecuación (4.38) sea a = eiξ y b = 0, o
eiξ 0
Uz = . (4.46)
0 e−iξ
Realizando una transformación unitaria sobre cada una de las tres matrices de Pauli,
tenemos
iξ −iξ
† e 0 0 1 e 0
Uz σ1 Uz =
0 e−iξ 1 0 0 eiξ
(4.47)
0 e2iξ
= −2iξ .
e 0
Reexpresamos este resultado en términos de las matrices de Pauli para obtener
Uz xσ1 U†z = x cos 2ξσ1 − x sen 2ξσ2 . (4.48)
Similarmente,
Uz yσ2 U†z = y sen 2ξσ1 − y cos 2ξσ2 ,
(4.49)
Uz zσ3 U†z = zσ3 .
A partir de esta expresión de doble ángulo vemos que podrı́amos comenzar con el ángulo
www.elsolucionario.net
medio: ξ = α/2. Entonces, de las ecuaciones (4.42)–(4.44), (4.48) y (4.49),
x0 = x cos α + y sen α
y 0 = −x sen α + y cos α (4.50)
z0 = z .
La transformación unitaria de 2 × 2 usando Uz (α/2) es equivalente al operador de rotación
R(α) de la ecuación (4.3).
El establecimiento de la correspondencia de
cos β/2 sen β/2
Uy (β/2) = (4.51)
− sen β/2 cos β/2
y Ry (β) y de
cos ϕ/2 i sen ϕ/2
Ux (ϕ/2) = (4.52)
i sen ϕ/2 cos ϕ/2
y Rx (ϕ) pueden calcularse como ejercicio. Podemos notar que Uk (ψ/2) tiene la forma general
Uk (ψ/2) = 1 cos ψ/2 + iσk sen ψ/2 , (4.53)
donde k = x, y, z.
La correspondencia
α iα/2
cos α sen α 0
e 0
Uz = −iα/2 ↔ − sin α cos α 0 = Rz (α) , (4.54)
2 0 e
0 0 1
no es una simple correspondencia uno a uno. Especı́ficamente, como α en Rz recorre desde 0
a 2π, el parámetro Uz , α/2, recorre desde 0 a π . Encontramos que
Rz (α + 2π) = Rz (α)
(4.55)
iα/2
−e 0
Uz (α/2 + π) = = −Uz (α/2) .
0 −e−iα/2
www.elsolucionario.net
Por lo tanto ambos Uz (α/2) y Uz (α/2+π) = −Uz (α/2) corresponde a Rz (α). La corresponden-
cia es de 2 a 1, o SU(2) y SO(3) son homomórficos. Este establecimiento de la correspondencia
entre las representaciones de SU(2) y de aquella SO(3) significa que las representaciones co-
nocidas de SU(2) automáticamente nos proporciona de las representaciones de SO(3).
Combinando las rotaciones, encontramos que una transformación unitaria usada
corresponde a la rotación general de Euler Rz (γ)Ry (β)Rz (α). Por multiplicación directa,
iγ/2 iα/2
e 0 cos β/2 sen β/2 e 0
U(α, β, γ) =
0 e−iγ/2 − sen β/2 cos β/2 0 e−iα/2
(4.57)
ei(γ+α)/2 cos β/2 ei(γ−α)/2 sen β/2
= .
−e−i(γ−α)/2 sen β/2 e−i(γ+α)/2 cos β/2
www.elsolucionario.net
(γ + α) β (γ − α)
ξ= , η= , ζ= . (4.58)
2 2 2
De la ecuación (4.57) podemos identificar los parámetros de la ecuación (4.38) como
Como una consecuencia de la simetrı́a esférica del potencial V (r), el momento angular
~ es conservado. En la sección 4.2 las componentes cartesianas de L
orbital L ~ están identificadas
como los generadores del grupo de rotación SO(3). En vez de representar Lx , Ly , Lz por
operadores, usaremos matrices. Las matrices Li son matrices (2l + 1) × (2l + 1) con la misma
5
Para un potencial de Coulomb puro la energı́a depende sólo de n.
www.elsolucionario.net
dimensión del número de estados degenerados. La dimensión 2l + 1 está identificada con los
estados degenerados 2l + 1.
Esta degeneración es removida por un campo magnético B, ~ hecho conocido como el efecto
Zeeman. Esta interacción magnética añade un término al Hamiltoniano que no es invariante
bajo SO(3). Este es un término que quiebra la simetrı́a.
En el caso de partı́culas con interacción fuerte (protones, neutrones, etc.) no podemos
seguir la analogı́a directamente, ya que todavı́a no entendemos completamente las interaccio-
nes nucleares. La fuerza fuerte está descrita por la teorı́a gauge de Yang-Mills, basada sobre
la simetrı́a de color SU(3) llamada cromo-dinámica cuántica o abreviada QCD. Sin embargo,
QCD es una teorı́a no lineal y por lo tanto, es complicada a grandes distancias y baja energı́a,
por lo que permanece no resuelta. Por lo tanto, no conocemos el Hamiltoniano, en vez de
esto, volveremos a la analogı́a.
En los años 1930, después del descubrimiento del neutrón, Heinsenberg propuso que las
fuerzas nucleares eran cargas independientes. Los neutrones difieren en masa de los protones
solamente en un 1.6 %. Si esta pequeña diferencia es ignorada, el neutrón y el protón podrı́an
ser considerados como dos estados de cargas (o isospin) de un doblete, llamado nucleón. El
www.elsolucionario.net
isospin I tiene proyección en el eje z I3 = 1/2 para el protón I3 = −1/2, para el neutrón. El
isospin no tiene nada que ver con el spin (el momento angular intrı́nseco de una partı́cula),
pero las dos componentes del estado de isospin obedecen las mismas relaciones matemáti-
cas que el estado de spin 1/2. Para el nucleón, I = τ /2, son las matrices usualesde Pauli
1 0
además los estados de isospin (±1/2) son autovectores de la matriz de Pauli τ3 = .
0 −1
Similarmente, los tres estados de carga del pión π + , π 0 , π − forman un triplete. El pión es la
partı́cula más liviana con interacción fuerte y es la mediadora de la fuerza nuclear a distancia,
como el fotón es partı́cula que media la fuerza electromagnética. La interacción fuerte trata
igualmente a miembros de esa familia de partı́culas, o multipletes y conserva el isospin. La
simetrı́a es el grupo isospin SU(2).
El octuplete mostrado en la tabla 4.1 llama la atención6 . Los números cuánticos conser-
vados que son análogos y generalizaciones de Lz y L2 de SO(3) son I3 e I 2 para el isospin, e
Y para hipercarga. Las partı́culas pueden ser agrupadas dentro de multipletes de carga o de
isospin. Entonces, la hipercarga puede ser tomada como dos veces el promedio de carga del
1
multiplete. Para el nucleón, i.e., el doblete neutrón–protón, Y = 2 · (0 + 1) = 1. Los valores
2
de la hipercarga y los del isospin son listados en la tabla 4.1 para bariones como el nucleón y
sus compañeros (aproximadamente degenerados). Ellos forman un octeto como lo muestra la
figura 4.3. En 1961 Gell-Mann, e independientemente Ne’eman, sugirieron que la interacción
fuerte debe ser (aproximadamente) invariante bajo un grupo espacial tridimensional unitario,
SU(3), esto es, tienen simetrı́a de sabor SU(3).
La elección de SU(3) estuvo basada primero sobre los dos números cuánticos conservados
e independientes H1 = I3 y H2 = Y ( i.e., generados con [I3 , Y ] = 0), que llaman para un
grupo de rango 2. Segundo, el grupo ha tenido una representación de ocho dimensiones para
tener en cuenta a los cercanamente degenerados bariones y cuatro octetos similares para los
mesones. En un sentido, SU(3) es la generalización más simple del isospin SU(2). Tres de
sus generadores son matrices hermı́ticas de 3 × 3 de traza nula que contienen las matrices de
6
Todas las masas están dadas en unidades de energı́a.
www.elsolucionario.net
Masa [MeV] Y I I3
Ξ− 1321.32 − 12
1
Ξ -1 2
Ξ 0
1314.9 + 12
Σ− 1197.43 -1
Σ Σ0 1192.55 0 1 0
Σ+ 1189.37 +1
Λ Λ 1115.63 0 0 0
n 939.566 − 21
1
N 1 2
p 938.272 + 12
www.elsolucionario.net
1
Cuadro 4.1: Bariones con spin 2
y paridad par
n p
1
Σ
−
Σ0 Λ Σ+
I3
−1 −½ 0 +½ 1
Ξ− Ξ0
−1
τi 0
λi = 0 , i = 1, 2, 3 . (4.60)
0 0 0
www.elsolucionario.net
De este modo, el grupo del isospin SU(2) es un subgrupo de SU(3) con I3 = λ3 /2. Otros
cuatro generadores tienen los no diagonales 1 de τ1 e i, −i de τ2 en todas las otras posibles
ubicaciones para formar las matrices hermı́ticas 3 × 3 de traza nula.
0 0 1 0 0 −i
λ4 = 0 0 0 , λ5 = 0 0 0 ,
1 0 0 i 0 0
(4.61)
0 0 0 0 0 0
λ6 = 0 0 1 , λ7 = 0 0 −i .
0 1 0 0 i 0
www.elsolucionario.net
λ8 = √ 0 1 0 . (4.62)
3 0 0 −2
Generalmente hay 32 − 1 = 8 generadores para SU(3) el cual tiene orden 8. De los con-
mutadores de esos generadores pueden obtenerse fácilmente las constantes de estructura de
SU(3).
Volviendo a la simetrı́a de sabor SU(3), imaginemos que el Hamiltoniano para nuestro
octeto de bariones están compuesto de tres partes
La primera parte, Hfuerte , tiene la simetrı́a SU(3) y conduce a la degeneración ocho. La intro-
ducción del término de quiebre de simetrı́a, Hmedio , remueve parte de la degeneración dando
los cuatro multipletes del isospin (Ξ− , Ξ0 ), (Σ− , Σ0 , Σ+ ), Λ, y N = (p, n), con diferentes ma-
sas. Estos aún son multipletes ya que Hmedio tiene la simetrı́a del isospin SU(2). Finalmente,
la presencia de fuerzas dependientes de la carga separan los multipletes de isospin y remueve
la última degeneración. Esta secuencia se muestra en la figura 4.4
Aplicando teorı́a de perturbación de primer orden de Mecánica Cuántica, relaciones sim-
ples de masas de bariónicas pueden ser calculadas. Quizás el suceso más espectacular de este
modelo SU(3) ha sido su predicción de nuevas partı́culas. En 1961 cuatro mesones K y tres
π (todos pseudo escalares; spin 0, paridad impar) sugieren otro octeto, similar al del octeto
bariónico. SU(3) predice un octavo mesón η, de masa 563 MeV. El mesón η, con una masa
determinada experimentalmente de 548 MeV, fue encontrado poco después. Agrupamientos
de nueve de los bariones más pesados (todos con spin 3/2, con paridad par) sugirió un mul-
tiplete de 10 miembros o un decaplete de SU(3). El décimo barión faltante fue predicho con
una masa cercana a 1680 MeV y una carga negativa. En 1964 Ω− cargada negativamente con
masa (1675±12) MeV fue descubierta.
La representación de octeto no es la más simple para SU(3). La representación más simple
son triangulares, como se muestra en la figura 4.5, a partir de las cuales todas las otras
pueden ser generadas por acoplamiento del momento angular generalizado. La representación
www.elsolucionario.net
Ξ
−
Ξ
masa Ξ0
Σ
−
Σ
Σ0
Σ+
Λ Λ
n
N
p
H fuerte H fuerte + H medio H fuerte + H medio+ H electromagnética
www.elsolucionario.net
Figura 4.4: Separación de masa bariónica.
(a) Y (b) Y
_
s 2/3
d 1/3 u
−½ +½ I3
−½ +½ I3
_ −1 / 3 _
−2 / 3 u d
s
Figura 4.5: (a) Representación fundamental de SU(3), el diagrama de peso para los quark u,
d, s; (b) diagrama de peso para los antiquark u, d, s.
fundamental en la figura 4.5 (a) contiene los quark u (arriba) y d (abajo) y el s (extrañeza), y
figura 4.5 (b) los correspondientes antiquarks. Los octetos de mesones pueden ser obtenidos
a partir de la representación de quark como pares q q̄, 32 = 8 + 1, esto sugiere que los mesones
contienen quarks (y antiquarks) como sus constituyentes. El modelo de quarks resultante da
una exitosa descripción de la espectroscopia hadrónica. La solución de sus problemas con el
principio de exclusión de Pauli, eventualmente, conduce a la teorı́a de gauge de SU(3)-color
de las interacciones fuertes, llamada cromo-dinámica cuántica o QCD.
Para mantener la teorı́a de grupo en su real perspectiva, podrı́amos enfatizar que la teorı́a
de grupo identifica y formaliza las simetrı́as. Ella clasifica partı́culas (y algunas veces predice).
www.elsolucionario.net
Pero a parte de decir que una parte del Hamiltoniano tiene simetrı́a SU(2) y otra parte tiene
simetrı́a SU(3), la teorı́a de grupo no dice nada acerca de la interacción de las partı́culas.
Recuerde que la afirmación de que el potencial atómico es esféricamente simétrico no nos dice
nada acerca de la dependencia radial del potencial o de su función de onda. En contraste, en
una teorı́a de gauge la interacción es mediada por bosones vectoriales (como el fotón media en
la electrodinámica cuántica) y determinado únicamente por la derivada covariante de gauge.
www.elsolucionario.net
Las componentes del momento angular satisfacen las relaciones de conmutación
Mostraremos ahora que λ = J(J + 1). Este tratamiento ilustrará la generalidad y potencia
de las técnicas de operadores particularmente el uso de operadores de subida y bajada.
Un operador de subida o bajada se define como
www.elsolucionario.net
[Jz , J+ ] = +J+ , [Jz , J− ] = −J− , [J+ , J− ] = 2Jz . (4.72)
Jz J+ = J+ (Jz + 1) , (4.74)
o
Jz (J+ |λM i) = J+ (Jz + 1)|λM i = (M + 1)(J+ |λM i) . (4.75)
Por lo tanto, J+ |λM i todavı́a es una autofunción de Jz con autovalores M +1. J+ ha elevado el
autovalor en 1 y por eso es llamado operador de subida. Similarmente, J− baja los autovalores
en 1 y a menudo es llamado operador de bajada.
Tomando los valores esperados y usando Jx† = Jx , Jy† = Jy ,
hλM |J~ 2 − Jz2 |λM i = hλM |Jx2 + Jy2 |λM i = | Jx |λM i |2 + | Jy |λM i |2 ,
vemos que λ − M 2 ≥ 0, tal que M es ligado. Sea J el más grande valor de M . Luego
J+ |λJi = 0, lo cual implica que J− J+ |λJi = 0. Luego combinando las ecuaciones (4.71) y
(4.72) obtenemos
J~ 2 = J− J+ + Jz (Jz + 1) , (4.76)
encontramos que a partir de la ecuación (4.76)
Por lo tanto
λ = J(J + 1) ≥ 0; (4.77)
www.elsolucionario.net
con un J no negativo. Ahora reetiquetaremos los estados |λM i = |JM i. Similarmente, sea
J 0 el más pequeño de los M . Entonces J− |JJ 0 i = 0. A partir de
J~ 2 = J+ J− − Jz (Jz + 1) , (4.78)
vemos que
2
0 = J+ J− |JJ 0 i = (J~ 2 + Jz − Jz2 )|JJ 0 i = (λ + J 0 − J 0 )|JJ 0 i . (4.79)
De manera que
λ = J(J + 1) = J 0 (J 0 − 1) = (−J)(−J − 1) .
Ası́ J 0 = −J, y M corre en pasos enteros desde −J a +J,
−J ≤ M ≤ +J . (4.80)
Comenzando desde |JJi y aplicando J− repetidas veces, alcanzaremos todos los otros estados
|JM i. De manera que |JM i forma una representación irreductible; M varı́a y J está fijo.
Entonces usando las ecuaciones (4.68), (4.76) y (4.78) obtenemos
www.elsolucionario.net
J− J+ |JM i = [J(J + 1) − M (M + 1)]|JM i = (J − M )(J + M + 1)|JM i ,
(4.81)
J+ J− |JM i = [J(J + 1) − M (M − 1)]|JM i = (J + M )(J − M + 1)|JM i .
los autovalores o valores esperados en la ecuación (4.81) deberı́an ser positivos o cero.
Ya que J+ aumenta el autovalor de M a M + 1, reetiquetaremos la autofunción resultante
|JM + 1i. La normalización está dada por la ecuación (4.81) como
p
J+ |JM i = (J − M )(J + M + 1)|JM + 1i , (4.83)
tomando la raı́z cuadrada positiva y no introduciendo ningún factor de fase. Por los mismos
argumentos p
J− |JM i = (J + M )(J − M + 1)|JM − 1i . (4.84)
Finalmente, ya que M va desde −J a +J en pasos unitarios, 2Jdeberı́a ser un número
entero. J es por lo tanto un entero o la mitad de un entero impar. Como hemos visto, el
momento angular orbital está descrito con J entero. A partir de los spin de algunas partı́culas
fundamentales y de algunos núcleos, tenemos que J = 1/2, 3/2, 5/2, . . . Nuestro momento
angular está cuántizado esencialmente como un resultado de relaciones de conmutaciones.
En coordenadas polares esféricas θ, ϕ las funciones hθ, ϕ|lmi = Ylm (θ, ϕ) son armónicos
esféricos.
Álgebra de Lie Al Bl Dl
Grupo de Lie SU(l+1) SO(2l+1) SO(2l)
rango l l l
orden l(l+2) l(2l+1) l(2l-1)
www.elsolucionario.net
[Hi , Eα ] = αi Eα . (4.86)
Ahora podemos mostrar que Eα |(c1 , c2 , . . . , cl )m1 , m2 , . . . , ml i tiene los vector peso (m1 +
α1 , m2 +α2 , . . . , ml +αl ) usando las relaciones de conmutación, la ecuación (4.86), en conjunto
con las ecuaciones (4.89a) y (4.89b),
Por lo tanto
estas son las generalizaciones de las ecuaciones (4.83) y (4.84) a partir de SO(3). Esos cambios
de autovalores por el operador Eα son llamados sus reglas de selección en mecánica cuántica.
www.elsolucionario.net
espacio y el tiempo. Covarianza bajo rotaciones es una afirmación de la isotropı́a del espacio.
El requerimiento de la covarianza de Lorentz viene de la relatividad especial. Todas estas
tres transformaciones en conjunto forman el grupo inhomogéneo de Lorentz o el grupo de
Poincaré. Aquı́ excluimos las translaciones. Las rotaciones espaciales y las transformaciones
de Lorentz forman un grupo, el grupo homogéneo de Lorentz.
Primero generamos un subgrupo, las transformaciones de Lorentz en el cual la velocidad
relativa ~v está a lo largo del eje x = x1 . El generador puede ser determinado considerando un
marco de referencia espacio-temporal moviéndose con una velocidad relativa infinitesimal δv.
Las relaciones son similares a aquellas para rotaciones en el espacio real, excepto que aquı́ el
ángulo de rotación es imaginario puro.
Las transformaciones de Lorentz son lineales no sólo en el espacio de coordenadas xi
sino que también en el tiempo t. Ellas se originan a partir de las ecuaciones de Maxwell
de la electrodinámica, las cuales son invariantes bajo la transformaciones de Lorentz, como
veremos luego. Las transformaciones de Lorentz dejan invariante la forma cuadrática siguiente
c2 t2 − x21 − x22 − x23 = x20 − x21 − x22 − x23 donde x0 = ct. Vemos esto si encendemos una fuente
de luzpen Pel2origen del 2sistema de coordenadas. En tiempo t la luz ha viajado una distancia
ct = xi , tal que c t − x1 − x22 − x23 = 0. La relatividad especial requiere esto en todos
2 2
los sistemas (inerciales) que se mueven con velocidad v ≤ c en cualquier dirección relativa
al sistema xi y que tengan el mismo origen a tiempo t = 0, se mantenga también que
c2 t0 2 − x01 2 − x02 2 − x03 2 = 0. El espacio cuadridimensional con la métrica x20 − x21 − x22 − x23 es
llamado espacio de Minkowski con el producto escalar de dos cuadrivectores definido como
a · b = a0 b0 − ~a · ~b. Usando el tensor métrico
1 0 0 0
0 −1 0 0
(gµν ) = (g µν ) =
0 0 −1 0 ,
(4.91)
0 0 0 −1
8
Ser covariante significa que tienen la misma forma en diferentes sistemas de coordenadas tal que no hay
un sistema de referencia privilegiado.
www.elsolucionario.net
podemos subir y bajar ı́ndices de un cuadrivector tal como de las coordenadas xµ = (x0 , ~x)
es decir xµ = gµν xν = (x0 , −~x) y xµ gµν xν = x20 − ~x 2 , la convención de suma de Einstein se
da por entendida. Para el gradiente ∂ µ = (∂/∂x0 , −∇) ~ = ∂/∂xµ y ∂µ = (∂/∂x0 , ∇) ~ tal que
2 2 2 2 2 2
∂ = ∂ /∂x0 − ∇ es un escalar de Lorentz, al igual que la métrica x0 − ~x .
Para v c, en el lı́mite no relativista, las transformaciones de Lorentz deben ser trans-
formaciones de Galileo. Por lo tanto, para derivar la forma de una transformación de Lorentz
a lo largo del eje x1 , partimos con una transformación Galileana para una velocidad relativa
infinitesimal δv:
x01 = x1 − δvt = x1 − x0 δβ . (4.92)
v
Como es usual β = . Por simetrı́a también podemos escribir
c
x00 = x0 − ax1 δβ , (4.93)
donde a es un parámetro a fijar una vez que se imponga que x20 − x21 deba ser invariante,
2 2
x00 − x01 = x20 − x21 .
www.elsolucionario.net
(4.94)
(ρσ1 )2 (ρσ1 )3
exp(−ρσ1 ) = 1 − ρσ1 + − + ··· . (4.98)
2! 3!
Notando que σ 2 = 1,
exp(−ρσ1 ) = 1 cosh ρ + σ1 senh ρ . (4.99)
Por lo tanto nuestra transformación de Lorentz finita es
0
x0 cosh ρ − senh ρ x0
0 = . (4.100)
x1 − senh ρ cosh ρ x1
www.elsolucionario.net
www.elsolucionario.net
velocidad relativa ~v no paralela a ningún eje. Las matrices dadas por la ecuación (4.100) para
el caso ~v = x̂vx forman un subgrupo. Las matrices en el caso general no lo hacen. El producto
de dos matrices de transformaciones de Lorentz, L(~v1 ) y L(~v2 ), producen una tercera matriz
de transformación L(~v3 ), si las dos velocidades ~v1 y ~v2 son paralelas. La velocidad resultante
~v3 está relacionada con ~v1 y con ~v2 mediante la regla de adición de velocidades de Einstein.
Si ~v1 y ~v2 no son paralelas, no existe entonces una relación simple.
Todos los sı́mbolos tienen sus significados usuales y hemos supuesto el vacı́o por simplicidad.
Supongamos que las ecuaciones de Maxwell se mantienen en todos los sistemas inerciales;
esto es , las ecuaciones de Maxwell son consistentes con la relatividad especial. (La covarian-
cia de las ecuaciones de Maxwell bajo transformaciones de Lorentz fue realmente mostrada
por Lorentz y Poincaré antes de que Einstein propusiera su teorı́a de la relatividad espe-
cial). Nuestro objetivo inmediato es reescribir las ecuaciones de Maxwell como ecuaciones
tensoriales en el espacio de Minkowski. Esto hará la covariancia de Lorentz explı́cita.
En términos de los potenciales escalar y vectorial, podemos escribir
~ =∇
B ~ ×A ~,
~ (4.105)
~ = − ∂ A − ∇ϕ
E ~ .
∂t
~ la divergencia de A
La ecuación anterior especifica el rotor de A; ~ no está definida. Po-
demos, y por futuras conveniencias lo hacemos, imponer la siguiente relación sobre el vector
potencial
www.elsolucionario.net
~ ·A
∇ ~ + ε0 µ0 ∂ϕ = 0 . (4.106)
∂t
Este es conocido como el gauge de Lorentz. Servirá a nuestros propósitos de desacoplar las
~ y para ϕ .
ecuaciones diferenciales para A
Ahora reescribimos las ecuaciones de Maxwell en términos de los potenciales. A partir de
~ ·D
la ecuación (4.103c) para ∇ ~ y (4.105)
~
~ · ∂A = − ρ ,
∇2 ϕ + ∇ (4.107)
∂t ε0
~ ×H
considerando que la ecuación (4.103b) para ∇ ~ y (4.105) y la identidad vectorial para el
rotor del rotor produce
~
∂2A ~ ∂ϕ + 1 ∇ ~ = ρ~v .
h i
+ +∇ ~∇
~ ·A
~ − ∇2 A (4.108)
∂t2 ∂t ε 0 µ0 ε0
1 ∂2 ~
2
∇ − 2 2 A = −µ0 ρ~v ,
c ∂t
(4.109)
1 ∂2
2 ρ
∇ − 2 2 ϕ=− .
c ∂t ε0
1 ∂2
∇2 − = ∂ 2 = −∂ µ ∂µ ,
c2 ∂t2
es un Laplaciano cuadridimensional. Usualmente este operador es llamado el d’Alembertiano
y denotado por 2 . Puede probarse que es un escalar.
www.elsolucionario.net
∂ 2 Aµ = iµ . (4.112)
La ecuación anterior parece una ecuación tensorial, pero eso no basta. Para probar que es una
ecuación tensorial, partimos investigando las propiedades de transformación de la corriente
generalizada iµ .
www.elsolucionario.net
Ya que un elemento de carga de es una cantidad invariante, tenemos
Vimos que el elemento de volumen cuadridimensional es también un invariante, dx1 dx2 dx3 dx0 ,
comparando estos resultados vemos que la densidad de carga ρ debe transformar de la misma
manera que x0 . Ponemos ρ = i0 con i0 establecida como la componente cero de un cuadri-
vector. Las otras partes de la ecuación (4.111) pueden ser expandidas como
ρvx ρ dx1
i1 = =
c c dt (4.114)
dx 1
= i0 .
dt
Ya que justo mostramos que i0 transforma como dx0 , esto significa que i1 transforma como
dx1 . Con resultados similares para i2 e i3 . tenemos que iλ transforma como dxλ , probando
de esta manera que iλ es un vector, un vector del espacio cuadridimensional de Minkowski.
La ecuación (4.112), la cual deriva directamente de las ecuaciones de Maxwell, suponemos
que se mantiene en todos los sistemas cartesianos. Entonces, por la regla del cociente Aµ es
también un vector y (4.112) es una legı́tima ecuación tensorial.
Ahora, devolviéndonos, la ecuación (4.105) puede ser escrita
∂Aj ∂A0
ε0 Ej = − + , j = 1, 2, 3,
∂x0 ∂xj
(4.115)
1 ∂Ak ∂Aj
Bi = − , (i, j, k) = (1, 2, 3) ,
µc ∂xj ∂xk
y permutaciones cı́clicas.
Definimos un nuevo tensor
∂Aν ∂Aµ
∂ µ Aν − ∂ ν Aµ = − ≡ F µν = −F νµ (µ, ν = 0, 1, 2, 3)
∂xµ ∂xν
www.elsolucionario.net
∂Fµν
= iµ . (4.117)
∂xν
El lado izquierdo es una divergencia cuadridimensional de un tensor y por lo tanto un vector.
∂F µν
www.elsolucionario.net
Esto es, por supuesto, equivalente a contraer un tensor de tercer rango . Las ecuaciones
∂xλ
de Maxwell (4.103a) para ∇ ~ ×E ~ y la ecuación (4.103d) para ∇
~ · B pueden ser expresadas en
forma tensorial
∂F23 ∂F31 ∂F12
+ + =0, (4.118)
∂x1 ∂x2 ∂x3
para (4.103d) y tres ecuaciones de la forma
para (4.103a). Una segunda ecuación, permutando 120 y una tercera, permutando 130.
Ya que
∂F µν
∂ λ F µν = ≡ tλµν ,
∂xλ
es un tensor de tercer rango, las ecuaciones (4.117) y (4.119) pueden ser expresadas por la
ecuación tensorial
tλµν + tνλµ + tµνλ = 0 . (4.120)
En todos los casos anteriores los ı́ndices µ, ν y λ se suponen diferentes.
4.5.1. ~ y B.
Transformaciones de Lorentz de E ~
La construcción de las ecuaciones tensoriales (4.118) y (4.120) completan nuestro objetivo
inicial de reescribir las ecuaciones de Maxwell en forma tensorial. Ahora explotamos las
propiedades tensoriales de nuestros cuadrivectores y del tensor F µν .
Para las transformaciones de Lorentz que corresponden a movimientos a lo largo del eje
z(x3 ) con velocidad v, los “cosenos directores” están dados por
donde
v
β=
c
y
2 −1/2
γ = 1−β . (4.122)
Usando las propiedades de transformación tensorial, podemos calcular los campos eléctrico y
magnético en el sistema en movimiento en términos de los valores en el marco de referencias
original. A partir de las ecuaciones (2.59), (4.116) y (4.121) obtenemos
1 v
Ex0 = p Ex − 2 By ,
1 − β2 c
1 v (4.123)
Ey0 = p Ey + 2 Bx ,
1−β 2 c
Ez0 = Ez ,
y
1 v
www.elsolucionario.net
Bx0 = p Bx +
Ey ,
1 − β2 c2
0 1 v (4.124)
By = p By − 2 Ex ,
1 − β2 c
0
Bz = Bz .
Este acoplamiento de E ~ y B
~ es esperado. Consideremos, por ejemplo, el caso de campo
eléctrico nulo en el sistema sin prima
Ex = Ey = Ez = 0 .
Claramente, no habrá fuerza sobre una partı́cula de carga estacionaria. Cuando la partı́cula
está en movimiento con una velocidad pequeña ~v a lo largo del eje z un observador sobre la
partı́cula ve campos (ejerciendo una fuerza sobre la partı́cula cargada) dados por
Ex0 = −vBy ,
Ey0 = vBx ,
donde B~ es un campo magnético en el sistema sin primas. Estas ecuaciones pueden ser puestas
en forma vectorial
~ 0 = ~v × B
E ~ , o bien, F~ = q~v × B
~ , (4.125)
la cual es usualmente tomada como la definición operacional del campo magnético B. ~
www.elsolucionario.net
proveerá ilustración adicional de los conceptos de grupos de la sección 4.1 y conduce direc-
tamente a los grupos dihédricos. Los grupos dihédricos a su vez nos abren el estudio de los
32 grupos puntuales y 230 grupos espaciales que son de suma importancia en cristalografı́a
y Fı́sica del Sólido. Notemos que fue a través del estudio de las simetrı́as cristalinas que los
conceptos de simetrı́a y teorı́a de grupos entraron a la Fı́sica. En Fı́sica, la condición de grupo
abstracto a menudo asume un significado fı́sico directo en términos de transformaciones de
vectores, spinores y tensores.
Como un muy simple, pero no trivial, ejemplo de un grupo finito, consideremos el conjunto
1, a, b, c que combinamos de acuerdo a la tabla de multiplicación del grupo.9
1 a b c
1 1 a b c
a a b c 1
b b c 1 a
c c 1 a b
Claramente, las cuatro condiciones de la definición de grupo son satisfechas. Los elementos
a, b, c y 1 son entidades matemáticas abstractas, completamente sin restricciones, excepto
por la anterior tabla de multiplicación.
Ahora, para una especı́fica representación de estos elementos del grupo, tomemos
combinados con la multiplicación ordinaria. Nuevamente, las cuatro condiciones de grupo son
satisfechas y estos cuatro elementos forman un grupo. Etiquetamos este grupo por C4 . Ya que
la multiplicación de los elementos del grupo es conmutativa, el grupo es llamado conmutativo o
abeliano. Nuestro grupo es también un grupo cı́clico, en que los elementos pueden ser escritos
como potencias sucesivas de un elemento, en este caso in , n = 0, 1, 2, 3. Notemos que al
9
El orden de los factores es fila-columna: ab = c
www.elsolucionario.net
I V1 V2 V2
I I V1 V2 V3
V1 V1 I V3 V2
V2 V2 V3 I V1
V3 V3 V2 V1 I
www.elsolucionario.net
cos ϕ − sen ϕ
R(ϕ) = ,
sen ϕ cos ϕ
y para ϕ = 0, π/2, π y 3π/2 tenemos
1 0 0 −1
1= A=
0 1 1 0
(4.128)
−1 0 0 1
B= C= .
0 −1 −1 0
Este conjunto de cuatro matrices forman un grupo donde la ley de combinación es la multi-
plicación de matrices. Aquı́ hay una segunda representación, ahora en términos de matrices.
Es fácil verificar que esta representación es también abeliana o cı́clica. Claramente hay una
correspondencia uno-a-uno entre las dos representaciones.
1 ↔ 1 ↔ 1 a ↔ i ↔ A b ↔ −1 ↔ B c ↔ −i ↔ C . (4.129)
En el grupo C4 las dos representaciones (1, i, −1, −i) y (1, A, B, C) son isomórficas.
En contraste con esto, no hay tal correspondencia entre cualquiera de esta representaciones
del grupo C4 y otro grupo de cuatro objetos, el vierergruppe. El vierergruppe tiene una tabla
de multiplicación distinta (tabla 4.3). Confirmando la falta de correspondencia entre el grupo
representado por (1, i, −1, −i) o por las matrices (1, A, B, C) con el vierergruppe, notemos que
aunque el vierergruppe es abeliano, no es cı́clico. El grupo cı́clico C4 y el vierergruppe no son
isomórficos.
www.elsolucionario.net
de referencia, esencialmente la misma matriz puede tomar una infinidad de diferentes formas.
Ası́ mismo, nuestras representaciones de grupo puede ser puesta por una infinidad de formas
diferentes utilizando una transformación unitaria. Pero, cada representación es isomórfica a
la original. Se puede probar que la traza de cada elemento (cada matriz de nuestra represen-
tación) es invariante ante transformaciones unitarias. Es por esto, que la traza (reetiquetado
caracter) asume un rol de alguna importancia en la teorı́a de grupo, en particular en la apli-
cación a la Fı́sica del estado sólido. Claramente, todos los miembros de una clase dada (en
una representación dada) tienen el mismo caracter. Elementos de clases diferentes pueden
tener el mismo caracter pero elementos con distintos caracteres no pueden estar en la misma
clase.
El concepto de clase es importante (1) por la traza o caracter y (2) porque el número de
representaciones no equivalentes irreducibles de un grupo de igual número de clases.
xhi , i = 1, 2, 3 . . . y hi x , i = 1, 2, 3, . . .
son llamados cosetos, el coseto izquierdo y derecho del subgrupo H con respecto a x, respecti-
vamente. Puede ser demostrado (suponiendo lo contrario y probando una contradicción) que
www.elsolucionario.net
G = H + x1 H + x2 H + · · · .
Entonces el orden de un subgrupo es un divisor del orden del grupo. Es este resultado es el
que hace significativo el concepto de coseto. En la próxima sección el grupo de seis elementos
D3 (de orden 6) tiene subgrupos de orden 1, 2 y 3. D3 no puede (y no tiene) subgrupos de
orden 4 o 5.
La transformación de similaridad de un subgrupo H por un elemento fijo x que no per-
tenece a H, xHx−1 produce un subgrupo. Si este nuevo grupo es idéntico a H para todo
x,
xHx−1 = H ,
entonces H es llamado un subgrupo invariante, normal o auto conjugado. Tales subgrupos
están involucrados en el análisis de múltiples atómicos, espectros nucleares y en las partı́culas
discutidas en la sección 4.2. Todos los subgrupos de un grupo conmutativo (abeliano) son
www.elsolucionario.net
automáticamente invariantes.
10
Aquı́ excluimos deliberadamente reflexiones e inversiones. Ellas deben ser introducidas para desarrollar
el conjunto completo de 32 grupos puntuales.
www.elsolucionario.net
Nuestro sistema llega a ser más interesante en tres dimensiones. Ahora imaginemos una
molécula (o parte de un cristal) con átomos de elemento X en ±a en el eje x, átomos de
elemento Y en ±b en el eje y, y átomos de elementos Z en ±c en el eje z como muestra
la figura (4.7). Claramente, cada eje es ahora un doble eje de simetrı́a. Usando Rx (π) para
designar una rotación en π radianes respecto al eje x, podemos establecer una representación
matricial de las rotaciones como en la sección 3.3:
c y
b
−a a x
−b
www.elsolucionario.net
−c
1 0 0 −1 0 0
Rx (π) = 0 −1 0 Ry (π) = 0 1 0
0 0 −1 0 0 −1
(4.131)
−1 0 0 1 0 0
Rz (π) = 0 −1 0 1= 0 1 0
0 0 1 0 0 1
Estos cuatro elementos [1, Rx (π), Ry (π), Rz (π)] forman un grupo abeliano con la tabla de
multiplicación mostrada en la tabla 4.4.
Los productos mostrados en la tabla 4.4 se pueden obtener de dos diferentes maneras: (1)
Podemos analizar las operaciones sobre ellos mismos, una rotación en π respecto del eje x
seguida de una rotación en π respecto al eje y es equivalente a una rotación en π respecto
al eje z: Ry (π)Rx (π) = Rz (π). (2) Alternativamente, una vez que la representación matricial
es establecida, podemos obtener los productos por multiplicación matricial. Esto es donde se
muestra la potencia de las matemáticas cuando el sistema es demasiado complejo para una
interpretación fı́sica directa.
Fácilmente podemos darnos cuenta que este grupo es el vierergruppe. También, ellas son
obviamente reducibles, siendo diagonal. Los subgrupos son (1, Rx ), (1, Ry ) y (1, Rz ). Ellos
son invariantes. Debemos notar que una rotación en π respecto al eje y y una rotación en π
respecto al eje z es equivalente a un rotación en π respecto al eje x: Rz (π)Ry (π) = Rx (π). En
www.elsolucionario.net
www.elsolucionario.net
y
b (0,1)
D E
+√ 3 − 1 −√ 3 − 1
, ,
2 2 c a 2 2
C
Figura 4.8: Operaciones de simetrı́a en un triángulo equilátero.
11
Un grupo de simetrı́a es un grupo de operaciones que simetrı́a-preservantes, tales como, rotaciones,
reflexiones e inversiones. Un grupo simétrico es el grupo de las permutaciones de n objetos distintos de orden
n!.
www.elsolucionario.net
El eje z es un eje de simetrı́a triple. (1, A, B) forman un grupo cı́clico, un subgrupo del grupo
completo de seis elementos que forman.
En el plano xy hay tres ejes de simetrı́a adicionales, cada átomo (vértice) y el centro
geométrico definen un eje. Cada uno de éstos son un eje de simetrı́a doble. Éstas rotaciones
pueden ser descritas más fácilmente dentro de nuestro esquema bidimensional introduciendo
reflexiones. La rotación en π respecto el eje C o al eje y, lo que significa el intercambio de los
www.elsolucionario.net
átomos a y c, es sólo una reflexión de el eje x:
−1 0
C = RC (π) = . (4.133)
0 1
b
(B) c (C) c
eje D 4π
rotación
3 x →−x
x
c a a b b a
Podemos reemplazar la rotación respecto al eje D por una rotación en 4π/3 (respecto a
nuestro eje z) seguido por una reflexión del eje x (x → −x) (figura 4.9):
D = RD (π) = CB
√
−1 0 −1/2
√ 3/2
=
0 1 − 3/2 −1/2 (4.134)
√
1/2
√ − 3/2
= .
− 3/2 −1/2
por una rotación en 2π/3 (A) y luego una reflexión13 del eje x (x → −x):
E = RE (π) = CA
√
−1 0 −1/2
√ − 3/2
=
0 1 3/2 −1/2 (4.135)
√
1/2 3/2
= √ .
3/2 −1/2
1 A B C D E
1 1 A B C D E
A A B 1 D E C
B B 1 A E C D
C C E D 1 B A
D D C E A 1 B
www.elsolucionario.net
E E D C B A 1
Notemos que cada elemento del grupo aparece sólo una vez en cada fila y en cada columna.
También, a partir de la tabla de multiplicación el grupo no es abeliano. Hemos construido
un grupo de seis elementos y una representación en matriz irreducible de 2 × 2. El único otro
grupo distinto de seis elementos es el grupo cı́clico [1, R, R2 , R3 , R4 , R5 ] con
√
cos π/3 − sen π/3 1/2 − 3/2
R= = √ . (4.136)
sen π/3 cos π/3 3/2 1/2
H
H
C
C C H
www.elsolucionario.net
C
H C
H H
H Ru
C
C C H
C C
H
H
Figura 4.10: Rutenoceno, (C5 H5 )2 Ru.
www.elsolucionario.net
www.elsolucionario.net
Parte II
www.elsolucionario.net
Ecuaciones diferenciales ordinarias.
171
www.elsolucionario.net
www.elsolucionario.net
www.elsolucionario.net
Capı́tulo 5
www.elsolucionario.net
5.1. Introducción.
Al estudiar los fenómenos fı́sicos, con frecuencia no es posible hallar de inmediato las
expresiones explı́citas de las magnitudes que caracterizan dichos fenómenos. Sin embargo,
suele ser más fácil establecer la dependencia entre esas magnitudes y sus derivadas o sus
diferenciales. Ası́, obtenemos ecuaciones que contienen las funciones desconocidas, escalares
o vectoriales, bajo el signo de derivadas o de diferenciales.
Las ecuaciones en las cuales la función desconocida, escalar o vectorial, se encuentra bajo
el signo de derivada o de diferencial, se llaman ecuaciones diferenciales. Veamos algunos
ejemplos de ecuaciones diferenciales:
dx
1) = −kx es la ecuación de la desintegración radiactiva. (k es la constante de desinte-
dt
gración; x es la cantidad de sustancia no desintegrada en el tiempo t. La velocidad de
dx
desintegración es proporcional a la cantidad de sustancia que se desintegra).
dt
d2~r
~ d~r
2) m 2 = F t, ~r, es la ecuación del movimiento de un punto de masa m, bajo la
dt dt
influencia de una fuerza F~ dependiente del tiempo, de la posición, ~r, y de su velocidad
d~r
. La fuerza es igual al producto de la masa por la aceleración.
dt
∂2u ∂2u ∂2u
3) + + = −4πρ(x, y, z) es la ecuación de Poisson, la cual satisface el potencial
∂x2 ∂y 2 ∂z 2
electroestático u(x, y, z) en presencia de la densidad de carga ρ(x, y, z).
Si se indican los métodos para hallar las funciones incógnitas, determinadas por las ecua-
ciones diferenciales, se habrá hallado ası́ la dependencia entre las magnitudes indicadas. La
1
Este capı́tulo está basado en el primer capı́tulo del libro: Ecuaciones diferenciales y cálculo variacional
de L. Elsgoltz, editorial MIR
173
www.elsolucionario.net
dx
= −kx , (5.1)
dt
www.elsolucionario.net
tiene la solución
x(t) = ce−kt , (5.2)
donde c es una constante arbitraria.
Es evidente que la ecuación diferencial (5.1) aún no determina por completo la ley de
desintegración x = x(t). Para su completa determinación hay que conocer la cantidad de
sustancia x0 en un momento inicial t0 . Si x0 es conocida, entonces tomando en cuenta la
condición x(t0 ) = x0 , de (5.2) hallamos la ley de desintegración radiactiva:
x(t) = x0 e−k(t−t0 ) .
y su velocidad inicial
Obsérvese que la ecuación vectorial (5.3) de segundo orden puede sustituirse por un sistema
equivalente de dos ecuaciones vectoriales de primer orden, si consideramos la velocidad ~v
como una segunda función vectorial desconocida:
d~r d~v
= ~v , m = F~ (t, ~r, ~v ) . (5.6)
dt dt
Cada ecuación vectorial en el espacio tridimensional puede ser sustituida, proyectando sobre
los ejes de coordenadas, por tres ecuaciones escalares. Por lo tanto, la ecuación (5.3) es
equivalente a un sistema de tres ecuaciones escalares de segundo orden, y el sistema (5.6), a
un sistema de seis ecuaciones escalares de primer orden.
Finalmente, podemos sustituir una ecuación vectorial (5.3) de segundo orden en el espacio
tridimensional por una ecuación vectorial de primer orden en el espacio de seis dimensiones
cuyas coordenadas son las tres componentes del vector posición rx , ry y rz , más las tres
componentes del vector velocidad vx , vy y vz . Usualmente este espacio es llamado espacio de
~
fase. El vector R(t) en dicho espacio tiene coordenadas (rx , ry , rz , vx , vy , vz ). En esta notación
el sistema (5.6) toma la forma:
www.elsolucionario.net
dR~
~
= Φ(t, R(t)) , (5.7)
dt
las proyecciones del vector Φ en el espacio de seis dimensiones son las correspondientes
proyecciones de los segundos miembros del sistema (5.6) en el espacio tridimensional.
Bajo esta interpretación, las condiciones iniciales (5.4) y (5.5) se sustituyen por la condi-
ción
~ 0) = R
R(t ~0 .
~ = R(t)
La solución de la ecuación (5.7) R ~ será una trayectoria en el espacio de fase, en la
que cada uno de sus puntos corresponde a cierto estado instantáneo del sistema.
contiene una constante arbitraria , que puede determinarse si se conoce el valor de y(x0 ) = y0 ;
entonces Z x
y = y0 + f (x0 ) dx0 .
x0
www.elsolucionario.net
Más adelante se mostrará que, bajo algunas limitaciones establecidas sobre la función f (x, y),
la ecuación
dy
= f (x, y) ,
dx
tiene también una solución única, que satisface la condición y(x0 ) = y0 , y su solución general,
es decir, el conjunto de soluciones que contienen, sin excepción, todas las soluciones, depende
de una constante arbitraria.
dy
La ecuación diferencial = f (x, y) establece una dependencia entre las coordenadas de
dx
dy
un punto y el coeficiente angular de la tangente a la gráfica de la solución en ese punto.
dx
dy
Conociendo x e y, se puede calcular . Por consiguiente, la ecuación diferencial de la forma
dx
considerada determina un campo de direcciones (figura 5.1), y el problema de la integración
de la ecuación diferencial se reduce a hallar las llamadas curvas integrales, para las cuales la
dirección de las tangentes a éstas coincide en cada punto con la dirección del campo.
Ejemplo Consideremos la siguiente ecuación
www.elsolucionario.net
y dy y
= .
dx x
En cada punto, diferente del punto (0,0), el
coeficiente angular de la tangente a la curva
integral buscada es igual a la razón xy , o sea,
coincide con el coeficiente angular de la rec-
ta dirigida desde el origen de coordenadas al
mismo punto (x, y). En la figura (5.2) está re-
presentado con flechas el campo de direcciones
0 x determinado por la ecuación estudiada. Evi-
dentemente, en este caso las curvas integrales
serán las rectas y = cx, ya que las direcciones
Figura 5.1: Curvas integrales. de estas rectas coinciden en todas partes con
la dirección del campo.
En muchos problemas, en particular en casi todos los problemas de carácter geométricos,
las variables x e y son equivalentes. Por ello, en dichos problemas, si éstos se reducen a la
resolución de la ecuación diferencial
dy
= f (x, y) , (5.8)
dx
es natural considerar, conjuntamente con (5.8), también
dx 1
= . (5.9)
dy f (x, y)
Si ambas ecuaciones tienen sentido, entonces son equivalentes, ya que si la función y = y(x)
es solución de la ecuación (5.8), la función inversa x = x(y) es solución de (5.9) y, por lo
tanto, ambas ecuaciones poseen curvas integrales comunes.
Si, en cambio, en algunos puntos una de las ecuaciones (5.8) o (5.9) pierde sentido, en-
tonces en esos puntos es natural sustituirla por la otra ecuación.
www.elsolucionario.net
www.elsolucionario.net
5.3. Ecuaciones con variables separables.
Las ecuaciones diferenciales del tipo
se llaman ecuaciones con variables separadas. Consideremos que las funciones f1 y f2 son
continuas.
Supongamos que y(x) es solución de esta ecuación; entonces al sustituir y(x) en la ecuación
(5.10), obtenemos una identidad que, al ser integrada, da
Z Z
f2 (y) dy = f1 (x) dx + c , (5.11)
sentido de que lo hemos reducido a un problema simple del cálculo de integrales indefinidas.
Como el término integral en teorı́a de ecuaciones diferenciales se utiliza frecuentemente en
el sentido Rde integral de la ecuación diferencial, entonces para referirnos a integrales de
funciones, f (x) dx, generalmente se utiliza el término “cuadratura”.
Si hay que obtener la solución particular que satisface la condición y(x0 ) = y0 , ésta
evidentemente se determina por la ecuación
Z y Z x
f2 (y) dy = f1 (x) dx ,
y0 x0
la cual se obtiene de Z y Z x
f2 (y) dy = f1 (x) dx + c ,
y0 x0
www.elsolucionario.net
xdx + ydy = 0 .
en las cuales los coeficientes de las diferenciales se descomponen en factores dependientes sólo
de x o de y, se llaman ecuaciones diferenciales con variables separables, ya que dividiendo
entre ψ1 (y)φ2 (x), éstas se reducen a una ecuación de variables separadas:
φ1 (x) ψ2 (y)
dx = dy ,
φ2 (x) ψ1 (y)
Obsérvese que la división entre ψ1 (y)φ2 (x) puede conducir a la pérdida de soluciones parti-
culares, que reducen a cero el producto ψ1 (y)φ2 (x); si las funciones ψ1 (y) y φ2 (x) pueden ser
discontinuas, es posible la aparición de soluciones superfluas, que reducen a cero el factor
1
.
ψ1 (y)φ2 (x)
www.elsolucionario.net
= kx , k > 0 ,
dt
se diferencia sólo en el signo del segundo miembro de la ecuación anterior, sin embargo,
describe procesos de “reproducción” completamente diferentes, por ejemplo: la variación de
la cantidad de neutrones en las reacciones en nucleares en cadena, o la reproducción de una
colonia de bacterias en condiciones ideales. La solución de esta ecuación que satisface la
condición inicial x(t0 ) = x0 tiene la forma
x = x0 ek(t−t0 ) ,
y, a diferencia de las soluciones anteriores, x(t) no disminuye, sino que crece exponencialmente
con el incremento de t.
dy 1
= +1 .
dx x−y
Haciendo x − y = z, obtenemos
dy dz dz 1
=1− 1− = +1 ;
dx dx dx z
dz 1
=− , zdz = −dx , z 2 = −2x + c , (x − y)2 = −2x + c .
dx z
www.elsolucionario.net
5.4.1. Ecuaciones homogéneas.
Las ecuaciones diferenciales homogéneas de primer orden, que tienen la forma
dy y
=f ,
dx x
pueden reducirse a ecuaciones con variables separables. En efecto, después de la sustitución
y
z = , o bien y = xz, obtenemos
x
dy dz dz dz dx
= x + z , x + z = f (z) , = ,
dx dx dx f (z) − z x
Z
dz R dz
= ln | x | + ln c , x = c e f (z)−z .
f (z) − z
Obsérvese que el segundo miembro de la ecuación homogénea es un función homogénea en
las variables x e y de grado nulo2 de homogeneidad; por eso la ecuación del tipo
M (x, y) dx + N (x, y) dy = 0 ,
será homogénea si M (x, y) y N (x, y) son funciones homogéneas de x e y, del mismo grado
de homogeneidad, puesto que en este caso
dy M (x, y) y
=− =f .
dx N (x, y) x
2
Una función f (u, v) es homogénea de grado n si al multiplicar las variables por λ, la función resultante
es λn veces la función original.
www.elsolucionario.net
dy y y
= + tan .
dx x x
dy dz
Haciendo y = xz, = x + z y sustituyendo en la ecuación inicial, obtenemos
dx dx
dz cos z dz dx
x + z = z + tan z , = ,
dx sen z x
y
ln | sen z | = ln | x | + ln c , sen z = cx sen = cx .
x
www.elsolucionario.net
Las ecuaciones del tipo
dy a1 x + b 1 y + c 1
=f , (5.12)
dx a2 x + b 2 y + c 2
pueden reducirse a ecuaciones homogéneas, si trasladamos el origen de coordenadas al punto
de intersección (x1 , y1 ) de las rectas
a1 x + b 1 y + c 1 = 0 , a2 x + b2 y + c2 = 0 .
o bien !
Y
dY a1 + b 1 X Y
=f Y
=ϕ ,
dX a2 + b 2 X X
que ya es una ecuación homogénea.
Este método no se puede aplicar sólo en el caso en que haya paralelismo entre las rectas
a1 x + b1 y + c1 = 0 y a2 x + b2 y + c2 = 0. Pero en este caso los coeficientes de las coordenadas
a2 b2
son proporcionales: = = k, y la ecuación (5.12) se puede escribir en la forma
a1 b1
dy a1 x + b 1 y + c 1
=f = F (a1 x + b1 y) ,
dx k(a1 x + b1 y) + c2
www.elsolucionario.net
− ln 1 − 2z − z 2 = ln | X | − ln c ,
2 2
2 2
(1 − 2z − z )X = c ,
X 2 − 2XY − Y 2 = c ,
x2 − 2xy − y 2 + 2x + 6y = c1 .
www.elsolucionario.net
Probemos ahora satisfacer la ecuación no homogénea considerando c como función de x, o
sea, realizando en esencia la sustitución de variables
p(x0 ) dx0
R
y = c(x) e− ,
dc − R p(x0 ) dx0 R 0 0
R 0 0
e − c(x)p(x) e− p(x ) dx + p(x)c(x) e− p(x ) dx = f (x) ,
dx
o bien
dc R 0 0
= f (x) e p(x ) dx ,
dx
de donde, integrando, se halla
Z
p(x0 ) dx0
R
c(x) = f (x00 )e dx00 + c1 ,
y, por consiguiente,
Z
p(x0 ) dx0 p(x0 ) dx0 p(x0 ) dx0 p(x0 ) dx0
R R R R
− − −
y = c(x) e = c1 e +e f (x00 )e dx00 . (5.15)
www.elsolucionario.net
La solución de esta ecuación lineal que satisface la condición inicial I(0) = I0 , de acuerdo
con (5.15), tiene la forma
1 t
Z
−R t 0 R 0
t 0
I = e L I0 + U (t )e L dt . (5.16)
L 0
Para una tensión constante U = U0 , obtenemos
U0 U0 − R t
I= + I0 − e L .
R R
Es interesante el caso de tensión alterna sinusoidal: U = A sen ωt. En este caso, según (5.16),
obtenemos
A t
Z
−R t 0 R 0
t 0
I = e L I0 + sen ωt e L dt .
L 0
La integral del segundo miembro se toma fácilmente.
www.elsolucionario.net
dx x
que es una ecuación diferencial lineal de primer orden no homogénea.
La ecuación
dy
+ p(x)y + q(x)y 2 = f (x) ,
dx
llamada ecuación de Riccati, en general no se integra en cuadraturas, pero por sustitución
de variables puede ser transformada en una ecuación de Bernoulli, si se conoce una solución
particular y1 (x) de esta ecuación. Efectivamente, haciendo y = y1 + z, se obtiene
du 2u du 2dx
=− −1 , =− ,
dx x u x
c c(x)
ln | u | = −2 ln | x | + ln c , u= , u= ,
x2 x2
c0 (x) x3
= −1 , c(x) = − + c1 ,
x2 3
c1 x 1 c1 x 1 c1 x
u= 2 − , = 2− , 1 = 2 − ,
x 3 z x 3 y−x x 3
1 3x2
y= + .
x c2 − x3
www.elsolucionario.net
Puede suceder que el primer miembro de la ecuación diferencial
du(x, y) = 0 .
M (x, y) dx + N (x, y) dy ,
www.elsolucionario.net
sea un diferencial total de cierta función u(x, y), como se sabe, es necesario y suficiente que
∂M (x, y) ∂N (x, y)
≡ . (5.21)
∂y ∂x
Si esta condición, señalada inicialmente por Euler, se cumple, entonces (5.18) se integra
fácilmente. En efecto
du = M dx + N dy .
Por otra parte,
∂u ∂u
du = dx + dy .
∂x ∂y
Por consiguiente,
∂u ∂u
= M (x, y) ; = N (x, y) ,
∂x ∂y
de donde Z
u(x, y) = M (x, y) dx + c(y) .
www.elsolucionario.net
Al calcular la integral de la expresión anterior, la magnitud y se considera constante; por eso,
c(y) es una función arbitraria de y.
Para determinar la función c(y), derivamos la función hallada u(x, y) respecto a y y, como
∂u
= N (x, y), obtenemos
∂y
Z
∂
M (x, y) dx + c0 (y) = N (x, y) .
∂y
De esta ecuación se determina c0 (y), e integrando se halla c(y).
Se puede determinar aún más fácilmente la función u(x, y) por su diferencial total du =
M (x, y) dx+N (x, y) dy, tomando la integral curvilı́nea de M (x, y) dx+N (x, y) dy desde cierto
punto fijo (x0 , y0 ) hasta un punto con coordenadas variables (x, y), por cualquier camino:
Z (x,y)
u(x, y) = M (x, y) dx + N (x, y) dy .
(x0 ,y0 )
Con frecuencia, es cómodo tomar una lı́nea quebrada, compuesta por dos segmentos paralelos
a los ejes de coordenadas (figura 5.3); en este caso
Z (x,y) Z (x,y0 ) Z (x,y)
M dx + N dy = M dx + N dy ,
(x0 ,y0 ) (x0 ,y0 ) (x,y0 )
(x + y + 1) dx + (x − y 2 + 3) dy = 0 .
www.elsolucionario.net
y ( x ,y ) y ( x0,y ) ( x ,y )
El primer miembro de la ecuación es la diferencial total de cierta función u(x, y), puesto que
∂(x + y + 1) ∂(x − y 2 + 3)
www.elsolucionario.net
≡ ,
∂y ∂x
∂u x2
=x+y+1 u= + xy + x + c(y) ,
∂x 2
∂u
= x + c0 (y) , x + c0 (y) = x − y 2 + 3 ,
∂y
y3
c0 (y) = −y 2 + 3 , c(y) = − + 3y + c1 .
3
Por lo tanto, la integral general tiene la forma
3x2 + 6xy + 6x − 2y 3 + 18y = c2 (5.22)
Se puede utilizar también el otro método de de-
y terminación de la función u(x, y):
( x ,y ) Z (x,y)
u(x, y) = (x + y + 1) dx + (x − y 2 + 3) dy .
(x0 ,y0 )
x2 y3
u(x, y) = + x + xy − + 3y ,
2 3
y la integral general tiene la forma
x2 y3
+ x + xy − + 3y = c ,
2 3
o bien como en (5.22).
www.elsolucionario.net
no es una diferencial total, resulta fácil escoger una función µ(x, y), tal que el producto de
está y el miembro izquierdo de (5.18), se transforma en una diferencial total:
du = µM dx + µN dy .
Esta función µ se llama factor integrante. Obsérvese que la multiplicación por el factor inte-
grante µ(x, y) puede conducir a que aparezcan soluciones particulares superfluas, que reducen
este factor a cero.
Ejemplo Consideremos la siguiente ecuación
x dx + y dy + (x2 + y 2 )x2 dx = 0 .
www.elsolucionario.net
es fácil comprobar que después de multiplicar por el factor µ = 1/(x2 +y 2 ), el primer miembro
se transforma en diferencial total. Efectivamente, luego del producto por µ = 1/(x2 + y 2 ),
obtenemos
x dx + y dy
+ x2 dx = 0 ,
x2 + y 2
o integrando:
1 x3
ln(x2 + y 2 ) + = ln c1 .
2 3
multiplicando por 2 y potenciando, tendremos
3 /3
(x2 + y 2 ) e2x =c.
Es claro que no siempre el factor integrante se escoge tan fácilmente. En general, para
hallar dicho factor es necesario escoger por lo menos una solución particular no idénticamente
nula de la ecuación en derivadas parciales
∂µM ∂µN
= ,
∂y ∂x
o, en forma desarrollada,
∂µ ∂M ∂µ ∂N
M +µ = N +µ ,
∂y ∂y ∂x ∂x
la cual, después de dividir entre µ y de cambiar de miembro algunos términos, se reduce a
∂ ln µ ∂ ln µ ∂N ∂M
M− N= − . (5.23)
∂y ∂x ∂x ∂y
En general, la integración de esta ecuación en derivadas parciales no es un problema más
simple que la integración de la ecuación inicial. Sin embargo, a veces la elección de la solución
particular de (5.23) no presenta dificultades.
www.elsolucionario.net
www.elsolucionario.net
∂M ∂N
!
Z
∂y
− ∂x
µ = c exp dx . (5.24)
N
Se puede considerar c = 1, ya que es suficiente tener sólo un factor integrante.
∂M
∂y
− ∂N
∂x
Si es función sólo de x, entonces existe un factor integrante que sólo depende
N
de x, y es igual a (5.24). En caso contrario, no existe ningún factor de la forma µ(x).
La condición de existencia de un factor integrante que depende sólo de x se cumple, por
ejemplo, para la ecuación lineal
dy
+ p(x)y = f (x) , o bien [p(x)y − f (x)] dx + dy = 0 .
dx
∂M ∂N
∂y
− ∂x
R
Efectivamente, = p(x) y, por lo tanto, µ = e p(x) dx . De manera análoga se pueden
N
hallar las condiciones de existencia de factores integrantes de la forma
2 2 x
µ(y) , µ(x ± y) , µ(x ± y ) , µ(xy) , µ etc.
y
x dx + y dy + x dy − y dx = 0 , (5.25)
o bien Z
1
µ = c exp ϕ(z) dz , (5.26)
2
donde
∂N ∂M
−
∂x ∂y
ϕ(z) = .
My − Nx
Para la existencia de un factor integrante del tipo dado, es necesario (y en caso que ϕ(z) sea
continua, suficiente) que ϕ sea función sólo de x2 + y 2 . En nuestro caso,
∂N ∂M
−
∂x ∂y 2
=− 2 ;
My − Nx x + y2
por lo tanto, el factor integrante µ = µ(x2 + y 2 ) existe y es igual a (5.26). Para c = 1,
obtenemos: Z
dz 1 1
www.elsolucionario.net
µ = exp − = = 2 .
z z x + y2
Multiplicando la ecuación (5.25) por el µ que determinamos, la reducimos a la forma
x dx + y dy x dy − y dx
+ =0,
x2 + y 2 x2 + y 2
o bien
1 y
d(x2 + y 2 ) d 1 y
2 + xy 2 = 0 , d ln(x2 + y 2 ) + d arctan = 0 .
x2 + y 2 2 x
1+
x
Integrando, obtenemos
p y p y
ln x2 + y 2 = − arctan + ln c , x2 + y2 = c exp − arctan ,
x x
o bien en coordenadas polares ρ = c e−ϕ , que es una familia de espirales logarı́tmicas.
5.7. Teoremas.
Teorema 5.1 Existencia y unicidad de la solución.
Si en la ecuación
dy
= f (x, y) , (5.27)
dx
la función f (x, y) es continua en el rectángulo D:
x0 − a ≤ x ≤ x0 + a , y 0 − b ≤ y ≤ y0 + b , (5.28)
| f (x, y1 ) − f (x, y2 ) | ≤ N | y1 − y2 | ,
www.elsolucionario.net
www.elsolucionario.net
ecuación considerada que satisface la condición y(x0 ) = y0 depende en forma continua de µ.
dy
= f (x, y) ,
dx
que satisface la condición inicial y(x0 ) = y0 , tendrá derivadas continuas hasta k + 1-ésimo
orden, inclusive en cierto entorno del punto (x0 , y0 ).
www.elsolucionario.net
Capı́tulo 6
www.elsolucionario.net
6.1. Teorema de existencia y unicidad para la ecuación
diferencial de n-ésimo orden.
Las ecuaciones diferenciales de n-ésimo orden tienen la forma
F (x, y, y 0 , . . . , y (n) ) = 0 .
El teorema de existencia y unicidad para ecuación de n-ésimo orden se puede obtener fácil-
mente, llevándola a un sistema de ecuaciones.
(n−1)
Teorema 6.1 Si en un entorno de las condiciones iniciales (x0 , y0 , y00 , . . . , y0 ) la función
f es continua en todos sus argumentos y satisface la condición de Lipschitz respecto a todos
los argumentos a partir del segundo, existe una solución única de la ecuación diferencial de
n-ésimo orden y (n) = f (x, y, y 0 , ..., y (n−1) ) que satisface las condiciones
(n−1)
y(x0 ) = y0 , y 0 (x0 ) = y00 , y 00 (x0 ) = y000 , ..., y (n−1) (x0 ) = y0 .
193
www.elsolucionario.net
satisface, en cierta región de variación de sus argumentos, las condiciones del teorema de exis-
tencia y unicidad, entonces la solución general de la ecuación (6.1) depende de n parámetros,
en calidad de los cuales se pueden tomar, por ejemplo, las condiciones iniciales de la función
(n−1)
buscada y de sus derivadas y0 , y00 , y000 ,. . . , y0 .
www.elsolucionario.net
condiciones del teorema de existencia y unicidad.
1. La ecuación no contiene la función buscada y sus derivadas hasta el orden k−1 inclusive:
d5 y 1 d4 y
− =0.
dx5 x dx4
www.elsolucionario.net
d4 y dp 1
Haciendo 4
= p obtenemos − p = 0; separando variables e integrando, tendre-
dx dx x
d4 y
mos: ln | p | = ln | x | + ln c, o bien p = cx, 4 = cx, de donde
dx
y = c1 x5 + c2 x3 + c3 x2 + c4 x + c5 .
Ejemplo Hallar la trayectoria de un cuerpo que cae sin velocidad inicial en la atmósfera,
considerando la resistencia del aire proporcional al cuadrado de la velocidad.
La ecuación de movimiento tiene la forma
2
d2 s
ds
m 2 = mg − k ,
dt dt
donde s es el espacio recorrido por el cuerpo; m, la masa del mismo; t, el tiempo. Para
ds
t = 0, se tiene s = 0 y = 0.
dt
La ecuación no contiene explı́citamente a la función incógnita s; por lo tanto, se puede
ds
www.elsolucionario.net
reducir el orden de la misma considerando = v. Entonces la ecuación de movimiento
dt
toma la forma
dv
m = mg − kv 2 .
dt
Separando variables e integrando, se obtiene
Z v
m dv dv 1 kv
2
= dt ; t = m 2
= √ Arctanh √ ,
mg − kv 0 mg − kv k g g
√
g √
de donde v = tanh(k g t); multiplicando por dt e integrando nuevamente, hallamos
k
la trayectoria del movimiento:
1 √
s= 2
ln cosh(k g t) .
k
y análogamente para las derivadas de orden superior. Además, es evidente que la deri-
dk y
vada se expresa mediante las derivadas de p respecto a y de orden no superior a
dxk
k − 1, lo cual precisamente conduce a la disminución del orden en una unidad.
En particular, si la ecuación de segundo orden no contiene a la variable independiente,
entonces la sustitución de variables señalada conduce a una ecuación de primer orden.
www.elsolucionario.net
Z x
dx p 1 dx0
= ±a 2(cos x − cos x0 ) , t=± √ √ .
dt a 2 x0 cos x0 − cos x0
La integral del segundo miembro no se resuelve en funciones elementales, pero se reduce
fácilmente a funciones elı́pticas.
Φ(x, y, y 0 , . . . , y (n−1) ) = c
yy 00 + (y 0 )2 = 0 .
yy 00 − (y 0 )2 = 0 . (6.6)
d y0
1 00 0 2 2
Multiplicando por el factor µ = 2 , se obtiene [yy −(y ) ]/y = 0, o bien = 0,
y dx y
y0 d
de donde = c1 , ó ln | y | = c1 . Por lo tanto, ln | y | = c1 x + ln c2 , c2 > 0, de donde
y dx
y = c2 ec1 x , c2 6= 0.
Observación: Al multiplicar por el factor µ(x, y, y 0 , . . . , y (n−1) ) se pueden introducir
soluciones superfluas, que reducen dicho factor a cero. Si µ, es discontinuo, pueden
también perderse soluciones. En el ejemplo anterior, al multiplicar por µ = 1/y 2 se
www.elsolucionario.net
perdió la solución y = 0; sin embargo, puede incluirse en la solución obtenida, si se
considera que c2 puede tomar el valor 0.
f (x, z, z 0 , . . . , z (n−1) ) = 0 .
yy 00 − (y 0 )2 = 6xy 2 .
R
Haciendo y = e z dx , obtenemos la ecuación para z, z 0 = 6x, con solución z = 3x2 + c1 .
2 3
R
Recuperando la función original y = e (3x +c1 ) dx , o bien y = c2 e(x +c1 x) .
www.elsolucionario.net
1.
F (x, y 00 ) = 0 . (6.8)
En esta ecuación se puede disminuir el orden mediante la sustitución y 0 = p, y reducirla
dp
a la ecuación F x, dx = 0.
La ecuación (6.8) se puede resolver con respecto al segundo argumento, y 00 = f (x),
e integrar dos veces, o introducir un parámetro y sustituir la ecuación (6.8) por su
representación paramétrica
d2 y
= ϕ(t) , x = ψ(t) ,
dx2
de donde Z
dy = y dx = ϕ(t)ψ (t) dt , y = ϕ(t)ψ 0 (t) dt + c1 ,
0 00 0 0
Z Z
0
dy = y dx , y = ϕ(t)ψ (t) dt + c1 ψ 0 (t0 ) dt0 + c2 .
0
2.
F (y 0 , y 00 ) = 0 , (6.9)
la ecuación (6.9) en forma paramétrica:
yx0 = ϕ(t) , 00
yxx = ψ(t) ,
de donde
dy 0 ϕ0 (t) dt ϕ0 (t) dt
Z
dx = 00 = , x= + c1 ,
y ψ(t) ψ(t)
luego de lo cual y se determina por cuadratura:
ϕ0 (t) ϕ(t)ϕ0 (t)
Z
0
dy = y dx = ϕ(t) dt , y= dt + c2 .
ψ(t) ψ(t)
www.elsolucionario.net
3.
F (y, y 00 ) = 0 . (6.10)
Se puede reducir el orden haciendo
dy d2 y dp dy dp
=p = = p .
dx dx2 dy dx dy
Si la ecuación (6.10) es posible resolver fácilmente con respecto al segundo argumen-
to, y 00 = f (y), entonces, multiplicando esta ecuación por la igualdad 2y 0 dx = 2 dy,
obtenemos d(y 0 )2 = 2f (y) dy, de donde
s Z
dy dy
= ± 2 f (y) dy + c1 , ±q R = dx ,
dx 2 f (y) dy + c 1
Z
dy
x + c2 = ± q R
2 f (y) dy + c1
www.elsolucionario.net
La ecuación (6.10) se puede sustituir por su representación paramétrica y = ϕ(t),
y 00 = ψ(t); entonces de dy 0 = y 00 dx y de dy = y 0 dx se obtiene y 0 dy 0 = y 00 dy, o bien
1
d(y 0 )2 = ψ(t)ϕ0 (t) dt ,
2
Z
(y ) = 2 ψ(t)ϕ0 (t) dt + c1 ,
0 2
s Z
y0 = ± 2 ψ(t)ϕ0 (t) dt + c1 ,
y 00 = 2y 3 , y(0) = 1 , y 0 (0) = 1 .
Multiplicando ambos miembros de esta ecuación por 2y 0 dx, se obtiene d(y 0 )2 = 4y 3 dy,
de donde (y 0 )2 = y 4 + c1 . Teniendo en cuenta las condiciones iniciales, se halla que
dy 1 1
c1 = 0 e y 0 = y 2 . Por lo tanto, 2 = dx, − = x + c2 , c2 = −1, y = .
y y 1−x
www.elsolucionario.net
www.elsolucionario.net
i=1
dk y dy d2 y dk y
La derivada de cualquier orden es función lineal homogénea de , , . . . , y, por
dxk dt dt2 dtk
lo tanto, al sustituir en la ecuación (6.12) su linealidad y su homogeneidad se conservan.
La linealidad y la homogeneidad se conservan también al efectuarse una transformación
lineal homogénea de la función desconocida: y(x) = α(x)z(x). En efecto, por la fórmula de
derivada de un producto,
k(k − 1) 00
y (k) = α(x)z (k) + kα0 (x)z (k−1) + α (x)z (k−2) + . . . + α(k) (x)z ,
2!
www.elsolucionario.net
www.elsolucionario.net
Llamaremos a L[y] operador diferencial lineal.
El operador diferencial lineal posee las dos propiedades fundamentales siguientes:
1. Un factor constante puede sacarse del sı́mbolo del operador:
L[cy] ≡ cL[y] .
En efecto,
(cy)(n) + p1 (x)(cy)(n−1) + . . . + pn−1 (x)(cy)0 + pn (x)(cy)
= c[y (n) + p1 (x)y (n−1) + . . . + pn−1 (x)y 0 + pn (x)y] .
Teorema 6.2 Si y1 es solución de la ecuación lineal homogénea L[y] = 0, entonces cy1 , donde
c es una constante arbitraria, también es solución de ésta.
Teorema 6.4 Si la ecuación lineal homogénea L[y] = 0 con coeficientes reales pi (x) tiene
solución compleja y(x) = u(x) + iv(x), entonces la parte real u(x) de esta solución y su parte
imaginaria v(x) son, por separado, soluciones de dicha ecuación homogénea.
www.elsolucionario.net
a ≤ x ≤ b, si existen constantes α1 , α2 , . . . , αn , en dicho intervalo tal que
α1 y1 + α2 y2 + . . . + αn yn ≡ 0 , (6.14)
con, por lo menos, un αi 6= 0. Si la identidad (6.14) se verifica sólo para el caso en que
α1 = α2 =, . . . , = αn = 0, las funciones y1 , y2 , . . . , yn se llaman linealmente independientes
en el intervalo a ≤ x ≤ b.
Teorema 6.7 La combinación lineal ni=1 ci yi con coeficientes constantes arbitrarios de n so-
P
luciones particulares linealmente independientes, yi (i = 1, 2, . . . , n), en el intervalo a ≤ x ≤ b
es solución general, para a ≤ x ≤ b, de la ecuación lineal homogénea
y (n) + p1 (x)y (n−1) + . . . + pn−1 (x)y 0 + pn (x)y = 0 , (6.15)
con coeficientes pi (x) continuos en dicho intervalo (i = 1, 2, . . . , n).
Corolario del teorema anterior. El número máximo de soluciones linealmente indepen-
dientes de una ecuación lineal homogénea es igual a su orden.
Observación: Se llama sistema fundamental de soluciones de una ecuación lineal homogénea
de n-ésimo orden al conjunto de soluciones particulares cualquieras linealmente independien-
te. Para cada ecuación lineal homogénea (6.15) existe un sistema fundamental de soluciones.
Para la construcción de un sistema fundamental de soluciones, se dan n2 cifras arbitrarias
(k)
yi (x0 ) {i = 1, 2, . . . , n; k = 0, 1, . . . , n − 1} ,
www.elsolucionario.net
sometiendo su elección exclusivamente a la condición
y1 (x0 ) y 2 (x 0 ) . . . y n (x 0 )
0 0 0
y1 (x0 ) y2 (x0 ) ... yn (x0 )
00
y1 (x0 ) y200 (x0 ) ... yn00 (x0 ) 6= 0 ,
.. .. ..
. . .
(n−1) (n−1) (n−1)
y 1 (x0 ) y2 (x0 ) . . . yn (x0 )
donde x0 es un punto cualquiera del intervalo a ≤ x ≤ b. Entonces las soluciones yi (x),
(k)
determinadas por los valores iniciales yi (x0 ) con {i = 1, 2, . . . , n; k = 0, 1, . . . , n − 1},
forman un sistema fundamental, puesto que su wronskiano W (x) en el punto x = x0 es
diferente de cero y, por lo tanto, en virtud del teorema 6.5 y del teorema 6.6, las soluciones
y1 , y2 , . . . , yn son linealmente independientes.
www.elsolucionario.net
6.3.5. Fórmulas de Ostrogradski-Liouville.
Lema. Dos ecuaciones de la forma
y, por consiguiente, se puede plantear el problema de hallar la ecuación (6.18) que posea el
sistema fundamental de soluciones
y 1 , y 2 , . . . , yn .
Como cualquier solución y de la ecuación buscada (6.18) debe ser linealmente dependiente
de las soluciones y1 , y2 , . . . ,yn , entonces el wronskiano W [y1 , y2 , . . . , yn ] = 0. Escribamos esta
ecuación en forma desarrollada
y1 y 2 . . . y n y
0 0 0 0
y1 y2 . . . y n y
00
y1 y200 . . . yn00 y 00 = 0 ,
.. .. .. ..
. . . .
(n) (n) (n)
y 1 y2 . . . yn y (n)
www.elsolucionario.net
La ecuación obtenida (6.20) es la ecuación lineal homogénea buscada, que posee el sistema da-
do de soluciones y1 , y2 ,. . . ,yn . Dividiendo ambos miembros de la ecuación entre el wronskiano
de la derivada de mayor grado, diferente de cero, la reducimos a la forma (6.18).
De aquı́ se deduce que, en particular,
y1 y2 ... yn
0
y1 y20 ... yn0
. . ..
. ..
. .
www.elsolucionario.net
(n−2) (n−2) (n−2)
y 1
(n) y2 (n) . . . yn (n)
y y2 . . . yn
1
p1 (x) = − .
W [y1 , y2 , . . . , yn ]
Obsérvese que el determinante
y1 y2 ... yn
0
y20 yn0
y1 ...
.. .. ..
. . . , (6.21)
(n−2) (n−2) (n−2)
y 1
(n) y2 (n) . . . yn
(n)
y y2 . . . yn
1
es igual a la suma sobre i desde 1 hasta n de determinantes que se diferencian del wronskiano
en que se han derivado los elementos de la i-ésima fila, y las filas restantes se dejan sin
variación. En esta suma solamente el último determinante, para i = n, que coincide con el
determinante (6.21) puede ser diferente de cero. Los restantes son iguales a cero, ya que sus
filas i e i + 1 coinciden.
W0
Por lo tanto, p1 (x) = , de donde, multiplicando por dx e integrando, se obtiene
W
Z R
log | W | = − p1 (x) dx + log c , W = c e− p1 (x) dx ,
www.elsolucionario.net
o bien Rx
p1 (x0 ) dx0
W = c e− xo . (6.22)
Para x = xo se obtiene c = W (xo ), de donde
Rx
p1 (x0 ) dx0
W = W (xo ) e− xo . (6.23)
www.elsolucionario.net
o bien R
y1 y 0 − yy10 = c1 e− p1 (x) dx
.
Para integrar esta ecuación lineal de primer orden, lo más fácil es aplicar el método del factor
integrante.
1
Multiplicando por µ = 2 , se obtiene
y1
d y c1 R
= 2 e− p1 (x) dx ,
dx y1 y1
de donde
p1 (x0 ) dx0
R
c1 e−
Z
y
= dx + c2 ,
y1 y12
o bien
p1 (x0 ) dx0
R
e−
Z
y = c2 y1 + c1 y1 dx .
y12
todos los coeficientes ai son constantes, entonces sus soluciones particulares pueden ser halla-
das en la forma y = ekx , donde k es una constante. En efecto sustituyendo en (6.25) y = ekx
e y (p) = k p ekx , con p = 1, 2, · · · , n, tendremos:
Dividiendo entre el factor ekx , diferente de cero, se obtiene la llamada ecuación caracterı́stica
a0 k n + a1 k n−1 + . . . + an = 0 . (6.26)
Esta ecuación de n-ésimo grado determina los valores de k para los cuales y = ekx es solu-
ción de la ecuación lineal homogénea inicial con coeficientes constantes (6.25). Si todas las
raı́ces k1 , k2 , . . . , kn de la ecuación caracterı́stica son diferentes, entonces de esta forma se
hallan n soluciones linealmente independientes ek1 x , ek2 x , . . . , ekn x de la ecuación (6.25). Por
consiguiente,
y = c1 ek1 x + c2 ek2 x + . . . + cn ekn x ,
donde ci son constantes arbitrarias, es solución general de la ecuación inicial (6.25). Este
método de integración de las ecuaciones lineales con coeficientes constantes fue aplicado por
primera vez por Euler.
Ejemplo Consideremos la ecuación
y 00 − 3y 0 + 2y = 0 .
www.elsolucionario.net
la ecuación caracterı́stica tiene la forma k 2 − 3k + 2 = 0; sus raı́ces son k1 = 1, k2 = 2. Por
lo tanto, la solución general de la ecuación inicial tiene la forma y = c1 ex + c2 e2x .
k1 = α + iβ y k2 = α − iβ ,
pueden ser sustituidas por dos soluciones reales: por las partes reales e imaginarias de una
de las soluciones.
e(α±iβ)x = eαx (cos βx ± i sen βx) ,
De esta manera, al par de raı́ces complejas conjugadas k1,2 = α ± iβ le corresponden dos
soluciones reales: eαx cos βx y eαx sen βx.
www.elsolucionario.net
y, separando las partes real e imaginaria, obtenemos 2α soluciones reales:
epx cos qx , xepx cos qx , x2 epx cos qx , . . . , xα−1 epx cos qx ,
(6.27)
epx sen qx , xepx sen qx , x2 epx sen qx , . . . , xα−1 epx sen qx .
Tomando las partes reales e imaginarias de las soluciones correspondientes a la raı́z conjugada
p − iq de la ecuación caracterı́stica, no se obtienen nuevas soluciones linealmente indepen-
dientes. De esta manera, al par de raı́ces complejas conjugadas p ± iq de multiplicidad α le
corresponde 2α soluciones reales linealmente independientes (6.27).
donde todas las βi son constantes, y al sustituir en la ecuación (6.28) los factores e−kt se
simplifican con los factores xk = ekt .
La validez de la igualdad (6.29) puede ser demostrada por el método de inducción. Por
lo tanto, los productos
dk y dy d2 y dk y
xk = β1 + β2 + . . . + βk ,
dxk dt dt2 dtk
que entran en la forma lineal con coeficientes constantes en la ecuación de Euler
n
X dk y
an−k xk =0, (6.30)
k=0
dxk
se expresan en forma lineal (y con coeficientes constantes) mediante las derivadas de la función
y respecto a la nueva variable t. De aquı́ se deduce que la ecuación transformada será una
ecuación lineal homogénea con coeficientes constantes:
dn y dn−1 y dy
www.elsolucionario.net
b0 n + b1 n−1 + . . . + bn−1 + bn y = 0 . (6.31)
dt dt dt
En lugar de transformar la ecuación de Euler en una ecuación lineal con coeficientes cons-
tantes, cuyas soluciones particulares tienen la forma y = ekt , se puede buscar directamente
la solución de la ecuación inicial en la forma y = xk , ya que
ekt = xk .
La ecuación obtenida después de simplificar por xk
a0 k(k − 1) . . . (k − n + 1) + a1 k(k − 1) . . . (k − n + 2) + . . . + an = 0 , (6.32)
para la determinación de k, debe coincidir con la ecuación caracterı́stica para la ecuación
transformada (6.31). En consecuencia, a las raı́ces ki de la ecuación (6.32), de multiplicidad
αi , les corresponden las soluciones
eki t , teki t , t2 eki t , . . . , tαi −1 eki t .
de la ecuación transformada, o bien las
xki , xki log(n) , xki log2 (n) , . . . , xki logαi −1 (n) ,
de la ecuación inicial. A las raı́ces complejas conjugadas p ± iq de la ecuación (6.32) de
multiplicidad α le corresponden las soluciones
ept cos qt , tept cos qt , . . . , tα−1 ept cos qt ,
ept sen qt , tept sen qt , . . . , tα−1 ept sen qt ,
de la ecuación trasformada, o las
xp cos(q log x) , xp log x cos(q log x) , . . . , xp logαi −1 x cos(q log x) ,
xp sen(q log x) , xp log x sen(q log x) , . . . , xp logαi −1 x sen(q log x) ,
www.elsolucionario.net
x2 y 00 − xy 0 + y = 0 .
a0 (ax + b)n y (n) + a1 (ax + b)n−1 y (n−1) + . . . + an−1 (ax + b)y 0 + an y = 0 , (6.33)
www.elsolucionario.net
sustitución de la variable independiente (ax+b) = x1 . Por lo tanto, las soluciones particulares
de esta ecuación se pueden buscar en la forma y = (ax + b)k , o transformar la ecuación (6.33)
a una ecuación lineal homogénea con coeficientes constantes, mediante la sustitución de las
variables ax + b = et .
L[y] = f (x) .
L[cy] ≡ cL[y] ,
L[y1 + y2 ] ≡ L[y1 ] + L[y2 ] ,
www.elsolucionario.net
(iii) Si la ecuación L[y] = U (x) + iV (x), donde todos los coeficientes pi (x) y las funciones
U (x) y V (x) son reales, tiene la solución y = u(x) + iv(x), entonces la parte real u(x)
y la parte imaginaria v(x) son respectivamente soluciones de las ecuaciones
y 00 + y = x ,
y = c1 cos x + c2 sen x .
y = c1 cos x + c2 sen x + x .
funciones desconocidas ci (x). Puesto que escogiendo las funciones ci (x) con i = 1, 2, . . . , n
hay que satisfacer solamente una ecuación
www.elsolucionario.net
n
X
c0i (x)yi (x) = 0
i=1
y, por lo tanto,
n
X
0
y = ci (x)yi0 (x) ,
i=1
es decir, que y 0 tiene la misma forma que cuando las ci son constantes. De la misma manera,
en la derivada segunda
n
X n
X
00
y = ci (x)yi00 (x) + c0i (x)yi0 (x) ,
i=1 i=1
exigimos que la segunda suma sea igual a cero, con lo cual se somete ci (x) a la segunda
condición
n
X
c0i (x)yi0 (x) = 0 .
i=1
n
X (k)
c0i (x)yi (x) = 0 para k = 0, 1, 2, . . . , n − 2 , (6.36)
i=1
www.elsolucionario.net
obtenemos
n
X
y= ci (x)yi ,
i=1
n
X
y0 = ci (x)yi0 (x) ,
i=1
Xn
y 00 = ci (x)yi00 (x) ,
i=1 (6.37)
..
.
n
X
(n−1) (n−1)
y = ci (x)yi (x) ,
i=1
Xn n
X
(n) (n−1)
y (n)
= ci (x)yi (x) + c0i (x)yi (x) .
www.elsolucionario.net
i=1 i=1
(n−1)
En la última igualdad no podemos exigir que ni=1 c0i (x)yi
P
(x) = 0, puesto que las funciones
ci (x) ya están sometidas a las n − 1 condiciones (6.36), y hay aún que satisfacer la ecuación
inicial (6.34). Sustituyendo y, y 0 , . . . ,y (n) de (6.37) en la ecuación
www.elsolucionario.net
1
y 00 + y = .
cos x
La solución general de la ecuación homogénea correspondiente es y = c1 cos(x) + c2 sen x.
Variemos c1 y c2 :
y = c1 (x) cos x + c2 (x) sen x .
c1 (x) y c2 (x) se determinan del sistema (6.38):
cambio de variables permite reducir su orden hasta n−k, conservando su linealidad. Obsérvese
que si k = n − 1, el orden de la ecuación se reduce a 1, y la ecuación lineal de primer orden
siempre se puede integrar en cuadraturas.
Análogamente se pueden utilizar k soluciones de la ecuación no homogénea ỹ1 , ỹ2 ,. . . ,ỹk ,
puesto que sus diferencias son ya soluciones de la ecuación homogénea correspondiente. En
efecto,
L[ỹj ] ≡ f (x) , L[ỹp ] ≡ f (x) ;
por lo tanto,
L[ỹj − ỹp ] ≡ L[ỹj ] − L[ỹp ] ≡ f (x) − f (x) ≡ 0 .
son linealmente independientes, entonces el orden de la ecuación L[y] = f (x) puede ser
www.elsolucionario.net
reducido hasta n − (k − 1). Es evidente que las otras diferencias ỹj − ỹk son combinaciones
lineales de las soluciones (6.39):
y, por consiguiente, no pueden ser utilizadas para la reducción ulterior del orden.
En este método se supone conocida la solución K(x, s), que depende de un parámetro, de la
ecuación homogénea correspondiente L[y(x)] = 0, y que satisface las condiciones
será solución particular de la ecuación (6.40), que satisface las condiciones iniciales nulas
En efecto, derivando2 (6.43) y teniendo en cuenta las condiciones (6.41) y (6.42), se obtiene
Z x
0
y (x) = Kx0 (x, s)f (s) ds ,
Zx0x
y 00 (x) = Kx00 (x, s)f (s) ds ,
x0
.. (6.44)
.
Z x
y (n−1) (x) = Kx(n−1) (x, s)f (s) ds ,
Zx0x
y (n) (x) = Kx(n) (x, s)f (s) ds + f (x) .
x0
El subı́ndice x en la función K indican que las derivadas son tomadas respecto a esa variable.
Sustituyendo (6.43) y (6.44) en la ecuación (6.40), obtenemos
www.elsolucionario.net
Z x
L[K(x, s)]f (s) ds + f (x) ≡ f (x) ,
x0
c1 cos as + c2 sen as = 0 ,
−ac1 sen as + ac2 cos as = 1 .
Por lo tanto,
sen as cos as
c1 = − , c2 = − ,
a a
y la solución buscada K(x, s) tiene la forma
1
K(x, s) = sen a(x − s) .
a
2
Debemos de considerar la regla de diferenciación de integrales:
"Z # Z
φ2 (x) φ2 (x)
d ∂F (x, s) dφ1 dφ2
F (x, s) ds = ds + F (φ1 (x), x) − F (φ2 (x), x) .
dx φ1 (x) φ1 (x) ∂x dx dx
www.elsolucionario.net
La solución de la ecuación (6.45) que satisface las condiciones iniciales nulas, según (6.43),
se puede representar en la forma
1 x
Z
y(x) = sen a(x0 − s)f (s) ds .
a x0
www.elsolucionario.net
describe el desplazamiento de cierto sistema, y la función f (t) es la fuerza que actúa en este
sistema; t es el tiempo.
Supongamos primeramente que, para t < s, el sistema se encuentra en estado de reposo, y
que su desplazamiento se efectúa debido a la fuerza fε (t), diferente de cero sólo en el intervalo
s < t < s + ε, y cuyo impulso es igual a 1:
Z s+ε
fε (τ ) dτ = 1 . (6.47)
s
Por ello, es natural llamar a la función K(t, s) función de influencia del impulso instantáneo
en el momento t = s. También se le conoce como la función de Green del sistema.
Dividiendo el intervalo (t0 , t) mediante los puntos si con i = 0, 1, 2, . . . , m en m partes
iguales de longitud ∆s = (t − t0 )/m, representamos la función f (t) en (6.46) como una suma
www.elsolucionario.net
de las funciones fi (t), donde fi (t) es diferente de cero sólo en el i-ésimo intervalo si−1 < t < si .
En éste, fi (t) coincide con la función f (t):
m
X
f (t) = fi (t) .
i=1
www.elsolucionario.net
considerar como función de influencia del impulso instantáneo de intensidad fi (si )∆s. Por
consiguiente,
m
X
y(t) ≈ K(t, si )f (si )∆s .
i=1
la cual demuestra que la influencia de la fuerza de acción continua se puede considerar como
superposición de las influencias de impulsos separados.
y = B0 xs + B1 xs−1 + . . . + Bs ,
www.elsolucionario.net
an Bs + . . . = As ,
de donde se determina Bs .
www.elsolucionario.net
De esta manera, si an 6= 0 existe una solución particular que tiene la forma de polinomio
cuyo grado es igual al grado del polinomio del segundo miembro.
Supongamos ahora que el coeficiente an = 0 y, para mayor generalidad, escogemos que
también an−1 = an−2 = . . . = an−α+1 = 0, pero an−α 6= 0, o sea, que k = 0 es raı́z de
multiplicidad α de la ecuación caracterı́stica; además, el caso α = 1 no se excluye. Entonces,
la ecuación (6.48) toma la forma
Haciendo y (α) = z, llegamos al caso anterior y, en consecuencia, hay una solución particular
de la ecuación (6.49), para la cual
y (α) = B0 xs + B1 xs−1 + . . . + Bs .
Esto significa que y es un polinomio de grado s + α; además, los términos de grado menor o
igual a α − 1 de dicho polinomio tendrán coeficientes constantes arbitrarios, que pueden ser,
en particular, escogidos iguales a cero. Entonces, la solución particular de la forma:
y = xα B0 xs + B1 xs−1 + . . . + Bs .
y 00 + y = x2 + x . (6.50)
y = B0 x2 + B1 x + B2 .
Sustituyendo en la ecuación (6.50) e igualando los coeficientes de los términos de igual grado
respecto a x, obtenemos
B0 = 1 , B1 = 1 , B2 = −2 , ỹ = x2 + x − 2 .
www.elsolucionario.net
La solución general es
y = c1 cos x + c2 sen x + x2 + x − 2 .
donde todas las aj las Ai son constantes. Como fue indicado anteriormente, el cambio de
variables y = epx z reduce la ecuación (6.51) a la forma
o bien
b0 z (n) + b1 z (n−1) + . . . + bn z = A0 xs + A1 xs−1 + . . . + As , (6.52)
donde todas las bi son constantes.
La solución particular de la ecuación (6.52), si bn 6= 0 tiene la forma
www.elsolucionario.net
z̃ = B0 xs + B1 xs−1 + . . . + Bs ;
ỹ = epx B0 xs + B1 xs−1 + . . . + Bs .
b0 k̃ n + b1 k̃ n−1 + . . . + bn = 0 . (6.53)
a0 k n + a1 k n−1 + . . . + an = 0 , (6.54)
puesto que las raı́ces de estas ecuaciones están ligadas por la dependencia k = k̃ + p.
Si k̃ = 0, en cambio, es raı́z de multiplicidad α de la ecuación caracterı́stica (6.53) o, en
otras palabras, k = p es raı́z de la misma multiplicidad α de la ecuación caracterı́stica (6.54),
entonces las soluciones particulares de las ecuaciones (6.52) y (6.51) tienen respectivamente
las formas
z̃ = xα B0 xs + B1 xs−1 + . . . + Bs ,
ỹ = xα epx B0 xs + B1 xs−1 + . . . + Bs .
epx A0 xs + A1 xs−1 + . . . + As ,
ỹ = xα epx B0 xs + B1 xs−1 + . . . + Bs .
y 00 − y = e3x (x − 2) .
ỹ = xe3x (B0 x + B1 ) .
Obsérvese que nuestros razonamientos son válidos también si las p son complejas; por eso,
si el segundo miembro de la ecuación diferencial lineal tiene la forma
www.elsolucionario.net
epx [Ps (x) cos qx + Qs (x) sen qx] , (6.55)
donde uno de los dos polinomios Ps (x) o Qs (x) tiene grado s y el otro, no mayor que s,
entonces reduciendo según las fórmulas de Euler las funciones trigonométricas a la forma
exponencial, obtenemos en el segundo miembro
donde P̃s (x) y Q̃s (x) son polinomios de grado s con coeficientes indeterminados.
Obsérvese que si uno de los polinomios de grado Ps (x) ó Qs (x) tienen un grado menor
que s, e incluso, en particular, es idénticamente nulo, de todos modos ambos polinomios
P̃s (x) y Q̃s (x) tendrán, en general, grado s.
y 00 + 4y 0 + 4y = cos(2x) .
Como los números ±2i no son raı́ces de la ecuación caracterı́stica, buscamos la solución
particular en la forma
ỹ = A cos 2x + B sen 2x .
y 00 + 4y = cos(2x) .
Como los números ±2i son raı́ces simples de la ecuación caracterı́stica, buscamos la solución
particular en la forma
ỹ = x [A cos 2x + B sen 2x] .
www.elsolucionario.net
Ejemplo Consideremos la ecuación
y 0000 + 2y 00 + y = sen(x) .
Puesto que los números ±i son raı́ces dobles de la ecuación caracterı́stica, la solución par-
ticular se busca en la forma
ỹ = x2 [A cos x + B sen x] .
Debido a que los números −1 ± i son raı́ces simples de la ecuación caracterı́stica, la solución
particular debe buscarse en la forma
y 00 − 2y 0 + y = cos x ,
se puede transformar cos x por la fórmula de Euler, o de modo más sencillo, considerar la
ecuación
y 00 − 2y 0 + y = eix , (6.57)
www.elsolucionario.net
y = Aeix .
Entonces
i i
A= , y = (cos x + i sen x) .
2 2
La solución particular de la ecuación original es
1
y˜1 = Re y = − sen x .
2
www.elsolucionario.net
El problema de la integración de ecuaciones lineales homogéneas de n-ésimo orden
son también funciones analı́ticas en cierto entorno del mismo punto; por lo tanto, la solución
de la ecuación (6.59) se puede buscar de la forma
y = a0 + a1 (x − x0 ) + a2 (x − x0 )2 + . . . + an (x − xn )n + . . . .
una solución no trivial de la ecuación (6.59) en forma de suma de una serie generalizada de
potencias
donde k es un número real que puede ser entero y fraccionario, positivo o negativo.
La segunda solución linealmente independiente de (6.60) por regla general, tiene también
la forma de suma de una serie generalizada de potencias, pero a veces puede contener además
el producto de una serie generalizada de potencia por log(x − x0 ).
En problemas concretos se puede proceder sin los dos teoremas formulados más arriba,
sobre todo porque en el enunciado de éstos no se establecen las regiones de convergencia
de las series consideradas. Con mayor frecuencia en problemas concretos se escoge una serie
de potencias o una serie generalizada de potencias que satisfaga formalmente la ecuación
diferencial, o sea, que al sustituirla en la ecuación considerada de orden n (6.58) la transforme
en una identidad, si suponemos la convergencia de la serie y la posibilidad de su derivación
www.elsolucionario.net
término a término n veces. Al obtener formalmente la solución en forma de serie, se investiga
su convergencia y la posibilidad de su derivación término a término n veces. En la región
donde la serie converge y permite su derivación término a término n veces, la misma no
solamente satisface formalmente la ecuación, sino que su suma es en realidad la solución
buscada.
Ejemplo Consideremos la ecuación
y 00 − xy = 0 . (6.61)
Basándonos en los teorema anteriores, o derivando esta serie formalmente término a término
dos veces y sustituyendo en la ecuación (6.61), obtenemos
∞
X ∞
X
an n(n − 1)xn−2 − x an x n ≡ 0 .
n=0 n=0
x3 x6 x3n
y = a0 1 + + + ... + + ... +
2·3 2·3·5·6 2 · 3 · 5 · 6 . . . (3n − 1)3n
(6.62)
x4 x7 x3n+1
+ a1 x + + + ... + + ... .
3·4 3·4·6·7 3 · 4 · 6 · 7 . . . 3n(3n + 1)
www.elsolucionario.net
www.elsolucionario.net
www.elsolucionario.net
www.elsolucionario.net
Capı́tulo 7
www.elsolucionario.net
La ecuación de movimiento de una partı́cula de masa m bajo la acción de la fuerza
F (t, ~r, ~r˙ ), es
~
d2~r
m 2 = F~ (t, ~r, ~r˙ ) ;
dt
proyectando sobre los ejes de coordenadas, ésta puede ser sustituida por un sistema de tres
ecuaciones escalares de segundo orden:
d2 x
m = Fx (t, x, y, z, ẋ, ẏ, ż) ,
dt2
d2 y
m 2 = Fy (t, x, y, z, ẋ, ẏ, ż) ,
dt
d2 z
m 2 = Fz (t, x, y, z, ẋ, ẏ, ż) ,
dt
o por un sistema de seis ecuaciones de primer orden; si consideramos como funciones desco-
nocidas no sólo las coordenadas x, y, z de la partı́cula, sino también las proyecciones ẋ, ẏ, ż
de su velocidad
ẋ = u ,
ẏ = v ,
ż = w ;
mu̇ = Fx (t, x, y, z, u, v, w) ,
mv̇ = Fy (t, x, y, z, u, v, w) ,
mẇ = Fz (t, x, y, z, u, v, w) .
En este caso, por lo general, se dan la posición inicial del punto x(t0 ) = x0 , y(t0 ) = y0 ,
z(t0 ) = z0 , y la velocidad inicial u(t0 ) = u0 , v(t0 ) = v0 , w(t0 ) = w0 .
1
Este capı́tulo está basado en el tercer capı́tulo del libro: Ecuaciones diferenciales y cálculo variacional
de L. Elsgoltz, editorial MIR
227
www.elsolucionario.net
Enumeremos las condiciones suficientes para la existencia y unicidad de la solución del sistema
www.elsolucionario.net
(7.1) con las condiciones iniciales (7.2):
ii) Cumplimiento de la condición de Lipschitz para todas las funciones fi en todos sus
argumentos, a partir del segundo, en dicho entorno.
La segunda condición se puede cambiar por una más grosera: la existencia de las derivadas
parciales
∂fi
, (i = 1, 2, . . . , n) ,
∂xj
acotadas en valor absoluto.
La solución x1 (t), x2 (t), . . . , xn (t) del sistema de ecuaciones diferenciales es una función
vectorial n-dimensional, que denotaremos abreviadamente por X(t). Con esta notación, el
sistema (7.1) se puede escribir en la forma
dX
= F (t, X) ,
dt
donde F es una función vectorial con coordenadas (f1 , f2 , . . . , fn ) y las condiciones inicia-
les, en la forma X(t0 ) = X0 , donde X0 es un vector de n-dimensiones, con coordenadas
(x10 , x20 , . . . , xn0 ). La solución
www.elsolucionario.net
dt
se llama generalmente dinámico; el espacio de coordenadas x1 , x2 , . . . ,xn , espacio de fase, y
la curva X = X(t), trayectoria de fases.
El sistema dinámico (7.1) determina en un momento dado t en el espacio x1 , x2 , . . . ,xn
un campo de velocidades. Si la función vectorial F depende explı́citamente de t, entonces el
campo de velocidades cambia con el tiempo, y las trayectorias de fases pueden intersectarse. Si
la función vectorial F o, lo que es lo mismo, todas las funciones fi no dependen explı́citamente
de t, el campo de velocidades es estacionario, es decir, no cambia en el tiempo, y el movimiento
será permanente.
En este último caso, si las condiciones del teorema de existencia y unicidad se cumplen,
por cada punto del espacio de fase (x1 , x2 , . . . , xn ) pasará una sola trayectoria. En efecto,
en este caso por cada trayectoria X = X(t) se realizan infinitos movimiento diferentes,
X = X(t + c), donde c es una constante arbitraria. Es fácil comprobar esto realizando la
sustitución de variables t1 = t + c, con lo cual el sistema dinámico no cambia su forma:
dX
= F (X) ,
dt1
Por consiguiente, X = X(t1 ) será su solución que, expresada en las variables anteriores,
será X = X(t + c).
Si por un punto X0 del espacio de fase, en el caso considerado, pasaran dos trayectorias
X = X1 (t − t0 + t̃0 ) y X = X2 (t − t0 + t̃˜0 ) ,
se obtendrı́a una contradicción con el teorema de existencia y unicidad, puesto que las dos
soluciones diferentes X1 (t − t0 + t̃0 ) y X2 (t − t0 + t̃˜0 ) satisfacerı́an a la misma condición inicial
X(t0 ) = X0 .
www.elsolucionario.net
dx dy
=y , =x.
dt dt
www.elsolucionario.net
d2 x dy dy
Derivemos una de las ecuaciones, por ejemplo, la primera, 2
= ; eliminando mediante
dt dt dt
d2 x
la segunda ecuación, se obtiene 2 − x = 0, de donde x = c1 et + c2 e−t . Utilizando la primera
dt
dx
ecuación, obtenemos y = = c1 et − c2 e−t .
dt
Hemos determinado y sin integrar, mediante la primera ecuación. Si hubiéramos determi-
nado y de la segunda ecuación,
dy
= x = c1 et + c2 e−t , y = c1 et − c2 e−t + c3 ,
dt
entonces habrı́amos introducido soluciones superfluas, puesto que la sustitución directa en el
sistema original muestra que las funciones x = c1 et + c2 e−t e y = c1 et − c2 e−t + c3 satisfacen
al sistema, no para c3 cualesquiera, sino para c3 = 0.
Ejemplo Consideremos el sistema de ecuaciones
dx
= 3x − 2y , (7.3a)
dt
dy
= 2x − y . (7.3b)
dt
Derivemos la segunda ecuación:
d2 y dx dy
2
=2 − . (7.4)
dt dt dt
dx
De las ecuaciones (7.3b) y (7.4) se determina x y :
dt
1 dy
x= +y , (7.5)
2 dt
www.elsolucionario.net
d2 y dy
dx 1
= + .
dt 2 dt2 dt
Sustituyendo en (7.3a), obtenemos
d2 y dy
2
−2 +y =0 .
dt dt
Integrando la ecuación lineal homogénea con coeficientes constantes y = et (c1 + c2 t) y susti-
tuyendo en (7.5) se halla x(t):
1
x = et (2c1 + c2 + 2c2 t) .
2
www.elsolucionario.net
= aij (t)xj , (i = 1, 2, . . . , n) ,
dt j=1
llamado lineal homogéneo, entonces, como es fácil comprobar, la ecuación de n-ésimo orden
dn x1 dn−1 x1
dx1
= φ t, x1 , , . . . , n−1 , (7.6)
dtn dt dt
también será lineal homogénea. Además, si todos los coeficientes aij son constantes, la ecua-
ción (7.6) será también lineal homogénea con coeficientes constantes. Una observación análoga
se cumple también para el sistema lineal no homogéneo
n
dxi X
= aij (t)xj + fi (t) , (i = 1, 2, . . . , n) ,
dt j=1
para el cual la ecuación (7.6) será una ecuación lineal no homogénea de n-ésimo orden.
o, en forma vectorial,
dX
= AX + F , (7.8)
dt
www.elsolucionario.net
www.elsolucionario.net
Según la regla del producto de matrices, las filas del primer factor deben multiplicarse por la
columna del segundo: por tanto,
n n
X X
a1j xj a1j xj + f1
j=1 j=1
n n
X X
a x a x + f
2j j 2j j 2
AX = j=1
, AX + F = j=1
.
.. ..
n .
n .
X X
anj xj anj xj + fn
j=1 j=1
La igualdad de matrices significa la igualdad de todos sus elementos, por lo cual una sola
ecuación matricial (7.8). o bien
n
X
dx1
a1j xj + f1
dt j=1n
X
dx
a2j xj + f2
2
dt = j=1
.
..
..
. .
n
dxn
X
dt
a nj x j + fn
j=1
En efecto, en el caso considerado los segundos miembros del sistema (7.7) son continuos, y
sus derivadas parciales con respecto a cualquier xj son acotadas, puesto que dichas derivadas
son iguales a los coeficientes aij (t), continuos en el intervalo a ≤ t ≤ b.
Definamos el operador lineal L por la igualdad
dX
L[X] = − AX ;
dt
entonces la ecuación (7.8) puede escribirse en la forma aún más compacta
L[X] = F . (7.9)
www.elsolucionario.net
El operador L posee las dos propiedades siguientes:
Teorema 7.1 Si X es solución del sistema lineal homogéneo L[X] = 0, entonces cX, donde
c es una constante arbitraria, es también solución de dicho sistema.
Teorema 7.3 Si el sistema lineal homogéneo (7.10) con coeficientes reales aij tiene una
solución compleja X = U + iV , las partes real e imaginaria
u1 v1
u2 v2
U = .. , V = .. ,
. .
un vn
www.elsolucionario.net
X
αi x1i (t) ≡ 0 ,
i=1
Xn
αi x2i (t) ≡ 0 ,
i=1 (7.12)
..
.
n
X
αi xni (t) ≡ 0 .
i=1
www.elsolucionario.net
f1i (t)
m
X f2i (t)
L[X] = Fi , Fi = .. , (7.13)
i=1
.
fni (t)
Pm
es la suma i=1 Xi de las soluciones Xi de las ecuaciones
L[Xi ] = Fi , (i = 1, 2, . . . , m) . (7.14)
Observación.
P∞ El teorema anterior puede extenderse también al caso cuando m → ∞, si la
serie i=1 Xi converge y puede ser derivada término a término.
www.elsolucionario.net
www.elsolucionario.net
Parte III
www.elsolucionario.net
Computación.
237
www.elsolucionario.net
www.elsolucionario.net
www.elsolucionario.net
Capı́tulo 8
8.1. Introducción.
En este capı́tulo se intentará dar los elementos básicos para poder trabajar en un am-
www.elsolucionario.net
biente unix. Sin pretender cubrir todos los aspectos del mismo, nuestro interés se centra
en dar las herramientas al lector para que pueda realizar los trabajos del curso bajo este
sistema operativo. Como comentario adicional, conscientemente se ha evitado la traducción
de gran parte de la terminologı́a técnica teniendo en mente que documentación disponible
se encuentre, por lo general, en inglés y nos interesa que el lector sea capaz de reconocer los
términos.
El sistema operativo unix es el más usado en investigación cientı́fica, tiene una larga
historia y muchas de sus ideas y métodos se encuentran presentes en otros sistemas operativos.
Algunas de las caracterı́sticas relevantes del unix moderno son:
Memoria grande, lineal y virtual: Un programa en una máquina de 32 Bits puede acceder
y usar direcciones hasta los 4 GB en un máquina de sólo 4 MB de RAM. El sistema
sólo asigna memoria auténtica cuando le hace falta, en caso de falta de memoria de
RAM, se utiliza el disco duro (swap).
Multitarea (Multitasking): Cada programa tiene asignado su propio “espacio” de me-
moria. Es imposible que un programa afecte a otro sin usar los servicios del sistema
operativo. Si dos programas escriben en la misma dirección de memoria cada uno man-
tiene su propia “idea” de su contenido.
Multiusuario: Más de una persona puede usar la máquina al mismo tiempo. Programas
de otros usuarios continúan ejecutándose a pesar de que un nuevo usuario entre a la
máquina.
Casi todo tipo de dispositivo puede ser accedido como un archivo.
Existen muchos aplicaciones diseñadas para trabajar desde la lı́nea de comandos. Además,
la mayorı́a de las aplicaciones permiten que la salida de una pueda ser la entrada de la
otra.
Permite compartir dispositivos (como disco duro) entre una red de máquinas.
239
www.elsolucionario.net
Por su naturaleza de multiusuario, nunca se debe apagar una máquina unix1 , ya que
una máquina apagada sin razón puede matar trabajos de dı́as, perder los últimos cambios de
tus archivos e ir degradando el sistema de archivos en dispositivos como el disco duro.
Entre los sistemas operativos unix actuales cabe destacar:
Linux: esta disponible para: Intel x86 e IA-64; Motorola 68k, en particular, para las es-
taciones Sun3, computadores personales Apple Macintosh, Atari y Amiga; Sun SPARC;
Alpha; Motorola/IBM PowerPC; ARM, máquinas NetWinder; Sun UltraSPARC; MIPS
CPUs, máquinas SGI y estaciones Digital; HP PA-RISC; S/390, servidores IBM S/390
y SuperH procesadores Hitachi SuperH.
SunOS2 : disponible para la familia 68K ası́ como para la familia sparc de estaciones
de trabajo sun
Solaris3 : disponible para la familia sparc de Sun ası́ como para la familia x86.
OSF14 : disponible para Alpha.
www.elsolucionario.net
Ultrix: disponible para vax de Digital
SYSVR45 : disponible para la familia x86, vax.
IRIX: disponible para mips.
AIX6 : disponible para RS6000 de IBM y PowerPC.
8.2.1. Terminales.
Para iniciar una sesión es necesario poder acceder a un terminal. Pueden destacarse dos
tipos de terminales:
Terminal de texto: consta de una pantalla y de un teclado. Como indica su nombre, en
la pantalla sólo es posible imprimir caracteres de texto.
Terminal gráfico: Consta de pantalla gráfica, teclado y mouse. Dicha pantalla suele ser
de alta resolución. En este modo se pueden emplear ventanas que emulan el comporta-
miento de un terminal de texto (xterm o gnome-terminal).
1
Incluyendo el caso en que la máquina es un PC normal corriendo Linux u otra versión de unix.
2
SunOS 4.1.x también se conoce como Solaris 1.
3
También conocido como SunOS 5.x, solaris 2 o Slowaris :-).
4
También conocido como Dec Unix.
5
También conocido como Unixware y Novell-Unix.
6
También conocido como Aches.
www.elsolucionario.net
8.2.2. Login.
El primer paso es encontrar un terminal libre donde aparezca el login prompt del sistema:
hostname login:
Otra persona ha dejado una sesión abierta. En este caso existe la posibilidad de intentar
www.elsolucionario.net
en otra máquina o bien finalizar la sesión de dicha persona (si ésta no se halla en las
proximidades).
Una vez que se haya superado el paso anterior de encontrar el login prompt se procede
con la introducción del Username al prompt de login y después la contraseña (password)
adecuada.
8.2.3. Passwords.
El password puede ser cualquier secuencia de caracteres a elección. Deben seguirse las
siguientes pautas:
Debe ser fácil de recordar por uno mismo. Si se olvida, deberá pasarse un mal rato
diciéndole al administrador de sistema que uno lo ha olvidado.
Para evitar que alguna persona no deseada obtenga el password y tenga libre acceso a
los archivos de tu cuenta:
Debe cambiarlo si crees que su password es conocido por otras personas, o descubre
que algún intruso7 está usando su cuenta.
La orden para cambiar el password en unix es passwd. A menudo cuando existen va-
rias máquinas que comparten recursos (disco duro, impresora, correo electrónico, . . . ), para
facilitar la administración de dicho sistema se unifican los recursos de red (entre los que se
hayan los usuarios de dicho sistema) en una base de datos común. Dicho sistema se conoce
como NIS (Network Information Service)8 . Si el sistema empleado dispone de este servicio, la
modificación de la contraseña en una máquina supone la modificación en todas las máquinas
que constituyan el dominio NIS.
www.elsolucionario.net
8.3. Archivos y directorios.
Aunque haya diferentes distribuciones y cada una traiga sus programas, la estructura
básica de directorios y archivos es más o menos la misma en todas:
/-|--> bin
|--> boot
|--> cdrom
|--> dev
|--> etc
|--> floppy
|--> home
|--> lib
|--> mnt
|--> proc
|--> root
|--> sbin
|--> tmp
|--> usr -|--> X11
| |--> bin
| |--> include
| |--> lib
| |--> local -|--> bin
| | |--> lib
| |--> man
| |--> src --> linux
| |--> doc
|--> var --> adm
8
Antiguamente se conocı́a como YP (Yellow Pages), pero debido a un problema de marca registrada de
United Kingdom of British Telecomunications se adoptaron las siglas nis.
9
En caso que se estuviera trabajando bajo X-Windows debes cerrar la sesión con Log out of Gnome.
www.elsolucionario.net
El árbol que observamos muestra un tı́pico árbol de directorios en Linux. Pueden variar,
sin embargo, algunos de los nombres dependiendo de la distribución o versión de Linux que
se esté usando. Algunos directorios destacados son:
www.elsolucionario.net
• hd: hda1 será el disco duro IDE, primario (a), y la primera partición (1).
• fd: los archivos que empiecen con las letras fd se referirán a los controladores de
las disketteras: fd0 serı́a la primera diskettera, fd1 serı́a la segunda y ası́ sucesi-
vamente.
• ttyS: se usan para acceder a los puertos seriales como por ejemplo, ttyS0 es el
puerto conocido como com1.
• sd: son los dispositivos SCSI. Su uso es muy similar al del hd.
• lp: son los puertos paralelos. lp0 es el puerto conocido como LPT1.
• null: éste es usado como un agujero negro, ya que todo lo que se dirige allı́ desa-
parece.
• tty: hacen referencia a cada una de las consolas virtuales. Como es de suponer,
tty1 será la primera consola virtual, tty2 la segunda, etc.
/usr/local - Zona con las aplicaciones no comunes a todos los sistemas unix, pero no
por ello menos utilizadas. En /usr/share/doc se puede encontrar información relacio-
nada con dicha aplicación (en forma de páginas de manual, texto, html o bien archivos
dvi, Postscript o pdf). También encontramos archivos de ejemplo, tutoriales, HOWTO,
etc.
www.elsolucionario.net
Path Relativo, aquel que no empieza con /
Por ejemplo : ../examples/rc.dir.01
Los caracteres comodı́n pueden ser empleados para acceder a un conjunto de archivos con
caracterı́sticas comunes. El signo * puede sustituir cualquier conjunto de caracteres11 y el
signo ? a cualquier caracter individual. Por ejemplo:12
bash$ ls
f2c.1 flexdoc.1 rcmd.1 rptp.1 zforce.1
face.update.1 ftptool.1 rlab.1 rxvt.1 zip.1
faces.1 funzip.1 robot.1 zcat.1 zipinfo.1
flea.1 fvwm.1 rplay.1 zcmp.1 zmore.1
flex.1 rasttoppm.1 rplayd.1 zdiff.1 znew.1
bash$ ls rp*
rplay.1 rplayd.1 rptp.1
bash$ ls *e??
face.update.1 zforce.1 zmore.1
Los archivos cuyo nombre comiencen por . se denominan ocultos, ası́ por ejemplo en el
directorio de partida de un usuario.
bash$ ls -a user
. .alias .fvwmrc .login .xinitrc
.. .cshrc .joverc .profile
.Xdefaults .enviroment .kshrc .tcshrc
10
Normalmente se acude a la imagen de una carpeta que puede contener informes, documentos o bien otras
carpetas, y ası́ sucesivamente.
11
Incluido el punto ‘.’, unix no es dos.
12
bash$ es el prompt en todos los ejemplos.
www.elsolucionario.net
-l (Long listing) proporciona un listado extenso, que consta de los permisos13 de cada
www.elsolucionario.net
archivo, el usuario el tamaño del archivo, . . .
www.elsolucionario.net
-i (interactive), impide que la copia provoque una pérdida del archivo destino si éste
existe14 .
mv (MoVe)
Mover un archivo(s) a otro nombre y/o a otro directorio. Dispone de opciones análogas al
caso anterior.
rm (ReMove)
Borrar un archivo(s). En caso de que el argumento sea un directorio y se haya suministrado
la opción -r, es posible borrar el directorio y todo su contenido. La opción -i pregunta antes
de borrar.
8.4.6. Links.
ln (LiNk)
Permite realizar un enlace (link) entre dos archivos o directorios. Un enlace puede ser:
hard link : se puede realizar sólo entre archivos del mismo sistema de archivos. El archivo
enlazado apunta a la zona de disco donde se halla el archivo original. Por tanto, si se
elimina el archivo original, el enlace sigue teniendo acceso a dicha información. Es el
enlace por omisión.
Un enlace permite el uso de un archivo en otro directorio distinto del original sin necesidad
de copiarlo, con el consiguiente ahorro de espacio.
www.elsolucionario.net
8.4.7. Protección de archivos.
Dado que el sistema de archivos unix es compartido por un conjunto de usuarios, surge el
problema de la necesidad de privacidad. Sin embargo, dado que existen conjuntos de personas
que trabajan en común, es necesario la posibilidad de que un conjunto de usuarios puedan
tener acceso a una serie de archivos (que puede estar limitado para el resto de los usuarios).
Cada archivo y directorio del sistema dispone de un propietario, un grupo al que pertenece
y unos permisos. Existen tres tipos fundamentales de permisos:
other: el resto de los usuarios (excepto el usuario y los usuarios que pertenezcan al
grupo)
16
Debe hacerse notar que los directorios sólo pueden ser enlazados simbólicamente.
www.elsolucionario.net
También se puede emplear all que es la unión de todos los anteriores. Para visualizar las
protecciones de un archivo o directorio se emplea la orden ls -l, cuya salida es de la forma:
-rw-r--r-- ...otra información... nombre
Los 10 primeros caracteres muestran las protecciones de dicho archivo:
• archivo
• d directorio
• l enlace (link )
• c dispositivo de caracteres (p.e. puerta serial)
• b dispositivo de bloques (p.e. disco duro)
• s socket (conexión de red)
www.elsolucionario.net
Los caracteres 5, 6, 7 son los permisos del grupo
Permite la lectura y escritura por el usuario, lectura para el grupo y ningún permiso
para el resto, de un conjunto de archivos que acaban en .txt
Modo simbólico o literal. Se realiza empleando una cadena (o cadenas separadas por
comas) para especificar los permisos. Esta cadena se compone de los siguientes tres
elementos: who operation permission
www.elsolucionario.net
• operation: es una de las siguientes operaciones:
◦ + : añadir permiso.
◦ - : eliminar permiso.
◦ = : asignar permiso, el resto de permisos de la misma categorı́a se anulan.
• permission: es una combinación de los caracteres:
◦ r : read.
◦ w : write.
◦ x : execute.
◦ s : en ejecución fija el usuario o el grupo.
Por ejemplo:
chmod u+x tarea
Permite la ejecución por parte del usuario17 del archivo tarea.
chmod u=rx, go=r *.txt
Permite la lectura y ejecución del usuario, y sólo la lectura por parte del grupo y el
resto de usuarios.
umask
Esta es una orden intrı́nseca del Shell que permite asignar los permisos que se desea tengan
los archivos y directorios por omisión. El argumento que acompaña a la orden es un número
octal que aplicará una xor sobre los permisos por omisión (rw-rw-rw-) para archivos y
(rwxrwxrwx) para directorios. El valor por omisión de la máscara es 022 que habilita al
usuario para lectura-escritura, al grupo y al resto para lectura. Sin argumentos muestra el
valor de la máscara.
17
Un error muy frecuente es la creación de un archivo de órdenes (script file) y olvidar permitir la ejecución
del mismo.
www.elsolucionario.net
user@hostname:~$ id
uid=1000(user) gid=1000(group) groups=1000(group),25(floppy),29(audio)
user@hostname:~$
www.elsolucionario.net
8.4.8. Filtros.
Existe un conjunto de órdenes en unix que permiten el procesamiento de archivos de texto.
Se denominan filtros (Unix Filters), porque normalmente se trabaja empleando redirección
recibiendo datos por su stdin19 y retornándolos modificados por su stdout20 .
Para facilitar la comprensión de los ejemplos siguientes supondremos que existen dos
archivo llamado mylist.txt y yourlist.txt que tienen en su interior:
mylist.txt yourlist.txt
1 190 1 190
2 280 2 281
3 370 3 370
echo
Este no es propiamente un filtro, pero nos será muy útil más adelante. Despliega sobre la
pantalla un mensaje
cat
Es el filtro más básico, copia la entrada a la salida.
2 280
3 370
user@hostname:~$
cut
Para un archivo compuesto por columnas de datos, permite escribir sobre la salida cierto
intervalo de columnas. La opción -b N-M permite indicar el intervalo en bytes que se escribirán
en la salida.
paste
www.elsolucionario.net
Mezcla lı́neas de distintos archivos. Escribe lı́neas en el stdout pegando secuencialmente las
lı́neas correspondientes de cada unos de los archivo separadas por tab. Ejemplo, supongamos
que tenemos nuestros archivos mylist.txt y mylist.txt y damos el comando
sed
Es un editor de flujo. Veamos algunos ejemplos
Sólo muestra la lı́nea 3. El modificador -n suprime la impresión de todas las lı́neas excepto
aquellas especificadas por p. Separando por coma damos un rango en el número de lı́neas.
www.elsolucionario.net
Muestra hasta la lı́nea 2 y luego se sale de sed. El modificador -e corre un script, secuencia
de comandos.
Reemplaza todos los 0 del archivo por la letra a. Este es uno de los usos más comunes.
www.elsolucionario.net
user@hostname:~$ sed -e ’/2 2/s/0/a/g’ mylist.txt
1 190
2 28a
3 370
user@hostname:~$
Busca las lı́neas con la secuencia 2 2 y en ellas reemplaza todos los 0 por la letra a.
www.elsolucionario.net
find . -name ’*.dat’ -print | xargs mv ../data \;
Busca en la estructura de directorios todos los archivos que acaben en .dat, y los mueve al
directorio ../data.
grep
Permite la búsqueda de una cadena de caracteres en uno o varios archivos, imprimiendo el
nombre del archivo y la lı́nea en que se encuentra la cadena.
-v Invierte la búsqueda mostrando todas las lı́neas donde no aparece la cadena pedida.
head
Muestra las primeras diez lı́neas de un archivo.
head -30 file Muestra las 30 primeras lı́neas de file.
www.elsolucionario.net
tail
Muestra las diez últimas lı́neas de un archivo.
tail -30 file Muestra las 30 últimas lı́neas de file.
tail +30 file Muestra desde la lı́nea 30 en adelante de file.
awk
Es un procesador de archivos de texto que permite la manipulación de las lı́neas de forma tal
que tome decisiones en función del contenido de la misma. Ejemplo, supongamos que tenemos
nuestro archivo mylist.txt con sus dos columnas
www.elsolucionario.net
user@hostname:~$ awk ’{print $2, $1 }’ mylist.txt
190 1
280 2
370 3
user@hostname:~$
denominado tarfile (o tarball). Este tarfile suele ser luego comprimido con gzip, la
versión de compresión gnu21 o bien con bzip2.
La acción a realizar viene controlada por el primer argumento:
c (Create) creación
x (eXtract) extracción
r añadir al final
u (Update) añadir aquellos archivos que no se hallen en el tarfile o que hayan sido
modificados con posterioridad a la versión que aparece.
v Verbose (indica qué archivos son agregados a medida que son procesados)
www.elsolucionario.net
z Comprimir o descomprimir el contenido con gzip.
user@hostname:~$ wc mylist.txt
3 6 18 mylist.txt
user@hostname:~$
El archivo tiene 3 lı́neas, 6 palabras, considerando cada número como una palabra i.e. 1 es la
primera palabra y 190 la segunda, y finalmente 18 caracteres. ¿Cuáles son los 18 caracteres?
21
gnu es un acrónimo recursivo, significa: gnu’s Not unix! gnu es el nombre del producto de la Free
Software Foundation, una organización dedicada a la creación de programas compatibles con unix (y mejorado
respecto a los estándars) y de libre distribución. La distribución de Linux gnu es debian.
www.elsolucionario.net
ping
Verifica si una máquina está conectada a la red y si el camino de Internet hasta la misma
funciona correctamente.
finger
finger user, muestra información22 sobre el usuario user en la máquina local.
finger user@hostname, muestra información sobre un usuario llamado user en una máquina
hostname.
finger @hostname, muestra los usuarios conectados de la máquina hostname.
www.elsolucionario.net
8.4.10. Fecha
cal
Muestra el calendario del mes actual. Con la opción -y y el año presenta el calendario del
año completo.
date
Muestra el dı́a y la hora actual.
Una posibilidad es disponer de una máquina win9x con ftp instalado y acceso a red.
Empleando dicha aplicación se pueden intercambiar archivos entre un sistema y el otro.
Con a: nos referimos a la primera diskettera /dev/fd0 y luego al archivo que se en-
cuentra en el diskette. Su nombre se compone de a:filename. Si se desea emplear el
caracter comodı́n para un conjunto de archivos del diskette, estos deben rodearse de
dobles comillas para evitar la actuación del shell (p.e. mcopy ‘‘a:*.dat’’). La opción
-t realiza la conversión necesaria entre unix y win9x, que se debe realizar sólo en
archivos de texto.
www.elsolucionario.net
8.4.12. Diferencias entre los sistemas.
Cuando se transfieren archivos de texto entre dos y unix sin las precauciones adecuadas
pueden aparecer los siguientes problemas:
En dos los nombres de los archivos pueden tener un máximo de 8 caracteres y una
extensión de 3 caracteres. En unix no existe restricción respecto a la longitud del
nombre, y aunque pueden llevar extensión, no es obligatorio. También pueden tener
más de una extensión algo.v01.tar.gz, esto complica mucho a otros sistemas que
tienen limitaciones en los nombres.
El cambio de lı́nea en dos se compone de Carriage Return y Line Feed. Sin embargo,
en unix sólo existe el Carriage Return. Ası́ un archivo de unix visto desde DOS parece
una única lı́nea. El caso inverso es la aparición del caracter ^M al final de cada lı́nea.
Además, el fin de archivo en dos es ^Z y en unix es ^D.
La presencia de caracteres con código ascii por encima del 127 (ascii extendido) suele
plantear problemas. Debido a que en DOS dicho código depende de la asignación hecha,
que a su vez depende del paı́s.
Usando el comando tr se puede transformar un archivo con cambios de lı́neas para dos
en uno para unix. Sabiendo que ^M es ascii 13 decimal, pero 15 en octal:
En Debian, instalando el paquete sysutils, queda instalado el comando dos2unix que tam-
bién lo hace.
www.elsolucionario.net
8.5. Shells.
El sistema operativo unix soporta varios intérpretes de comandos o shells, que ayudan
a que la interacción con el sistema sea lo más cómoda y amigable posible. La elección de
cuál es el shell más cómoda es algo personal; en este punto sólo indicaremos las cuatro más
significativas y populares:
csh : C-SHell, shell con sintaxis como el lenguaje “C”. El archivo de configuración es
.cshrc (en el directorio $HOME).
bash : Bourne-Again Shell, con lo mejor de sh, ksh y tcsh. El archivo de configuración
es .bash_profile cuando se entra a la cuenta por primera vez, y después el archivo de
www.elsolucionario.net
configuración es .bashrc siempre en el directorio $HOME. La lı́nea de comando puede
ser editada usando comandos (secuencias de teclas) del editor emacs. Es el shell por
defecto de Linux.
Si queremos cambiar de shell en un momento dado, sólo será necesario que tecleemos el
nombre del mismo y estaremos usando dicho shell. Si queremos usar de forma permanente otro
shell del que tenemos asignado por omisión23 podemos emplear la orden chsh que permite
realizar esta acción.
En los archivos de configuración se encuentran las definiciones de las variables de entorno
(enviroment variables) como camino de búsqueda PATH, los aliases y otras configuraciones
personales. Veamos unos caracteres con especial significado para el Shell:
www.elsolucionario.net
cuando ellos buscan datos o preferencias. Se encuentran definidas en los archivos de configu-
ración anteriormente mencionados. Para referenciar a las variables se debe poner el sı́mbolo
$ delante, por ejemplo, para mostrar el camino al directorio por defecto del usuario user:
PATH - El camino de búsqueda, una lista de directorios separado con ‘:’ para buscar
programas.
DISPLAY - Bajo el sistema de X windows, el nombre de máquina y pantalla que está usan-
do. Si esta variable toma el valor :0 el despliegue es local.
8.5.2. Redirección.
Cuando un programa espera que se teclee algo, aquello que el usuario teclea se conoce
como el Standard Input: stdin. Los caracteres que el programa retorna por pantalla es lo que
se conoce como Standard Output: stdout (o Standard Error : stderr27 ). El signo < permite
que un programa reciba el stdin desde un archivo en vez de la interacción con el usuario.
Por ejemplo: mail root < file, invoca el comando mail con argumento (destinatario del
mail) root, siendo el contenido del mensaje el contenido del archivo file en vez del texto que
usualmente teclea el usuario. Más a menudo aparece la necesidad de almacenar en un archivo
la salida de un comando. Para ello se emplea el signo >. Por ejemplo, man bash > file,
invoca el comando man con argumento (información deseada) bash pero indicando que la
información debe ser almacenada en el archivo file en vez de ser mostrada por pantalla.
En otras ocasiones uno desea que la salida de un programa sea la entrada de otro. Esto
se logra empleando los denominados pipes, para ello se usa el signo |. Este signo permite que
el stdout de un programa sea el stdin del siguiente. Por ejemplo:
zcat manual.gz | more
www.elsolucionario.net
Invoca la orden de descompresión de zcat y conduce el flujo de caracteres hacia el paginador
more, de forma que podamos ver página a página el archivo descomprimido. A parte de los
sı́mbolos mencionados existen otros que permiten acciones tales como:
>& o &> (sólo csh, tcsh y bash) Redireccionar el stdout y stderr. Con 2> redirec-
cionó sólo el stderr.
>>! Igual que >>, pero con la adición que funciona también cuando el archivo no existe.
En caso contrario:
8.5.4. Aliases.
Para facilitar la entrada de algunas órdenes o realizar operaciones complejas, los shells
interactivos permiten el uso de aliases. La orden alias permite ver qué aliases hay definidos
27
Si estos mensajes son de error.
28
En bash, si el archivo no existe, es creado.
www.elsolucionario.net
y también definir nuevos. Es corriente definir el alias rm =‘rm -i’, de esta forma la orden
siempre pide confirmación para borrar un archivo. Si alguna vez quieres usar rm sin alias,
sólo hace falta poner delante el sı́mbolo \, denominado backslash . Por ejemplo \rm elimina
los alias aplicados a rm. Otro ejemplo, bastante frecuente (en tcsh/csh) podrı́a ser (debido
a la complejidad de la orden): alias ffind ’find . -name \!* -print’. Para emplearlo:
ffind tema.txt, el resultado es la búsqueda recursiva a partir del directorio actual de un
archivo que se llame tema.txt, mostrando el camino hasta el mismo.
Comandos propios.
www.elsolucionario.net
Los comandos propios o intrı́nsecos, Built-In Commands, son aquéllos que proporciona el
propio shell 30 .
alias name def
Asigna el nombre name al comando def.
!!
Repite la última orden.
!n
Repite la orden n-ésima.
!string
Repite la orden más reciente que empiece por la cadena string.
29
bash también lo permite.
30
A diferencia de los comandos que provienen de un ejecutable situado en alguno de los directorios de la
variable PATH.
www.elsolucionario.net
!?string
Repite la orden más reciente que contenga la cadena string.
∧
str1∧ str2 o !!:s/str1/str2/
(substitute) Repite la última orden reemplanzando la primera ocurrencia de la cadena
str1 por la cadena str2.
!!:gs/str1/str2/
(global substitute) Repite la última orden reemplazando todas las ocurrencias de la
cadena str1 por la cadena str2.
!$
Es el último argumento de la orden anterior que se haya tecleado.
pushd
www.elsolucionario.net
Cambia de directorio, recordando el directorio actual.
popd
Retorna al directorio desde donde se hizo pushd la última vez.
repeat count command
Repite count veces el comando command.
rehash
Rehace la tabla de comandos (hash table).
set variable = VALUE
Asigna el valor de una variable del shell.
set variable
Muestra el valor de la variable
setenv VARIABLE VALUE
Permite asignar el valor de una variable de entorno.
source file
Ejecuta las órdenes del fichero file en el shell actual.
unset variable
Desasigna el valor de una variable del shell.
unsetenv VARIABLE VALUE
Permite desasignar el valor de una variable de entorno.
umask value
Asigna la máscara para los permisos por omisión.
unalias name
Elimina un alias asignado.
www.elsolucionario.net
www.elsolucionario.net
8.5.6. Las shell sh y bash.
Sólo bash puede considerarse un shell interactivo, permitiendo la edición de la lı́nea de
comandos, y el acceso a la historia de órdenes (readline). En uso normal (historia y editor
de lı́nea de comandos) BASH es compatible con TCSH y KSH. El modo de completado (file
completion) es automático (usando TAB sólo) si el shell es interactivo.
En bash, alias sólo sirve para substitución simple de una cadena por otra. Por ejemplo:
alias ls=’ls -F’. Para crear alias con argumentos se usan funciones, ver la documentación.
www.elsolucionario.net
fue llamado el script. Por ejemplo, si el anterior script está en un archivo llamado ejemplo,
el comando ejemplo file1 file2 asocia $1 a file1 y $2 a file2. La lı́nea 5 hace uso de la
variable interna dentro de un comando. La última lı́nea por comenzar con un # corresponde
a un comentario. Notemos que la primera también es un comentario, pero la combinación #!
en la primera lı́nea fuerza a que se ejecute esa shell.
Esto sólo es una mı́nima pincelada de una herramienta muy poderosa y útil. Los comandos
disponibles en la shell conforman un verdadero lenguaje de programación en sı́, y los scripts
pueden diseñarse para realizar tareas monótonas y complejas. Este es un tema que le será útil
profundizar.
8.7. Procesos.
En una máquina existen una multitud de procesos que pueden estar ejecutándose si-
multáneamente. La mayorı́a de ellos no corresponden a ninguna acción realizada por el usua-
rio y no merecen que se les preste mayor atención. Estos procesos corresponden a programas
ejecutados en el arranque del sistema y tienen que ver con el funcionamiento global del
servidor. En general, los programas suelen tener uno de estos dos modos de ejecución:
www.elsolucionario.net
foreground: Son aquellos procesos que requieren de la interacción y/o atención del
usuario mientras se están ejecutando, o bien en una de sus fases de ejecución (i.e.
introducción de datos). Ası́ por ejemplo, la consulta de una página de manual es un
proceso que debe ejecutarse claramente en foreground.
background: Son aquellos procesos que no requieren de la interacción con el usuario
para su ejecución. Si bien el usuario desearı́a estar informado cuando este proceso
termine. Un ejemplo de este caso serı́a la impresión de un archivo.
Sin embargo, esta división que a primera vista pueda parecer tan clara y concisa, a menudo
en la práctica aparece la necesidad de conmutar de un modo al otro, detención de tareas
indeseadas, etc. Ası́ por ejemplo, puede darse el caso de que estemos leyendo una página de
manual y de repente necesitemos ejecutar otra tarea. Un proceso viene caracterizado por:
process number
job number
www.elsolucionario.net
Veamos algunas de las órdenes más frecuentes para la manipulación de procesos:
33
comando & Ejecución de un comando en el background.
Ctrl-Z Detiene el proceso que estuviera ejecutándose en el foreground y lo coloca
detenido en el background.
Ctrl-C Termina un proceso que estaba ejecutándose en foreground.
Ctrl-\ Termina de forma definitiva un proceso que estaba ejecutándose en foreground.
ps x Lista todos los procesos que pertenezcan al usuario, incluyendo los que no están
asociados a un terminal.
jobs Lista los procesos que se hayan ejecutado desde el shell actual, mostrando el job
number.
fg (job number) Pasa a ejecución en foreground un proceso que se hallase en back-
ground.
bg (job number) Pasa a ejecución en background un proceso que se hallase detenido
con Ctrl-Z.
kill (process number) Envı́a una señal34 a un proceso unix. En particular para
enviar la señal de término a un programa, damos el comando kill -KILL, pero no
hace falta al ser la señal por defecto.
Cuando se intenta abandonar una sesión con algún proceso aún detenido en el background
del shell, se informa de ello con un mensaje del tipo: There are stopped jobs si no importa,
el usuario puede intentar abandonar de nuevo el shell y éste matará los jobs, o puedes utilizar
fg para traerlos al foreground y ahı́ terminar el mismo.
33
Por omisión un comando se ejecuta siempre en el foreground.
34
Para ver las señales disponibles entra la orden kill -l (l por list).
www.elsolucionario.net
8.8. Editores.
Un editor es un programa que permite crear y/o modificar un archivo. Existen multitud
de editores diferentes, y al igual que ocurre con los shells, cada usuario tiene alguno de su
predilección. Mencionaremos algunos de los más conocidos:
emacs (xemacs) - Editor muy configurable escrito en lenguaje Lisp. Existen multitud
de modos para este editor (lector de mail, news, www,. . . ) que lo convierten en un
verdadero shell para multitud de usuarios. Las últimas versiones del mismo permiten
la ejecución desde X-windows o terminal indistintamente con el mismo binario. Posee
un tutorial en lı́nea, comando C-H t dentro del editor. El archivo de configuración
personalizada es: $HOME/.emacs.
jove - Basado en Emacs, (Jonathan’s Own Version of Emacs). Posee tutorial en una uti-
www.elsolucionario.net
lidad asociada: teachjove. El archivo de configuración personalizada es: $HOME/.joverc.
xjed - Versión de jed para el X-windows system. Presenta como ventaja que es capaz
de funcionar en muchos modos: lenguaje C, Fortran, TeX, etc, reconociendo palabras
clave y signos de puntuación, empleando un colorido distinto para ellos. El archivo de
configuración personalizada es el mismo que el de de jed.
Dado que los editor del tipo de gedit disponen de menús auto explicativos, daremos a
continuación unas ligeras nociones sólo de vi y emacs.
~
~
~
/tmp/vi.9Xdrxi: new file: line 1
www.elsolucionario.net
~
~
~
nombre.de.archivo: new file: line 1
www.elsolucionario.net
ESC.
Opciones de comandos.
Para entrar al menú de comandos se debe presionar la tecla : en el modo de órdenes.
Aparecerán los dos puntos (:). Aquı́ se pueden ingresar ordenes para guardar, salir, cambiar
de archivo entre otras cosas. Veamos algunos ejemplos:
:e file1.txt Si deseo editar otro archivo al que se le pondrá por nombre file1.txt.
www.elsolucionario.net
:r! comando Si se quiere ejecutar algún comando del shell y que su salida aparezca en
el archivo que se está editando.
La zona de edición: donde aparece el texto que está siendo editado y que ocupa la
mayor parte de la pantalla.
Emacs es un editor que permite la edición visual de un archivo (en contraste con el modo
de edición de vi). El texto se agrega o modifica en la zona de edición, usando las teclas
disponibles en el teclado.
Además, existen una serie de comandos disponibles para asistir en esta tarea.
La mayorı́a de los comandos de emacs se realizan empleando la tecla de CONTROL o la
tecla META36 . Emplearemos la nomenclatura: C-key para indicar que la tecla key debe de
ser pulsada junto con CONTROL y M-key para indicar que la tecla META debe de ser pulsada
junto a key. En este último caso NO es necesario pulsar simultáneamente las teclas ESC y
key, pudiendo pulsarse secuencialmente ESC y luego key, sin embargo, si se usa ALT como
META deben ser pulsadas simultáneamente. Observemos que en un teclado normal hay unos
50 caracteres (letras y números). Usando SHIFT se agregan otros 50. Ası́, usando CONTROL
y META, hay unos 50 · 4 = 200 comandos disponibles. Además, existen comandos especiales
llamados prefijos, que modifican el comando siguiente. Por ejemplo, C-x es un prefijo, y si C-s
es un comando (de búsqueda en este caso), C-x C-s es otro (grabar archivo). Ası́, a través
de un prefijo, se duplican el número de comandos disponibles sólo con el teclado, hasta llegar
a unos 200 · 2 = 400 comandos en total.
www.elsolucionario.net
Aparte de estos comandos accesibles por teclas, algunos de los cuales comentaremos a
continuación, existen comandos que es posible ejecutar por nombre, haciendo ası́ el número
de comandos disponibles virtualmente infinito.
Revisemos los comandos más usuales, ordenados por tópico.
Abortar y deshacer
En cualquier momento, es posible abortar la operación en curso, o deshacer un comando
indeseado:
C-g abortar
C-x u deshacer
Archivos
Ventanas
Emacs permite dividir la pantalla en varias ventanas. En cada ventana se puede editar
texto e ingresar comandos independientemente. Esto es útil en dos situaciones: a) si necesi-
tamos editar un solo archivo, pero necesitamos ver su contenido en dos posiciones distintas
36
Dado que la mayorı́a de los teclados actuales no poseen la tecla META se emplea ya sea ESC o ALT.
www.elsolucionario.net
(por ejemplo, el comienzo y el final de archivos muy grandes); y b) si necesitamos editar o ver
varios archivos simultáneamente. Naturalmente, aunque son independientes, sólo es posible
editar un archivo a la vez. A la ventana en la cual se encuentra el cursor en un momento
dado le llamamos la “ventana actual”.
El cambio del cursor a una ventana cualquiera se puede hacer también rápidamente a
través del mouse.
Comandos de movimiento
Algunos de estos comandos tienen dos teclas asociadas, como se indica a continuación.
www.elsolucionario.net
C-b o ← izquierda un carácter C-f o → derecha un carácter
C-p o ↑ arriba una lı́nea C-n o ↓ abajo una lı́nea
C-a o Home principio de la lı́nea C-e o End fin de la lı́nea
M-< o C-Home principio del documento M-> o C-End fin del documento
M-f o M-→ avanza una palabra M-b o M-← retrocede una palabra
C-v o Page Up avanza una página M-v o Page Down retrocede una página
M-g (número) salta a la lı́nea (número) C-l refresca la pantalla
Mayúsculas y minúsculas
M-u Cambia a mayúscula desde la posición del cursor hasta el fin de la palabra
M-l Cambia a minúscula desde la posición del cursor hasta el fin de la palabra
M-c Cambia a mayúscula el carácter en la posición del cursor y
a minúscula hasta el fin de la palabra
www.elsolucionario.net
Por ejemplo, veamos el efecto de cada uno de estos comandos sobre la palabra EmAcS, si
el cursor está sobre la letra E (¡el efecto es distinto si está sobre cualquier otra letra!):
Transposición
Los siguientes comandos toman como referencia la posición actual del cursor. Por ejemplo,
C-t intercambia el carácter justo antes del cursor con el carácter justo después.
www.elsolucionario.net
Búsqueda y reemplazo
Si la intención era mover dicha porción, el procedimiento es el mismo, pero con el comando
C-w en vez de M-w. C-w también copia la región a un kill buffer, pero borra el texto de la
pantalla.
Resumiendo:
El concepto de kill buffer es mucho más poderoso que lo explicado recién. En realidad,
muchos comandos, no sólo M-w y C-w, copian texto en un kill buffer. En general, cualquier
comando que borre más de un carácter a la vez, lo hace. Por ejemplo, C-k borra una lı́nea.
Lo que hace no es sólo borrarla, sino además copiarla en un kill buffer. Lo mismo ocurre
con los comandos que borran palabras completas (M-d, M-Backspace), y muchos otros. Lo
www.elsolucionario.net
interesante es que C-y funciona también en todos esos casos: C-y lo único que hace es tomar
el último texto colocado en un kill buffer (resultado de la última operación que borró más de
un carácter a la vez), y lo coloca en el archivo. Por lo tanto, no sólo podemos copiar o mover
“regiones”, sino también palabras o lı́neas. Más aún, el kill buffer no es borrado con el C-y,
ası́ que ese mismo texto puede ser duplicado muchas veces. Continuará disponible con C-y
mientras no se ponga un nuevo texto en el kill buffer.
Además, emacs dispone no de uno sino de muchos kill buffers. Esto permite recuperar
texto borrado hace mucho rato. En efecto, cada vez que se borra más de un carácter de una
vez, se una un nuevo kill buffer. Por ejemplo, consideremos el texto:
Si en este párrafo borramos la primera lı́nea (con C-k), después borramos la primera
palabra de la segunda (con M-d, por ejemplo), y luego la segunda palabra de la última,
entonces habrá tres kill buffers ocupados:
Al colocar el cursor después del punto final, C-y toma el contenido del último kill buffer
y lo coloca en el texto:
segunda linea,
y la tercera. finalmente
segunda linea,
y la tercera. la
buffer 1 : finalmente
buffer 2 : La primera linea del texto,
buffer 3 : la
Sucesivas aplicaciones de M-y después de un C-y rotan sobre todos los kill buffers (que
pueden ser muchos). El editor, ası́, conserva un conjunto de las últimas zonas borradas durante
la edición, pudiendo recuperarse una antigua a pesar de haber seleccionado una nueva zona,
o borrado una nueva palabra o lı́nea. Toda la información en los kill buffers se pierde al salir
de emacs (C-c).
Resumimos entonces los comandos para manejo de los kill buffers:
www.elsolucionario.net
C-y Copia el contenido del último kill buffer ocupado
M-y Rota los kill buffers ocupados
Definición de macros
La clave de la configurabilidad de emacs está en la posibilidad de definir nuevos comandos
que modifiquen su comportamiento o agreguen nuevas funciones de acuerdo a nuestras nece-
sidades. Un modo de hacerlo es a través del archivo de configuración $HOME/.emacs, para lo
cual se sugiere leer la documentación disponible en la distribución instalada. Sin embargo, si
sólo necesitamos un nuevo comando en la sesión de trabajo actual, un modo más simple es
definir una macro, un conjunto de órdenes que son ejecutados como un solo comando. Los
comandos relevantes son:
Todas las sucesiones de teclas y comandos dados entre C-x ( y C-x ) son recordados por
emacs, y después pueden ser ejecutados de una vez con C-x e.
Como ejemplo, consideremos el siguiente texto, con los cinco primeros lugares del ránking
ATP (sistema de entrada) al 26 de marzo de 2002:
Supongamos que queremos: (a) poner los nombres y apellidos con mayúscula (como de-
berı́a ser); (b) poner las siglas de paı́ses sólo en mayúsculas.
Para definir una macro, colocamos el cursor al comienzo de la primera lı́nea, en el 1,
y damos C-x (. Ahora realizamos todos los comandos necesarios para hacer las tres tareas
solicitadas para el primer jugador solamente: M-f (avanza una palabra, hasta el espacio antes
de hewitt; M-c M-c (cambia a Hewitt, Lleyton); M-u (cambia a AUS); Home (vuelve el
cursor al comienzo de la lı́nea); ↓ (coloca el cursor al comienzo de la lı́nea siguiente, en el 2).
Los dos últimos pasos son importantes, porque dejan el cursor en la posición correcta para
ejecutar el comando nuevamente. Ahora terminamos la definición con C-x ). Listo. Si ahora
ejecutamos la macro, con C-x e, veremos que la segunda lı́nea queda modificada igual que
la primera, y ası́ podemos continuar hasta el final:
www.elsolucionario.net
5 Haas, Tommy (GER)
M-(number)
Por ejemplo, si deseamos escribir 20 letras e, basta teclear M-20 e. Esto es particularmente
útil con las macros definidos por el usuario. En el ejemplo anterior, con el ránking ATP,
después de definir la macro quedamos en la lı́nea 2, y en vez de ejecutar C-x e 4 veces,
podemos teclear M-4 C-x e, con el mismo resultado, pero en mucho menos tiempo.
Para terminar la discusión de este editor, diremos que es conveniente conocer las secuencias
de control básico de emacs:
C-a, C-e, C-k, C-y, C-w, C-t, C-d, etc.,
porque funcionan para editar la lı́nea de comandos en el shell, como también en muchos
programas de texto y en ventanas de diálogo de las aplicaciones X Windows. A su vez, los
editores jed, xjed, jove también usan por defecto estas combinaciones.
www.elsolucionario.net
www.elsolucionario.net
Window Manager (WM) Es un cliente con “privilegios especiales”: controla el compor-
tamiento (forma, tamaño,. . . ) del resto de clientes. Existen varios, destacando:
icewm : Ice Window Manager, uno de los window managers gnome compatible.
.fvwmrc archivo de configuración del fvwm. Ver las páginas del manual de fvwm.
.olwmrc archivo de configuración del olwm. Ver las páginas del manual de olwm.
En caso de que tengas que correr una aplicación de X que no esté disponible en la máquina
que estás usando, eso no representa ningún problema. Las órdenes necesarias son (por ejemplo,
para arrancar un gnome-terminal remoto):
www.elsolucionario.net
Si todo está previamente configurado, es posible que no haga falta dar el password.
Cuando quieres salir, normalmente puedes encontrar un icono con la opción Log out, en
un menú o panel de la pantalla.
www.elsolucionario.net
Comentaremos la pauta seguida por la mayorı́a de las aplicaciones, pero debe tenerse
presente que es muy frecuente encontrar aplicaciones que no las respetan.37
Existen dos modos para determinar cuál es la ventana activa, aquella que recibe las
entradas de teclado:
Focus Follows Mouse: La ventana que contenga al ratón es la que es activa. No usado
por defecto actualmente.
Click To Focus: La ventana seleccionada es la activa. El modo que esté activo depende
de la configuración del Window Manager.
8.11. Internet.
En esta sección denominaremos unix1 a la máquina local (desde donde ejecutamos la
orden) y unix2 a la máquina remota (con la que interaccionamos). Ambos son los hostnames
de las respectivas máquinas. Existen algunos conceptos que previamente debemos comentar:
hostname: es el nombre que tiene asociada la máquina (p.e. macul). A este nombre se
le suelen añadir una serie de sufijos separados por puntos que constituye el denominado
dominio (p.e. macul.ciencias.uchile.cl). Una máquina por tanto puede tener más
de un nombre reconocido (se habla en este caso de alias). Se denomina resolución
a la identificación entre un hostname y el IP-number correspondiente. La consulta
se realiza inicialmente en el archivo /etc/hosts, donde normalmente se guardan las
identificaciones de las máquinas más comúnmente empleadas. En caso de que no se
logre se accede al servicio DNS (Domain Name Service), que permite la identificación
(resolución) entre un hostname y un IP-number.
mail-address: es el nombre que se emplea para enviar correo electrónico. Este nombre
puede coincidir con el nombre de una máquina, pero se suele definir como un alias, con
objeto de que la dirección no deba de cambiarse si la máquina se estropea o se cambia
por otra.
www.elsolucionario.net
Existen muchos programas para la conexión de la red, los más usados son:
talk usuario1@unix2, intenta hacer una conexión para hablar con el usuario1 en la
máquina unix2. Existen varias versiones de talk en los diferentes sistemas operativos,
de forma que no siempre es posible establecer una comunicación entre máquinas con
sistemas operativos diferentes.
ftp unix2, (file transfer protocol) aplicación para copiar archivos entre máquinas de
una red. ftp exige un nombre de cuenta y password para la máquina remota. Algunas
de las opciones más empleadas (una vez establecida la conexión) son:
www.elsolucionario.net
www.elsolucionario.net
remota denominándolo rfile. En caso de no suministrarse el segundo argumento
supone igual nombre en ambas máquinas. También puede usarse send.
• mget rfile : igual que get, pero con más de un archivo (rfile puede contener
caracteres comodines).
• mput lfile : igual que put, pero con más de un archivo (lfile puede contener
caracteres comodines).
Existen versiones mejoradas de ftp con muchas más posibilidades, por ejemplo, ncftp.
También existen versiones gráficas de clientes ftp donde la elección de archivo, el sentido
de la transferencia y el modo de ésta, se elige con el mouse (p.e. wxftp).
rlogin -l nombre unix2, (remote login), hace un login a la máquina unix2 como el
usuario nombre por defecto, sin los argumentos -l nombre rlogin usa el nombre de la
cuenta local. Normalmente rlogin pide el password de la cuenta remota, pero con el
uso del archivo .rhosts o /etc/hosts.equiv esto no es siempre necesario.
rsh -l nombre unix2 orden, (remote shell ), ejecuta la orden en la máquina unix2
como usuario nombre. Es necesario que pueda entrar en la máquina remota sin password
para ejecutar una orden remota. Sin especificar orden actúa como rlogin.
Nomenclatura.
Veamos algunos conceptos relacionados con el correo electrónico:
Subject : Es una parte de un mensaje que piden los programas al comienzo y sirve
como tı́tulo para el mensaje.
www.elsolucionario.net
Cc (Carbon Copy) : Permite el envı́o de copias del mensaje que está siendo editado a
terceras personas.
Forward : Permite el envı́o de un mensaje (con modificaciones o sin ellas) a una tercera
persona.
In-Box : Es el archivo donde se almacena el correo que todavı́a no ha sido leı́do por el
usuario. Suele estar localizado en /var/spool/mail/user.
Aplicación mail.
Es posiblemente la aplicación más simple. Para la lectura de mail teclear simplemente:
mail y a continuación aparece un ı́ndice con los diferentes mensajes recibidos. Cada mensaje
tiene una lı́nea de identificación con número. Para leer un mensaje basta teclear su número y a
continuación return. Para enviar un mensaje: mail (address) se pregunta por el Subject:
y a continuación se introduce el mensaje. Para acabar se teclea sólo un punto en una lı́nea
o bien Ctr-D. Por último, se pregunta por Cc:. Es posible personalizar el funcionamiento
mediante el archivo $HOME/.mailrc. Para enviar un archivo de texto a través del correo se
suele emplear la redirección de entrada: mail (address) < file.
www.elsolucionario.net
algunas que no permiten la entrada a usuarios que no se identifican correctamente. Dada la
sobrecarga que existe, muchos de los servidores tienen limitado el número de usuarios que
pueden acceder simultáneamente.
8.11.4. WWW.
WWW son las siglas de World-Wide Web. Este servicio permite el acceso a información
entrelazada (dispone de un texto donde un término puede conducir a otro texto): hyperlinks.
Los archivos están realizados en un lenguaje denominado html. Para acceder a este servicio
es necesario disponer de un lector de dicho lenguaje conocido como browser o navegador.
Destacan actualmente: Netscape, Mozilla, Opera y el simple pero muy rápido Lynx.
8.12. Impresión.
Cuando se quiere obtener una copia impresa de un archivo se emplea el comando lpr.
lpr file - Envı́a el archivo file a la cola de impresión por defecto. Si la cola está activa-
da, la impresora lista y ningún trabajo por encima del enviado, nuestro trabajo será procesado
de forma automática.
A menudo existen varias posibles impresoras a las que poder enviar los trabajos. Para
seleccionar una impresora en concreto (en vez de la por defecto) se emplea el modificador:
lpr -Pimpresora, siendo impresora el nombre lógico asignado a esta otra impresora. Para
recibir una lista de las posibles impresoras de un sistema, ası́ como su estado, se puede em-
plear el comando /usr/sbin/lpc status. La lista de impresoras y su configuración también
está disponible en el archivo /etc/printcap.
Otras órdenes para la manipulación de la cola de impresión son:
lpq [-Pprinter], permite examinar el estado de una determinada cola (para ver la
cantidad de trabajos sin procesar de ésta, por ejemplo).
www.elsolucionario.net
www.elsolucionario.net
8.13. Compresión.
A menudo necesitamos comprimir un archivo para disminuir su tamaño, o bien crear un
respaldo (backup) de una determinada estructura de directorios. Se comentan a continuación
una serie de comandos que permiten ejecutar dichas acciones:
El compresor compress esta relativamente fuera de uso, pero es la estándar de unix.
zcat file.Z : muestra por el stdout el contenido descomprimido del archivo (sin
destruir el original).
Otra alternativa de compresor mucho más usada es gzip el compresor de GNU que posee
una mayor razón de compresión que compress. Veamos los comandos:
gzip file : comprime el archivo, creando el archivo file.gz, destruye el archivo ori-
ginal.
zless file.gz : muestra por el stdout el contenido descomprimido del archivo pagi-
nado por less.
La extensión empleada en los archivos comprimidos con gzip suele ser .gz pero a veces
se usa .gzip. Adicionalmente el programa gunzip también puede descomprimir archivos
creados con compress.
www.elsolucionario.net
La opción con mayor tasa de compresión que gzip es bzip2 y su descompresor bunzip2.
La extensión usada en este caso es .bz2. El kernel de Linux se distribuye en formato bzip2.
Existen también versiones de los compresores compatibles con otros sistemas operativos:
zip, unzip, unarj, lha, rar y zoo.
En caso que se desee crear un archivo comprimido con una estructura de directorios debe
ejecutarse la orden:
tar cvzf nombre.tgz directorio
o bien
tar cvjf nombre.tbz directorio
En el primer caso comprime con gzip y en el segundo con bzip2. Para descomprimir y
restablecer la estructura de directorio almacenada se usan los comandos:
tar xvzf nombre.tgz directorio
si se realizó la compresión con gzip o bien
tar xvjf nombre.tbz directorio
si se realizó la compresión con bzip2.
www.elsolucionario.net
www.elsolucionario.net
Capı́tulo 9
En este capı́tulo se intentará dar los elementos básicos del lenguaje de programación
C++. No se pretende más que satisfacer las mı́nimas necesidades del curso, sirviendo como
un ayuda de memoria de los tópicos abordados, para futura referencia. Se debe consignar que
no se consideran todas las posibilidades del lenguaje y las explicaciones están reducidas al
www.elsolucionario.net
mı́nimo.
283
www.elsolucionario.net
main devuelve un entero y por tanto debe ser declarada int. Los paréntesis vacı́os () indican
que el main no tiene argumentos de entrada (más adelante se verá que puede tenerlos). Lo
que está encerrado entre llaves {} corresponde al cuerpo de la función main. Cada una de
las lı́neas termina con el carácter ;. El identificador predefinido cout representa la salida a
pantalla. El operador << permite que lo que está a su derecha se le dé salida por el dispositivo
que está a su izquierda, en este caso cout. Si se quiere enviar más de un objeto al dispositivo
que está al inicio de la lı́nea agregamos otro operador <<, y en este caso lo que está a la derecha
del operador se agregará a lo que está a la izquierda y todo junto será enviado al dispositivo.
En nuestro caso se ha enviado endl, un objeto predefinido en el archivo iostream.h que
corresponde a un cambio de lı́nea, el cual será agregado al final del mensaje. La lı́nea final
contiene la instrucción de retorno del entero cero, return 0.
Si escribimos nuestro primer programa en el editor xemacs con el nombre de primero.cc
las instrucciones para editarlo, compilarlo y correrlo serán:
www.elsolucionario.net
jrogan@pucon:~/tmp$ ./primero
Hola.
jrogan@pucon:~/tmp$
//
// Segunda version incluye funcion adicional
//
#include <iostream>
void PrintHola()
{
cout << "Hola." << endl;
www.elsolucionario.net
int main()
{
PrintHola();
return 0;
}
La función debe estar definida antes de que sea ocupada, por eso va primero en el código
fuente. Como ya se dijo antes, la ejecución del programa comienza en la función main a
pesar de que no está primera en el código fuente. Los paréntesis vacı́os indican que la función
PrintHola no tiene argumentos y la palabra delante del nombre de la función indica el tipo
de dato que devuelve. En nuestro caso la palabra void indica que no devuelve nada a la
función main.
Una alternativa al código anterior es la siguiente:
www.elsolucionario.net
#include <iostream>
void PrintHola();
int main()
{
PrintHola();
return 0 ;
}
void PrintHola()
{
cout << "Hola." << endl;
}
– Longitud arbitraria.
www.elsolucionario.net
default goto register throw
int i;
i=10;
Esta necesidad de declarar cada variable a usar se relaciona con la caracterı́stica de C++ de
ser fuertemente “tipeado”2 . Algunos de los errores más habituales en programación se deben
al intento de asignar a variables valores que no corresponden a sus tipos originales. Si bien
esto puede no ser muy grave en ciertos contextos, a medida que los programas se vuelven
más complejos puede convertirse en un verdadero problema. El compilador de C++ es capaz
de detectar los usos indebidos de las variables pues conoce sus tipos, y de este modo nuestro
código se vuelve más seguro.
Es posible reunir las acciones de declaración e inicialización en una misma lı́nea:
int i=10;
o declarar más de una variable del mismo tipo simultáneamente, e inicializar algunas en la
misma lı́nea:
A veces se requiere que una variable no varı́e una vez que se le asigna un valor. Por ejemplo,
podrı́amos necesitar definir el valor de π = 3,14159..., y naturalmente no nos gustarı́a que,
por un descuido, a esa variable se le asignara otro valor en alguna parte del programa. Para
asegurarnos de que ello no ocurra, basta agregar el modificador const a la variable:
Para números reales se puede usar la notación exponencial. Por ejemplo, 1.5e-3 repre-
senta el número 1,5 · 10−3 .
Una variable puede ser declarada sólo una vez, pero naturalmente se le pueden asignar
valores en un número arbitrario de ocasiones.
Los tipos de variables disponibles son3 :
www.elsolucionario.net
int Enteros entre −215 = −32768 y 215 − 1 = 32767
o entre −231 = −2147483648 y 231 − 1 = 2147483647
short int
short Enteros entre −215 y 215 − 1.
long int
long Enteros entre −231 y 231 − 1.
unsigned int Enteros entre 0 y 216 − 1 o entre 0 y 232 − 1.
unsigned short Enteros entre 0 y 216 − 1.
unsigned long Enteros entre 0 y 232 − 1.
char Caracteres.
float Reales en los intervalos [−1,7 · 1038 , −0,29 · 10−38 ],
[0,29 · 10−38 , 1,7 · 1038 ]
(Precisión de unos 7 dı́gitos decimales.)
double Reales en los mismos intervalos que float,
pero con precisión de 16 decimales,
o en los intervalos [−0,9 · 10308 , −0,86 · 10−308 ]
y [0,86 · 10−308 , 0,9 · 10308 ], con precisión de 15 decimales.
char c = ’a’;
Además de las letras mayúsculas y minúsculas, y sı́mbolos como &, (, :, etc., hay una
serie de caracteres especiales (escape codes) que es posible asignar a una variable char. Ellos
son:
3
Los valores de los rangos indicados son simplemente representativos y dependen de la máquina utilizada.
Además, estos valores no corresponden exactamente a las versiones más recientes de C++.
www.elsolucionario.net
newline \n
horizontal tab \t
vertical tab \v
backspace \b
carriage return \r
form feed \f
alert (bell) \a
backslash \\
single quote \’
double quote \"
Por ejemplo, la lı́nea:
corresponde al output
www.elsolucionario.net
Primera columna Segunda columna
Segunda linea
#include <iostream>
int main()
{
int i, j ;
cout << "Ingrese dos numeros enteros: " ;
cin >> i >> j ;
cout << "Los dos numeros ingresados fueron: " << i <<" "<< j << endl ;
return 0;
}
+ - * /
www.elsolucionario.net
&& || !
9.1.8. Asignaciones.
a) Asignación simple. Podemos asignar a una variable un valor explı́cito, o el valor de otra
variable:
i = 1;
www.elsolucionario.net
j = k;
x = x + 2;
Si x fuera una variable matemática normal, esta expresión no tendrı́a sentido. Esta
expresión es posible porque el compilador interpreta a x de modo distinto a cada lado
del signo igual: a la derecha del signo igual se usa el valor contenido en la variable x
(por ejemplo, 10); a la izquierda del signo igual se usa la dirección de memoria en la
cual está alojada la variable x. De este modo, la asignación anterior tiene el efecto de
colocar en la dirección de memoria que contiene a x, el valor que tiene x más 2. En
general, todas las variables tienen un rvalue y un lvalue: el primero es el valor usado a
la derecha (right) del signo igual en una asignación, y el segundo es el valor usado a la
izquierda (left), es decir, su dirección de memoria.
b) Asignación compuesta.
La expresión x = x + 2 se puede reemplazar por x += 2.
Existen los operadores += -= *= /=
www.elsolucionario.net
cout << w << " " << x << " " << y << endl ;
return 0;
}
Los operadores para asignación compuesta, y los de incremento y decremento, no son sólo
abreviaciones. En realidad hay que preferirlas porque implican optimizaciones en el ejecutable
resultante.
int i = 3;
float x = 43.8;
cout << "Suma = " << x + i << endl;
a) Conversión explı́cita.
Si i es un int, por ejemplo, entonces float(i) la convierte en float. Ası́, el programa
anterior se puede reescribir:
int i = 3;
float x = 43.8;
cout << "Suma = " << x + float(i) << endl;
www.elsolucionario.net
Ahora la suma es claramente entre dos variables float, y se puede realizar. Sin em-
bargo, esto es bastante tedioso, por cuanto el programador debe realizar el trabajo de
conversión personalmente cada vez que en su código se desee sumar un real con un
número entero.
b) Conversión implı́cita.
En este caso, el compilador realiza las conversiones de modo automático, prefiriendo
siempre la conversión desde un tipo de variable de menor precisión a uno de mayor
precisión (de int a double, de short a int, etc.). Ası́, a pesar de lo que dijimos, el
código anterior habrı́a funcionado en su forma original. Evidentemente esto es muy
cómodo, porque no necesitamos hacer una conversión explı́cita cada vez que sumamos
un entero con un real. Sin embargo, debemos estar conscientes de que esta comodidad
sólo es posible porque ocurren varias cosas: primero, el compilador detecta el intento de
operar sobre dos variables que no son del mismo tipo; segundo, el compilador detecta,
en sus reglas internas, la posibilidad de cambiar uno de los tipos (int en este caso) al
otro (float); tercero, el compilador realiza la conversión, y finalmente la operación se
www.elsolucionario.net
puede llevar a cabo. Entender este proceso nos permitirá aprovechar las posibilidades
de la conversión implı́cita de tipos cuando nuestro código involucre tipos de variables
más complicados, y entender varios mensajes de error del compilador.
Es interesante notar cómo las conversiones implı́citas de tipos pueden tener consecuen-
cias insospechadas. Consideremos las tres expresiones:
i) x = (1/2) * (x + a/x) ;
ii) x = (0.5) * (x + a/x) ;
iii) x = (x + a/x)/2 ;
Si inicialmente x=0.5 y a=0.5, por ejemplo, i) entrega el valor x=0, mientras ii) y iii)
entregan el valor x=1.5. Lo que ocurre es que 1 y 2 son enteros, de modo que 1/2 = 0.
De acuerdo a lo que dijimos, uno esperarı́a que en i), como conviven números reales
con enteros, los números enteros fueran convertidos a reales y, por tanto, la expresión
tuviera el resultado esperado, 1.5. El problema es la prioridad de las operaciones. No
todas las operaciones tienen igual prioridad (las multiplicaciones y divisiones se realizan
antes que las sumas y restas, por ejemplo), y esto permite al compilador decidir cuál
operación efectuar primero. Cuando se encuentra con operaciones de igual prioridad
(dos multiplicaciones, por ejemplo), se procede a efectuarlas de izquierda a derecha.
Pues bien, en i), la primera operación es 1/2, una división entre enteros, i.e. cero. En
ii) no hay problema, porque todas son operaciones entre reales. Y en iii) la primera
operación es el paréntesis, que es una operación entre reales. Al dividir por 2 éste es
convertido a real antes de calcular el resultado.
i) aún podrı́a utilizarse, cambiando el prefactor del paréntesis a 1.0/2.0, una práctica
que serı́a conveniente adoptar como standard cuando queremos utilizar enteros den-
tro de expresiones reales, para evitar errores que pueden llegar a ser muy difı́ciles de
detectar.
www.elsolucionario.net
if (a==b) {
cout << "a es igual a b" << endl;
}
En este y en muchos de los ejemplos que siguen, los paréntesis cursivos son opcionales.
Ellos indican simplemente un grupo de instrucciones que debe ser tratado como una sola
www.elsolucionario.net
instrucción. En el ejemplo anterior, los paréntesis cursivos después del if (o después de
un while, for, etc. más adelante) indican el conjunto de instrucciones que deben o no
ejecutarse dependiendo de si cierta proposición es verdadera o falsa. Si ese conjunto de
instrucciones es una sola, se pueden omitir los paréntesis:
if (c!=d) {
cout << "c es distinto de d" << endl;
}
else {
cout << "c es igual a d" << endl;
}
if (e > f) {
cout << "e es mayor que f" << endl;
}
else if (e == f) {
cout << "e es igual a f" << endl;
}
else {
cout << "e es menor que f" << endl;
}
Para C++, una expresión verdadera es igual a 1, y una falsa es igual a 0. Esto es, cuando
escribimos if(e>f), y e>f es falsa, en realidad estamos diciendo if(0). A la inversa, 0
es considerada una expresión falsa, y cualquier valor no nulo es considerado una expresión
verdadera. Ası́, podrı́amos hacer que una porción del código siempre se ejecute (o nunca)
poniendo directamente if(1) o if(0), respectivamente.
Naturalmente, lo anterior no tiene mucho sentido, pero un error habitual (y particular-
www.elsolucionario.net
mente difı́cil de detectar) es escribir a = b en vez de a == b en una expresión lógica. Esto
normalmente trae consecuencias indeseadas, pues la asignación a = b es una función que se
evalúa siempre al nuevo valor de a. En efecto, una expresión como a=3 siempre equivale a
verdadero, y a=0 siempre equivale a falso. Por ejemplo, en el siguiente programa:
#include <iostream>
int main(){
int k=3;
if (k==3){
cout << "k es igual a 3" << endl;
}
k=4;
if (k=3){
cout << "k es igual a 3" << endl;
}
return 0;
}
k es igual a 3
k es igual a 3
if (a==b) {
c = 1;
} else {
c = 0;
}
Existen dos maneras de compactar este código. Éste se puede reemplazar por
if (a==b) c = 1;
else c = 0;
Sin embargo, esto no es recomendable por razones de claridad al leer el código. Una expresión
más compacta y clara, se consigue usando el operador ternario ? :
c = (a==b) ? 1 : 0;
www.elsolucionario.net
preferible para optimizar el ejecutable resultante.
9.2.3. switch.
La instrucción switch permite elegir múltiples opciones a partir del valor de una variable
entera. En el ejemplo siguiente tenemos que si i==1 la ejecución continuará a partir del caso
case 1:, si i==2 la ejecución continuará a partir del caso case 2: y ası́ sucesivamente. Si
i toma un valor que no está enumerado en ningún case y existe la etiqueta default, la
ejecución continuará a partir de ahı́. Si no existe default, la ejecución continúa luego del
último paréntesis cursivo.
switch (i)
{
case 1:
{
cout << "Caso 1." << endl;
}
break;
case 2:
{
cout << "Caso 2." << endl;
}
break;
default:
{
cout << "Otro caso." << endl;
}
break;
}
www.elsolucionario.net
La instrucción break permite que la ejecución del programa salte a la lı́nea siguiente después
de la serie de instrucciones asociadas a switch. De esta manera sólo se ejecutarán las lı́neas
correspondientes al case elegido y no el resto. Por ejemplo, si i==1 verı́amos en pantalla
sólo la lı́nea Caso 1. En el otro caso, si no existieran los break, y también i==1, entonces
verı́amos en pantalla las lı́neas Caso 1., Caso 2. y Otro caso. La instrucción default es
opcional.
9.2.4. for.
Una instrucción que permite repetir un bloque de instrucciones un número definido de
veces es el for. Su sintaxis comienza con una o varias inicializaciones, luego una condición
lógica de continuación mientras sea verdadera, y finalmente una o más expresiones que se
evalúan vuelta por vuelta no incluyendo la primera vez. Siguiendo al for(...) viene una
instrucción o un bloque de ellas encerradas entre paréntesis de llave. En el ejemplo siguiente
la variable entera i es inicializada al valor 1, luego se verifica que la condición lógica sea
cierta y se ejecuta el bloque de instrucciones. A la vuelta siguiente se evalúa la expresión a
www.elsolucionario.net
la extrema derecha (suele ser uno o más incrementadores), se verifica que la condición lógica
se mantenga cierta y se ejecuta nuevamente el bloque de instrucciones. Cuando la condición
lógica es falsa se termina el loop, saltando la ejecución a la lı́nea siguiente al paréntesis que
indica el fin del bloque de instrucciones del for. En este ejemplo, cuando i=4 la condición
de continuación será falsa y terminará la ejecución del for.
for (int i = 1; i < 4; i++) {
cout << "Valor del indice: " << i << endl;
}
El output correspondiente es:
Valor del indice: 1
Valor del indice: 2
Valor del indice: 3
Cualquier variable declarada en el primer argumento del for es local al loop. En este caso,
la variable i es local, y no interfiere con otras posibles variables i que existan en nuestro
código.
for es una instrucción particularmente flexible. En el primer y tercer argumento del for
se puede colocar más de una instrucción, separadas por comas. Esto permite, por ejemplo,
involucrar más de una variable en el ciclo. El código:
for (int i=0, k=20; (i<10) && (k<50); i++, k+=6) {
cout << "i + k = " << i + k << endl;
}
resulta en el output:
i + k = 20
i + k = 27
i + k = 34
www.elsolucionario.net
i + k = 41
i + k = 48
Además, la condición de continuación (segundo argumento del for), no tiene por qué de-
pender de las variables inicializadas en el primer argumento. Y el tercer argumento no tiene
por qué ser un incremento o decremento de las variables del loop; puede ser cualquier expre-
sión que queramos ejecutar cada vez que un ciclo termina. En el siguiente ejemplo, además
de incrementar los contadores en cada ciclo, se envı́a un mensaje a pantalla:
for (int i=1, k=2;k<20 && i<20;k++, i+=2, cout << "Fin iteracion" << endl){
cout << " i = " << i << endl;
cout << " k = " << k << endl;
}
El resultado:
i = 1, k = 2
www.elsolucionario.net
Fin iteracion
i = 3, k = 3
Fin iteracion
i = 5, k = 4
Todos los argumentos del for son opcionales (no los ;), por lo cual se puede tener un for
que carezca de inicialización y/o de condición de continuación y/o de una expresión que se
evalúe en cada iteración.
Un caso tı́pico en que se aprovecha la opcionalidad de los argumentos del for es para
tener un loop infinito, que puede servir para dejar el programa en pausa indefinida. Para salir
del loop (y en general, para detener cualquier programa en C++), hay que presionar ^C:
da la salida a pantalla:
0 1 2 3 4
for (int i=1, k=2;k<5 && i<8;k++, i+=2, cout << "Fin iteracion" << endl){
cout << " i = " << i << ", k = " << k << endl;
k = k+5;
}
El resultado es:
i = 1, k = 2
Fin iteracion
En vez de pasar por el ciclo tres veces, como ocurrı́a originalmente, el programa sale del loop,
al cabo del primer ciclo, k = 2 + 5 = 7 > 5.
En general no es una buena práctica modificar las variables internas del ciclo en medio
de él, porque no es muy ordenado, y el desorden normalmente conduce a los errores en
programación, pero ocasionalmente puede ser útil hacer uso de esta libertad que proporciona
el lenguaje. Los ciclos for pueden anidarse, tal que uno contenga a otro completamente.
www.elsolucionario.net
9.2.5. while.
La instrucción while permite repetir un bloque de instrucciones encerradas entre parénte-
sis de llave mientras la condición lógica que acompaña al while se mantenga cierta. La con-
dición es evaluada antes de que comience la primera iteración; si es falsa en ésta o en una
posterior evaluación no se ejecuta el bloque de instrucciones que le siguen y se continúa la
ejecución en la lı́nea siguiente al paréntesis que indica el fin del bloque asociado al while.
Hay que notar que la instrucción while podrı́a no ejecutarse ni una sola vez si la condición
no se cumple inicialmente. Un ejemplo simple:
int i=1;
while (i < 3) {
cout << i++ << " ";
}
que da por resultado: 1 2 3.
En el siguiente loop, la salida será: 5 4 3 2 1 (¿Por qué?)
int k=5 ;
while(k) {
cout << k-- <<" ";
}
do {
cout << "Este es un segundo loop infinito, ^C para detenerlo"<< endl;
} while (1);
9.2.7. goto.
Existe también en C++ una instrucción goto que permite saltar de un punto a otro del
programa (goto salto; permite saltar a la lı́nea que contiene la instrucción salto:). Sin
embargo, se considera una mala técnica de programación usar goto, y siempre se puede di-
señar un programa evitándolo. Es altamente no recomendable, pero si su utilización simplifica
el código se puede usar.
9.3. Funciones.
www.elsolucionario.net
Las funciones nos permiten programar partes del procedimiento por separado. Un ejemplo
simple de ellas lo vimos en la subsección 9.1.2.
9.3.2. return.
Si deseamos definir una función que calcule una raı́z cuadrada, evidentemente esperamos
que la función nos entregue un resultado: el valor de la raı́z cuadrada. En este caso hay que
traspasar el valor de una variable desde la función al programa que la llamó. Esto se consigue
con return. Veamos un ejemplo muy simple:
int numero(){
int i = 3;
return i;
}
int main(){
cout << "Llamamos a la funcion" << endl;
cout << "El numero es: " << numero() << endl;
int i = 5;
i = i + numero();
cout << "El numero mas 5 es: " << i << endl;
www.elsolucionario.net
return 0;
}
En este caso, la función simplemente entrega el valor de la variable interna i, es decir 3, el
cual puede ser usado para salida en pantalla o dentro de operaciones matemáticas corrientes.
Separando declaración e implementación de la función, el ejemplo anterior se escribe:
int numero();
int numero(){
int i = 3;
return i;
}
Dos observaciones útiles:
www.elsolucionario.net
a) La declaración de la función lleva antepuesto el tipo de variable que la función entrega.
En el ejemplo, la variable entregada es un entero, i, y la declaración debe ser, por tanto,
int numero(). Podemos tener funciones tipo double, char, long, etc., de acuerdo al
tipo de variable que corresponde a return.
b) La variable i que se usa dentro de main() y la que se usa dentro de numero() son
distintas. A pesar de que tienen el mismo nombre, se pueden usar independientemente
como si se llamaran distinto. Se dice que i es una variable local.
Después de return debe haber una expresión que se evalúe a una variable del tipo co-
rrespondiente, ya sea explı́citamente o a través de un cast implı́cito. Las siguientes funciones
devuelven un double al programa:
double f1(){
double l = 3.0;
return l;
}
double f2(){
double l = 3.0, m = 8e10;
return l*m;
}
double f3(){
int l = 3;
return l;
}
Sin embargo, la siguiente función hará que el compilador emita una advertencia, pues se
está tratando de devolver un double donde deberı́a ser un int, y la conversión implica una
pérdida de precisión:
www.elsolucionario.net
int f4(){
double l=3.0;
return l;
}
Naturalmente, podemos modificar la función anterior haciendo una conversión explı́cita antes
de devolver el valor: return int(l).
www.elsolucionario.net
return i;
}
int main(){
int i = 3;
cout << "El valor de la funcion es " << funcion(i)
<< endl;
cout << "El valor del parametro es " << i << endl;
return 0 ;
}
El valor de la funcion es 7
El valor del parametro es 3
La función funcion entrega el valor del parámetro más 4. Usamos el mismo nombre (i)
para las variables en main y funcion, pero son variables locales, ası́ que no interfieren. Lo
importante es notar que cuando se llama a la función, la reasignación del valor de i (i+=4)
ocurre sólo para la variable local en funcion; el parámetro externo mantiene su valor.
Separando declaración e implementación el ejemplo anterior se escribe:
int funcion(int);
int main(){...}
Si nuestra función necesita más parámetros, basta separarlos con comas, indicando para
cada uno su tipo:
int funcion2(int,double);
void funcion3(double,int,float);
double funcion4(float);
El compilador verifica cuidadosamente que cada función sea llamada con el número de
parámetros adecuados, y que cada parámetro corresponda al tipo especificado. En los ejem-
plos anteriores, funcion2 debe ser llamada siempre con dos argumentos, el primero de los
cuales es int y el segundo double. Como siempre, puede ser necesario un cast implı́cito (si se
llama funcion2 con el segundo argumento int, por ejemplo), pero si no existe una regla de
conversión automática (llamando a funcion2 con el primer argumento double, por ejemplo),
el compilador enviará una advertencia. Además, el compilador verifica que el valor de retorno
de la función sea usado como corresponde. Por ejemplo, en las dos lı́neas:
double m = funcion2(2,1e-3);
www.elsolucionario.net
int k = funcion4(0.4);
la primera compilará exitosamente (pero hay un cast implı́cito), y la segunda dará una
advertencia.
Existen dos modos de transferir parámetros a una función:
a) Por valor. Se le pasan los parámetros para que la función que es llamada copie sus
valores en sus propias variables locales, las cuales desaparecerán cuando la función
termine y no tienen nada que ver con las variables originales.
Hasta ahora, en todos los ejemplos de esta subsección el traspaso de parámetros ha sido
por valor. En la función int funcion(int), en el código de la página 300, lo que ha
ocurrido es que la función copia el valor de la variable externa i en una nueva variable
(que también se llama i, pero está en otra dirección de memoria). El valor con el que
trabaja la función es la copia, manteniendo inalterada la variable original.
int main()
{
int i = 3;
cout << "El valor de la funcion es " << funcion(i)
<< endl;
cout << "El valor del parametro es " << i << endl;
return 0;
www.elsolucionario.net
}
int funcion(int & i)
{
i+=4;
return i;
}
El valor de la funcion es 7
El valor del parametro es 7
Debido a que las variables dejan de ser locales, el paso de parámetros por referencia
debe ser usado con sabidurı́a. De hecho el ejemplo presentado es poco recomendable.
www.elsolucionario.net
Peor aún, el problema es no sólo que las variables dejan de ser locales, sino que es
imposible saber que no lo son desde el main. En efecto, el main en ambas versiones de
funcion es el mismo. Lo único que cambió es la declaración de la función. Puesto que un
usuario normal usualmente no conoce la declaración e implementación de cada función
que desea usar (pues pueden haber sido hechas por otros programadores), dejamos al
usuario en la indefensión.
Por otro lado, hay al menos dos situaciones en que el paso de referencia es la única
opción viable para entregar los parámetros. Un caso es cuando hay que cuidar el uso
de la memoria. Supongamos que una función necesita un parámetros que es una matriz
de 10 millones de filas por 10 millones de columnas. Seguramente estaremos llevando al
lı́mite los recursos de nuestra máquina, y serı́a una torpeza pasarle la matriz por valor:
ello involucrarı́a, primero, duplicar la memoria utilizada, con el consiguiente riesgo de
que nuestro programa se interrumpa; y segundo, harı́a el programa más lento, porque
la función necesitarı́a llenar su versión local de la matriz elemento por elemento. Es
decir, nada de eficiente. En esta situación, el paso por referencia es lo adecuado.
Un segundo caso en que el paso por referencia es recomendable es cuando efectivamente
nuestra intención es cambiar el valor de las variables. El ejemplo tı́pico es el intercambio
de dos variables entre sı́, digamos a1=1 y a2=3. Luego de ejecutar la función queremos
que a1=3 y a1=1. El siguiente código muestra la definición y el uso de una función para
esta tarea, y por cierto requiere el paso de parámetros por referencia:
#include <iostream>
void swap(int &,int &);
int main(){
int i = 3, k=10;
swap(i,k);
www.elsolucionario.net
El output es:
Primer argumento: 10
Segundo argumento: 3
En el ejemplo de la matriz anterior, serı́a interesante poder pasar el parámetro por refe-
www.elsolucionario.net
rencia, para ahorrar memoria y tiempo de ejecución, pero sin correr el riesgo de que nuestra
matriz gigantesca sea modificada por accidente. Afortunadamente existe el modo de hacerlo,
usando una palabra que ya hemos visto antes: const. En el siguiente código:
int f5(const int &);
int main(){...}
int f5(const int & i){...};
f5 recibirá su único argumento por referencia, pero, debido a la presencia del modificador
const, el compilador avisará si se intenta modificar el argumento en medio del código de la
función.
int main(){
cout << "El resultado default es " << funcion() << endl;
int i = 3;
cout << "Cuando el parametro vale " << i <<
" el resultado es " << funcion(i) << endl;
return 0;
}
www.elsolucionario.net
El resultado default es 9
Cuando el parametro vale 3 el resultado es 7
www.elsolucionario.net
ocupen los últimos m lugares:
En este caso, f1(2), f1(2,8), f2(2.3,5), f3(3), f3(), y muchas otras, son todas llamadas
válidas de estas funciones. Cada vez, los parámetros no especificados son reemplazados por
sus valores predeterminados.
double raiz(double);
Debido a la naturaleza de la función raı́z cuadrada, raiz() no tendrı́a sentido, y por tanto
no corresponde declararla con un valor default.
www.elsolucionario.net
Ahora debemos pensar en cómo calcular la raı́z cuadrada. Usando una variante del método
de Newton-Raphson, se obtiene que la secuencia
1 a
xn+1 = xn +
2 xn
√
converge a a cuando n → ∞. Por tanto, podemos calcular la raı́z cuadrada con aproxima-
ciones sucesivas. El cálculo terminará en el paso N , cuando la diferencia entre el cuadrado
de la aproximación actual, xN , y el valor de a, sea menor que un cierto número pequeño:
| x2N − a | < 1. El valor de determinará la precisión de nuestro cálculo. Un ejemplo de
código lo encontramos a continuación:
#include <iostream>
#include <cmath>
double raiz(double);
www.elsolucionario.net
int main(){
double r;
cout.precision(20);
cout << "Ingrese un numero: " << endl;
cin >> r;
cout << raiz(r) << endl;
return 0 ;
}
while (fabs(dx)>epsilon){
x = (x + a/x)/2;
dx = x*x - a;
cout << "x = " << x << ", precision = " << dx << endl;
}
return x;
}
Factorial.
Otro ejemplo útil es el cálculo del factorial, definido para números naturales:
www.elsolucionario.net
n! = n · (n − 1) · · · 2 · 1 , 0! ≡ 1 .
La estrategia natural es utilizar un ciclo for, determinado por una variable entera i, que
va desde 1 a n, guardando los resultados en una variable auxiliar que contiene el producto
de todos los números naturales desde 1 hasta i:
#include <iostream>
int factorial(int);
int main(){
int n=5 ;
cout << "El factorial de " << n << " es: " << factorial(n) << endl;
return 0 ;
}
int factorial(int i)
{
int f =1;
for (int j=1;j<=i;j++){
f = f*j;
}
return f;
}
Observar que la variable auxiliar f, que contiene el producto de los primeros i números
naturales, debe ser inicializada a 1. Si se inicializara a 0, factorial(n) serı́a 0 para todo n.
Esta función no considera el caso n=0, pero al menos para el resto de los naturales fun-
cionará bien.
www.elsolucionario.net
Alcance (scope) La sección del código durante la cual el nombre de una variable puede ser
usado. Comprende desde la declaración de la variable hasta el final del cuerpo de la
función donde es declarada.
Si la variable es declarada dentro de una función es local . Si es definida fuera de todas
las funciones (incluso fuera de main), la variable es global.
Visibilidad Indica cuáles de las variables, actualmente al alcance, pueden ser accesadas. En
nuestros ejemplos (subsección 9.3.3), la variable i en main aún está al alcance dentro
de la función funcion, pero no es visible, y por eso es posible reutilizar el nombre.
Tiempo de vida Indica cuándo las variables son creadas y cuándo destruidas. En general
www.elsolucionario.net
este concepto coincide con el alcance (las variables son creadas cuando son declaradas y
destruidas cuando la función dentro de la cual fueron declaradas termina), salvo porque
es posible definir: (a) variables dinámicas, que no tienen alcance, sino sólo tiempo de
vida; (b) variables estáticas, que conservan su valor entre llamadas sucesivas de una
función (estas variables tienen tiempo de vida mayor que su alcance). Para declarar
estas últimas se usa un modificador static.
#include <iostream>
int f();
int main(){
int f(){
int x=0;
x++;
return x;
}
La función f simplemente toma el valor inicial de x y le suma 1. Como cada vez que la
función es llamada la variable local x es creada e inicializada, el resultado de este programa
es siempre un 1 en pantalla:
www.elsolucionario.net
1
1
Ahora modifiquemos la función, haciendo que x sea una variable estática:
#include <iostream>
int f();
int main(){
int f(){
www.elsolucionario.net
static int x=0;
x++;
return x;
}
Ahora, al llamar a f por primera vez, la variable x es creada e inicializada, pero no
destruida cuando la función termina, de modo que conserva su valor cuando es llamada por
segunda vez:
1
2
Veamos un ejemplo de una variable estática en el cálculo del factorial:
int factorial2(int i=1){
static int fac = 1;
fac*=i;
return fac ;
}
int main (){
int n=5;
int m=n;
while(n>0) factorial2(n--);
cout << "El factorial de "<< m << " es = " << factorial2() << endl;
return 0 ;
}
La idea, si se desea calcular el factorial de 5, por ejemplo, es llamar a la función factorial2
una vez, con argumento n = 5, y después disminuir n en 1. Dentro de la función, una variable
estática (fac) aloja el valor 1 ∗ 5 = 5. Luego se llama nuevamente con n = 4, con lo cual
fac=1*5*4, y ası́ sucesivamente, hasta llegar a n = 1, momento en el cual fac=1*5*4*3*2*1.
www.elsolucionario.net
Al disminuir n en 1 una vez más, la condición del while es falsa y se sale del ciclo. Al llamar
una vez más a factorial2, esta vez sin argumentos, el programa asume que el argumento
tiene el valor predeterminado 1, y ası́ el resultado es 1*5*4*3*2*1*1, es decir 5!.
Observemos el uso del operador de decremento en este programa: factorial2(n--) llama
a la función con argumento n y después disminuye n en 1. Ésto es porque el operador de
decremento está actuando como sufijo, y es equivalente a las dos instrucciones:
factorial2(n);
n--;
www.elsolucionario.net
9.3.7. Recursión.
C++ soporta un tipo especial de técnica de programación, la recursión, que permite que
una función se llame a sı́ misma (esto es no trivial, por cuanto si definimos, digamos, una
función f, dentro del cuerpo de la implementación no hay ninguna declaración a una función
f, y por tanto en principio no se podrı́a usar f porque dicho nombre no estarı́a en scope;
C++ permite soslayar este hecho). La recursión permite definir de modo muy compacto una
función que calcule el factorial de un número entero n.
int main(){
int n=5;
cout << "El factorial de "<< n << " es = " << factorial3(n) << endl;
return 0;
}
Este tercer código para el cálculo del factorial sı́ considera el caso n = 0, y además es más
eficiente, al ser más compacto.
La recursión debe ser empleada con cuidado. Es importante asegurarse de que existe
una condición para la cual la recursión se detenga, de otro modo, caerı́amos en una recursión
infinita que harı́a inútil nuestro programa. En el caso del factorial, pudimos verificar que dicha
condición existe, por tanto el programa es finito. En situaciones más complicadas puede no
ser tan evidente, y es responsabilidad del programador —como siempre— revisar que todo
esté bajo control.
www.elsolucionario.net
g++ -Wall -o <salida> <fuente>.cc -lm
Para elevar a potencias enteras, es más conveniente usar la forma explı́cita en vez de la
función pow, i.e. calcular x^3 como x*x*x es más eficiente computacionalmente que pow(x,3),
debido a los algoritmos que usa pow para calcular potencias. Éstos son más convenientes
cuando las potencias no son enteras, en cuyo caso no existe una forma explı́cita en términos
de productos.
9.4. Punteros.
Una de las ventajas de C++ es permitir el acceso directo del programador a zonas de
memoria, ya sea para crearlas, asignarles un valor o destruirlas. Para ello, además de los tipos
de variables ya conocidos (int, double, etc.), C++ proporciona un nuevo tipo: el puntero.
www.elsolucionario.net
El puntero no contiene el valor de una variable, sino la dirección de memoria en la cual dicha
variable se encuentra.
Un pequeño ejemplo nos permite ver la diferencia entre un puntero y la variable a la cual
ese puntero “apunta”:
int main(){
int i = 42;
int * p = &i;
cout << "El valor del puntero es: " << p << endl;
cout << "Y apunta a la variable: " << *p << endl;
return 0;
}
En este programa definimos una variable i entera. Al crear esta variable, el programa
reservó un espacio adecuado en algún sector de la memoria. Luego pusimos, en esa dirección
de memoria, el valor 42. En la siguiente lı́nea creamos un puntero a i, que en este caso
denominamos p. Los punteros no son punteros a cualquier cosa, sino punteros a un tipo
www.elsolucionario.net
particular de variable. Ello es manifiesto en la forma de la declaración: int * p. En la
misma lı́nea asignamos a este puntero un valor. Ese valor debe ser también una dirección de
memoria, y para eso usamos &i, que es la dirección de memoria donde está i. Ya hemos visto
antes el uso de & para entregar una dirección de memoria, al estudiar paso de parámetros a
funciones por referencia (9.3.3).
Al ejecutar este programa vemos en pantalla los mensajes:
int main(){
int * p = new int;
*p = 42;
cout << "El valor del puntero es: " << p << endl;
cout << "Y apunta a la variable: " << *p << endl;
delete p;
www.elsolucionario.net
return 0;
}
La primera lı́nea crea un nuevo puntero a int llamado p. new verifica que haya suficiente
memoria para alojar un nuevo int, y si es ası́ reserva ese espacio de memoria. En p queda la
dirección de la memoria reservada. Esto es equivalente a la declaración int i; del programa
anterior, salvo que ahora la única manera de accesar esa dirección de memoria es a través del
puntero p. A continuación se coloca dentro de esa dirección (observar la presencia del operador
de dereferenciación *) el número 42. El programa manda a pantalla la misma información
que la versión anterior, salvo que seguramente el valor de p será distinto.
Finalmente, ya que el puntero no volverá a ser usado, la dirección de memoria debe ser
liberada para que nuestro u otros programas puedan utilizarla. Ello se realiza con el operador
delete. Todo puntero creado con new debe ser, cuando ya no se utilice, borrado con delete.
Ello evitará desagradables problemas en nuestro programa debido a fuga de memoria (memory
leak ).
Los punteros tienen gran importancia cuando de manejar datos dinámicos se trata, es
www.elsolucionario.net
decir, objetos que son creados durante la ejecución del programa, en número imposible de
predecir al momento de compilar. Por ejemplo, una aplicación X-windows normal que crea
una, dos, tres, etc. ventanas a medida que uno abre archivos. En este caso, cada ventana es
un objeto dinámico, creado durante la ejecución, y la única forma de manejarlo es a través
de un puntero a ese objeto, creado con new cuando la ventana es creada, y destruido con
delete cuando la ventana es cerrada.
int a[5];
double r[3] = {3.5, 4.1, -10.8};
char palabra[5];
Una vez declarada la matriz (digamos a[5]), los valores individuales se accesan con a[i],
con i desde 0 a 4. Por ejemplo, podemos inicializar los elementos de la matriz ası́:
a[0] = 3;
a[3] = 5; ...
o si queremos ingresarlos desde el teclado:
for (i = 0; i < 5; i++){
cin >> a[i];
}
Y si deseamos escribirlos en pantalla:
www.elsolucionario.net
int main(){
double matriz[5] = {3.5, 5.2, 2.4, -0.9, -10.8};
PrintMatriz(5, matriz);
return 0;
www.elsolucionario.net
}
Observemos que la función debe recibir dos parámetros, uno de los cuales es la dimensión
de la matriz. Esto se debe a que cuando las matrices son usadas como parámetros la infor-
mación de su dimensión no es traspasada, y debe ser comunicada independientemente. Una
ligera optimización al programa anterior es modificar main a:
int main()
{
const int dim = 5;
double matriz[dim] = {3.5, 5.2, 2.4, -0.9, -10.8};
PrintMatriz(dim, matriz);
return 0;
}
De este modo, si eventualmente cambiamos de opinión y deseamos trabajar con matrices
de longitud distinta, sólo hay que modificar una lı́nea de código (la primera) en todo el
programa, el cual puede llegar a ser bastante largo por cierto. (En el ejemplo, también habrı́a
que cambiar la lı́nea de inicialización de la matriz, porque asume que la matriz requiere sólo 5
elementos, pero de todos modos deberı́a ser clara la enorme conveniencia.) Podemos reescribir
este programa con un comando de preprocesador para hacer la definición de la dimensión:
#include <iostream>
#define DIM 5
www.elsolucionario.net
int main(){
double matriz[DIM] = {3.5, 5.2, 2.4, -0.9, -10.8};
PrintMatriz(DIM, matriz);
return 0;
}
www.elsolucionario.net
memoria con el comando delete.
#include <iostream>
int main()
{
cout<<"Ingrese la dimension deseada :" ;
int dim ;
cin >> dim ;
double * matriz = new double[dim] ; // Reserva la memoria
for(int i=0; i < dim; i++) {
cout << "Ingrese elemento "<< i <<" : ";
cin >> matriz[i] ;
}
Este ejemplo permite apreciar una gran ventaja del uso de punteros, al permitirnos libe-
rarnos de definir la dimensión de una matriz como una constante. Aquı́, dim es simplemente
un int. La asignación dinámica permite definir matrices cuya dimensión se determina recién
durante la ejecución.
Observemos finalmente que la liberación de memoria, en el caso de arreglos, se hace con
el operador delete [], no delete como en los punteros usuales.
www.elsolucionario.net
#include <iostream>
www.elsolucionario.net
int main(){
const int dimx=3, dimy=10;
double a[dimy][dimx];
a[0][0]=1;
a[3][2]=2;
a[9][2]=3;
int main()
{
int width;
int height;
width = 200;
height = 400;
www.elsolucionario.net
for (int i=0;i<width;i++){
for (int j=0;j<height;j++){
matriz[i][j] = 0;
}
}
resolver el problema es aceptar que una cadena tiene longitud arbitraria, pero debe indicar
dónde termina. Esto se hace con el char nulo: ’\0’. Ası́, para asignar a la variable palabra
el valor “Hola”, debe definirse como una matriz de dimensión 5 (una más que el número de
letras):
Para escribir “Hola” en pantalla basta recorrer los elementos de palabra uno a uno:
Si tuviéramos que hacer esto cada vez que queremos escribir algo a pantalla no serı́a muy
cómodo. Por ello, también podemos escribir “Hola” en pantalla simplemente con cout << "Hola",
y de hecho ése fue el primer ejemplo de este capı́tulo. De hecho, la declaración de palabra
www.elsolucionario.net
podrı́a haberse escrito:
Esto ya es bastante más cómodo, aunque persiste la inconsistencia de definir palabra con
dimensión 5, cuando en realidad al lado derecho de la asignación hay un objeto con sólo 4
elementos (visibles).
Éste y otros problemas asociados con el manejo convencional de cadenas en C++ se
resuelven incluyendo el header string.
string.
El código anterior se puede reescribir:
#include <iostream>
#include <string>
int main(){
string palabra = "Hola";
cout << palabra << endl;
return 0;
}
Observar que la lı́nea a incluir es #include <string>, sin la extensión “.h”. Al incluir
string, las cadenas pueden ser declaradas como objetos tipo string en vez de arreglos
de char. El hecho de que ya no tengamos que definir a priori la dimensión de la cadena
es una gran ventaja. De hecho, permite ingresar palabras desde el teclado trivialmente, sin
preocuparse de que el input del usuario sea demasiado grande (tal que supere la dimensión del
arreglo que podamos haber declarado inicialmente) o demasiado corto (tal que se traduzca
en un despilfarro de memoria por reservar más memoria para el arreglo de la que realmente
se necesita):
www.elsolucionario.net
#include <iostream>
#include <string>
int main(){
string palabra;
cin >> palabra;
return 0;
}
Además, este nuevo tipo string permite acceder a un sinnúmero de funciones adicionales
que facilitan enormemente el manejo de cadenas. Por ejemplo, las cadenas se pueden sumar,
donde la suma de cadenas a y b está definida (siguiendo la intuición) como la cadena que
resulta de poner b a continuación de a:
#include <iostream>
#include <string>
www.elsolucionario.net
int main(){
string texto1 = "Primera palabra";
string texto2 = "Segunda palabra";
cout << texto1 << endl << texto2 << endl;
cout << texto1 + ", " + texto2 << endl;
// La ultima linea es equivalente a:
// string texto3 = texto1 + ", " + texto2;
// cout << texto3 << endl;
return 0 ;
}
El output de este programa será: Primera palabra, Segunda palabra.
Dijimos que es muy fácil ingresar una cadena desde el teclado, pues no es necesario
definir la dimensión desde el comienzo. Sin embargo, el código anterior, usando cin, no
es muy general, porque el input termina cuando el usuario ingresa el primer cambio de
lı́nea o el primer espacio. Esto es muy cómodo cuando queremos ingresar una serie de va-
lores (por ejemplo, para llenar un arreglo), pues podemos ingresarlos ya sea en la forma:
1<Enter> 2<Enter> 3<Enter>, etc., o 1 2 3, etc, pero no es óptimo cuando deseamos in-
gresar texto, que podrı́a constar de más de una palabra y, por tanto, necesariamente incluirı́a
espacios (por ejemplo, al ingresar el nombre y apellido de una persona). Sin explicar dema-
siado por qué, digamos que la solución a este problema es utilizar una función asociada a cin
llamada gets, y que espera input desde el teclado hasta que el usuario dé el primer cambio
de lı́nea. Un ejemplo simple lo encontramos en el siguiente código:
#include <iostream>
#include <string>
int main(){
string texto1 = "El resultado es: " ;
char * texto2;
www.elsolucionario.net
cin.gets(&texto2);
cout << texto1 + string(texto2) << endl;
return 0;
}
www.elsolucionario.net
9.6. Manejo de archivos.
Una operación usual en todo tipo de programas es la interacción con archivos. Ya sea que
el programa necesite conocer ciertos parámetros de configuración, hacer análisis estadı́stico
sobre un gran número de datos generados por otro programa, entregar las coordenadas de
los puntos de una trayectoria para graficarlos posteriormente, etc., lo que se requiere es un
modo de ingresar datos desde, o poner datos en, archivos. En C++ ello se efectúa incluyendo
el header fstream.
#include <iostream>
#include <fstream>
int main(){
ofstream nombre_logico("nombre_fisico.dat");
int i = 3, j;
cout << i << endl;
nombre_logico << i << endl;
cout << "Ingrese un numero entero: ";
cin >> j;
cout << i << endl;
nombre_logico << j << endl;
nombre_logico.close();
return 0;
}
www.elsolucionario.net
La primera lı́nea de main define un objeto de tipo ofstream (output file stream). Es-
to corresponde a un archivo de salida. Dentro de main este archivo será identificado por
una variable llamada nombre_logico, y corresponderá a un archivo en el disco duro llama-
do nombre_fisico.dat. Naturalmente, el identificador nombre_logico puede ser cualquier
nombre de variable válido para C++, y nombre_fisico.dat puede ser cualquier nombre de
archivo válido para el sistema operativo. En particular, se pueden también dar nombres que
incluyan paths absolutos o relativos:
ofstream nombre_logico_1("/home/vmunoz/temp/nombre_fisico.dat");
ofstream nombre_logico_2("../nombre_fisico.dat");
Las lı́neas tercera y sexta de main envı́an a nombre_logico (es decir, escribe en
nombre_fisico.dat), las variables i y j. Observar la analogı́a que existe entre estas opera-
ciones y las que envı́an la misma información a pantalla.4 Si ejecutamos el programa y en
el teclado ingresamos el número 8, al finalizar la ejecución el archivo nombre_fisico.dat
tendrá los dos números escritos:
www.elsolucionario.net
3
8
Finalmente, el archivo creado debe ser cerrado (nombre_logico.close()). Si esta última
operación se omite en el código, no habrá errores de compilación, y el programa se encar-
gará de cerrar por sı́ solo los archivos abiertos durante su ejecución, pero un buen programador
debiera tener cuidado de cerrarlos explı́citamente. Por ejemplo, un mismo programa podrı́a
desear utilizar un mismo archivo más de una vez, o varios programas podrı́an querer acceder
al mismo archivo, y si no se ha insertado un close en el punto adecuado esto podrı́a provocar
problemas.
El archivo indicado al declarar la variable de tipo ofstream tiene modo de escritura, para
permitir la salida de datos hacia él. Si no existe un archivo llamado nombre_fisico.dat es
creado; si existe, los contenidos antiguos se pierden y son reemplazados por los nuevos. No
siempre deseamos este comportamiento. A veces deseamos agregar la salida de un programa
a un archivo de texto ya existente. En ese caso la declaración del archivo es diferente, para
crear el archivo en modo “append”:
#include <iostream>
#include <fstream>
int main(){
ofstream nombre_logico("nombre_fisico.dat",ios::app);
int i = 3;
return 0;
}
www.elsolucionario.net
es equivalente a ofstream a("b"). Esto tiene la ventaja de que podrı́amos usar el mismo
nombre lógico para identificar dos archivos fı́sicos distintos, usados en distintos momentos
del programa:
ofstream a;
a.open("archivo1.txt");
// Codigo en que "archivo1.txt" es utilizado
a.close();
a.open("archivo2.txt");
// Ahora "archivo2.txt" es utilizado
a.close();
Observar la necesidad del primer close, que permitirá liberar la asociación de a a un nombre
fı́sico dado, y reutilizar la variable lógica en otro momento.
En los ejemplos hemos escrito solamente variables de tipo int en los archivos. Esto por
cierto no es restrictivo. Cualquiera de los tipos de variables de C++ —float, double, char,
etc.— se puede enviar a un archivo del mismo modo. Dicho esto, en el resto de esta sección
seguiremos usando como ejemplo el uso de int.
el siguiente programa,
#include <iostream>
#include <fstream>
int main(){
ifstream nombre_logico("nombre_fisico.dat");
int i, j,k,l;
cout << i << "," << j << "," << k << "," << l << endl;
nombre_logico.close();
return 0;
www.elsolucionario.net
}
será equivalente a asignar i=3, j=6, k=9, l=12, y luego enviar los datos a pantalla. Observar
que la sintaxis para ingresar datos desde un archivo, nombre_logico >> i, es idéntica a
cin >> i, para hacerlo desde el teclado. Al igual que cin, espacios en blanco son equivalentes
a cambios de lı́nea, de modo que el archivo podrı́a haber sido también:
3 6 9 12
Por cierto, el ingreso de datos desde un archivo se puede hacer con cualquier técnica, por
ejemplo, usando un for:
ifstream nombre_logico("nombre_fisico.dat");
int i;
for (int j=0;j<10;j++){
nombre_logico >> i;
cout << i << ",";
}
nombre_logico.close();
}
Como con ofstream, es posible separar declaración e implementación:
ifstream a;
a.open("b");
a.close();
esos datos agregar más datos a continuación del mismo archivo, o reemplazar los datos ya
existentes con otros. Necesitamos entonces un tipo de variable flexible, que pueda ser usado
como entrada y salida. Ese tipo es fstream. Todo lo que hemos dicho para ofstream y
ifstream por separado es cierto simultáneamente para fstream.5 Para especificar si el archivo
debe ser abierto en modo de escritura o lectura, open contiene el argumento ios::out o
ios::in, respectivamente. Por ejemplo, el siguiente código escribe el número 4 en un archivo,
y luego lo lee desde el mismo archivo:
#include <iostream>
#include <fstream>
int main(){
fstream nombre_logico;
nombre_logico.open("nombre_fisico.dat",ios::out);
int i = 4,j;
www.elsolucionario.net
nombre_logico << i << endl;
nombre_logico.close();
nombre_logico.open("nombre_fisico.dat",ios::in);
nombre_logico >> j;
j = j++;
cout << j << endl;
nombre_logico.close();
return 0;
}
Las dos primeras lı́neas de main separan declaración y asignación, y son equivalentes a
fstream nombre_logico("nombre_fisico.dat",ios::out);, pero lo hemos escrito ası́ pa-
ra hacer evidente la simetrı́a entre el uso del archivo como salida primero y como entrada
después.
De lo anterior, se deduce que:
fstream archivo_salida("salida.dat",ios::out);
fstream archivo_entrada("entrada.dat",ios::in);
es equivalente a
ofstream archivo_salida("salida.dat");
ifstream archivo_entrada("entrada.dat");
5
Nuevamente, este hecho se debe al concepto de clases que subyace a las definiciones de estos tres tipos
de variables; fstream es una clase derivada a la vez de ofstream y de ifstream, heredando las propiedades
de ambas.
www.elsolucionario.net
www.elsolucionario.net
de modos especı́ficos.
¿Es posible hacer lo mismo con archivos ejecutables hechos por el usuario? La respuesta
es sı́, y para eso se usan los argumentos del main. Recordemos que main es una función,
pero hasta el momento no hemos aprovechado esa caracterı́stica. Simplemente sabemos que
el programa empieza a ejecutarse en la lı́nea donde está la función main. Además, siempre
hemos escrito esa lı́nea como main(). Sin embargo, main, como cualquier función, es capaz de
aceptar argumentos. Especı́ficamente, acepta dos argumentos, el primero es un entero (que
cuenta el número de argumentos que main recibió), y el segundo es un puntero a un arreglo
de caracteres (que contiene los distintos argumentos, en forma de cadenas de caracteres, que
se le entregaron).
Por ejemplo:
#include <iostream>
int main( int argc, char * argv[])
{
for(int i = 0; i < argc; i++) cout << argv[i] << endl ;
return 0;
}
Si llamamos a este programa argumentos, obtenemos distintas salidas al llamarlo con distin-
tos argumentos:
user@host:~/$ argumentos
argumentos
user@host:~/$ argumentos ap k
argumentos
ap
k
user@host:~/$ argumentos -t -s arg1
argumentos
www.elsolucionario.net
-t
-s
arg1
Observar que el primer argumento del programa es siempre el nombre del propio programa.
Naturalmente, éste es un ejemplo muy simple. Es tarea del programador decidir cómo manejar
cada una de las opciones o argumentos que se le entregan al programa desde la lı́nea de
comandos, escribiendo el código correspondiente.
Un segundo aspecto con el cual no hemos sido sistemáticos es que main, como toda función,
tiene un tipo de retorno. En el caso de main, ese tipo debe ser int. Este int es entregado al
sistema operativo, y puede servir para determinar si el programa se ejecutó con normalidad o
si ocurrió algo anormal. Podrı́amos hacer ese valor de retorno igual a 0 o 1, respectivamente.
Ası́, la siguiente estructura es correcta:
int main(){
www.elsolucionario.net
// Codigo
return 0;
}
main(){
// Codigo
}
void main(){
// Codigo
}
también compilan, pero el compilador emite una advertencia si es llamado con la opción
-Wall (Warning all ). En el primer caso, la advertencia es:
En el segundo:
En general, siempre es conveniente compilar con la opción -Wall, para lograr que nuestro
código esté realmente correcto (g++ -Wall <archivo>.cc -o <archivo>).
www.elsolucionario.net
9.8. Clases.
C++ dispone de una serie de tipos de variables con las cuales nos está permitido operar:
int, double, char, etc. Creamos variables de estos tipos y luego podemos operar con ellas:
int x, y;
x = 3;
y = 6;
int z = x + y;
No hay, sin embargo, en C++, una estructura predefinida que corresponda a números
complejos, vectores de dimensión n o matrices, por ejemplo. Y sin embargo, nos agradarı́a
disponer de números complejos que pudiéramos definir como
z = (3,5);
w = (6,8);
y que tuvieran sentido las expresiones
www.elsolucionario.net
a = z + w;
b = z * w;
c = z / w;
d = z + 3;
e = modulo(z);
f = sqrt(z);
Todas estas expresiones son completamente naturales desde el punto de vista matemático,
y serı́a bueno que el lenguaje las entendiera. Esto es imposible en el estado actual, pues, por
ejemplo, el signo + es un operador que espera a ambos lados suyos un número. Sumar cualquier
cosa con cualquier cosa no significa nada necesariamente, ası́ que sólo está permitido operar
con números. Pero los humanos sabemos que los complejos son números. ¿Cómo decı́rselo
al computador? ¿Cómo convencerlo de que sumar vectores o matrices es también posible
matemáticamente, y que el mismo signo + deberı́a servir para todas estas operaciones?
La respuesta es: a través del concepto de clases. Lo que debemos hacer es definir una clase
de números complejos. Llamémosla Complejo. Una vez definida correctamente, Complejo
será un tipo más de variable que el compilador reconocerá, igual que int, double, char, etc.
Y será tan fácil operar con los Complejos como con todos los tipos de variables preexistentes.
Esta facilidad es la base de la extensibilidad de que es capaz C++, y por tanto de todas las
propiedades que lo convierten en un lenguaje muy poderoso.
Las clases responden a la necesidad del programador de construir objetos o tipos de datos
que respondan a sus necesidades. Si necesitamos trabajar con vectores de 5 coordenadas,
será natural definir una clase que corresponda a vectores con 5 coordenadas; si se trata de
un programa de administración de personal, la clase puede corresponder a un empleado, con
sus datos personales como elementos.
Si bien es cierto uno puede trabajar con clases en el contexto de orientación al procedi-
miento, las clases muestran con mayor propiedad su potencial con la orientación al objeto,
donde cada objeto corresponde a una clase. Por ejemplo, para efectuar una aplicación para
X-windows, la ventana principal, las ventanas de los archivos abiertos, la barra de menú, las
cajas de diálogo, los botones, etc., cada uno de estos objetos estará asociado a una clase.
www.elsolucionario.net
9.8.1. Definición.
Digamos que queremos una clase para representar a los empleados de una empresa.
Llamémosla Persona. La convención aceptada es que los nombres de las clases comiencen
con mayúscula. Esto es porque las clases, recordemos, corresponderán a tipos de variables
tan válidos como los internos de C++ (int, char, etc.). Al usar nombres con mayúscula
distinguimos visualmente los nombres de un tipo de variable interno y uno definido por el
usuario.
La estructura mı́nima de la definición de la clase Persona es:
class Persona
{
};
www.elsolucionario.net
9.8.2. Miembros.
Se denomina miembros de una clase a todas las variables y funciones declaradas dentro de
una clase. Por ejemplo, para personas, es natural caracterizarlas por su nombre y su edad. Y
si se trata de empleados de una empresa, es natural también tener una función que entregue
su sueldo:
class Persona
{
string nombre;
fecha nacimiento;
int rut;
double edad();
};
Los miembros de una clase pueden tener cualquier nombre, excepto el nombre de la propia
clase dentro de la cual se definen, ese nombre está reservado.
class Complejo
{
private:
double real, imaginaria;
public:
void setreal(double);
void setimag(double);
double getreal();
double getimag();
};
En este ejemplo, los miembros privados son sólo variables, y los miembros públicos son sólo
funciones. Éste es el caso tı́pico, pero puede haber variables y funciones de ambos tipos.
www.elsolucionario.net
Hemos definido una clase de números complejos y funciones que nos permiten conocer
y modificar las partes real e imaginaria. ¿Cómo se usan estos elementos? Consideremos el
siguiente programa de ejemplo:
class Complejo
{
private:
double real, imaginaria;
public:
void setreal(double);
void setimag(double);
double getreal();
double getimag();
};
int main()
{
Complejo z, w;
z.setreal(3);
z.setimag(2.8);
w.setreal(1.5);
w.setimag(5);
cout << "El primer numero complejo es: " << z.getreal()
<< " + i*" << z.getimag() << endl;
cout << "El segundo es: " << w.getreal() << " + i*"
<< z.getimag() << endl;
return 0;
}
www.elsolucionario.net
Vemos en la primera lı́nea de main cómo la clase Complejo se usa del mismo modo que
usarı́amos int o double. Ahora Complejo es un tipo de variable tan válido como los tipos
predefinidos por C++. Una vez definida la variable, el operador de selección (.) permite
acceder a las funciones públicas correspondientes a la clase Complejo, aplicadas a la variable
particular que nos interesa: z.setreal(3) pone en la parte real del Complejo z el número
3, y w.setreal(1.5) hace lo propio con w.
void Complejo::setreal(double x)
{
real = x;
}
www.elsolucionario.net
void Complejo::setimag(double x)
{
imaginaria = x;
}
double Complejo::getreal()
{
return real;
}
double Complejo::getimag()
{
return imaginaria;
}
Como toda función, primero va el tipo de la función (void o double en los ejemplos), luego
el nombre de la función y los argumentos. Finalmente la implementación. Lo diferente es que
el nombre va precedido del nombre de la clase y el operador “::” .
9.8.6. Constructor.
Al declarar una variable, el programa crea el espacio de memoria suficiente para alojarla.
Cuando se trata de variables de tipos predefinidos en C++ esto no es problema, pero cuando
son tipos definidos por el usuario, C++ debe saber cómo construir ese espacio. La función
que realiza esa tarea se denomina constructor.
El constructor es una función pública de la clase, que tiene el mismo nombre que ella.
Agreguemos un constructor a la clase Complejo:
class Complejo
www.elsolucionario.net
{
private:
double real,imaginaria;
public:
Complejo(double,double);
void setreal(double);
void setimag(double);
double getreal();
double getimag();
};
www.elsolucionario.net
tipo Complejo y asignarles valores sin usar setreal() o setimag():
Complejo z (2, 3.8);
Complejo w = Complejo(6.8, -3);
En el constructor se inicializan las variables internas que nos interesa inicializar al mo-
mento de crear un objeto de esta clase.
Si una de las variables internas a inicializar es una cadena de caracteres, hay que inicia-
lizarla de modo un poco distinto. Por ejemplo, si estamos haciendo una clase OtraPersona
que sólo tenga el nombre de una persona, entonces podemos definir la clase y su constructor
en la forma:
class OtraPersona
{
private:
char nombre[20];
public:
Persona(char []);
};
Persona::Persona(char a[])
{
strcpy(nombre,a);
}
Si uno no especifica el constructor de una clase C++ crea uno default, pero en general
será insuficiente para cualquier aplicación realmente práctica. Es una mala costumbre ser
descuidado y dejar estas decisiones al computador.
9.8.7. Destructor.
Ası́ como es necesario crear espacio de memoria al definir una variable, hay que deshacerse
de ese espacio cuando la variable deja de ser necesaria. En otras palabras, la clase necesita
www.elsolucionario.net
class Complejo
{
private:
double real, imaginaria;
public:
Complejo(double,double);
~Complejo();
void setreal(double);
void setimag(double);
double getreal();
double getimag();
};
www.elsolucionario.net
Complejo::Complejo (double x, double y): real(x), imaginaria(y)
{
}
Complejo::~Complejo()
{
}
Como con los constructores, al omitir un destructor C++ genera un default, pero es una
mala costumbre. . . , etc.
Complejo z[2];
9.9. Sobrecarga.
Para que la definición de nuevos objetos sea realmente útil, hay que ser capaz de hacer
con ellos muchas acciones que nos serı́an naturales. Como ya comentamos al introducir el
concepto de clase, nos gustarı́a sumar números complejos, y que esa suma utilizara el mismo
www.elsolucionario.net
signo + de la suma usual. O extraerles la raı́z cuadrada, y que la operación sea tan fácil
como escribir sqrt(z). Lo que estamos pidiendo es que el operador + o la función sqrt()
sean polimórficos, es decir, que actúen de distinto modo según el tipo de argumento que
se entregue. Si z es un real, sqrt(z) calculará la raı́z de un número real; si es complejo,
calculará la raı́z de un número complejo.
La técnica de programación mediante la cual podemos definir funciones polimórficas se
llama sobrecarga.
Complejo sqrt(Complejo z)
www.elsolucionario.net
{
return Complejo (z.getreal()/2, z.getimag()/2);
}
Observemos que definimos una función sqrt que acepta argumentos de tipo Complejo, y que
entrega un número del mismo tipo. Cuando pidamos la raı́z de un número, el computador
se preguntará si el número en cuestión es un int, double, float o Complejo, y según eso
escogerá la versión de sqrt que corresponda.
Con la definición anterior podemos obtener la raı́z cuadrada de un número complejo
simplemente con las instrucciones:
Complejo z(1,3);
Complejo raiz = sqrt(z);
9.9.3. Coerción.
Sabemos definir a + b, con a y b complejos. Pero ¿qué pasa si a o b son enteros? ¿O reales?
Pareciera que tendrı́amos que definir no sólo
www.elsolucionario.net
www.elsolucionario.net
Complejo c = Complejo(3.5);
resultando el número complejo 3,5 + i · 0. Y si tenemos una lı́nea del tipo:
Complejo c = Complejo(3,2.8) + 5;
el computador convertirá implı́citamente el entero 5 a Complejo (sabe cómo hacerlo porque
el constructor de números complejos acepta también un solo argumento en vez de dos), y
luego realizará la suma entre dos complejos, que es entonces la única que es necesario definir.
9.10. Herencia.
Herencia es el mecanismo mediante el cual es posible definir clases a partir de otras,
preservando parte de las propiedades de la primera y agregando o modificando otras.
Por ejemplo, si definimos la clase Persona, toda Persona tendrá una variable miembro
que sea su nombre. Si definimos una clase Hombre, también será Persona, y por tanto deberı́a
tener nombre. Pero además puede tener esposa. Y ciertamente no toda Persona tiene esposa.
Sólo un Hombre.
C++ provee mecanismos para implementar estas relaciones lógicas y poder definir una
clase Hombre a partir de Persona. Lo vemos en el siguiente ejemplo:
class Persona
{
private:
string nombre;
public:
Persona(string = "");
~Persona();
string getname();
}
www.elsolucionario.net
Primero definimos una clase Persona que tiene nombre. Luego definimos una clase Hombre
a partir de Persona (con la lı́nea class Hombre : public Persona). Esto permite de modo
automático que Hombre tenga también una variable nombre. Y finalmente, dentro de la clase
Hombre, se definen todas aquellas caracterı́sticas adicionales que una Persona no tiene pero
www.elsolucionario.net
un Hombre sı́: esposa, y funciones miembros para modificar y obtener el nombre de ella.
Un ejemplo de uso de estas dos clases:
Persona cocinera("Maria");
Hombre panadero("Claudio");
panadero.setwife("Estela");
Observemos que panadero también tiene una función getname(), a pesar de que la clase
Hombre no la define explı́citamente. Esta función se ha heredado de la clase de la cual Hombre
se ha derivado, Persona.
-o exename define el nombre del ejecutable creado, en lugar del por defecto a.out.
g++ -o outputfile filename.cc
-On optimización de grado n que puede tomar valores de 1 (por defecto) a 3. El objetivo
inicial del compilador es reducir el tiempo de la compilación. Con -On, el compilador
trata de reducir el tamaño del ejecutable y el tiempo de ejecución, con n se aumenta el
grado de optimización.
-Wall notifica todos los posibles warnings en el código que está siendo compilado.
www.elsolucionario.net
El compilador gcc (the GNU C compiler) es compatible ANSI.
www.elsolucionario.net
es denominado una regla.
Si make se ejecuta sin argumentos, sólo se ejecutará el primer destino. Veamos un ejemplo:
file.o: file.cc file.h
g++ -c file.cc
En este caso se comprueban las fechas de las última modificaciones de los archivos file.cc y
file.h; si esta fecha es más reciente que las del archivo file.o se procede a la compilación.
El comando make se puede suministrar con un argumento, que indica la etiqueta situada
a la izquierda de los dos puntos. Ası́ en el ejemplo anterior podrı́a invocarse make file.o..
Gracias a las variables, un Makefile se puede simplificar significativamente. Las variables
se definen de la siguiente manera:
VARIABLE1=valor1
VARIABLE2=valor2
Una variable puede ser utilizada en el resto del Makefile refiriéndonos a ella con la expresión
$(VARIABLE). Por defecto, make sabe las órdenes y dependencias (reglas implı́citas) para
compilar un archivo *.cc y producir un archivo *.o, entonces basta especificar solamente
las dependencias que make no puede deducir a partir de los nombres de los archivos, por
ejemplo:
OUTPUTFILE = prog
OBJS = prog.o misc.o aux.o
INCLUDESMISC = misc.h aux.h
INCLUDESFILE = foo.h $(INCLUDESMISC)
LIBS = -lmylib -lg++ -lm
prog.o: $(INCLUDESFILE)
misc.o: $(INCLUDESMISC)
aux.o: aux.h
$(OUTPUTFILE): $(OBJS)
www.elsolucionario.net
Las reglas patrones son reglas en las cuales se especifican múltiples destinos y construye
el nombre de las dependencias para cada blanco basada en el nombre del blanco. La sintaxis
de una regla patrón:
La lista de destinos especifica aquellos sobre los que se aplicará la regla. El destino patrón y
las dependencias patrones dicen cómo calcular las dependencias para cada destino. Veamos
un ejemplo:
objects = foo.o \
bar.o
all: $(objects)
www.elsolucionario.net
$(objects): %.o: %.cc
$(CXX) -c $(CFLAGS) $< -o $@
Cada uno de los destinos (foo.o bar.o) es comparado con el destino patrón %.o para extraer
parte de su nombre. La parte que se extrae es conocida como el tronco o stem, foo y bar en
este caso. A partir del tronco y la regla patrón de las dependencias %.cc make construye los
nombres completos de ellas (foo.cc bar.cc). Además, en el comando del ejemplo anterior
aparecen un tipo de variables especiales conocidas como automáticas. La variable $< man-
tiene el nombre de la dependencia actual y la variable $@ mantiene el nombre del destino
actual. Finalmente un ejemplo completo:
#
# Makefile para el programa eapp
#_________________________________________________________
CXX = g++
CXXFLAGS = -Wall -O3 -mcpu=i686 -march=i686
#CXXFLAGS = -Wall -g
LIBS = -lm
BIN = eapp
$(BIN): $(OBJECTS)
$(OBJECTS): %.o:%.cc
$(CXX) -c $(CXXFLAGS) $< -o $@
clean:
rm -fr $(OBJECTS) $(BIN)
#End
www.elsolucionario.net
www.elsolucionario.net
Capı́tulo 10
Gráfica.
versión final 2.2-021217
www.elsolucionario.net
sencilla de manejar y con amplia documentación.
339
www.elsolucionario.net
www.elsolucionario.net
El problema de transformar de un formato a otro es una situación usual en el trabajo
con archivos gráficos. Muchos softwares tienen salidas muy restringidas en formato o con
formatos arcaicos (gif) y se presenta la necesidad de convertir estos archivos de salida en
otros formatos que nos sean más manejables o prácticos. Como ya se mencionó, gimp puede
ser usado para convertir entre formatos gráficos. También display permite este hecho. Sin
embargo, en ambos casos la conversión es vı́a menús, lo cual lo hace engorroso para un gran
número de conversiones e imposible para conversiones de tipo automático. Existe un programa
llamado convert que realiza conversiones desde la lı́nea de comando. Este programa junto
con display, import y varios otros forman la suite gráfica ImageMagick, una de las más
importantes en unix, en general, y en especial en Linux y que ya ha sido migrada a otras
plataformas. Además, de la clara ventaja de automatización que proporciona convert, posee
otro aspecto interesante, puede convertir un grupo de imágenes asociadas en una secuencia
de animación o pelı́cula. Veamos la sintaxis para este programa:
existe un programa, miembro también de la suite ImageMagick, llamado import que permite
hacer el trabajo. La sintaxis es
import figure.eps
www.elsolucionario.net
sus posibilidades para modificar imágenes se aplica también en el caso de crearlas. En el
caso de necesitar imágenes más bien técnicas como esquemas o diagramas o una ilustración
para aclarar un problema la alternativa de xfig es muy poderosa. El programa xfig es una
herramienta manejada por menús que permite dibujar y manipular objetos interactivamente.
Las imágenes pueden ser salvadas, en formato xfig, y posteriormente editadas. La documen-
tación del programa está en html y es fácil de accesar y muy completa. La gran ventaja de
xfig es que trabaja con objetos y no con bitmaps. Además, puede exportar las imágenes
a una gran cantidad de formatos: LATEX, Metafont, PostScript o Encapsulated PostScript o
bien gif, jpeg y muchos otros.
Habitualmente los dibujos necesarios para ilustrar problemas en Fı́sica en tareas, pruebas
y apuntes son realizados con este software, exportados a PostScript e incluidos en los res-
pectivos archivos LATEX. También existe una herramienta extremadamente útil que permite
convertir un archivo PostScript, generado de cualquier manera, a un archivo fig que puede
ser editado y modificado. Esta aplicación que transforma se llama pstoedit y puede llegar
a ser realmente práctica.
Una aparente limitación de xfig es que se podrı́a pensar que no podemos incluir curvas
analı́ticas, es decir, si necesitamos ilustrar una función gaussiana no podemos pretender “di-
bujarla” con las herramientas de que dispone xfig ¿cómo resolver este problema?, simple
veremos que un software que grafica funciones analı́ticas como gnuplot permite exportar en
formato fig luego xfig puede leer el archivo y editarlo. Además, xfig permite importar e
incluir imágenes del tipo bitmap, agregando riqueza a los diagramas que puede generar.
Una caracterı́stica destacable del programa es que trabaja por capas, las cuales son trata-
das independientemente, uno puede poner un objeto sobre otro o por debajo de otro logrando
diferentes efectos. Algunos programas de presentación gráficos basados en LATEX y pdf están
utilizando esta capacidad para lograr animaciones de imágenes.
Finalmente este programa permite construir una biblioteca de objetos reutilizables aho-
rrando mucho trabajo. Por ejemplo, si uno dibuja los elementos de un circuito eléctrico y los
almacena en el lugar de las bibliotecas de imágenes podrá incluir estos objetos en futuros
trabajos. El programa viene con varias bibliotecas de objetos listas para usar.
www.elsolucionario.net
G N U P L O T
Version 3.7 patchlevel 2
last modified Sat Jan 19 15:23:37 GMT 2002
System: Linux 2.4.19
www.elsolucionario.net
Copyright(C) 1986 - 1993, 1998 - 2002
Thomas Williams, Colin Kelley and many others
gnuplot> exit
jrogan@huelen:~$
En el caso de xmgrace y SciGraphica mucho más directo manejarlo ya que está ba-
sado en menús. Además, existe abundante documentación de ambos softwares. El software
SciGraphica es una aplicación de visualización y análisis de data cientı́fica que permite
el despliegue de gráficos en 2 y 3 dimensiones, además, exporta los resultados a formato
PostScript. Realmente esta aplicación nació como un intento de clonar el programa comercial
origen no disponible para Linux.
www.elsolucionario.net
#!/bin/bash
g++ -Wall -O3 -o $1 $1.cc -L. -L/usr/X11R6/lib/ -liglu -lX11 -lm
Veamos algunos ejemplos:
/* Ejemplo: sen(x) */
#include <cmath>
#include ‘‘iglu.h’’
int main()
{
IgluDibujo v;
const int N=100;
double x[N], y[N];
v.map_coordinates(0,2*M_PI,-1.2,1.2);
double dx = 2*M_PI/(N-1);
for (int i=0;i<N;i++){
x[i] = i*dx;
y[i] = sin(x[i]);
}
v.plot_line(x,y,N);
v.flush();
v.wait();
return 0;
}
Este programa grafica la función seno con un número de puntos dado.
Otro caso, una primitiva animación
www.elsolucionario.net
/* Ejemplo sen(x-vt) */
#include <cmath>
#include "iglu.h"
int main(){
IgluDibujo v;
const int N=100, Nt=100;
double x[N], y[N];
v.map_coordinates(0,2*M_PI,-1.2,1.2);
double dx = 2*M_PI/(N-1), dt = .1, t=0;
for (int j=0;j<Nt;j++){
v.clean();
t += dt*j;
for (int i=0;i<N;i++){
x[i] = i*dx;
www.elsolucionario.net
y[i] = sin(x[i]-.1*t);
}
v.plot_line(x,y,N);
v.wait(1);
v.flush();
}
v.wait();
return 0;
}
www.elsolucionario.net
Capı́tulo 11
www.elsolucionario.net
11.1. Introducción
Octave es un poderoso software para análisis numérico y visualización. Muchos de sus
comandos son compatibles con Matlab. En estos apuntes revisaremos algunas caracterı́sticas
de estos programas. En realidad, el autor de este capı́tulo ha sido usuario durante algunos años
de Matlab, de modo que estos apuntes se han basado en ese conocimiento, considerando los
comandos que le son más familiares de Matlab. En la mayorı́a de las ocasiones he verificado
que los comandos descritos son también compatibles con Octave, pero ocasionalmente se
puede haber omitido algo. . . .
Matlab es una abreviación de Matrix Laboratory. Los elementos básicos con los que se
trabaja con matrices. Todos los otros tipos de variables (vectores, texto, polinomios, etc.),
son tratados como matrices. Esto permite escribir rutinas optimizadas para el trabajo con
matrices, y extender su uso a todos los otros tipos de variables fácilmente.
a=3;
a
345
www.elsolucionario.net
a=5
a
a=3
a=5
a=5
www.elsolucionario.net
11.3.1. Escalares
A pesar de que éstos son sólo un tipo especial de matrices (ver subsección siguiente),
conviene mencionar algunas caracterı́sticas especı́ficas.
– Un número sin punto decimal es tratado como un entero exacto. Un número con punto
decimal es tratado como un número en doble precisión. Esto puede no ser evidente
en el output. Por default, 8.4 es escrito en pantalla como 8.4000. Tras la instrucción
format long, sin embargo, es escrito como 8.40000000000000. Para volver al formato
original, basta la instrucción format.
11.3.2. Matrices
Este tipo de variable corresponde a escalares, vectores fila o columna, y matrices conven-
cionales.
Construcción
Las instrucciones:
a = [1 2 ; 3 4]
www.elsolucionario.net
ó
a = [1, 2; 3, 4]
1 2
definen la matriz . Las comas (opcionales) separan elementos de columnas distintas,
3 4
y los punto y coma separan elementos de filas distintas. El vector fila (1 2) es
b = [1 2]
1
y el vector columna es
2
c = [1;2]
Un número se define simplemente como d = [3] ó d = 3.
Nota importante: Muchas funciones de Octave/Matlab en las páginas siguientes acep-
tan indistintamente escalares, vectores filas, vectores columnas, o matrices, y su output es
un escalar, vector o matriz, respectivamente. Por ejemplo, log(a) es un vector fila si a es un
www.elsolucionario.net
vector fila (donde cada elemento es el logaritmo natural del elemento correspondiente en a),
y un vector columna si a es un vector columna. En el resto de este manual no se advertira
este hecho, y se pondrán ejemplos con un solo tipo de variable, en el entendido que el lector
está conciente de esta nota.
Concatenación de matrices
1 2 7
Si a = ,b= 5 6 ,c= , entonces
3 4 8
d = [a c]
1 2 7
d=
3 4 8
d = [a; b]
1 2
d = 3 4
5 6
www.elsolucionario.net
d = [a [0; 0] c]
1 2 0 7
d=
3 4 0 8
www.elsolucionario.net
www.elsolucionario.net
11.3.3. Strings
Las cadenas de texto son casos particulares de vectores fila, y se construyen y modifican
de modo idéntico.
Construcción
Las instrucciones
www.elsolucionario.net
Acceso y modificación de elementos individuales
r = t(4)
r = ’b’
t(9) = ’s’
Concatenación
t = ’un buen texto’;
t1 = [t ’ es necesario’]
11.3.4. Estructuras
Las estructuras son extensiones de los tipos de variables anteriores. Una estructura consta
de distintos campos, y cada campo puede ser una matriz (es decir, un escalar, un vector o
una matriz), o una string.
Construcción
Las lı́neas
persona.nombre = ’Eduardo’
persona.edad = 30
persona.matriz_favorita = [2 8;10 15];
definen una estructura con tres campos, uno de los cuales es un string, otro un escalar, y otro
una matriz:
www.elsolucionario.net
persona =
{
nombre = ’Eduardo’;
edad = 30;
matriz_favorita = [2 8; 10 15];
}
s = ’Eduardo’
persona.nombre = ’Claudio’
persona.matriz_favorita(2,1) = 8
persona =
{
www.elsolucionario.net
nombre = ’Claudio’;
edad = 30;
matriz_favorita = [2 8; 8 15];
}
c = (1, 1, 0)
d = (0, 1, 1)
www.elsolucionario.net
11.4.3. Operadores lógicos
Los siguientes sı́mbolos corresponden a los operadores AND, OR y NOT:
& | ~
El resultado de estas operaciones es 1 (verdadero) ó 0 (falso).
11.4.4. El operador :
Es uno de los operadores fundamentales. Permite crear vectores y extraer submatrices.
: crea vectores de acuerdo a las siguientes reglas:
j:k es lo mismo que [j,j+1,...,k], si j<=k.
j:i:k es lo mismo que [j,j+i,j+2*i,...,k], si i>0 y j<k, o si i<0 y j>k.
: extrae submatrices de acuerdo a las siguientes reglas:
A(:,j) es la j-ésima columna de A.
A(i,:) es la i-ésima fila de A.
A(:,:) es A.
A(:,j:k) es A(:,j), A(:,j+1), . . . , A(:,k).
A(:) son todos los elementos de A, agrupados en una única columna.
m = [1 2 3 ...
4 5 6];
es equivalente a
m = [1 2 3 4 5 6];
www.elsolucionario.net
Trasponer y conjugar a’
Invertir inv(a)
Autovalores, autovectores [v,d]=eig(a) (ver subsección 11.6.5)
Determinante det(a)
Extraer elementos : (ver subsección 11.4.4)
Traza trace(a)
Dimensiones size(a)
Exponencial exp(a) (elemento por elemento)
expm(a) (exponencial matricial)
11.6. Comandos
En esta sección revisaremos diversos comandos de uso frecuente en Octave/Matlab. Esta
lista no pretende ser exhaustiva (se puede consultar la documentación para mayores detalles),
y está determinada por mi propio uso del programa y lo que yo considero más frecuente
debido a esa experiencia. Insistimos en que ni la lista de comandos es exhaustiva, ni la lista
de ejemplos o usos de cada comando lo es. Esto pretende ser sólo una descripción de los
aspectos que me parecen más importantes o de uso más recurrente.
disp(a) presenta en pantalla los contenidos de una matriz, sin imprimir el nombre de la
matriz. a puede ser una string.
disp(’ c1 c2’); c1 c2
disp([.3 .4]); 0,30000 0,40000
www.elsolucionario.net
[m,n] = size(a) Aloja en m el número de filas, y en n el de columnas
Si b es un vector de n elementos, length(b) es n.
who Lista de variables en memoria
for
n=3; a=[1 4 9]
for i=1:n
a(i)=i^2;
end
Para Octave el vector resultante es columna en vez de fila.
Observar el uso del operador : para generar el vector [1 2 3]. Cualquier vector se puede
utilizar en su lugar: for i=[2 8 9 -3], for i=10:-2:1 (equivalente a [10 8 6 4 2]), etc.
son válidas. El ciclo for anterior se podrı́a haber escrito en una sola lı́nea ası́:
for i=1:n, a(i)=i^2; end
if, elseif, else
Ejemplos:
b) if a==[3 8 9 10]
b = a(1:3);
end
c) if a>3
clear a;
elseif a<0
save a;
else
disp(’Valor de a no considerado’);
end
Naturalmente, elseif y else son opcionales. En vez de las expresiones condicionales
indicadas en el ejemplo pueden aparecer cualquier función que dé valores 1 (verdadero) ó 0
(falso).
while
www.elsolucionario.net
while s
comandos
end
Mientras s es 1, se ejecutan los comandos entre while y end. s puede ser cualquier
expresión que dé por resultado 1 (verdadero) ó 0 (falso).
break
Interrumpe ejecución de ciclos for o while. En loops anidados, break sale del más interno
solamente.
Funciones lógicas
Además de expresiones construidas con los operadores relacionales ==, <=, etc., y los
operadores lógicos &, | y ~, los comandos de control de flujo anteriores admiten cualquier
función cuyo resultado sea 1 (verdadero) ó 0 (falso). Particularmente útiles son funciones
como las siguientes:
all(a) 1 si todos los elementos de a son no nulos, y 0 si alguno es
cero
any(a) 1 si alguno de los elementos de a es no nulo
isempty(a) 1 si a es matriz vacı́a (a=[])
Otras funciones entregan matrices de la misma dimensión que el argumento, con unos o
ceros en los lugares en que la condición es verdadera o falsa, respectivamente:
finite(a) 1 donde a es finito (no inf ni NaN)
isinf(a) 1 donde a es infinito
isnan(a) 1 donde a es un NaN
Por ejemplo, luego de ejecutar las lı́neas
www.elsolucionario.net
x = [-2 -1 0 1 2];
y = 1./x;
a = finite(y);
b = isinf(y);
c = isnan(y);
se tiene
a = [1 1 0 1 1]
b = [0 0 1 0 0]
c = [0 0 0 0 0]
www.elsolucionario.net
Por ejemplo, si ejecutamos las lı́neas
x=[11 0 33 0 55];
z1=find(x);
z2=find(x>0 & x<40);
obtendremos
z1 = [1 3 5]
z2 = [1 3]
find también puede dar dos resultados de salida simultáneamente (más sobre esta posi-
bilidad en la sección 11.6.2), en cuyo caso el resultado son los pares de ı́ndices (ı́ndices de fila
y columna) para cada elemento no nulo de una matriz
da como resultado
z3 = [2;2];
z4 = [4;5];
z3 contiene los ı́ndice de fila y z4 los de columna para los elementos no nulos
de la matriz
2 4
y>8. Esto permite construir, por ejemplo, la matriz z5=[z3 z4] = , en la cual cada
2 5
fila es la posición de y tal que la condición y>8 es verdadera (en este caso, es verdadera para
los elementos y(2,4) e y(2,5)).
www.elsolucionario.net
www.elsolucionario.net
plo, suma(x,y),busca en los archivos accesibles en su path de búsqueda un archivo llamado
suma.m, lo carga y ejecuta la definición contenida en ese archivo.
Por ejemplo, si escribimos en el script suma.m las lı́neas
function s=suma(x,y)
s = x+y;
el resultado de suma(2,3) será 5.
Las funciones ası́ definidas pueden entregar más de un argumento si es necesario (ya hemos
visto algunos ejemplos con find y size). Por ejemplo, definimos una función que efectúe un
análisis estadı́stico básico en stat.m:
www.elsolucionario.net
Por ejemplo:
x = [1 2 3];
y = [4 5];
[X,Y] = meshgrid(x,y);
da
1 2 3 4 4 4
X= , Y = .
1 2 3 5 5 5
Notemos que al tomar sucesivamente los pares ordenados (X(1,1),Y(1,1)), (X(1,2),Y(1,2)),
(X(1,3),Y(1,3)), etc., se obtienen todos los pares ordenados posibles tales que el primer ele-
mento está en x y el segundo está en y. Esta caracterı́stica hace particularmente útil el
comando meshgrid en el contexto de gráficos de funciones de dos variables (ver secciones
11.6.7, 11.6.7).
Constantes especiales
Octave/Matlab proporciona algunos números especiales, algunos de los cuales ya mencio-
namos en la sección 11.3.1.
√
i, j Unidad imaginaria ( −1 )
inf Infinito
NaN Not-A-Number
pi El número π (= 3,1415926535897 . . .)
Funciones elementales
Desde luego, Octave/Matlab proporciona todas las funciones matemáticas básicas. Por
ejemplo:
www.elsolucionario.net
www.elsolucionario.net
c) Redondeo
Funciones especiales
Además, Octave/Matlab proporciona diversas funciones matemáticas especiales. Algunos
ejemplos:
bessel Función de Bessel
besselh Función de Hankel
beta Función beta
ellipke Función elı́ptica
erf Función error
gamma Función gamma
Ası́, por ejemplo, bessel(alpha,X) evalúa la función de Bessel de orden alpha, Jα (x),
para cada elemento de la matriz X.
11.6.4. Polinomios
Octave/Matlab representa los polinomios como vectores fila. El polinomio
p = cn xn + · · · + c1 x + c0
Podemos efectuar una serie de operaciones con los polinomios ası́ representados.
poly(x) Polinomio cuyas raı́ces son los elementos de x.
polyval(p,x) Evalúa el polinomio p en x (en los elementos de x si éste es
un vector)
roots(p) Raı́ces del polinomio p
www.elsolucionario.net
Notar que poly es la misma función de la sección 11.6.4 que construye un polinomio de
raı́ces dadas. En el fondo, construir el polinomio caracterı́stico de una matriz es lo mismo,
y por tanto tiene sentido asignarles la misma función. Y no hay confusión, pues una opera
sobre vectores y la otra sobre matrices cuadradas.
El uso de todos estos comandos son autoexplicativos, salvo eig, que se puede emplear de
dos modos:
d = eig(a)
[V,D] = eig(a)
La primera forma deja en d un vector con los autovalores de a. La segunda, deja en D una
matriz diagonal con los autovalores, y en V una matiz cuyas columnas son los autovalores, de
modo que A*V = V*D. Por ejemplo, si a =[1 2; 3 4], entonces
5,37228
d=
−0,37228
y
5,37228 . . . 0 0,41597 . . . −0,82456 . . .
D= , V = .
0 −0,37228 . . . 0,90938 . . . 0,56577 . . .
La primera columna de V es el autovector de a asociado al primer autovalor, 5,37228 . . ..
a) Máximos y mı́nimos
Si a es un vector, max(a) es el mayor elemento de a. Si es una matriz, max(a) es un vector
fila, que contiene el máximo elemento para cada columna.
www.elsolucionario.net
a = [1 6 7; 2 8 3; 0 4 1]
b = max(a) b = (2 8 7)
Se sigue que el mayor elemento de la matriz se obtiene con max(max(a)).
min opera de modo análogo, entregando los mı́nimos.
b) Estadı́stica básica
Las siguientes funciones, como min y max, operan sobre vectores del modo usual, y sobre
matrices entregando vectores fila, con cada elemento representando a cada columna de la
matriz.
www.elsolucionario.net
c) Orden
sort(a) ordena los elementos de a en orden ascendente si a es un vector. Si es una matriz,
ordena cada columna.
1 −3 0
b = sort([1 3 9; 8 2 1; 4 -3 0]); b = 4 2 1
8 3 9
d) Transformada de Fourier
Por último, es posible efectuar transformadas de Fourier directas e inversas, en una o dos
dimensiones. Por ejemplo, fft y ifft dan la transformada de Fourier y la transformada
inversa de x, usando un algoritmo de fast Fourier transform (FFT). Especı́ficamente, si
X=fft(x) y x=ifft(X), y los vectores son de largo N:
N
X (j−1)(k−1)
X(k) = x(j)ωN ,
j=1
N
1 X −(j−1)(k−1)
x(j) = X(k)ωN ,
N k=1
donde ωN = e−2πi/N .
11.6.7. Gráficos
Una de las caracterı́sticas más importantes de Matlab son sus amplias posibilidades gráfi-
cas. Algunas de esas caracterı́sticas se encuentran también en Octave. En esta sección revi-
saremos el caso de gráficos en dos dimensiones, en la siguiente el caso de tres dimensiones, y
luego examinaremos algunas posibilidades de manipulación de gráficos.
www.elsolucionario.net
Gráficos bidimensionales
Para graficar en dos dimensiones se usa el comando plot. plot(x,y) grafica la ordenada
y versus la abscisa x. plot(y) asume abscisa [1,2,...n], donde n es la longitud de y.
Ejemplo: Si x=[2 8 9], y=[6 3 2], entonces
plot(x,y)
www.elsolucionario.net
Figura 11.1: Gráfico simple.
Por default, Octave utiliza gnuplot para los gráficos. Por default, los puntos se conectan
con una lı́nea roja en este caso. El aspecto de la lı́nea o de los puntos puede ser modificado.
Por ejemplo, plot(x,y,’ob’) hace que los puntos sean indicados con cı́rculos (’o’) azules
(’b’, blue). Otros modificadores posibles son:
- lı́nea (default) r red
. puntos g green
@ otro estilo de puntos b blue
+ signo más m magenta
* asteriscos c cyan
o cı́rculos w white
x cruces
Dos o más gráficos se pueden incluir en el mismo output agregando más argumentos a
plot. Por ejemplo: plot(x1,y1,’x’,x2,y2,’og’,x3,y3,’.c’).
Los mapas de contorno son un tipo especial de gráfico. Dada una función z = f (x, y),
nos interesa graficar los puntos (x, y) tales que f = c, con c alguna constante. Por ejemplo,
consideremos
2 2
z = xe−x −y , x ∈ [−2, 2], y ∈ [−2, 3] .
Para obtener el gráfico de contorno de z, mostrando los niveles z = −,3, z = −,1, z = 0,
z = ,1 y z = ,3, podemos usar las instrucciones:
x = -2:.2:2;
y = -2:.2:3;
[X,Y] = meshgrid(x,y);
www.elsolucionario.net
Z = X.*exp(-X.^2-Y.^2);
contour(Z.’,[-.3 -.1 0 .1 .3],x,y); # Octave por default (gnuplot)
contour(x, y, Z.’,[-.3 -.1 0 .1 .3]); # Octave con plplot y Matlab
www.elsolucionario.net
Figura 11.2: Curvas de contorno.
Las dos primeras lı́neas definen los puntos sobre los ejes x e y en los cuales la función
será evaluada. En este caso, escojimos una grilla en que puntos contiguos están separados por
.2. Para un mapa de contorno, necesitamos evaluar la función en todos los pares ordenados
(x, y) posibles al escoger x en x e y en y. Para eso usamos meshgrid (introducida sin mayores
explicaciones en la sección 11.6.3). Luego evaluamos la función [Z es una matriz, donde cada
elemento es el valor de la función en un par ordenado (x, y)], y finalmente construimos el
mapa de contorno para los niveles deseados.
Gráficos tridimensionales
También es posible realizar gráficos tridimensionales. Por ejemplo, la misma doble gaus-
siana de la sección anterior se puede graficar en tres dimensiones, para mostrarla como una
superficie z(x, y). Basta reemplazar la última instrucción, que llama a contour, por la si-
guiente:
mesh(X,Y,Z)
Observar que, mientras contour acepta argumentos dos de los cuales son vectores, y el
tercero una matriz, en mesh los tres argumentos son matrices de la misma dimensión (usamos
X, Y, en vez de x, y).
Nota importante: Otro modo de hacer gráficos bi y tridimensionales es con gplot
y gsplot (instrucciones asociadas realmente no a Octave sino a gnuplot, y por tanto no
equivalentes a instrucciones en Matlab). Se recomienda consultar la documentación de Octave
para los detalles.
www.elsolucionario.net
www.elsolucionario.net
Manipulación de gráficos
Los siguientes comandos están disponibles para modificar gráficos construidos con Octa-
ve/Matlab:
a) Ejes
axis([x1 y1 x2 y2]) Cambia el eje x al rango (x1, x2), y el eje y al rango (y1, y2).
b) Tı́tulos
c) Grillas
x = linspace(1,10,30);
y = x.^3;
plot(x,y);
gset term postscript color
gset output ‘‘xcubo.ps’’
replot
www.elsolucionario.net
gset term x11
Las tres primeras lı́neas son los comandos de Octave/Matlab convencionales para graficar.
Luego se resetea el terminal a un terminal postscript en colores (gset term postscript si
no deseamos los colores), para que el output sucesivo vaya en formato postscript y no a
la pantalla. La siguiente lı́nea indica que la salida es al archivo xcubo.ps. Finalmente, se
redibuja el gráfico (con lo cual el archivo xcubo.ps es realmente generado), y se vuelve al
terminal XWindows para continuar trabajando con salida a la pantalla.
Debemos hacer notar que no necesariamente el gráfico exportado a Postscript se verá igual
al resultado que gnuplot muestra en pantalla. Durante la preparación de este manual, nos
dimos cuenta de ello al intentar cambiar los estilos de lı́nea de plot. Queda entonces advertido
el lector.
11.6.8. Strings
Para manipular una cadena de texto, disponemos de los siguientes comandos:
lower Convierte a minúsculas
upper Convierte a mayúsculas
Ası́, lower(’Texto’) da ’texto’, y upper(’Texto’) da ’TEXTO’.
Para comparar dos matrices entre sı́, usamos strcmp:
strcmp(a,b) 1 si a y b son idénticas, 0 en caso contrario
Podemos convertir números enteros o reales en strings, y strings en números, con los
comandos:
int2str Convierte entero en string
num2str Convierte número en string
str2num Convierte string en número
www.elsolucionario.net
Por ejemplo, podemos usar esto para construir un tı́tulo para un gráfico:
archivo = fopen(’archivo.dat’,’w’);
Esto abre el archivo archivo.dat para escritura (’w’), y le asigna a este archivo un número
www.elsolucionario.net
que queda alojado en la variable archivo para futura referencia.
Los modos de apertura posibles son:
r Abre para lectura
w Abre para escritura, descartando contenidos anteriores si los
hay
a Abre o crea archivo para escritura, agregando datos al final
del archivo si ya existe
r+ Abre para lectura y escritura
w+ Crea archivo para lectura y escritura
a+ Abre o crea archivo para lectura y escritura, agregando datos
al final del archivo si ya existe
En un archivo se puede escribir en modo binario:
fread Lee datos binarios
fwrite Escribe datos binarios
o en modo texto
fgetl Lee una lı́nea del archivo, descarta cambio de lı́nea
fgets Lee una lı́nea del archivo, preserva cambio de l’ınea
fprintf Escribe datos siguiendo un formato
fscanf Lee datos siguiendo un formato
Referimos al lector a la ayuda que proporciona Octave/Matlab para interiorizarse del
uso de estos comandos. Sólo expondremos el uso de fprintf, pues el formato es algo que
habitualmente se necesita tanto para escribir en archivos como en pantalla, y fprintf se
puede usar en ambos casos.
La instrucción
fprintf(archivo,’formato’,A,B,...)
www.elsolucionario.net
imprime en el archivo asociado con el identificador archivo (asociado al mismo al usar fopen,
ver más arriba), las variables A, B, etc., usando el formato ’formato’. archivo=1 corresponde
a la pantalla; si archivo se omite, el default es 1, es decir, fprintf imprime en pantalla si
archivo=1 o si se omite el primer argumento.
’formato’ es una string, que puede contener caracters normales, caracteres de escape o
especificadores de conversión. Los caracteres de escape son:
\n New line
\t Horizontal tab
\b Backspace
\r Carriage return
\f Form feed
\\ Backslash
\’ Single quote
Por ejemplo, la lı́nea
www.elsolucionario.net
fprintf(’Una tabulacion\t y un {\’o}riginal\’\’ cambio de linea\n aqui\n’)
da como resultado
Una tabulacion y un ’’original’’ cambio de linea
aqui
Es importante notar que por default, el cambio de lı́nea al final de un fprintf no existe,
de modo que, si queremos evitar salidas a pantalla o a archivo poco estéticas, siempre hay
que terminar con un \n.
Los especificadores de conversión permiten dar formato adecuado a las variables numéricas
A, B, etc. que se desean imprimir. Constan del caracter %, seguido de indicadores de ancho
(opcionales), y caracteres de conversión. Por ejemplo, si deseamos imprimir el número π con
5 decimales, la instrucción es:
fprintf(’Numero pi = %.5f\n’,pi)
El resultado:
Numero pi = 3.14159
Los caracteres de conversión pueden ser
%e Notación exponencial (Ej.: 2.4e-5)
%f Notación con punto decimal fijo (Ej.: 0.000024)
%g %e o %f, dependiendo de cuál sea más corto (los ceros no
significativos no se imprimen)
Entre % y e, f, o g según corresponda, se pueden agregar uno o más de los siguientes
caracteres, en este orden:
En el siguiente ejemplo veremos distintos casos posibles. El output fue generado con las
siguientes instrucciones, contenidas en un script:
a = .04395;
fprintf(’123456789012345\n’);
fprintf(’a = %.3f.\n’,a);
fprintf(’a = %10.2f.\n’,a);
fprintf(’a = %-10.2f.\n’,a);
fprintf(’a = %4f.\n’,a);
fprintf(’a = %5.3e.\n’,a);
fprintf(’a = %f.\n’,a);
www.elsolucionario.net
fprintf(’a = %e.\n’,a);
fprintf(’a = %g.\n’,a);
El resultado:
12345678901234567890
a = 0.044.
a = 0.04.
a = 0.04 .
a = 0.043950.
a = 4.395e-02.
a = 0.043950.
a = 4.395000e-02.
a = 0.04395.
En la primera lı́nea, se imprimen tres decimales. En la segunda, dos, pero el ancho mı́nimo
es 10 caracteres, de modo que se alı́nea a la derecha el output y se completa con blancos. En
la tercera lı́nea es lo mismo, pero alineado a la izquierda. En la cuarta lı́nea se ha especificado
un ancho mı́nimo de 4 caracteres; como el tamaño del número es mayor, esto no tiene efecto
y se imprime el número completo. En la quinta lı́nea se usa notación exponencial, con tres
decimal (nuevamente, el ancho mı́nimo especificado, 5, es menor que el ancho del output,
luego no tiene efecto). Las últimas tres lı́neas comparan el output de %f, %e y %g, sin otras
especificaciones.
Si se desean imprimir más de un número, basta agregar las conversiones adecuadas y los
argumentos en fprintf. Ası́, la lı́nea
da por resultado
x = 1:5;
y1 = exp(x);
y2 = log(x);
a = [x; y1; y2];
fprintf = (’%g %8g %8.3f\n’,a);
da el output
1 2.71828 0.000
2 7.38906 0.693
3 20.0855 1.099
4 54.5982 1.386
5 148.413 1.609
www.elsolucionario.net
www.elsolucionario.net
Capı́tulo 12
El sistema de preparación de
documentos TEX .
versión 4.0 021217
www.elsolucionario.net
12.1. Introducción.
TEX es un procesador de texto o, mejor dicho, un avanzado sistema de preparación de
documentos, creado por Donald Knuth, que permite el diseño de documentos de gran cali-
dad, conteniendo textos y fórmulas matemáticas. Años después, LATEX fue desarrollado por
Leslie Lamport, facilitando la preparación de documentos en TEX, gracias a la definición de
“macros” o conjuntos de comandos de fácil uso.
LATEX tuvo diversas versiones hasta la 2.09. Actualmente, LATEX ha recibido importantes
modificaciones, siendo la distribución actualmente en uso y desarrollo LATEX 2ε , una versión
transitoria en espera de que algún dı́a se llegue a la nueva versión definitiva de LATEX, LATEX3.
En estas páginas cuando digamos LATEX nos referiremos a la versión actual, LATEX 2ε . Cuan-
do queramos hacer referencia a la versión anterior, que deberı́a quedar progresivamente en
desuso, diremos explı́citamente LATEX 2.09.
12.2. Archivos.
El proceso de preparación de un documento LATEX consta de tres pasos:
a) dvi. Es el archivo procesado que podemos ver en pantalla o imprimir. Una vez
compilado, este archivo puede ser enviado a otro computador, para imprimir en
otra impresora, o verlo en otro monitor, independiente de la máquina (de donde
su extensión dvi, device independent).
369
www.elsolucionario.net
\documentclass[12pt]{article}
www.elsolucionario.net
\begin{document}
\end{document}
Haremos algunas precisiones respecto a la primera lı́nea más tarde. Lo importante es que
una lı́nea de esta forma debe ser la primera de nuestro archivo. Todo lo que se encuentra
antes de \begin{document} se denomina preámbulo. El texto que queramos escribir va entre
\begin{document} y \end{document}. Todo lo que se encuentre después de \end{document}
es ignorado.
12.3.2. Caracteres.
Pueden aparecer en nuestro texto todos los caracteres del código ASCII no extendido
(teclado inglés usual): letras, números y los signos de puntuación:
. : ; , ? ! ‘ ’ ( ) [ ] - / * @
# $ % & ~ _ ^ \ { }
tienen un significado especı́fico para LATEX. Algunos de ellos se pueden obtener anteponiéndo-
les un backslash:
# \# $ \$ % \% & \& { \{ } \}
Los caracteres
+ = | < >
www.elsolucionario.net
12.3.3. Comandos.
Todos los comandos comienzan con un backslash, y se extienden hasta encontrar el primer
carácter que no sea una letra (es decir, un espacio, un número, un signo de puntuación o
matemático, etc.).
www.elsolucionario.net
LATEX es consciente de muchas convenciones estilı́sticas que quizás no apreciamos cuando
leemos textos bien diseñados, pero las cuales es bueno conocer para aprovecharlas.
a) Observemos la siguiente palabra: fino. Esta palabra fue generada escribiendo simple-
mente fino, pero observemos que las letras ‘f’ e ‘i’ no están separadas, sino que unidas
artı́sticamente. Esto es una ligadura, y es considerada una práctica estéticamente pre-
ferible. LATEX sabe esto e inserta este pequeño efecto tipográfico sin que nos demos
cuenta.
b) Las comillas de apertura y de cierre son distintas. Por ejemplo: ‘insigne’ (comillas
simples) o “insigne” (comillas dobles). Las comillas de apertura se hacen con uno o con
dos acentos graves (‘), para comillas simples o dobles, respectivamente, y las de cierre
con acentos agudos (’): ‘insigne’, ‘‘insigne’’. No es correcto entonces utilizar las
comillas dobles del teclado e intentar escribir "insigne" (el resultado de esto es el poco
estético ”insigne”).
www.elsolucionario.net
d) Énfasis de texto:
a) $x+y=3$
b) $$xy=8$$
c) \begin{equation}
x/y=5
\end{equation}
www.elsolucionario.net
xy = 8
y una ecuación separada del texto, numerada:
x/y = 5 (12.1)
Es importante notar que al referirnos a una variable matemática en el texto debemos
escribirla en modo matemático:
Decir que la incógnita es x es Decir que la inc{\’o}gnita es
incorrecto. No: la incógnita es x es incorrecto. No: la
x. inc{\’o}gnita es $x$.
12.3.7. Comentarios.
Uno puede hacer que el compilador ignore parte del archivo usando %. Todo el texto desde
este carácter hasta el fin de la lı́nea correspondiente será ignorado (incluyendo el fin de lı́nea).
Un pequeño comentario. Un peque{\~n}o co% Texto ignorado
mentario.
www.elsolucionario.net
deshacer los cambios cuando terminemos de trabajar, pero esto es tedioso.
b) Introduciendo comandos adecuados en el preámbulo. Ésta es la opción más recomen-
dable y la más usada. Nos permite dominar decisiones especı́ficas de estilo válidas sólo
para el archivo que nos interesa.
c) Creando un nuevo archivo cls. Esto es muy recomendable cuando las modificaciones de
estilo son abundantes, profundas y deseen ser reaprovechadas. Se requiere un poco de
experiencia en LATEX para hacerlo, pero a veces puede ser la única solución razonable.
En todo caso, la opción a usar en la gran mayorı́a de los casos es la b) (Sec. 12.9).
12.3.10. Tı́tulo.
Un tı́tulo se genera con:
www.elsolucionario.net
\title, \author y \date pueden ir en cualquier parte (incluyendo el preámbulo) an-
tes de \maketitle. \maketitle debe estar después de \begin{document}. Dependiendo de
nuestras necesidades, tenemos las siguientes alternativas:
a) Sin tı́tulo:
\title{}
b) Sin autor:
\author{}
c) Sin fecha:
\date{}
e) Más de un autor:
Para artı́culos cortos, LATEX coloca el tı́tulo en la parte superior de la primera página
del texto. Para artı́culos largos, en una página separada.
www.elsolucionario.net
12.3.11. Secciones.
Los tı́tulos de las distintas secciones y subsecciones de un documento (numerados ade-
cuadamente, en negrita, como en este texto) se generan con comandos de la forma:
\section{Una secci\’on}
\subsection{Una subsecci\’on}
www.elsolucionario.net
12.3.12. Listas.
Los dos modos usuales de generar listas:
a) Listas numeradas (ambiente enumerate):
Es posible anidar hasta tres niveles de listas. Cada uno usa tipos distintos de rótulos,
según el ambiente usado: números arábes, letras y números romanos para enumerate, y
puntos, guiones y asteriscos para itemize. Los rótulos son generados automáticamente por
cada \item, pero es posible modificarlos agregando un parámetro opcional:
www.elsolucionario.net
roman italic Small Caps
boldface slanted typewriter
sans serif
\rm es el default para texto normal; \it es el default para texto enfatizado; \bf es el
default para tı́tulos de capı́tulos, secciones, subsecciones, etc.
\textrm, \textbf, etc., sólo permiten cambiar porciones definidas del texto, contenido
entre los paréntesis cursivos. Con \rm, \bf, etc. podemos, omitiendo los paréntesis, cambiar
el font en todo el texto posterior:
Un cambio local de fonts y uno Un cambio {\sf local} de fonts
global, interminable e infini- \sl y uno global, interminable
to. . . e infinito...
También es posible tener combinaciones de estos fonts, por ejemplo, bold italic, pero no
sirven los comandos anteriores, sino versiones modificadas de \rm, \bf, etc.:
\rmfamily
\sffamily
\ttfamily
\mdseries
www.elsolucionario.net
\bfseries
\upshape
\itshape
\slshape
\scshape
Por ejemplo:
Para entender el uso de estos comandos hay que considerar que un font tiene tres atributos:
family (que distingue entre rm, sf y tt), series (que distingue entre md y bf), y shape (que
www.elsolucionario.net
distingue entre up, it, sl y sc). Cada uno de los comandos \rmfamily, \bfseries, etc.,
cambia sólo uno de estos atributos. Ello permite tener versiones mixtas de los fonts, como
un slanted sans serif, imposible de obtener usando los comandos \sl y \sf. Los defaults para
el texto usual son: \rmfamily, \mdseries y \upshape.
Tamaño.
Los tamaños de letras disponibles son:
texto \small
Se usan igual que los comandos de cambio de font \rm, \sf, etc., de la sección 12.3.13.
\normalsize es el default para texto normal; \scriptsize para sub o supraı́ndices;
\footnotesize para notas a pie de página.
ó \’o õ \~o ǒ \v o o̧ \c o
ò \‘o ō \=o ő \H o o. \d o
ô \^o ȯ \. o o o \t{oo} o \b o
¯
ö \"o ŏ \u o o̊ \r o
Cuadro 12.1: Acentos.
† \dag œ \oe l \l
‡ \ddag Œ \OE L \L
§ \S æ \ae ß \ss
¶ \P Æ \AE SS \SS
c \copyright å \aa ¿ ?‘
a \textcircled a Å \AA ¡ !‘
\textvisiblespace ø \o
£ \pounds Ø \O
Cuadro 12.2: Sı́mbolos especiales y caracteres no ingleses.
www.elsolucionario.net
12.3.15. Escritura de textos en castellano.
LATEX emplea sólo los caracteres ASCII básicos, que no contienen sı́mbolos castellanos
como ¿, ¡, ñ, etc. Ya hemos visto que existen comandos que permiten imprimir estos caracteres,
y por tanto es posible escribir cualquier texto en castellano (y otros idiomas, de hecho).
Sin embargo, esto no resuelve todo el problema, porque en inglés y castellano las palabras
se cortan en “sı́labas” de acuerdo a reglas distintas, y esto es relevante cuando se debe cortar el
texto en lı́neas. LATEX tiene incorporados algoritmos para cortar palabras en inglés y, si se ha
hecho una instalación especial de LATEX en nuestro computador, también en castellano u otros
idiomas (a través del programa babel, que es parte de la distribución standard de LATEX 2ε ).
En un computador con babel instalado y configurado para cortar en castellano basta incluir el
comando \usepackage[spanish]{babel} en el preámbulo para poder escribir en castellano
cortando las palabras en sı́labas correctamente.3
Sin embargo, ocasionalmente LATEX se encuentra con una palabra que no sabe cortar,
en cuyo caso no lo intenta y permite que ella se salga del margen derecho del texto, o bien
toma decisiones no óptimas. La solución es sugerirle a LATEX la silabación de la palabra. Por
ejemplo, si la palabra conflictiva es matem\’aticas (generalmente hay problemas con las
palabras acentuadas), entonces basta con reescribirla en la forma: ma\-te\-m\’a\-ti\-cas.
Con esto, le indicamos a LATEX en qué puntos es posible cortar la palabra. El comando \- no
tiene ningún otro efecto, de modo que si la palabra en cuestión no queda al final de la lı́nea,
LATEX por supuesto ignora nuestra sugerencia y no la corta.
Consideremos el siguiente ejemplo:
3
Esto resuelve también otro problema: los encabezados de capı́tulos o ı́ndices, por ejemplo, son escritos
“Capı́tulo” e “Índice”, en vez de “Chapter” e “Index”, y cuando se usa el comando \date, la fecha aparece
en castellano.
www.elsolucionario.net
www.elsolucionario.net
Hemos mencionado tres formas de ingresar al modo matemático: $...$ (fórmulas dentro
del texto), $$...$$ (fórmulas separadas del texto, no numeradas) y \begin{equation} ...
\end{equation} (fórmulas separadas del texto, numeradas). Los comandos que revisaremos
en esta sección sólo pueden aparecer dentro del modo matemático.
12.4.2. Fracciones.
a) Horizontales
n/2 n/2
b) Verticales
1
\frac{1}{2}, \frac 1{2}, \frac{1}2 ó \frac 12
2
y + z/2
x= x = \frac{y + z/2}{y^2+1}
y2 + 1
x+y
y \frac{x+y}{1 + \frac y{z+1}}
1 + z+1
www.elsolucionario.net
La forma a) es más adecuada y la preferida para fracciones dentro del texto, y la se-
gunda para fórmulas separadas. \frac puede aparecer en fórmulas dentro del texto ( 21 con
$\frac 12$), pero esto es inusual y poco recomendable estéticamente, salvo estricta necesi-
dad.
12.4.3. Raı́ces.
√
n \sqrt{n} ó \sqrt n
√
a2 + b 2 \sqrt{a^2 + b^2}
√
n
2 \sqrt[n]{2}
www.elsolucionario.net
Para fórmulas como
b) ··· \cdots
Entre sı́mbolos como +, −, = :
..
c) . \vdots
x1
..
.
xn
..
d) . \ddots
1 0 ··· 0
0 1 0
In×n =
.. . . . ..
. .
0 0 ... 1
No corresponde usar tres puntos seguidos (...), pues el espaciado entre puntos es incorrecto.
www.elsolucionario.net
Minúsculas
α \alpha θ \theta o o τ \tau
β \beta ϑ \vartheta π \pi υ \upsilon
γ \gamma ι \iota $ \varpi φ \phi
δ \delta κ \kappa ρ \rho ϕ \varphi
\epsilon λ \lambda % \varrho χ \chi
ε \varepsilon µ \mu σ \sigma ψ \psi
ζ \zeta ν \nu ς \varsigma ω \omega
η \eta ξ \xi
Mayúsculas
Γ \Gamma Λ \Lambda Σ \Sigma Ψ \Psi
∆ \Delta Ξ \Xi Υ \Upsilon Ω \Omega
Θ \Theta Π \Pi Φ \Phi
www.elsolucionario.net
Cuadro 12.3: Letras griegas.
www.elsolucionario.net
≤ \leq ≥ \geq ≡ \equiv |= \models
≺ \prec \succ ∼ \sim ⊥ \perp
\preceq \succeq ' \simeq | \mid
\ll \gg \asymp k \parallel
⊂ \subset ⊃ \supset ≈ \approx ./ \bowtie
⊆ \subseteq ⊇ \supseteq ∼
= \cong 6 = \neq
.
^ \smile v \sqsubseteq w \sqsupseteq = \doteq
_ \frown ∈ \in 3 \ni ∝ \propto
` \vdash a \dashv
www.elsolucionario.net
R W _ L M
\int \bigvee \bigoplus
I
H V ^
\oint \bigwedge
Pn R1
i=1 xi = 0 f $\sum_{i=1}^n x_i = \int_0^1 f $
( ( ) ) ↑ \uparrow
[ [ ] ] ↓ \downarrow
{ \{ } \} l \updownarrow
b \lfloor c \rfloor ⇑ \Uparrow
d \lceil e \rceil ⇓ \Downarrow
h \langle i \rangle m \Updownarrow
/ / \ \backslash
| | k \|
www.elsolucionario.net
Cuadro 12.10: Delimitadores
12.4.9. Matrices.
Ambiente array.
Se construyen con el ambiente array. Consideremos, por ejemplo:
a + b + c uv 27
a+b u+v 134
a 3u + vw 2,978
La primera columna está alineada al centro (c, center); la segunda, a la izquierda (l, left); la
tercera, a la derecha (r, right). array tiene un argumento obligatorio, que consta de tantas
letras como columnas tenga la matriz, letras que pueden ser c, l o r según la alineación
que queramos obtener. Elementos consecutivos de la misma lı́nea se separan con & y lı́neas
consecutivas se separan con \\. Ası́, el ejemplo anterior se obtiene con:
\begin{array}{clr}
a+b+c & uv & 27 \\
a+b & u + v & 134 \\
a & 3u+vw & 2.978
\end{array}
Delimitadores.
Un delimitador es cualquier sı́mbolo que actúe como un paréntesis, encerrando una ex-
presión, apareciendo a la izquierda y a la derecha de ella. La Tabla 12.10 muestra todos los
delimitadores posibles.
Para que los delimitadores tengan el tamaño correcto para encerrar la expresión correspon-
diente hay que anteponerles \left y \right. Podemos obtener ası́ expresiones matriciales:
www.elsolucionario.net
\left(\begin{array}{cc}
a b a&b\\
c d c&d
\end{array}\right)
v = \left(\begin{array}{c}
1 1\\
v= 2 2\\
3 3
\end{array}\right)
\Delta = \left|\begin{array}{cc}
a a
∆ = 11 12 a_{11} & a_{12}\\
a21 a22
a_{21} & a_{22}
\end{array}\right|
\left y \right deben ir de a pares, pero los delimitadores no tienen por qué ser los
mismos:
www.elsolucionario.net
\left(\begin{array}{c}
a a\\
b b
\end{array}\right[
Tampoco es necesario que los delimitadores encierren matrices. Comparemos, por ejemplo:
~
(A ~ = ( dF )x=a
~ + B) (\vec A + \vec B) =
dx
( \frac{d \vec F}{dx} )_{x=a}
!
~+B
~ =
dF~
A \left(\vec A + \vec B\right) =
dx
x=a \left( \frac{d \vec F}{dx} \right)_{x=a}
El segundo ejemplo es mucho más adecuado estéticamente.
Algunas expresiones requieren sólo un delimitador, a la izquierda o a la derecha. Un punto
(.) representa un delimitador invisible. Los siguientes ejemplos son tı́picos:
Z b
b
df
dx = f (x) \left. \int_a^b dx \frac{df}{dx} =
a dx a f(x) \right |_a^b
x = a+b+c+ \begin{eqnarray*}
d+e x& = & a + b + c +\\
&& d + e
\end{eqnarray*}
El asterisco impide que aparezcan números en las ecuaciones. Si deseamos que numere
cada lı́nea como una ecuación independiente, basta omitir el asterisco:
x = 5 (12.2) \begin{eqnarray}
www.elsolucionario.net
a + b = 60 (12.3) x& = & 5 \\
a + b&= & 60
\end{eqnarray}
Si queremos que solamente algunas lı́neas aparezcan numeradas, usamos \nonumber:
x = a+b+c+ \begin{eqnarray}
d+e (12.4) x& = & a + b + c + \nonumber\\
&& d + e
\end{eqnarray}
El comando \eqnarray es suficiente para necesidades sencillas, pero cuando se requiere
escribir matemática de modo intensivo sus limitaciones comienzan a ser evidentes. Al agre-
gar al preámbulo de nuestro documento la lı́nea \usepackage{amsmath} quedan disponibles
muchos comandos mucho más útiles para textos matemáticos más serios, como el ambiente
equation*, \split, \multline o \intertext. En la sección 12.8.2 se encuentra una des-
cripción de estos y otros comandos.
12.4.10. Acentos.
Dentro de una fórmula pueden aparecer una serie de “acentos”, análogos a los de texto
usual (Tabla 12.11).
Las letras i y j deben perder el punto cuando son acentuadas: ~i es incorrecto. Debe ser ~ı.
\imath y \jmath generan las versiones sin punto de estas letras:
~ı + ̂ \vec \imath + \hat \jmath
Bastante más óptimo es utilizar el comando \text, disponible a través de amsmath (sección
12.8.2).
www.elsolucionario.net
R
f dx \int f \, dx en vez de f dx
El último caso es quizás el más frecuente, por cuanto la no inserción del pequeño espacio adicional
entre f y dx hace aparecer el integrando como el producto de tres variables, f , d y x, que no es la
idea.
12.4.13. Fonts.
Análogamente a los comandos para texto usual (Sec. 12.3.13), es posible cambiar los fonts dentro
del modo matemático:
(A, x) \mathrm{(A,x)}
(A, x) \mathnormal{(A,x)}
(A, B) \mathcal{(A,B)}
(A, x) \mathbf{(A,x)}
(A, x) \mathsf{(A,x)}
(A, x) \mathtt{(A,x)}
(A, x ) \mathit{(A,x)}
Ã × 1 \mathbf{\tilde A \times 1}
Como en todo ambiente matemático, los espacios entre caracteres son ignorados:
Hola \mathrm{H o l a}
Finalmente, observemos que \mathit corresponde al font itálico, en tanto que \mathnormal al
font matemático usual, que es también itálico. . . o casi:
different $\mathit{different}$
different \textit{different}
12.5. Tablas.
array nos permitió construir matrices en modo matemático. Para tablas de texto existe tabular,
que funciona de la misma manera. Puede ser usado tanto en modo matemático como fuera de él.
\begin{tabular}{lcl}
Nombre : Juan Pérez Nombre&:&Juan P\’erez\\
Edad : 26 Edad&:&26\\
Profesión : Estudiante Profesi\’on&:&Estudiante
\end{tabular}
Si deseamos agregar lı́neas verticales y horizontales para ayudar a la lectura, lo hacemos inser-
tando | en los puntos apropiados del argumento de tabular, y \hline al final de cada lı́nea de la
tabla:
www.elsolucionario.net
\begin{tabular}{|l|r|}\hline
Item Gastos Item&Gastos\\ \hline
Vasos $ 500 Vasos& \$ 500 \\
Botellas $ 1300 Botellas & \$ 1300 \\
Platos $ 500 Platos & \$ 500 \\ \hline
Total $ 2300 Total& \$ 2300 \\ \hline
\end{tabular}
www.elsolucionario.net
tendrá efecto sólo después de compilar dos veces más. Por cierto, no es necesario preocuparse de
estos detalles a cada momento. Seguramente compilaremos muchas veces el archivo antes de tener
la versión final. En todo caso, LATEX avisa, tras cada compilación, si hay referencias inexistentes
u otras que pudieron haber cambiado, y sugiere compilar de nuevo para obtener las referencias
correctas. (Ver Sec. 12.14.2.)
\usepackage{<package>}
www.elsolucionario.net
Si se requiere cargar más de un paquete adicional, se puede hacer de dos formas:
\usepackage{<package1>,<package2>}
\usepackage{<package1>}
\usepackage{<package2>}
Algunos paquetes aceptan opciones adicionales (del mismo modo que la clase article acepta
la opción 12pt):
\usepackage[option1,option2]{<package1>}
12.8.1. babel
Permite el procesamiento de textos en idiomas distintos del inglés. Esto significa, entre otras
cosas, que se incorporan los patrones de silabación correctos para dicho idioma, para cortar adecua-
damente las palabras al final de cada lı́nea. Además, palabras claves como “Chapter”, “Index”, “List
of Figures”, etc., y la fecha dada por \date, son cambiadas a sus equivalentes en el idioma escogido.
La variedad de idiomas disponibles es enorme, pero cada instalación de LATEX tiene sólo algunos de
ellos incorporados. (Ésta es una decisión que toma el administrador del sistema, de acuerdo a las
necesidades de los usuarios. Una configuración usual puede ser habilitar la compilación en inglés,
castellano, alemán y francés.)
Ya sabemos como usar babel para escribir en castellano: basta incluir en el preámbulo la lı́nea
\usepackage[spanish]{babel}
www.elsolucionario.net
12.8.2. AMS-LATEX
El paquete amsmath permite agregar comandos para escritura de textos matemáticos profe-
sionales, desarrollados originalmente por la American Mathematical Society. Si un texto contiene
abundante matemática, entonces seguramente incluir la lı́nea correspondiente en el preámbulo:
\usepackage{amsmath}
aliviará mucho la tarea. He aquı́ algunas de las caracterı́sticas adicionales disponibles con AMS-
LATEX.
x = 2y − 3 \begin{equation*}
x = 2y - 3
www.elsolucionario.net
\end{equation*}
multline permite dividir una ecuación muy larga en varias lı́neas, de modo que la primera lı́nea
quede alineada con el margen izquierdo, y la última con el margen derecho:
15
X \begin{multline}
= 1 + 2 + 3 + 4 + 5+ \sum_{i=1}^{15} = 1 +2+3+4+5+\\
i=1 6+7+8+9+10+\\
6 + 7 + 8 + 9 + 10+ 11+12+13+14+15
11 + 12 + 13 + 14 + 15 (12.6) \end{multline}
align permite reunir un grupo de ecuaciones consecutivas alineándolas (usando &, igual que la
alineación vertical de tabular y array). gather hace lo mismo, pero centrando cada ecuación en
la página independientemente.
a1 = b1 + c1 (12.7) \begin{align}
a2 = b2 + c2 − d2 + e2 (12.8) a_1 &= b_1 + c_1 \\
a_2 &= b_2 + c_2 - d_2 + e_2
\end{align}
a1 = b1 + c1 (12.9) \begin{gather}
a2 = b2 + c2 − d2 + e2 (12.10) a_1 = b_1 + c_1 \\
a_2 = b_2 + c_2 - d_2 + e_2
\end{gather}
Con multline*, align* y gather* se obtienen los mismos resultados, pero con ecuaciones no
numeradas.
split permite escribir una sola ecuación separada en lı́neas (como multline), pero permite
alinear las lı́neas con & (como align). split debe ser usado dentro de un ambiente como equation,
align o gather (o sus equivalentes con asterisco):
www.elsolucionario.net
a1 = b1 + c1 \begin{equation}
(12.11)
= b2 + c2 − d2 + e2 \begin{split}
a_1& = b_1 + c_1 \\
& = b_2 + c_2 - d_2 + e_2
\end{split}
\end{equation}
Espacio horizontal
\quad y \qquad insertan espacio horizontal en ecuaciones:
x>y , ∀x ∈ A \begin{gather*}
x≤z , ∀z ∈ B x > y \ , \quad \forall\, x \in A \\
x \leq z \ , \qquad \forall\, z \in B
www.elsolucionario.net
\end{gather*}
Texto en ecuaciones
Para agregar texto a una ecuación, usamos \text:
\begin{equation*}
x = 2n − 1 , con n entero x = 2^n - 1 \ , \quad \text{con $n$ entero}
\end{equation*}
\text se comporta como un buen objeto matemático, y por tanto se pueden agregar subı́ndices
textuales más fácilmente que con \mbox (ver sección 12.4.11):
Vcrı́tico $V_{\text{cr\’{\i}tico}}$
Referencia a ecuaciones
\eqref es equivalente a \ref, salvo que agrega los paréntesis automáticamente:
La ecuación (12.5) era la de La ecuaci\’on \eqref{euler} era la de Euler.
Euler.
x1 = a + b + c , \begin{align*}
x2 = d + e , x_1 &= a + b + c \ , \\
x_2 &= d + e \ , \\
y por otra parte \intertext{y por otra parte}
x_3 &= f + g + h \ .
x3 = f + g + h . \end{align*}
\begin{pmatrix}
www.elsolucionario.net
a b a&b\\
c d c&d
\end{pmatrix}
\Delta = \begin{vmatrix}
a11 a12
∆=
a_{11} & a_{12}\\
a21 a22 a_{21} & a_{22}
\end{vmatrix}
k
v= v = \binom{k}{2}
2
Podemos observar que el espaciado entre los paréntesis y el resto de la fórmula es más adecuado
que el de los ejemplos en la sección 12.4.9.
Flechas extensibles
Las flechas en la tabla 12.6 vienen en ciertos tamaños predefinidos. amsmath proporciona fle-
chas extensibles \xleftarrow y \xrightarrow, para ajustar sub o superı́ndices demasiado anchos.
Además, tienen un argumento opcional y uno obligatorio, para colocar material sobre o bajo ellas:
n+µ−1 n±i−1
A ←−−−− B −−−−→ C −
→D
T U
12.8.3. fontenc
Ocasionalmente, LATEX tiene problemas al separar una palabra en sı́labas. Tı́picamente, eso
ocurre con palabras acentuadas, pues, debido a la estructura interna del programa, un carácter
como la “á” en “matemáticas” no es tratado igual que los otros. Para solucionar el problema, y
poder cortar en sı́labas palabras que contengan letras acentuadas (además de acceder a algunos
caracteres adicionales), basta incluir el paquete fontenc:
www.elsolucionario.net
\usepackage[T1]{fontenc}
Técnicamente, lo que ocurre es que la codificación antigua para fonts es la OT1, que no contiene
fonts acentuados, y que por lo tanto es útil sólo para textos en inglés. La codificación T1 aumenta los
fonts disponibles, permitiendo que los caracteres acentuados sean tratados en igual pie que cualquier
otro.
12.8.4. enumerate
enumerate.sty define una muy conveniente extensión al ambiente enumerate de LATEX. El
comando se usa igual que siempre (ver sección 12.3.12), con un argumento opcional que determina
el tipo de etiqueta que se usará para la lista. Por ejemplo, si queremos que en vez de números se
usen letras mayúsculas, basta usar \begin{enumerate}[A]:
A Primer ı́tem.
B Segundo ı́tem.
www.elsolucionario.net
Si queremos etiquetas de la forma “1.-”, \begin{enumerate}[1.-]:
Si deseamos insertar un texto que no cambie de una etiqueta a otra, hay que encerrarlo entre
paréntesis cursivos (\begin{enumerate}[{Caso} A:]):
12.8.5. Color.
A través de PostScript es posible introducir color en documentos LATEX. Para ello, incluimos en
el preámbulo el paquete color.sty:
\usepackage{color}
De este modo, está disponible el comando \color, que permite especificar un color, ya sea por
nombre (en el caso de algunos colores predefinidos), por su código rgb (red-green-blue) o código
cmyk (cian-magenta-yellow-black). Por ejemplo:
Un texto en un
{\color[cmyk]{.3,.5,.75,0} tercer color}
Los colores más frecuentes (azul, amarillo, rojo, etc.) se pueden dar por nombre, como en este
ejemplo. Si se da el código rgb, se deben especificar tres números entre 0 y 1, que indican la cantidad
www.elsolucionario.net
de rojo, verde y azul que constituyen el color deseado. En el ejemplo, le dimos máxima cantidad de
rojo y azul, y nada de verde, con lo cual conseguimos un color violeta. Si se trata del código cmyk los
números a especificar son cuatro, indicando la cantidad de cian, magenta, amarillo y negro. En el
ejemplo anterior pusimos una cantidad arbitraria de cada color, y resultó un color café. Es evidente
que el uso de los códigos rgb y cmyk permite explorar infinidad de colores.
Observar que \color funciona de modo análogo a los comandos de cambio de font de la sección
12.3.13, de modo que si se desea restringir el efecto a una porción del texto, hay que encerrar dicho
texto entre paréntesis cursivos. Análogamente al caso de los fonts, existe el comando \textcolor,
que permite dar el texto a colorear como argumento:
Un texto en un
\textcolor[cmyk]{.3,.5,.75,0}{tercer color}
www.elsolucionario.net
12.9. Modificando el estilo de la página.
TEX toma una serie de decisiones por nosotros. Ocasionalmente nos puede interesar alterar el
comportamiento normal. Disponemos de una serie de comandos para ello, los cuales revisaremos a
continuación. Todos deben aparecer en el preámbulo, salvo en los casos que se indique.
\pagenumbering{arabic}
\pagenumbering{roman}
arabic es el default.
b) Estilo de página.
El comando \pagestyle determina dónde queremos que vayan los números de página:
Corte de lı́neas.
En la página 379 ya vimos un ejemplo de inducción de un corte de lı́nea en un punto deseado
del texto, al dividir una palabra en sı́labas.
Cuando el problema no tiene relación con sı́labas disponemos de dos comandos:
\newline Corta la lı́nea y pasa a la siguiente en el punto
indicado.
www.elsolucionario.net
\linebreak Lo mismo, pero justificando la lı́nea para ade-
cuarla a los márgenes.
Observemos cómo en el segundo caso, en que se usa \linebreak, la separación entre palabras
es alterada para permitir que el texto respete los márgenes establecidos.
Corte de páginas.
Como para cortar lı́neas, existe un modo violento y uno sutil:
\newpage Cambia de página en el punto indicado. Análogo
a \newline.
\clearpage, sin embargo, no siempre tiene efectos visibles. Dependiendo de la cantidad y tipo
de texto que quede en la página, los espacios verticales pueden o no ser ajustados, y si no lo son,
el resultado termina siendo equivalente a un \newpage. TEX decide en última instancia qué es lo
óptimo.
Adicionalmente, tenemos el comando:
\enlargethispage{<longitud>} Cambia el tamaño de la página ac-
tual en la cantidad <longitud>.
www.elsolucionario.net
cm centı́metro
mm milı́metro
in pulgada
pt punto (1/72 pulgadas)
em ancho de una “M” en el font actual
ex altura de una “x” en el font actual
Las cuatro primeras unidades son absolutas; las últimas dos, relativas, dependiendo del ta-
maño del font actualmente en uso.
www.elsolucionario.net
Las longitudes pueden ser números enteros o decimales, positivos o negativos:
b) Cambio de longitudes.
TEX almacena los valores de las longitudes relevantes al texto en comandos especiales:
\parindent Sangrı́a.
Todas estas variables son modificables con los comandos \setlength, que le da a una variable
un valor dado, y \addtolength, que le suma a una variable la longitud especificada. Por
ejemplo:
Por default, el ancho y altura del texto, y los márgenes izquierdo y superior, están definidos
de modo que quede un espacio de una pulgada (' 2,56 cm) entre el borde del texto y el borde
de la página.
www.elsolucionario.net
Un problema tı́pico es querer que el texto llene un mayor porcentaje de la página. Por ejem-
plo, para que el margen del texto en los cuatro costados sea la mitad del default, debemos
introducir los comandos:
\addtolength{\textwidth}{1in}
\addtolength{\textheight}{1in}
\addtolength{\oddsidemargin}{-.5in}
\addtolength{\topmargin}{-.5in}
Las dos primeras lı́neas aumentan el tamaño horizontal y vertical del texto en 1 pulgada.
Si luego restamos media pulgada del margen izquierdo y el margen superior, es claro que la
distancia entre el texto y los bordes de la página sera de media pulgada, como deseábamos.
www.elsolucionario.net
\hspace{3cm} Espacio horizontal de 3 cm.
Algunos ejemplos:
Un primer párrafo de un pe- Un primer p\’arrafo de un
queño texto. peque\~no texto.
\vspace{1cm}
Y un segundo párrafo separa- Y un segundo p\’arrafo
do del otro. separado del otro.
Si por casualidad el espacio vertical impuesto por \vspace debiese ser colocado al comienzo
de una página, TEX lo ignora. Serı́a molesto visualmente que en algunas páginas el texto
comenzara algunos centı́metros más abajo que en el resto. Lo mismo puede ocurrir si el
espacio horizontal de un \hspace queda al comienzo de una lı́nea.
Los comandos \vspace*{<longitud>} y \hspace*{<longitud>} permiten que el espacio en
blanco de la <longitud> especificada no sea ignorado. Ello es útil cuando invariablemente
queremos ese espacio vertical u horizontal, aunque sea al comienzo de una página o una lı́nea
—por ejemplo, para insertar una figura.
12.10. Figuras.
Lo primero que hay que decir en esta sección es que LATEX es un excelente procesador de texto,
tanto convencional como matemático. Las figuras, sin embargo, son un problema aparte.
LATEX provee un ambiente picture que permite realizar dibujos simples. Dentro de la estruc-
tura \begin{picture} y \end{picture} se pueden colocar una serie de comandos para dibujar
lı́neas, cı́rculos, óvalos y flechas, ası́ como para posicionar texto. Infortunadamente, el proceso de
www.elsolucionario.net
ejecutar dibujos sobre un cierto umbral de complejidad puede ser muy tedioso para generarlo di-
rectamente. Existe software (por ejemplo, xfig) que permite superar este problema, pudiéndose
dibujar con el mouse, exportando el resultado al formato picture de LATEX. Sin embargo, picture
tiene limitaciones (no se pueden hacer lı́neas de pendiente arbitraria), y por tanto no es una solución
óptima.
Para obtener figuras de buena calidad es imprescindible recurrir a lenguajes gráficos externos, y
LATEX da la posibilidad de incluir esos formatos gráficos en un documento. De este modo, tanto el
texto como las figuras serán de la más alta calidad. Las dos mejores soluciones son utilizar Metafont
o PostScript. Metafont es un programa con un lenguaje de programación gráfico propio. De hecho,
los propios fonts de LATEX fueron creados usando Metafont, y sus capacidades permiten hacer dibujos
de complejidad arbitraria. Sin embargo, los dibujos resultantes no son trivialmente reescalables, y
exige aprender un lenguaje de programación especı́fico.
Una solución mucho más versátil, y adoptada como el estándar en la comunidad de usuarios
de LATEX, es el uso de PostScript. Como se mencionó brevemente en la sección 8.12, al imprimir,
una máquina unix convierte el archivo a formato PostScript, y luego lo envı́a a la impresora. Pero
PostScript sirve más que para imprimir, siendo un lenguaje de programación gráfico completo, con
www.elsolucionario.net
el cual podemos generar imágenes de gran calidad, y reescalables sin pérdida de resolución. Además,
muchos programas gráficos permiten exportar sus resultados en formato PostScript. Por lo tanto,
podemos generar nuestras figuras en alguno de estos programas (xfig es un excelente software, que
satisface la mayor parte de nuestras necesidades de dibujos simples; octave o gnuplot pueden ser
usados para generar figuras provenientes de cálculos cientı́ficos, etc.), lo cual creará un archivo con
extensión .ps (PostScript) o .eps (PostScript encapsulado).4 Luego introducimos la figura en el
documento LATEX, a través del paquete graphicx.
12.10.1. graphicx.sty
Si nuestra figura está en un archivo figura.eps, la instrucción a utilizar es:
\documentclass[12pt]{article}
\usepackage{graphicx}
\begin{document}
... Texto ...
\includegraphics[width=w, height=h]{figura.eps}
...
\end{document}
Los parámetros width y height son opcionales y puede omitirse uno para que el sistema escale
de acuerdo al parámetro dado. Es posible variar la escala completa de la figura o rotarla usando
comandos disponibles en graphicx.
4
eps es el formato preferido, pues contiene información sobre las dimensiones de la figura, información
que es utilizada por LATEX para insertar ésta adecuadamente en el texto.
www.elsolucionario.net
\begin{center}
\includegraphics[height=3cm]{figura.eps}
\end{center}
www.elsolucionario.net
12.10.2. Ambiente figure.
Insertar una figura es una cosa. Integrarla dentro del texto es otra. Para ello está el ambiente
figure, que permite: (a) posicionar la figura automáticamente en un lugar predeterminado o espe-
cificado por el usuario; (b) numerar las figuras; y (c) agregar un breve texto explicativo junto a la
figura.
Coloquemos la misma figura de la sección anterior dentro de un ambiente figure. El input:
\begin{figure}[h]
\begin{center}
\includegraphics[height=3cm]{figura.eps}
\end{center}
\caption{Un sujeto caminando.}
\label{caminando}
\end{figure}
da como resultado:
figure delimita lo que en TEX se denomina un objeto flotante, es decir, un objeto cuya posición
no está determinada a priori, y se ajusta para obtener los mejores resultados posibles. TEX considera
(de acuerdo con la tradición), que la mejor posición para colocar una figura es al principio o al final
www.elsolucionario.net
de la página. Además, lo ideal es que cada página tenga un cierto número máximo de figuras,
que ninguna figura aparezca en el texto antes de que sea mencionada por primera vez, y que, por
supuesto, las figuras aparezcan en el orden en que son mencionadas. Éstas y otras condiciones
determinan la posición que un objeto flotante tenga al final de la compilación. Uno puede forzar la
decisión de LATEX con el argumento opcional de figure:
t (top) extremo superior de la página
b (bottom) extremo inferior de la página
h (here) aquı́, en el punto donde está el comando
p (page of floats) en una página separada al final del texto
El argumento adicional ! suprime, para ese objeto flotante especı́fico, cualquier restricción que
exista sobre el número máximo de objetos flotantes en una página y el porcentaje de texto mı́nimo
que debe haber en una página.
Varios de estos argumentos se pueden colocar simultánemente, su orden dictando la prioridad.
Por ejemplo,
\begin{figure}[htbp]
www.elsolucionario.net
...
\end{figure}
indica que la figura se debe colocar como primera prioridad aquı́ mismo; si ello no es posible, al
comienzo de página (ésta o la siguiente, dependiendo de los detalles de la compilación), y ası́ suce-
sivamente.
Además, figure numera automáticamente la figura, colocando el texto “Figura N :”, y \caption
permite colocar una leyenda, centrada en el texto, a la figura. Puesto que la numeración es automáti-
ca, las figuras pueden ser referidas simbólicamente con \label y \ref (sección 12.6). Para que la
referencia sea correcta, \label debe estar dentro del argumento de \caption, o después, como
aparece en el ejemplo de la Figura 12.1 (\ref{caminando}!).
Finalmente, notemos que la figura debió ser centrada explı́citamente con center. figure no
hace nada más que tratar la figura como un objeto flotante, proporcionar numeración y leyenda. El
resto es responsabilidad del autor.
12.11. Cartas.
Para escribir cartas debemos emplear el estilo letter en vez del que hemos utilizado hasta
ahora, article. Comandos especiales permiten escribir una carta, poniendo en lugares adecuados
la dirección del remitente, la fecha, la firma, etc.
A modo de ejemplo, consideremos el siguiente input:
\documentclass[12pt]{letter}
\usepackage[spanish]{babel}
\begin{document}
\closing{Saludos,}
\cc{Arturo Prat \\ Luis Barrios}
\end{letter}
www.elsolucionario.net
\end{document}
9 de Julio de 1998
www.elsolucionario.net
Dr. Juan Pérez
Las Palmeras 3425
Ñuñoa, Santiago
Estimado Juan
Aún no tenemos novedades.
Parece increı́ble, pero los recientes acontecimientos nos han superado, a pesar
de nuestros esfuerzos. Esperamos que mejores tiempos nos aguarden.
Saludos,
Pedro Pérez
Secretario
Copia a: Arturo Prat
Luis Barrios
www.elsolucionario.net
Observemos que el texto de la carta está dentro de un ambiente letter, el cual tiene un argu-
mento obligatorio, donde aparece el destinatario de la carta (con su dirección opcionalmente).
Los comandos disponibles son:
\address{<direccion>} <direccion> del remitente.
www.elsolucionario.net
\documentclass[12pt]{letter}
\begin{document}
\address{<direccion remitente>}
\date{<fecha>}
\signature{<firma>}
\begin{letter}{<destinatario 1>}
\opening<apertura 1>
...
\end{letter}
\begin{letter}{<destinatario 2>}
\address{<direccion remitente 2>}
\signature{<firma 2>}
\opening<apertura 2>
...
\end{letter}
\begin{letter}{<destinatario 3>}
\opening<apertura 3>
...
\end{letter}
\end{document}
dará origen a tres cartas con la misma dirección de remitente y firma, salvo la segunda.
En todos estos comandos, lı́neas sucesivas son indicadas con \\.
archivo pdf con LATEX es necesario compilarlo con pdflatex. Ası́, pdflatex <archivo> generará un
archivo <archivo>.pdf en vez del <archivo>.dvi generado por el compilador usual.
Si nuestro documento tiene figuras, sólo es posible incluirlas en el documento si están también
en formato pdf. Por tanto, si tenemos un documento con figuras en PostScript, debemos introducir
dos modificaciones antes de compilar con pdflatex:
b) Convertir las figuras PostScript a pdf (con epstopdf, por ejemplo). Si tenemos una figura en el
archivo <archivo_figura>.eps, entonces epstopdf <archivo_figura>.eps genera el archivo
correspondiente <archivo_figura>.pdf.
Observar que el mismo paquete graphicx descrito en la sección 12.10 para incluir figuras
PostScript permite, sin modificaciones, incluir figuras en pdf.
www.elsolucionario.net
12.13. Modificando LATEX.
Esta sección se puede considerar “avanzada”. Normalmente uno se puede sentir satisfecho con
el desempeño de LATEX, y no es necesaria mayor intervención. A veces, dependiendo de la aplicación
y del autor, nos gustarı́a modificar el comportamiento default. Una alternativa es definir nuevos
comandos que sean útiles para nosotros. Si esos nuevos comandos son abundantes, o queremos reu-
tilizarlos frecuentemente en otros documentos, lo conveniente es considerar crear un nuevo paquete o
incluso una nueva clase. Examinaremos a continuación los elementos básicos de estas modificaciones.
\newcommand{<comando>}{<accion>}
El caso más sencillo es cuando una estructura se repite frecuentemente en nuestro documento.
Por ejemplo, digamos que un sujeto llamado Cristóbal no quiere escribir su nombre cada vez que
aparece en su documento:
con el primer carácter que no es letra. Por tanto, \nombre Loyola ignora el espacio al final de
\nombre, y el output serı́a “CristóbalLoyola”.
También es posible definir comandos que funcionen en modo matemático:
Como \vel contiene un comando matemático (\dot), \vel sólo puede aparecer en modo ma-
temático.
Podemos también incluir la apertura de modo matemático en la definición de \vel:
\newcommand{\vel}{$\dot x$}. De este modo, \vel (no $\vel$) da como output directamen-
te ẋ. Sin embargo, esta solución no es óptima, porque la siguiente ocurrencia de \vel da un error.
En efecto, si \vel = $\dot x$, entonces $ \vel(t)>0$ = $ $\dot x$> 0$. En tal caso, LATEX
ve que un modo matemático se ha abierto y cerrado inmediatamente, conteniendo sólo un espacio
entremedio, y luego, en modo texto, viene el comando \dot, que es matemático: LATEX acusa un
www.elsolucionario.net
error y la compilación se detiene.
La solución a este problema es utilizar el comando \ensuremath, que asegura que haya modo
matemático, pero si ya hay uno abierto, no intenta volverlo a abrir:
Un caso especial de comando matemático es el de operadores tipo logaritmo (ver Tabla 12.9). Si
queremos definir una traducción al castellano de \sin, debemos usar el comando \DeclareMathOperator
disponible via amsmath:
3. Y el tercero. \be
\item El primer caso.
\item Ahora el segundo.
\item Y el tercero.
\ee
www.elsolucionario.net
Podemos también definir comandos que acepten argumentos. Si el sujeto anterior, Cristóbal,
desea escribir cualquier nombre precedido de “Nombre:” en itálica, entonces puede crear el siguiente
comando:
\nombre{Violeta}
Observemos que \newcommand tiene un argumento opcional, que indica el número de argumentos
que el nuevo comando va a aceptar. Esos argumentos se indican, dentro de la definición del comando,
con #1, #2, etc. Por ejemplo, consideremos un comando que acepta dos argumentos:
\newcommand{\fn}[2]{f(#1,#2)}
www.elsolucionario.net
f (x, y) + f (x3 , y∗) = 0 . $$ \fn{x}{y} + \fn{x_3}{y*} = 0 \ . $$
En los casos anteriores, todos los argumentos son obligatorios. LATEX permite definir comandos
con un (sólo un) argumento opcional. Si el comando acepta n argumentos, el argumento opcional es
el #1, y se debe indicar, en un segundo paréntesis cuadrado, su valor default. Ası́, podemos modificar
el comando \fn del ejemplo anterior para que el primer argumento sea opcional, con valor default
x:
\newcommand{\fn}[2][x]{f(#1,#2)}
Redefinición de comandos
Ocasionalmente no nos interesa definir un nuevo comando, sino redefinir la acción de un comando
preexistente. Esto se hace con \renewcommand:
Un ejemplo más útil ocurre cuando queremos asegurar un cambio de párrafo, por ejemplo, para
colocar un tı́tulo de sección:
www.elsolucionario.net
mando: {\bf Secci\’on: #1}\par\vspace{.5cm}}
\underline{\texto},
\underline{\textodos},
y
\underline{\textotres}.
\texto conserva espacios en blanco antes y después del texto, \textodos sólo el espacio en
www.elsolucionario.net
blanco después del texto, y \textotres no tiene espacios en blanco alrededor del texto.
Nuevos ambientes
Nuevos ambientes en LATEX se definen con \newenvironment:
www.elsolucionario.net
Entonces, con
\begin{na}
Hola a todos. Es un placer saludarlos en este d\’{\i}a tan especial.
Los nuevos ambientes también pueden ser definidos de modo que acepten argumentos. Como con
\newcommand, basta agregar como argumento opcional a \newenvironment un número que indique
cuántos argumentos se van a aceptar:
Dentro de <comienzo ambiente>, se alude a cada argumento como #1, #2, etc. Los argumentos
no pueden ser usados en los comandos de cierre del ambiente (<final ambiente>). Por ejemplo,
modifiquemos el ambiente na anterior, de modo que en vez de colocar una lı́nea horizontal al
comienzo, coloque lo que le indiquemos en el argumento:
www.elsolucionario.net
hay que tener clara la diferencia entre uno y otro. En general, se puede decir que si nuestros comandos
involucran alterar la apariencia general del documento, entonces corresponde crear una nueva clase
(.cls). Si, por el contrario, deseamos que nuestros comandos funcionen en un amplio rango de
circunstancias, para diversas apariencias del documento, entonces lo adecuado es un paquete (.sty).
Consideremos por ejemplo la experiencia de los autores de estos apuntes. Para crear estos apuntes
necesitamos básicamente la clase book, con ciertas modificaciones: márgenes más pequeños, inclusión
automática de los paquetes amsmath, babel y graphicx, entre otros, y definición de ciertos ambientes
especı́ficos. Todo ello afecta la apariencia de este documento, cambiándola de manera apreciable,
pero a la vez de un modo que en general no deseamos en otro tipo de documento. Por ello lo hemos
compilado usando una clase adecuada, llamada mfm2.cls.
Por otro lado, uno de los autores ha necesitado escribir muchas tareas, pruebas y controles de
ayudantı́a en su vida, y se ha convencido de que su trabajo es más fácil creando una clase tarea.cls,
que sirve para esos tres propósitos, definiendo comandos que le permiten especificar fácilmente la
fecha de entrega de la tarea, o el tiempo disponible para una prueba, los nombres del profesor y el
ayudante, etc., una serie de comandos especı́ficos para sus necesidades.
Sin embargo, tanto en este documento que usa mfm2.cls, como en las tareas y pruebas que
usan tarea.cls, se utilizan algunos comandos matemáticos que no vienen con LATEX, pero que
son recurrentes, como \sen (la función seno en castellano), \modulo (el módulo de un vector), o
\TLaplace (la transformada de Laplace). Para que estos comandos estén disponibles en cualquier
tipo de documento, necesitamos reunirlos en un paquete, en este caso addmath.sty. De este modo,
mfm2.cls, tarea.cls o cualquier otra clase pueden llamar a este paquete y utilizar sus comandos.
Estructura básica.
La estructura básica de un paquete o una clase es:
a) Identificación: Información general (nombre del paquete, fecha de creación, etc.). (Obligatoria.)
c) Opciones: Comandos relacionados con el manejo de las opciones con las cuales el paquete o clase
pueden ser invocados. (Opcional.)
www.elsolucionario.net
d) Más declaraciones: Aquı́ van los comandos que constituyen el cuerpo de la clase o paquete.
(Obligatoria: si no hay ninguna declaración, el paquete o clase no hace nada, naturalmente.)
La identificación está consituida por las siguientes dos lı́neas, que deben ir al comienzo del
archivo:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{<paquete>}[<fecha> <otra informacion>]
La primera lı́nea indica a LATEX que éste es un archivo para LATEX 2ε . La segunda lı́nea especifica
que se trata de un paquete, indicando el nombre del mismo (es decir, el nombre del archivo sin
extensión) y, opcionalmente, la fecha (en formato YYYY/MM/DD) y otra información relevante. Por
ejemplo, nuestro paquete addmath.sty comienza con las lı́neas:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{addmath}[1998/09/30 Macros matematicos adicionales (VM)]
Si lo que estamos definiendo es una clase, usamos el comando \ProvidesClass. Para nuestra
www.elsolucionario.net
clase mfm2.cls:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mfm2}[2002/03/25 Estilo para apuntes MFM II (VM)]
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{addmath}[1998/09/30 Macros matematicos adicionales (VM)]
(x|y) \prodInt{x}{y}
hxi \promedio{x}
Z ∞
dz f (z) \intii dz\, f(z)
−∞
∠ ABC = 90◦ \angle\, ABC = 90\grados
2 F1 (a, b, c ; d) \Hipergeometrica{a}{b}{c}{d}
www.elsolucionario.net
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{addmath}[1998/09/30 Macros matematicos adicionales (VM)]
\RequirePackage{amsmath}
\RequirePackage{amssymb}
\RequirePackage{euscript}
...
www.elsolucionario.net
\newcommand{\norma}[1]{\ensuremath \left\lVert\, #1 \,\right\rVert}
\newcommand{\intC}{{\sideset{^*}{}\int}}
\DeclareMathOperator{\senh}{senh}
...
Por ejemplo:
kxk \norma{x}
∗Z
dz f (z) \intC dz \, f(z)
senh(2y) \senh (2y)
La posibilidad de basar un archivo .sty o .cls en otro es particularmente importante para
una clase, ya que contiene una gran cantidad de comandos y definiciones necesarias para compilar
el documento exitosamente. Sin embargo, un usuario normal, aun cuando desee definir una nueva
clase, estará interesado en modificar sólo parte del comportamiento. Con \LoadClass, dicho usuario
puede cargar la clase sobre la cual se desea basar, y luego introducir las modificaciones necesarias,
facilitando enormemente la tarea.
Por ejemplo, al preparar este documento fue claro desde el comienzo que se necesitaba esencial-
mente la clase book, ya que serı́a un texto muy extenso, pero también era claro que se requerı́an
ciertas modificaciones. Entonces, en nuestra clase mfm2.cls lo primero que hacemos es cargar la
clase book, más algunos paquetes necesarios (incluyendo nuestro addmath), y luego procedemos a
modificar o añadir comandos:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mfm2}[2002/03/25 Estilo para apuntes MFM II (VM)]
\LoadClass[12pt]{book}
\RequirePackage[spanish]{babel}
5
Estos comandos sólo se pueden usar en un archivo .sty o .cls Para documentos normales, la manera
de cargar un paquete es \usepackage, y para cargar una clase es \documentclass.
www.elsolucionario.net
\RequirePackage{enumerate}
\RequirePackage{addmath}
En un archivo .sty o un .cls se pueden cargar varios paquetes con \RequirePackage. \LoadClass,
en cambio, sólo puede aparecer en un .cls, y sólo es posible usarlo una vez (ya que normalmente
clases distintas son incompatibles entre sı́).
Manejo de opciones
En el último ejemplo anterior, la clase mfm2 carga la clase book con la opción 12pt. Esto significa
que si nuestro documento comienza con \documentclass{mfm2}, será compilado de acuerdo a la
clase book, en 12 puntos. No es posible cambiar esto desde nuestro documento. Serı́a mejor que
pudiéramos especificar el tamaño de letra fuera de la clase, de modo que \documentclass{mfm2}
dé un documento en 10 puntos, y \documentclass[12pt]{mfm2} uno en 12 puntos. Para lograr
esto hay que poder pasar opciones desde la clase mfm2 a book.
El modo más simple de hacerlo es con \LoadClassWithOptions. Si mfm2.cls ha sido llamada
con opciones <opcion1>,<opcion2>, etc., entonces book será llamada con las mismas opciones.
www.elsolucionario.net
Por tanto, basta modificar en mfm2.cls la lı́nea \LoadClass[12pt]{book} por:
\LoadClassWithOptions{book}
\RequirePackageWithOptions{<paquete_base>}
El ejemplo anterior puede ser suficiente en muchas ocasiones, pero en general uno podrı́a llamar
a nuestra nueva clase, mfm2, con opciones que no tienen nada que ver con book. Por ejemplo,
podrı́amos llamarla con opciones spanish,12pt. En tal caso, deberı́a pasarle spanish a babel, y
12pt a book. Más aún, podrı́amos necesitar definir una nueva opción, que no existe en ninguna de
las clases o paquetes cargados por book, para modificar el comportamiento de mfm2.cls de cierta
manera especı́fica no prevista. Estas dos tareas, discriminar entre opciones antes de pasarla a algún
paquete determinado, y crear nuevas opciones, constituyen un manejo más avanzado de opciones.
A continuación revisaremos un ejemplo combinado de ambas tareas, extraido de la clase con la cual
compilamos este texto, mfm2.cls.
La idea es poder llamar a mfm2 con una opción adicional keys, que permita agregar al dvi
información sobre las etiquetas (dadas con \label) de ecuaciones, figuras, etc., que aparezcan en
el documento (veremos la utilidad y un ejemplo de esto más adelante). Lo primero es declarar una
nueva opción, con:
\DeclareOption{<opcion>}{<comando>}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mfm2}[2002/03/25 Estilo para apuntes MFM II (VM)]
...
\DeclareOption{keys}{...}
www.elsolucionario.net
...
\ProcessOptions\relax
...
Observamos que después de declarar la o las opciones (en este caso keys), hay que procesarlas,
con \ProcessOptions.6
Las lı́neas anteriores permiten que \documentclass{mfm2} y \documentclass[keys]{mfm2}
sean ambas válidas, ejecutándose o no ciertos comandos dependiendo de la forma utilizada.
Si ahora queremos que \documentclass[keys,12pt]{mfm2} sea una lı́nea válida, de-
bemos procesar keys dentro de mfm2.cls, y pasarle a book.cls las opciones restantes. El
siguiente es el código definitivo:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mfm2}[2002/03/25 Estilo para apuntes MFM II (VM)]
\newif\ifkeys\keysfalse
\DeclareOption{keys}{\keystrue}
www.elsolucionario.net
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessOptions\relax
\LoadClass{book}
\RequirePackage[spanish]{babel}
\RequirePackage{amsmath}
\RequirePackage{theorem}
\RequirePackage{epsfig}
\RequirePackage{ifthen}
\RequirePackage{enumerate}
\RequirePackage{addmath}
\ifkeys\RequirePackage[notref,notcite]{showkeys}\fi
Sin entrar en demasiados detalles, digamos que la opción keys tiene el efecto de hacer
que una cierta variable lógica \ifkeys, sea verdadera (cuarta lı́nea del código). La siguien-
te lı́nea (\DeclareOption*...) hace que todas las opciones que no han sido procesadas
(12pt, por ejemplo) se pasen a la clase book. A continuación se procesan las opciones con
\ProcessOptions, y finalmente se carga la clase book.
Las lı́neas siguientes cargan todos los paquetes necesarios, y finalmente se encuentran
todos los nuevos comandos y definiciones que queremos incluir en mfm2.cls.
Observemos que la forma particular en que se carga el paquete showkeys. Ésa es pre-
cisamente la función de la opción keys que definimos: showkeys.sty se carga con ciertas
opciones sólo si se da la opción keys.
¿Cuál es su efecto? Consideremos el siguiente texto de ejemplo, en que mfm2 ha sido
llamada sin la opción keys:
6
\relax es un comando de TEX que, esencialmente, no hace nada, ni siquiera introduce un espacio en
blanco, y es útil incluirlo en puntos crı́ticos de un documento, como en este ejemplo.
www.elsolucionario.net
\documentclass[12pt]{mfm2}
\begin{document}
La opci\’on \verb+keys+ resulta muy \’util cuando tengo objetos numerados
autom\’aticamente, como una ecuaci\’on:
\begin{equation}
\label{newton}
\vec F = m \vec a \ .
\end{equation}
y luego quiero referirme a ella: Ec.\ \eqref{newton}.
En el primer caso, se ha compilado sin la opción keys, y en el segundo con ella. El efecto
es que, si se usa un \label en cualquier parte del documento, aparece en el margen derecho
una caja con el nombre de dicha etiqueta (en este caso, newton). Esto es útil para cualquier
tipo de documentos, pero lo es especialmente en textos como estos apuntes, muy extensos y
con abundantes referencias. En tal caso, tener un modo visual, rápido, de saber los nombres
de las ecuaciones sin tener que revisar trabajosamente el archivo fuente es una gran ayuda.
www.elsolucionario.net
Ası́, versiones preliminares pueden ser compiladas con la opción keys, y la versión final sin
ella, para no confesar al lector nuestra mala memoria o nuestra comodidad.
www.elsolucionario.net
Caso 1: \documentclass[12pt]{mfm2}
F~ = m~a . (1)
Caso 2: \documentclass[keys,12pt]{mfm2}
www.elsolucionario.net
F~ = m~a . (1) newton
La primera lı́nea nos comunica que LATEX ha encontrado un error. A veces los errores
tienen que ver con procesos más internos, y son encontrados por TEX. Esta lı́nea nos informa
www.elsolucionario.net
quién encontró el error.
La tercera lı́nea comienza con un signo de exclamación. Éste es el indicador del error. Nos
dice de qué error se trata.
Las dos lı́neas siguientes describen el error en términos de comandos de bajo nivel.
La lı́nea 6 nos dice dónde ocurrió el error: la lı́nea 140 en este caso. Además nos informa
del texto conflictivo: \begin{itemie}.
En realidad, el mensaje nos indica dónde LATEX advirtió el error por primera vez, que no
es necesariamente el punto donde el error se cometió. Pero la gran mayorı́a de las veces la
indicación es precisa. De hecho, es fácil darse cuenta, con la tercera lı́nea
(Environment itemie undefined)
y la sexta (\begin{itemie}) que el error consistió en escribir itemie en vez de itemize. La
información de LATEX es clara en este caso y nos dice correctamente qué ocurrió y dónde.
Luego viene un ?. LATEX está esperando una respuesta de nosotros. Tenemos varias alter-
nativas. Comentaremos sólo cuatro, tı́picamente usadas:
(a) h <Enter>
Solicitamos ayuda. TEX nos explica brevemente en qué cree él que consiste el error y/o
nos da alguna recomendación.
(b) x <Enter>
Abortamos la compilación. Deberemos volver al editor y corregir el texto. Es la opción
más tı́pica cuando uno tiene ya cierta experiencia, pues el mensaje basta para reconocer
el error.
(c) <Enter>
Ignoramos el error y continuamos la compilación. TEX hace lo que puede. En algunos
casos esto no tiene consecuencias graves y podremos llegar hasta el final del archivo
sin mayores problemas. En otros casos, ignorar el error puede provocar que ulteriores
comandos —perfectamente válidos en principio— no sean reconocidos y, ası́, acumular
www.elsolucionario.net
muchos errores más. Podemos continuar con <Enter> sucesivos hasta llegar al final de
la compilación.
(d) q <Enter>
La acción descrita en el punto anterior puede llegar a ser tediosa o infinita. q hace
ingresar a TEX en batchmode, modo en el cual la compilación prosigue ignorando todos
los errores hasta el final del archivo, sin enviar mensajes a pantalla y por ende sin que
debamos darle infinitos <Enter>.
Las opciones (c) y (d) son útiles cuando no entendemos los mensajes de error. Como
TEX seguirá compilando haciendo lo mejor posible, al mirar el dvi puede que veamos más
claramente dónde comenzaron a ir mal las cosas y, por tanto, por qué.
Como dijimos, LATEX indica exactamente dónde encontró el error, de modo que hemos de
ponerle atención. Por ejemplo, si tenemos en nuestro documento la lı́nea:
... un error inesperado\fotnote{En cualquier punto.}
www.elsolucionario.net
puede decidir...
generarı́a el mensaje de error:
! Undefined control sequence.
*
Falta \end{document}. (Dar Ctrl-C o escribir \end{document} para salir de la compilación.)
www.elsolucionario.net
\begin{...} con un argumento que corresponde a un ambiente no definido.
! Missing $ inserted.
Errores c), d), f), h) de la Sec. 12.14.1.
! Missing { (o }) inserted.
Paréntesis cursivos no apareados.
! Missing \begin{document}.
Falta \begin{document} o hay algo incorrecto en el preámbulo.
12.14.2. Advertencias.
La estructura de una advertencia de LATEX es:
LaTeX warning. <mensaje>.
Algunos ejemplos:
Label ‘...’ multiply defined.
Dos \label tienen el mismo argumento.
Label(s) may have changed. Rerun to get cross-references right.
Los números impresos por \ref y \pageref pueden ser incorrectos, pues los valores corres-
pondientes cambiaron respecto al contenido del aux generado en la compilación anterior.
Reference ‘...’ on page ... undefined.
El argumento de un \ref o un \pageref no fue definido por un \label.
TEX también envı́a advertencias. Se reconocen porque no comienzan con TeX warning.
www.elsolucionario.net
Algunos ejemplos.
Overfull \hbox ...
TEX no encontró un buen lugar para cortar una lı́nea, y puso más texto en ella que lo
conveniente.
Overfull \vbox ...
TEX no encontró un buen lugar para cortar una página, y puso más texto en ella que lo
conveniente.
Underfull \hbox ...
TEX construyó una lı́nea con muy poco material, de modo que el espacio entre palabras puede
ser excesivo.
Underfull \vbox ...
TEX construyó una página con muy poco material, de modo que los espacios verticales (entre
párrafos) pueden ser excesivos.
Las advertencias de LATEX siempre deben ser atendidas. Una referencia doblemente defini-
da, o no compilar por segunda vez cuando LATEX lo sugiere, generará un resultado incorrecto
en el dvi. Una referencia no definida, por su parte, hace aparecer un signo ?? en el texto
final. Todos resultados no deseados, por cierto.
Las advertencias de TEX son menos decisivas. Un overfull o underfull puede redundar en
que alguna palabra se salga del margen derecho del texto, que el espaciado entre palabras en
una lı́nea sea excesivo, o que el espacio vertical entre párrafos sea demasiado. Los estándares
de calidad de TEX son altos, y por eso envı́a advertencias frecuentemente. Pero generalmente
los defectos en el resultado final son imperceptibles a simple vista, o por lo menos no son
suficientes para molestarnos realmente. A veces sı́, por supuesto, y hay que estar atentos.
Siempre conviene revisar el texto y prestar atención a estos detalles, aunque ello sólo tiene
sentido al preparar la versión definitiva del documento.