aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COVID-19-SIR.pngbin0 -> 40438 bytes
-rw-r--r--COVID-19.pngbin40198 -> 0 bytes
-rw-r--r--LinearCompartmentModels.mw (renamed from 2020Unit08-CalcIII.LinearCompartmentModels.mw)0
-rw-r--r--NLCModel01.mw (renamed from 2020Unit08-CalcIII.InfectiousDiseaseNLCModel01.mw)0
-rw-r--r--NLCModel02.mw (renamed from 2020Unit08-CalcIII.InfectiousDiseaseNLCModel02.mw)0
-rw-r--r--NLCModel03.mw (renamed from 2020Unit08-CalcIII.InfectiousDiseaseNLCModel03.mw)0
-rw-r--r--SARS-SIR.pngbin0 -> 41624 bytes
-rw-r--r--SARS.pngbin28280 -> 0 bytes
-rw-r--r--TEST.pngbin26285 -> 0 bytes
-rw-r--r--out/COVID-19-SIR-data.csv3
-rw-r--r--out/COVID-19-SIR-prediction.csv78
-rw-r--r--out/COVID-19-data.csv3
-rw-r--r--out/COVID-19-prediction.csv78
-rw-r--r--out/SARS-SIR-data.csv3
-rw-r--r--out/SARS-SIR-prediction.csv77
-rw-r--r--out/SARS-data.csv3
-rw-r--r--out/SARS-prediction.csv77
-rw-r--r--out/TEST-data.csv3
-rw-r--r--out/TEST-prediction.csv4
-rw-r--r--sir_model.cpp4
-rw-r--r--sir_model.exebin0 -> 48143 bytes
-rw-r--r--solver2.py61
22 files changed, 195 insertions, 199 deletions
diff --git a/COVID-19-SIR.png b/COVID-19-SIR.png
new file mode 100644
index 0000000..4497cb1
--- /dev/null
+++ b/COVID-19-SIR.png
Binary files differ
diff --git a/COVID-19.png b/COVID-19.png
deleted file mode 100644
index b57bf1a..0000000
--- a/COVID-19.png
+++ /dev/null
Binary files differ
diff --git a/2020Unit08-CalcIII.LinearCompartmentModels.mw b/LinearCompartmentModels.mw
index 1b482d4..1b482d4 100644
--- a/2020Unit08-CalcIII.LinearCompartmentModels.mw
+++ b/LinearCompartmentModels.mw
diff --git a/2020Unit08-CalcIII.InfectiousDiseaseNLCModel01.mw b/NLCModel01.mw
index b371730..b371730 100644
--- a/2020Unit08-CalcIII.InfectiousDiseaseNLCModel01.mw
+++ b/NLCModel01.mw
diff --git a/2020Unit08-CalcIII.InfectiousDiseaseNLCModel02.mw b/NLCModel02.mw
index ee5d005..ee5d005 100644
--- a/2020Unit08-CalcIII.InfectiousDiseaseNLCModel02.mw
+++ b/NLCModel02.mw
diff --git a/2020Unit08-CalcIII.InfectiousDiseaseNLCModel03.mw b/NLCModel03.mw
index d17ba93..d17ba93 100644
--- a/2020Unit08-CalcIII.InfectiousDiseaseNLCModel03.mw
+++ b/NLCModel03.mw
diff --git a/SARS-SIR.png b/SARS-SIR.png
new file mode 100644
index 0000000..d9332e0
--- /dev/null
+++ b/SARS-SIR.png
Binary files differ
diff --git a/SARS.png b/SARS.png
deleted file mode 100644
index 53eb45c..0000000
--- a/SARS.png
+++ /dev/null
Binary files differ
diff --git a/TEST.png b/TEST.png
deleted file mode 100644
index dab8c0b..0000000
--- a/TEST.png
+++ /dev/null
Binary files differ
diff --git a/out/COVID-19-SIR-data.csv b/out/COVID-19-SIR-data.csv
new file mode 100644
index 0000000..68fc931
--- /dev/null
+++ b/out/COVID-19-SIR-data.csv
@@ -0,0 +1,3 @@
+Beta: 0.11506051868918243
+Gamma: 0.004484787817138545
+R0: 25.65573297570077 \ No newline at end of file
diff --git a/out/COVID-19-SIR-prediction.csv b/out/COVID-19-SIR-prediction.csv
new file mode 100644
index 0000000..dda0000
--- /dev/null
+++ b/out/COVID-19-SIR-prediction.csv
@@ -0,0 +1,78 @@
+,Actual,S,I,R
+1/22/20,0.0033333333333333335,9999.666666666666,0.33333333333333337,0.0
+1/23/20,0.0033333333333333335,9999.626113483311,0.3723057932824626,0.0015807234055033998
+1/24/20,0.006666666666666667,9999.580819471055,0.4158342816934694,0.003346247251000438
+1/25/20,0.006666666666666667,9999.530230573782,0.46445125535619813,0.00531817086165759
+1/26/20,0.016666666666666666,9999.473709826556,0.5187688441820978,0.007521329263086074
+1/27/20,0.016666666666666666,9999.410196574465,0.5798062772339272,0.009997148300881093
+1/28/20,0.016666666666666666,9999.339138930427,0.6480939379280791,0.012767131645821241
+1/29/20,0.016666666666666666,9999.260060733477,0.7240894731817856,0.01584979334159779
+1/30/20,0.016666666666666666,9999.172254217212,0.8084730926218743,0.01927269016575604
+1/31/20,0.023333333333333334,9999.074780009785,0.9021475685847693,0.023072421629695316
+2/1/20,0.02666666666666667,9998.966467133905,1.0062382361164908,0.02729462997866896
+2/2/20,0.02666666666666667,9998.845913006835,1.1220929929726546,0.03199400019178435
+2/3/20,0.03666666666666667,9998.711483440398,1.2512822996184734,0.037234259982002894
+2/4/20,0.03666666666666667,9998.561312640975,1.3955991792287554,0.043088179796139985
+2/5/20,0.03666666666666667,9998.393303209497,1.5570592176879055,0.0496375728148651
+2/6/20,0.03666666666666667,9998.205126141458,1.7379005635899234,0.056973294952701675
+2/7/20,0.03666666666666667,9997.994220826904,1.9405839282384063,0.06519524485802725
+2/8/20,0.03666666666666667,9997.75779505044,2.1677925856465476,0.07441236391307328
+2/9/20,0.03666666666666667,9997.492824991228,2.422432372537136,0.0847426362339254
+2/10/20,0.03666666666666667,9997.196055222987,2.7076316883425555,0.0963130886705231
+2/11/20,0.04,9996.863998713989,3.0267414952047873,0.10925979080666
+2/12/20,0.04,9996.492936827064,3.38333531797541,0.12372785495998372
+2/13/20,0.043333333333333335,9996.078919319601,3.7812092442155962,0.13987143618199585
+2/14/20,0.043333333333333335,9995.617764343546,4.2243819241961145,0.15785373225805216
+2/15/20,0.043333333333333335,9995.1003045259,4.721655585099373,0.17803988899952877
+2/16/20,0.043333333333333335,9994.516837015459,5.282346835600999,0.2008161489413117
+2/17/20,0.043333333333333335,9993.866263436728,5.907518666955111,0.22621789631618436
+2/18/20,0.043333333333333335,9993.14533367619,6.600300535008138,0.2543657888027925
+2/19/20,0.043333333333333335,9992.348486073488,7.366041685509018,0.2854722410034983
+2/20/20,0.043333333333333335,9991.467847421447,8.212311154109193,0.31984142444438063
+2/21/20,0.05,9990.493232966062,9.148897766362614,0.3578692675752351
+2/22/20,0.05,9989.412146406505,10.187810137725744,0.4000434557695737
+2/23/20,0.05,9988.209779895118,11.343276673557556,0.4469434313246251
+2/24/20,0.05,9986.86901403742,12.631745569119527,0.4992403934613348
+2/25/20,0.05,9985.3704178921,14.07188480957564,0.5576972983243645
+2/26/20,0.05,9983.692248971025,15.684582169992398,0.6231688589820928
+2/27/20,0.05333333333333334,9981.810453239235,17.492945215338796,0.6966015454266151
+2/28/20,0.05333333333333334,9979.69866511494,19.522301300486347,0.7790335845737427
+2/29/20,0.08,9977.328207469527,21.800197570209086,0.8715949602630044
+3/1/20,0.1,9974.668091627558,24.356400959183517,0.9755074132576449
+3/2/20,0.17666666666666667,9971.685017366766,27.222898191988705,1.092084441244626
+3/3/20,0.24333333333333335,9968.34337291806,30.43389578310618,1.2227312988346257
+3/4/20,0.3466666666666667,9964.605234965518,34.025820036919995,1.3689449975620385
+3/5/20,0.5733333333333334,9960.430368646397,38.037317047716726,1.5323143058849769
+3/6/20,0.7233333333333334,9955.77622755113,42.50925269968544,1.7145197491852677
+3/7/20,1.12,9950.597953723314,47.4847126669177,1.9173336097684561
+3/8/20,1.5,9944.8448045356,53.01237292907167,2.142822535329084
+3/9/20,1.7133333333333334,9938.42938086884,59.17565842355453,2.3949607076053994
+3/10/20,2.3600000000000003,9931.284416242248,66.03936148704915,2.6762222707021737
+3/11/20,3.6833333333333336,9923.337837581861,73.67299461476044,2.9891678033797313
+3/12/20,5.19,9914.501858677362,82.16105475639304,3.3370865662455413
+3/13/20,7.156666666666667,9904.672980182095,91.60302331615122,3.7239965017542147
+3/14/20,9.523333333333333,9893.731989613054,102.11336615273899,4.1546442342075025
+3/15/20,9.726666666666667,9881.543961350886,113.82153357936006,4.634505069754301
+3/16/20,14.356666666666667,9867.958256639891,126.87196036371769,5.169782996390647
+3/17/20,20.32,9852.808523588024,141.42406572801508,5.767410683959723
+3/18/20,29.576666666666668,9835.912697166894,157.65225334895476,6.435049484151843
+3/19/20,46.980000000000004,9817.072999211756,175.7459113577394,7.181089430504479
+3/20/20,64.67666666666668,9796.075938421527,195.90941234007096,8.014649238402235
+3/21/20,85.75,9772.692310358772,218.3621133361513,8.94557630507686
+3/22/20,112.11333333333334,9746.677197449711,243.33835584068188,9.984446709607242
+3/23/20,145.54333333333335,9717.769968984217,271.0874658028638,11.14256521291942
+3/24/20,179.12,9685.694281115815,301.87375362639807,12.431965257786567
+3/25/20,219.26000000000002,9650.158076861686,335.9765141694853,13.865408968829001
+3/26/20,279.4533333333334,9610.856608434478,373.6868457962786,15.456545769241968
+3/27/20,338.8566666666667,9567.478576225396,415.2978095557358,17.223614218867255
+3/28/20,404.9266666666667,9519.55452671549,461.25900332866496,19.186469955843926
+3/29/20,469.6966666666667,9466.575218355096,512.0586800277034,21.366101617200858
+3/30/20,539.4566666666667,9408.030818560183,568.1836003605466,23.78558107927107
+3/31/20,627.24,9343.41090371236,630.1190328299489,26.470063457691705
+4/1/20,711.2066666666667,9272.204459158873,698.3487537337221,29.44678710740408
+4/2/20,812.0533333333334,9193.899879212608,773.3550471647377,32.745073622653635
+4/3/20,918.6066666666667,9107.984967152086,855.6187050109245,36.39632783698995
+4/4/20,1029.4833333333333,9013.946935221464,945.6190269552703,40.434037823266756
+4/5/20,1123.5500000000002,8911.272404630537,1043.8338204758206,44.89377489364194
+4/6/20,1222.2,8799.447405554742,1150.7394008456806,49.8131935995775
+4/7/20,1320.7366666666667,8677.957377135148,1266.8105911330124,55.23203173183961
diff --git a/out/COVID-19-data.csv b/out/COVID-19-data.csv
deleted file mode 100644
index 7809e69..0000000
--- a/out/COVID-19-data.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-Beta: 0.12123601582761864
-Gamma: 0.004788532110372095
-R0: 25.317991616891955 \ No newline at end of file
diff --git a/out/COVID-19-prediction.csv b/out/COVID-19-prediction.csv
deleted file mode 100644
index adec705..0000000
--- a/out/COVID-19-prediction.csv
+++ /dev/null
@@ -1,78 +0,0 @@
-,Actual,S,I,R
-1/22/20,0.01529051987767584,49999.0,1.0,0.0
-1/23/20,0.01529051987767584,49998.87142424206,1.1234972154720178,0.005078542461735381
-1/24/20,0.03058103975535168,49998.726971267446,1.2622445067142218,0.010784225844925973
-1/25/20,0.03058103975535168,49998.564682877775,1.418122720321673,0.017194401905434777
-1/26/20,0.0764525993883792,49998.38234997699,1.5932536885634114,0.024396334439772325
-1/27/20,0.0764525993883792,49998.1761616234,1.7912976312291053,0.032540745365268506
-1/28/20,0.0764525993883792,49997.94267086507,2.0155651686230516,0.04176396630732312
-1/29/20,0.0764525993883792,49997.68103501622,2.2668658997885043,0.052099083983799914
-1/30/20,0.0764525993883792,49997.389420767366,2.5469608746381214,0.06361835799887736
-1/31/20,0.10703363914373089,49997.064956030794,2.858608840222778,0.07643512898078467
-2/1/20,0.12232415902140673,49996.70372994068,3.2055662407315637,0.09070381858180188
-2/2/20,0.12232415902140673,49996.30079285303,3.592587217491785,0.10661992947825968
-2/3/20,0.16819571865443425,49995.85015634566,4.025423608968964,0.12442004537053958
-2/4/20,0.16819571865443425,49995.344793218246,4.510824950766836,0.14438183098307383
-2/5/20,0.16819571865443425,49994.77663749231,5.05653847562736,0.16682403206434543
-2/6/20,0.16819571865443425,49994.13658441118,5.671309113430702,0.1921064753868881
-2/7/20,0.16819571865443425,49993.41449044005,6.36487949119525,0.2206300687472865
-2/8/20,0.16819571865443425,49992.59917326595,7.1479899330776036,0.2528368009661757
-2/9/20,0.16819571865443425,49991.67841179774,8.032378460372584,0.2892097418882419
-2/10/20,0.16819571865443425,49990.6389461661,9.03078079151322,0.3302730423822217
-2/11/20,0.1834862385321101,49989.46647772359,10.156930342070767,0.3765919343409029
-2/12/20,0.1834862385321101,49988.145669044556,11.425558224754685,0.4287727306811233
-2/13/20,0.19877675840978593,49986.66014392524,12.85239324941266,0.4874628253437725
-2/14/20,0.19877675840978593,49984.99248738367,14.454161923030584,0.5533506932937899
-2/15/20,0.19877675840978593,49983.12424565975,16.248588449732576,0.6271658905201664
-2/16/20,0.19877675840978593,49981.02889523054,18.261139779188554,0.70996499027104
-2/17/20,0.19877675840978593,49978.651306317464,20.54472852896415,0.8039651535683541
-2/18/20,0.19877675840978593,49975.97895646455,23.11139937053732,0.909644164911142
-2/19/20,0.19877675840978593,49972.9967703992,25.97565285443824,1.027576746355153
-2/20/20,0.19877675840978593,49969.678659363395,29.162561937280955,1.1587786993212803
-2/21/20,0.2293577981651376,49965.98752111364,32.70777198176339,1.3047069045955584
-2/22/20,0.2293577981651376,49961.875239921,36.65750075666734,1.4672593223291648
-2/23/20,0.2293577981651376,49957.2826865711,41.068538436858454,1.6487749920384194
-2/24/20,0.2293577981651376,49952.13971836411,46.0082476032863,1.8520340326047855
-2/25/20,0.2293577981651376,49946.365179114735,51.55456324298426,2.0802576422748684
-2/26/20,0.2293577981651376,49939.86689915227,57.795992749069626,2.337108098660416
-2/27/20,0.24464831804281345,49932.54169532051,64.83161592074356,2.626688758738319
-2/28/20,0.24464831804281345,49924.275370977855,72.7710849632911,2.95354405885061
-2/29/20,0.3669724770642202,49914.94271599721,81.73462448808112,3.322659514704465
-3/1/20,0.4587155963302752,49904.40750676606,91.85303151256642,3.739461721372202
-3/2/20,0.8103975535168195,49892.522506186426,103.26767546028361,4.209818353291284
-3/3/20,1.1162079510703364,49879.12946367488,116.13049816085325,4.740038164264311
-3/4/20,1.5902140672782874,49864.05911516256,130.6040138499797,5.336870987459033
-3/5/20,2.6299694189602447,49847.13118309514,146.86130916945123,6.007507735408336
-3/6/20,3.318042813455657,49828.154376432845,165.08604316714002,6.759580400010251
-3/7/20,5.137614678899083,49806.92639065047,185.472447297002,7.601162052527955
-3/8/20,6.8807339449541285,49783.15387362768,208.30131583295304,8.544810539364274
-3/9/20,7.859327217125382,49756.46216012896,233.93144509123292,9.606394779802377
-3/10/20,10.825688073394495,49726.5796666417,262.62464902953786,10.79568432875744
-3/11/20,16.896024464831804,49693.16121368366,294.7130775011809,12.125708815156308
-3/12/20,23.807339449541285,49655.78361959187,330.60339369236084,13.612986715763734
-3/13/20,32.82874617737003,49613.94570052266,370.7767741221621,15.277525355182393
-3/14/20,43.68501529051988,49567.068270451586,415.7889086425552,17.14282090585288
-3/15/20,44.6177370030581,49514.49414117355,466.2700004383959,19.2358583880537
-3/16/20,65.85626911314985,49455.48812230267,522.9247660274261,21.587111669901272
-3/17/20,93.21100917431193,49389.237021272376,586.5324352602737,24.23054346734994
-3/18/20,135.67278287461772,49314.84964333535,657.9467513204519,27.20360534419196
-3/19/20,215.5045871559633,49231.35679156358,738.0959707243596,30.5472377120575
-3/20/20,296.6819571865443,49137.7112668483,827.9828633212821,34.30586983041465
-3/21/20,393.348623853211,49032.787867900035,928.68471229339,38.52741980656942
-3/22/20,514.2813455657492,48915.38339124859,1041.3533141557398,43.26329459566571
-3/23/20,667.6299694189603,48784.216631243034,1167.2149787562737,48.5683900006854
-3/24/20,821.651376146789,48637.92838005173,1307.5705292758196,54.5010906724482
-3/25/20,1005.7798165137615,48475.23815719861,1463.632752792264,61.12909000912159
-3/26/20,1281.8960244648317,48294.55190123027,1636.9083208388115,68.53977793091411
-3/27/20,1554.388379204893,48093.39034634198,1829.7869013768861,76.82275228112964
-3/28/20,1857.4617737003057,47869.19051439562,2044.730256305486,86.07922929888963
-3/29/20,2154.571865443425,47619.33475639337,2284.2426197884333,96.4226238181884
-3/30/20,2474.571865443425,47341.150752477726,2550.8706982543795,107.97854926789326
-3/31/20,2877.2477064220184,47031.91151193145,2847.2036703968,120.88481767174422
-4/1/20,3262.4159021406726,46688.835373177644,3175.8731871739956,135.29143964835436
-4/2/20,3725.0152905198775,46309.086003779696,3539.553371809094,151.36062441120953
-4/3/20,4213.792048929664,45889.772400441274,3940.960819790049,169.26677976866858
-4/4/20,4722.400611620795,45427.94888900639,4382.85459886964,189.1965121239631
-4/5/20,5153.899082568807,44920.61512445932,4868.036249065472,211.3486264751976
-4/6/20,5606.422018348624,44364.71609092467,5399.349782659975,235.93412641534957
-4/7/20,6058.4250764526,43757.14210166731,5979.681684200406,263.1762141322693
diff --git a/out/SARS-SIR-data.csv b/out/SARS-SIR-data.csv
new file mode 100644
index 0000000..b8e7f28
--- /dev/null
+++ b/out/SARS-SIR-data.csv
@@ -0,0 +1,3 @@
+Beta: 0.031662971068960946
+Gamma: 0.018519768809938723
+R0: 1.7096850070811285 \ No newline at end of file
diff --git a/out/SARS-SIR-prediction.csv b/out/SARS-SIR-prediction.csv
new file mode 100644
index 0000000..9a3a4c5
--- /dev/null
+++ b/out/SARS-SIR-prediction.csv
@@ -0,0 +1,77 @@
+,Actual,S,I,R
+4/10/03,499.0,9500.0,500.0,0.0
+4/11/03,529.5,9484.884979595565,505.80148109959003,9.313539304844733
+4/12/03,554.0,9469.619417390539,511.64566678773895,18.73491582172085
+4/14/03,595.0,9454.202845099702,517.5322376669819,28.26491723331429
+4/15/03,616.0,9438.634815392412,523.4608571171718,37.90432749041551
+4/16/03,634.0,9422.91490886804,529.4311682856298,47.65392284632816
+4/17/03,648.5,9407.04273428322,535.4427939878531,57.51447172892478
+4/18/03,679.0,9391.017928551839,541.4953367075137,67.48673474064691
+4/19/03,679.0,9374.840156745033,547.5883785964601,77.57146465850494
+4/21/03,701.0,9358.509112091206,553.7214814747153,87.76940643407822
+4/22/03,717.0,9342.024515976005,559.894186830479,98.08129719351507
+4/23/03,729.0,9325.38611794234,566.1060158201255,108.5078662375327
+4/24/03,744.0,9308.593695690377,572.3564692682052,119.04983504141725
+4/25/03,755.0,9291.647076432952,578.6450722781254,129.70785128892103
+4/26/03,763.5,9274.546254563056,584.9716358776624,140.48210955928025
+4/28/03,778.5,9257.291082520527,591.3356116538148,151.37330582565713
+4/29/03,786.0,9239.88140918478,597.736342445242,162.38224836997682
+4/30/03,794.5,9222.31712462584,604.173152454918,173.50972291924018
+5/1/03,800.0,9204.598160104344,610.6453472501305,184.75649264552393
+5/2/03,805.5,9186.724488071535,617.1522137624829,196.1232981659804
+5/3/03,810.5,9168.696122169269,623.6930202878924,207.61085754283772
+5/5/03,818.5,9150.513117230008,630.2670164865909,219.21986628339982
+5/6/03,823.0,9132.175569276827,636.8734333831252,230.95099734004629
+5/7/03,827.0,9113.68361552341,643.5114833663562,242.80490111023255
+5/8/03,830.5,9095.03743437405,650.1803601894597,254.78220543648973
+5/9/03,833.5,9076.237245423648,656.8792389699258,266.8835156064247
+5/10/03,837.0,9057.283309457718,663.6072761895597,279.10941435272
+5/12/03,841.5,9038.175928452385,670.3636096944803,291.4604618531342
+5/13/03,844.5,9018.915445574376,677.1473586951217,303.9371957305013
+5/14/03,849.0,8999.502245181035,683.9576237662324,316.5401310527311
+5/15/03,851.5,8979.936752820313,690.7934868468756,329.26976033280937
+5/16/03,853.0,8960.219435230772,697.6540112404288,342.1265535287975
+5/17/03,855.0,8940.350800341583,704.5382416145842,355.11095804383234
+5/19/03,857.0,8920.331397272523,711.4452040013485,368.223398726127
+5/20/03,859.0,8900.161816333986,718.3739057970432,381.46427786896993
+5/21/03,859.5,8879.84268902697,725.3233357623042,394.8339752107257
+5/22/03,861.0,8859.374688043083,732.2924640220818,408.3328479348343
+5/23/03,862.0,8838.758527264547,739.2802420656409,421.96123066981147
+5/24/03,862.0,8817.994961764189,746.2856027465614,435.719435489249
+5/26/03,863.0,8797.084787805446,753.3074602827372,449.60775191181426
+5/27/03,864.0,8776.028842842372,760.3447102563772,463.62644690125006
+5/28/03,865.0,8754.828005519617,767.3962296140044,477.77576486637554
+5/29/03,866.0,8733.483195672457,774.4608766664569,492.05592766108515
+5/30/03,868.0,8711.995374326762,781.5374910888871,506.46713458434937
+5/31/03,869.5,8690.365543699023,788.6248939207617,521.0095623802142
+6/2/03,873.0,8668.594747196334,795.7218875658625,535.6833652378015
+6/3/03,873.5,8646.684069416404,802.8272557922855,550.4886747913089
+6/4/03,874.0,8624.634636147548,809.9397637324413,565.4256001200094
+6/5/03,874.0,8602.447614368692,817.0581578830551,580.4942277482527
+6/6/03,875.0,8580.12421224937,824.1811661051668,595.6946216454631
+6/9/03,876.5,8557.665679149726,831.3074976241306,611.0268232261413
+6/10/03,877.0,8535.073305620519,838.4358430296157,626.490851349864
+6/11/03,877.0,8512.34842340311,845.5648742756055,642.0867023212829
+6/12/03,877.5,8489.492405429475,852.6932446803977,657.8143498901256
+6/13/03,877.5,8466.506665822197,859.8195889266052,673.6737452511964
+6/16/03,877.5,8443.392659894469,866.9425230611552,689.664817044374
+6/17/03,877.5,8420.151884150095,874.0606444952892,705.7874713546134
+6/18/03,877.5,8396.78587628349,881.1725320045638,722.0415917119461
+6/19/03,877.5,8373.296215179671,888.2767457288496,738.4270390914784
+6/20/03,877.5,8349.684520914274,895.3718271723321,754.943651913392
+6/23/03,877.5,8325.952454753542,902.4562992035115,771.5912460429457
+6/24/03,877.5,8302.101719154323,909.528666055202,788.3696147904728
+6/25/03,877.5,8278.134057764082,916.587413324533,805.2785289113833
+6/26/03,877.5,8254.051255420887,923.6310079729482,822.3177366061623
+6/27/03,877.5,8229.855138153422,930.6578983262057,839.4869635203708
+6/30/03,877.5,8205.547573180975,937.6665140743783,856.7859127446457
+7/1/03,877.5,8181.130468913446,944.6552662718534,874.214264814699
+7/2/03,877.5,8156.605774951346,951.622547337333,891.7716777113201
+7/3/03,877.5,8131.9754820857925,958.5667310538335,909.4577868603722
+7/4/03,877.5,8107.241622298517,965.4861725686861,927.2722051327953
+7/7/03,877.5,8082.406268761857,972.3792083935365,945.2145228446052
+7/8/03,877.5,8057.47153583876,979.2441564043446,963.2843077568929
+7/9/03,877.5,8032.439579082788,986.0793158413854,981.4811050758253
+7/10/03,877.5,8007.312595238105,992.8829673092482,999.8044374526455
+7/11/03,877.5,7982.09282223949,999.6533727768367,1018.2538049836719
+8/7/03,877.5,7956.78253921233,1006.3887755773695,1036.8286852102988
diff --git a/out/SARS-data.csv b/out/SARS-data.csv
deleted file mode 100644
index 65b5f2f..0000000
--- a/out/SARS-data.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-Beta: 1e-08
-Gamma: 0.0061248427719888315
-R0: 1.6326949723074842e-06 \ No newline at end of file
diff --git a/out/SARS-prediction.csv b/out/SARS-prediction.csv
deleted file mode 100644
index f677152..0000000
--- a/out/SARS-prediction.csv
+++ /dev/null
@@ -1,77 +0,0 @@
-,Actual,S,I,R
-4/10/03,0.1566473081148956,9999.0,1.0,0.0
-4/11/03,0.16622194318003453,9998.999999990032,0.9938938857782499,0.00610612419019138
-4/12/03,0.17391304347826086,9998.999999980124,0.9878250561849686,0.01217496369104556
-4/14/03,0.18678386438549677,9998.999999970278,0.9817932835629529,0.018206746160137382
-4/15/03,0.1933762360696908,9998.99999996049,0.9757983416361868,0.02420169787385227
-4/16/03,0.1990268403704285,9998.999999950764,0.9698400055077305,0.03016004372949699
-4/17/03,0.20357871605713387,9998.999999941096,0.9639180446502709,0.036082014254761215
-4/18/03,0.2131533511222728,9998.999999931486,0.958032229361117,0.0419678391527109
-4/19/03,0.2131533511222728,9998.999999921936,0.9521823415639332,0.04781773650003748
-4/21/03,0.2200596452676189,9998.999999912445,0.9463681643524197,0.05363192320339512
-4/22/03,0.22508240464605242,9998.99999990301,0.9405894819398969,0.05941061504981562
-4/23/03,0.22884947417987755,9998.999999893635,0.9348460796593057,0.0651540267067084
-4/24/03,0.233558311097159,9998.999999884314,0.9291377439632077,0.07086237172186058
-4/25/03,0.23701145816983205,9998.999999875054,0.9234642624237851,0.07653586252343685
-4/26/03,0.23967979908962483,9998.999999865848,0.9178254237328403,0.08217471041997958
-4/28/03,0.24438863600690627,9998.999999856698,0.9122210177017966,0.08777912560040879
-4/29/03,0.246743054465547,9998.999999847605,0.9066508352616974,0.09334931713402214
-4/30/03,0.2494113953853398,9998.999999838567,0.9011146684632072,0.09888549297049494
-5/1/03,0.25113796892167634,9998.999999829583,0.8956123104766106,0.10438785993988008
-5/2/03,0.2528645424580129,9998.999999820655,0.8901435555918127,0.10985662375260818
-5/3/03,0.25443415476377335,9998.999999811782,0.8847081992183395,0.11529198899948748
-5/5/03,0.2569455344529901,9998.999999802963,0.8793060378853373,0.1206941591517038
-5/6/03,0.2583581855281745,9998.999999794198,0.8739368692415727,0.1260633365608207
-5/7/03,0.2596138753727829,9998.999999785487,0.8686004920554333,0.1313997224587793
-5/8/03,0.26071260398681523,9998.999999776828,0.8632967062149268,0.1367035169578984
-5/9/03,0.26165437137027153,9998.99999976822,0.8580253127276819,0.14197491905087448
-5/10/03,0.26275309998430385,9998.999999759668,0.8527861137209471,0.14721412661078156
-5/12/03,0.2641657510594883,9998.999999751168,0.8475789124415923,0.1524213363910714
-5/13/03,0.26510751844294456,9998.999999742719,0.8424035132561074,0.1575967440255734
-5/14/03,0.266520169518129,9998.999999734322,0.8372597216506029,0.16274054402849447
-5/15/03,0.26730497567100925,9998.999999725975,0.8321473442308099,0.1678529297944193
-5/16/03,0.2677758593627374,9998.99999971768,0.8270661887220798,0.17293409359831027
-5/17/03,0.26840370428504157,9998.999999709435,0.8220160639693852,0.17798422659550728
-5/19/03,0.2690315492073458,9998.999999701242,0.8169967799373182,0.18300351882172788
-5/20/03,0.26965939412964995,9998.999999693096,0.8120081477100923,0.18799215919306728
-5/21/03,0.269816355360226,9998.999999685002,0.8070499794915413,0.1929503355059984
-5/22/03,0.2702872390519542,9998.999999676957,0.8021220886051191,0.1978782344373717
-5/23/03,0.27060116151310626,9998.999999668962,0.7972242894939008,0.20277604154441542
-5/24/03,0.27060116151310626,9998.999999661015,0.7923563977205816,0.20764394126473523
-5/26/03,0.27091508397425834,9998.999999653117,0.7875182299674773,0.21248211691631466
-5/27/03,0.2712290064354104,9998.999999645266,0.7827096040365243,0.21729075069751472
-5/28/03,0.2715429288965625,9998.999999637463,0.7779303388492795,0.22207002368707426
-5/29/03,0.27185685135771465,9998.999999629708,0.7731802544469202,0.22682011584410958
-5/30/03,0.2724846962800188,9998.999999622001,0.7684591719902444,0.23154120600811465
-5/31/03,0.27295557997174696,9998.999999614342,0.7637669137596708,0.23623347189896113
-6/2/03,0.2740543085857793,9998.999999606727,0.7591033031552382,0.24089709011689836
-6/3/03,0.27421126981635535,9998.99999959916,0.754468164696606,0.24553223614255326
-6/4/03,0.27436823104693137,9998.99999959164,0.7498613240230546,0.2501390843369304
-6/5/03,0.27436823104693137,9998.999999584164,0.7452826078934843,0.2547178079414121
-6/6/03,0.2746821535080835,9998.999999576736,0.7407318441864165,0.25926857907775797
-6/9/03,0.27515303719981166,9998.999999569352,0.7362088618999928,0.2637915687481058
-6/10/03,0.27530999843038767,9998.999999562013,0.7317134911519751,0.26828694683497056
-6/11/03,0.27530999843038767,9998.999999554719,0.7272455646461425,0.27275488063484693
-6/12/03,0.27546695966096374,9998.99999954747,0.7228049183018899,0.27719553422860754
-6/13/03,0.27546695966096374,9998.999999540265,0.7183913861666602,0.28160907356908
-6/16/03,0.27546695966096374,9998.999999533102,0.7140048031056461,0.2859956637913417
-6/17/03,0.27546695966096374,9998.999999525984,0.7096450049155073,0.2903554690990009
-6/18/03,0.27546695966096374,9998.999999518912,0.7053118283243721,0.2946886527641958
-6/19/03,0.27546695966096374,9998.999999511881,0.7010051109918364,0.2989953771275956
-6/20/03,0.27546695966096374,9998.999999504893,0.6967246915089644,0.30327580359839945
-6/23/03,0.27546695966096374,9998.999999497948,0.6924704093982882,0.3075300926543374
-6/24/03,0.27546695966096374,9998.999999491043,0.6882421051138082,0.3117584038416696
-6/25/03,0.27546695966096374,9998.999999484184,0.6840396200409922,0.3159608957751869
-6/26/03,0.27546695966096374,9998.999999477364,0.6798627964967765,0.32013772613821057
-6/27/03,0.27546695966096374,9998.999999470589,0.6757114777295653,0.32428905168259226
-6/30/03,0.27546695966096374,9998.999999463853,0.671585507919231,0.32841502822871405
-7/1/03,0.27546695966096374,9998.999999457157,0.6674847321771137,0.3325158106654888
-7/2/03,0.27546695966096374,9998.999999450503,0.6634089965460216,0.3365915529503593
-7/3/03,0.27546695966096374,9998.999999443891,0.6593581480002312,0.34064240810929924
-7/4/03,0.27546695966096374,9998.999999437317,0.6553320344454865,0.34466852823681265
-7/7/03,0.27546695966096374,9998.999999430785,0.651330504719,0.3486700644959339
-7/8/03,0.27546695966096374,9998.999999424292,0.647353408589452,0.35264716711822797
-7/9/03,0.27546695966096374,9998.99999941784,0.643400596756991,0.35659998540379023
-7/10/03,0.27546695966096374,9998.999999411426,0.6394719208532331,0.36052866772124653
-7/11/03,0.27546695966096374,9998.99999940505,0.635567233441263,0.3644333615077531
-8/7/03,0.27546695966096374,9998.999999398715,0.6316863880156327,0.36831421326899677
diff --git a/out/TEST-data.csv b/out/TEST-data.csv
deleted file mode 100644
index bc98828..0000000
--- a/out/TEST-data.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-Beta: 0.4000000000000001
-Gamma: 1.0000000000049032e-08
-R0: 39999999.99980388 \ No newline at end of file
diff --git a/out/TEST-prediction.csv b/out/TEST-prediction.csv
deleted file mode 100644
index dd28231..0000000
--- a/out/TEST-prediction.csv
+++ /dev/null
@@ -1,4 +0,0 @@
-,Actual,S,I,R
-1/22/20,1,13499.000074068588,0.9999259314124879,0.0
-1/23/20,2,13498.508297406446,1.4917025812581148,1.2295557754239627e-08
-1/24/20,3,13497.774897248144,2.225102721222464,3.06330734100344e-08
diff --git a/sir_model.cpp b/sir_model.cpp
index f054c36..9525347 100644
--- a/sir_model.cpp
+++ b/sir_model.cpp
@@ -6,12 +6,12 @@ using namespace std;
const int DAYS = 200, ITER = 10000;
// Population size
-const int POP = 2000;
+const int POP = 10000;
// Model parameters
// Beta = infection rate
// Gamma = removal rate
-const double beta = 0.42, gamma = 0.25;
+const double beta = 0.3944, gamma = 0.02664;
// Compartments
double S[DAYS + 1], I[DAYS + 1], R[DAYS + 1];
diff --git a/sir_model.exe b/sir_model.exe
new file mode 100644
index 0000000..9acbc84
--- /dev/null
+++ b/sir_model.exe
Binary files differ
diff --git a/solver2.py b/solver2.py
index 906673c..a90dfe1 100644
--- a/solver2.py
+++ b/solver2.py
@@ -1,3 +1,4 @@
+#!/usr/bin/python3
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
@@ -20,17 +21,19 @@ parser.add_argument('--end', '-e', dest = 'end', default = None, help = 'the dat
parser.add_argument('--incubation', '-i', dest = 'incubation_period', default = None, help = 'the incubation period of the disease (only applicable if using SIRE model; ignored otherwise); none by default')
parser.add_argument('--predict', '-p', dest = 'prediction_range', default = None, help = 'the number of days to predict the course of the disease (defaults to None, meaning the model will not predict beyond the given data)')
parser.add_argument('--country', '-c', dest = 'country', default = 'US', help = 'the country that is being modeled (defaults to US)')
-parser.add_argument('--population', '-P', dest = 'population', default = '10000', help = 'the population of the model (defaults to 10000)')
+parser.add_argument('--popcountry', '-pc', dest = 'popcountry', default = '3328200000', help = 'the population of the country (defaults to US population)')
+parser.add_argument('--popmodel', '-pm', dest = 'popmodel', default = '10000', help = 'the population of the model (defaults to 10000)')
+parser.add_argument('--initial', '-I', dest = 'initial', default = '1', help = 'initial infected people (defaults to 1')
args = parser.parse_args()
-S_0 = (int(args.population) - 1) / int(args.population)
-I_0 = 1 / int(args.population)
+# Running a model for a million population is quite hard, so here we've reduced the population and modified the actual stats to match
+correction_factor = int(args.popmodel) / int(args.popcountry)
+
+S_0 = (int(args.popcountry) - int(args.initial)) / int(args.popcountry)
+I_0 = int(args.initial) / int(args.popcountry)
R_0 = 0
E_0 = 0
-# Running a model for a million population is quite hard, so here we've reduced the population and modified the actual stats to match
-correction_factor = int(args.population) / 3270000 if args.country == 'US' else int(args.population) / 63710000 if args.country == 'Hong_Kong' else 1
-
class Learner(object):
def __init__(self, country):
self.country = country
@@ -155,9 +158,9 @@ class Learner(object):
beta, gamma = optimal.x
print(f'Beta: {beta}, Gamma: {gamma}, R0: {beta/gamma}')
new_index, extended_actual, prediction = self.predict(confirmed_data, beta = beta, gamma = gamma)
- print(f'Predicted I: {prediction.y[1][-1] * int(args.population)}, Actual I: {extended_actual[-1] * correction_factor}')
+ print(f'Predicted I: {prediction.y[1][-1] * int(args.popmodel)}, Actual I: {extended_actual[-1] * correction_factor}')
df = compose_df(prediction, extended_actual, correction_factor, new_index)
- with open(f'out/{args.disease}-data.csv', 'w+') as file:
+ with open(f'out/{args.disease}-{args.mode}-data.csv', 'w+') as file:
file.write(f'Beta: {beta}\nGamma: {gamma}\nR0: {beta/gamma}')
elif args.mode == 'SIR':
optimal = minimize(
@@ -170,9 +173,9 @@ class Learner(object):
beta, gamma = optimal.x
print(f'Beta: {beta}, Gamma: {gamma}, R0: {beta/gamma}')
new_index, extended_actual, prediction = self.predict(confirmed_data, beta = beta, gamma = gamma)
- print(f'Predicted I: {prediction.y[1][-1] * int(args.population)}, Actual I: {extended_actual[-1] * correction_factor}')
+ print(f'Predicted I: {prediction.y[1][-1] * int(args.popmodel)}, Actual I: {extended_actual[-1] * correction_factor}')
df = compose_df(prediction, extended_actual, correction_factor, new_index)
- with open(f'out/{args.disease}-data.csv', 'w+') as file:
+ with open(f'out/{args.disease}-{args.mode}-data.csv', 'w+') as file:
file.write(f'Beta: {beta}\nGamma: {gamma}\nR0: {beta/gamma}')
elif args.mode == 'ESIR':
optimal = minimize(
@@ -185,9 +188,9 @@ class Learner(object):
beta, gamma, mu = optimal.x
print(f'Beta: {beta}, Gamma: {gamma}, Mu: {mu} R0: {beta/(gamma + mu)}')
new_index, extended_actual, prediction = self.predict(confirmed_data, beta = beta, gamma = gamma, mu = mu)
- print(f'Predicted I: {prediction.y[1][-1] * int(args.population)}, Actual I: {extended_actual[-1] * correction_factor}')
+ print(f'Predicted I: {prediction.y[1][-1] * int(args.popmodel)}, Actual I: {extended_actual[-1] * correction_factor}')
df = compose_df(prediction, extended_actual, correction_factor, new_index)
- with open(f'out/{args.disease}-data.csv', 'w+') as file:
+ with open(f'out/{args.disease}-{args.mode}-data.csv', 'w+') as file:
file.write(f'Beta: {beta}\nGamma: {gamma}\nMu: {mu}\nR0: {beta/(gamma + mu)}')
elif args.mode == 'SEIR':
exposed_data = self.load_exposed(self.country)
@@ -202,15 +205,15 @@ class Learner(object):
beta, gamma, mu, sigma = optimal.x
print(f'Beta: {beta}, Gamma: {gamma}, Mu: {mu}, Sigma: {sigma} R0: {(beta * sigma)/((mu + gamma) * (mu + sigma))}')
new_index, extended_actual, prediction = self.predict(confirmed_data, beta = beta, gamma = gamma, mu = mu)
- print(f'Predicted I: {prediction.y[1][-1] * int(args.population)}, Actual I: {extended_actual[-1] * correction_factor}')
+ print(f'Predicted I: {prediction.y[1][-1] * int(args.popmodel)}, Actual I: {extended_actual[-1] * correction_factor}')
df = compose_df(prediction, extended_actual, correction_factor, new_index)
- with open(f'out/{args.disease}-data.csv', 'w+') as file:
+ with open(f'out/{args.disease}-{args.mode}-data.csv', 'w+') as file:
file.write(f'Beta: {beta}\nGamma: {gamma}\nMu: {mu}\nSigma: {sigma}\nR0: {(beta * sigma)/((mu + gamma) * (mu + sigma))}')
fig, ax = plt.subplots(figsize=(15, 10))
ax.set_title(f'{args.disease} cases over time ({args.mode} Model)')
df.plot(ax=ax)
- fig.savefig(f"{args.out if args.out != None else args.disease}.png")
- df.to_csv(f'out/{args.disease}-prediction.csv')
+ fig.savefig(f"{args.out if args.out != None else args.disease}-{args.mode}.png")
+ df.to_csv(f'out/{args.disease}-{args.mode}-prediction.csv')
def filter_zeroes(arr):
out = np.array(arr)
@@ -226,13 +229,13 @@ def compose_df(prediction, actual, correction_factor, index):
if data == 'Actual':
df_dict['Actual'] = filter_zeroes(actual * correction_factor)
elif data == 'S':
- df_dict['S'] = prediction.y[0] * int(args.population)
+ df_dict['S'] = prediction.y[0] * int(args.popmodel)
elif data == 'I':
- df_dict['I'] = prediction.y[1] * int(args.population)
+ df_dict['I'] = prediction.y[1] * int(args.popmodel)
elif data == 'R':
- df_dict['R'] = prediction.y[2] * int(args.population)
+ df_dict['R'] = prediction.y[2] * int(args.popmodel)
elif data == 'E':
- df_dict['E'] = prediction.y[3] * int(args.population)
+ df_dict['E'] = prediction.y[3] * int(args.popmodel)
return pd.DataFrame(df_dict, index=index)
@@ -247,8 +250,8 @@ def loss_linear(point, confirmed, recovered):
R = y[2]
return [-beta * S, beta * S - gamma * I, gamma * I]
solution = solve_ivp(model, [0, size], [S_0,I_0,R_0], t_eval=np.arange(0, size, 1), vectorized=True)
- sol_inf = np.sqrt(np.mean((solution.y[1] - (confirmed.values.flatten() * correction_factor/int(args.population)))**2))
- sol_rec = np.sqrt(np.mean((solution.y[2] - (recovered.values * correction_factor/int(args.population)))**2))
+ sol_inf = np.sqrt(np.mean((solution.y[1] - (confirmed.values.flatten() * correction_factor/int(args.popmodel)))**2))
+ sol_rec = np.sqrt(np.mean((solution.y[2] - (recovered.values * correction_factor/int(args.popmodel)))**2))
return sol_inf * 0.5 + sol_rec * 0.5
def loss_sir(point, confirmed, recovered):
@@ -260,8 +263,8 @@ def loss_sir(point, confirmed, recovered):
R = y[2]
return [-beta * S * I, beta * S * I - gamma * I, gamma * I]
solution = solve_ivp(model, [0, size], [S_0,I_0,R_0], t_eval=np.arange(0, size, 1), vectorized=True)
- sol_inf = np.sqrt(np.mean((solution.y[1] - (confirmed.values.flatten() * correction_factor/int(args.population)))**2))
- sol_rec = np.sqrt(np.mean((solution.y[2] - (recovered.values * correction_factor/int(args.population)))**2))
+ sol_inf = np.sqrt(np.mean((solution.y[1] - (confirmed.values.flatten() * correction_factor/int(args.popmodel)))**2))
+ sol_rec = np.sqrt(np.mean((solution.y[2] - (recovered.values * correction_factor/int(args.popmodel)))**2))
return sol_inf * 0.5 + sol_rec * 0.5
def loss_esir(point, confirmed, recovered):
@@ -273,8 +276,8 @@ def loss_esir(point, confirmed, recovered):
R = y[2]
return [mu - beta * S * I - mu * S, beta * S * I - gamma * I - mu * I, gamma * I - mu * R]
solution = solve_ivp(model, [0, size], [S_0,I_0,R_0], t_eval=np.arange(0, size, 1), vectorized=True)
- sol_inf = np.sqrt(np.mean((solution.y[1] - (confirmed.values.flatten() * correction_factor/int(args.population)))**2))
- sol_rec = np.sqrt(np.mean((solution.y[2] - (recovered.values * correction_factor/int(args.population)))**2))
+ sol_inf = np.sqrt(np.mean((solution.y[1] - (confirmed.values.flatten() * correction_factor/int(args.popmodel)))**2))
+ sol_rec = np.sqrt(np.mean((solution.y[2] - (recovered.values * correction_factor/int(args.popmodel)))**2))
return sol_inf * 0.5 + sol_rec * 0.5
def loss_seir(point, confirmed, recovered, exposed):
@@ -287,9 +290,9 @@ def loss_seir(point, confirmed, recovered, exposed):
E = y[3]
return [mu - beta * S * I - mu * S, beta * S * I - sigma * E - mu * E, sigma * E * I - gamma * I - mu * I, gamma * I - mu * R]
solution = solve_ivp(model, [0, size], [S_0,E_0,I_0,R_0], t_eval=np.arange(0, size, 1), vectorized=True)
- sol_inf = np.sqrt(np.mean((solution.y[1] - (confirmed.values.flatten() * correction_factor/int(args.population)))**2))
- sol_rec = np.sqrt(np.mean((solution.y[2] - (recovered.values * correction_factor/int(args.population)))**2))
- sol_exp = np.sqrt(np.mean((solution.y[3] - (exposed.values * correction_factor/int(args.population)))**2))
+ sol_inf = np.sqrt(np.mean((solution.y[1] - (confirmed.values.flatten() * correction_factor/int(args.popmodel)))**2))
+ sol_rec = np.sqrt(np.mean((solution.y[2] - (recovered.values * correction_factor/int(args.popmodel)))**2))
+ sol_exp = np.sqrt(np.mean((solution.y[3] - (exposed.values * correction_factor/int(args.popmodel)))**2))
return sol_inf/3 + sol_rec/3 + sol_exp/3
my_learner = Learner(args.country)