1 #LyX 1.1 created this file. For more info see http://www.lyx.org/
14 \paperorientation portrait
17 \paragraph_separation indent
19 \quotes_language english
23 \paperpagestyle default
32 Leandro Lucarella (77.891)
38 Copyright (C) 2002 Leandro Lucarella.
41 Tiene permiso para copiar, distribuir y/o modificar este documento bajo
42 los términos de la GNU Free Documentation License (Licencia de Documentación
43 Libre GNU), Versión 1.1 o cualquier versión posterior publicada por la Free
44 Software Foundation (Fundación de Software Libre); sin Invariant Sections
45 (Secciones Invariantes), sin Front-Cover Texts (Texto de Portada-Delantera),
46 y sin Back-Cover Texts (Texto de Portada-Trasera).
47 Puede obtener una copia de la licencia en inglés en
48 \begin_inset LatexCommand \url{http://www.gnu.org/licenses/fdl.txt}
52 o en español (sin validez legal) en
53 \begin_inset LatexCommand \url{http://www.geocities.com/larteaga/gnu/gfdl.html}
61 \begin_inset LatexCommand \tableofcontents{}
74 El objetivo de este trabajo práctico es adquirir experiencia en el uso de
75 métodos iterativos para la resolución de sistemas de ecuaciones lineales
76 ralos resultantes de la discretización mediante diferencias finitas de
77 ecuaciones diferenciales.
78 Mediante experimentación numérica se optimiza la velocidad de convergencia
79 del proceso iterativo en función de la discretización empleada.
80 Los resultados de la optimización numérica se comparan con resultados teóricos.
81 Finalmente se efectúa una aplicación práctica.
87 La solución aproximada
88 \begin_inset Formula \( f_{i} \)
91 de la ecuación de Laplace
92 \begin_inset Formula \( \nabla ^{2}\phi =0 \)
95 en un dominio bidimensional cuadrado discretizado usando una grilla uniforme
97 \begin_inset Formula \( (x_{i}=x_{0}+ih\; ;\; y_{j}=y_{0}+jh) \)
100 puede obtenerse resolviendo el sistema de ecuaciones lineales que surge
101 de aplicar el siguiente operador a cada uno de los nodos de la grilla:
102 \begin_inset Formula \[
103 4f_{i,j}-f_{i-1,j}-f_{i+1,j}-f_{i,j-1}-f_{i,j+1}=0\]
107 La matriz de coeficientes del sistema de ecuaciones lineales resultante
108 es rala (a lo sumo 5 elementos por fila son distintos de cero) y presenta
109 una estructura tri-diagonal en bloques.
110 La resolución de este sistema de ecuaciones fue ampliamente estudiada en
111 forma teórica durante la época del auge del método de las diferencias finitas
112 (aproximadamente a mediados del siglo XX).
113 Estos resultados muestran que el método de Gauss-Seidel converge cuando
114 se aplican condiciones de borde de tipo Dirichlet pero que la velocidad
115 de convergencia disminuye a medida que se mejora la discretización (reducción
117 Esta situación es revertida utilizando sobre-relajación con un valor óptimo
118 que también se estableció en forma teórica para dominios cuadrados y rectangula
120 Entre las aplicaciones más importantes efectuadas en ese momento con esta
121 técnica se encuentra el desarrollo de reactores nucleares.
124 Planteo del Trabajo Práctico.
127 El trabajo práctico se divide en dos partes: en la primera se analiza la
128 optimización del proceso iterativo y en la segunda se efectúa una aplicación
129 practica consistente en determinar la distribución de temperaturas sobre
150 \begin_inset LatexCommand \label{fig:grilla}
154 Discretización de un dominio cuadrado (N=4).
158 \begin_inset Figure size 216 216
168 \begin_inset LatexCommand \vref{fig:grilla}
172 se muestra la discretización de un dominio cuadrado cuyos lados se dividieron
173 en N = 4 partes iguales.
174 Sobre los contornos el valor de se encuentra impuesto (condición de tipo
176 La solución aproximada
177 \begin_inset Formula \( f_{i} \)
181 \begin_inset Formula \( (N-1)\cdot (N-1) \)
184 nodos interiores se obtienen como solución de un sistema de ecuaciones
185 lineales cuya matriz de coeficientes, para N = 4, es de la forma:
186 \begin_inset Formula \[
187 A=\left[ \begin{array}{ccc}
191 \end{array}\right] \, con\, T=\left[ \begin{array}{ccc}
195 \end{array}\right] \]
203 \begin_inset Formula \( I \)
206 es la matriz identidad de dimensión N - 1.
207 Si se aplica el método de Gauss-Seidel a este sistema de ecuaciones el
208 radio espectral de la matriz de iteración resulta
209 \begin_inset Formula \( \rho _{\left( T_{GS}\right) }=\cos \left( \frac{\pi }{N}\right) \)
213 Observar que si bien el método converge para todo N > 0, la convergencia
214 es muy lenta para valores grandes de N pues
215 \begin_inset Formula \( \rho _{\left( T_{GS}\right) } \)
219 En cambio, el método SOR optimizado presenta un
220 \begin_inset Formula \( \rho _{\left( T_{\omega }\right) _{optimo}}=\omega _{optimo}-1 \)
223 donde el factor de relajación óptimo es:
227 \begin_inset Formula \[
228 \omega _{optimo}=\frac{2}{1+\sqrt{\rho _{\left( T_{GS}\right) }}}=\frac{2}{1+\sin \left( \frac{\pi }{N}\right) }\]
232 Dado que las propiedades de convergencia no dependen del valor de arranque
233 ni del valor sobre los contornos, en la primera parte de este trabajo se
234 asume, por simplicidad, que en los contornos
235 \begin_inset Formula \( \phi =1 \)
239 \begin_inset Formula \( f_{i}=0 \)
242 como valor de arranque.
243 Además se indica utilizar el siguiente criterio de convergencia:
244 \begin_inset Formula \[
245 R\leq R_{TOL}\, donde\, R=\frac{\left\Vert f^{k+1}-f^{k}\right\Vert _{2}}{\left\Vert f^{k+1}\right\Vert _{2}}\]
250 \begin_inset LatexCommand \label{sec:s}
254 Para estimar el radio espectral de la matriz de iteración,
255 \begin_inset Formula \( \rho _{\left( T_{\omega }\right) } \)
258 , se usará la expresión:
259 \begin_inset Formula \[
260 S=\frac{\left\Vert f^{k+1}-f^{k}\right\Vert _{2}}{\left\Vert f^{k}-f^{k-1}\right\Vert _{2}}\]
267 Construcción del programa principal.
270 Para comenzar se describirá brevemente el proceso de construcción del programa
271 principal que resuelve este particular problema por el método de SOR (o
273 \begin_inset Formula \( \omega =1 \)
279 Primero se identificaron los tipos de nodos presentes, dividiéndolos en
286 vértices Tienen dos condiciones de borde.
292 bordes Tienen una condición de borde.
296 centrales No tienen condiciones de borde.
299 A su vez, cada grupo (exceptuando los nodos centrales) se divide en cuatro
300 subgrupos, según la ubicación de los bordes, tomando como nomenclatura
301 a los puntos cardinales como se ve en la figura
306 \begin_inset LatexCommand \label{fig:regiones}
310 Regiones según tipo de nodo.
314 \begin_inset Figure size 216 216
324 \begin_inset LatexCommand \vref{fig:regiones}
329 De esta forma, podeNordestemos distinguir N nodos en los vértices (en orden
330 ascendente según el número de nodo):
345 De la misma manera se distinguen cuatro subgrupos de los nodos de los bordes
346 (con N - 3 nodos cada uno):
361 Podemos observar entonces que se tiene 9 tipos distintos de nodos, contenidos
365 El problema siguiente es la identificación de cada nodo.
366 Probando con distintos N podemos hallar las siguientes condiciones para
367 que un nodo sea de un tipo particular, a saber:
370 SO Si es el primer nodo.
373 NO Si es el nodo número N - 1.
376 SE Si es el nodo número
377 \begin_inset Formula \( \left( N-1\right) \cdot \left( N-2\right) +1=N^{2}-3\cdot N+3 \)
383 NE Si es el nodo número
384 \begin_inset Formula \( \left( N-1\right) ^{2}=N^{2}-2\cdot N+1 \)
390 O Si el número de nodo pertenece al intervalo
391 \begin_inset Formula \( \left[ 2;N-1\right] \)
397 N Si el número de nodo es múltiplo de N - 1.
400 S Si el número de nodo menos 1 es múltiplo de N - 1.
403 E Si el número de nodo pertenece al intervalo
404 \begin_inset Formula \( \left[ N^{2}-3\cdot N+4;N^{2}-2\cdot N\right] \)
410 C El resto de los nodos son centrales.
413 Finalmente el método SOR para este caso se reduce a:
414 \begin_inset Formula \[
415 \phi _{i}^{k+1}=\left( 1-\omega \right) \cdot \phi _{i}^{k}+\frac{\omega }{4}\cdot \left( b_{i}+\phi _{i-N+1}^{k+1}+\phi _{i-1}^{k+1}+\phi _{i+1}^{k}+\phi _{i+N-1}^{k}\right) \]
422 Siendo necesario sumar sólo algunos términos de
423 \begin_inset Formula \( \phi \)
426 según el tipo de nodo.
432 En los primeros tres puntos del trabajo se propone hallar la solución para
433 N = 4, 8, 16 y 32, primero con
434 \begin_inset Formula \( R_{TOL}=0.01 \)
438 \begin_inset Formula \( \omega =1.0 \)
441 y luego con incrementos de
442 \begin_inset Formula \( \Delta \omega =0.05 \)
448 A continuación se presentan los resultados de las corridas para
449 \begin_inset Formula \( \omega =1.0 \)
452 , en orden de nodo ascendente de izquierda a derecha y de arriba a abajo.
456 \begin_inset LatexCommand \label{sec:resultadosN}
460 Resultados para distintos N.
461 \layout Subsubsection
469 Radio espectral experimental: 0.50
472 0.99 0.99 1.00 0.99 0.99 1.00 1.00 1.00
473 \layout Subsubsection
481 Radio espectral experimental: 0.86
484 0.98 0.97 0.96 0.96 0.97 0.98 0.99 0.97 0.94
487 0.93 0.93 0.94 0.96 0.98 0.96 0.93 0.92 0.92
490 0.93 0.95 0.97 0.96 0.93 0.92 0.92 0.93 0.95
493 0.97 0.97 0.94 0.93 0.93 0.94 0.96 0.98 0.98
496 0.96 0.95 0.95 0.96 0.97 0.98 0.99 0.98 0.97
500 \layout Subsubsection
508 Radio espectral experimental: 0.96
511 0.98 0.97 0.95 0.94 0.93 0.92 0.92 0.92 0.92
514 0.92 0.93 0.94 0.96 0.97 0.99 0.97 0.93 0.91
517 0.88 0.86 0.85 0.84 0.84 0.84 0.85 0.87 0.89
520 0.92 0.94 0.97 0.95 0.91 0.86 0.83 0.80 0.78
523 0.77 0.77 0.78 0.79 0.81 0.84 0.88 0.92 0.96
526 0.94 0.88 0.83 0.79 0.75 0.73 0.71 0.71 0.72
529 0.74 0.77 0.80 0.85 0.90 0.95 0.93 0.86 0.80
532 0.75 0.71 0.68 0.67 0.66 0.67 0.70 0.73 0.77
535 0.82 0.88 0.94 0.92 0.85 0.78 0.73 0.68 0.65
538 0.63 0.63 0.64 0.67 0.70 0.75 0.81 0.87 0.93
541 0.92 0.84 0.77 0.71 0.67 0.63 0.62 0.61 0.62
544 0.65 0.69 0.74 0.80 0.86 0.93 0.92 0.84 0.77
547 0.71 0.66 0.63 0.61 0.61 0.62 0.65 0.69 0.74
550 0.80 0.86 0.93 0.92 0.84 0.78 0.72 0.67 0.64
553 0.62 0.62 0.63 0.66 0.70 0.75 0.80 0.87 0.93
556 0.92 0.85 0.79 0.74 0.70 0.67 0.65 0.65 0.66
559 0.68 0.72 0.76 0.82 0.88 0.94 0.93 0.87 0.81
562 0.77 0.73 0.70 0.69 0.69 0.70 0.72 0.75 0.79
565 0.84 0.89 0.95 0.94 0.89 0.84 0.80 0.77 0.75
568 0.74 0.74 0.75 0.76 0.79 0.82 0.86 0.91 0.95
571 0.96 0.92 0.88 0.85 0.82 0.81 0.80 0.80 0.80
574 0.82 0.84 0.86 0.90 0.93 0.96 0.97 0.94 0.92
577 0.90 0.88 0.87 0.86 0.86 0.87 0.88 0.89 0.91
580 0.93 0.95 0.98 0.99 0.97 0.96 0.95 0.94 0.93
583 0.93 0.93 0.93 0.94 0.95 0.95 0.96 0.98
584 \layout Subsubsection
592 Radio espectral experimental: 0.98
595 0.98 0.97 0.96 0.94 0.93 0.92 0.91 0.91 0.90
598 0.90 0.89 0.89 0.89 0.88 0.88 0.88 0.88 0.88
601 0.88 0.89 0.89 0.89 0.90 0.90 0.91 0.92 0.93
604 0.94 0.96 0.97 0.99 0.97 0.94 0.91 0.89 0.87
607 0.85 0.83 0.82 0.80 0.80 0.79 0.78 0.78 0.77
610 0.77 0.77 0.77 0.77 0.77 0.78 0.78 0.79 0.80
613 0.81 0.83 0.85 0.87 0.89 0.92 0.94 0.97 0.96
616 0.91 0.87 0.84 0.81 0.78 0.75 0.73 0.71 0.70
619 0.69 0.68 0.67 0.67 0.67 0.66 0.66 0.66 0.67
622 0.67 0.68 0.69 0.71 0.73 0.75 0.77 0.81 0.84
625 0.88 0.92 0.96 0.94 0.89 0.84 0.79 0.75 0.71
628 0.68 0.65 0.63 0.61 0.60 0.59 0.58 0.57 0.57
631 0.57 0.57 0.57 0.57 0.58 0.59 0.60 0.62 0.65
634 0.67 0.71 0.75 0.79 0.84 0.89 0.95 0.93 0.87
637 0.81 0.75 0.70 0.65 0.62 0.58 0.56 0.53 0.52
640 0.50 0.49 0.48 0.48 0.48 0.48 0.48 0.48 0.49
643 0.50 0.52 0.54 0.57 0.61 0.65 0.70 0.75 0.81
646 0.87 0.94 0.92 0.85 0.78 0.71 0.65 0.60 0.56
649 0.52 0.49 0.46 0.44 0.43 0.42 0.41 0.40 0.40
652 0.40 0.40 0.40 0.41 0.43 0.45 0.47 0.51 0.55
655 0.60 0.65 0.71 0.78 0.85 0.93 0.91 0.83 0.75
658 0.68 0.62 0.56 0.51 0.47 0.43 0.40 0.38 0.36
661 0.35 0.34 0.33 0.33 0.33 0.33 0.34 0.35 0.36
664 0.39 0.41 0.45 0.50 0.55 0.61 0.68 0.76 0.84
667 0.92 0.91 0.82 0.73 0.65 0.58 0.52 0.47 0.42
670 0.38 0.35 0.33 0.31 0.29 0.28 0.27 0.27 0.27
673 0.27 0.28 0.29 0.31 0.33 0.36 0.40 0.45 0.51
676 0.58 0.65 0.74 0.82 0.91 0.90 0.80 0.71 0.63
679 0.56 0.49 0.43 0.38 0.34 0.31 0.28 0.26 0.24
682 0.23 0.22 0.22 0.22 0.22 0.23 0.24 0.26 0.29
685 0.32 0.36 0.42 0.48 0.55 0.63 0.72 0.81 0.90
688 0.90 0.80 0.70 0.61 0.53 0.46 0.40 0.35 0.31
691 0.27 0.24 0.22 0.20 0.19 0.18 0.18 0.18 0.18
694 0.19 0.20 0.22 0.25 0.28 0.33 0.39 0.45 0.53
697 0.61 0.70 0.80 0.90 0.89 0.79 0.69 0.60 0.52
700 0.44 0.38 0.33 0.28 0.24 0.21 0.19 0.17 0.16
703 0.15 0.14 0.14 0.15 0.15 0.17 0.19 0.22 0.26
706 0.30 0.36 0.43 0.51 0.60 0.69 0.79 0.90 0.89
709 0.78 0.68 0.59 0.50 0.43 0.36 0.31 0.26 0.22
712 0.19 0.17 0.15 0.13 0.12 0.12 0.12 0.12 0.13
715 0.14 0.16 0.19 0.23 0.28 0.34 0.41 0.49 0.58
718 0.68 0.78 0.89 0.89 0.78 0.67 0.58 0.49 0.42
721 0.35 0.29 0.24 0.20 0.17 0.15 0.13 0.11 0.10
724 0.10 0.10 0.10 0.11 0.12 0.14 0.17 0.21 0.26
727 0.33 0.40 0.48 0.57 0.67 0.78 0.89 0.88 0.77
730 0.67 0.57 0.48 0.41 0.34 0.28 0.23 0.19 0.16
733 0.13 0.11 0.10 0.09 0.08 0.08 0.08 0.09 0.11
736 0.13 0.16 0.20 0.25 0.31 0.39 0.47 0.57 0.67
739 0.78 0.89 0.88 0.77 0.67 0.57 0.48 0.40 0.33
742 0.27 0.22 0.18 0.15 0.12 0.10 0.09 0.08 0.07
745 0.07 0.07 0.08 0.10 0.12 0.15 0.19 0.24 0.31
748 0.38 0.47 0.56 0.66 0.77 0.89 0.88 0.77 0.66
751 0.57 0.48 0.40 0.33 0.27 0.22 0.18 0.14 0.12
754 0.10 0.08 0.07 0.07 0.06 0.07 0.08 0.09 0.11
757 0.15 0.19 0.24 0.30 0.38 0.46 0.56 0.66 0.77
760 0.89 0.88 0.77 0.66 0.57 0.48 0.40 0.33 0.27
763 0.22 0.18 0.14 0.12 0.10 0.08 0.07 0.06 0.06
766 0.07 0.08 0.09 0.11 0.14 0.19 0.24 0.30 0.38
769 0.46 0.56 0.66 0.77 0.89 0.88 0.77 0.66 0.57
772 0.48 0.40 0.33 0.27 0.22 0.18 0.15 0.12 0.10
775 0.08 0.07 0.07 0.07 0.07 0.08 0.09 0.12 0.15
778 0.19 0.24 0.30 0.38 0.46 0.56 0.66 0.77 0.89
781 0.88 0.77 0.67 0.57 0.48 0.40 0.34 0.28 0.23
784 0.19 0.15 0.13 0.11 0.09 0.08 0.08 0.08 0.08
787 0.09 0.10 0.12 0.16 0.20 0.25 0.31 0.39 0.47
790 0.56 0.67 0.78 0.89 0.89 0.78 0.67 0.58 0.49
793 0.41 0.35 0.29 0.24 0.20 0.17 0.14 0.12 0.11
796 0.10 0.09 0.09 0.09 0.10 0.12 0.14 0.17 0.21
799 0.26 0.32 0.40 0.48 0.57 0.67 0.78 0.89 0.89
802 0.78 0.68 0.59 0.50 0.43 0.36 0.31 0.26 0.22
805 0.19 0.16 0.14 0.13 0.12 0.11 0.11 0.12 0.12
808 0.14 0.16 0.19 0.23 0.28 0.34 0.41 0.49 0.58
811 0.68 0.79 0.89 0.89 0.79 0.69 0.60 0.52 0.45
814 0.39 0.33 0.29 0.25 0.22 0.19 0.17 0.16 0.15
817 0.15 0.14 0.15 0.16 0.17 0.19 0.22 0.26 0.31
820 0.37 0.43 0.51 0.60 0.69 0.79 0.90 0.90 0.80
823 0.71 0.62 0.54 0.47 0.41 0.36 0.32 0.28 0.26
826 0.23 0.21 0.20 0.19 0.19 0.19 0.19 0.20 0.21
829 0.23 0.26 0.30 0.34 0.40 0.46 0.54 0.62 0.71
832 0.81 0.90 0.90 0.81 0.73 0.65 0.57 0.51 0.45
835 0.40 0.36 0.33 0.30 0.28 0.26 0.25 0.24 0.24
838 0.24 0.24 0.25 0.26 0.28 0.31 0.34 0.39 0.44
841 0.50 0.57 0.65 0.73 0.82 0.91 0.91 0.83 0.75
844 0.67 0.61 0.55 0.50 0.45 0.42 0.39 0.36 0.34
847 0.33 0.31 0.31 0.30 0.30 0.30 0.31 0.32 0.34
850 0.37 0.40 0.44 0.49 0.54 0.61 0.68 0.75 0.83
853 0.92 0.92 0.85 0.77 0.71 0.65 0.60 0.55 0.51
856 0.48 0.45 0.43 0.41 0.40 0.39 0.38 0.38 0.38
859 0.38 0.39 0.40 0.41 0.43 0.46 0.50 0.54 0.59
862 0.65 0.71 0.78 0.85 0.93 0.93 0.87 0.81 0.75
865 0.70 0.65 0.61 0.58 0.55 0.53 0.51 0.49 0.48
868 0.47 0.47 0.46 0.46 0.46 0.47 0.48 0.49 0.51
871 0.54 0.57 0.61 0.65 0.70 0.75 0.81 0.87 0.94
874 0.94 0.89 0.84 0.79 0.75 0.71 0.68 0.65 0.63
877 0.61 0.60 0.58 0.57 0.57 0.56 0.56 0.56 0.56
880 0.56 0.57 0.58 0.60 0.62 0.65 0.68 0.71 0.75
883 0.80 0.85 0.90 0.95 0.96 0.92 0.88 0.84 0.81
886 0.78 0.76 0.74 0.72 0.70 0.69 0.68 0.67 0.67
889 0.66 0.66 0.66 0.66 0.67 0.67 0.68 0.69 0.71
892 0.73 0.75 0.78 0.81 0.85 0.88 0.92 0.96 0.97
895 0.94 0.92 0.89 0.87 0.85 0.84 0.82 0.81 0.80
898 0.79 0.78 0.78 0.78 0.77 0.77 0.77 0.77 0.78
901 0.78 0.79 0.79 0.81 0.82 0.83 0.85 0.87 0.90
904 0.92 0.95 0.97 0.99 0.97 0.96 0.95 0.94 0.93
907 0.92 0.91 0.90 0.90 0.90 0.89 0.89 0.89 0.89
910 0.89 0.89 0.89 0.89 0.89 0.89 0.90 0.90 0.91
913 0.92 0.93 0.94 0.95 0.96 0.97
920 \begin_inset LatexCommand \label{sec:graficos}
924 En el punto c) se pide realizar gráficos con la evolución de las iteraciones
926 \begin_inset Formula \( \omega \)
930 \begin_inset Formula \( \Delta \omega =0.05 \)
934 Para realizar estos gráficos se tomo un
935 \begin_inset Formula \( \Delta \omega =0.01 \)
938 y se grafica también el radio espectral
939 \begin_inset Formula \( \rho _{\left( T_{\omega }\right) } \)
942 estimado por S (ver sección
943 \begin_inset LatexCommand \vref{sec:s}
947 ) para la última iteración.
949 \added_space_top 0.3cm \added_space_bottom 0.3cm \align center
951 \begin_inset Figure size 360 252
960 \added_space_top 0.3cm \added_space_bottom 0.3cm \align center
962 \begin_inset Figure size 360 252
971 \added_space_top 0.3cm \added_space_bottom 0.3cm \align center
973 \begin_inset Figure size 360 252
982 \added_space_top 0.3cm \added_space_bottom 0.3cm \align center
984 \begin_inset Figure size 360 252
997 En estos tres puntos se pide graficar la evolución de R, S (radio espectral
998 calculado experimentalmente) y
999 \begin_inset Formula \( \phi _{113} \)
1002 (nodo central) a través del proceso iterativo.
1004 \begin_inset LatexCommand \vref{fig:eg}
1008 se presentan los resultados para N = 8 y
1009 \begin_inset Formula \( \omega =1.35 \)
1013 \begin_inset Formula \( \omega _{optimo} \)
1021 \begin_inset LatexCommand \label{fig:eg}
1026 \begin_inset Formula \( \phi _{113} \)
1030 \begin_inset Formula \( \omega =1.85 \)
1037 \begin_inset Figure size 360 252
1047 \begin_inset LatexCommand \vref{fig:fg}
1052 \begin_inset Formula \( \omega =1.85 \)
1056 \begin_inset Formula \( \omega _{optimo} \)
1064 \begin_inset LatexCommand \label{fig:fg}
1069 \begin_inset Formula \( \phi _{113} \)
1073 \begin_inset Formula \( \omega =1.85 \)
1080 \begin_inset Figure size 360 252
1096 \begin_inset LatexCommand \vref{sec:resultadosN}
1100 podemos ver que para tener una noción sobre el orden del error relativo
1101 de truncamiento no siempre podemos observar el
1102 \begin_inset Formula \( R_{TOL}=0.01 \)
1105 y tomarlo como cota.
1106 Esta aproximación es válida sólo para N = 4 ya que se puede aplicar sólo
1107 si la norma de la matriz de Gauss-Seidel
1108 \begin_inset Formula \( \left\Vert T_{GS}\right\Vert \leq \frac{1}{2} \)
1112 Considerando que en este trabajo se utiliza la norma 2 y la matriz es simétrica
1114 \begin_inset Formula \( \left( T_{GS}^{t}=T_{GS}\right) \)
1118 \begin_inset Formula \[
1119 \left\Vert T_{GS}\right\Vert _{2}=\sqrt{\rho _{\left( T^{t}_{GS}\cdot T_{GS}\right) }}=\sqrt{\rho _{\left( T^{2}_{GS}\right) }}=\sqrt{\rho ^{2}_{\left( T_{GS}\right) }}=\left| \rho _{\left( T_{GS}\right) }\right| \]
1126 Por lo que la condición para que la aproximación sea válida se transforma
1128 \begin_inset Formula \( \left| \rho _{\left( T_{GS}\right) }\right| \leq \frac{1}{2} \)
1131 y para el único N que se cumple es para N = 4.
1134 En los gráficos de la sección
1135 \begin_inset LatexCommand \vref{sec:graficos}
1139 podemos ver como el radio espectral de la matriz para SOR va disminuyendo
1141 \begin_inset Formula \( \omega \)
1145 \begin_inset Formula \( \omega _{optimo} \)
1150 \begin_inset Formula \( \omega _{optimo} \)
1153 , el método para calcular
1154 \begin_inset Formula \( \rho _{\left( T_{\omega }\right) } \)
1158 \begin_inset LatexCommand \vref{sec:s}
1162 ) deja de ser válido y es por esto que pierde
1166 y los resultados no pueden ser tenidos en cuenta.
1169 Finalmente en la gráfico
1170 \begin_inset LatexCommand \vref{fig:eg}
1174 podemos ver como evoluciona el orden del error de truncamiento a través
1175 de las iteraciones de forma no sólo monótona sino que prácticamente lineal.
1176 El radio espectral de la matriz calculado experimentalmente también evoluciona
1177 de forma monótona, pero creciendo de forma muy acelerada en las primeras
1178 10 iteraciones y estabilizándose en un valor cercano a 0,9, lo que indicaría
1179 que en cada iteración esta bajando el error en un 10% aproximadamente (el
1180 método converge de forma bastante lenta).
1181 Por último vemos también que el valor del nodo central crece monótonamente
1182 tendiendo a 1, pero llegando siempre a un valor inferior.
1185 Este comportamiento monótono de las variables R, S y
1186 \begin_inset Formula \( \phi _{113} \)
1190 \begin_inset Formula \( \omega \leq \omega _{optimo} \)
1197 \begin_inset LatexCommand \vref{fig:fg}
1202 \begin_inset Formula \( \omega >\omega _{optimo} \)
1205 (caso inverso al anterior), se observa un comportamiento mucho más caótico.
1206 El comportamiento de S ya fue explicado.
1208 \begin_inset Formula \( \phi _{113} \)
1211 sigue tendiendo a 1 pero superando este valor en varias oportunidades y
1212 de forma para nada monótona.
1213 La variable que menos cambios presenta es el orden del error de truncamiento
1214 que, aunque su comportamiento es mucho menos caótico, tampoco evoluciona
1215 de forma monótona como en el caso de que
1216 \begin_inset Formula \( \omega \leq \omega _{optimo} \)
1233 \begin_inset LatexCommand \label{fig:mother}
1237 Esquema de placa madre.
1241 \begin_inset Figure size 216 216
1251 \begin_inset LatexCommand \vref{fig:mother}
1255 se representa una región de la plaqueta madre de una computadora, los cuadrados
1256 indican procesadores que se encuentran operando a distintas temperaturas.
1257 En el centro falta un procesador y se desea conocer la distribución de
1258 temperaturas en esa zona.
1259 Despreciando las perdidas de calor de la plaqueta, las temperaturas en
1260 cuestión se pueden calcular resolviendo la ecuación de Laplace usando
1261 \begin_inset Formula \( T_{S} \)
1265 \begin_inset Formula \( T_{O} \)
1269 \begin_inset Formula \( T_{N} \)
1273 \begin_inset Formula \( T_{E} \)
1276 como condiciones de borde aplicadas en las líneas punteadas.
1278 \begin_inset Formula \( R_{TOL}=0.001 \)
1282 \begin_inset Formula \( \omega _{optimo} \)
1288 Cada grupo obtendrá los datos de temperatura en °C descomponiendo la parte
1289 entera del promedio de los N° de padrón de los integrantes del grupo, NPP,
1290 de la siguiente manera:
1291 \begin_inset Formula \[
1292 NPP=a\cdot 10^{4}+b\cdot 10^{3}+c\cdot 10^{2}+d\cdot 10+e\]
1317 Las temperaturas de los bordes se calculan entonces de la siguiente forma:
1321 \begin_inset Formula \( T_{1}=T_{S}=a\cdot 10+e=71^{\circ } \)
1328 \begin_inset Formula \( T_{2}=T_{O}=a\cdot 10+d=79^{\circ } \)
1335 \begin_inset Formula \( T_{3}=T_{N}=a\cdot 10+c=78^{\circ } \)
1342 \begin_inset Formula \( T_{4}=T_{E}=a\cdot 10+b=77^{\circ } \)
1348 Cada grupo deberá reportar el valor de temperatura en el centro.
1349 En forma opcional se propone graficar las isolíneas (o isobandas) de temperatur
1357 Al correr el programa para N = 8, R = 0.001 y
1358 \begin_inset Formula \( \omega =\omega _{optimo}=1.44647 \)
1361 y las condiciones de borde expuestas anteriormente, se obtienen los siguientes
1362 resultado (mostrados gráficamente con los números de nodos ubicados igual
1364 \begin_inset LatexCommand \vref{fig:grilla}
1373 78.336 77.999 77.801 77.680 77.606 77.542 77.412
1378 78.348 77.858 77.521 77.312 77.201 77.150 77.105
1383 78.205 77.565 77.113 76.843 76.732 76.750 76.856
1388 77.928 77.089 76.521 76.211 76.131 76.259 76.569
1393 77.466 76.359 75.676 75.346 75.319 75.584 76.158
1398 76.646 75.239 74.493 74.183 74.212 74.599 75.477
1403 74.954 73.507 72.908 72.700 72.754 73.124 74.149
1406 Donde se ve que el nodo central es
1407 \begin_inset Formula \( \phi _{25}=76.211^{\circ } \)
1411 Considerando que el radio espectral de la matriz en la última iteración
1413 \begin_inset Formula \( \frac{1}{2}\left( \approx 0.58\right) \)
1416 podemos aproximar el órden de la cota del error relativo con
1417 \begin_inset Formula \( R_{TOL}=0.001 \)
1421 El error absoluto es entonces:
1422 \begin_inset Formula \[
1423 \Delta E=R_{TOL}\cdot \phi _{25}\cong 0.001\cdot 76\cong 0.076\cong 0.1\]
1430 De esta forma, la temperatura del nodo central sería
1431 \begin_inset Formula \( \phi _{25}=76.2^{\circ }\pm 0.1^{\circ } \)
1437 Puede verse también gráficamente
1442 \begin_inset LatexCommand \label{fig:isolineas}
1446 Isolíneas de temperatura.
1450 \begin_inset Figure size 499 355
1452 subcaption isolineas
1460 la distribución de las temperaturas en la figura
1461 \begin_inset LatexCommand \vref{fig:isolineas}
1471 Programa Principal (
1478 // vim: set tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
1484 // Trabajo Práctico I de Análisis Numérico I
1487 // Este programa resuelve un sistema de ecuaciones lineales ralo
1490 // resultante de la discretización mediante diferencias finitas
1493 // de ecuaciones diferenciales.
1496 // Copyright (C) 2002 Leandro Lucarella <leandro@lucarella.com.ar>
1502 // Este programa es Software Libre; usted puede redistribuirlo
1505 // y/o modificarlo bajo los términos de la "GNU General Public
1508 // License" como lo publica la "FSF Free Software Foundation",
1511 // o (a su elección) de cualquier versión posterior.
1517 // Este programa es distribuido con la esperanza de que le será
1520 // útil, pero SIN NINGUNA GARANTIA; incluso sin la garantía
1523 // implícita por el MERCADEO o EJERCICIO DE ALGUN PROPOSITO en
1527 Vea la "GNU General Public License" para más
1536 // Usted debe haber recibido una copia de la "GNU General Public
1539 // License" junto con este programa, si no, escriba a la "FSF
1542 // Free Software Foundation, Inc.", 59 Temple Place - Suite 330,
1545 // Boston, MA 02111-1307, USA.
1567 typedef unsigned int Indice;
1570 typedef float Numero;
1608 const Numero DEFAULT_W = 1.0,
1611 DEFAULT_RTOL = 0.01,
1619 // Calcula la iteración para un nodo.
1620 Numero procesarNodo( Datos&, Indice );
1625 // Calcula la iteración para un nodo dependiendo del tipo de nodo.
1628 Numero procesarNodo( Datos&, Indice, bool, bool, bool, bool, Numero = 0
1634 // Calcula la norma 2 de un vector.
1637 Numero norma2( Numero*, Indice );
1642 // Imprime un vector por la salida estándar.
1645 void imprimirVector( Indice, Numero* );
1650 // Imprime un vector por la salida estándar.
1653 void imprimirVector( Numero*, Indice );
1658 // Resuelve el sistema de ecuaciones lineales por el método S.O.R.
1661 // (o Gasuss-Seidel si w=1).
1664 void resolver( Datos& );
1669 int main( int argc, char* argv[] ) {
1674 // Se fija que tenga los argumentos necesarios para correr.
1680 printf( "Faltan argumentos.
1688 t%s N w RTOL TS TO TN TE
1693 printf( "Desde w en adelante son opcionales.
1694 Los valores por defecto son:
1715 tTS = TO = TN = TE = %f
1720 return EXIT_FAILURE;
1728 // Se inicializan los datos.
1734 D.N = Indice( atol( argv[1] ) );
1740 printf( "N Debe ser un entero mayor o igual a 3
1745 return EXIT_FAILURE;
1754 D.rtol = DEFAULT_RTOL;
1757 D.TS = D.TO = D.TN = D.TE = DEFAULT_T;
1762 // Se aloca uno más de lo necesario para usar el rango [1,n]
1765 D.X = new Numero[Indice(pow(D.N-1,2))+1];
1770 // Si se pasaron datos como argumento, se los va agregando.
1776 case 8: D.TE = Numero( atof( argv[7] ) );
1779 case 7: D.TN = Numero( atof( argv[6] ) );
1782 case 6: D.TO = Numero( atof( argv[5] ) );
1785 case 5: D.TS = Numero( atof( argv[4] ) );
1788 case 4: D.rtol = Numero( atof( argv[3] ) );
1791 case 3: D.w = Numero( atof( argv[2] ) );
1805 return EXIT_SUCCESS;
1813 Numero procesarNodo( Datos& D, Indice i ) {
1823 // Si es el primero, es SO.
1829 return procesarNodo( D, i, false, false, true, true, D.TS + D.TO );
1834 // Si es N - 1 es NO.
1837 if ( i == ( N - 1 ) )
1840 return procesarNodo( D, i, false, true, false, true, D.TN + D.TO );
1845 // Si es N² - 3N + 3 es SE.
1848 if ( i == ( N*N - 3*N + 3 ) )
1851 return procesarNodo( D, i, true, false, true, false, D.TS + D.TE );
1856 // Si es N² - 2N + 1 es NE.
1859 if ( i == ( N*N - 2*N + 1 ) )
1862 return procesarNodo( D, i, true, true, false, false, D.TN + D.TE );
1867 // Si pertenece al intervalo [2;N-1] es O.
1870 if ( ( 1 < i ) && ( i < ( N - 1 ) ) )
1873 return procesarNodo( D, i, false, true, true, true, D.TO );
1878 // Si pertenece al intervalo [N² - 3N + 3;N² - 2N + 1] es E.
1881 if ( ( ( N*N - 3*N + 3 ) < i ) && ( i < ( N*N - 2*N + 1 ) ) )
1884 return procesarNodo( D, i, true, true, true, false, D.TE );
1889 // Si i - 1 es múltiplo de N - 1 (y no es NE, SE, NO, SO) es S.
1892 if ( ( ( i - 1 ) % ( N - 1 ) ) == 0 )
1895 return procesarNodo( D, i, true, false, true, true, D.TS );
1900 // Si i es múltiplo de N - 1 (y no es NE, SE, NO, SO) es N.
1903 if ( ( i % ( N - 1 ) ) == 0 )
1906 return procesarNodo( D, i, true, true, false, true, D.TN );
1911 return procesarNodo( D, i, true, true, true, true );
1919 Numero procesarNodo( Datos& D, Indice i,
1922 bool i_n1, bool i_1, bool i1, bool in_1,
1938 // Voy sumando los elementos que corresponden.
1967 // Calculo el elemento i.
1970 D.X[i] = ( 1 - D.w ) * D.X[i] + ( b + x ) * D.w / 4;
1975 // Devuelve parte de la sumatoria para calcular la norma 2.
1978 return pow( D.X[i] - Xo, 2 );
1988 Numero norma2( Numero* X, Indice n ) {
1998 for ( Indice i = 1; i <= n; i++ )
2001 sum += pow( X[i], 2 );
2016 void imprimirVector( Indice n, Numero* X ) {
2021 for ( Indice i = 1; i <= n; i++ )
2024 printf( "%.7e%s", X[i], ( i == n ) ? "
2036 void resolver( Datos& D ) {
2044 n = Indice( pow( D.N - 1, 2) );
2049 Numero r = D.rtol + 1,
2060 // Imprime datos iniciales.
2063 // Formato de salida:
2066 // iteración R S <vector X>
2069 // (si no se puede calcular S, se muestra 0)
2072 printf( "%d %.2e 0.00000000 ", ite, r );
2075 imprimirVector( n, D.X );
2080 while ( r > D.rtol ) {
2085 for ( Indice i = 1; i <= n; i++ )
2088 Ek += procesarNodo( D, i );
2094 r = Ek / norma2( D.X, n );
2097 printf( "%d %.2e %.8f ", ++ite, r, Ek_1 ? ( Ek / Ek_1 ) : 0 );
2100 imprimirVector( n, D.X ); Ek_1 = Ek; Ek = 0;
2116 Todas las utilidades listadas aquí son Software Libre; puede redistribuirlas
2117 y/o modificarlas bajo los términos de la "GNU General Public License" como
2118 lo publica la "FSF Free Software Foundation", o (a su elección) de cualquier
2130 # vim: set tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
2136 # Trabajo Práctico I de Análisis Numérico I
2139 # Realiza los cálculos del punto c (y a y b).
2142 # Copyright (C) 2002 Leandro Lucarella <leandro@lucarella.com.ar>
2150 # Calculo soluciones del punto a, b y c.
2153 for (( n=4; n <= 32; n*=2 )); do
2156 ./77891 $n | tail -n1 | ./resultado.awk > ca$n.txt
2164 # Calculo iteraciones y S en función de w.
2167 for (( n=4; n <= 32; n*=2 )); do
2170 echo "Procesando N = $n ..."
2173 for (( i=0; i < 100; i+=1 )); do
2184 # Iteraciones en función de w.
2187 ./77891 $n $w | wc -l | awk '{printf "%-4d", $1-1}'
2193 # S en función de w.
2196 ./77891 $n $w | tail -n1 | awk '{print $3}'
2207 # Calculo los puntos e-g
2210 ./77891 16 1.35 0.001 | awk '{print $1 " " log($2) " " $3 " " $116}'
2218 # Calculo los puntos f-g
2221 ./77891 16 1.85 0.001 | awk '{print $1 " " log($2) " " $3 " " $116}'
2231 # Calculo la Parte II
2234 ej2="./77891 8 1.446467 0.001 71 79 78 77"
2237 $ej2 | tail -n1 | ./isolineas.awk > isolineas.txt
2240 $ej2 | tail -n1 | awk '{ printf "X25 = %.3f ± 0.001
2258 # vim: set tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
2264 # Trabajo Práctico I de Análisis Numérico I
2267 # Genera gráficos con los resultados de las corridas utilizando
2273 # Copyright (C) 2002 Leandro Lucarella <leandro@lucarella.com.ar>
2281 # Genera todos los gráficos del punto d
2284 for (( n=4; n <= 32; n*=2 )); do
2287 sed "s/<N>/$n/g" d.gnuplot | gnuplot
2295 # Genera gráficos del punto e-g
2298 sed "s/<A>/e/g" efg.gnuplot | sed "s/<B>/1.35/g" | gnuplot
2303 # Genera gráficos del punto f-g
2306 sed "s/<A>/f/g" efg.gnuplot | sed "s/<B>/1.85/g" | gnuplot
2317 # vim: set tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
2323 # Trabajo Práctico I de Análisis Numérico I
2326 # Genera gráficos con los resultados de las corridas utilizando
2332 # Copyright (C) 2002 Leandro Lucarella <leandro@lucarella.com.ar>
2340 # Seteo terminal para que "dibuje" en un PS.
2343 set term postscript eps enhanced color
2346 set encoding iso_8859_1
2349 set output "d<N>.eps"
2357 set title "Variacion de iteraciones y S en funcion de w para N = <N>"
2368 set xlabel "Factor de sobrerelajacion (w)"
2379 set ylabel "Iteraciones"
2393 set y2label "Radio espectral (S)"
2410 plot 'cb<N>.txt' using 1:2 smooth csplines axes x1y1
2415 title "Iteraciones" with lines linetype 1,
2420 'cb<N>.txt' using 1:3 smooth csplines axes x1y2
2425 title "Radio espectral" with lines linetype 3
2436 # vim: set tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
2442 # Trabajo Práctico I de Análisis Numérico I
2445 # Genera gráficos con los resultados de las corridas utilizando
2451 # Copyright (C) 2002 Leandro Lucarella <leandro@lucarella.com.ar>
2459 # Seteo terminal para que "dibuje" en un PS.
2462 set term postscript eps enhanced color
2465 set encoding iso_8859_1
2468 set output "<A>g.eps"
2476 set title "Variacion R y S en funcion de las iteraciones N = 16 y w = <B>"
2487 set xlabel "Iteraciones"
2498 set ylabel "R (en escala logaritmica)"
2512 set y2label "Radio espectral (S) / Valor del nodo central (113)"
2529 plot '<A>g.txt' every ::2 using 1:2 smooth csplines axes x1y1
2534 title "ln(R)" with lines linetype 1,
2539 '<A>g.txt' every ::2 using 1:3 smooth csplines axes x1y2
2544 title "S" with lines linetype 3,
2549 '<A>g.txt' every ::2 using 1:4 smooth csplines axes x1y2
2554 title "Nodo central (113)" with lines linetype 4
2565 # vim: set tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
2571 # Trabajo Práctico I de Análisis Numérico I
2574 # Muestra el resultado de una iteración de forma más agradable.
2577 # Copyright (C) 2002 Leandro Lucarella <leandro@lucarella.com.ar>
2588 print "Iteraciones: " $1
2591 printf "Radio espectral experimental: %.2f
2596 for ( i = 4; i <= NF; i+=9 ) {
2599 for ( j = 0; (j < 9) && (i+j < NF); j++ ) {
2602 printf "%5.2f ", $(i+j)
2627 # vim: set tabstop=4 softtabstop=4 shiftwidth=4 expandtab:
2633 # Trabajo Práctico I de Análisis Numérico I
2636 # Muestra el resultado de una iteración de forma más agradable.
2639 # Copyright (C) 2002 Leandro Lucarella <leandro@lucarella.com.ar>
2650 for ( i = 7; i >= 1; i-- ) {
2653 for ( j = 0; j < 7; j++ ) {
2656 printf "%7.3f ", $(3+i+j*7)