Script: mudanças entre as edições
Ir para navegação
Ir para pesquisar
(Criou página com '<nowiki> #include<stdio.h> #include<stdlib.h> #include<math.h> #include"gauss.h"//Biblioteca para gerar pulso gaussiano inicial. #define dx 0.1 //Tamanho de passo dx. #defin...') |
Sem resumo de edição |
||
Linha 1: | Linha 1: | ||
< | <source lang="c"> | ||
#include<stdio.h> | #include<stdio.h> | ||
#include<stdlib.h> | #include<stdlib.h> | ||
Linha 59: | Linha 58: | ||
} | } | ||
</source> | |||
</ |
Edição atual tal como às 16h01min de 26 de janeiro de 2018
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include"gauss.h"//Biblioteca para gerar pulso gaussiano inicial.
#define dx 0.1 //Tamanho de passo dx.
#define v 1.0 //Velocidade do pulso.
#define L 100 //Tamanho da corda.
#define t_max 300 //Tempo de simulação.
void propagate();
void main()
{
propagate();
}
void propagate()
{
int i, n;
double u[t_max][L], dt, alpha; //u[t][x] é o deslocamento u(x,t) da corda na posição x e no instante t.
dt = dx/v;
for(i = 0 ; i < t_max; i++)//Condições de contorno fixas. Corda presa nas extremidades.
{
u[i][0] = 0.0;
u[i][L-1] = 0.0;
}
for(n = 0 ; n < 2 ; n++)//Pulso gaussiano inicial.
{
for(i = 1 ; i < L-1 ; i++)
{
u[n][i] = gaussiana(i);
}
}
alpha = v * dt/dx;
for(n = 1; n < t_max ; n++)//Iterações do programa baseado no algoritmo Staggered-Leapfrog.
{
for(i = 1 ; i < L-1 ; i++)
{
u[n+1][i] = alpha*alpha*u[n][i+1] + 2.0*u[n][i]*(1.0 - alpha*alpha) + alpha*alpha*u[n][i-1] - u[n-1][i];
}
printf("set title 'Tempo = %d'\nset xrange [%d:%d]\nset yrange [%lf:%lf]\npl \'-' w lp pt 7 ps 0.8 \n", n,0,L,-1.0,1.0);
for(i = 0; i<L; i++)
printf("%d\t%lf\n",i,u[n+1][i]);
printf("e\npause 0.05\n");
/*
As últimas 4 linhas do programa (4 linhas acima) tem a função de graficar os dados estimados no gnuplot a cada iteração. Com uma pausa de 0.05 o comando "pl \'-'" indica que um conjunto de dados está para ser plotado.
*/
}
}