Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.29 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #include <malloc.h>
  6.  
  7.  
  8.  
  9. long double eps1 = 0.000000000001;
  10.  
  11. long double pol_1(long double x) {
  12.     return cos(x) - x;
  13. }
  14. //полином с косинусом
  15.  
  16. long double diff1_pol_1(long double x) {
  17.     return (-sin(x)) - 1;
  18. }
  19. //первая производная полинома с косинусом
  20.  
  21. long double diff2_pol_1(long double x) {
  22.     return -cos(x);
  23. }
  24. //вторая производная полинома с косинусом
  25.  
  26. long double pol_2(long double x) {
  27.     return pow(x, 3) - 1.44*pow(x, 2) + 0.6203*x - 0.07866;
  28. }
  29. //полином 3-й степени
  30.  
  31. long double diff1_pol_2(long double x) {
  32.     return 3*pow(x, 2) - 2*1.44*x + 0.6203;
  33. }
  34. //первая производная полинома 3-й степени
  35.  
  36. long double diff2_pol_2(long double x) {
  37.     return 6 * x - 2 * 1.44;
  38. }
  39. //вторая производная полинома 3-й степени
  40.  
  41. long double pol_3(long double x) {
  42.     return exp(x) - 1.59*x - 0.945;
  43. }
  44. //полином с exp
  45.  
  46. long double diff1_pol_3(long double x) {
  47.     return exp(x) - 1.59;
  48. }
  49. //первая производная полинома с exp
  50.  
  51. long double diff2_pol_3(long double x) {
  52.     return exp(x);
  53. }
  54. //вторая производная полинома с exp
  55.  
  56. long double Biss_pol_1(long double a, long double b,FILE *f){
  57.  
  58.     int i = 0;
  59.     long double mid;
  60.     while ((b - a) > eps1) {
  61.         mid = (a + b) / 2;
  62.         if (pol_1(mid) * pol_1(b) < 0) {
  63.             a = mid;
  64.             i++;
  65.         }
  66.         else {
  67.             b = mid;
  68.             i++;
  69.         }
  70.     }
  71.     fprintf(f,"    %.15lf  steps  %d", mid, i);
  72.     return mid;
  73. }
  74. // метод биссекции для полинома с косинусом
  75.  
  76. long double Chord_pol_1(long double a, long double b,FILE *f) {
  77.     long double x[10000];
  78.     int i = 1;
  79.     if (pol_1(a) > 0) {
  80.         x[0] = a;
  81.         x[1] = a - pol_1(a)*(b-a)/ (pol_1(b)-pol_1(a));
  82.         while (fabs(x[i] - x[i-1]) > eps1) {
  83.             x[i + 1] = x[i] - (pol_1(x[i])*(x[i] - a)) / (pol_1(x[i]) - pol_1(a));
  84.             i++;
  85.         }
  86.     }
  87.     else {
  88.         x[0] = b;
  89.         x[1] = a - pol_1(a)*(b - a) / (pol_1(b) - pol_1(a));
  90.         while (fabs(x[i + 1] - x[i]) > eps1) {
  91.             x[i + 1] = x[i] - (pol_1(x[i])*(b - x[i])) / (pol_1(b) - pol_1(x[i]));
  92.             i++;
  93.         }
  94.     }
  95.     fprintf(f,"    %.15lf  steps  %d", x[i], i);
  96.     return x[i];
  97. }
  98. //метод хорд для полинома с косинусом
  99.  
  100. long double Cheb_pol_1(long double a, long double b,FILE *f) {
  101.     long double x[10000];
  102.     int i = 1;
  103.         x[0] = 0.5;
  104.         x[1] = x[0] - pol_1(x[0]) / diff1_pol_1(x[0]) - 0.5*diff2_pol_1(x[0])*pow(pol_1(x[0]), 2) / pow(diff1_pol_1(x[0]), 3);
  105.         while (fabs(x[i] - x[i - 1]) > eps1) {
  106.             x[i+1] = x[i] - pol_1(x[i]) / diff1_pol_1(x[i]) - 0.5*diff2_pol_1(x[i])*pow(pol_1(x[i]), 2) / pow(diff1_pol_1(x[i]), 3);
  107.             i++;
  108.         }
  109.     fprintf(f,"    %.15lf  steps  %d", x[i], i);
  110.     return x[i];
  111. }
  112. //метод Чебышёва для полинома с косинусом
  113.  
  114. long double New_pol_1(long double a, long double b,FILE *f) {
  115.     long double x[10000];
  116.     int i = 1;
  117.         x[0] = 0.5;
  118.         x[1] = 0.5 - pol_1(0.5) / diff1_pol_1(0.5);
  119.         while (fabs(x[i] - x[i - 1]) > eps1) {
  120.             x[i + 1] = x[i] - pol_1(x[i]) / diff1_pol_1(x[i]);
  121.             i++;
  122.         }
  123.         fprintf(f, "%.15lf    steps %d \n", x[i], i);
  124.     return x[i];
  125. }
  126. //метод Ньютона для полинома с косинусом
  127.  
  128. long double Biss_pol_2_one(long double a, long double b,FILE *f) {
  129.     int i = 0;
  130.     long double mid;
  131.     while ((b - a) > eps1) {
  132.         mid = (a + b) / 2;
  133.         if (pol_2(a) * pol_2(b) < 0) {
  134.             if (pol_2(mid)*pol_2(b) < 0) {
  135.                 a = mid;
  136.                 i++;
  137.             }
  138.             else {
  139.                 b = mid;
  140.                 i++;
  141.             }
  142.         }
  143.         else {
  144.             return 0;
  145.         }
  146.     }
  147.     fprintf(f, "%.15lf    steps %d \n", mid, i);
  148.     return mid;
  149. }
  150. //метод биссекции для нахождения одного корня для полинома 3-й степени
  151.  
  152. void Biss_pol_2_more(long double a, long double b,FILE *f) {
  153.     long double a_work[10];
  154.     for (int j = 0; j < 10; j++) {
  155.         a_work[j] = a + j * (b - a) / 10;
  156.     }
  157.     for (int k = 0; k < 9; k++) {
  158.         Biss_pol_2_one(a_work[k], a_work[k + 1],f);
  159.     }
  160. }
  161. //метод биссекции для нахождения всех корней для полинома 3-й степени
  162.  
  163. long double Chord_pol_2_one(long double a, long double b,FILE *f) {
  164.     long double x[1000];
  165.     int i = 1;
  166.     if (pol_2(a) > 0 && pol_2(b) < 0) {
  167.         x[0] = a;
  168.         x[1] = a - pol_2(a)*(b - a) / (pol_2(b) - pol_2(a));
  169.         while (fabs(x[i] - x[i - 1]) > eps1) {
  170.             x[i + 1] = x[i] - (pol_2(x[i])*(x[i] - a)) / (pol_2(x[i]) - pol_2(a));
  171.             i++;
  172.         }
  173.     }
  174.     if (pol_2(b) > 0 && pol_2(a) < 0) {
  175.         x[0] = b;
  176.         x[1] = a - pol_2(a)*(b - a) / (pol_2(b) - pol_2(a));
  177.         while (fabs(x[i] - x[i - 1]) > eps1) {
  178.             x[i + 1] = x[i] - (pol_2(x[i])*(b - x[i])) / (pol_2(b) - pol_2(x[i]));
  179.             i++;
  180.         }
  181.     }
  182.     if ((pol_2(b) > 0 && pol_2(a) > 0) || (pol_2(b) < 0 && pol_2(a) < 0))
  183.     {
  184.         return 0;
  185.     }
  186.     fprintf(f, "%.15lf    steps %d \n", x[i], i);
  187.     return x[i];
  188. }
  189. //метод хорд для нахождения одного корня для полинома 3-й степени
  190.  
  191. void Chord_pol_2_more(long double a, long double b,FILE *f) {
  192.     long double a_work[10];
  193.     for (int j = 0; j < 10; j++) {
  194.         a_work[j] = a + j * (b - a) / 10;
  195.     }
  196.     for (int k = 0; k < 9; k++) {
  197.         Chord_pol_2_one(a_work[k], a_work[k + 1],f);
  198.     }
  199. }
  200. //метод хорд для нахождения всех корней для полинома 3-й степени
  201.  
  202. void Cheb_pol_2_more(long double a, long double b,FILE *f) {
  203.     long double a_work[100];
  204.     for (int j = 0; j < 100; j++) {
  205.         a_work[j] = a + j * (b - a) / 100;
  206.     }
  207.     long double x[10000];
  208.     for (int k = 0; k < 99; k++) {
  209.         if (pol_2(a_work[k])*pol_2(a_work[k+1]) < 0) {
  210.             int  i = 1;
  211.             x[0] = a_work[k];
  212.             x[1] = x[0] - pol_2(x[0]) / diff1_pol_2(x[0]) - 0.5*diff2_pol_2(x[0])*pow(pol_2(x[0]), 2) / pow(diff1_pol_2(x[0]), 3);
  213.             while (fabs(x[i] - x[i - 1]) > eps1) {
  214.                 x[i + 1] = x[i] - pol_2(x[i]) / diff1_pol_2(x[i]) - 0.5*diff2_pol_2(x[i])*pow(pol_2(x[i]), 2) / pow(diff1_pol_2(x[i]), 3);
  215.                 i++;
  216.             }
  217.             fprintf(f, "%.15lf    steps %d \n", x[i], i);
  218.         }
  219.     }
  220. }
  221. //метод Чебышёва для нахождения всех корней полинома 3-й степени
  222.  
  223. void New_pol_2_more(long double a, long double b, FILE *f) {
  224.     long double a_work[100];
  225.     for (int j = 0; j < 100; j++) {
  226.         a_work[j] = a + j * (b - a) / 100;
  227.     }
  228.     long double x[10000];
  229.     for (int k = 0; k < 99; k++) {
  230.         if (pol_2(a_work[k])*pol_2(a_work[k + 1]) < 0) {
  231.             int i = 1;
  232.             x[0] = a_work[k];
  233.             x[1] = x[0] - pol_2(x[0]) / diff1_pol_2(x[0]);
  234.             while (fabs(x[i] - x[i - 1]) > eps1) {
  235.                 x[i + 1] = x[i] - pol_2(x[i]) / diff1_pol_2(x[i]);
  236.                 i++;
  237.             }
  238.             fprintf(f, "%.15lf    steps %d \n", x[i], i);
  239.         }
  240.     }
  241. }
  242. //метод Ньютона  для нахождения всех корней для полинома 3-й степени
  243.  
  244. long double Biss_pol_3_one(long double a, long double b, FILE *f) {
  245.     int i = 0;
  246.     long double mid;
  247.     while ((b - a) > eps1) {
  248.         mid = (a + b) / 2;
  249.         if (pol_3(a) * pol_3(b) < 0) {
  250.             if (pol_3(mid)*pol_3(b) < 0) {
  251.                 a = mid;
  252.                 i++;
  253.             }
  254.             else {
  255.                 b = mid;
  256.                 i++;
  257.             }
  258.         }
  259.         else {
  260.             return 0;
  261.         }
  262.     }
  263.     fprintf(f, "%.15lf    steps %d \n", mid, i);
  264.     return mid;
  265. }
  266. //метод биссекции для нахождения одного корня для полинома с exp
  267.  
  268. void Biss_pol_3_more(long double a, long double b, FILE *f) {
  269.     long double a_work[10];
  270.     for (int j = 0; j < 10; j++) {
  271.         a_work[j] = a + j * (b - a) / 10;
  272.     }
  273.     for (int k = 0; k < 9; k++) {
  274.         Biss_pol_3_one(a_work[k], a_work[k + 1], f);
  275.     }
  276. }
  277. //метод биссекции для нахождения всех корней для полинома с exp
  278.  
  279. long double Chord_pol_3_one(long double a, long double b, FILE *f) {
  280.     long double x[1000];
  281.     int i = 1;
  282.     if (pol_3(a) > 0 && pol_3(b) < 0) {
  283.         x[0] = a;
  284.         x[1] = a - pol_3(a)*(b - a) / (pol_3(b) - pol_3(a));
  285.         while (fabs(x[i] - x[i - 1]) > eps1) {
  286.             x[i + 1] = x[i] - (pol_3(x[i])*(x[i] - a)) / (pol_3(x[i]) - pol_3(a));
  287.             i++;
  288.         }
  289.     }
  290.     if (pol_3(b) > 0 && pol_3(a) < 0) {
  291.         x[0] = b;
  292.         x[1] = a - pol_3(a)*(b - a) / (pol_3(b) - pol_3(a));
  293.         while (fabs(x[i] - x[i - 1]) > eps1) {
  294.             x[i + 1] = x[i] - (pol_3(x[i])*(b - x[i])) / (pol_3(b) - pol_3(x[i]));
  295.             i++;
  296.         }
  297.     }
  298.     if ((pol_3(b) > 0 && pol_3(a) > 0) || (pol_3(b) < 0 && pol_3(a) < 0))
  299.     {
  300.         return 0;
  301.     }
  302.     fprintf(f,"%.15lf    steps %d \n", x[i],i);
  303.     return x[i];
  304. }
  305. //метод хорд для нахождения одного корня для полинома с exp
  306.  
  307. void Chord_pol_3_more(long double a, long double b,FILE *f) {
  308.     long double a_work[10];
  309.     for (int j = 0; j < 10; j++) {
  310.         a_work[j] = a + j * (b - a) / 10;
  311.     }
  312.     for (int k = 0; k < 9; k++) {
  313.         Chord_pol_3_one(a_work[k], a_work[k + 1], f);
  314.     }
  315. }
  316. //метод хорд для нахождения всех корней для полинома с exp
  317.  
  318. void Cheb_pol_3_more(long double a, long double b, FILE *f) {
  319.     long double a_work[100];
  320.     for (int j = 0; j < 100; j++) {
  321.         a_work[j] = a + j * (b - a) / 100;
  322.     }
  323.     long double x[10000];
  324.     for (int k = 0; k < 99; k++) {
  325.         if (pol_3(a_work[k])*pol_3(a_work[k + 1]) < 0) {
  326.             int  i = 1;
  327.             x[0] = a_work[k];
  328.             x[1] = x[0] - pol_3(x[0]) / diff1_pol_3(x[0]) - 0.5*diff2_pol_3(x[0])*pow(pol_3(x[0]), 2) / pow(diff1_pol_3(x[0]), 3);
  329.             while (fabs(x[i] - x[i - 1]) > eps1) {
  330.                 x[i + 1] = x[i] - pol_3(x[i]) / diff1_pol_3(x[i]) - 0.5*diff2_pol_3(x[i])*pow(pol_3(x[i]), 2) / pow(diff1_pol_3(x[i]), 3);
  331.                 i++;
  332.             }
  333.             fprintf(f, "%.15lf    steps %d \n", x[i], i);
  334.         }
  335.     }
  336. }
  337. //метод хорд для нахождения всех корней для полинома с exp
  338.  
  339. void New_pol_3_more(long double a, long double b, FILE *f) {
  340.     long double a_work[100];
  341.     for (int j = 0; j < 100; j++) {
  342.         a_work[j] = a + j * (b - a) / 100;
  343.     }
  344.     long double x[10000];
  345.     for (int k = 0; k < 99; k++) {
  346.         if (pol_3(a_work[k])*pol_3(a_work[k + 1]) < 0) {
  347.             int i = 1;
  348.             x[0] = a_work[k];
  349.             x[1] = x[0] - pol_3(x[0]) / diff1_pol_3(x[0]);
  350.             while (fabs(x[i] - x[i - 1]) > eps1) {
  351.                 x[i + 1] = x[i] - pol_3(x[i]) / diff1_pol_3(x[i]);
  352.                 i++;
  353.             }
  354.             fprintf(f, "%.15lf    steps %d \n", x[i], i);
  355.         }
  356.     }
  357. }
  358. //метод Ньютона для нахождения всех корней для полинома с exp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement