Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <math.h>
- #include <iostream>
- using namespace std;
- float f(double x)
- {
- return pow(x, 1./2) - pow(cos(x), 2) - 2;
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- int i;
- double eps;// необходимая точность
- double A, B;
- cout << "Введите A, B, eps" << endl;
- cin >> A >> B >> eps;
- double x[3];
- double xm;
- for (double j = A; j < B; j += (B - A) / 20.) {
- x[0] = j;
- x[2] = j + (B - A) / 20.;
- if (f(x[0])*f(x[2]) <= 0) // если знаки функции на краях отрезка одинаковые, то здесь нет корня
- {
- i = 0;
- do {
- x[1] = (x[0] + x[2]) / 2.;
- double z1 = x[1] - x[2];//тут все переменные для вычисленния корней параболы по школьной фомуле(эти переменные есть в методе так что хуй на них забей)
- double z0 = x[0] - x[2];
- double c = f(x[2]);
- double a = (((f(x[0]) - f(x[2])) / z0) - ((f(x[1]) - f(x[2])) / z1)) / (z0 - z1);
- double b = (f(x[0]) - f(x[2])) / z0 - a * z0;
- double kor1 = (-b + pow((pow(b, 2) - 4 * a*c), 1./ 2)) / (2 * a);//корни соотвественно
- double kor2 = (-b - pow((pow(b, 2) - 4 * a*c), 1. / 2)) / (2 * a);
- double kor0 = (fabs(kor1) < fabs(kor2)) ? kor1 : kor2;//нам нужен тот который меньше по знаку
- xm = x[2] + kor0; //искомая точка
- cout << ++i << " Итерация: " << xm << endl;
- (xm < x[1]) ? x[2] = xm : x[0] = xm;// тот злополучный момент ах да такая запись (условие)?(верно):(неверно)
- } while (fabs(xm - x[1] < eps));//пока не достигли точности
- cout << endl << "Корень " << xm << endl<<endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement