AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
Tp Metodos Numericos
1. M´todos Num´ricos 2011 - Trabajos Pr´cticos
e e a
Ing. Diego R. Tramontina
26 de abril de 2012
Ejercicios:
1. Calcular las ra´ıces del polinomio
x7 + 6x6 + 6x5 − 21x4 − 36x3 + 3x2 + 13x + 3 = 0
Resoluci´n
o
En este ejercicio primeramente analizaremos las caracter´ ısticas del polinomio, para luego definir la meto-
dolog´ a seguir. Podemos inferir que la cantidad de ra´
ıa ıces ser´ igual a 7, dado que es el orden del polinomio.
a
Sabemos tambi´n que el l´
e ımite superior para el valor de todas las ra´
ıces esta dado por:
Σn |Ai |
i=0
> Ai ,
A0
Para nuestro caso particular alcanza el valor de 29, 66. Tambi´n sabemos que An es impar, por lo que podemos
e
suponer que existe al menos una ra´ real. Dado que la cantidad de ra´ reales positivas es menor o igual a la
ız ıces
cantidad de cambios de signo, que para nuestro caso es de dos, podemos decir que podr´ existir una segunda ra´
ıa ız
positiva. Adem´s, como todos los coeficientes de nuestro polinomio se encuentran en el campo real, si existieran
a
ra´
ıces complejas, estas estar´n dispuestas en forma de pares conjugados.
a
Si analizamos su gr´fica[1], podremos observar que existe una zona de aparente inflexi´n en el entorno de cero
a o
para el espacio imagen de la funci´n. Dado el grado del polinomio, en esta zona pueden aparecer valores para los
o
cuales la derivadas primeras se anulan, aportando ra´ conjugadas al resultado, por lo que la implementaci´n
ıces o
de un algoritmo de intervalo cerrado no ser´ pr´ctico. 1
ıa a
Figura 1: Representaci´n del polinomio
o
Para encontrar todas las ra´ de este polinomio, se implement´ un script en python para calcular los valores
ıces o
propios de la matriz asociada a este polinomio. Para el polinomio P (x) = xn + cn−1 xn−1 + cn−2 xn−2 + ... + c1 x + c0
, se define como:
1
2.
0 0 0 0 0 0 −3
··· −c0
0 0 0 1 0 0 0 0 0 −13
1
0 ··· 0 −c1
0 1 0 0 0 0
−3
Cn = 0
1 ··· 0 −c2 , C = 0
0 1 0 0 0
36
7
. . .. . .
.. .
. . .
. .
.
0
0 0 1 0 0 21
0 0 ··· 1 −cn−1
0 0 0 0 1 0 −6
0 0 0 0 0 1 −6
La matriz a la derecha muestra nuestro caso particular. A continuaci´n se muestra el algoritmo utilizado.
o
1 # −∗− c o d i n g : u t f −8 −∗−
i m p o r t p y l a b a s NX
3 def roots (p) :
5 # S i l a e n t r a d a e s un e s c a l a r , c o n v i e r t e a a r r a y
#p = a t l e a s t 1 d ( p )
7 i f l e n ( p . s h a p e ) != 1 :
r a i s e V a l u e E r r o r , ” La e n t r a d a d e b e s e r un a r r a y de rango 1. ”
9
# I d e n t i f i c a r e l e m e n t o s no n u l o s
11 n o n z e r o = NX. n o n z e r o (NX. r a v e l ( p ) ) [ 0 ]
13 # Devuelve r a i c e s nulas si los coeficientes del polinomio son todos nulos
i f l e n ( n o n z e r o ) == 0 :
15 r e t u r n NX. a r r a y ( [ ] )
17 # I d e n t i f i c a l o s c e r o s a l a i z q u i e r d a . Este es el numero de raices en 0.
t r a i l i n g z e r o s = l e n ( p ) − n o n z e r o [ −1] − 1
19
# Elimina c e r o s a i z q u i e r d a y derecha
21 p = p [ i n t ( n o n z e r o [ 0 ] ) : i n t ( n o n z e r o [ − 1 ] ) +1]
23 # C o n v i e r t o e l a r r a y en p u n t o f l o t a n t e s i no f u e i n g r e s a d o de e s t a f o r m a .
i f n o t i s s u b c l a s s ( p . d t y p e . t y p e , (NX. f l o a t i n g , NX. c o m p l e x f l o a t i n g ) ) :
25 p = p . astype ( f l o a t )
27 N = len (p)
i f N > 1:
29 # C o n s t r u y o l a m a t r i z a s o c i a d a y computo los eigenvalores ( las ˜
raA ces )
A = d i a g (NX. o n e s ( ( N−2 ,) , p . d t y p e ) , −1)
31 A [ 0 , : ] = −p [ 1 : ] / p [ 0 ]
r o o t s = e i g v a l s (A)
33 else :
r o o t s = NX. a r r a y ( [ ] )
35
# F i j o l o s c e r o s nuevamente en l a m a t r i z o r i g i n a l
37 r o o t s = h s t a c k ( ( r o o t s , NX. z e r o s ( t r a i l i n g z e r o s , r o o t s . d t y p e ) ) )
return roots
39
i n n = a r r a y ( −3 , −13 , −3 ,36 ,21 , −6 , −6)
41 p r i n t r o o t s ( inn )
Problema1.py
El resultado que arroja el mismo es el siguiente:
−2,61803401
−2,61803396
1,52294987
X7 =
0,54518398
−0,40146718
0,38196601 + 6,00106627e − 08j
−0,38196601 − 6,00106627e − 08j
El vector de resultados obtenido confirma todas las presunciones iniciales a partir de las propiedades carac-
ter´
ısticas de esta forma polin´mica. Las dos ultimas ra´ constituyen un par conjugado en , mientras que las
o ´ ıces
dos primeras muestran una proximidad considerable, lo que hizo necesario establecer una precisi´n superior a
o
10−6 .
2. ıces en la la ecuaci´n zez = 1+i adem´s de z1 = 0, 6+0, 3i?
Existen ra´ o a
Resoluci´n
o
Esta funci´n es un caso particular de la familia tipo Lambertiana W ( W (z)eW (z) = z ). Este tipo de
o
ecuaciones ha sido aplicado en campos tales como la f´ ısica cu´ntica, el comportamiento de diodos y transistores
a
ideales, agujeros negros, la cin´tica de la regeneraci´n de los pigmentos en el ojo humano, sistemas din´micos
e o a
con decaimiento, etc´tera. Es bien conocido que este tipo de funciones no pueden resolverse por m´todos
e e
ınf n
tradicionales. Puesto que ez puede ser escrito como Σ´ z , se puede afirmar que esta es una serie r´pidamente
i=0 n! a
convergente. La soluci´n a esta ecuaci´n fue propuesta inicialmente por E.M. Wright [10]. Para mapear las ra´
o o ıces
en esta ecuaci´n se utiliz´ el m´todo de Newton-Raphson en modo iterativo a lo largo del rango (−50 − 50i) :
o o e
(50 + 50i) como valores iniciales. El resultado arroj´ 88 ra´
o ıces en este dominio restringido para una tolerancia
de 10−8 . Los valores se muestran en forma de arreglo, donde la primer columna corresponde a la ra´ hallada, y
ız
la segunda, al valor inicial utilizado como primer aproximaci´n. N´tese que la ra´ mencionada en el enunciado
o o ız
2
3. corresponde a la hallada por el m´todo utilizando como primer aproximaci´n el valor 0. Evidentemente los
e o
resultados mostrados no representan ra´
ıces sino los m´
ımimos locales de cada intervalo propuesto.
−1000 − 1000j
−1000 − 1000j
−900 − 900j
−900 − 900j
−800 − 800j
−800 − 800j
−1,7566e + 84 + 3,1675e + 84j
−200 − 200j
−2,3227e + 41 + 1,3796e + 41j
z=
−100 − 100j
0,6569 + 0,3254j)]
0j
−4,2565 + 99,7029j
100 + 100j
−4,9533 + 200,2518j
200 + 200j
−5,3599 + 300,7896j
300 + 300j
1 # −∗− c o d i n g : u t f −8 −∗−
i m p o r t s c i p y , numbers , numpy
3 import s c i p y . optimize . z e r o s as sc
5 def newton ( f u n c , x0 , f p r i m e , a r g s =() , t o l =1e −30 , m a x i t e r =500) :
p0 = 1 . 0 ∗ x0
7 f o r i t e r in range ( maxiter ) :
myargs = ( p0 , ) + a r g s
9 f d e r = f p r i m e ( ∗ myargs )
i f f d e r == 0 :
11 r e t u r n p0
p = p0 − f u n c ( ∗ myargs ) / f p r i m e ( ∗ myargs )
13 i f a b s ( p − p0 ) < t o l :
return p
15 p0 = p
17 d e f Fx ( x ) :
f x = x∗ s c i p y . exp ( x ) −(1. 0 + 1 . 0 j )
19 return fx
d e f dFx ( x ) :
21 d f x = s c i p y . exp ( x )+x∗ s c i p y . exp ( x )
return dfx
23 Roots = [ ]
p r i n t s c . b r e n t h ( Fx , − 1 0 0 , 1 0 0 )
25
for i i n numpy . c o r e . m u l t i a r r a y . a r a n g e ( − 1 0 0 0 , 1 0 0 0 , 1 0 0 ) :
27 r u t = newton ( Fx , c o m p l e x ( i , i ) , dFx , )
i f i s i n s t a n c e ( r u t , numbers . Number ) :
29 try :
i f r u t not i n Roots :
31 R o o t s += [ [ r u t ] , [ c o m p l e x ( i , i ) ] ]
except :
33 print rut
p r i n t Roots
Problema2.py
3. Interpolar los datos a continuaci´n mediante un polinomio y un
o
spline. Comparar los resultados
−1000 −0,960 −0,860 0,500 0,772 0,790 0,970
X7 =
−1000 −0,151 0,894 0,500 0,895 0,986 −0,306
Resoluci´n
o
Para generar una funci´n que contenga a estos puntos, puede utilizarse el m´todo de interpolaci´n polin´mica,
o e o o
que consiste en hacer pasar un polinomio de grado n por un conjunto de n puntos conocidos de la funci´n. o
Para realizar esto existen varias t´cnicas, entre las que podemos citar las diferencias divididas de Newton, la
e
interpolaci´n de Lagrange o la de Hermite. El pen´ltimo puede considerarse un caso particular de Hermite, donde
o u
no se conocen derivadas de la funci´n, y el primero, resulta el m´s c´modo de programar ya que es altamente
o a o
algor´
ıtmico y no requiere de informaci´n sobre las derivadas en los puntos dados. Adem´s su complejidad no es
o a
creciente con la cantidad de informaci´n. Para nuestro caso utilizaremos la aproximaci´n mediante polinomios
o o
3
4. de Lagrange. Un polinomio de de grado n queda definido entonces como
n
x − xi
fj lj (x), con lj (x) =
j=0
xj − xi
i=j
donde los coeficientes lj son los llamados polinomios de Lagrange. El c´digo 3 muestra una implementaci´n en
o o
Python. Este c´digo es relativamente simple y funciona bien para orden 15 como m´ximo. Este c´digo produce
o a o
el polinomio:
y = −0,04721x6 − 47,19x5 + 12,65x4 + 78x3 − 26,98x2 − 31,75x + 14,05
Para cotejar el fitting de la funci´n obtenida, hemos graficado el comportamiento de la misma. En la figura
o
[2a] puede verse la funci´n polin´mica en el rango de puntos, la misma llega a un m´ximo del orden de 105
o o a
entre el punto [−1000, −1000] y el resto de los datos. El alejamiento inusual de ´ste, respecto del resto del grupo
e
de datos genera una distorsi´n considerable en las dos t´cnicas, aunque por splines la desviaci´n es de unos
o e o
10 ´rdenes menor. En este caso, la funci´n tiende a un m´
o o ınimo en esta misma zona 2b. En la figura 3a puede
observarse la gran dispersi´n del punto, respecto del resto del conjunto. En cuanto al comportamiento de los
o
dos m´todos en la regi´n con mayor densidad de datos, se puede observar que el la funci´n polin´mica pasa
e o o o
por todos los puntos, por cuanto el error depender´ tanto del orden del mismo, como del alejamiento de cada
a
dato4a. Por otro lado, la caracter´ıstica del ajuste mediante splines se obserba claramente en la figura 4b, donde
el intento es de justamente minimizar las desviaciones en las alejadas de los datos.
(a) Estructura del resultado por interpolaci´n polin´mica
o o (b) Estructura del resultado por splines
Figura 2
(a) Vista de los datos (b) Ajuste comparativo de las dos t´cnicas (sin punto ’-1000;-
e
1000’)
Figura 3
En segunda instancia interpolaremos este conjunto de datos mediante splines c´bicos. Generalmente se pre-
u
fiere esta t´cnica debido a que el error de interpolaci´n es menor respecto a la t´cnica mostrada inicialmente,
e o e
inclusive cuando se utilizan splines de bajo orden. Adem´s evita el fen´meno de Runge, que aparece cuando en
a o
la interpolaci´n polin´mica se realiza en puntos equidistantes con polinomios de alto grado. Un aspecto intere-
o o
sante a resaltar cuando se comparan las dos t´cnicas, es que la primera de ellas genera una funci´n convexa en
e o
4
5. (a) Comportamiento del polinomio (sin punto ’-1000;-1000’) (b) Comportamiento del spline (sin punto ’-1000;-1000’)
Figura 4
el intervalo (−1000, 0)[2a], con un m´ximo en (−835, 3,16 · 1015 ) mientras que la segunda propuesta muestra
a
un comportamiento c´ncavo en este intervalo[2b], con un m´
o ınimo en (−665, −1,94 · 105 ). En cualquiera de los
dos casos, la dispersi´n del primer punto respecto del resto genera en la funci´n interpolante una incertidumbre
o o
considerable.
# −∗− c o d i n g : u t f −8 −∗−
2 i m p o r t m a t p l o t l i b . p y p l o t a s p l ; i m p o r t numpy . l i b . p o l y n o m i a l a s np
i m p o r t numpy . c o r e . m u l t i a r r a y a s np2 ; i m p o r t math
4 d e f p o l l a g r a n g e ( x1 , x2 ) :
” ” ” Genera e l p o l i n o m i o i n t e r p o l a n t e p a r a l o s d a t o s ( x1 , x2 )
6 ”””
M = l e n ( x1 ) ; p = np . p o l y 1 d ( 0 . 0 )
8 f o r j i n x r a n g e (M) :
p t = np . p o l y 1 d ( x2 [ j ] )
10 f o r k i n x r a n g e (M) :
i f k == j : c o n t i n u e
12 f a c = x1 [ j ]− x1 [ k ]
p t ∗= np . p o l y 1 d ( [ 1 . 0 , − x1 [ k ] ] ) / f a c
14 p += p t
return p
16 Px = [ −1000 , − 0 . 9 6 0 , − 0 . 8 6 0 , 0 . 5 0 0 , 0 . 7 7 2 , 0 . 7 9 0 , 0 . 9 7 0 ]
Py = [ −1000 , − 0 . 1 5 1 , 0 . 8 9 4 , 0 . 5 0 0 , 0 . 8 9 5 , 0 . 9 8 6 , − 0 . 3 0 6 ]
18 d e f w r i t e d a t a ( oudt , xdat , y d a t ) :
f o r i i n range ( l e n ( xdat ) ) :
20 linestrout = ’ ’ ; l i n e s t r o u t = s t r ( ’ % 1 0 . 4E ’ % dat [ i ] )
x + ’ ’
l i n e s t r o u t += s t r ( ’ % 1 0 . 4 E ’ % d a t [ i ] ) + ’
y ’
22 linestrout . strip () ; l i n e s t r o u t += ’ n ’ ; oudt . w r i t e ( linestrout )
P o l = p o l l a g r a n g e ( Px , Py )
24 a b s 1 = np2 . a r a n g e ( −1100 , −1 ,5) ; a b s 1 t l = a b s 1 . t o l i s t ( )
a b s 2 = np2 . a r a n g e ( − 1 , 1 . 1 , 0 . 0 0 1 ) ; a b s 2 t l = a b s 2 . t o l i s t ( )
26 f o r i in range ( len ( a b s 2 t l ) ) :
a b s 1 t l . append ( a b s 2 t l [ i ] )
28 o u t f i l e = open ( ’ P r o b l e m a 3 a . o u t ’ , ’w ’ ) ; w r i t e d a t a ( o u t f i l e , a b s 1 t l , Pol ( a b s 1 t l ) ) ; outfile . close ()
#f i g = p l . f i g u r e ( )
30 #ax1 = f i g . a d d s u b p l o t ( 1 1 1 )
#ax1 . p l o t ( a b s 1 t l , P o l ( a b s 1 t l ) , ’ b . ’ )
32 #ax1 . p l o t ( Px , Py , ’ r o ’ )
Problema3a.py
# −∗− c o d i n g : u t f −8 −∗−
2 import m a t p l o t l i b . pyplot as pl ; import s c i p y . i n t e r p o l a t e as sc
i m p o r t numpy . c o r e . m u l t i a r r a y a s np2 ; i m p o r t math
4 Px = [ −1000 , − 0 . 9 6 0 , − 0 . 8 6 0 , 0 . 5 0 0 , 0 . 7 7 2 , 0 . 7 9 0 , 0 . 9 7 0 ]
Py = [ −1000 , − 0 . 1 5 1 , 0 . 8 9 4 , 0 . 5 0 0 , 0 . 8 9 5 , 0 . 9 8 6 , − 0 . 3 0 6 ]
6 d e f w r i t e d a t a ( oudt , xdat , y d a t ) :
f o r i i n range ( l e n ( xdat ) ) :
8 linestrout = ’ ’ ; l i n e s t r o u t = s t r ( ’ % 1 0 . 4E ’ % dat [ i ] ) + ’
x ’
l i n e s t r o u t += s t r ( ’ % 1 0 . 4 E ’ % d a t [ i ] ) + ’
y ’
10 linestrout . strip () ; l i n e s t r o u t += ’ n ’ ; oudt . w r i t e ( l i n e s t r o u t )
P o l = s c . U n i v a r i a t e S p l i n e ( Px , Py )
12 a b s 1 = np2 . a r a n g e ( −1100 , −1 ,5) ; a b s 1 t l = a b s 1 . t o l i s t ( )
a b s 2 = np2 . a r a n g e ( − 1 , 1 . 1 , 0 . 0 0 1 ) ; a b s 2 t l = a b s 2 . t o l i s t ( )
14 f o r i in range ( len ( a b s 2 t l ) ) :
a b s 1 t l . append ( a b s 2 t l [ i ] )
16 o u t f i l e = open ( ’ Problema3b . o u t ’ , ’w ’ ) ; w r i t e d a t a ( o u t f i l e , a b s 1 t l , P o l ( a b s 1 t l ) ) ; outfile . close ()
#f i g = p l . f i g u r e ( )
18 #ax1 = f i g . a d d s u b p l o t ( 1 1 1 )
#ax1 . p l o t ( a b s 1 t l , P o l ( a b s 1 t l ) , ’ b . ’ )
20 #ax1 . p l o t ( Px , Py , ’ r o ’ )
Problema3b.py
4. Integrar utilizando la regla de Simpson:
1
log(1 − x)
√ dx, (valor = −2,3078)
0,8 1 − x2
5
6. Resoluci´n
o
1
Existen dos variantes de este m´todo, llamadas regla de 3 de Simpson, y la variante, denominada regla de
e
3
8. La primera se aplica a un n´mero par de intervalos, mientras que la segunda, a un n´mero que sea m´ltiplo
u u u
de 3. Cuando el n´mero de intervalos es impar, pero sin ser m´ltiplo de 3, puede utilizarse la regla de 3 en los
u u 8
1
extremos, y luego la de 3 en el resto del espacio de c´lculo. No obstante ello, lo m´s relevante es que el orden
a a
de error de ambas variantes es el mismo, por cuanto no se ganar´ exactitud aplicando una u otra regla en el
a
mismo n´mero de intervalos. El m´todo puede describirse matem´ticamente de la siguiente forma:
u e a
b n
hi xi + xi+1 h5 IV
I= f (x)dx [f (xi ) + 4f ( + f (xi+1 )] + E, con E − f (x), hi = xi+1 − xi
a i=1
6 2 90
Cuadro 1: Detalle de corridas realizadas
Resultado n error[ %] tiempo s
-1.7883E+00 100 5.9391E-01 0
-2.1595E+00 2350 2.2509E+0 0
-2.2438E+00 17452 6.4265E+00 0
-2.2716E+00 65859 2.7738E+00 2
-2.2838E+00 169217 1.5694E+00 5
-2.2902E+00 345497 1.0417E+00 11
-2.2941E+00 608822 7.6217E-01 35
-2.2966E+00 970406 5.9391E-01 48
-2.2984E+00 1439430 4.8333E-01 90
-2.2998E+00 2023469 4.0574E-01 122
-2.3008E+00 2728856 3.4860E-01 149
-2.3015E+00 3562083 3.0534E-01 222
-2.3022E+00 4527631 2.7106E-01 274
-2.3027E+00 5630398 2.4356E-01 300
-2.3031E+00 6875504 2.2114E-01 362
-2.3035E+00 8263763 2.0191E-01 397
-2.3038E+00 9796512 1.8548E-01 528
-2.3041E+00 11493719 1.7325E-01 642
-2.3043E+00 13320345 1.5892E-01 782
-2.3045E+00 15334580 1.5121E-01 882
-2.3047E+00 17538101 1.4370E-01 1081
-2.3048E+00 19900197 1.3468E-01 1107
-2.3052E+00 22502478 1.3077E-01 1332
-2.3050E+00 25031794 1.1240E-01 1364
-2.3078E+00 60000000 8.9709E-04 3239
Estudiando la funci´n, podemos afirmar que la misma es asint´tica en x = |1|, adem´s el rango a evaluar
o o a
se encuentra dentro del intervalo de negatividad de la funci´n N = (0, 1), cruzando el eje de coordenadas en el
o
origen. Otro detalle es que la funci´n no es anti-sim´trica, aunque parece serlo a simple vista. Su numerador
o e
tiende a −∞ cuando x → 1. Si intent´ramos un procedimiento integrando directamente hasta 1, tendr´
a ıamos
o 1
una indeterminaci´n ∞ en este punto, por lo que nuestro primer intento ser´ aproximarnos a este punto con
a
una proximidad aceptable. Como era de esperarse, el resultado que arroj´ con n = 100 sub-intervalos estuvo
o
bastante lejos del valor exacto, aproximadamente un 59 %(−1,7883).
Tras realizar algunas pruebas, decid´ armar un proceso iterarivo que fuera adaptando la cantidad de sub-
ı
intervalos para evaluar la integral, en funci´n del error estimado, tomando como base el valor exacto. De
o
no haber sido proporcionado este valor, lo natural hubiera sido emplear como referencia el cambio en cada
iteraci´n, y realizar el corte una vez verificado que el error es menor que cierto valor aceptable. Para este caso,
o
ımite propuesto fue de 10−4 . En la tabla 1 se muestran los resultados obtenidos, la cantidad de sub-intervalos
el l´
empleados, el error, y el tiempo que insumi´ el c´lculo. Como puede apreciarse, fueron necesarios 60 millones
o a
de sub-intervalos para lograr un error aceptable ( 10−4 ) en la cantidad de cifras significativas propuesta en
este ejercicio. El tiempo de c´lculo de esta ultima etapa fue de 54 minutos, y de 3 horas 36 minutos en total.
a ´
Cabe aclarar que en esta ejecuci´n, el valor de n fue seteado manualmente en base a los datos proporcionados
o
por el c´digo, para llegar m´s r´pidamente a la convergencia y optimizar el tiempo de c´lculo. Este hecho puede
o a a a
visualizarse en la figura 6a, donde el error alcanzado por la ultima iteraci´n no sigue el comportamiento de las
´ o
corridas anteriores. En el apartado 4 se detalla el programa en c´digo python empleado para producir la salida
o
anterior 1.
6
7. # −∗− c o d i n g : u t f −8 −∗−
2 i m p o r t math , numpy . c o r e . m u l t i a r r a y ; f r o m p y l a b i m p o r t ∗ ; f r o m t i m e i m p o r t t i m e
d e f simpson ( f , a , b , n ) :
4 S = 0 . 0 ; h = ( b−a ) / n ; x = a r a n g e ( a , b , h )
f o r i i n r a n g e ( l e n ( x ) −1) :
6 S += h /6 ∗ ( f ( x [ i ] ) +4∗ f ( ( x [ i ]+ x [ i + 1 ] ) / 2 )+f ( x [ i + 1 ] ) )
i f ( i %10000 == 0 ) :
8 p r i n t ’ % 1 / 1 0 0 c o m p l e t a d o ’ %(s t r ( i ∗ 1 0 0 / ( l e n ( x ) −1) ) )
s
return S
10 def func ( x ) :
r e t u r n l o g (1−x ) / s q r t (1−x ∗ ∗ 2 )
12 a , b , n = 0 . 8 , 1 , 6 e 7 # l i m i t e s p a r a e l c a l c u l o de l a i n t e g r a l y num . de s u b i n t e r v a l o s
˜
c o n v l i m i t , e x s o l = 1 . 0 e −4 , −2.3078 # p a r A ¡ m e t r o s de c o n v e r g e n c i a y i n i c i a l i z a c i o n de p a r a m e t r o de convergencia
14 s t a r t = t i m e ( ) ; s o l = s i m p s o n ( f u n c , a , b , n ) ; end = t i m e ( ) # nueva s o l u c i o n
o u t d a t = open ( ’ out− ’ + s t r ( c o n v l i m i t ) + ’ . s i m p s o n ’ , ’w ’ )
16 o u t d a t . w r i t e ( ’#I n t e g r a c i o n de una f u n c i o n p o r Simpson n ’ )
o u t d a t . w r i t e ( ’#r e s u l t a d o t n t e r r o r [ %] t tiempo [ s ] n ’ )
18 p r i n t ’#r e s u l t a d o t n t e r r o r [ %] t tiempo [ s ] n ’
p r i n t ’ % 1 0 . 4 E t %11d t % 1 0 . 4 E t %11dn ’ %(s o l , n , n a d j , ( end−s t a r t ) )
20 w h i l e ( a b s ( ( s o l −e x s o l ) / e x s o l ) >= c o n v l i m i t ) :
s t a r t = t i m e ( ) #t i m e p o i n i c i a l
22 n a d j = a b s ( ( s o l −e x s o l ) / e x s o l ) ∗100 #p a r a m e t r o de a j u s t e d e l numero de i n t e r v a l o s
n = i n t ( n + n ∗ n a d j ) #a j u s t e d e l numero de s u b i n t e r v a l o s en f u n c i o n d e l e r r o r
24 s o l = simpson ( func , a , b , n ) ; end = t i m e ( ) #t i e m p o f i n a l
o u t d a t . w r i t e ( ’ % 1 0 . 4 E t %11d t % 1 0 . 4 E t %11dn ’ %(s o l , n , n a d j , ( end−s t a r t ) ) )
26 p r i n t ’ % 1 0 . 4 E t %11d t % 1 0 . 4 E t %11dn ’ %(s o l , n , n a d j , ( end−s t a r t ) )
else :
28 p r i n t ’ Se l l e g o a l a s o l u c i o n , v a l o r= % 1 0 . 4 E c o n e r r o r d e l % 1 0 . 4 E 1 / 1 0 0 nSe e m p l e a r o n % s s u b i n t e r v a l o s n ’ %(s o l ,
nadj , n )
p r i n t ’ D e t a l l e s de c a l c u l o en % ’ %(o u t d a t . name ) ; o u t d a t . c l o s e ( )
s
Ej4.py
(a) Convergencia del error en funci´n del tiempo de c´lculo (semi-
o a (b) Error en base a sub-intervalos utilizados
log)
Figura 5: C´lculo de una funci´n con m´todo de Simpson
a o e
5. Hallar una funci´n de mapeo para una matriz Hessenberg (trian-
o
gular superior con una sub-diagonal, o triangular inferior con una
super-diagonal
Resoluci´n
o
Frecuentemente nos encontramos ante arreglos matriciales donde existen elementos nulos. A menudo, las
mediciones reales proporcionan matrices de baja densidad. Cuando nos hallamos ante este tipo de situaciones,
sobre todo en casos que superen varios miles de elementos, el costo computacional de almacenar todos los ele-
mentos ser´ importante, a la vez de in´til, dado que almacenar elementos nulos no proporciona ninguna mejora,
a u
y solo emplear´ grandes espacios de memoria.
a
Para estos casos es conveniente hacer uso de alg´n tipo de transformaci´n que permita solamente guardar
u o
los elementos de inter´s, pero evitando la p´rdida de informaci´n. A menudo, para el caso de matrices ralas,
e e o
donde los elementos no-nulos no siguen un patr´n de distribuci´n dado, se suele emplear una transformaci´n
o o o
Rpxq → Rrx2 donde se coloca en la primer columna todos los elementos no-nulos, y en la segunda, su direcci´n. o
De esta manera, es simple reconstruir la forma original, ya que esta operaci´n es reversible al no mediar p´rdida
o e
alguna de informaci´n.
o
7
8. 100
error
10
1
log error[%]
0.1
0.01
0.001
0.0001
100 1000 10000 100000 1e+06 1e+07 1e+08
log n
(a) Error relativo en funci´n del numero de sub-intervalos (papel logar´
o ıtmico)
Sin embargo, cuando la distribuci´n sigue alg´n tipo de l´gica, se puede evitar el uso de una segunda columna,
o u o
y emplear una funci´n de mapeo Rpxq → Rr ya que la informaci´n sobre su posici´n original estar´ guardada
o o o a
en el ordinal del vector. Consideremos una matriz Hessenberg superior [6],
a0,0 a0,1 a0,2 ··· a0,n−1
a1,0
a1,1 a1,2 ··· a1,n−1
0 a2,1 a2,2 ··· a2,n−1
sup
Hn,n = 0
0 a3,2 ··· a3,n−1
. . . .. .
. . . .
. . . . .
0 0 0 ··· an−1,n−1
Los elementos no-nulos de esta matriz son aquellos que cumplen estas condiciones:
i=0
0<i<n−1∧i−1<j <n−1
El orden a seguir en este procedimiento ser´ primero almacenar la primera fila, luego la segunda y a conti-
a
nuaci´n la tercera sin el primer elemento, seguido de la cuarta fila sin los dos primeros elementos, hasta llegar
o
a la ultima fila, donde s´lo almacenaremos el ultimo elemento. Todos ellos se disponen en un vector fila que
´ o ´
puede escribirse de la siguiente manera:
H ∗ = [a0,0 , a0,1 , a0,2 , · · · , a0,n−1 , a1,0 , a1,1 , a1,2 , · · · , a1,n−1 , a2,1 , a2,2 , · · · , a2,n−1 , a3,2 , · · · , a3,n−1 , · · · , · · · , an−1,n−1 ]
Considerando que la cantidad de elementos por encima de la diagonal en una matriz cuadrada est´ dada a
por la cantidad (n ∗ (n − 1))/2, y que en la diagonal hay n elementos no-nulos, la cantidad total sera la suma
de estos dos t´rminos, dando un total de n(n+1) elementos.
e 2
Una forma b´sica de representar un mapeo unidimensional de una matriz, es a trav´s de una combinaci´n
a e o
lineal del tipo k = in + j, donde k es el sub-´ ındice del vector resultante. Dado en nuestro caso buscamos
particularmente una funci´n que omita todos los elementos nulos de H sup deberemos restar del total de elementos
o
de una matriz, la cantidad de elementos no nulos descriptos anteriormente. Esto da como resultado una funci´n o
de la forma:
i(i − 1)
kh = (in) + j −
2
Como ejemplo, consideremos una matriz como la que se muestra a continuaci´n:
o
8
9.
3 −4 12 −1 17
6
−5 2 11 −1
sup
0 2 7 −4 −9
H5,5 =
0
0 21 11 12
0 0 0 −7 3
0 0 0 0 2
Esta, luego de la transformaci´n, dar´ lugar al vector:
o a
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
H∗ = 3 −4 12 −1 17 6 −5 2 11 −1 2 7 −4 −9 21 11 12 −7 3 2
Si quisi´ramos acceder al elemento a2,3 (−4), la transformaci´n apuntar´ al elemento mapeado k = (2 ∗ 5) +
e o ıa
2(2−1)
3 − 2 = 12, resultando en el mismo elemento, ahora en el vector de mapeado.
6. Dado el siguiente sistema:
1 1 1 5
1 2 4 4
1 3 9,D = 3
A · X = D, con : A =
1
4 16 2
1 5 25 1
1 6 36 10
6.1. Calcular soluci´n usando Cholesky:
o
Resoluci´n
o
Este m´todo es aplicable a matrices cuadradas sim´tricas y definidas positivas. En primera medida el rango
e e
de aplicaci´n parece acotado, sin embargo, a menudo suelen encontrarse matrices de este tipo en la pr´ctica,
o a
por cuanto su conocimiento es interesante. Para esta clase de arreglos matriciales, los autovalores ser´n siempre
a
positivos. Este m´todo es aproximadamente un orden m´s eficiente que el resto de los m´todos de resoluci´n de
e a e o
ecuaciones lineales.
El factor que destaca a este m´todo es que en vez de buscar factores triangulares arbitrarios L, U , esta des-
e
composici´n construye un factor L cuya transpuesta LT puede utilizarse como la parte triangular superior. Es
o
decir, que logramos la transformaci´n L LT = A.
o
En nuestro caso particular, estamos ante un sistema super-definido cuyo rango es 3. Debido a ello, no es
posible aplicar directamente esta transformaci´n a la matriz A. No obstante, si pre-multiplicamos a ambos lados
o
de la ecuaci´n matricial por AT , en el lado izquierdo tendremos como resultado una matriz de coeficientes que
o
reunir´ las condiciones necesarias para aplicar el m´todo. Esto es, una matriz Hermitiana [?].
a e
AT · A = α
AT · D = β
α·X =β
Luego, descomponiendo la matriz α resolvemos el sistema con el siguiente cambio de variables:
α = LT · L
L · Y = β =⇒ LT · X = Y
Los resultados son los siguientes:
6 21 91 25
α = 21 91 441 β = 95
91 441 2275 465
2,44948974 8,5732141 37,15059443 10,20620726 11
L= 0 4,18330013 29,28310093 Y = 1,79284291 X = −5,82142857
0 0 6,11010093 5,45544726 0,89285714
9
10. Estos valores no son satisfactorios. A este respecto, puedo interpretar que la matriz de coeficientes se en-
cuentra mal condicionada cond(A) = 102,69, luego, el proceso es divergente. Como se dijo al principio, este es
un sistema superdeterminado, donde se espera que todas las ecuaciones representen al mismo sistema (podr´ ıa
asumirse que como todas las ecuaciones siguen un patr´n definido, excepto la ultima, podr´ existir alg´n error
o ´ ıa u
de observaci´n). Si para nuestro caso particular, todas las ecuaciones est´n correctamente definidas, es muy
o a
probable que exista un comportamiento subyacente que requiere de mayor observaci´n, previo a la utilizaci´n
o o
de este m´todo. Si en cambio, pudi´ramos determinar que en la confecci´n alguna de las ecuaciones no siguen
e e o
el comportamiento observado (como por ejemplo la ultima ecuaci´n) y decidi´ramos retirarla del sistema, o
´ o e
determin´ramos que el valor correcto para el ultimo valor del vector D era cero (con lo que ahora el sistema
a ´
mostrar´ un comportamiento m´s simple), los el proceso ser´ convergente y los resultados ser´ los siguientes:
ıa a ıa ıan
6
X= −1
1,02603473e − 15
Este nuevo vector soluci´n verifica correctamente en el sistema. N´tese que en esta modificaci´n, no cambia
o o o
la condici´n de la matriz de coeficientes, ya que el ejemplo se bas´ en una modificaci´n del vector D.
o o o
6.2. Calcular soluci´n usando una transformaci´n ortogonal:
o o
Resoluci´n
o
A menudo este tipo de sistemas no tienen soluci´n. Cuando esto ocurre, el caso se transforma en un problema
o
de optimizaci´n, donde se pretende minimizar la norma euclidiana m´ A · x − b 2 ). Queda claro que b´sica-
o ın( a
mente al no haber soluci´n, se busca aproximar un vector soluci´n tal que se minimice esa funci´n objetivo, y
o o o
este hecho es el que engloba y da nombre a los procedimientos de resoluci´n que surgen de este paradigma, a
o
los que llamamos m´ ınimos cuadrados.
Mediante la obtenci´n de valores singulares se puede llegar a la expresi´n;
o o
−1
0
x=V r UT b
0 0
−1
Aqu´ el elemento r es una submatriz diagonal que contiene todos los valores singulares de la matriz
ı,
original. Puede demostrarse que la ecuaci´n anterior constituye la soluci´n del problema m´ A · x − b 2 ). El
o o ın(
segundo miembro de la misma es conocido como la matriz de Moore-Penrose [5].
Haciendo uso de las condiciones de Penrose se llega a la expresi´n A† = (AT · A)−1 · AT . Por otro lado, el vector
o
x ser´ unico si AT · A es invertible, o sea que la transformaci´n lineal es inyectiva. De esta manera, el sistema
a´ o
puede plantearse como:
x = (AT · A)−1 · AT · b
. Para nuestro caso, la matriz de Moore-Penrose adopta la forma:
−1
0
A† = (AT · A)−1 · AT = V r UT
0 0
Este m´todo genera los mismos resultados que los de 6.1. El apartado 6.2 muestra la implementaci´n del
e o
algoritmo en Python.
1 # −∗− c o d i n g : u t f −8 −∗−
f r o m math i m p o r t ∗ ; f r o m s c i p y . l i n a l g i m p o r t ∗ ; i m p o r t numpy a s np ; f r o m numpy . m a t l i b import ∗
3 d e f C h o l e s k y (A, z t o l = 1 . 0 e −5) :
”””
5 Computa l a m a t r i z t r i a n g u l a r s u p e r i o r p o r f a c t o r i z a c i o n de
C h o l e s k y en una m a t r i z h e r m i t i a n a .
7 ”””
n r o w s = l e n (A) ; mrows = l e n ( l e n (A) )
9 t = z e r o s ( ( nrows , n r o w s ) ) ; S = z e r o s ( ( nrows , n r o w s ) ) ; d = z e r o s ( ( nrows , mrows ) )
f o r i i n r a n g e ( nrows ) :
11 S = sum ( [ ( t [ k ] [ i ] ) ∗∗2 f o r k i n r a n g e ( i ) ] )
d = A [ i ] [ i ] −S
13 i f abs ( d ) < z t o l :
t [ i ] [ i ] = 0.0
15 else :
if d < 0.0:
17 r a i s e V a l u e E r r o r , ” La M a t r i z no e s d e f i n i d a p o s i t i v a ”
t [ i ] [ i ] = sqrt (d)
19 f o r j i n r a n g e ( i +1 , n r o w s ) :
S = sum ( [ t [ k ] [ i ] ∗ t [ k ] [ j ] f o r k i n r a n g e ( i ) ] )
21 i f abs ( S ) < z t o l :
S = 0.0
23 t [ i ] [ j ] = (A [ i ] [ j ] − S ) / t [ i ] [ i ]
return t
25 A = m a t r i x ( np . a r r a y ( [ [ 1 , 1 , 1 ] , [ 1 , 2 , 4 ] , [ 1 , 3 , 9 ] , [ 1 , 4 , 1 6 ] , [ 1 , 5 , 2 5 ] , [ 1 , 6 , 3 6 ] ] ) )
D = m a t r i x ( np . a r r a y ( [ [ 5 ] , [ 4 ] , [ 3 ] , [ 2 ] , [ 1 ] , [ 1 0 ] ] ) )
27 a l p h a = t r a n s p o s e (A) ∗A ; b e t a = t r a n s p o s e (A) ∗D
L = c h o l e s k y ( a l p h a ) ; Y = s o l v e ( t r a n s p o s e ( L ) , b e t a ) ; X = s o l v e ( L , Y)
Problema6a.py
10
11. 6.3. Calcular error y desviaci´n est´ndar:
o a
Resoluci´n
o
Una forma de estimar el error de un SEL, es expresarlo en la siguiente forma:
A · X − D = R,
donde el vector R acumular´ los residuos. Dado que en este ejercicio he realizado muchas asunciones, calcular´ los
a e
valores del sistema original, y modificado. Para el primer caso, el SEL con el c´lculo de residuos queda en la
a
forma:
1 1 1 5
1 2 4 4 1,0714e + 00
1 3 9
11 −1,0714e + 00
· −5,8214 − 3 = −1,4285e + 00 − 2,1316e − 14
1 4 16 2
1 5 25
0,8928
1 3,2142e + 00
−1,7857e + 00
1 6 36 10
Para los valores originales, y:
1 1 1 5 8,8817e − 15
1 2 4 4 8,8817e − 16
6
− 3 = −3,9968e − 15
1 3 9
1
· −1 2 −5,3290e − 15
4 16
1
1,0260e − 15
1 −3,5527e − 15
5 25
1 6 36 0 2,6645e − 15
si hubi´ramos tenido un vector D con esta otra forma (aclaro que esta alternativa, al igual que al principio
e
del ejercicio s´lo se muestra con fines comparativos). Los valores correspondientes a las desviaciones de los
o
Rt · R
residuos pueden calcularse como σ 2 = , donde los valores del denominador corresponden a las dimensiones
m−n
correspondientes de la matriz A, que para nuestro caso es 6 − 3 = 3, por lo que el c´lculo queda en 5,95238095
a
para el caso real, y en 4,79233000e − 29(≈ 0) para el ejemplo propuesto.
6.4. Calcular las matrices de covarianza y de correlaci´n:
o
Resoluci´n
o
La matriz de covarianza contiene la covarianza entre los elementos de un vector. Es la generalizaci´n natural
o
a dimensiones superiores del concepto de varianza de una variable aleatoria escalar. Representa la influencia
que una variable tiene sobre otra y de los pares ordenados del resultado de un experimento aleatorio. Se define
matem´ticamente como:
a
σij = E[(Xi − µi )(Xj − µj )] donde µi = E(Xi )
En la pr´ctica, esta matriz generalmente se calcula a partir de su definici´n en funci´n de su transpuesta.
a o o
Al no ser una matriz nula, se infiere que las variables no son independientes.
0 0 0
σij = cov(A) = (AT · A)−1 = 0 3,5 24,5
0 24,5 178,966
Los coeficientes de correlaci´n de esta matriz indican que hay una fuerte correlaci´n entre las variables x2 y
o o
x3 :
∅ ∅ ∅
corr(A) = ∅ 1 0,97891726
∅ 0,97891726 1
6.5. Hay datos discordantes?:
Resoluci´n
o
Es evidente que el ultimo vector fila no sigue el patr´n del resto de las ecuaciones. Si se lo retirara del
´ o
sistema, el mismo quedar´ con cond(A) = 85,8932 Desde el punto de vista anal´
ıa ıtico, es posible que D5 = 10 sea
discordante. Anulando este valor, el SEL completo seguir´ el mismo patr´n de comportamiento. Otra forma de
ıa o
mejorar la condici´n del sistema ser´ directamente retirar la ultima ecuaci´n, logrando el mismo resultado.
o ıa ´ o
11
12. 7. Para la siguiente matriz de Pascal 5x5:
1 1 1 1 1
1 2 3 4 5
P = 1
3 6 10 15
1 4 10 20 35
1 5 15 35 70
7.1. Calcular los autovalores de la matriz:
Resoluci´n
o
Para calcular los autovalores de esta matriz, debemos primero diagonalizar la matriz. Para ello haremos uso
del algoritmo QR, de manera de convertir esta matriz en una de tipo tridiagonal. Es posible para ello efectuar
transformaciones de Householder del tipo
ak+1 = Hk AkHk , k = 1..n
En cada iteraci´n, la matriz Hk es una matriz identidad, cuya submatriz inferior derecha es una matriz de
o
Householder de (n − k) ∗ (n − k) elementos para n = 5.
Las transformaciones sucesivas de Householder [2] producen una matriz tridiagonal porque la matriz original
A es sim´trica. Una vez obtenida la matriz tridiagonal resultante del procedimiento anterior, se utiliza el
e
algoritmo QR en forma iterativa. Esto es, descomponer la matriz, obtener una nueva con T = R ∗ Q y continuar
la operaci´n hasta su convergencia.
o
En cada iteraci´n se verifica si el algoritmo converge. Consideramos que hay convergencia cuando la variaci´n
o o
en el valor de todos los elementos por debajo de la diagonal principal, respecto de los valores de la iteraci´n
o
anterior, es menor a 1−10 . Cuando se alcanza convergencia, los autovalores quedan en la diagonal principal de
la matriz. De esta manera se obtiene el siguiente arreglo:
92,2904
5,5175
Λ = 1,0000
0,1812
0,0108
# −∗− c o d i n g : u t f −8 −∗−
2 i m p o r t numpy . c o r e a s np1 ; i m p o r t numpy . c o r e . f r o m n u m e r i c a s np2 ; i m p o r t math
P s c a l = np1 . a r r a y ( [ [ 1 , 1 , 1 , 1 , 1 ] , [ 1 , 2 , 3 , 4 , 5 ] , [ 1 , 3 , 6 , 1 0 , 1 5 ] ,
4 [ 1 , 4 , 1 0 , 2 0 , 3 5 ] , [ 1 , 5 , 1 5 , 3 5 , 7 0 ] ] ) #M a t r i z de D a t o s
d e f q r (A, method=”gramm” ) :
6 i f method == ”gramm” :
Q = gramm (A) ; R = np1 . d o t ( np2 . t r a n s p o s e (Q) ,A)
8 r e t u r n Q, R
d e f gramm (X, i n p l a c e = F a l s e ) :
10 i f not i n p l a c e :
V = [ row [ : ] f o r row i n X ]
12 else :
V = X
14 k = l e n (X [ 0 ] ) ; n = l e n (X)
f o r j in range ( k ) :
16 f o r i in range ( j ) :
D = sum ( [ V [ p ] [ i ] ∗V [ p ] [ j ] f o r p i n r a n g e ( n ) ] )
18 f o r p in range (n) :
V [ p ] [ j ] −= (D ∗ V [ p ] [ i ] )
20 invnorm = 1 . 0 / math . s q r t ( sum ( [ ( V [ p ] [ j ] ) ∗∗2 f o r p i n r a n g e ( n ) ] ) )
f o r p in range (n) :
22 V [ p ] [ j ] ∗= invnorm # o r t o g o n a l i z a c i o n Gramm −S c h m i d t
return V
24 Q, R = q r ( P s c a l ) ; p r i n t P s c a l ; p r i n t Q; p r i n t R
Problema7a.py
7.2. Demostrar que verifican el teorema de Gershgorin:
Resoluci´n
o
El teorema de Gershgorin [9] nos dice que los autovalores de una matriz compleja (esto incluye tambi´n ae
las reales) de orden nxn, se encuentran en el espacio del plano complejo delimitado por la uni´n de los c´
o ırculos
Di . Un c´ırculo Di tiene el centro en el valor del elemento aii de la matriz, y su radio se obtiene sumando el
resto de los elementos de la fila en valor absoluto, es decir:
n
ci = aii , ri = |aij |
j=1
12
13. Entonces los autovalores de la matriz A se encuentran en la uni´n de los n c´
o ırculos. Adem´s, cada componente
a
conexa de esa uni´n contiene tantos autovalores como c´
o ırculos haya en ella, tanto c´ ırculos como autovalores
contados con multiplicidad. A estos c´ırculos se los denomina comunmente discos de Gershgorin. Para nuestra
matriz de Pascal, los valores correspondientes son:
λ1 = 92, 2904348302 → |92,2904348302 − 70| ≤ 56 → i = 4 → a44 = 70, r4 = 56
λ2 = 5,5174879093 → |5,5174879093 − 2| ≤ 13 → i = 1 → a11 = 2, r1 = 13
λ3 = 1 → |1 − 1| ≤ 4 → i = 0 → a00 = 1, r0 = 4
λ4 = 0,1812419015 → |0,1812419015 − 6| ≤ 29 → i = 2 → a22 = 6, r2 = 29
λ5 = 0,0108353591 → |0,0108353591 − 20| ≤ 50 → i = 3 → a33 = 20, r2 = 50
Todos estos valores se encuentran contenidos dentro de al menos un disco de Gershgorin, con lo que queda
verificado el cumplimiento del teorema para este caso.
8. Aproximar su funci´n favorita con cierta precisi´n usando una
o o
de las t´cnicas discutidas en clase:
e
Resoluci´n
o
En el estudio del comportamiento de materiales sometidos a presiones extremas, suelen emplearse simu-
laciones de din´mica molecular, y una de las funciones que m´s se utilizan son los potenciales emp´
a a ıricos que
modelan el comportamiento de s´lidos a nivel nanosc´pico cuando se los somete a esfuerzos que alejan la ma-
o o
´
triz cristalina de su estado de equilibrio. Uno de los m´s utilizados es el de Lennard-Jones [3]. Este tiene la forma
a
σ 12 σ
Ur = 4 [( ) − ( )6 ]
rij rij
, donde es el ancho del pozo de potencial, r la distancia entre la part´ ıcula i y j, y σ es la distancia a la
que el potencial se anula. Como se puede obsercar en esta ecuaci´n, las distancias tienen dos sub´
o ındices, que
corresponde a la distancia entre part´ıculas i y j, por cuanto la gr´fica 6 en realidad muestra el comportamiento
a
entre dos de ellas. En simulaciones MD, este potencial debe evaluarse un promedio de 12 veces para cada
part´
ıcula en un cristal BCC.Adem´s, normalmente para independizar el comportamiento del potencial de las
a
caracter´
ısticas de cada material, esta gr´fica a menudo se muestra como U/ vs. r/σ
a
Como puede verse en la gr´fica 6, esta funci´n tiene una forma particular que tiene que ver con los dos
a o
Figura 6: Gr´fico del potencial de Lennard-Jones
a
tipos de fuerzas que act´an principalmente, a rangos cortos, predominan las fuerzas de repulsi´n de Pauli. A
u o
medida que se gana distancia interat´mica, una vez superado el punto de equilibrio, dado por el m´
o ınimo de
potencial, las fuerzas atractivas de Van der Waals act´an con preponderancia. Es dable decir que este modelo es
u
una gran simplificaci´n al problema de modelar el comportamiento de part´
o ıculas a nivel at´mico. La potencia
o
computacional con que se cuenta en estos d´ permite emplear modelos m´s complicados, como la Teor´ de
ıas a ıa
Funcional de Densidad (DFT) [4], para algunos millones de ´tomos, o hasta la ecuaci´n de Schroding¨r [7].
a o e
Sin embargo, con los recursos actuales, dimensiones de meso-escala s´lo son posibles empleando potenciales y
o
t´cnicas de tight-binding[8]. La importancia de esto radica en que en este rango de tama˜os es posible vincular
e n
13
14. el comportamiento molecular, con el observado por los ensayos corrientes de la Ciencia de los Materiales.
Para nuestro caso utilizaremos Polinomios de Chevyshev [1]. Su ecuaci´n es de la forma:
o
Tn (x) = cos(n ∗ arccos(x))
, no obstante, en su implementaci´n se utiliza una relaci´n de recurrencia.
o o
Tn+1 (x) = 2xTn (x) − T n − 1(x)
De las ecuaciones anteriores, podemos asumir que los ceros se encuentran en el subdominio [−1, 1], ubicados
seg´n:
u
1
(π(k − ))
x = cos 2 , k = 1, 2, −..., n
n
Luego, en el proceso de aproximaci´n se emplea la siguiente ecuaci´n:
o o
1 1
N −1
1 2
N
2 (π(k − )) (π(k − ))
f (x) ≈ ck ∗ tk (x) − c0 cj = f (xk )Tj (xk ) = f cos 2 cos 2
2 N N n n
k=0 k=1
(a) Lennard-Jones normalizado (b) Chevishev a distintos ´rdenes y funci´n original
o o
Figura 7: Implementaci´n de Polinomios de Chevishev a la funci´n potenci´l de Lennard-Jones
o o a
Siendo el conjunto de valores xk , los ceros del polinomio. Para nuestro caso particular, deseamos evaluar la
funci´n en el dominio reducido x[1, 2,5], en t´rminos normalizados, como se coment´ anteriormente. El l´
o e o ımite
por derecha se impone normalmente como cut-off distance, ya que en ese rango las fuerzas pueden despreciarse
en algunos casos7a. Dado que la t´cnica no funciona en este dominio, debemos efectuar una transformaci´n para
e o
llevarlo al espacio de c´lculo de la t´cnica. En nuestro caso emplearemos x∗ = r/bσ con b = 2,5, y evaluaremos
a e
en x∗ [2/5, 1].
El c´digo fue preparado para poder evaluar en forma recursiva la misma funci´n con distintos ´rdenes de
o o o
aproximaci´n. Para este caso fuimos desde orden 3 al 11. El comportamiento del potencial hace plausible su
o
ajuste a trav´s de polinomios, por lo que la idea fue ver hasta con qu´ orden de magnitud ser´ necesario
e e ıa
aproximarse para lograr un buen fitting. La figura 7b permite comparar el comportamiento de los sucesivos
ajustes a orden creciente con la funci´n original. Dado que la curva tiene un comportamiento y → +∞ : x → 0,
o
el hecho de evaluar en un subdominio cercano a 0 producir´ errores considerables en la vecindad de este valor.
a
9. Resolver el problema del p´ndulo invertido, encontrando una so-
e
luci´n estable para oscilaciones verticales:
o
Resoluci´n
o
El problema del p´ndulo invertido puede describirse en base a la figura 8, donde una barra de longitud L
e
se encuentra suspendida por su extremo inferior mediante un v´ ınculo de segundo orden a un elemento que lo
14
15. Figura 8: Representaci´n del problema del p´ndulo invertido
o e
somete a un movimiento vertical s. El v´
ınculo tiene dos grados de libertad, a saber: lineal en la direcci´n y, y
o
rotativo en θ. Si suponemos que dicho movimiento est´ gobernado por un ley del tipo
a
s = Asenwt
donde A es la amplitud, y w es la frecuencia de vibraci´n de la base, podemos expresar su forma diferencia tras
o
aplicar la segunda Ley de Newton, quedando de la siguiente manera:
¨ 3
θ= (g − Aw2 senwt)senθ
2L
, donde para valores peque˜os de θ ≈ senθ, la ecuaci´n es condicionalmente estable para algunos valores de
n o
A. Las posiciones de la masa m est´n dadas por la combinaci´n (Lcosθ, y(t) + Lsenθ), y las velocidades, por
a o
˙ ˙ θsenθ). Por todo lo anterior, podemos expresar para valores peque˜os de θ, la firma diferencial
(Lθcosθ, y(t)L ˙ n
de la siguiente manera:
¨ 3
θ= (g − Aw2 senwt)θ
2L
Revisando la basta bibliograf´ que existe a disposici´n sobre an´lisis din´mico, podemos determinar que para
ıa o a a√
este tipo particular de arreglo habr´ estabilidad cuando se cumpla que w > 2gL . Puede colegirse que el segundo
a A
miembro de la desigualdad tiene que ver con las caracter´ ısticas geom´tricas del sistema, y mientras ese miembro
e
se mantenga en valores inferiores a la frecuencia de excitaci´n externa, se mantendr´n condiciones estables.
o a
Para nuestro an´lisis elegimos cinco escenarios para estudiar su comportamiento. En todos ellos las condiciones
a
iniciales son θ0 = 1θ˙0 = 0 para simplificar el estudio, y se ha variado la velocidad angular de excitaci´n seg´n la
o u
condici´n de estabilidad. A continuaci´n puede verse el detalle de los par´metros establecidos para cada caso:
o o a
A en las figuras 9a9b10a10b se muestran los espacios de fase de cada uno de los casos, en todas las corridas
Cuadro 2: Casos analizados
Caso A[m] L[m] w[rad/s]
√ θ0 [rad]
1 1 1 2gL/A 1
2 1 1 25 1
3 1 1 50 1
4 1 1 2 1
se evaluaron los intervalos con un ancho de 1−4 por un lapso de 100 segundos, utilizando el m´todo de Euler
e
expl´
ıcito, como puede observarse en el c´digo 9.
o
15
16. (a) Caso 1 (b) Caso 2
Figura 9
(a) Caso 3 (b) Caso 4
Figura 10
16
17. # −∗− c o d i n g : u t f −8 −∗−
2 i m p o r t numpy , math
import s c i p y . c o n s t a n t s
4 h=1e −4; n =100000
# [A , L , w , theta0 , thetadot0 ]
6 pic = [[1 ,1 ,50 ,1 ,0] ,
[1 ,1 ,25 ,1 ,0] ,
8 [1 ,1 ,10 ,1 ,0] ,
[ 1 , 1 , math . s q r t ( 2 ∗ s c i p y . c o n s t a n t s . g ) , 1 , 0 ] ,
10 [1 ,1 ,2 ,1 ,0] ,
[ 0 , 1 , 0 , 0 , 0 ] ] # params and i n i t c o n d i t i o n s
12
def f u n c (A, L , w , t h e t a , t ) :
14 r e t u r n ( ( 3 / ( 2 ∗ L ) ) ∗ ( s c i p y . c o n s t a n t s . g−A∗ (w∗ ∗ 2 ) ∗numpy . s i n (w∗ t ) ) ∗numpy . s i n ( t h e t a ) )
16 def eulerexp ( case , n , h) :
# [ t , thetha , thetadot , thetaddot ]
18 Z = [ [ 0 f o r i in range (4) ] f o r j in range (n) ]
Z [ 0 ] [ 0 ] , Z [ 0 ] [ 1 ] , Z [ 0 ] [ 2 ] , Z [ 0 ] [ 3 ] = 0.0 , case [ 3 ] , case [ 4 ] , func ( case [ 0 ] , case [ 1 ] , case [ 2 ] , case [ 3 ] , 0)
20 f o r i i n r a n g e ( l e n ( Z ) −1) :
Z[ i +1][3] = func ( case [ 0 ] , case [ 1 ] , case [ 2 ] , Z [ i ] [ 1 ] , Z [ i ] [ 0 ] )
22 Z [ i + 1 ] [ 2 ] = Z [ i ] [ 2 ] + h∗Z [ i ] [ 3 ]
Z [ i + 1 ] [ 1 ] = ( Z [ i ] [ 1 ] + h∗Z [ i ] [ 2 ] )
24 Z [ i + 1 ] [ 0 ] = ( i +1)∗h
return Z
26
def w r i t e d a t a ( oudt , r r y t ) :
28 f o r l i n e in range ( len ( r r y t ) ) :
linestrout = ’ ’
30 f o r datum i n r r y t [ l i n e ] :
i f ( datum == 0 ) o r ( math . i s n a n ( datum ) ) :
32 l i n e s t r o u t += s t r ( ’ 0 . 0 0 0 0 E+00 ’ ) + ’ ’
else :
34 l i n e s t r o u t += s t r ( ’ % 1 0 . 4 E ’ % datum ) + ’ ’
l i n e s t r o u t . s t r i p ( ) ; l i n e s t r o u t += ’ n ’ ; o u d t . w r i t e ( l i n e s t r o u t )
36 for k in range (6) :
Zout = e u l e r e x p ( p i c [ k ] , n , h )
38 o u t f i l e = open ( ’ . / P r o b l e m a 9 ’ + s t r ( k ) + ’ . o u t ’ , ’w ’ )
w r i t e d a t a ( o u t f i l e , Zout )
40 outfile . close ()
Problema9.py
17
18. Referencias
[1] Abramowitz, M. Handbook of mathematical funktions : with formulas, graphs, and mathematical tables.
In Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables, 9th ed. Dover
Publications, New York, 1972, pp. 771–802.
[2] Frankel, T. The geometry of physics : an introduction. Cambridge University Press, New York, 2004.
[3] Householder, A. S. Unitary triangularization of a nonsymmetric matrix. Journal of the ACM 5, 4 (Oct.
1958), 339–342.
[4] Jones, J. E. On the determination of molecular fields. II. from the equation of state of a gas. Proceedings
of the Royal Society A: Mathematical, Physical and Engineering Sciences 106, 738 (Oct. 1924), 463–477.
[5] Levy, M. Universal variational functionals of electron densities, First-Order density matrices, and natural
Spin-Orbitals and solution of the v-Representability problem. Proceedings of the National Academy of
Sciences 76, 12 (Dec. 1979), 6062–6065.
[6] Penrose, R., and Todd, J. A. A generalized inverse for matrices. Mathematical Proceedings of the
Cambridge Philosophical Society 51, 03 (Oct. 2008), 406.
[7] Press, W. H. Numerical recipes : the art of scientific computing. Cambridge University Press, Cambridge,
UK; New York, 2007.
˜ ˜ ˜
[8] SchrA¶dinger, E. MA c moires sur la mA c canique ondulatoire. Ed. Jacques Gabay, Sceaux, 1988.
[9] Slater, J. C., and Koster, G. F. Simplified LCAO method for the periodic potential problem. Physical
Review 94, 6 (June 1954), 1498–1524.
˜
[10] Varga, R. S. GerA c sgorin and his circles. Springer, Berlin; New York, 2004.
[11] Wright, E. Solution of equation zeˆz =1+i. Proc. R. Soc. Edinburgh 65 (1958), 193.
18