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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Форматированный вывод действительного числа http://www.cyberforum.ru/cpp-beginners/thread1171602.html
Доброго времени суток! Подскажите, пожалуйста как лучше обрезать число? Пример: -1.123e020 после обрезки чтоб дало: -1.12e20 (можно ли чтобы там где е020 стало просто е20?. Это важно). Спасибо большое!
C++ Удаление лишних (подряд идущих) разделителей при разделении строки Здравствуйте! Задача такая: вводятся в массив razd N разделителей(ну там что то на подобии "!" , "." , "?" , "пробел" и тд... только этот разделитель может быть любым символом), потом вводится текст. В этом тексте могут повторяться разделители к примру так:... http://www.cyberforum.ru/cpp-beginners/thread1171599.html
C++ Удалить из очереди отрицательные числа
1 создать очередь( элементы добавлять динамически - push) 2 вывод на экран 3 удалить отрицательные элементы 4 вывод на экран 5 удалить все созданные контейнеры Неужели так трудно переписать!!!!!!!! интерфейс http://www.cyberforum.ru/attachment.php?attachmentid=397092&stc=1&d=1399733687
C++ Как удалить элементы динамического массива, а не сам массив?
Всем здравствуйте и помогите пожалуйста разобраться. Как удалить элементы динамического массива, а не сам массив? Если что, вот пример кода в котором идёт обращение к несуществующей области памяти: for(int i=0; i<size; i++) { char *temp_word = new char ; if(isspace(string)) continue;
C++ Имитация работы станка http://www.cyberforum.ru/cpp-beginners/thread1171574.html
Добрый вечер! Прошу помощи в решении следующей задачи. Необходимо симитировать работу такого станка: В первый ящик попадает деталь в интервале от 1 до 5 секунд. При попадании счетчик увеличивается (+1) Станок обрабатывает деталь в течении 5 секунд. При выборке днталей из ящика счетчик уменьшается (-1) Подключить генератор случайных чисел от 1 до 5 секунд. Закончить данный процесс через 60...
C++ Моделирование работы концентратора Добрый вечер! Задание следующего характера: Необходимо симитировать работу концентратора в сети, а именно отправить пакет от отправителя к получателю, сравнивая соответствующие ip адреса. Намекните как это можно реализовать, в сторону каких функций, буду благодарен за любую информацию! Возможно на других языках программирования подробнее

Показать сообщение отдельно
AleshaOleg
0 / 0 / 0
Регистрация: 28.08.2012
Сообщений: 14

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

10.05.2014, 19:51. Просмотров 974. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru