Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- void verticalCrommer(int b){ //Metodo Euler-Crommer
- float v = 10;
- float v_exata = 0;
- float mod_diferenca;
- float y = 0;
- float a = 0;
- float dt = 0.001;
- int m = 1; // considerando a massa 1kg
- float energia_mecanica = 0;//
- int i;
- FILE *dados;
- FILE *analitico;
- dados = fopen("euler-crommer.txt", "a+");
- analitico = fopen("diferença - euler-crommer.txt", "a+");
- fprintf(dados, "posição \t velocidade\t energia mecânica\n");
- fprintf(analitico, "modulo da diferenca\n");
- for(i = 0; i <= 5000; i++){
- energia_mecanica = m*y + 0.5*m*v*v;
- fprintf(dados," %f\t%f\t%f\n", y, v, energia_mecanica);
- if(b == 1 || b == 2){
- a = -(1 + pow(fabs(v), b - 1)*v);
- }else if(b == 3){
- a = -1;
- }
- v = v + a*dt;
- y = y + v*dt;
- v_exata = 1 - exp(-dt*(i+1)) + 10*exp(-dt*(i+1)); // velocidade analitica. começa em i+1 pois i inicial é zero
- mod_diferenca = fabs(v - v_exata); // no gráfico colocamos o logaritimo de mod_diferença
- fprintf(analitico, " %f\n", mod_diferenca);
- }
- fprintf(dados, "\n");
- fclose(dados);
- fclose(analitico);
- }
- void verticalVerlet(int b){ //Metodo Verlet
- float v = 10;
- float v_exata = 0;
- float v_intermetdiario = 0;
- float a_antes = 0;
- float mod_diferenca;
- float y = 0;
- float a = 0;
- float dt = 0.001;
- int m = 1; // considerando a massa 1kg
- float energia_mecanica = 0;//
- int i;
- FILE *dados;
- FILE *analitico;
- dados = fopen("Verlet.txt", "a+");
- analitico = fopen("diferença - Verlet.txt", "a+");
- fprintf(dados, "posição \t velocidade\t energia mecânica\n");
- fprintf(analitico, "modulo da diferenca\n");
- for(i = 0; i <= 5000; i++){
- energia_mecanica = m*y + 0.5*m*v*v;
- fprintf(dados," %f\t%f\t%f\n", y, v, energia_mecanica);
- if(b == 1 || b == 2){
- a = -(1 + pow(fabs(v), b - 1)*v);
- }else if(b == 3){
- a = -1;
- }
- v = v + a*dt;
- y = y + v*dt + a*pow(dt,2)/2;
- if(b != 3){
- v_intermetdiario = v + a*dt;
- a_antes = a;
- a = -(1 + v_intermetdiario);
- v = v + ((a + a_antes)/2)*dt;
- }
- v_exata = 1 - exp(-dt*(i+1)) + 10*exp(-dt*(i+1)); // velocidade analitica. começa em i+1 pois i inicial é zero
- mod_diferenca = fabs(v - v_exata); // no gráfico colocamos o logaritimo de mod_diferença
- fprintf(analitico, " %f\n", mod_diferenca);
- }
- fprintf(dados, "\n");
- fclose(dados);
- fclose(analitico);
- }
- int main(){
- int b = 1;
- verticalCrommer(b);
- verticalVerlet(b);
- b = 2;
- verticalCrommer(b);
- verticalVerlet(b);
- b = 3;
- verticalCrommer(b);
- verticalVerlet(b);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement