Advertisement
Khristina

Спасите!!!

Apr 12th, 2019
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.64 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <string>
  5. #include <cstring>
  6. #include <math.h>
  7. #include <cstdlib>
  8. #include <ctime>
  9. #include <cmath>
  10. #include <algorithm>
  11. using namespace std;
  12.  
  13. double epsilonJ (double H, double Q, double betta)
  14. {
  15.     double epsilon;
  16.     epsilon = (H / 2.0) + (Q * 1.0 / (betta * betta));
  17.     return epsilon;
  18. }
  19.  
  20. double betta0J (double delta, double H, double P, double betta)
  21. {
  22.     double betta0;
  23.     betta0 = ((delta * H) + (2 * P)) / (2.0 * betta * betta);
  24.     //cout << '\a';
  25.     return betta0;
  26. }
  27.  
  28. double hi0J (double H, double Q, double r, double betta)
  29. {
  30.     double hi0;
  31.     hi0 = (H * H / 4.0) + (((H * Q) + (r * r)) / (betta * betta));
  32.     return hi0;
  33. }
  34.  
  35. double I3(double epsilon1, double deltaplus, double deltaminus, double zplus, double zminus)
  36. {
  37.     double I3;
  38.     if (abs(deltaplus) > pow(10, -10))
  39.     {
  40.         if (((epsilon1 * epsilon1) - (deltaplus * deltaminus)) > pow(10, -10)) //+
  41.         {
  42.             I3 = (log(abs(((deltaplus * zplus) + epsilon1 - sqrt((epsilon1 * epsilon1) - (deltaplus * deltaminus))) / (((deltaplus * zplus) + epsilon1 + sqrt((epsilon1 * epsilon1) - (deltaplus * deltaminus)))))) / (2 * sqrt((epsilon1 * epsilon1) - (deltaplus * deltaminus)))) - (log(abs(((deltaplus * zminus) + epsilon1 - sqrt((epsilon1 * epsilon1) - (deltaplus * deltaminus))) / (((deltaplus * zminus) + epsilon1 + sqrt((epsilon1 * epsilon1) - (deltaplus * deltaminus)))))) / (2 * sqrt((epsilon1 * epsilon1) - (deltaplus * deltaminus))));
  43.         }
  44.  
  45.         else if (((epsilon1 * epsilon1) - (deltaplus * deltaminus)) < pow(10, -10))
  46.         {
  47.             I3 = (atan(((deltaplus * zplus) + epsilon1) / (sqrt((deltaplus * deltaminus) - (epsilon1 * epsilon1)))) / sqrt((deltaplus * deltaminus) - (epsilon1 * epsilon1))) - (atan(((deltaplus * zminus) + epsilon1) / (sqrt((deltaplus * deltaminus) - (epsilon1 * epsilon1)))) / sqrt((deltaplus * deltaminus) - (epsilon1 * epsilon1)));
  48.         }
  49.  
  50.         else if (abs((epsilon1 * epsilon1) - (deltaplus * deltaminus)) <= pow(10, -10))
  51.         {
  52.             I3 = ((-1.0) / ((deltaplus * zplus) + epsilon1)) + (1.0 / (deltaplus * zminus + epsilon1));
  53.         }
  54.     }
  55.     else if (abs(deltaplus) <= pow(10, -10))
  56.     {
  57.         if (abs(epsilon1) > pow(10, -10))
  58.         {
  59.             I3 = (log(abs((2 * epsilon1 * zplus) + deltaminus)) / (2.0 * epsilon1)) - (log(abs((2 * epsilon1 * zminus) + deltaminus)) / (2 * epsilon1));
  60.         }
  61.         else
  62.         {
  63.             I3 = (zplus / deltaminus) - (zminus / deltaminus);
  64.         }
  65.     }
  66.     return I3;
  67. }
  68.  
  69. double I2(double deltaplus, double zplus, double zminus, double epsilon1, double deltaminus)
  70. {
  71.     double I;
  72.     I = I3(epsilon1, deltaplus, deltaminus, zplus, zminus);
  73.     double I2;
  74.     //if (deltaplus != 0)
  75.     //{
  76.         I2 = ((zplus - (epsilon1 * log(abs((deltaplus * zplus * zplus) + (2 * epsilon1 * zplus) + deltaminus)) / deltaplus) - (zminus - (epsilon1 * log(abs((deltaplus * zminus * zminus) + (2 * epsilon1 * zminus) + deltaminus)) / deltaplus))) / deltaplus) + (2 * epsilon1 * epsilon1 - (deltaplus * deltaminus)) * I / (deltaplus * deltaplus);
  77.     /*}
  78.     else
  79.     {
  80.         I2 = 0;
  81.     } */
  82.     return I2;
  83. }
  84.  
  85. double I4(double deltaminus, double zplus, double zminus, double epsilon1, double deltaplus)  
  86. {
  87.     double I4;
  88.     double I;
  89.     I = I3(epsilon1, deltaplus, deltaminus, zplus, zminus);
  90.     if (abs(deltaplus) > pow(10,-10))
  91.     {
  92.         //if (deltaminus != 0)
  93.         //{
  94.             I4 = ((((-1.0) / zplus) - (epsilon1 * log(zplus * zplus / abs((deltaplus * zplus * zplus) + (2 * epsilon1 * zplus) + deltaminus)) / deltaminus) - ((-1.0) / zminus) - (epsilon1 * log(zminus * zminus / abs((deltaplus * zminus * zminus) + (2 * epsilon1 * zminus) + deltaminus)) / deltaminus)) / deltaminus) + (((2 * epsilon1 * epsilon1) - (deltaplus * deltaminus)) * I / (deltaminus * deltaminus));
  95.         /*}
  96.         else
  97.         {
  98.             I4 = 0;
  99.         } */
  100.     }
  101.     else
  102.     {
  103.         if (abs(epsilon1) > pow(10,-10))
  104.         {
  105.             I4 = (((-1) / (deltaminus * zplus)) + ((2 * epsilon1 * log(abs(((2 * epsilon1 * zplus) + deltaminus) / zplus))) / (deltaminus * deltaminus))) - (((-1) / (deltaminus * zminus)) + (2 * epsilon1 * log(abs((2 * epsilon1 * zminus + deltaminus) / zminus))) / (deltaminus * deltaminus));
  106.         }
  107.  
  108.         else
  109.         {
  110.             I4 = ((-1.0) / (deltaminus * zplus)) + (1.0 / (deltaminus * zminus));
  111.         }
  112.     }
  113.  
  114.     return I4;
  115. }
  116.  
  117. double I1(double deltaplus, double hi1, double deltaminus, double zplus, double zminus, double epsilon1)
  118. {
  119.     double I1;
  120.     double II, III, IIII;
  121.     II = I2(deltaplus, zplus, zminus, epsilon1, deltaminus);
  122.     III = I3(epsilon1, deltaplus, deltaminus, zplus, zminus);
  123.     IIII = I4(deltaminus, zplus, zminus, epsilon1, deltaplus);
  124.     I1 = (deltaplus * II / 2.0) - (hi1 * III) + (deltaminus * IIII / 2.0);
  125.     return I1;
  126. }
  127.  
  128. double I5(double U1, double U2, double k1, double k2)
  129. {
  130.     double I5;
  131.     if (abs(k1) > pow(10,-10))
  132.     {
  133.         I5 = (-U2 + (U2 + (k2 / k1)) * log(abs(k1 * U2 + k2))) - (-U1 + (U1 + (k2 / k1)) * log(abs(k1 * U1 + k2)));
  134.     }
  135.     else
  136.     {
  137.         I5 = (U2 - U1) * log(abs(k2));
  138.     }
  139.     return I5;
  140. }
  141.  
  142. int main()
  143. {
  144.     int M = 25, N = 25;
  145.     long double V0, S0 = 0;
  146.     long double p = 0;
  147.     const double pi = 3.14159265358979;
  148.     double x1, x2, x3, x, y1, y2, y3, y11, y21, y31, h = 2.0 * pi / N, H = pi / (1.0 * M), etta, R;
  149.     double A = N * h, B = M * H;
  150.     double tetta, betta, y1prv, y2prv, y3prv, alfa, y1pru, y2pru, y3pru, delta;
  151.     double P, Q, r1, r2, r3, r;
  152.     double delta0, alfa0, epsilon, betta0, hi0, hi1;
  153.     double deltaplus, deltaminus, delta1, epsilon1;
  154.     double IH, zminus, zplus, IminusH;
  155.     setlocale(LC_ALL, "Rus");
  156.     for (int i = 1; i < 6; i++)
  157.     {
  158.         R = 1 - pow(10, (-1)*i);
  159.         cout << "R=" << R << endl;
  160.         for (int q = 0; q <= 2; q++)
  161.         {
  162.             double uq = pi * q / (1.0 * N);
  163.  
  164.             for (int l = 0; l <= 2 * M; l++)
  165.             {
  166.                 double vl = pi * l / (2.0 * M);
  167.                 y11 = sin(vl)*cos(uq); // !
  168.                 y21 = sin(vl)*sin(uq); // !
  169.                 y31 = cos(vl); // !
  170.                 x1 = y11 * R;
  171.                 x2 = y21 * R;
  172.                 x3 = y31 * R;
  173.                 x = sqrt((x1 * x1) + (x2 * x2) + (x3 * x3));
  174.  
  175.                 for (int m = 0; m < M; m++)
  176.                 {
  177.                     double vm = (m + 0.5)*H;
  178.                     for (int n = 0; n < N; n++)
  179.                     {
  180.                         double un = (n + 0.5)*h;
  181.                         y1 = sin(vm)*cos(un);
  182.                         y2 = sin(vm)*sin(un);
  183.                         y3 = cos(vm);
  184.                         y1prv = cos(un) * cos(vm);
  185.                         y2prv = sin(un) * cos(vm);
  186.                         y3prv = (-1)*sin(vm);
  187.                         y1pru = (-1) * sin(un) * sin(vm);
  188.                         y2pru = sin(vm) * cos(un);
  189.                         y3pru = 0;
  190.                         r1 = y1 - x1;
  191.                         r2 = y2 - x2;
  192.                         r3 = y3 - x3;
  193.                         r = sqrt(r1 * r1 + r2 * r2 + r3 * r3);
  194.                         //cout << "r=" << r << endl;
  195.                         betta = sqrt((y1prv * y1prv) + (y2prv * y2prv) + (y3prv * y3prv));
  196.                         etta = sin(vm);
  197.                         alfa = sqrt((y1pru * y1pru) + (y2pru * y2pru) + (y3pru * y3pru));
  198.                         delta = (y1pru * y1prv) + (y2pru * y2prv) + (y3pru * y3prv);
  199.                         P = (r1 * y1pru) + (r2 * y2pru) * (r3 * y3pru);
  200.                         Q = (r1 * y1prv) + (r2 * y2prv) + (r3 * y3prv);
  201.                         delta0 = delta * 1.0 / (betta * betta);
  202.                         alfa0 = abs(alfa / betta); //!
  203.                         epsilon = epsilonJ(H, Q, betta);
  204.                         betta0 = betta0J(delta, H, P, betta);
  205.                         hi0 = hi0J(H, Q, r, betta);
  206.                         hi1 = sqrt(hi0 - (betta0 * betta0 / (alfa0 * alfa0)));
  207.                         epsilon1 = epsilon - (delta0 * betta0 / (alfa0 * alfa0));
  208.                         delta1 = delta0 * hi1 / alfa0;
  209.                         deltaplus = hi1 + delta1;
  210.                         deltaminus = hi1 - delta1;
  211.                         if (abs(hi1) > pow(10,-10))
  212.                         {
  213.                             //IH = 0;
  214.                             double dzettaplus = ((alfa0 * h / 2) + (betta0 / alfa0)) / hi1;
  215.                             double dzettaminus = (((-1) * alfa0 * h / 2) + (betta0 / alfa0)) / hi1;
  216.                             zplus = dzettaplus + sqrt((dzettaplus * dzettaplus) + 1);
  217.                             zminus = dzettaminus + sqrt((dzettaminus * dzettaminus) + 1);
  218.                             IH = hi1 * (((dzettaplus * log(abs(epsilon1 + (delta1 * dzettaplus) + hi1 * sqrt((dzettaplus * dzettaplus) + 1))) - (dzettaminus * log(abs(epsilon1 + (delta1 * dzettaminus) + hi1 * sqrt((dzettaminus * dzettaminus) + 1))))))  - I1(deltaplus, hi1, deltaminus, zplus, zminus, epsilon1) )/ alfa0;
  219.                         }
  220.                         else if (abs(hi1) <= pow(10,-10))
  221.                         {
  222.                             //IH = 0;
  223.                             if (-h / 2 < (-betta0 / (alfa0 * alfa0)) && (-betta0 / (alfa0 * alfa0)) < h / 2)
  224.                             {
  225.                                 IH = I5(-h / 2, (-betta0 / (alfa0 * alfa0)), delta0 - alfa0, epsilon - (betta0 / alfa0)) + I5((-betta0 / (alfa0 * alfa0)), h / 2, delta0 + alfa0, epsilon + (betta0 / alfa0));
  226.                             }
  227.                             else if ((-betta0 / (alfa0 * alfa0)) >= h / 2)
  228.                             {
  229.                                 IH = I5(-h / 2, h / 2, delta0 - alfa0, epsilon - (betta0 / alfa0));
  230.                             }
  231.                             else if ((-betta0 / (alfa0 * alfa0)) <= h / 2)
  232.                             {
  233.                                 IH = I5(-h / 2, h / 2, delta0 + alfa0, epsilon + (betta0 / alfa0));
  234.                             }
  235.                         }
  236.                         epsilon = epsilonJ((-1) * H, Q, betta);
  237.                         betta0 = betta0J(delta, (-1) * H, P, betta);
  238.                         hi0 = hi0J((-1) * H, Q, r, betta);
  239.                         hi1 = sqrt(hi0 - (betta0 * betta0 / (alfa0 * alfa0)));
  240.                         epsilon1 = epsilon - (delta0 * betta0 / (alfa0 * alfa0));
  241.                         delta1 = delta0 * hi1 / alfa0;
  242.                         deltaplus = hi1 + delta1;
  243.                         deltaminus = hi1 - delta1;
  244.                         if (abs(hi1) > pow(10, -10))
  245.                         {
  246.                             //IminusH = 1;
  247.                             double dzettaplus = ((alfa0 * h / 2) + (betta0 / alfa0)) / hi1;
  248.                             double dzettaminus = (((-1) * alfa0 * h / 2) + (betta0 / alfa0)) / hi1;
  249.                             zplus = dzettaplus + sqrt(dzettaplus * dzettaplus + 1);
  250.                             zminus = dzettaminus + sqrt(dzettaminus * dzettaminus + 1);
  251.                             IminusH = hi1 * ((dzettaplus * (log(abs(epsilon1 + (delta1 * dzettaplus) + hi1 * sqrt((dzettaplus * dzettaplus) + 1)))) - (dzettaminus * log(abs(epsilon1 + (delta1 * dzettaminus) + hi1 * sqrt((dzettaminus * dzettaminus) + 1))))) - I1(deltaplus, hi1, deltaminus, zplus, zminus, epsilon1)) / alfa0;
  252.                         }
  253.                         else if (abs(hi1) <= pow(10, -10))
  254.                         {
  255.                             //IminusH = 0;
  256.                             if (-h / 2 < (-betta0 / (alfa0 * alfa0)) && (-betta0 / (alfa0 * alfa0)) < h / 2)
  257.                             {
  258.                                 IminusH = I5(-h / 2, (-betta0 / (alfa0 * alfa0)), delta0 - alfa0, epsilon - (betta0 / alfa0)) + I5((-betta0 / (alfa0 * alfa0)), h / 2, delta0 + alfa0, epsilon + (betta0 / alfa0));
  259.                             }
  260.                             else if ((-betta0 / (alfa0 * alfa0)) >= h / 2)
  261.                             {
  262.                                 IminusH = I5(-h / 2, h / 2, delta0 - alfa0, epsilon - (betta0 / alfa0));
  263.                             }
  264.                             else if ((-betta0 / (alfa0 * alfa0)) <= h / 2)
  265.                             {
  266.                                 IminusH = I5(-h / 2, h / 2, delta0 + alfa0, epsilon + (betta0 / alfa0));
  267.                             }
  268.                             //cout << '\a';
  269.                         }
  270.                         //xminusy = pow(pow(x1 - y1, 2) + pow(x2 - y2, 2) + pow(x3 - y3, 2), 0.5); //r
  271.                         tetta = 1.0 * (IH - IminusH)/ betta;
  272.                         S0 = S0 + (etta * tetta);
  273.                     }
  274.                 }
  275.                 if (abs(x) < 1)
  276.                 {
  277.                     V0 = 4 * pi;
  278.                 }
  279.                 else if (abs(x) > 1)
  280.                 {
  281.                     V0 = 4.0 * pi / abs(x);
  282.                 }
  283.                 //cout << S0 << endl;
  284.                 //cout << V0 << endl;
  285.                 long double maximum = max(p, abs(S0 - V0) * 1.0 / V0);
  286.                 S0 = 0;
  287.                 p = maximum;
  288.             }
  289.         }
  290.         cout << "Относительная погрешность=" << p << endl;
  291.         cout << "______________________" << endl;
  292.     }
  293.  
  294.     return 0;
  295. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement