<?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=Erro%3A_Leapfrog</id>
	<title>Erro: Leapfrog - 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=Erro%3A_Leapfrog"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Erro:_Leapfrog&amp;action=history"/>
	<updated>2026-04-16T12:14:28Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Erro:_Leapfrog&amp;diff=2000&amp;oldid=prev</id>
		<title>Rodrigozferreira: Criou página com '&lt;source lang=&quot;c&quot;&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;string.h&gt; #include&lt;stdlib.h&gt;   void atualizar_onda(double u_new[],double u_now[],double u_old[],int jmax,double k...'</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Erro:_Leapfrog&amp;diff=2000&amp;oldid=prev"/>
		<updated>2018-01-24T17:51:30Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt; #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;math.h&amp;gt; #include&amp;lt;string.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt;   void atualizar_onda(double u_new[],double u_now[],double u_old[],int jmax,double k...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;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;string.h&amp;gt;&lt;br /&gt;
#include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void atualizar_onda(double u_new[],double u_now[],double u_old[],int jmax,double k);&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    FILE *arq;&lt;br /&gt;
    arq = fopen(&amp;quot;erro_leapfrog.dat&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    int i, j, jmax;&lt;br /&gt;
    &lt;br /&gt;
    //tamanho da corda: jmax-1&lt;br /&gt;
    jmax = 50;&lt;br /&gt;
    &lt;br /&gt;
    //u: posicao da corda&lt;br /&gt;
	/*    u_old em t-1    */&lt;br /&gt;
	/*    u_now em t      */&lt;br /&gt;
	/*    u_new em t+1    */&lt;br /&gt;
    //k = dt/dx (aqui, dx = 1, k=dt)&lt;br /&gt;
    double u_new[jmax], t, u_old[jmax], u_now[jmax], k, erro, tmax;&lt;br /&gt;
&lt;br /&gt;
	//tmax: tempo final&lt;br /&gt;
    tmax = 100;&lt;br /&gt;
&lt;br /&gt;
	//variamos o dt para fazer um grafico do erro em função de dt&lt;br /&gt;
    int n=1;&lt;br /&gt;
    while( n &amp;lt; 1200)&lt;br /&gt;
    {&lt;br /&gt;
        k = 0.001*n;&lt;br /&gt;
&lt;br /&gt;
		//condicao inicial&lt;br /&gt;
        for (j = 0 ; j &amp;lt; jmax ; j++)&lt;br /&gt;
        {&lt;br /&gt;
            u_now[j] = sin(M_PI*j/(jmax - 1));&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
		//condicao de contorno&lt;br /&gt;
		u_new[0] = 0;&lt;br /&gt;
		u_new[jmax-1] = 0;&lt;br /&gt;
		&lt;br /&gt;
		u_old[0] = 0;&lt;br /&gt;
		u_old[jmax-1] = 0;&lt;br /&gt;
		&lt;br /&gt;
		//calculo de u para t=-dt, utilizando o metodo de leapfrog - aqui usamos que du/dt = 0 em t=0&lt;br /&gt;
        for (j = 1; j&amp;lt; jmax-1 ; j++)&lt;br /&gt;
        {&lt;br /&gt;
            u_old[j] = u_now[j] + 0.5 * pow(k,2) * (u_now[j+1] - 2 * u_now[j] + u_now[j-1]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
		//atualizacao da onda&lt;br /&gt;
        for(t = 0 ; t &amp;lt; tmax ; t+=k)&lt;br /&gt;
        {&lt;br /&gt;
        	//para que o ultimo tempo em que se calcula a posicao seja tmax, independentemente do valor de dt&lt;br /&gt;
            if(t+k &amp;gt;tmax)&lt;br /&gt;
            {&lt;br /&gt;
                k = tmax - t;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            atualizar_onda(u_new,u_now,u_old,jmax,k);&lt;br /&gt;
&lt;br /&gt;
            memcpy(u_old,u_now, sizeof(double)*jmax);&lt;br /&gt;
            memcpy(u_now,u_new, sizeof(double)*jmax);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
		//calculo do erro&lt;br /&gt;
        erro = 0;&lt;br /&gt;
        for(j = 0 ; j &amp;lt; jmax ; j++)&lt;br /&gt;
        {&lt;br /&gt;
            double analitica = cos((M_PI*t)/(jmax - 1))*sin((M_PI*j)/(jmax - 1));&lt;br /&gt;
            erro += fabs(analitica - u_now[j]);&lt;br /&gt;
        }&lt;br /&gt;
        erro = erro/jmax;&lt;br /&gt;
        fprintf(arq,&amp;quot;%.12lf %.12lf\n&amp;quot;, n*0.001,erro);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        n++;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fclose(arq);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void atualizar_onda(double u_new_[],double u_now_[],double u_old_[],int jmax,double k)&lt;br /&gt;
{&lt;br /&gt;
    int j;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    for(j = 1 ; j &amp;lt; jmax-1 ; j++)&lt;br /&gt;
    {&lt;br /&gt;
        u_new_[j] =   2 * u_now_[j] - u_old_[j] + pow(k,2) *( u_now_[j+1] - 2 * u_now_[j] + u_now_[j-1] );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rodrigozferreira</name></author>
	</entry>
</feed>