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

Метод Хука-Дживса (нахождение минимума функции двух переменных) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа C++. День недели, месяца не видит http://www.cyberforum.ru/cpp-beginners/thread1757798.html
Программа не считает определенные месяца: 4, 6, 9, 11, остальное считает. Где ошибка ? Может быть условия не правильно задал ? #include <string> #include <iostream> #include <stdio.h> #include <windows.h> #include <conio.h> using namespace std; int Date (int D, int M,
C++ Access violation reading location Помогите пожалуйста! Создаю программу, которая ведет учет данных. В бинарный dat-файл записываются объекты класса (Account) - логин(string), пароль(string) и bool-переменная. Если файл не создан, то создает его и добавляет учетную запись админа (вводит данные по умолчанию). Считываю данные из файла в вектор (функция ниже). Проблема в том, что если файла нету и создается файл по умолчанию, то в... http://www.cyberforum.ru/cpp-beginners/thread1757783.html
C++ Логическая игра "Мозаика"
Логическая программа "Мозайка" После запуска программы на экране на несколько секунд появляется некоторая картинка. Затем она,разрезанная на несколько квадратов,перемешивается и в таком виде появляется на экране.Игроку предоставляется определенное время на то,чтобы собрать картинку. Нашла программу мозаики, но не знаю как сделать чтобы игра была на время
Наследник не унаследовал поле ? C++
Есть следующий код : class Parent { public: Parent():str("Parent") {} ~Parent(){} string name; };
C++ Надо составить блок схему http://www.cyberforum.ru/cpp-beginners/thread1757754.html
using namespace std; //Алгоритм Евклида нахождения наибольшего общего делителя unsigned long long gcd(unsigned long long a, unsigned long long b) { if (b == 0) return a; else return gcd(b, a % b); }
C++ с++ Дано речення всі букви е замінити на букву и. Официальными языками форума являются русский и английский языки. Размещение сообщений на других языках запрещено. Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п. подробнее

Показать сообщение отдельно
Andreika24
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 135
08.06.2016, 13:28     Метод Хука-Дживса (нахождение минимума функции двух переменных)
Помогите, пожалуйста, исправить ошибки в коде. Вот задание: составить программу нахождения минимума функции двух переменных методом конфигураций (Хука-Дживса).
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
#include <iostream>
#include <vector>
#include <cmath>
 
using namespace std;
 
double objectiveFunction(vector < vector<double> > &data, int n, int m);
void research(vector < vector<double> > &data, double step, int n);
 
void main()
{
    setlocale(LC_ALL,"Russian");
 
    int n;
 
    cout << "Введите количество координат: ";
    cin >> n;
    n++;    // One cell for value of function 
 
    vector< vector< double > > data(3, n);
 
    int i,j;
    cout << "Введите координаты точки: ";
    for(j=0; j<n-1; j++) {
        cin >> data[0][j];
        data[1][j]=data[0][j];
    }
 
    double step;
    cout << "Введите шаг: ";
    cin >> step;
 
    double contraction;
    cout << "Введите коэффициент уменьшение шага: ";
    cin >> contraction;
 
    double expansion;
    cout << "Введите коэффициент растяжения: ";
    cin >> expansion;
 
    double precision;
    cout << "Введите точность: ";
    cin >> precision;
 
    for(i=0; step > precision; i++) {
        research(data, step, n);
        if(data[0][n-1] <= data[1][n-1]) step=step * contraction;
        else {
            while(true) {
                for(j=0; j<n; j++) {
                    data[2][j]=data[1][j];
                    data[0][j]=data[0][j] + expansion * (data[1][j] - data[0][j]);
                }
 
                research(data, step, n);
                if(data[2][n-1] <= data[1][n-1]) {
                    for(j=0; j<n-1; j++) {
                        data[0][j]=data[2][j];
                    }
                    break;
                }
            }
        }
    }
 
    cout << "\nРешение\nКоличество итераций: " << i << endl;
    for(j=0; j<n-1; j++) {
        cout << "\nКоордината " << j << ": "  << data[0][j];
    }
    cout << "\nЗначение функции: " << data[0][n-1] << endl;
}
 
void research(vector < vector<double> > &data, double step, int n)
{
    int j;
    double newValue;
 
    data[0][n-1]=objectiveFunction(data, n, 0);
    for(j=0; j<n; j++) {
        data[1][j]=data[0][j];
    }
 
    for(j=0; j<n-1; j++) {
        data[1][j]=data[0][j]+step;
        newValue=objectiveFunction(data, n, 1);
 
        if(newValue < data[1][n-1]) data[1][n-1]=newValue;
        else {
            data[1][j]=data[0][j]-step;
            newValue=objectiveFunction(data, n, 1);
 
            if(newValue < data[1][n-1]) data[1][n-1]=newValue;
            else data[1][j]=data[0][j];
        }
    }
}
 
double objectiveFunction(vector < vector<double> > &data, int n, int m)
{
    double result=0;
    for(int j=0; j<n-1; j++) {
        result=result + cos(data[m][j]);
    }
    return result;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru