Orodha ya maudhui:

Kupata Chanjo au La? Mradi wa Kuchunguza Kinga ya Mifugo Kupitia Uigaji wa Magonjwa: Hatua 15
Kupata Chanjo au La? Mradi wa Kuchunguza Kinga ya Mifugo Kupitia Uigaji wa Magonjwa: Hatua 15

Video: Kupata Chanjo au La? Mradi wa Kuchunguza Kinga ya Mifugo Kupitia Uigaji wa Magonjwa: Hatua 15

Video: Kupata Chanjo au La? Mradi wa Kuchunguza Kinga ya Mifugo Kupitia Uigaji wa Magonjwa: Hatua 15
Video: Сафари в Танзании | Тарангире - Нгоронгоро - гора Килиманджаро | Обзор маршрута 2024, Julai
Anonim
Kupata Chanjo au La? Mradi wa Kuchunguza Kinga ya Mifugo Kupitia Uigaji wa Magonjwa
Kupata Chanjo au La? Mradi wa Kuchunguza Kinga ya Mifugo Kupitia Uigaji wa Magonjwa

Muhtasari wa Mradi:

Mradi wetu unachunguza kinga ya mifugo na inatarajia kuhamasisha watu kupata chanjo ili kupunguza viwango vya maambukizo katika jamii zetu. Programu yetu inaiga jinsi ugonjwa huambukiza idadi ya watu na asilimia tofauti za viwango vya chanjo na chanjo. Inaonyesha kinga ya mifugo kwa kuonyesha jinsi idadi iliyoongezeka ya idadi ya chanjo inaweza kupunguza idadi ya watu walioathirika.

Tunatoa mfano huu kwa Matlab kwa kutumia dhana za nadharia ya grafu. Nadharia ya Grafu ni njia ya hisabati ya kuwakilisha uhusiano kati ya vitu. Katika nadharia ya grafu, grafu zina vipeo (au nodi) zilizounganishwa na kingo (au mistari). Kwa mradi wetu, nodi ni watu wanaohusika na kingo ni unganisho lao. Kwa mfano, ikiwa nodi mbili zimeunganishwa na ukingo basi inamaanisha kuwa ni "marafiki" au wana aina ya mawasiliano kati yao. Mawasiliano haya ni njia ya ugonjwa kuenea. Hii ndio sababu tulitumia nadharia ya graph kuonyesha mfano wa dhana yetu kwa sababu tulitaka kuona jinsi ugonjwa unavyoenea kati ya watu ambao wameunganishwa katika idadi ya watu.

Mradi wetu pia unajumuisha Njia ya Monte Carlo. Njia ya Monte Carlo ni algorithms ambayo huunda sampuli ya mara kwa mara ili kupata matokeo ya nambari. Katika mradi wetu, tunatumia njia hii kutekeleza uigaji wetu mara kadhaa kubadilisha asilimia ya watu ambao hawajachanjwa ili kuona kiwango ambacho watu huambukizwa.

Nambari zote za mradi zimeunganishwa chini!

Mkopo wa PC:

Kiunga cha Matlab kwa Nadharia ya Grafu:

Hatua ya 1: Unda Matrix ya Adjacency

Unda Matrix ya Adjacency
Unda Matrix ya Adjacency
Unda Matrix ya Adjacency
Unda Matrix ya Adjacency

Unda hati mpya. Tutaita yetu 'maambukizoSim.m' yetu.

Tutafanya ubadilishaji 'NUMOFPEOPLE'. Unaweza kuipatia thamani yoyote kamili. Hii itawakilisha idadi ya watu katika idadi yako.

Kuanzia sasa, tutafikiria kuwa

NUMOFPEOPLE = 20;

Anza kwanza kwa kutumia kazi za nadharia ya graph ya Matlab kwa grafu isiyoelekezwa.

Ikiwa una nia ya kujifunza zaidi, hapa kuna kiunga chako kusoma zaidi kwa kina juu yake.

www.mathworks.com/help/matlab/math/directed-and-undirected-graphs.html

Iliunda matrix ya karibu.

adjMatrix = zero (NUMOFPEOPLE);

Hii itaunda tumbo la mraba la 0s. Kila safu katika tumbo ni mtu. Kila safu katika tumbo ni mtu au rafiki ambaye mtu huyo hukutana naye kwa siku nzima.

Tazama Kielelezo 100 (hapo juu) kusaidia kuibua jinsi adjMatrix inavyoonekana kwa watu 20.

** Kuanzia wakati huu na kuendelea tutafikiria watu NUMOFPE ni sawa na 20. **

Unaweza kujaribu kupanga hii tumbo ya karibu. Hapa kuna habari zaidi juu ya kupanga aina hizi za matrices.

Kumbuka: Jinsi tumbo la karibu linavyofanya kazi.

Ex:

kutengeneza tumbo la karibu

a = [0, 1, 0, 0, 0; 1, 0, 1, 1, 1; 0, 1, 0, 0, 0; 0, 1, 0, 0, 0; 0, 1, 0, 0, 0]% kupanga njama g = grafu (a); % kutumia kazi ya grafu (nadharia ya graph) takwimu (1); h = njama (g);

Tazama Kielelezo 1 (hapo juu) kuona jinsi ya kuongeza kingo kwenye tumbo la karibu, ukitumia nambari katika "Kumbuka".

Hatua ya 2: Unda Mahusiano

Unda Mahusiano
Unda Mahusiano

Sasa kwa kuwa watu (vipeo au nodi) wameundwa, tunahitaji kuunda mtandao wa mahusiano (mistari au kingo za grafu). Hii itaiga jinsi watu wanavyoshirikiana na kukutana na watu wengine kwa siku nzima.

Hii inaweza kufanywa kwa njia nyingi. Njia moja ya kukamilisha kazi hii ni kwanza kupeana nambari kwa kila mtu kuamua ni watu wangapi watashirikiana nao kwa siku.

numOfFriendsMatrix = randi ([angalauFriendsPersonCanHave, mostFriendsPersonCanHave], 1, NUMOFPEOPLE);

Hii hufanya 1 kwa 20 tumbo ya nambari za nasibu zinazowakilisha idadi ya mwingiliano kila mtu ana siku. Nguzo za tumbo hili zingekuwa nambari inayolingana na kila mtu. Kwa mfano ikiwa tutapeana mdogoFriendsPersonCanHave = 2 na mostFriendsPersonCanHave = 5, tutapata maadili kati ya 2 na 5.

Kuwa na shida na randi ()? Katika terminal, chapa

msaada randi

Halafu, tunatengeneza matrix yenye nasibu (inayoitwa "allFriendsmatrix") ya jinsi kila mtu katika idadi ya watu ameunganishwa / anavyoshirikiana ndani ya idadi ya watu.

tempMatrix = ;

hesabu = 0; allFriendsMatrix = ; kwa k = 1: NUMOFPEOPLE wakati urefu (tempMatrix) ~ = numOfFriendsMatrix (k) hesabu = hesabu +1; temp = randi ([1, NUMOFPEOPLE]); tempMatrix (hesabu) = temp; mwisho wazi kila urefu wa muda (tempMatrix) ~ = 9 tempMatrix = [tempMatrix, NaN]; end allFriendsMatrix = [marafiki woteMatrix; tempMatrix]; tempMatrix = ; hesabu = 0; mwisho

Kwa maelezo ya kina ya nambari:

Kwanza tunaunda matrix ya muda tupu kushikilia orodha ya marafiki / kila mwingiliano wa kila mtu. Pia tunaanzisha hesabu, ambayo inafuatilia tu mahali pa kushikamana na unganisho mpya wa nasibu kwenye tempMatrix. Matanzi huendesha mara 20 ili hii itokee kwa kila mtu binafsi katika idadi ya watu. Kitanzi cha kwanza kinatumika hadi tempMatrix ya kila mtu ni urefu sawa wa nambari iliyowekwa kwa nasibu ya mwingiliano. Katika kitanzi hiki, nambari inayolingana na mtu katika idadi ya watu hutengenezwa na kuwekwa kwenye tempMatrix. Kwa sababu urefu wa kila tempMatrix ni tofauti, tulihitaji kuunda nambari kadhaa za NaN ili tuweze kuzungusha hizi tempMaticies zote kuwa tumbo moja ('allFriendsMatrix'). Kitanzi cha pili wakati kinasuluhisha shida hii kwa kuongeza NaN's katika kila tempMatrix. Kitanzi cha wakati kiliwekwa kukimbia mara 9 kwa sababu ni nambari kubwa zaidi ya 5, ambayo ilikuwa safu ya juu ya marafiki ambao mtu anaweza kupewa. Thamani '9' inabadilika na inaweza / lazima ibadilishwe wakati 'mostFriendsPersonCanHave' ni kubwa kuliko 9. Mistari mitatu ya mwisho ya nambari (ukiondoa mwisho) inaongeza tempMatrix kwenye safu inayofuata ya 'allFriendsMatrix'. Halafu inafuta tempMatrix na hesabu kwa mtu anayefuata.

Pato

Hivi ndivyo pato linapaswa kuonekana kama kwa kukimbia kwanza kupitia kitanzi (kabla ya mistari mitatu ya mwisho).

tempMatrix = 16 8 17 16 13 NaN NaN NaN NaN

marafiki woteMatrix =

16 8 17 16 13 NAN NaN NaN NaN 8 8 2 7 11 NaN NaN NaN NaN 10 13 NaN NaN NaN NaN NaN NaN 11 17 2 NAN NaN NaN NaN NaN 10 12 NAN NAN NaN NaN NaN NaN 4 13 2 12 NAN NAN NAN NaN NaN 17 10 9 3 1 NaN NaN NaN Na 16 16 6 NaN NaN NaN NaN NaN NaN 3 8 17 17 14 NAN NAN NaN NaN 20 19 3 NAN NAN NaN NaN NaN 13 10 NAN NAN NaN NaN NaN NaN 2 18 10 16 NAN NAN NaN NaN NaN 2 6 14 3 13 NaN NaN NaN NaN 8 16 14 8 NaN NaN NaN NaN Na 7 7 NAN NAN NaN NaN NaN NaN 19 19 9 NAN NAN NaN NaN NaN Na 19 10 NaN NaN NaN NAN NAN NAN 5 18 NAN NaN NaN NaN NaN NaN 1 7 NAN NaN NaN NaN NaN NaN 16 16 13 13 1 NAN NAN NaN NaN

Ifuatayo, ongeza uhusiano huu kwa adjMatrix.

kwa kila safu = 1: NUMOFPEOPLE

kwa kilaCol = 1: 9 ikiwa isnan (allFriendsMatrix (eachRow, eachCol)) == 0 adjMatrix (eachRow, allFriendsMatrix (eachRow, eachCol)) = 1; adjMatrix (allFriendsMatrix (eachRow, eachCol), kilaRow) = 1; mwisho mwisho mwisho

Maelezo ya Kanuni

Hii mara mbili kwa kitanzi hupitia kila safu na safu ya 'allFriendsMatrix'. Taarifa ya if itatumika kwa maadili yote ambayo sio 'NaN'. Kimsingi itaunda kingo au mistari ya grafu. Kwa hivyo mstari wa kwanza ambao utafanya ni mtu 1 hadi mtu 16 na mtu 16 kwa mtu 1. Kwa sababu haijaelekezwa, 1 lazima ibadilishwe kwa wote wawili! Hatuwezi tu kuwa na makali 1 hadi 16 na sio 16 hadi 1. Lazima ziwe na ulinganifu ili iendeshe vizuri katika Matlab.

Katika uigaji wetu, tulianzisha kwamba watu hawawezi kuingiliana na wao wenyewe. Wakati tulipobadilisha maadili, kuna nafasi tumbo yetu iliyo karibu ina makosa haya.

Wacha turekebishe hii na nambari ifuatayo:

kwa kila = 1: NUMOFPEOPLE

adjMatrix (kila, kila) = 0; mwisho

Maelezo ya Kanuni

Hii kwa kitanzi inahakikisha kuwa mtu 1 hajaunganishwa na mtu 1, mtu 2 hajaunganishwa na mtu 2, n.k kwa kuzifanya zote kuwa 0. Kama unavyoona hapa chini katika sehemu ya pato, tuna ulalo wa mraba tumbo kutoka juu kushoto kwenda chini kulia ni zote za 0.

Pato

Hii ni adjMatrix ya mwisho ya uigaji huu wa sasa. Hii ni akaunti ya mistari yote kwenye grafu (Kielelezo 2).

adjMatrix =

0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 1 0 0 0 1 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 0 1 0 0 0 1 1 0 0 0 1 1 0 1 1 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0

Tazama Kielelezo 2 kuona grafu ya 'adjMatrix'.

Hatua ya 3: Ongeza Takwimu za Magonjwa

Sasa kwa kuwa programu yako inaweza kuunda grafu na seti ya watu wa nasibu na kuunda uhusiano wa nasibu, tunahitaji kuingiza habari au takwimu za ugonjwa ili kuona jinsi maingiliano haya ndani ya idadi ya watu yanaweza kuongeza au kupunguza maambukizo.

Unda vigeuzi hivi:

aina ya unvacc%: mara mbili; nafasi ya asilimia ya watu wasio na chanjo wasipate ugonjwa

aina ya chanjo: mara mbili; nafasi ya asilimia ya watu walio chanjo kutopata ugonjwa unvacc_perc% aina: mara mbili; asilimia ya idadi ya watu wasio na chanjo init_infect% aina: int; chanjo ya idadi ya watu

Ifuatayo tunahitaji kufanya mahesabu kadhaa.

Tutafanya 'maambukiziMat' ambayo ni tumbo la 3 * NUMOFPEOPLE.

vacc_perc = 1-unvacc_perc;

maambukiziMat = nan (3, NUMOFPEOPLE); nambari = pande zote (vacc_perc * NUMOFPEOPLE); maambukiziMat (1, 1: idadi) = chanjo; maambukiziMat (1, nambari + 1: mwisho) = unvacc; maambukiziMat (2, 1: mwisho) = 0; maambukiziMat (2, 1: init_infect) = 1;

Maelezo ya Kanuni

mstari wa 1: Asilimia ya idadi ya watu wasio na chanjo imehesabiwa

mstari wa 2: unda idadi ya 3 * N ya idadi ya watu

mstari wa 3: tafuta idadi ya watu waliopewa chanjo kutoka kwa asilimia iliyochanjwa

mstari wa 4: kwa watu walio chanjo, wape kinga inayohusishwa na kuwa na chanjo. Thamani hii imepewa kulingana na utafiti juu ya ugonjwa.

mstari wa 5: kwa watu wengine (watu wasio na chanjo), wape asilimia kinga. Thamani hii imepewa kulingana na utafiti juu ya ugonjwa.

mstari wa 6: mwanzoni weka watu wote wasiambukizwe.

mstari wa 7: kwa idadi ya watu walioambukizwa mwanzoni, jaza safu wima za kwanza ipasavyo.

Sasa kwa kuwa tumeweka vigezo vyote vya uigaji wa ugonjwa, tutabadilisha nafasi ya ikiwa mtu (aliye chanjwa na asiye na chanjo) anaambukizwa. Hii imefanywa katika hatua inayofuata kwa kupeana maadili kati ya 0 na 1 kwa kila mtu katika safu ya tatu ya hii 'maambukiziMat'.

Hatua ya 4: Badilisha Uwezo wa Chanjo na Mtu asiye na Chanjo Aweze Kuambukizwa

Ifuatayo, mpe kila mtu nambari isiyo ya kawaida, hii itatumika baadaye kubaini ikiwa mtu anaambukizwa au la.

kwa w = 1: urefu (maambukizoMat)

maambukiziMat (3, w) = rand; mwisho

Maelezo ya kificho

Hii kwa mikataba ya kitanzi na safu ya tatu ya 'maambukizoMat' iliyoundwa katika hatua ya mwisho. 'rand' hutoa thamani kati ya 0 na 1 kwa kila faharisi ya safu ya 3.

Pato

infectionMat sasa imekamilika! Hii ilikuwa na idadi ya watu iliyo na chanjo ya 100% na mtu 1 mwanzoni ameambukizwa.

maambukiziMat =

Nguzo 1 hadi 12 0.7500 0.7500 0.7500 0.7500 0.7500 0.7500 0.7500 0.7500 0.7500 0.7500 0.7500 0.7500 1.0000 0 0 0 0 0 0 0 0 0 0 0 0,0869 0.7500 0.7500 0 0 0 0 0 0 0 0 0.0480 0.3593 0.2958 0.6291 0.1362 0.3740 0.8648 0.2503

safu ya 1: Asilimia nafasi ya KUTOPATA ugonjwa

safu ya 2: Kuambukizwa au kuambukizwa (thamani ya boolean)

safu ya 3: Nambari inayotumika kuangalia ikiwa mtu ambaye hajaambukizwa anaambukizwa ikiwa atakutana na mtu aliyeambukizwa. Ikiwa mtu asiyeambukizwa hukutana na mtu aliyeambukizwa, nambari hii ni kubwa kuliko idadi ya safu ya 1 (kwa safu moja), basi wameambukizwa. Tutainisha utendaji huu katika hatua ya 7.

Hatua ya 5: Unda Matriki ya watu ambao hawajachanjwa na kuambukizwa kutoka kwa habari ya awali

Unda matriki 2 inayoitwa "matrixUnvacc" na "matrixInfected" ambayo huhifadhi watu wote walioambukizwa kutoka maambukizoMat. Hii itatumika ili tuweze kuweka nambari ya rangi kwenye grafu ya wale ambao wameambukizwa, hawajachanjwa, au wamepewa chanjo, kusaidia kuibua athari za watu ambao hawajachanjwa dhidi ya chanjo.

wazi kila moja

matrixInfected = ; matrixUnvacc = ; kwa h = 1: urefu (maambukizoMat) ikiwa maambukizoMat (1, h) == tumbo la unvaccUnvacc = [matrixUnvacc, h]; mwisho wa mwisho kwa mtu = 1: NUMOFPEOPLE ikiwa maambukizoMat (2, person) == 1 matrixInfected = [matrixInfected, person]; mwisho mwisho

Maelezo ya Kanuni

Unda matriki mbili tupu kuhifadhi idadi ya watu ambao hawajachanjwa na kuambukizwa, mtawaliwa. Zote mbili kwa matanzi huendesha mara 20 na ikiwa taarifa ikiwa imeridhika, basi nambari hiyo imeongezwa kwa tumbo sahihi.

Pato

matrixUnvacc =

tumboImeambukizwa =

[1]

Hatua ya 6: Mpango wa Grafu ya Awali

Kiwanja Grafu ya Awali
Kiwanja Grafu ya Awali

Ifuatayo tutapanga matrix ya karibu.

g = grafu (adjMatrix);

takwimu (1) p = njama (g, 'NodeColor', 'b', 'MarkerSize', 7); onyesha (p, matrixUnvacc, 'NodeColor', 'g') onyesha (p, matrixInfected, 'NodeColor', 'r') title_unvacc = unvacc_perc * 100; kichwa (['Asilimia ya watu ambao hawajachanjwa:', num2str (title_unvacc), '%']); pumzika (kasi)

Maelezo ya kificho

Nadharia ya Grafu huko Matlab imejengwa katika kazi. Tunapotumia kazi ya graph (), tunaweza kutafsiri 'adjMatrix' kuwa grafu halisi isiyoelekezwa. Tunalazimika kuunda njama kwa kutumia kazi ya njama () ili kuona jinsi inavyoonekana. Tunaweka njama hii () kwa ubadilishaji ili tuweze kudanganya na kubadilisha rangi za njama kwa urahisi zaidi wakati wote wa uigaji. Watu wote (au nodi) hapo awali wamewekwa kwenye rangi 'bluu'. Ifuatayo, watu wote ambao hawajachanjwa wamewekwa kwenye rangi ya 'kijani'. Watu walioambukizwa huwekwa kwenye rangi nyekundu. Kichwa kinawekwa kulingana na asilimia fulani ya watu wasio na chanjo wanaojaribiwa. Kazi ya pause () inasimamisha utekelezaji wa MatLab kwa muda. Tunapita kwa kasi inayobadilika ambayo huhesabiwa kwa sekunde.

Tazama picha (hapo juu) ili uone grafu iliyosimbwa kwa rangi.

Jifunze zaidi juu ya kazi ya kuonyesha () katika MatLab.

Hatua ya 7: Kuiga Maendeleo ya Maambukizi

Ifuatayo tunahitaji kujua ni nani anayeambukizwa baada ya mwingiliano (uliorekodiwa katika adjMatrix) na kusasisha grafu wakati mtu anaambukizwa.

Tumia adjMatrix kuamua ni watu gani wameambukizwa baada ya maingiliano yao na watu kwa siku.

kwa kilaRow = 1: urefu (adjMatrix)

ikiwa maambukizoMat (2, kila Mstari) == 1 kwa kila Col = 1: urefu (adjMatrix) ikiwa adjMatrix (kilaRow, kila Col) == 1% kilaRow = mtu% kilaCol = rafiki yake% rafiki ya kila mtu na angalia ikiwa wameambukizwa. ikiwa maambukiziMat (3, kilaCol)> maambukiziMat (1, kilaCol) maambukiziMat (2, kila Col) = 1; onyesha (p, kilaCol, 'NodeColor', 'r') pumzika (kasi) mwisho mwisho mwisho mwisho mwisho

Kitanzi cha kitanzi kupitia kila mtu. Inakagua ikiwa mtu ameambukizwa, itaangalia kila mtu / rafiki ambaye aliwasiliana nao na angalia ikiwa kiwango cha kinga ya rafiki kilikuwa kikubwa kuliko nguvu ya ugonjwa. Hapa ndipo 'maambukizoMat' ambayo tuliunda mapema inatumika. Safu ya 1 na 3 ya kila safu ya rafiki inalinganishwa na ikiwa safu ya 3 ni kubwa zaidi, inamaanisha kuwa rafiki hakuwa na kinga ya kutosha kutoroka ugonjwa huo na mwishowe anaambukizwa. Sisi pia hubadilika kuwa rangi kwa kutumia kuonyesha () kuwa nyekundu ikiwa wataambukizwa.

Sasa nambari yako ya uigaji inapaswa kufanya kazi! na kwa saizi yoyote ya idadi ya watu, badilisha tu NUMOFPEOPLE!

Hatua ya 8: Tumia nadharia ya Monte Carlo

Ili kuchukua hatua hii zaidi na kutoa data kutoka kwa simulator yetu ('infectionSim.m'), tulitaka kuhesabu na kuchora mwenendo kwa asilimia ya watu ambao hawajachanjwa walioambukizwa na asilimia ya watu waliopewa chanjo walioambukizwa. Tunafikiria kwamba asilimia ya watu waliopewa chanjo walioambukizwa wanapaswa kuwa chini sana kuliko asilimia ya watu wasio na chanjo walioambukizwa.

Hatua ya 9: Fanya Faili ('infectionSim.m') na Uigaji kuwa Kazi

Ili kuendesha Monte Carlo, tungependa kuendesha simulation mara kadhaa na kukusanya data ili tuweze kutumia hiyo kuonyesha asilimia ya watu walioambukizwa.

Kazi inaweza kusanidiwa kama hii:

pato la kazi = maambukizi Sim (unvacc, chanjo, NUMOFPEOPLE, unvacc_perc, init_infect, speed)

Toa maoni juu ya vigeuzi katika uigaji wako kwani sasa unazipitisha kupitia faili kuu (tutaanza kuandika hii katika hatua ya 12):

unvacc, chanjo, NUMOFPEOPLE, unvacc_perc, init_infect

Tofauti mpya

kasi

itapewa faili kuu (Monte_Carlo.m).

Kumbuka: Usisahau mwisho chini ya faili ya kazi ili kumaliza kazi!

Hatua ya 10: Hesabu Asilimia ya Watu Wasio na Chanjo na Chanjo Walioambukizwa

Hii inahesabu asilimia ya watu ambao hawajachanjwa ambao waliambukizwa. Nambari hii inakwenda chini ya faili ya 'infectionSim.m'.

idadi_ya_unvacc = 0;

idadi_ya_faf_unvacc = 0; % huhesabu asilimia ya watu ambao hawajachanjwa ambao waliambukizwa kwa x = 1: urefu (maambukizoMat) ikiwa maambukiziMat (1, x) == unvacc number_of_unvacc = number_of_unvacc + 1; mwisho ikiwa maambukizoMat (1, x) == unvacc & maambukizoMat (2, x) == 1 number_of_infec_unvacc = number_of_infec_unvacc +1; asilimia ya mwisho mwisho_wa_unvacc_and_infec = (idadi_ya_nfec_unvacc / idadi_ya_unvacc) * 100;

Maelezo ya kificho

Katika kitanzi, itazunguka mara NUMOFPEOPLE. Kila wakati nambari iliyo kwenye maambukizoMat inalingana na nambari ya unvacc (yaani. idadi ya walioambukizwa na wasio na chanjo huongezeka kwa 1. Mstari wa mwisho hugawanya idadi ya watu walioambukizwa, wasio na chanjo na idadi ya watu ambao hawajachanjwa. Kisha asilimia imehesabiwa kutoka kwa hii.

Changamoto:

Jaribu kuhesabu asilimia ya chanjo ya watu walioambukizwa! (Kidokezo: inafanana sana na nambari hii hapo juu, hata hivyo anuwai zingine hubadilishwa na majina hubadilishwa.)

Ifuatayo asilimia ya watu walioambukizwa kulingana na idadi ya watu imehesabiwa:

pre_per_infect = cumsum (maambukizoMat (2,:));

per_infect = (pre_per_infect (1, NUMOFPEOPLE) / NUMOFPEOPLE) * 100;

Maelezo ya kificho

Jumla ya mahesabu huhesabiwa kwa kutumia safu ya pili ya maambukizoMat, ambayo huhifadhi 1s na 0s kulingana na ikiwa mtu ameambukizwa au la. Kwa kuwa kazi ya cumsum () inarudisha tumbo, tunachukua thamani ya mwisho katika tumbo ('pre_per_infect (1, NUMOFPEOPLE)'), ambayo inapaswa kuwa jumla halisi ya maadili yote kutoka kwa 'maambukizoMat (2,:)'. Kwa kugawanya jumla na NUMOFPEOPLE na kuizidisha kwa 100, tunapata asilimia ya mwisho ya walioambukizwa katika idadi ya watu wote.

Hatua ya 11: Unda Pato inayobadilika katika Kazi yako 'maambukizoSim.m'

pato = [per_infect, asilimia_ ya_vidudu_na_nfec, asilimia_ya_vacc_and_infec];

Maelezo ya kificho

Hifadhi habari hii katika pato, ambayo itarudishwa kwa kuu (Monte_Carlo.m) wakati kazi itaitwa na kufanywa. Takwimu hizi hutumiwa kuonyesha alama za asilimia ya walioambukizwa wa wale ambao wamepewa chanjo na wasio na chanjo.

Kazi yako ya 'maambukizoSim.m' inapaswa kufanywa sasa! Walakini, haitaendesha kwa sababu bado tunahitaji kuandika kuu!

Hatua ya 12: Unda Menyu ya Kupata Masharti ya Awali ya Uigaji Kutoka kwa Mtumiaji

Kumbuka jinsi tulivyosema kutofautisha

kasi

ingeundwa na kupitishwa na kazi kuu? Tunahitaji kupata maadili ya kupitisha kazi. Kumbuka, utaratibu wa maadili wakati wa kuita kazi hiyo ni muhimu!

Anza kwa kumwuliza mtumiaji kuandika majibu kwenye kituo.

> Chagua ugonjwa. Kumbuka ni nyeti kwa kesi >> Pertussis >> Homa >> Sugua >> Magonjwa Waliochaguliwa: Homa >> Kuchukua ukubwa wa idadi ya watu. >> 20 >> 200 >> Idadi ya watu waliochaguliwa: 20 >> Chukua kasi ya masimulizi. Kuanza >> Polepole >> Polepole >> Kasi iliyochaguliwa: Haraka

Nambari hii hapa chini inamuuliza mtumiaji ni ugonjwa gani wanataka kuangalia.

disp ('Chagua ugonjwa. Kumbuka ni ya kusikitisha kesi')

fprintf ('Pertussis / nFlu / nMasisi / n') ugonjwa = pembejeo ('Waliochaguliwa Magonjwa:', 's'); ikiwa usawa (ugonjwa, 'Pertussis') chanjo =.85; % 15 nafasi ya kupata ugonjwa unvacc =.20; % Asilimia 80 ya kupata ugonjwa mwingine ikiwa iko sawa (ugonjwa, 'mafua') chanjo =.75; % 25 nafasi ya kupata ugonjwa unvacc =.31; Asilimia 69 ya nafasi ya kupata ugonjwa mwingine ikiwa iko sawa (ugonjwa, 'Surua' chanjo =.97; % 3 nafasi ya kupata ugonjwa unvacc =.10; Asilimia 90 ya uwezekano wa kupata ugonjwa kuisha

Maelezo ya msimbo:

Kazi ya disp () inachapisha taarifa hiyo kwenye skrini na pia inachapisha chaguzi tofauti. Ugonjwa utapewa ipasavyo. Toleo hili halihusiki kwa pembejeo batili. Ingizo batili litatoa hitilafu na kusitisha programu kabisa. Kila ugonjwa una chanjo na maadili ya unvacc yanayohusiana nayo. Maadili haya SI ya kubahatisha. Tulipata maadili haya kutoka kwa kutafiti takwimu kuhusu magonjwa.

Ifuatayo, tunahitaji kumwuliza mtumiaji ikiwa anataka kupima idadi kubwa au ndogo ya idadi ya watu kwa ugonjwa wao uliochaguliwa.

disp ('Chagua ukubwa wa idadi ya watu.')

fprintf ('20 / n200 / n ') speed = input (' Idadi ya watu waliochaguliwa: ',' s '); ikiwa usawa (kasi, '20') idadi ya watu_size = 20; mwingine ikiwa usawa (kasi, '200') idadi ya watu_size = 200; mwisho

Maelezo ya kificho

Hii inachapisha taarifa kwa mtumiaji na inauliza mtumiaji aingie ni ukubwa gani wa idadi ya watu ambayo anataka kujaribu. Toleo hili halina akaunti ya uingizaji batili kwa sasa. Ingizo batili litatoa hitilafu na kusitisha programu kabisa. 20 ilichukuliwa kwa sababu ni saizi ndogo ya sampuli ambayo bado inatoa wazo nzuri ya jinsi maambukizo yanaenea katika idadi ndogo ya watu. Watu 200 walichaguliwa kama chaguo kubwa kwa sababu alama 200 zilizopangwa kwenye grafu hazikuwa na mwingiliano wowote wa alama ili kila kitu kiweze kuonekana na kutofautishwa kutoka kwa kila mmoja.

Ifuatayo, tunahitaji kupata kasi ya masimulizi.

disp ('Chagua kasi ya kuiga.')

fprintf ('Haraka / nPunguza / n') kasi = pembejeo ('Kasi iliyochaguliwa:', 's'); ikiwa usawa (kasi, 'Haraka') sim_speed = 0; mwingine ikiwa sawa (kasi, 'Polepole') sim_speed = 0.25; mwisho

Maelezo ya kificho

Utaratibu huu ulikuwa sawa na kupata aina ya ugonjwa na ukubwa wa idadi ya watu. Kwa haraka, hakutakuwa na pause. na kwa polepole, kutakuwa na bakia ya pili ya 0.25 kwenye kitanzi wakati wa kuendesha masimulizi.

Kubwa! Sasa tuna pembejeo zote kutoka kwa mtumiaji tunayohitaji! Wacha tuendelee kukusanya data kwa asilimia tofauti ya watu wasio na chanjo.

Hatua ya 13: Chagua% ya Watu ambao hawajachanjwa na Hesabu Wastani wa Wasiochanjwa na Walioambukizwa kwa Asilimia Iliyochaguliwa

Nambari hii ni ya 0% ya watu ambao hawajachanjwa.

% -------% 0 Haijachanjwa ------------

per_infect_av_0 = ; asilimia_ya_kutoa_na_na_ficha_av_0 = ; kwa i = 1:20 nje = maambukiziSim (unvacc, chanjo, idadi ya watu_size, 0, 1, sim_speed); per_infect_av_0 = [per_infect_av_0, nje (1, 1)]; percent_of_unvacc_and_infec_av_0 = [percent_of_unvacc_and_infec_av_0, nje (1, 2)]; mwisho wastani_naambukizwa_0 = maana (per_infect_av_0); wastani_unvacc_and_infected_0 = maana (percent_of_unvacc_and_infec_av_0);

Maelezo ya msimbo:

Kitanzi kinaendeshwa mara 20. Pato kutoka kwa kazi, infectionSim (), imehifadhiwa nje. Kila wakati kitanzi kinapoendesha, basi asilimia ya walioambukizwa katika idadi ya watu huongezwa kwenye tumbo, 'per_infect_av_0'. Kwa kuongezea, asilimia ya wasio na chanjo na walioambukizwa pia huongezwa kila wakati kwenye tumbo la 'percent_of_unvacc_and_infec_av_0'. Katika mistari miwili ya mwisho, hizi mbili, matrices zilizotajwa hapo juu zina wastani na kuhifadhiwa katika vigeuzi. Kwa jumla, asilimia huhifadhiwa kwa kila uigaji, wastani, na graphed. Monte Carlo hutumiwa kuonyesha thamani ya wastani ya kuendesha masimulizi na kuonyesha matokeo. Kwa madhumuni yetu ya majaribio, tunachagua kuendesha uigaji mara 20 na wastani wa maadili hayo.

Changamoto:

Rudia kwa asilimia zote unazotaka kujaribu! Hii inaweza kufanywa kwa kubadilisha majina yanayobadilika kulingana na idadi ya asilimia. Tulijaribu 0%, 5%, 10%, 20%, 30%, na 50%.

Kidokezo:

Mstari pekee ambao lazima ubadilishwe katika nambari halisi ni

nje = maambukiziSim (unvacc, chanjo, idadi ya watu, 0, 1, sim_speed);

Badilisha sifuri kwa asilimia katika fomu ya desimali. Kwa mfano, kwa uigaji 5% wa chanjo, 0 inapaswa kubadilishwa na 0.5.

Hatua ya 14: Grafu: 'Mwenendo wa Maambukizi katika Vs zisizo na Chanjo. Chanjo ya ugonjwa maalum

Hii ndio nambari ya kutengeneza grafu ya mwelekeo wa maambukizo kwa watu wasio na chanjo dhidi ya watu ambao hawajachanjwa.

graph_mat_y = [wastani_naambukizwa_0, wastani_naambukizwa_5, wastani_naambukizwa_10, wastani_naambukizwa_20, wastani_naambukizwa_30, wastani_aliambukizwa_50];

graph_mat_x = [0, 5, 10, 20, 30, 50]; mteremko = (wastani_uambukizwa_5-wastani_uambukizwa_0) / 5; line_y = [wastani_naambukizwa_0, (mteremko * 50) + wastani_uambukizwa_0]; mstari_x = [0, 50]; kielelezo (2) njama (graph_mat_x, graph_mat_y); mstari (line_x, line_y, 'Rangi', 'nyekundu', 'LineStyle', '-'); kichwa (['Mwenendo wa Uncccination for', ugonjwa]); xlabel ('Asilimia ya Awali Haijachanjwa'); ylabel ('Asilimia ya Walioambukizwa Mwisho')

Maelezo ya kificho

mstari wa 1: maadili ya kupewa y kwa wastani wa asilimia iliyoambukizwa

mstari wa 2: kupewa maadili ya x kwa asilimia ya asilimia ya awali isiyo na chanjo

mstari wa 3: hesabu mteremko wa 0% na 5%

mstari wa 4: kuhifadhi y maadili ya mstari. Huu ni mwendelezo wa sehemu ya 0% hadi 5%.

mstari wa 5: kuhifadhi y maadili ya mstari. Mstari huu unapita urefu wa grafu.

mstari wa 6: tengeneza takwimu

mstari wa 7: panga grafu x na y maadili ya asilimia walioambukizwa, ambao hawajachanjwa.

mstari wa 8: panga mstari. Hii hutumiwa kuonyesha kwamba haiongezeki kwa usawa, lakini kwa kiasi kikubwa.

mstari wa 9: Weka kichwa cha grafu.

mstari wa 10-11: Weka maandiko x na y kwa grafu.

Sasa unapaswa kuona kuwa asilimia kubwa ya idadi ya watu hawajachanjwa, idadi kubwa ya maambukizo. Pia utaona kwamba dots nyingi zinazobadilika kuwa nyekundu ni dots za kijani, kuonyesha kwamba chanjo inasaidia kwa kiwango fulani! Natumai ulipenda mafunzo haya. Toa maoni ikiwa una maswali yoyote!

Hatua ya 15: Bidhaa ya Mwisho: Je! Uigaji Unaonekanaje

Nambari zote zinaweza kupatikana hapa

Ilipendekeza: