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

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

Восстановить пароль Регистрация
 
AleshaOleg
0 / 0 / 0
Регистрация: 28.08.2012
Сообщений: 14
10.05.2014, 19:51     Нахождение экстремумов функции двух переменных, методами: дихотомии, поразрядного сближения и равномерного пои #1
Здравствуйте, меня интересует нахождение экстремумов функции двух переменных, методами: дихотомии, поразрядного сближения и равномерного поиска. Для одной переменной, это все очень просто и понятно. А вот для двух, мне совсем ничего не понятно, и в интернете нету даже теории по нахождению экстремумов именно этими методами. Если кто, что либо знает, пожалуйста подскажите что можете. Программу для одной переменной с методами дихотомии и равномерного поиска прилагаю на всякий случай. Спасибо.

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++ Написать диалоговую программу вычисления значений функции двух переменных z=f(x.y) в различных точках плоскости.
C++ Общий вид интерполированной функции двух переменных
C++ Вычислить координаты и значения экстремумов гамма-функции на отрезке (-2;2)
Метод половинного деления для функции от двух переменных C++
C++ Найти минимум функции двух переменных
C++ Создать функции нахождения максимального значения из двух переменных
C++ Поиск экстремума функции двух переменных

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 14:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru