Advertisement
Dambosin

korni parabol

May 17th, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include "pch.h"
  2. #include <math.h>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. float f(double x)
  8. {
  9.     return pow(x, 1./2) - pow(cos(x), 2) - 2;
  10. }
  11.  
  12. int main()
  13. {
  14.     setlocale(LC_ALL, "Russian");
  15.     int i;
  16.     double eps;// необходимая точность
  17.     double A, B;
  18.     cout << "Введите A, B, eps" << endl;
  19.     cin >> A >> B >> eps;
  20.     double x[3];
  21.     double xm;
  22.     for (double j = A; j < B; j += (B - A) / 20.) {
  23.         x[0] = j;
  24.         x[2] = j + (B - A) / 20.;
  25.         if (f(x[0])*f(x[2]) <= 0) // если знаки функции на краях отрезка одинаковые, то здесь нет корня
  26.         {
  27.             i = 0;
  28.             do {
  29.                 x[1] = (x[0] + x[2]) / 2.;
  30.                 double z1 = x[1] - x[2];//тут все переменные для вычисленния корней параболы по школьной фомуле(эти переменные есть в методе так что хуй на них забей)
  31.                 double z0 = x[0] - x[2];
  32.                 double c = f(x[2]);
  33.                 double a = (((f(x[0]) - f(x[2])) / z0) - ((f(x[1]) - f(x[2])) / z1)) / (z0 - z1);
  34.                 double b = (f(x[0]) - f(x[2])) / z0 - a * z0;
  35.                 double kor1 = (-b + pow((pow(b, 2) - 4 * a*c), 1./ 2)) / (2 * a);//корни соотвественно
  36.                 double kor2 = (-b - pow((pow(b, 2) - 4 * a*c), 1. / 2)) / (2 * a);
  37.                 double kor0 = (fabs(kor1) < fabs(kor2)) ? kor1 : kor2;//нам нужен тот который меньше по знаку
  38.                 xm = x[2] + kor0;   //искомая точка
  39.                 cout << ++i << " Итерация: " << xm << endl;
  40.                 (xm < x[1]) ? x[2] = xm : x[0] = xm;// тот злополучный момент ах да такая запись (условие)?(верно):(неверно)
  41.             } while (fabs(xm - x[1] < eps));//пока не достигли точности
  42.             cout << endl << "Корень " << xm << endl<<endl;
  43.         }
  44.  
  45.     }
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement