Está en la página 1de 5

Métodos Numéricos

Reporte No 7
EDO’S

Marcos Ibarra

Núcleo de Investigación y Desarrollo Tecnológico–FPUNA


Universidad Nacional de Asunción–San Lorenzo
ibarrag84@gmail.com

Junio 2019

Intrucciones:

Considere el siguiente problema de valor de frontera:


t2 y 00 (t) + ty 0 (t) − y(t) = t2 e−t ∀t ∈ [1, 100]
y(1) = y(100) = 0
Implementar un esquema de diferencia finita centrado para resolver el problema. Obtén un sistema lineal de ecua-
ción algebraica, cuya matriz de coeficientes es tridiagonal.

Encuentra la solución exacta y ejecuta los siguientes experimentos.


1. Resuelva el sistema lineal resultante con el número de nodo de malla N = 50, 150, 300 y 500, tanto mediante
el uso de matriz completa y matriz dispersa (debe hacerlo utilizando una biblioteca diseñada para manejar
matrices dispersas).
Represente gráficamente la solución numérica (tanto para el método completo como el disperso) contra la
solución exacta trazada con N = 500. También muestre gráficamente el retardo de tiempo (tanto para la
matriz completa como dispersa) para N que va de 50 a 5000, en pasos de 50.
2. Programe un “while cycle”, con una bandera, para resolver repetidamente el problema, aumentando N en
cada iteración, hasta que se alcance una cierta tolerancia. La bandera es elegir entre ejecutar el ciclo con
matriz completa o con matriz dispersa. Hazlo con la matriz completa, y considera las tolerancias secuenciales
de 10−4 , 10−6 , 10−8 , y ası́ sucesivamente hasta que tu computadora no pueda manejar el cálculo. Haz lo
mismo ahora trabajando con matriz dispersa.
Observación: para calcular el error que va a necesitar con respecto a la tolerancia, considere la norma infinita. A
saber, tendrá, para cada valor de N , dos vectores de componentes N , llamémoslos X e Y , donde X será su solución
computada numéricamente, mientras que Y es la solución exacta evaluada en los nodos de la malla, entonces calcular
|X − Y |∞ .
Solución
Primero calculemos la solución exacta de la Ecuación Diferencial (ED).:

Rb
Para llegar a la solución de la ED, utilizaremos la función de Green y(t) = G(t, x)f (x)dx. La ecuación dife-
a
rencial se reconoce como una ED de Cauchy-Euler. De la ecuación auxiliar m2 − 1 = 0, la solución general de la
ecuación homogénea asociada es y = c1 t−1 + c2 t. Aplicar y(1) = 0 a esta solución implica c1 + c2 = 0. Al elegir
c2 = −1 obtenemos c1 = 1 y y1 (t) = t−1 − t. Por otro lado, y(100) = 0 aplicada a la solución general muestra que
c1
+ 100c2 = 0. La elección c2 = −1 ahora da c1 = 10000 y ası́ y2 (t) = 10000t−1 − t.
100
El Wronskiano de estas dos funciones es
−1
10000t−1 − t

t −t
W (y1 (t), y2 (t)) = −2 = 19998t−1
−t − 1 −10000t−2 − 1

La función de Green es

1
(x−1 − x)(10000t−1 − t)

si 1≤x≤t


19998x−1


G(t, x) =
(t−1 − t)(10000x−1 − x)


si t ≤ x ≤ 100


19998x−1

Escribiendo la ED en forma estandar tendremos que f (x) = e−x y

Z100 Zt Z100
−x 10000t−1 − t 2 −x t−1 − t
y(t) = G(t, x)e dx = (1 − x )e dx + (10000 − x2 )e−x dx
19998 19998
1 1 t

Resolviendo las integrales obtendremos

10000t−1 − t 2 −t t−1 − t
y(t) = (t e − 2te−t + e−t − 4e−1 ) + (−t2 e−t − 2te−t + 19998e−t + 202e−100 )
19998 19998
Con MATLAB obetenemos de forma directa la solución exacta ingresando en la consola
dsolve(’t^2*D2y+t*Dy-y=t^2*exp(-t)’,’y(1)=0’,’y(100)=0’,’t’)
Implementamos un programa para codificar el Método de Diferencias Finitas en una Dimensión para resolver el
problema con condiciones de frontera:

p(x)y 00 + q(x)y 0 + r(x)y = f (x)

definido en el dominio [xi; xf ] y valores en la frontera de u(xi) = vi y u(xf ) = vf , además se le indica el ta-
maño de la partición n, si se graficará la solución indicando en grf = 1, con solución analı́tica s(x) y si a esta se
proporciona entonces sws = 1. Regresando la matriz y los vectores Ay = b del sistema lineal generado ası́ como
los puntos del dominio y los valores de la solución en dichos puntos x; V , para cada problema que deseemos resolver.

El programa queda implementado en MATLAB como:

1f u n c t i o n [ e r r o r , A, b , u , x ,V] = tp7 ( p , q , r , f , x i , xf , v i , vf , n , g r f , s , sws )


2 if n < 3
3 return
4 end
5 % Numero de i n c o g n i t a s d e l problema
6 tm = n −2;
7 % D e c l a r a c i o n de l a m a t r i z y v e c t o r e s de t r a b a j o
8 A = s p a r s e ( tm , tm ) ;
9 %A = z e r o s ( tm , tm ) ; % M a t r i z de c a r g a
10 b = z e r o s ( tm , 1 ) ; % V e c t o r de c a r g a
11 u = z e r o s ( tm , 1 ) ; % V e c t o r de s o l u c i o n
12 x = z e r o s ( n , 1 ) ; % V e c t o r de c o o r d e n a d a s de l a p a r t i c i o n
13 V = z e r o s (n , 1 ) ; % Vector s o l u c i o n
14 h = ( xf −x i ) / ( n−1) ;
15 h1 = h∗h ;
16 % Llenado de l o s puntos de l a m a l l a
17 for i = 1: n ,
18 x ( i ) = x i + ( i −1)∗h ;
19 end
20 % Llenado de l a m a t r i z y v e c t o r
21 b ( 1 ) = f ( x i ) − p ( x i ) ∗ ( v i / h1 ) ;
22 A( 1 , 2 ) = p ( x ( 1 ) ) / h1 − q ( x ( 1 ) ) / ( 2 . 0 ∗h ) ;
23 A( 1 , 1 ) = ( ( − 2 . 0 ∗ p ( x ( 1 ) ) ) / h1 ) + r ( x ( 1 ) ) ;
24 f o r i =2:tm−1 ,
25 A( i , i −1) = p ( x ( i ) ) / h1 − q ( x ( i ) ) / ( 2 . 0 ∗h ) ;
26 A( i , i ) = ( ( − 2 . 0 ∗ p ( x ( i ) ) ) / h1 ) + r ( x ( i ) ) ;
27 A( i , i +1) = p ( x ( i ) ) / h1 + q ( x ( i ) ) / ( 2 . 0 ∗h ) ;
28 b( i ) = f (x( i ) ) ;
29 end
30 A( tm , tm−1) = p ( x ( tm ) ) / h1 − q ( x ( tm ) ) / ( 2 . 0 ∗h ) ;
31 A( tm , tm ) = ( ( − 2 . 0 ∗ p ( x ( tm ) ) ) / h1 ) + r ( x ( tm ) ) ;
32 b ( tm ) = f ( x ( tm+1) )−p ( x ( tm+1) ) ∗ ( v f / h1 ) ;
33 % Soluciona e l sistema
34 u = i n v (A) ∗b ;
35 % Copia l a s o l u c i o n o b t e n i d a d e l s i s t e m a l i n e a l a l v e c t o r s o l u c i o n
36 V( 1 ) = v i ;
37 f o r i =1:tm ,
38 V( i +1) = u ( i ) ;
39 end
40 V( n ) = v f ;

2
41 % Encuentra e l e r r o r en norma i n f i n i t a usando p a r t i c i o n par =10
42 e r r o r =0;
43 i f sws == 1
44 par = 1 0 ;
45 f o r i = 1 : n−1 ,
46 i n c = ( x ( i +1)−x ( i ) ) / par ;
47 f o r j = 1 : par +1 ,
48 px = x ( i )+i n c ∗ ( j −1) ;
49 e = abs ( s ( px )− l ( px , x ( i ) ,V( i ) , x ( i +1) ,V( i +1) ) ) ;
50 i f e > error
51 error = e ;
52 end
53 end
54 end
55 end
56 % Revisa s i se g r a f i c a r a
57 i f g r f == 1
58 i f sws == 1
59 % C a l c u l a l a s o l u c i o n a n a l i t i c a en l a p a r t i c i o n de c a l c u l o
60 ua = z e r o s ( n , 1 ) ;
61 for i = 1: n ,
62 ua ( i ) = s ( x ( i ) ) ;
63 end
64 end
65 % G r a f i c a r l a s o l u c i o n numerica
66 p l o t ( x , V, ’ o ’ ) ;
67 hold
68 % G r a f i c a r l a s o l u c i o n a n a l i t i c a en una p a r t i c i o n tamano xPart
69 i f sws == 1
70 xPart = 1 0 0 0 ;
71 h = ( xf −x i ) / ( xPart −1) ;
72 xx = z e r o s ( xPart , 1 ) ;
73 xa = z e r o s ( xPart , 1 ) ;
74 f o r i = 1 : xPart ,
75 xx ( i ) = x i + ( i −1)∗h ;
76 xa ( i ) = s ( xx ( i ) ) ;
77 end
78 p l o t ( xx , xa ) ;
79 t i t l e ( ’ S o l u c i o n e x a c t a vs S o l u c i o n aproximada ’ ) ;
80 x l a b e l ( ’ Abscisa ’ ) ;
81 y l a b e l ( ’ Ordenada ’ ) ;
82 l e g e n d ( ’ aproximada ’ , ’ e x a c t a ’ ) ;
83 % Grafica el error
84 figure (2) ;
85 p l o t ( x , V−ua ) ;
86 t i t l e ( ’ Grafico del error ’ ) ;
87 x l a b e l ( ’ Abscisa ’ ) ;
88 y l a b e l ( ’ Ordenada ’ ) ;
89
90 end
91 end
92end
93% Evalua e l punto x en l a r e c t a dada por l o s puntos ( x1 , y1 ) y ( x2 , y2 ) , s e usa para e l c a l c u l o de
l a norma i n f i n i t o
94f u n c t i o n y = l ( x , x1 , y1 , x2 , y2 )
95 y = y1 +(( y2−y1 ) / ( x2−x1 ) ) ∗ ( x−x1 ) ;
96end

Resultados

1.1)

Para N = 50, 150, 300, y 500 ejecutando en la consola


[error,A,b,u,x,V]=tp7(p,q,r,f,1,100,0,0,N,1,s,1)

obtenemos los resultados. Para estos casos, por cuestiones de espacio, remitiré adjunto las simulaciones en un ar-
chivo ajdunto (tp7 simu), donde estarán plasmadas los resultados.
Para visualizar el funcionamiento de este código, lo ejecutaremos para N = 5 para el caso sparse, obteniendo la
matriz sparse y el vector solución:

A=
(1,1) -1.0033
(2,1) 0.5622
(1,2) -0.0186

3
(2,2) -3.1649
(3,2) 3.1430
(2,3) 1.6026
(3,3) -9.3265

u=
0
-0.3652
-0.0782
-0.0264
0

1.2)

(a) (b)

Figura 1: Comparativa con N = 500 para matriz sparse

(a) (b)

Figura 2: Comparativa con N = 500 para matriz completa

4
El código implementado para el retardo del tiempo es el siguiente:

1 f o r i =1:99
2 N=50+50∗ i ;
3 tic ;
4 tp7 ( p , q , r , f , 1 , 1 0 0 , 0 , 0 ,N, 0 , s , 0 ) ;
5 toc ;
6 m1( i )=N;
7 m2( i )=t o c ;
8end
9p l o t (m1 , m2)
10t i t l e ( ’ Retardo d e l tiempo para N=50 a 5000 con p a s o s de 50 ’ ) ;
11x l a b e l ( ’N ’ ) ;
12y l a b e l ( ’ Tiempo ( s e g u n d o s ) ’ ) ;

Generando el siguiente gráfico

(a) Caso matriz sparse (b) Caso matriz completa

Figura 3: Retardo del tiempo para N=50 a 5000 con pasos de 50

2)

Para N = 500, el error es de 0.02. Para N = 1000, error es de 0.0114 y para N = 9000, el error es de 0.0015.
Para valores de N mayores a 9000 mi máquina ya no opera normalmente y se congela.

También podría gustarte