codisinmyvines

AntiKonuhov

Mar 15th, 2021 (edited)
595
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.73 KB | None | 0 0
  1. /*Метод Эйлера*/
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <iomanip>
  6. using namespace std;
  7.  
  8. void priblizhennoe(ofstream&out, double N, double h, double t0, double U0)
  9. {
  10.     double t, u, f;
  11.     t = t0;
  12.     u = U0;
  13.     //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
  14.     out << u << "\n";
  15.     for (int i = 0; i < N; i++)
  16.     {
  17.         f = (4 / (t * t)) - (u / t) - (u * u);
  18.         u = u + h * f;
  19.         t = t + h;
  20.         //cout << "При t" << i + 1 << " = " << t << " U" << i+1 << " = " << u << "\n";
  21.         out << fixed << u << "\n";
  22.     }
  23. }
  24. void tochnoe(ofstream&out, double N, double h, double t0, double U0, double C)
  25. {
  26.     double t, u;
  27.     t = t0;
  28.     u = U0;
  29.     //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
  30.     out << setprecision(16);
  31.     out << u << "\n";
  32.     for (int i = 0; i < N; i++)
  33.     {
  34.         t = t + h;
  35.         u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
  36.         //cout << "При t" << i + 1 << " = " << t << " U" << i+1 << " = " << u << "\n";
  37.         out << u << "\n";
  38.     }
  39. }
  40. int main()
  41. {
  42.  
  43.     ofstream out("pribresh.txt");
  44.     ofstream outt("tochnoee.txt");
  45.     setlocale(LC_ALL, "RU");
  46.     double t0, T, h, N, U0;
  47.     cout << "Введите область [to,T]:\n";
  48.     cin >> t0 >> T;
  49.     cout << "Введите N и U0: ";
  50.     cin >> N >> U0;
  51.     h = (T - t0) / N;
  52.     double C;
  53.     C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
  54.     //cout << "Приближенные решения: \n";
  55.     priblizhennoe(out, N, h, t0, U0);
  56.     //cout << "Точные решения: \n";
  57.     tochnoe(outt, N, h, t0, U0, C);
  58.     out.close();
  59.     outt.close();
  60.     ifstream inout("pribresh.txt");
  61.     ifstream inoutt("tochnoee.txt");
  62.     ofstream outn100("n100.txt");
  63.     ofstream outtn100("tochn100.txt");
  64.     string s, s1;
  65.     while (inout.peek() != EOF)
  66.     {
  67.         inout >> s;
  68.         inoutt >> s1;
  69.         for (int i = 0; i < s.length(); i++)
  70.         {
  71.             if (s[i] == '.')
  72.                 s[i] = ',';
  73.             if (s1[i] == '.')
  74.                 s1[i] = ',';
  75.         }
  76.         outn100 << s << "\n";
  77.         outtn100 << s1 << "\n";
  78.     }
  79.     inout.close();
  80.     inoutt.close();
  81.     outn100.close();
  82.     outtn100.close();
  83.    
  84.     return 0;
  85. }
  86. /*Метод Рунге-Кутта*/
  87. #include <iostream>
  88. #include <fstream>
  89. #include <string>
  90. #include <iomanip>
  91. using namespace std;
  92.  
  93. double function(double t, double u)
  94. {
  95.     return 4 / (t * t) - (u / t) - (u * u);
  96. }
  97. void priblizhennoe(ofstream&out, double h, double N, double t0, double U0)
  98. {
  99.     double t, u, f, k1, k2, k3, k4;
  100.     u = U0;
  101.     t = t0;
  102.     //cout << "Для t0 = " << t << " U0 = " << u << "\n";
  103.     out << setprecision(16);
  104.     out << u << "\n";
  105.     for (int i = 0; i < N; i++)
  106.     {
  107.         k1 = function(t, u);
  108.         k2 = function(t + h / 2, u + (h * k1) / 2);
  109.         k3 = function(t + h / 2, u + (h * k2) / 2);
  110.         k4 = function(t + h, u + h * k3);
  111.         u += h * (k1 + (2 * k2) + (2 * k3) + k4) / 6;
  112.         t += h;
  113.         //cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " равно: " << u << "\n";
  114.         out << u << "\n";
  115.     }
  116. }
  117. void tochnoe(double N, double h, double t0, double U0, double C)
  118. {
  119.     double t, u;
  120.     t = t0;
  121.     u = U0;
  122.     cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
  123.     for (int i = 0; i < N; i++)
  124.     {
  125.         t = t + h;
  126.         u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
  127.         cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
  128.     }
  129. }
  130. int main()
  131. {
  132.     ofstream out("pribresh.txt");
  133.     setlocale(LC_ALL, "RU");
  134.     double t0, T, h, N, U0;
  135.     cout << "Введите область [to,T]:\n";
  136.     cin >> t0 >> T;
  137.     cout << "Введите N и U0: ";
  138.     cin >> N >> U0;
  139.     h = (T - t0) / N;
  140.     //double C;
  141.     //C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
  142.     //cout << "Приближенные решения: \n";
  143.     priblizhennoe(out, h, N, t0, U0);
  144.     out.close();
  145.     //cout << "Точные решения: \n";
  146.     //tochnoe(N, h, t0, U0);
  147.     ifstream inout("pribresh.txt");
  148.     ofstream outn100("n100.txt");
  149.     string s;
  150.     while (inout.peek() != EOF)
  151.     {
  152.         inout >> s;
  153.         for (int i = 0; i < s.length(); i++)
  154.             if (s[i] == '.')
  155.                 s[i] = ',';
  156.         outn100 << s << "\n";
  157.     }
  158.     inout.close();
  159.     outn100.close();
  160.  
  161.     return 0;
  162. }
  163. /*Метод посл. приближений*/
  164. #include <iostream>
  165. #include <fstream>
  166. #include <string>
  167. #include <iomanip>
  168. #define EPS 0.000001
  169. using namespace std;
  170. double f(double t, double u)
  171. {
  172.     return 4 / (t * t) - u / t - (u * u);
  173. }
  174. void pribl(ofstream&out, double U0, double t0, int N, double h)
  175. {
  176.     double u, un, uo, t, tnext;
  177.     bool a;
  178.     int maxl = 1, l; //макс кол-во итераций
  179.     uo = u = U0;
  180.     t = t0;
  181.     out << setprecision(16);
  182.     out << u << "\n";
  183.     //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
  184.     for (int i = 0; i < N; i++)
  185.     {
  186.         tnext = t + h;
  187.         un = u + h * (f(t, u) + f(tnext, uo)) / 2;
  188.         a = true;
  189.         l = 1;
  190.         while (abs(un - uo) > EPS)
  191.         {
  192.             uo = un;
  193.             un = u + h * (f(t, u) + f(tnext, uo)) / 2;
  194.             a = false;
  195.             l++;
  196.         }
  197.         if (l > maxl)
  198.             maxl = l;
  199.         if (a)
  200.             u = un;
  201.         else
  202.             u = uo;
  203.         t = tnext;
  204.         //cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
  205.         out << u << "\n";
  206.     }
  207.     out << "Макс кол-во итераций = " << maxl;
  208. }
  209. void tochnoe(double N, double h, double t0, double U0, double C)
  210. {
  211.     double t, u;
  212.     t = t0;
  213.     u = U0;
  214.     cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
  215.     for (int i = 0; i < N; i++)
  216.     {
  217.         t = t + h;
  218.         u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
  219.         cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
  220.     }
  221. }
  222. int main()
  223. {
  224.     setlocale(LC_ALL, "RU");
  225.     double t0, T, h, U0;
  226.     int N;
  227.     cout << "Введите область [to,T]:\n";
  228.     cin >> t0 >> T;
  229.     cout << "Введите N и U0: ";
  230.     cin >> N >> U0;
  231.     h = (T - t0) / N;
  232.     double C;
  233.     C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
  234.     ofstream out("pribresh.txt");
  235.     //cout << "Приближенные решения:\n";
  236.     pribl(out, U0, t0, N, h);
  237.     //cout << "\n";
  238.     //cout << "Точные решения:\n";
  239.     //tochnoe(N, h, t0, U0);
  240.     out.close();
  241.     ifstream in("pribresh.txt");
  242.     ofstream outn("n100.txt");
  243.     string s;
  244.     while (in.peek() != EOF)
  245.     {
  246.         in >> s;
  247.         for (int i = 0; i < s.length(); i++)
  248.             if (s[i] == '.')
  249.                 s[i] = ',';
  250.         outn << s << "\n";
  251.     }
  252.     in.close();
  253.     outn.close();
  254.     return 0;
  255.    
  256. }
  257. /*Метод предиктор-корректор*/
  258. #include <iostream>
  259. #include <fstream>
  260. #include <string>
  261. #include <iomanip>
  262. using namespace std;
  263.  
  264. double f(double t, double u)
  265. {
  266.     return 4 / (t * t) - u / t - (u * u);
  267. }
  268. void pribl(ofstream&out, double u0, double t0, double h, int N)
  269. {
  270.     double ue, u, t, tnext;
  271.     u = u0;
  272.     t = t0;
  273.     //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
  274.     out << setprecision(16);
  275.     out << u << "\n";
  276.     for (int i = 0; i < N; i++)
  277.     {
  278.         ue = u + h * f(t, u);
  279.         tnext = t + h;
  280.         u = u + h * (f(t, u) + f(tnext, ue)) / 2;
  281.         t = tnext;
  282.         //cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
  283.         out << u << "\n";
  284.     }
  285. }
  286. void tochnoe(double N, double h, double t0, double U0, double C)
  287. {
  288.     double t, u;
  289.     t = t0;
  290.     u = U0;
  291.     cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
  292.     for (int i = 0; i < N; i++)
  293.     {
  294.         t = t + h;
  295.         u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
  296.         cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
  297.     }
  298. }
  299. int main()
  300. {
  301.     setlocale(LC_ALL, "RU");
  302.     double t0, T, h, U0;
  303.     int N;
  304.     cout << "Введите область [to,T]:\n";
  305.     cin >> t0 >> T;
  306.     cout << "Введите N и U0: ";
  307.     cin >> N >> U0;
  308.     h = (T - t0) / N;
  309.     double C;
  310.     C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
  311.     ofstream out("pribresh.txt");
  312.     //cout << "Приближенные решения:\n";
  313.     pribl(out, U0, t0, h, N);
  314.     //cout << "\n";
  315.     //cout << "Точные решения:\n";
  316.     //tochnoe(N, h, t0, U0);
  317.     out.close();
  318.     ifstream in("pribresh.txt");
  319.     ofstream outn("n100.txt");
  320.     string s;
  321.     while (in.peek() != EOF)
  322.     {
  323.         in >> s;
  324.         for (int i = 0; i < s.length(); i++)
  325.             if (s[i] == '.')
  326.                 s[i] = ',';
  327.         outn << s << "\n";
  328.     }
  329.     in.close();
  330.     outn.close();
  331.  
  332.     return 0;
  333. }
  334. /*Метод Ньютона*/
  335. #include <iostream>
  336. #include <fstream>
  337. #include <string>
  338. #include <iomanip>
  339. #define eps 0.000001
  340. using namespace std;
  341.  
  342. double f(double t, double u)
  343. {
  344.     return 4 / (t * t) - u / t - u * u;
  345. }
  346. double df(double t, double u)
  347. {
  348.     return -1 / t - 2 * u;
  349. }
  350. double F(double t, double y, double x, double h)
  351. {
  352.     return x - y - (h / 2) * (f(t, y) + f(t + h, x));
  353. }
  354. double dF(double t, double x, double h)
  355. {
  356.     return 1 - (h / 2) * df(t + h, x);
  357. }
  358. void priblizhennoe(ofstream&out, double t0, double U0, double h, int N)
  359. {
  360.     double y, t, x_prev, x_curr;
  361.     y = U0;
  362.     t = t0;
  363.     bool a;
  364.     int l, maxl = 1;
  365.     //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << y << "\n";
  366.     out << setprecision(16);
  367.     out << y << "\n";
  368.     for (int i = 0; i < N; i++)
  369.     {
  370.         x_curr = 0;
  371.         x_prev = t;
  372.         a = true;
  373.         l = 0;
  374.         while (a)
  375.         {
  376.             x_curr = x_prev - F(t, y, x_prev, h) / dF(t, x_prev, h);
  377.             l++;
  378.             if (abs(x_curr - x_prev) < eps)
  379.                 a = false;
  380.             x_prev = x_curr;
  381.         }
  382.         t += h;
  383.         y = x_curr;
  384.         if (l > maxl)
  385.             maxl = l;
  386.         //cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << y << "\n";
  387.         out << y << "\n";
  388.     }
  389.     out << "Макс кол-во итераций = " << maxl;
  390. }
  391. void tochnoe(int N, double h, double t0, double U0, double C)
  392. {
  393.     double t, u;
  394.     t = t0;
  395.     u = U0;
  396.     cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
  397.     for (int i = 0; i < N; i++)
  398.     {
  399.         t = t + h;
  400.         u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
  401.         cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
  402.     }
  403. }
  404. int main()
  405. {
  406.     setlocale(LC_ALL, "RU");
  407.     double t0, T, U0, h;
  408.     int N;
  409.     cout << "Введите t0 и T: \n";
  410.     cin >> t0 >> T;
  411.     cout << "Введите N и U0: \n";
  412.     cin >> N >> U0;
  413.     h = (T - t0) / N;
  414.     double C;
  415.     C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
  416.    // cout << "Приближенные решения: \n";
  417.     ofstream out("pribresh.txt");
  418.     priblizhennoe(out, t0, U0, h, N);
  419.     //cout << "\n";
  420.    // cout << "Точные решения: \n";
  421.     //tochnoe(N, h, t0, U0);
  422.     out.close();
  423.     ifstream in("pribresh.txt");
  424.     ofstream outn("n100.txt");
  425.     string s;
  426.     while (in.peek() != EOF)
  427.     {
  428.         in >> s;
  429.         for (int i = 0; i < s.length(); i++)
  430.             if (s[i] == '.')
  431.                 s[i] = ',';
  432.         outn << s << "\n";
  433.     }
  434.     in.close();
  435.     outn.close();
  436.  
  437.     return 0;
  438. }
Add Comment
Please, Sign In to add comment