Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- using namespace std;
- double f(double x) {
- return 0.5 * x * x - sin(x);
- }
- void Sven(double x0, double h, double &a, double &b) {
- 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;
- }
- if (!(f(x0 - h) >= f(x0) && f(x0) <= f(x0 + h))) {
- x2 = x1;
- x1 = x0;
- do {
- x0 = x1;
- x1 = x2;
- x2 = x1 + pow(2.0, 1.0 * k) * h;
- } while (f(x2) <= f(x1));
- if (h > 0) {
- a = x0;
- b = x2;
- }
- else {
- a = x2;
- b = x0;
- }
- }
- else {
- a = x0 - h;
- b = x0 + h;
- }
- }
- double trihotomia(double a, double b, double eps) {
- double m1, m2;
- while (b - a > eps) {
- m1 = a + (b - a) / 3;
- m2 = b - (b - a) / 3;
- if (f(m1) > f(m2))
- a = m1;
- else if (f(m1) < f(m2))
- b = m2;
- else {
- a = m1;
- b = m2;
- }
- }
- return a;
- }
- int main(void) {
- double a, b;
- double n, h, eps;
- cout << "Input x0: ";
- cin >> n;
- cout << "Input h: ";
- cin >> h;
- cout << "Input eps: ";
- cin >> eps;
- Sven(n, h, a, b);
- double result = trihotomia(a, b, eps);
- cout << a << " " << b << endl;
- cout << result << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement