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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Xerdum
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 10
#1

Метод деформированного многогранника на С++ - C++

17.04.2011, 23:30. Просмотров 1814. Ответов 7
Метки нет (Все метки)

Здравствуйте! Помогите с написанием программы на С++ по методу деформированного многогранника. Есть код, который я приведу ниже, но он не пашет. Заранее спасибо! Код на Pascal

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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// Op_Lab2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    CPoint X_l(N), X_h(N), X_s(N), X_c(N), X_r(N), X_str(N), X_b(N), tmp(N);
    CPoint* MassPoint;
    MassPoint = new CPoint[N+1];
    double* MasF;
    MasF = new double[N+4];
    double Sig;
    double E2;
    double n;
    n = 1 / (N+1.0);
    E2 = E*E;
    
    for (int z=0; z<N+1; z++)
    {
        MassPoint[z] = MasPoint[z];
    }
 
    for (int i=0; i<N+1; i++)
    {
        for (int j=0; j<N; j++)
        {
            if (F(MassPoint[j], N, r) > F(MassPoint[j+1], N, r))
            {
                tmp = MassPoint[j];
                MassPoint[j] = MassPoint[j+1];
                MassPoint[j+1] = tmp;
            }
        }
    }
 
    for (int s=0; s<N+1; s++)
    {
        MasF[s] = F(MassPoint[s], N, r);
    }
 
//Step:
    //Сортировка
    for (int i=0; i<N+1; i++)
    {
        for (int j=0; j<N; j++)
        {
            if (F(MassPoint[j], N, r) > F(MassPoint[j+1], N, r))
            {
                tmp = MassPoint[j];
                MassPoint[j] = MassPoint[j+1];
                MassPoint[j+1] = tmp;
                double tmp2;
                tmp2=MasF[j];
                MasF[j]=MasF[j+1];
                MasF[j+1]=tmp2;
            }
        }
    }
 
    //Нахождение наилучшей, наихудшей и средней точек
    X_l = MassPoint[0];
    X_h = MassPoint[N];
    X_s = MassPoint[N-1];
 
    *for (int s=0; s<N+1; s++)
    {
        MasF[s] = F(MassPoint[s], N, r);
    }*
 
    printf("%0.4f\n",MasF[0]);
    
    //Step 3
 
    for (int i=0; i<N; i++)
    {
        X_c.SetPoint(0.0,i);
    }
    
    for (int i=0; i<N+1; i++)
    {
        X_c = X_c + MassPoint[i];
    }
    
    X_c = (X_c - X_h) / N;
    MasF[N+1] = F(X_c, N, r);
    
    //Step 4
 
    Sig = 0.0;
    double a1111;
    for (int j=0; j<N+1; j++)
    {
        a1111=MasF[j] - MasF[N+1];
        Sig = Sig + a1111*a1111;
    }
    Sig = Sig * n;
 
 
    if (Sig <= E2)
    {
        delete [] MassPoint;
        return X_l;
    }
 
    //Step 5. Отражение
 
    X_r = X_c + (X_c - X_h)*a;
    MasF[N+2] = F(X_r, N, r);
 
    //Step 6
 
    if (MasF[N+2] <= MasF[0])
    {
        //Растяжение
        X_str = X_c + (X_r - X_c)*c;
        MasF[N+3] = F(X_str, N, r);
        //return X_str;
        
        if (MasF[N+3] < MasF[0])
        {
            MassPoint[N] = X_str;
            MasF[N] = F(MassPoint[N], N, r);
        }
        else
        {
            MassPoint[N] = X_r;
            MasF[N] = F(MassPoint[N], N, r);
        }
        goto Step;
    }
 
    else if ( (MasF[N-1] < MasF[N+2]) && (MasF[N+2] <= MasF[N]) )
    {
        //Сжатие
        X_b = X_c + (X_h - X_c)*b;
        MassPoint[N] = X_b;
        MasF[N] = F(MassPoint[N], N, r);
        goto Step;
    }
    else if ( (MasF[0] < MasF[N+2]) && (MasF[N+2] <= MasF[N-1]) )
    {
        MassPoint[N] = X_r;
        MasF[N] = F(MassPoint[N], N, r);
        goto Step;
    }
    else if ( MasF[N+2] > MasF[N] )
    {
        //Редукция
        for (int p=0; p<N+1; p++)
        {
            MassPoint[p] = X_l + (MassPoint[p] - X_l)*0.5;
            MasF[p] = F(MassPoint[p], N, r);
        }
        goto Step;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.04.2011, 08:06     Метод деформированного многогранника на С++ #2
Дай ссылку на сам метод и растолкуй задачу.
Xerdum
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 10
18.04.2011, 09:23  [ТС]     Метод деформированного многогранника на С++ #3
Вот Книжка. Страница 138. Он же метод М.Нелдера-Мида.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.04.2011, 09:34     Метод деформированного многогранника на С++ #4
Численной оптимизацией занимашься?
Xerdum
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 10
18.04.2011, 09:40  [ТС]     Метод деформированного многогранника на С++ #5
Ну да. Есть такое дело. А в С++ я только начинающий.
Xerdum
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 10
22.04.2011, 01:44  [ТС]     Метод деформированного многогранника на С++ #6
Неужели я не так поставил вопрос?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.04.2011, 08:55     Метод деформированного многогранника на С++ #7
Xerdum, с вопросом всё впорядке, просто знатоков метода дефицит.

Добавлено через 59 секунд
Попоробуй обратиться к Седых Сергею Владимировичу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2011, 16:32     Метод деформированного многогранника на С++
Еще ссылки по теме:

Метод Шара C++
Метод хорд C++
C++ Метод Ньютона
C++ Метод RKF45?
Метод Нелдера-Мида(деформируемого многогранника) C++

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

Или воспользуйтесь поиском по форуму:
Xerdum
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 10
22.04.2011, 16:32  [ТС]     Метод деформированного многогранника на С++ #8
А как его найти? Дай ссылку на его профиль.
Yandex
Объявления
22.04.2011, 16:32     Метод деформированного многогранника на С++
Ответ Создать тему
Опции темы

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