Advertisement
Tertius

Atividade 01

Aug 13th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void verticalCrommer(int b){ //Metodo Euler-Crommer
  6.     float v = 10;
  7.     float v_exata = 0;
  8.     float mod_diferenca;
  9.     float y = 0;
  10.     float a = 0;
  11.     float dt = 0.001;
  12.     int m = 1; // considerando a massa 1kg
  13.     float energia_mecanica = 0;//
  14.     int i;
  15.  
  16.     FILE *dados;
  17.     FILE *analitico;
  18.  
  19.     dados = fopen("euler-crommer.txt", "a+");
  20.     analitico = fopen("diferença - euler-crommer.txt", "a+");
  21.     fprintf(dados, "posição \t velocidade\t energia mecânica\n");
  22.     fprintf(analitico, "modulo da diferenca\n");
  23.  
  24.     for(i = 0; i <= 5000; i++){
  25.         energia_mecanica = m*y + 0.5*m*v*v;
  26.         fprintf(dados," %f\t%f\t%f\n", y, v, energia_mecanica);
  27.         if(b == 1 || b == 2){
  28.             a = -(1 + pow(fabs(v), b - 1)*v);
  29.         }else if(b == 3){
  30.             a = -1;
  31.         }
  32.         v = v + a*dt;
  33.         y = y + v*dt;
  34.  
  35.         v_exata = 1 - exp(-dt*(i+1)) + 10*exp(-dt*(i+1)); // velocidade analitica. começa em i+1 pois i inicial é zero
  36.         mod_diferenca = fabs(v - v_exata); // no gráfico colocamos o logaritimo de mod_diferença
  37.         fprintf(analitico, " %f\n", mod_diferenca);
  38.     }
  39.     fprintf(dados, "\n");
  40.     fclose(dados);
  41.     fclose(analitico);
  42. }
  43.  
  44. void verticalVerlet(int b){ //Metodo Verlet
  45.  
  46.     float v = 10;
  47.     float v_exata = 0;
  48.     float v_intermetdiario = 0;
  49.     float a_antes = 0;
  50.     float mod_diferenca;
  51.     float y = 0;
  52.     float a = 0;
  53.     float dt = 0.001;
  54.     int m = 1; // considerando a massa 1kg
  55.     float energia_mecanica = 0;//
  56.     int i;
  57.  
  58.     FILE *dados;
  59.     FILE *analitico;
  60.  
  61.     dados = fopen("Verlet.txt", "a+");
  62.     analitico = fopen("diferença - Verlet.txt", "a+");
  63.     fprintf(dados, "posição \t velocidade\t energia mecânica\n");
  64.     fprintf(analitico, "modulo da diferenca\n");
  65.  
  66.     for(i = 0; i <= 5000; i++){
  67.         energia_mecanica = m*y + 0.5*m*v*v;
  68.         fprintf(dados," %f\t%f\t%f\n", y, v, energia_mecanica);
  69.         if(b == 1 || b == 2){
  70.             a = -(1 + pow(fabs(v), b - 1)*v);
  71.         }else if(b == 3){
  72.             a = -1;
  73.         }
  74.         v = v + a*dt;
  75.         y = y + v*dt + a*pow(dt,2)/2;
  76.         if(b != 3){
  77.             v_intermetdiario = v + a*dt;
  78.             a_antes = a;
  79.             a = -(1 + v_intermetdiario);
  80.             v = v + ((a + a_antes)/2)*dt;
  81.         }
  82.  
  83.         v_exata = 1 - exp(-dt*(i+1)) + 10*exp(-dt*(i+1)); // velocidade analitica. começa em i+1 pois i inicial é zero
  84.         mod_diferenca = fabs(v - v_exata); // no gráfico colocamos o logaritimo de mod_diferença
  85.         fprintf(analitico, " %f\n", mod_diferenca);
  86.     }
  87.     fprintf(dados, "\n");
  88.     fclose(dados);
  89.     fclose(analitico);
  90. }
  91.  
  92. int main(){
  93.     int b = 1;
  94.  
  95.     verticalCrommer(b);
  96.     verticalVerlet(b);
  97.     b = 2;
  98.     verticalCrommer(b);
  99.     verticalVerlet(b);
  100.     b = 3;
  101.     verticalCrommer(b);
  102.     verticalVerlet(b);
  103.  
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement