UNIVERSIDAD DE CORDOBA Facultad de ciencias Práctica 84: Epidemia Ébola Métodos Numéricos y Simulación Autores: Vanessa Aguilera Roldán Jorge Orbaneja Huerta Jose Ignacio Rodulfo Contreras Abraham Pérez Martín-Gil Curso 2022-2023 Grado en Física Métodos Numéricos y Simulación Índice 1. Análisis del problema 2 2. Metodología para su resolución 4 3. Listado de códigos 4 4. Comentario sobre la estructura del programa 17 5. Resultados y discusión 24 6. Porcentajes 29 Práctica 84 1 Curso 22-23 Grado en Física 1. Métodos Numéricos y Simulación Análisis del problema La enfermedad por el virus del ébola (EVE), es una enfermedad causada por el denominado virus ébola, un virus raro, pero bastante grave y en la mayoría de ocasiones letal. Éste, afecta tanto a animales como a humanos. El virus del ébola forma parte de la familia de los filovirus, formados de ARN lineal y de una sola cadena en sentido negativo. En la actualidad, se conocen cinco tipos de especie, cada una llamada por su lugar de descubrimiento: Sudán y Zaire (1976), Reston (1989), Costa de Marfil (1994) y Bundibugyo (2007). En este trabajo, trataremos el estudio de la enfermedad EVE con el modelo SIR para los años comprendidos entre 2014-2016 (pandemia del ébola ZSudán y Zaire). Antes de comenzar con el trabajo, haremos una pequeña introducción sobre los síntomas del virus, de cómo se descubrió y de cómo se desarrolló en la pandemia, además, explicaremos el modelo utilizado para el estudio de la pandemia. Normalmente, los síntomas aparecen a los cincos días del contagio con una leve fiebre, dolor de garganta y de cabeza que, poco a poco, debilita el sistema inmune hasta que, al décimo día, aparecen los vómitos y la diarrea seguido de un fallo hepático y renal. Por último, el individuo infectado muere a las dos semanas de fallo multiorgánico. Lo más usual, es contraer el virus por medio de la sangre o de fluidos corporales tanto de personas como de animales contagiados. El primer caso reportado data de 1976 en la República democrática del Congo cuando un niño fue infectado por la mordida de un murciélago de la fruta en el rio Ébola. A partir del primer brote, donde perecieron 280 personas en menos de dos meses, las autoridades pertinentes, dígase la OMS, la CDC, el instituto de medicina tropical y numerosos países circundantes al territorio, decretaron el virus como un patógeno de nivel 4 e iniciaron una carrera para buscar una vacuna, una carrera que a día de hoy sigue abierta. Pero, ¿Por qué es tan letal? ¿Por qué hubo un contagio masivo entre los años 2014-2016? ¿Hay alguna manera de saber cómo evolucionará el virus? Este virus es tan letal debido a su mínima dispersión. Es decir, el virus una vez en el organismo lo ataca de forma agresiva hasta la muerte del individuo, precisamente, esta agresividad hace que el virus disminuya su alcance en la transmisión. Este comportamiento es debido, a grandes rasgos, por la estructura molecular del propio virus que no puede existir bajo unas circunstancias muy específicas del medio [1]. En diciembre de 2013, en Guinea, comenzó el primer contagio que dio paso Práctica 84 2 Curso 22-23 Grado en Física Métodos Numéricos y Simulación a dos años de muerte y sufrimiento. Debido a la carga viral de la persona infectada, los medios del virus para transmitirse, las diferentes tradiciones culturales de las tribus (como lavar a los muertos a mano), la corrupción política de los países afectados, las infraestructuras hospitalarias que no podían dar asilo a tantas personas y al miedo y la histeria colectiva, el virus pudo transmitirse con pasmosa facilidad y llevarse consigo a 11308[4] personas de las 28610[4] infectadas en Guinea, Liberia, Sierra Leona, Nigeria y Senegal. Además, pudo transmitirse fuera de África a países como España, Estados Unidos, Reino Unido y Mali dejando a 100 muertos más. El modelo SIR es un modelo epidemiológico capaz de abarcar diferentes características típicas de los brotes epidemiológicos con gran facilidad. El modelo relaciona las variaciones de las tres poblaciones que están en su nombre: población Susceptible (S(t)), población Infectada (I(t) y población Recuperada (R(t)). Este modelo aplica tres ecuaciones diferenciales relacionando las tres variables anteriores en función del tiempo, cumpliendo en cada momento que la población total (N) es N = I(t) + S(t) + R(t). dS(t) = −βS(t)I(t) dt dI(t) (1) = βS(t)I(t) − γI(t) dt dR(t) = γR(t) dt El modelo SIR es el más básico de los modelos epidemiológicos, pero, no tiene en cuenta ni las defunciones naturales ni las que produce el propio virus, ni los nacimientos del país durante el brote y su desarrollo (como el modelo SIS). Tampoco considera que las personas recuperadas se puedan volver a infectar o que sean susceptibles (como el modelo SEIS), ni tampoco examina a las personas que tienen el virus pero son portadores de él o están en periodo de incubación (modelo SEIR). Para nuestro trabajo, hemos utilizado el modelo SIR considerando los efectos demográficos del país afectado (tasa de nacimientos (ϕ) y defunciones naturales (γ)), además, se aumenta la tasa de mortalidad de la clase infecciosa considerando una tasa de muerte inducida (γI ) asociada a los individuos infectados y se ha puesto un parámetro µ asociado a las tasas de recuperación de los infectados. Después de contemplar los diferentes parámetros formamos Práctica 84 3 Curso 22-23 Grado en Física Métodos Numéricos y Simulación un sistema de tres ecuaciones diferenciales acopladas: dS(t) = ϕN − βS(t)I(t) − γS(t) dt dI(t) = βS(t)I(t) − µI(t) − (γ + γI )I(t) dt dR(t) = µI(t) − γR(t) dt (2) donde β es la tasa de transmisión del virus. 2. Metodología para su resolución El modelo de evolución del virus del Ébola se describe mediante un sistema de ecuaciones diferenciales no lineales de primer orden . Al ser un problema de valores iniciales (PVI) bien planteado, es necesario que la solución buscada satisfaga cada ecuación diferencial junto a sus respectivas condiciones iniciales para que la solución del problema sea única. El método utilizado para ello ha sido el de Runge-Kutta de orden 4, un método numérico que aproxima la solución de nuestro problema de valores iniciales para una Ecuación Diferencial Ordinaria (EDO) de primer orden. Este método es el más óptimo debido a su rapidez para converger ya que es capaz de conseguir precisiones altas sin necesitar un numero grande de interacciones N . Esto es posible debido a que a diferencia de los otros métodos de distintos ordenes, el método de Runge-Kutta realiza la pendiente promedio de las cuatro estimaciones diferentes para estimar el valor de la solución. Una vez estimada la solución de nuestro problema, hemos procedido a realizar la comprobación con la función ode45 de Matlab, un mandato que permite especificar las condiciones iniciales, los límites de integración y otros parámetros necesarios para resolver la ecuación diferencial. El propio mandato una vez ejecutado realiza la estimación de la solución utilizando el de método de Runge-Kutta de cuarto y de quinto orden, por lo que garantiza una estimación muy precisa. 3. Listado de códigos -Programa principal: Práctica 84 4 Curso 22-23 Grado en Física Métodos Numéricos y Simulación % Este es el programa principal % Antes de nada nos proponemos buscar cual es el paso idoneo para emplear 3 % Rungge - Kutta en nuestro problema . Para ello teneomos la funcion 4 % Diferenciasol . 1 2 5 clear clc 8 F = @ (T , Z ) ([0.03574 -0.19* Z (1) * Z (2) -0.00946* Z (1) ;0.19* Z (1) * Z (2) -0.0447* Z (2) -(0.00946+0.0353) * Z (2) ;0.0447* Z (2) -0.00946* Z (3) ]) ; 9 a =0; 10 b =60; 11 Y0 =[ 0 .8 3 8 7; 0 .1 6 13 ; 0 ]; 12 tol =10^ -7; 13 t0 =62; 14 tf =500; 15 [ diferencia , pasos ]= Diferenciasol ( tol ,F ,a ,b , Y0 , t0 , tf ) 6 7 16 17 % Se observa que para tan solo 62 pasos se alcanza una tolerancia de 10^ -7 18 19 20 F = @ (T , Z ) ([0.03574 -0.19* Z (1) * Z (2) -0.00946* Z (1) ;0.19* Z (1) * Z (2) -0.0447* Z (2) -(0.00946+0.0353) * Z (2) ;0.0447* Z (2) -0.00946* Z (3) ]) ; 22 a =0; 23 b =60; 24 Y0 =[ 0 .8 3 8 7; 0 .1 6 13 ; 0 ]; 25 N = pasos ; % Los pasos que hemos calculado antes 26 [T , Z ]= metrungekutta1 (F ,a ,b , Y0 , N ) ; 27 figure (1) ; 21 28 plot (T , Z ) [ To , Zo ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ; 31 legend ( ’S ( T ) ’ , ’I ( T ) ’ , ’R ( T ) ’) ; 32 xlabel ( ’ Runge - kutta ’) 29 30 33 figure (2) ; plot ( To , Zo ) 36 legend ( ’S ( T ) ’ , ’I ( T ) ’ , ’R ( T ) ’) 37 xlabel ( ’ ode45 ’) 34 35 38 Práctica 84 5 Curso 22-23 Grado en Física Métodos Numéricos y Simulación % Tras emplear ode45 se observa que tan solo emplea 57 pasos pasosode45 = length ( To ) ; 41 pasominimoode45 = min ( diff ( To ) ) ; 42 pasomaximoode45 = max ( diff ( To ) ) ; 39 40 43 fprintf ( ’\ n Ode45 solo usa %i , su paso minimo es %i y su paso maximo es %i ’ , pasosode45 , ... 45 pasominimoode45 , pasomaximoode45 ) 44 46 % Si obervamos los pasos de ode45 vemos que el minimo coincide con el 48 % arranque del metodo . 47 49 50 % Realizaremos a continuacion unos tests de convergencia cualtativos 52 % comparando las graficas de las soluciones para distintos pasos , muy 53 % grandes , y la solucion ofrecida por el comando ode 45. 51 54 55 [ o ]= g ra f i ca c on v e rg e nc i a (F ,a ,b , Y0 ) ; 56 57 % Se observa que aun para valores grandes de paso , como puede ser en la 59 % primera imagen incluso con un numero de pasos igual a 4 para 60 dias , las 60 % soluciones se aproximan consid erablemen te a la ofrecida por el comando 61 % ode45 . 62 % Hemos considerado oportuno realizar este test para otro metodo , el de 63 % Heun , el cual conocemos que tiene un orden menor ( orden 2) , para comparar 64 % los resiltados obtenidos . 58 65 66 % Efectivamente para valores grandes de paso se aprecia que las soluciones 68 % difieren mas de ode45 que en el caso de Runge - kutta , ademas se obersava 69 % que convergen mas lentamente . 67 70 71 % Hemos considerado interesante tras ver estas figuras estudiar el avance Práctica 84 6 Curso 22-23 Grado en Física Métodos Numéricos y Simulación % del error maximo para pasos muy grandes , aqui entendemos error como la 73 % diferencia entre la solucion del metodo de Runge - kutta y la de ode45 . 74 % Graficamos el error frente al numero de pasos . 72 75 76 77 to =4; % numero minimo de pasos tf =20; % numero maximo de pasos 80 [ o ]= graficaerror (F ,a ,b , Y0 , to , tf ) ; 78 79 81 82 % Es interesante ver como para pasos muy grandes se aprecian aprosimaciones 84 % con siderabl emente buenas a la solucion ademas estudiando el comportamiento 85 % del error frente al numero de pasos de las figuras 5 y 6 , en donde 86 % aparacen graficas que se asemejan a curvas exponenciales nos hacen pensar 87 % que el valor de la constante C del problema lo suficientemente pequeno 88 % como para conseguir buenas aproximaciones a la solucion con pasos muy 89 % grandes . 83 90 91 % A continuacion nos proponemos el valor de la C . 92 93 % Esta simulacion tarda mucho tiempo por las interpolaciones que le 95 % exigimos en cada paso 94 96 to =200; tf =800; 99 [ valorCenelinfinito ,C , LT2 , error ]= calculoC (F ,a ,b , Y0 , to , tf ) 100 va lo rC ene li nf ini to 97 98 101 102 103 104 figure (7) plot ([ to : tf ] , C ) ; 105 106 107 title ( ’C frente a numero de pasos ’) xlabel ( ’ numero de pasos ’) Práctica 84 7 Curso 22-23 Grado en Física 108 Métodos Numéricos y Simulación ylabel ( ’ Valor de C ’) 109 ed1 = error (1) / error (201) ; %El error (1) es el error para 200 pasos , el 111 % error (201) es el error para 400 pasos 112 ed2 = error (50) / error (301) ; %El error (50) es el error para 250 pasos , el 113 % error (301) es el error para 500 pasos 114 ed3 = error (100) / error (401) ; 115 ed4 = error (150) / error (501) ; 116 ed5 = error (200) / error (601) ; 110 117 orden1 = log2 ( ed1 ) ; orden2 = log2 ( ed2 ) ; 120 orden3 = log2 ( ed3 ) ; 121 orden4 = log2 ( ed4 ) ; 122 orden5 = log2 ( ed5 ) ; 118 119 123 % Consideremos la media de todos los resultados de orden hallados 125 ordenmetodo =( orden1 + orden2 + orden3 + orden4 + orden5 ) /5 124 126 figure (8) plot ([ to : tf ] , error ) 129 title ( ’ Error frente al numero de pasos ’) 130 xlabel ( ’ numero de pasos ’) 131 ylabel ( ’ error ’) 127 128 132 fprintf ([ ’\ n El orden del metodo es %i , la cosntante C tiene un valor ’ ... 134 ’ aproximado de %i ’] , ordenmetodo , val or Ce nel in fi nit o ) 133 -Funciones auxiliares: function [T , Z ]= metrungekutta1 (F ,a ,b , Y0 , N ) % Aproxima la solucion de un PVI para un sistema de EDOs usando el metodo de 3 % Runge - Kutta orden 4. 4 % Z ’= F (T , Z ) donde Z pertenece al dominio [a , b ] ; Z ( a ) = Y0 . 5 % Datos 6 % ----7 % * F = funcion vectorial del sistema escrita como vector columna para que 8 % siga la misma nomenclatura que los ode **. 9 % * a = punto inicial 1 2 Práctica 84 8 Curso 22-23 Grado en Física Métodos Numéricos y Simulación % * b = punto final % * Y0 = vector columna , siendo la solucion en T = a 12 % * N = numero de pasos para llegar a b . 13 % Resultado 14 % ----15 % * T = vector columna con los puntos donde se calcula la solucion 16 % * Z = matriz de valores aproximado del vector s o l u c i n en los puntos T . 10 11 17 h =( b - a ) / N ; m = length ( Y0 ) ; 20 T = zeros ( N +1 ,1) ; 21 Z = zeros ( N +1 , m ) ; 22 K1 = zeros (1 , m ) ; 23 K2 = zeros (1 , m ) ; 24 K3 = zeros (1 , m ) ; 25 K4 = zeros (1 , m ) ; 26 Z (1 ,:) = Y0 ’; 27 T (1) = a ; 28 % Valores iniciales 29 for i =1: N 18 19 30 K1 = F ( T ( i ) ,Z (i ,:) ) ’; K2 = F ( T ( i ) +( h /2) ,Z (i ,:) +( h /2) * K1 ) ’; K3 = F ( T ( i ) +( h /2) ,Z (i ,:) +( h /2) * K2 ) ’; K4 = F ( T ( i ) +h , Z (i ,:) + h * K3 ) ’; Z ( i +1 ,:) = Z (i ,:) +( h /6) *( K1 +2* K2 +2* K3 + K4 ) ; T ( i +1) = T ( i ) + h ; 31 32 33 34 35 36 37 38 end 1 function [ valorCenelinfinito ,C , lT2 , error ]= calculoC (F ,a ,b , Y0 , to , tf ) 2 options = odeset ( ’ MaxStep ’ ,0.0001) ; contador =0; 5 alcanzado =0; 6 error (1) =100; 3 4 7 8 9 [ T2 , Z2 ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0] , options ) ; for i = to :1: tf 12 contador = contador +1; 10 11 Práctica 84 9 Curso 22-23 Grado en Física 13 14 Métodos Numéricos y Simulación N=i; h =(( b - a ) / N ) ; 15 16 17 clear y [ T1 , Z1 ]= metrungekutta1 (F ,a ,b , Y0 , N ) ; 18 interpol1 = spline ( T1 , Z1 (: ,1) ) ; interpol2 = spline ( T1 , Z1 (: ,2) ) ; 21 interpol3 = spline ( T1 , Z1 (: ,3) ) ; 19 20 22 23 soluc ioninter pol1 = ppval ( interpol1 , T2 ) ; soluc ioninter pol2 = ppval ( interpol2 , T2 ) ; 26 soluc ioninter pol3 = ppval ( interpol3 , T2 ) ; 24 25 27 e1 = solucioninterpol1 - Z2 (: ,1) ; e2 = solucioninterpol2 - Z2 (: ,2) ; 30 e3 = solucioninterpol3 - Z2 (: ,3) ; 28 29 31 32 e =[ e1 ; e2 ; e3 ]; 33 34 error (i -( to -1) ) = max ( max ( abs ( e ) ) ) ; 35 36 37 he (i -( to -1) ) = h ^4; 38 39 end 40 C = error ./ he ; va lo rC ene li nf ini to = C ( end ) ; 43 lT2 = length ( T2 ) ; 41 42 1 function [ diferencia , pasos ]= Diferenciasol ( tol ,F ,a ,b , Y0 , to , tf ) 2 % Esta funcion toma dos soluciones consecutivas del metodo de Runge Kutta 4 % ( aumentando los pasos de 10 en 10) y cualdo la tolerancia entre las 5 % soluciones sea menor de la exigida consideramos que la solucion penultima 6 % es valida para rsolver el problema . Como no podemos compara directamente 7 % los puntos de una solucion con otra por no estar evaluados en los mismos 8 % puntos recurrimos a una interpolacion de la solucion con 3 Práctica 84 10 Curso 22-23 Grado en Física Métodos Numéricos y Simulación menos pasos y % comparamos los puntos interpolados con los de la solucion con mas pasos . 10 %- - - - - - - - - - - - - - - - - - - - - - - - - - - - ENTRADAS ----------------------------------- % 11 % tol es la toleracia exigida , es decir , la diferencia maxima entre 12 % soluciones 13 % F es la funcion vectorial del problema 14 % a es el punto inicial 15 % b es el punto final 16 % Y0 son las condiciones iniciales 17 % t0 es el numero de pasos en los que se comienza 18 % tf el numero de pasos maximo 19 %- - - - - - - - - - - - - - - - - - - - - - - - SALIDAS ----------------------------------------20 % pasos es el numero de pasos idoneo 21 % difrencia es la difrencia maxima entre las soluciones 9 22 23 24 25 alcanzado =0; 26 27 for i = to :10: tf 28 N=i; N2 = N +1; 31 clear y 32 [ T1 , Z1 ]= metrungekutta1 (F ,a ,b , Y0 , N ) ; 33 [ T2 , Z2 ]= metrungekutta1 (F ,a ,b , Y0 , N2 ) ; 29 30 34 interpol1 = spline ( T1 , Z1 (: ,1) ) ; interpol2 = spline ( T1 , Z1 (: ,2) ) ; 37 interpol3 = spline ( T1 , Z1 (: ,3) ) ; 35 36 38 39 soluc ioninter pol1 = ppval ( interpol1 , T2 ) ; soluc ioninter pol2 = ppval ( interpol2 , T2 ) ; 42 soluc ioninter pol3 = ppval ( interpol3 , T2 ) ; 40 41 43 e1 = solucioninterpol1 - Z2 (: ,1) ; e2 = solucioninterpol2 - Z2 (: ,2) ; 46 e3 = solucioninterpol3 - Z2 (: ,3) ; 44 45 47 48 e =[ e1 ; e2 ; e3 ]; Práctica 84 11 Curso 22-23 Grado en Física Métodos Numéricos y Simulación 49 50 diferencia = max ( max ( abs ( e ) ) ) ; 51 if diferencia < tol fprintf ( ’ El numero de pasos idoneo para aplicar el metodo es %i ’ ,N ) 54 pasos = N ; 52 53 55 return end 58 end 59 if alcanzado ==0 60 disp ( ’ No se ha conseguido la tolerancia exigida ’) 61 pasos =0; 62 diferencia =10000; 63 end 56 57 1 2 function [ o ]= graficaerror (F ,a ,b , Y0 , to , tf ) o =0; 3 4 5 % Metodo de Runge - kutta for i = to :1: tf 6 N=i; h =(( b - a ) / N ) ; 9 x=a:h:b; 10 clear y 11 [ T1 , Z1 ]= metrungekutta1 (F ,a ,b , Y0 , N ) ; 12 y = deval ( ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ,x ) ; 13 y =y ’; 14 e =y - Z1 ; 15 em (i -( to -1) ) = max ( max ( abs ( e ) ) ) ; 16 l = length ( em ) ; 17 z =[ to : l + to -1]; 18 figure (5) 19 plot (z , em ) ; 7 8 20 21 22 end legend ( ’ Runge - kutta ’) 23 24 for i = to :1: tf 25 N=i; h =(( b - a ) / N ) ; 28 x = a : h : b ; 26 27 Práctica 84 12 Curso 22-23 Grado en Física Métodos Numéricos y Simulación clear y [ T1 , Z1 ]= Heunsis (F ,a ,b , Y0 , N ) ; 31 y = deval ( ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ,x ) ; 32 y =y ’; 33 e =y - Z1 ; 34 em (i -( to -1) ) = max ( max ( abs ( e ) ) ) ; 35 l = length ( em ) ; 36 z =[ to : l + to -1]; 37 figure (6) 38 plot (z , em ) ; 29 30 39 40 end 41 42 legend ( ’ Heun ’) function [ o ]= gr a f ic a co n ve r g en c ia (F ,a ,b , Y0 ) o =1; 3 figure (3) 4 t = tiledlayout (2 ,2) ; 1 2 5 nexttile N =4; 8 [T , Z ]= metrungekutta1 (F ,a ,b , Y0 , N ) ; 9 plot (T , Z ) 10 hold on 11 title ( ’ Convergencia Runge - Kutta ’) 12 xlabel ( ’N =4 ’) 13 [T , Z ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ; 14 plot (T , Z ) ; 15 hold off 6 7 16 17 nexttile 18 N =8; [T , Z ]= metrungekutta1 (F ,a ,b , Y0 , N ) ; 21 plot (T , Z ) 22 hold on 23 title ( ’ Convergencia Runge - Kutta ’) 24 xlabel ( ’N =8 ’) 25 [T , Z ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ; 26 plot (T , Z ) ; 27 hold off 19 20 28 29 nexttile 30 Práctica 84 13 Curso 22-23 Grado en Física Métodos Numéricos y Simulación 31 N =12; [T , Z ]= metrungekutta1 (F ,a ,b , Y0 , N ) ; 34 plot (T , Z ) 35 hold on 36 title ( ’ Convergencia Runge - Kutta ’) 37 xlabel ( ’N =12 ’) 38 [T , Z ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ; 39 plot (T , Z ) ; 40 hold off 32 33 41 42 nexttile N =20; 45 [T , Z ]= metrungekutta1 (F ,a ,b , Y0 , N ) ; 46 plot (T , Z ) 47 hold on 48 title ( ’ Convergencia Runge - Kutta ’) 49 xlabel ([ ’N =20 ’ ]) 50 [T , Z ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ; 51 plot (T , Z ) ; 52 hold off 43 44 53 54 % Se observa que aun para valores grandes de paso , como puede ser en la 56 % primera imagen incluso con un numero de pasos igual a 4 para 60 dias , las 57 % soluciones se aproximan consid erablemen te a la ofrecida por el comando 58 % ode45 . 59 % Hemos considerado oportuno realizar este test para otro metodo , el de 60 % Heun , el cual conocemos que tiene un orden menor ( orden 2) , para comparar 61 % los resiltados obtenidos . 62 figure (4) 55 63 64 t = tiledlayout (2 ,2) ; 65 nexttile N =4; 68 [T , Z ]= Heunsis (F ,a ,b , Y0 , N ) ; 69 plot (T , Z ) 70 hold on 66 67 Práctica 84 14 Curso 22-23 Grado en Física Métodos Numéricos y Simulación title ( ’ Convergencia Heun ’) xlabel ( ’N =4 ’) 73 [T , Z ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ; 74 plot (T , Z ) ; 75 hold off 71 72 76 77 nexttile 78 N =8; [T , Z ]= Heunsis (F ,a ,b , Y0 , N ) ; 81 plot (T , Z ) 82 hold on 83 title ( ’ Convergencia Heun ’) 84 xlabel ( ’N =8 ’) 85 [T , Z ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ; 86 plot (T , Z ) ; 87 hold off 79 80 88 89 nexttile 90 91 N =12; [T , Z ]= Heunsis (F ,a ,b , Y0 , N ) ; 94 plot (T , Z ) 95 hold on 96 xlabel ( ’N =12 ’) 97 title ( ’ Convergencia Heun ’) 98 [T , Z ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ; 99 plot (T , Z ) ; 100 hold off 92 93 101 102 nexttile N =20; 105 [T , Z ]= Heunsis (F ,a ,b , Y0 , N ) ; 106 plot (T , Z ) 107 hold on 108 title ( ’ Convergencia Heun ’) 109 xlabel ([ ’N =20 ’ ]) 110 [T , Z ]= ode45 (F ,[ a , b ] ,[0.8387;0.1613;0]) ; 111 plot (T , Z ) ; 112 hold off 103 104 Práctica 84 15 Curso 22-23 Grado en Física 1 Métodos Numéricos y Simulación function [X , Y ]= Heunsis (F ,a ,b , Y0 , N ) 2 % Aproxima la solucion de un PVI de Cauchy usando el metodo de Euler 4 % mejorado o metodo de Heus 5 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3 % F es la funcion vectorial del sistema % a es el punto inicial 8 % b es el punto final 9 % Y0 es el vector columna de la condicion inicial en x = a 10 % N es el numero de pasos 11 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6 7 % X es el vector columna con los puntos donde se calcula la solucion 13 % Y es el vector columna que nos da la solucion aproximada en los puntos X 12 14 % Comenzamos calculando el paso : h =( b - a ) / N ; 17 m = length ( Y0 ) ; 18 % m tendra el mismo valor que el orden de la edo 19 X = zeros ( N +1 ,1) ; 20 % Esto es un vector de una columna con los puntos donde vamos a calcular la 21 % solucion . Tiene N +1 componentes para que la solucion se evalue tambien en 22 % el punto b . 23 Y = zeros ( N +1 , m ) ; % si la edo es de orden 1; m es uno y solo tenemos y ( x ) , si 24 % es de orden 2; m =2 y tenemos y ( x ) , y ’( x ) ... 25 K1 = zeros (1 , m ) ; %vector fila 26 K2 = zeros (1 , m ) ; %vector fila 27 % k1 y k2 son las funciones * que se usan dentro del metodo de Heuss . 28 % ya tenemos todos los vectores que necesitamos definidos . 15 16 29 Y (1 ,:) = Y0 ’; % Esto es , en el paso primero , es decir , cuando x =a , lo que 31 % vale la solucion son las condiciones iniciales . A partir de estos puntos 32 % se van a calucular el resto ( Y (2 ,:) ,Y (3 ,:) ...( Y ( N +1 ,:) ) ) 30 Práctica 84 16 Curso 22-23 Grado en Física 33 Métodos Numéricos y Simulación X (1) = a ; 34 35 % Ahora se puede iniciar el metodo de Heuss 36 for i =1: N K1 = F ( X ( i ) ,Y (i ,:) ) ’; % La funcion F es un vector columna y k1 39 % es un vector fila , por eso se le hace la traspuesta a F. 37 38 40 K2 = F ( X ( i ) +h , Y (i ,:) + h * K1 ) ’; 41 42 Y ( i +1 ,:) = Y (i ,:) +( h /2) *( K2 + K1 ) ; %Aqui se aproxima la integral entre x ( i +1) % y x ( i ) por la media del area de dos rectangulos de base h y altura % el valor de F en cada punto . Y con eso conseguimos la aproximacion de % de la solucion y ( i +1) . 43 44 45 46 47 X ( i +1) = X ( i ) + h ; 48 49 end 4. Comentario sobre la estructura del programa En un primer momento, hemos tenido que determinar el numero de pasos efectivos para poder implementarlo en el método numérico que tratamos en el trabajo, Runge-Kutta 4. Para poder calcularlo, hemos utilizado la función diferenciasol. La cual, ha cogido dos soluciones consecutivas (de 10 en 10 pasos) de Runge-kutta y ha calculado la diferencia máxima entre las soluciones hasta que encontrar la tolerancia exigida, en nuestro caso 10−7 . Hemos obtenido que los pasos necesarios para un análisis efectivo del problema han sido 62 pasos, es decir, en el paso 62-72 hemos obtenido una diferencia menor a 10−7 , esta ha sido 5,7 ∗ 10−8 . Entonces, como conclusión de esta primera parte, nosotros hemos considerado que para 62 pasos la solución dada por el método de Rung-Kutta 4 es válida. El siguiente punto de nuestro programa, ha sido graficar las soluciones de Runge-Kutta para cuatro pasos grandes, tanto por Runge-Kutta como la Práctica 84 17 Curso 22-23 Grado en Física Métodos Numéricos y Simulación función predeterminada de Matlab, ode45. Obteniendo los resultados de la figura 1, donde se puede ver que, aunque para N=4 y N=8 la diferencia es visible, la convergencia entre el método implementado y ode45 no difiere del resultado esperado, la convergencia de ambos. Un problema notable a mencionar es que al implementar ode45 para graficar la solución, es notable recalcar que ésta función solo utiliza 57 pasos los cuales son variables, su paso mínimo es 6,9 ∗ 10−3 y su paso máximo es 1.5 (estos pasos los decide la ode45 según la pendiente de la función), mientras que nosotros, con Runge-Kutta 4, 62 pasos. Figura 1: Test de convergencia Rungge-kutta de orden 4 Práctica 84 18 Curso 22-23 Grado en Física Métodos Numéricos y Simulación Estos test de convergencia muestran unos resultados positivos ya que se puede comprobar cualitativamente cómo el método converge hacia la solución conforme el número de pasos aumenta y que se necesita un número de pasos bastante reducido para encontrar una solución precisa. Resulta interesante realizar este mismo test de convergencia sobre otros métodos de un solo paso. Hemos escogido realizarlo sobre el método de Heun de orden 2. Los resultados obtenidos se recogen en la figura 2 Figura 2: Test de convergencia de Heun Como podemos observar, el método de Heun necesita más pasos para llegar a la solución del método. Para poder visualizar como el error disminuye a medida que se aumentan Práctica 84 19 Curso 22-23 Grado en Física Métodos Numéricos y Simulación los pasos hemos representado error frente número de pasos, obteniendo estas gráficas para Runge-Kutta y Heun: Figura 3: Error frente número de pasos para Runge-Kutta Figura 4: Error frente número de pasos para Heun Práctica 84 20 Curso 22-23 Grado en Física Métodos Numéricos y Simulación También, comparando la gráficas obtenidas, se puede ver que el método de Heun necesita más pasos para llegar a la solución. El reducido número de pasos que emplea el mandato Ode45 para conseguir las soluciones del problema, junto con los resultados reflejados en las gráficas 1 2 3 4,que muestran cómo para unos pasos muy grandes en los métodos de Runge-kutta y Heun las soluciones difieren muy poco de la dada por Ode45 y convergen rápidamente a esta y el comportamiento suave de las soluciones vistas en la figura 7 nos llevan a la hipótesis de que el problema de estudio tiene un valor de la constante C muy pequeño, tal que permite que aún con un paso mayor que uno las soluciones de Runge-kutta sean válidas. ||error|| = Chp , (3) Siendo C la constante mencionada anteriormente, h el tamaño del paso, p es el orden del método y ||error|| es el error global. Con el objetivo de comprobar la hipótesis acerca de la constante C hemos estudiado el valor de esta cuando h tiende a cero, es decir; C = limh→∞ ||error|| , hp (4) Dado que no se dispone de la solución analítica del problema no se puede realizar este estudio rigurosamente, sin embargo, vamos a considerar que la solución del comando Ode45 es la solución al problema(aun sabiendo que Ode45 emplea Runge-kutta de órdenes 4 y 5). Todo esto se ha realizado en la función valorC en la que lo primero que hemos hecho ha sido variar el paso máximo que utiliza este comando de forma predeterminada de manera que el método de Runge-kutta para un número de pasos muy grande no sea más precisa que la que estamos considerando como solución real"(Cuando no modificábamos el paso máximo se obtenían resultados incoherentes, como que el valor de C no dejaba de crecer alcanzando valores con órdenes de magnitud muy grandes o que el error del método aumentaba en lugar de disminuir). Representando C frente al número de pasos se obtiene la siguiente gráfica: Práctica 84 21 Curso 22-23 Grado en Física Métodos Numéricos y Simulación Figura 5: C frente a número de pasos Es necesario comentar en primer lugar que se ha detenido el estudio del valor de C en 600 pasos por el coste computacional que se requiere. Esto se debe a que como estamos comparando conjuntos de soluciones evaluados en distintos puntos hemos interpolado las soluciones de Runge-kutta para cada paso para poder compararlas con las soluciones de Ode45. Aún así para 800 pasos se observa una tendencia que estabiliza el valor de C y nosotros solo estamos interesados en conocer su orden para verificar que tiene un valor pequeño. Se ha obtenido que C= 3,5763 · 10−7 Hemos aprovechado los resultados de esta última funcion "valor C"para verificar que efectivamente el método de Runge-Kutta es un método de orden 4. A través de la ecuación: p = log2 ||error1|| , ||error2|| (5) calculamos p, que es el orden del método. Siendo la relación entre el número Práctica 84 22 Curso 22-23 Grado en Física Métodos Numéricos y Simulación de pasos correspondientes a las normas de la ecuación de el doble de pasos de ||error2|| respecto al empleados para ||error1||. Esto lo hemos calculado para 200 y 400, 250 y 500 , 300 y 600 , 350 y 700, y para 400 y 800 pasos y hemos calculado la media, obteniendo un error del método de p = 4,0510, lo cual tiene sentido sabiendo que el método de Runge-Kutta es de orden 4. Al igual que se hizo para pasos muy grandes, y aprovechando que tenemos tras emplear esta última función la máxima diferencia entre distintos pasos de Runge-kutta y Ode45 con el paso máximo modificado, hemos representado de nuevo el "error global" frente al número de pasos para pasos más pequeños. Figura 6: Error global frente a número de pasos Práctica 84 23 Curso 22-23 Grado en Física 5. Métodos Numéricos y Simulación Resultados y discusión Figura 7: Evolución de poblaciones normalizadas frente al número de días en un tiempo de 2 meses. La curva en azul S(t) es la población susceptible de contagio, la curva en rojo I(t) representa la población de infectados y la curva en amarillo R(t) es la población que se ha recuperado del virus. Vamos a proceder a comentar la gráfica 7 obtenida anteriormente: Al principio del estudio, la población total inicial N=1 esta conformada solamente por personas pertenecientes al grupo de susceptibles o al grupo de infectados, ya que todavía no hay ningún recuperado. Conforme va pasando el tiempo, la gente susceptible empieza a infectarse del virus, haciendo que el número de susceptibles disminuya y aumente el número de infectados. Aquí empieza ya a haber gente recuperada del virus. A los 13 días es cuando hay un mayor número de personas susceptibles infectándose, haciendo que el ritmo de infección sea el máximo (I’(t), la pendiente de la curva en color rojo de la figura 7) de todo el intervalo de tiempo en el que se ha aplicado el modelo. A partir de ahí, el ritmo de infección empieza a disminuir debido a que la población de susceptibles es cada vez menor, por lo que el número de gente que se infecta es menor. Aproximadamente cuando el número de personas susceptibles es igual al número de personas infectadas (25 días), es cuando el número de infectados toma el valor máximo de todo Práctica 84 24 Curso 22-23 Grado en Física Métodos Numéricos y Simulación el intervalo de tiempo estudiado. Así mismo, el número de personas recuperadas no deja de crecer. A partir de dicho máximo la pendiente de la curva de infectados es negativa, es decir, el ritmo de infectados se vuelve negativo. Esto es debido a que el número de susceptibles es bastante bajo (gran parte de la población está recuperada del virus), por lo que no se contagia tanta gente como antes. Esto provoca que el número de personas susceptibles empiece a disminuir mucho más lento que antes, hasta que se llega a un mínimo de población susceptibles a los 42 días. A partir de ahí, el número de personas susceptibles comienza a aumentar levemente. Observando el sistema de ecuaciones del modelo seguido 2 vemos que, para que crezca el número de personas susceptibles se tiene que dar que el número de nacimientos en la población sea mayor que el número de gente susceptible que se está infectando sumado al número de gente susceptible que muere de causas naturales. (Entendemos como causa natural cualquier muerte que no se deba al virus Ébola) De ahí en adelante, el número de personas infectadas y el número de personas susceptibles comienzan a estabilizarse, mientras que el número de recuperados sigue creciendo. En el caso de la curva de susceptibles esto sucede porque el número de nacimientos se iguala a la cantidad de gente que se está infectando, más las muertes naturales del grupo de susceptibles. En cuanto a los infectados, su estabilización se debe a que la cantidad de población que se está infectando es igual al número de personas infectadas que fallecen por cualquier causa (de manera natural o por que no superan la enfermedad) más la gente que se está recuperando. Práctica 84 25 Curso 22-23 Grado en Física Métodos Numéricos y Simulación Figura 8: Evolución de poblaciones normalizadas frente al número de días en un tiempo de un año y medio medio. La curva en azul S(t) es la población susceptible de contagio, la curva en rojo I(t) representa la población de infectados y la curva en amarillo R(t) es la población que se ha recuperado del virus. Si se modela el problema hasta alcanzar los 500 días se observa que, a partir de cierto punto, todas las curvas se acercan a un valor constante (un valor distinto para cada una), siendo la curva de recuperados la última en estabilizarse. Estudiando la fórmula 2 se encuentra que la explicación de este hecho es debido a que existe un equilibrio entre el número de personas que se está recuperando y la cantidad de recuperados que fallece por causa distinta a la de la enfermedad. Sin embargo cabe resaltar que este modelo no tiene en cuenta que la población varía con el tiempo, y sólo toma el valor inicial de la población para modelizar lo que ocurre, de este modo se está considerando que el número de nacimientos es constante. Sin embargo, no se está haciendo lo mismo con el número de muertes ya que ahí sí se esta teniendo en cuenta cómo varía la población. Es por eso que, al tomar dicho valor como constante (N=1), el número de personas que superan la enfermedad llega a estabilizarse. Se podría mejorar el modelo no sólo teniendo en cuenta el valor inicial de la población, sino teniendo en cuenta que la población cambia con el tiempo, siendo N igual a la suma de los distintos grupos poblacionales (recuperados, infectados y susceptibles). Práctica 84 26 Curso 22-23 Grado en Física Métodos Numéricos y Simulación El valor constante de nacimientos comentado anteriormente hace que la efectividad del modelo epidemiológico empleado pueda reducirse con el tiempo y solo al principio nos permite modelizar con precisión la evolución de la epidemia. Según los datos proporcionados, el modelo ha trabajado con una mortalidad cercana al 3 %. Sin embargo, el Ébola tiene realmente una tasa de mortalidad cercana al 80 %, y nos ha parecido interesante estudiar también dicho caso. Es por eso que vamos a usar el modelo considerando una tasa de mortalidad inducida mucho mayor que la que estamos usando: Figura 9: Evolución de la epidemia en 10 días para una tasas de mortalidad inducida del 40 %. Se puede apreciar que en este caso, debido a la alta mortalidad del virus la cantidad de personas infectadas disminuye rápidamente hasta hacerse prácticamente cero, lo cual hace que la dispersión del virus en la población sea prácticamente nula, haciendo que el virus desaparezca casi por completo. Es también destacable que la curva de recuperados se mantiene durante todo el tiempo en valores cercanos al cero. ———— Tras el estudio realizado, también es interesante comentar que el modelo utilizado no proporciona mucha información acerca de lo ocurrido con pasos Práctica 84 27 Curso 22-23 Grado en Física Métodos Numéricos y Simulación pequeños (dos-tres días) o muy seguidos (la variación entre ocho y diez días es inapreciable), pero para pasos como el comentado (60 días) o el de 500 días el modelo proporciona más información sobre a evolución del virus del ébola. El modelo de Runge Kutta utilizado para resolver este modelo epidemiológico sabemos que es de orden cuatro, tras compararlo con un método numérico de orden dos también se puede apreciar como la soluciones convergen hacia el mismo punto, la estabilidad de cada función. Cuando la comparamos con el comando de matlab ode45 nos encontramos con un problema, ya que, esta función, solo cogerá los primeros cincuenta cinco pasos del modelo, entonces, si nosotros queremos calcular para sesenta o más días la solución que proporcionará ode45 es menos precisa de lo que yo consigo con Runge Kutta. Visto el problema con la función ode45 lo que hemos hecho es modificar el paso máximo de esta gracias a otra función llamada cálculo C. De esa forma, podemos calcular el orden del método utilizado con la fórmula: (pon la formula jose ignacio) Obteniendo un orden de convergencia del método de: Referencias [1] (273) El último gran brote de ébola y el contagio masivo mundial | Virus: ébola - YouTube. [2] Página web (13/05/2023) https://www.datasource.ai/es/ data-science-articles/modelos-epidemiologicos-sir-y-seir [3] Universidad Autónoma de Guerrero - Tesis para la maestría en matemáticas aplicadas: Un Modelo Epidémico de Orden Fraccionario para Ébola - Luis Reyes Velázquez. https://www.eafit.edu.co/programas-academicos/posgrado/ maestria-matematicas-aplicadas/investigacion/Paginas/ tesis-realizadas.aspx [4] Noticia https://www.who.int/es/news-room/fact-sheets/detail/ ebola-virus-disease [5] MÉTODOS NUMÉRICOS Y SIMULACIÓN, Área de Análisis Matemático, Departamento de Informática y Análisis Numérico Universidad de Córdoba Tema 3 Resolución numérica de problemas de valores iniciales. Mercedes Marín Beltrán. Práctica 84 28 Curso 22-23 Grado en Física 6. Métodos Numéricos y Simulación Porcentajes Cada componente del grupo ha realizado una proporción del 25 % en cada apartado del trabajo. Práctica 84 29 Curso 22-23
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )