JuliaMelkozerova

Leapfrog

Mar 25th, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.11 KB | None | 0 0
  1. #include <fstream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5. int main(){
  6.     ofstream Leap_Out("Leap_Out.txt", ios::out); //Файл для записи решений: первый столбец - время,
  7.                                                  //второй - численное решение, третий - аналитическое решение;
  8.     ofstream Abs_err("Abs_Err.txt", ios::out);   // Файл для записи ошибок: первый столбец - время
  9.                                                  // второй - ошибка вычислений
  10.     Leap_Out.setf(ios::fixed);
  11.     Abs_err.setf(ios::fixed);
  12.    
  13.     double U_0 = 173.0 / 30.0; // Начальное значение функции U
  14.     double Leap_Step = 0.2; // Шаг по времени
  15.     double Interval = 20; // Временной интервал
  16.    
  17.     double U_Euler = U_0;
  18.     double V_Euler = 0; // Начальное значение функции производной функци U (скорость)                                
  19.     double Euler_Step = Leap_Step / 5.0; // Шаг схемы Эйлера                      
  20.    
  21.     for(double t = 0; t < Leap_Step; t += Euler_Step){      
  22.         V_Euler += -1 * U_Euler * Euler_Step;
  23.         U_Euler += V_Euler * Euler_Step;
  24.     }
  25.    
  26.     //Схема с перешагиваем  
  27.     double U_Prev = U_0;                                    
  28.     double U_Now = U_Euler;  /*U_0*cos(Leap_Step); */                        
  29.     double U_Next;
  30.     double V_Prev = 0;
  31.     double V_Now = V_Euler;  /*-U_0*sin(Leap_Step); */
  32.     double V_Next;
  33.    
  34.     // Вывод в файл      
  35.     for (double t = Leap_Step; t <= Interval; t += Leap_Step) {
  36.        Abs_err << t << " " << fabs(U_0 * cos(t) - U_Now) << endl;
  37.        Leap_Out << t << " " << U_Now << " " << U_0 * cos(t) << endl;
  38.        
  39.        U_Next = U_Prev + V_Now * 2 * Leap_Step;
  40.        V_Next = V_Prev - U_Now * 2 * Leap_Step;
  41.        
  42.        U_Prev = U_Now;
  43.        U_Now = U_Next;
  44.        
  45.        V_Prev = V_Now;
  46.        V_Now = V_Next;
  47.     }
  48.    
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment