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

Программа для поиска минимального значения функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
vivisektor
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 6
03.04.2011, 02:42     Программа для поиска минимального значения функции #1
Всем привет! Помогите разобраться и найти ошибку в коде программы. В задачу входило скомпилировать программу на С++, которая ищет оптимальные значения X (минимум) в уравнении, содержащем эффекты линейного взаимодействия x2*x3, x2*x5 и квадратичный эффект x4^2
Уравнение выглядит следующим образом:
y=226,17 + 57,72x1 + 17,51x4 + 22,92x5 - 11,43x1x3 + 15,22x2x3 + 29,83x2x5 + 6,86x4^2

Проект создавал в Visual Studio 2008 как консольное приложение. Программа вроде бы работает, но оптимальные параметры x определяются неправильно (см. скриншот).


Cобственно ниже исходный код программы. Что может быть не так? Сколько ни ковырял, не пойму в чем косяк. Походу работает только 1й цикл, а остальные 4 не выполняются..
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
#include <stdio.h>
 
int main(void)
{
    double Y,x1,x2,x3,x4,x5,Ynim,Xnim1,Xnim2,Xnim3,Xnim4,Xnim5;
    int i1,i2,i3,i4,i5;
    Ynim=1000;
    for(i1=0;i1<=10;i1++)
    {
     x1=0.2*i1-1;
     for(i2=0;i2<=10;i2++)
     {
      x2=0.2*i2-1;
      for(i3=0;i3<=10;i3++)
      {
       x3=0.2*i3-1;
       for(i4=0;i4<=10;i4++)
       {
        x4=0.2*i4-1;
        for(i5=0;i5<=10;i5++)
        {
         x5=0.2*i5-1;
        
        
        Y = 226.17 + 57.72*x1 + 17.51*x4 + 22.92*x5 - 11.43*x1*x3 + 15.22*x2*x3 + 29.83*x2*x5 + 6.86*x4*x4;
        if (Y<Ynim)
        { 
         Ynim=Y;
         Xnim1=x1;
         Xnim2=x2;
         Xnim3=x3;
         Xnim4=x4;
         Xnim5=x5;
        }
        }
       }
      }
     }
    }
    
    printf("x1 = %f; x2 = %f; x3 = %f; x4 = %f; x5 = %f; Ymin = %f\n",Xnim1,Xnim2,Xnim3,Xnim4,Xnim5,Ynim);
        
    return 0;
}
Миниатюры
Программа для поиска минимального значения функции  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2011, 02:42     Программа для поиска минимального значения функции
Посмотрите здесь:

C++ Написать программу ввода в массив 10 чисел и поиска в нем минимального значения
программа для нахождения минимального положительного значения C++
C++ Табулирование заданной функции и определение максимального и минимального значения функции в таблице
программа для вычисления значения функции y C++
Программа для поиска седловых точек матрицы перестала работать после добавления функции ввода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
romanriddick
 Аватар для romanriddick
36 / 36 / 4
Регистрация: 06.07.2010
Сообщений: 154
03.04.2011, 03:17     Программа для поиска минимального значения функции #2
какаято у вас странная прога получилась ... а что за алгоритм использовали???
vivisektor
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 6
03.04.2011, 04:03  [ТС]     Программа для поиска минимального значения функции #3
хмм. почему странный? а что не так? в плане какой алгоритм?
использовал 5 циклов for, так как изменяющихся факторов 5- x1,x2,x3,x4,x5.
romanriddick
 Аватар для romanriddick
36 / 36 / 4
Регистрация: 06.07.2010
Сообщений: 154
03.04.2011, 04:19     Программа для поиска минимального значения функции #4
хм...уже давно придуманы алгоритмы для безусловной оптимизации ... зачем выдумывать что то новое... кроме того минимум все ровно будет локальный , а где у вас вводятса промежутки ... не понятно

Добавлено через 5 минут
впринципе можно еще использовать производную , но формула там другая... ваша идея в была етом ???
IrineK
Заблокирован
03.04.2011, 06:00     Программа для поиска минимального значения функции #5
Х - вектор размерностью 5?
Нужно найти значения Xi, которые обеспечивают минимум функционала У?
Берем частные производные и решаем систему уравнений (в данном случае, похоже, линейных уравнений).
IrineK
Заблокирован
03.04.2011, 06:39     Программа для поиска минимального значения функции #6
///////////////////////////
Миниатюры
Программа для поиска минимального значения функции  
IrineK
Заблокирован
03.04.2011, 06:49     Программа для поиска минимального значения функции #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iomanip>
using namespace std;
 
int main() 
{   double x2 = -22.92/29.83;
    double x3 = 57.72/11.43;
    double x4 = -17.51/13.72;
    double x1 = 15.22*x2/11.43;
    double x5 = -15.22*x3/29.83;
 
    double y = 226.17+57.72*x1+17.51*x4+22.92*x5-11.43*x1*x3+15.22*x2*x3+29.83*x2*x5+6.86*x4*x4;
 
    cout<<fixed<<setprecision(4)<<"x1 = "<<x1<< "\tx2 = "<<x2<<"\tx3 = "<<x3
        <<"\tx4 = "<<x4<<"\tx5 = "<<x5<<"\n";
 
    cout<<"Ymin = "<<y<<"\n";
        
    cin.sync(); cin.get();
    return 0;
}
Миниатюры
Программа для поиска минимального значения функции  
vivisektor
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 6
03.04.2011, 08:03  [ТС]     Программа для поиска минимального значения функции #8
IrineK, большое спасибо! Задача заключалась именно в этом, только вы предложили решение алгебраическим методом, а мне необходим метод сканирования, т.е. отыскания значения функции в каждой экспериментальной точке, сравнения его с предыдущим значением, и выбора минимального.
Попробую конечно поковырять еще, если не получится, решу через частные производные, только вот смыслу от программы тогда нет, на калькуляторе проще сосчитать =)
IrineK
Заблокирован
03.04.2011, 15:17     Программа для поиска минимального значения функции #9
Тогда делайте перебор в районе найденных значений Хi, и шаг нужно выбрать поменьше: 0,1 или даже 0,01.
vivisektor
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 6
04.04.2011, 11:36  [ТС]     Программа для поиска минимального значения функции #10
Новая проблема!

IrineK, после оценки значимости коэффициентов по t-критерию Стьюдента, коэффициенты парного взаимодействия отбросились, и уравнение приняло вид:
y=226,17 + 57,72x1 + 38,62x2 + 17,51x4 + 22,92x5 + 6,86x4^2

Вопрос: как в таком случае отыскать частные производные?
IrineK
Заблокирован
04.04.2011, 11:58     Программа для поиска минимального значения функции #11
Чтобы У был минимальным:
Для х4 - по-прежнему х4 = -17,51/13,72 = -1,2762
А для х1,х2,х5 - чем меньше,тем лучше. Они же чем-то ограничены?
vivisektor
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 6
04.04.2011, 12:27  [ТС]     Программа для поиска минимального значения функции #12
получается x1,x2,x5 нулю будут равны? нет, ограничений никаких нет.
IrineK
Заблокирован
04.04.2011, 17:45     Программа для поиска минимального значения функции #13
Вы считаете нечто отвлеченное, или это - конкретные параметры.
Что это? Экономика, химия, физика, или просто упражнение по математике?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2011, 19:21     Программа для поиска минимального значения функции
Еще ссылки по теме:

Программа для вычисления значения функции С++ C++
Программа для поиска минимального и максимального значения массива C++

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

Или воспользуйтесь поиском по форуму:
vivisektor
0 / 0 / 0
Регистрация: 03.04.2011
Сообщений: 6
04.04.2011, 19:21  [ТС]     Программа для поиска минимального значения функции #14
Это моделирование систем.
В частности в данном случае, моделируем трехфазную систему массового обслуживания с конкретными параметрами T1,T2,T3,T4,T5

T1= 2+0,3*x1
T2= 2+0,3*x2
T3= 1+0,15*x3
T4= 1-0,15*x4
T5= 1,5+(-)0,225*X5

параметры T должны быть оптимизированы, чтобы критерий оценки системы был минимальным.
Yandex
Объявления
04.04.2011, 19:21     Программа для поиска минимального значения функции
Ответ Создать тему
Опции темы

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