-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlocalize.cpp
74 lines (58 loc) · 2.16 KB
/
localize.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "localize.h"
// vector<pair<double,double>> Local(vector<pair<double,double>>table, double(*fn)(double), vector<double> &sol){
// //ОБрабатываем случай, когда на концах отрезка значение функции = 0
// if (fabs(table[0].second) == 0.0000000){
// sol.push_back(table[0].first);
// table[0].first = table[0].first + 10 * EPSILON;
// table[0].second = fn(table[0].first);
// }
// int n = table.size()-1;
// if (fabs(table[n].second) == 0.0000000){
// sol.push_back(table[n].first);
// table[n].first = table[n].first - 10 * EPSILON;
// table[n].second = fn(table[n].first);
// }
// //Если нашелся корень
// for (int i = 1; i < n; i++){
// if(fabs(table[i].second) == 0.0000000){
// sol.push_back(table[i].first);
// }
// }
// vector<pair<double,double>> local_area;
// //поиск отрезков локализации
// for (int i = 0; i < n; i ++){
// if(table[i].second * table[i+1].second <= 0){
// pair<double,double> limits = make_pair(table[i].first, table[i+1].first);
// local_area.push_back(limits);
// }
// }
// return local_area;
// }
vector<pair<double,double>> Local(vector<pair<double,double>>table, double(*fn)(double), vector<double> &sol){
//ОБрабатываем случай, когда на концах отрезка значение функции = 0
if (fabs(table[0].second) < EPSILON){
table[0].first = table[0].first - 10 * EPSILON;
table[0].second = fn(table[0].first);
}
int n = table.size()-1;
if (fabs(table[n].second) < EPSILON){
table[n].first = table[n].first + 10 * EPSILON;
table[n].second = fn(table[n].first);
}
//Если нашелся корень
for (int i = 1; i < n; i++){
if(fabs(table[i].second) < EPSILON){
table[i].first -= 10 * EPSILON;
table[i].second = fn(table[i].first);
}
}
vector<pair<double,double>> local_area;
//поиск отрезков локализации
for (int i = 0; i < n; i ++){
if(table[i].second * table[i+1].second < 0){
pair<double,double> limits = make_pair(table[i].first, table[i+1].first);
local_area.push_back(limits);
}
}
return local_area;
}