1 template<
typename Func>
4 Vector::const_iterator citer;
5 for (citer = data.begin(); citer != data.end(); ++citer) vec.push_back(func(*citer));
9 template<
typename Func>
12 Vector::const_iterator citer;
13 for (citer = data.begin(); citer != data.end(); ++citer)
14 if (func(*citer)) result.push_back(*citer);
18 template<
typename Func>
19 bool probe(Func func, Pair & guess,
double factor,
int ntry) {
20 double lv = func(guess.first);
21 double rv = func(guess.second);
23 if (lv * rv <= 0)
return true;
24 if (abs(lv) < abs(rv)) {
25 guess.first -= factor * (guess.second - guess.first);
26 lv = func(guess.first);
29 guess.second += factor * (guess.second - guess.first);
30 rv = func(guess.second);
37 template<
typename Func>
38 Pairs scan(Func func, Pair scope,
int nr) {
41 for (
int i = 0; i < nr; ++i) {
42 if (func(marks[i]) * func(marks[i+1]) <= 0) vec.push_back(make_pair(marks[i], marks[i+1]));
47 template<
typename Func>
48 double solve(Func func, Pair region,
const Epsilon & eps) {
49 double lv = region.first;
50 double rv = region.second;
51 if (func(lv) == 0)
return lv;
52 if (func(rv) == 0)
return rv;
54 double mid = (lv + rv) / 2;
55 if (eps(rv - lv) || func(mid) == 0)
return mid;
56 if (func(lv) * func(mid) < 0) rv = mid;
61 template<
typename Func>
62 double integrate(Func func, Pair region,
const Epsilon & eps) {
63 int n =
static_cast<int>((region.second - region.first) * 2);
66 double s1 = func(marks[0]) + func(marks[n]);
68 for (
int i = 1; i < n; ++i) s2 += func(marks[i]);
71 for (
int i = 0; i < n; ++i) s4 += func((marks[i] + marks[i+1]) / 2);
73 double s = (region.second - region.first) / n / 6 * (s1 + s2 + s4);
77 marks =
linspace(region.first, region.second, n + 1);
78 s1 = func(marks[0]) + func(marks[n]);
80 for (
int i = 1; i < n; ++i) s2 += func(marks[i]);
83 for (
int i = 0; i < n; ++i) s4 += func((marks[i] + marks[i+1]) / 2);
85 double sn = (region.second - region.first) / n / 6 * (s1 + s2 + s4);
99 for (
int i = 0; i < len; ++i) vec.push_back(data[i]);