Oscilador.c
The MIT License (MIT)
The MIT License (MIT)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /* Autor: Ismael Felipe Ferreira dos Santos Instituto de Fisica, Universidade Federal de Alagoas E-mail: ismaellxd@gmail.com Copyright © 2019 MIT LICENCE GIT: https://ismaeldamiao.blogspot.com/fisicacomputacional Objetivo: Resolver o oscilador hamonico simples pelo metodo de Euler (cf. Moyses Vol2 p42) Escrito em: 02 de agosto de 2019 */ #include<stdio.h> int main(){ /* Condicoes de contorno */ double k = 1.; // Constante da mola double massa = 1.; // Massa oscilante double velocidade[2]; velocidade[0] = 0.; // Velocidade inicial double posicao[2]; posicao[0] = 5.;// Deslocamento do ponto de equilibrio da mola double omega2 = k/massa; double tempo = 1.e-6;/* Discretizacao dos pontos */ double iTempo, TempoFinal = 30.e6;//Graficar ate 30 segundos int ponto, TotalPontos = 400;//Quantidade de pontos que estarao no grafico double SaltoTempo = TempoFinal/(double)TotalPontos, TempoMem = 1.; FILE *DadosOscilador; DadosOscilador = fopen("DadosOscilador.dat", "w"); for(ponto = 1; ponto <= TotalPontos; ponto++){ for(iTempo = TempoMem; iTempo <= SaltoTempo*(double)ponto; iTempo++){ /* Calculo para a posicao em funcao do tempo */ posicao[1] = posicao[0] + tempo * velocidade[0]; /* Calculo para a velocidade em funcao do tempo */ velocidade[1] = velocidade[0] - omega2 * posicao[0] * tempo; /* Recursao */ posicao[0] = posicao[1]; velocidade[0] = velocidade[1]; } TempoMem = iTempo; fprintf(DadosOscilador, "%f %f %f\n", (iTempo-1.)*tempo, velocidade[1], posicao[1]); } return 0; } |