<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=Modelo_Sir</id>
	<title>Modelo Sir - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=Modelo_Sir"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Modelo_Sir&amp;action=history"/>
	<updated>2026-06-12T23:20:28Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Modelo_Sir&amp;diff=6533&amp;oldid=prev</id>
		<title>Schmokel: Criou página com &#039;A primeira parte do código consiste na chamada das bibliotecas e na definição das constantes que serão utilizadas, o arquivo &quot;mc.h&quot; serve como suporte para gerar os númer...&#039;</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Modelo_Sir&amp;diff=6533&amp;oldid=prev"/>
		<updated>2021-11-29T19:01:53Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;A primeira parte do código consiste na chamada das bibliotecas e na definição das constantes que serão utilizadas, o arquivo &amp;quot;mc.h&amp;quot; serve como suporte para gerar os númer...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;A primeira parte do código consiste na chamada das bibliotecas e na definição das constantes que serão utilizadas, o arquivo &amp;quot;mc.h&amp;quot; serve como suporte para gerar os números aleatórios e se encontra no [https://replit.com/@JuliaRemus/sirmodificado#README.md projeto criado no Replit].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
#include &amp;quot;mc.h&amp;quot;&lt;br /&gt;
#include &amp;lt;limits.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ***************** CONSTANTES ************************************************************//&lt;br /&gt;
&lt;br /&gt;
#define L           1000&lt;br /&gt;
#define L2          (L*L)   // número total de indivíduos&lt;br /&gt;
#define TEMPO    	100     // quantidade de passos&lt;br /&gt;
#define S           2		// estado dos suscetíveis&lt;br /&gt;
#define I           0		// estado dos infectados&lt;br /&gt;
#define R           1		// estado dos recuperados&lt;br /&gt;
#define BETA		0.1		// taxa de transmissão da doença&lt;br /&gt;
#define GAMA		0.3		// taxa de remoção da doença&lt;br /&gt;
&lt;br /&gt;
// *****************************************************************************************//&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A segunda parte do código define as funções &amp;#039;&amp;#039;SIR()&amp;#039;&amp;#039;, &amp;#039;&amp;#039;inicializacao()&amp;#039;&amp;#039;, &amp;#039;&amp;#039;openfiles()&amp;#039;&amp;#039;, &amp;#039;&amp;#039;plot_func()&amp;#039;&amp;#039;. A primeira função implementa a dinâmica do modelo SIR apresentada no fluxograma da WIKI, a segunda função inicializa os estados dos indivíduos do sistema e identifica a posição dos vizinhos de todos os sítios, a terceira função abre um arquivo pra escrever os resultados ao longo do tempo e a última função plota e salva a imagem da saída dos arquivos. Nesta parte do código também definimos as variáveis globais, onde &amp;#039;&amp;#039;s[]&amp;#039;&amp;#039; e &amp;#039;&amp;#039;viz[][]&amp;#039;&amp;#039;, respectivamente, armazenam os estados dos indivíduos e a posição dos vizinhos. As variáveis &amp;#039;&amp;#039;infectado&amp;#039;&amp;#039;, &amp;#039;&amp;#039;suscetível&amp;#039;&amp;#039; e &amp;#039;&amp;#039;recuperado&amp;#039;&amp;#039; dão a fração dos indivíduos infectados, suscetíveis e recuperados.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// ***************** FUNÇÕES ***************************************************************//&lt;br /&gt;
&lt;br /&gt;
void SIR(void);  // implementa a dinâmica SIR mostrado no fluxograma da WIKI&lt;br /&gt;
void inicializacao(int m); // inicializa os estados dos indivíduos do sistema e identifica a posição dos vizinhos de todos os sítios&lt;br /&gt;
void openfiles(int tempo); // abre um arquivo pra escrever os resultados ao longo do tempo&lt;br /&gt;
void plot_func(void); // plota e salva a imagem da saída dos arquivos &lt;br /&gt;
&lt;br /&gt;
// ****************************************************************************************//&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ***************** VARIÁVEIS GLOBAIS ****************************************************//&lt;br /&gt;
&lt;br /&gt;
int s[L2],viz[L2][5];  // s[L2] armazena os estados dos indivíduos // viz[L2][5] armazena a posição dos vizinhos&lt;br /&gt;
float infectado, suscetivel, recuperado; // fração de indivíduos infectados, suscetíveis e recuperados&lt;br /&gt;
&lt;br /&gt;
// ****************************************************************************************//&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A estrutura principal do código é dada pelo laço temporal onde a cada tempo é chamado o modelo SIR, antes de entrar no loop é realizada a inicialização do sistema definindo o estado SIR. A medida que o tempo avança é escrito os dados dos estados da fração da população em um arquivo texto, posteriormente após o loop é gerado um gráfico.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// ***************** MAIN *****************************************************************//&lt;br /&gt;
&lt;br /&gt;
int main (void){&lt;br /&gt;
&lt;br /&gt;
	unsigned t;&lt;br /&gt;
  	seed = start_randomic();&lt;br /&gt;
	&lt;br /&gt;
    inicializacao(0);&lt;br /&gt;
    openfiles(0);&lt;br /&gt;
    &lt;br /&gt;
    for (t=0;t&amp;lt;TEMPO;t++){&lt;br /&gt;
    	&lt;br /&gt;
    	// ----- Cálculo dos estados dos indíviduos no instante de tempo t ------&lt;br /&gt;
    	SIR();&lt;br /&gt;
&lt;br /&gt;
    	// ----- Armazenamento em um arquivo texto da fração dos estados dos indivíduos no tempo t ------&lt;br /&gt;
    	openfiles(j+1);	&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // ----- Plot dos dados ------&lt;br /&gt;
    plot_func();&lt;br /&gt;
&lt;br /&gt;
  	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ****************************************************************************************//&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ****************** DEFINICAO DE FUNCOES ************************************************//&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// PLOTA A FRAÇÃO DOS INDIVÍDUOS S. I. R. // OS PRINTF COMENTADOS PLOTAM A  FUNÇÃO i(s)  &lt;br /&gt;
void plot_func(void){&lt;br /&gt;
&lt;br /&gt;
	printf(&amp;quot;plot \&amp;quot;output.txt\&amp;quot; u 1:2 w l title \&amp;quot;suscetivel s(t)\&amp;quot;, \&amp;quot;output.txt\&amp;quot; u 1:3 w l title \&amp;quot;infectados i(t)\&amp;quot;, \&amp;quot;output.txt\&amp;quot; u 1:4 w l title \&amp;quot;recuperados r(t)\&amp;quot;\n&amp;quot;);&lt;br /&gt;
	//printf(&amp;quot;plot \&amp;quot;output.txt\&amp;quot; u 2:3 w l title \&amp;quot;i(s) numérico\&amp;quot; \n&amp;quot;);&lt;br /&gt;
	printf(&amp;quot;set title \&amp;quot;Modelo SIR - β = 0.1 - γ = 0.3 - R0 = 0.333*s0\&amp;quot; \n&amp;quot;);&lt;br /&gt;
	//printf(&amp;quot;f(x) = 0.25*log(x) -x +1 \n&amp;quot;);&lt;br /&gt;
	//printf(&amp;quot;replot f(x) title \&amp;quot; i(s) analítico\&amp;quot;\n&amp;quot;);&lt;br /&gt;
	printf(&amp;quot;set xlabel \&amp;quot;Tempo\&amp;quot; \n&amp;quot;);&lt;br /&gt;
	printf(&amp;quot;set ylabel \&amp;quot;Fração da População N\&amp;quot; \n&amp;quot;);&lt;br /&gt;
	printf(&amp;quot;set yrange [-0.3:1.1] \n&amp;quot;);&lt;br /&gt;
	printf(&amp;quot;set term eps \n&amp;quot;);&lt;br /&gt;
	printf(&amp;quot;set output \&amp;quot;imagem.eps\&amp;quot;\n&amp;quot;);&lt;br /&gt;
	printf(&amp;quot;replot\n&amp;quot;);&lt;br /&gt;
	printf(&amp;quot;set terminal wxt;\n&amp;quot;); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// INICIALIZAÇÃO DOS DADOS&lt;br /&gt;
void inicializacao(int m){&lt;br /&gt;
	&lt;br /&gt;
	unsigned long i,n1,n2,n3,n4;&lt;br /&gt;
  	int sitio;&lt;br /&gt;
&lt;br /&gt;
  	//inicializando estados dos indivíduos na rede REDE&lt;br /&gt;
    for(i=0;i&amp;lt;L2;i++){&lt;br /&gt;
    	if(FRANDOM &amp;lt; 0.998) s[i]= S;&lt;br /&gt;
    	else s[i]= I;&lt;br /&gt;
    } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    //contagem do número de estados S. I. R. na REDE&lt;br /&gt;
    for(i=0;i&amp;lt;L2;i++){&lt;br /&gt;
&lt;br /&gt;
		if( s[i] == I){&lt;br /&gt;
			infectado += 1; &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(s[i] == S){&lt;br /&gt;
			suscetivel += 1; &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(s[i] == R){&lt;br /&gt;
			recuperado += 1; &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//Fração do número de indivíduos S. I. R.&lt;br /&gt;
	suscetivel = suscetivel/L2;&lt;br /&gt;
	infectado = infectado/L2;&lt;br /&gt;
	recuperado = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//identifica a posição dos vizinhos de todos os sítios&lt;br /&gt;
  	for (i=0;i&amp;lt;L2;i++) {&lt;br /&gt;
    	&lt;br /&gt;
  		n1 = (i-L+L2)%L2;&lt;br /&gt;
	    n2 = (i+1)%L + (i/L)*L;&lt;br /&gt;
	    n3 = (i+L)%L2;&lt;br /&gt;
	    n4 = (i-1+L)%L + (i/L)*L;&lt;br /&gt;
	    //printf(&amp;quot;%d %d %d %d %d\n&amp;quot;,i,n1,n2,n3,n4);&lt;br /&gt;
&lt;br /&gt;
    	sitio = i; &lt;br /&gt;
	    viz[i][0] = i;&lt;br /&gt;
	    viz[i][1] = n1;&lt;br /&gt;
	    viz[i][2] = n2;&lt;br /&gt;
	    viz[i][3] = n3;&lt;br /&gt;
	    viz[i][4] = n4;&lt;br /&gt;
	    //printf(&amp;quot;%d %d %d %d %d\n&amp;quot;,viz[i][0],viz[i][1],viz[i][2],viz[i][3],viz[i][4]);&lt;br /&gt;
  	}&lt;br /&gt;
  &lt;br /&gt;
  	return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//FUNÇÃO DINÂMICA SIR&lt;br /&gt;
void SIR(void){&lt;br /&gt;
&lt;br /&gt;
	int celula,i,j,estado,chave;&lt;br /&gt;
	float prob;&lt;br /&gt;
	&lt;br /&gt;
	chave == 0;&lt;br /&gt;
&lt;br /&gt;
	for(i=0;i&amp;lt;L2;i++){&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
		celula = FRANDOM*L2;   //sorteia um indivíduo na REDE&lt;br /&gt;
		estado = s[celula];    // determina o estado do indivíduo na REDE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		for(j=1;j&amp;lt;5;j++) {			//verifica se um dos vizinhos do indivíduo sorteado está infectado&lt;br /&gt;
      		if(s[viz[celula][j]] == I){&lt;br /&gt;
      			chave =1;			//condição para verificar se um indivíduo suscetível pode se tornar infectado&lt;br /&gt;
      		}&lt;br /&gt;
      	}&lt;br /&gt;
&lt;br /&gt;
		if(chave == 1){				&lt;br /&gt;
&lt;br /&gt;
			if(estado == S){&lt;br /&gt;
			&lt;br /&gt;
				if(FRANDOM &amp;lt; BETA) 	//sorteia um número --&amp;gt; probabilidade do indivíduo S tornar-se I &lt;br /&gt;
					s[celula] = I;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		chave = 0;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(estado == I){      //sorteia um número --&amp;gt; probabilidade do indivíduo I tornar-se R&lt;br /&gt;
			if(FRANDOM &amp;lt; GAMA) &lt;br /&gt;
				s[celula] = R;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//Zera o número de indivíduos sucsetível, infectado e recuperado&lt;br /&gt;
	infectado = 0;&lt;br /&gt;
	suscetivel = 0;&lt;br /&gt;
	recuperado = 0;&lt;br /&gt;
&lt;br /&gt;
	//contagem do número de estados S. I. R. na REDE&lt;br /&gt;
	for(i=0;i&amp;lt;L2;i++){&lt;br /&gt;
&lt;br /&gt;
		if( s[i] == I){&lt;br /&gt;
			infectado += 1; &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(s[i] == S){&lt;br /&gt;
			suscetivel += 1; &lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if(s[i] == R){&lt;br /&gt;
			recuperado += 1; &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//Fração do número de indivíduos S. I. R.&lt;br /&gt;
	suscetivel = suscetivel/L2;&lt;br /&gt;
	infectado = infectado/L2;&lt;br /&gt;
	recuperado = recuperado/L2;&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
  	&lt;br /&gt;
 /*ESCREVER NO ARQUIVO TEXTO OS DADOS OBTIDOS*/&lt;br /&gt;
void openfiles(int tempo){&lt;br /&gt;
	&lt;br /&gt;
	FILE *fp;&lt;br /&gt;
&lt;br /&gt;
	char output[100];&lt;br /&gt;
    sprintf(output,&amp;quot;output.txt&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    fp = fopen(output,&amp;quot;a&amp;quot;);&lt;br /&gt;
  	fprintf(fp,&amp;quot;%d %lf %lf %lf \n&amp;quot;,tempo,suscetivel,infectado,recuperado);&lt;br /&gt;
  	fclose(fp);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Schmokel</name></author>
	</entry>
</feed>