Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <stdio.h>
  4. #include <iostream>
  5. #include <fstream>
  6. #include <iomanip>
  7. #include <conio.h>
  8. #include <math.h>
  9. #include <string>
  10. using namespace std;
  11.  
  12. double E = 0.01; // точность, с которой методом бисекции вычисляется решение
  13.  
  14. double F1(double z)
  15. {
  16.     return z;
  17. }
  18. double F2(double x, double y, double z)
  19. {
  20.     return -2 * z + 7 * y + exp(x) * (4 * x * x - 8 * x - 6);
  21. }
  22.  
  23. void Runge_Kut4(double* X, double* Y1, double* Y2, double* Y3, double* Y4, double* Z1, double* Z2, double* Z3, double* Z4, double* Y, double* Z, double n, double h)
  24. {
  25.     for (int i = 1; i <= n; i++) {
  26.         X[i] = X[0] + i * h;
  27.         Z1[i] = h * F2(X[i - 1], Y[i - 1], Z[i - 1]);
  28.         Y1[i] = h * F1(Z[i - 1]);
  29.         Z2[i] = h * F2(X[i - 1] + h / 2.0, Y[i - 1] + Y1[i] / 2.0, Z[i - 1] + Z1[i] / 2.0);
  30.         Y2[i] = h * F1(Z[i - 1] + Z1[i] / 2.0);
  31.         Z3[i] = h * F2(X[i - 1] + h / 2.0, Y[i - 1] + Y2[i] / 2.0, Z[i - 1] + Z2[i] / 2.0);
  32.         Y3[i] = h * F1(Z[i - 1] + Z2[i] / 2.0);
  33.         Z4[i] = h * F2(X[i - 1] + h, Y[i - 1] + Y3[i], Z[i - 1] + Z3[i]);
  34.         Y4[i] = h * F1(Z[i - 1] + Z3[i]);
  35.         Z[i] = Z[i - 1] + (Z1[i] + 2 * Z2[i] + 2 * Z3[i] + Z4[i]) / 6.0;
  36.         Y[i] = Y[i - 1] + (Y1[i] + 2 * Y2[i] + 2 * Y3[i] + Y4[i]) / 6.0;
  37.     }
  38. }
  39.  
  40. int main()
  41. {
  42.     double a = 0, b = 1, h = 0.1, n = 10;
  43.     double a1 = 0, a2 = 5, a3; // коэффициенты альфа
  44.     double* X = new double[n];
  45.     double* Y1 = new double[n];
  46.     double* Y2 = new double[n];
  47.     double* Y3 = new double[n];
  48.     double* Y4 = new double[n];
  49.     double* Z1 = new double[n];
  50.     double* Z2 = new double[n];
  51.     double* Z3 = new double[n];
  52.     double* Z4 = new double[n];
  53.     double* Y = new double[n];
  54.     double* Z = new double[n];
  55.     X[0] = a; Y[0] = 1;
  56.     Z[0] = a1; // ТУТ АЛЬФА 1 = 0
  57.     Runge_Kut4(X, Y1, Y2, Y3, Y4, Z1, Z2, Z3, Z4, Y, Z, n, h);
  58.     ofstream F1;
  59.     F1.open("Finish_file 1.txt");
  60.     for (int i = 0; i <= n; i++)
  61.     {
  62.         F1 << X[i] << setw(30);
  63.         F1 << Y[i] << endl;
  64.     }
  65.     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 1 ВЫСТРЕЛ
  66.     double* Y_1 = new double[n];
  67.     Y_1[0] = 1;
  68.     Z[0] = a2; // ТУТ АЛЬФА 2 = 5
  69.     Runge_Kut4(X, Y1, Y2, Y3, Y4, Z1, Z2, Z3, Z4, Y_1, Z, n, h);
  70.     ofstream F2;
  71.     F2.open("Finish_file 2.txt");
  72.     for (int i = 0; i <= n; i++)
  73.     {
  74.         F2 << X[i] << setw(30);
  75.         F2 << Y_1[i] << endl;
  76.     }
  77.     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 2 ВЫСТРЕЛ
  78.     double* Y_2 = new double[n];
  79.     Y_2[0] = 1;
  80.     Y_2[10] = Y_1[10];
  81.     int k = 3; // это просто для названия файлов вывода счетчик
  82.     double d, kpp = Y[10];
  83.     /////////////////////////////////////////////////////////// ОСТАЛЬНЫЕ ВЫСТРЕЛЫ МЕТОДОМ БИСЕКЦИИ
  84.     while (fabs(Y_2[10])>E)
  85.     {
  86.         a3 = (a1 + a2) / 2;
  87.         Z[0] = a3;
  88.         Runge_Kut4(X, Y1, Y2, Y3, Y4, Z1, Z2, Z3, Z4, Y_2, Z, n, h);
  89.         ofstream F3;
  90.         F3.open("Finish_file " + to_string(k) + ".txt");
  91.         for (int i = 0; i <= n; i++)
  92.         {
  93.             F3 << X[i] << setw(30);
  94.             F3 << Y_2[i] << endl;
  95.         }
  96.         d = Y_2[10] * kpp;
  97.         if (d > 0) { a1 = a3; kpp = Y_2[10];}
  98.         if (d < 0) { a2 = a3; kpp = Y[10]; }
  99.         k++;
  100.     }
  101.     //print results
  102.     //for (int i = 0; i <= n; i++) { cout << "X[" << i << "]=" << X[i] << endl; }
  103.     //cout << endl;
  104.     //for (int i = 0; i <= n; i++) { cout << "Y[" << i << "]=" << Y_2[i] << endl; }
  105.     //cout << endl;
  106.     //for (int i = 0; i <= n; i++) { cout << "Z[" << i << "]=" << Z[i] << endl; }
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement