Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <utility>
- #include <math.h>
- #include <iostream>
- using namespace std;
- double dx = 0.001;
- double f(double x)
- {
- return pow(x, 2.0 / 3) - x;
- }
- pair<double, double> F1(double x0, double h)
- {
- int k = 1;
- double x1, x2;
- if (f(x0 - h) <= f(x0) && f(x0) <= f(x0 + h))
- {
- x1 = x0 + h;
- }
- else if (f(x0 - h) >= f(x0) && f(x0) >= f(x0 + h))
- {
- x1 = x0 - h;
- h = -h;
- }
- else
- {
- return pair<double, double>((x0 - h < 0) ? 0 : x0 - h, x0 + h);
- }
- x2 = x1;
- x1 = x0;
- do
- {
- x0 = x1;
- x1 = x2;
- x2 = x1 + pow(2.0, k * 1.0) * h;
- k++;
- } while (f(x2) >= f(x1));
- if (h > 0)
- {
- return pair<double, double>(x0 < 0 ? 0 : x0, x2);
- }
- else
- {
- return pair<double, double>(x2 < 0 ? 0 : x2, x0);
- }
- }
- double fp1(double x)
- {
- return (f(x + dx) - f(x)) / dx;
- }
- double fp2(double x)
- {
- return (fp1(x + dx) - fp1(x)) / dx;
- }
- double F2(pair<double, double> sv, double e)
- {
- double x0, x1 = sv.first;
- do
- {
- x0 = x1;
- x1 = x0 - fp1(x0) / fp2(x0);
- } while (abs(x1 - x0) > e);
- return x1;
- }
- int main()
- {
- pair<double, double> a = F1(-100, 0.0001);
- double x = F2(a, 0.001);
- cout << "max = f(" << x << ") = " << f(x) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement