Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AleshaOleg
0 / 0 / 0
Регистрация: 28.08.2012
Сообщений: 14
#1

Нахождение экстремумов функции двух переменных, методами: дихотомии, поразрядного сближения и равномерного пои - C++

10.05.2014, 19:51. Просмотров 1050. Ответов 0
Метки нет (Все метки)

Здравствуйте, меня интересует нахождение экстремумов функции двух переменных, методами: дихотомии, поразрядного сближения и равномерного поиска. Для одной переменной, это все очень просто и понятно. А вот для двух, мне совсем ничего не понятно, и в интернете нету даже теории по нахождению экстремумов именно этими методами. Если кто, что либо знает, пожалуйста подскажите что можете. Программу для одной переменной с методами дихотомии и равномерного поиска прилагаю на всякий случай. Спасибо.

C++
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
double dichotomy();
double bitwise_approx();
double uniform_search();
 
double func (double x)
{
    return  2 * pow(x, 3) - 3 * pow(x, 2) - 12 * x;
}
 
double dichotomy() {
    setlocale (0, "");
    double a_1, b_1, a_2, b_2, e, x_max, x_min;
    std::wcout << L"Введiть iнтервали для першої функцiї: вiд " << std::endl;
    cin >> a_1;
    a_2 = a_1;
    cout << "до ";
    cin >> b_1;
    b_2 = b_1;
    cout << "Введiть точнiть обчислення: ";
    cin >> e;
    double sigma = e/2-e/4;
    do {
        x_max = (a_1 + b_1) / 2;
        double l = x_max - sigma;
        double r = x_max + sigma;
        if (func(l) >= func(r))
        {
            b_1 = r;
        }
        else if (func(l) < func(r))
        {
            a_1 = l;
        }
    }
    while (fabs(b_1 - a_1) > e);
    cout << "x max = " << x_max << endl;
    do {
        x_min = (a_2 + b_2) / 2;
        double l = x_min - sigma;
        double r = x_min + sigma;
        if (func(l) <= func(r))
        {
            b_2 = r;
        }
        else if (func(l) > func(r))
        {
            a_2 = l;
        }
    }
    while (fabs(b_2 - a_2) > e);
    cout << "x min = " << x_min << endl;
    return 0;
}
 
double uniform_search() {
    setlocale (0, "");
    double a_1, b_1, a_2, b_2, e, x_1, x_2, x_max, x_min, x_now;
    std::wcout << L"Введiть iнтервали для першої функцiї: вiд " << std::endl;
    cin >> a_1;
    a_2 = a_1;
    cout << "до ";
    cin >> b_1;
    b_2 = b_1;
    cout << "Введiть точнiть обчислення: ";
    cin >> e;
    x_max = a_1;
    x_min = x_max;
    x_1 = func(a_1);
    x_2 = x_1;
    do {
        x_now = func(a_1);
        if (x_now > x_1) {
            x_1 = x_now;
            x_max = a_1;
        }
        a_1 += e;
    }
    while (a_1 <= b_1);
    cout << "x max = " << x_max << endl;
    do {
        x_now = func(a_2);
        if (x_now < x_2) {
            x_2 = x_now;
            x_min = a_2;
        }
        a_2 += e;
    }
    while (a_2 <= b_2);
    cout << "x min = " << x_min << endl;
    return 0;
}
 
int main()
{   
    setlocale (0, "");
    int input;
    cout << "1. Метод дiтохомii\n";
    cout << "2. Метод порозрядного наближення\n";
    cout << "3. Метод рiвномiрного пошуку\n";
    cout << "4. Вихiд\n";
    cout << "Оберiть дiю: ";
    cin >> input;
    switch ( input ) {
        case 1:
            dichotomy();
            break;
        case 2:
            
            break;
        case 3:
            uniform_search();
            break;
        case 4:
            exit(0);
            break;
        default:
            cout << "Будь-ласка повторiть дiю!\n";
            break;
    }
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 19:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нахождение экстремумов функции двух переменных, методами: дихотомии, поразрядного сближения и равномерного пои (C++):

Поиск экстремумов, методы золотого сечения, дихотомии, кв. интерполяции-экстраполяции - C++
Всем привет! Возникли проблемы с реализацией методов, указанных выше. Функция всегда используется одна и та же, следовательно, экстремумы у...

Нахождение экстремумов методом равномерного поиска - Visual Basic
Всем привет! Очень надеюсь на вашу помощь Суть задания: Необходимо составить программу, которая будет находить экстремумы функции исходя...

Нахождение функции двух переменных - MS Excel
Доброго времени суток, форумчане. Вопрос: возможно ли посредством екселя найти функцию, а именно ее уравнение, двух переменных z=f(x;y),...

Нахождение предела функции двух переменных - Математический анализ
Вычислить предел: \lim_{x\to 0\\y\to 0} ((x+y)\sin\frac{1}{x}\cos\frac{1}{y}).

Два задания на нахождение частных производные функции двух переменных. - Математический анализ
вот 2 задания:

алгоритм нахождения экстремумов функции нескольких переменных - Математический анализ
Я неадекватно записал 1 момент ( :D ) в коспект, &quot;для каждой стационарной точки нужно проверить такое условие : ....... &quot; ,если быть...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 19:51
Привет! Вот еще темы с ответами:

Поиск экстремумов методом дихотомии VBA - VBA
Здравствуйте, необходимо найти максимум методом дихотомии , верное решение представлено во вложении (doc). Пытался сам составить программу...

Программа метода дихотомии для нахождения экстремумов не работает, не могу понять в чем ошибка - Turbo Pascal
program dihotomia; var a0,b0,eps,l,y,z,fy,fz,X:real; begin writeln ('введите a0 '); readln(a0); writeln ('введите b0 '); ...

Скорость сближения двух световых пучков в вакууме? - СТО
Как-то прочитал я, что выше скорости света в вакууме ничего быть не может, а вот как обстоят дела со скоростью сближения двух световых...

Алгоритм поиска минимума функции 2-х переменных двумя разными методами - Mathematica
требуется составить код нахождения минимума произвольной функции 2 переменных 2мя разными методами (деления отрезка пополам и золотым...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru