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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.78
CryNet
0 / 0 / 1
Регистрация: 13.04.2011
Сообщений: 78
Записей в блоге: 1
#1

Метод Золотого Сечения - C++

11.12.2011, 18:28. Просмотров 4438. Ответов 3
Метки нет (Все метки)

Помогите пожалуйста прокомментировать данную программу, а то не до конца пойму все действия.

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
#include <iostream>
#define eps 1e-3
#define tay 1.618
 
void Gold(double a, double b)
{
        std::cout<<"\n\n\n\tМетод золотого сечения:\n";
        double x1, x2, _x, xf1, xf2;
        int iter(0);
        x1 = a + (b - a) / (tay * tay);
        x2 = a + (b - a) / tay;
        xf1 = Fun(x1);
        xf2 = Fun(x2);
  P:
        iter++;
        if(xf1 >= xf2)
        {
                a = x1;
                x1 = x2;
                xf1 = Fun(x2);
                x2 = a + (b - a) / tay;
                xf2 = Fun(x2);
        }
        else
        {
                b = x2;
                x2 = x1;
                xf2 = xf1;
                x1 = a + (b - a) / (tay * tay);
                xf1 = Fun(x1);
        }
        if(fabs(b - a) < eps) 
        {
                _x = (a + b) / 2;
                std::cout<<"Результат:\nx = "<<_x<<"\t\tF(x) = "<<Fun(_x)<<
                        "\nКоличество итераций: "<<iter;
        }
        else
                goto P;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2011, 18:28     Метод Золотого Сечения
Посмотрите здесь:

Метод золотого сечения. - C++
Народ, подскажите пожалуйста как будет выглядеть задача на С++ по методу Золотого сечения, при условии: F0(x)= -(x*x*x)+9(x*x)-24x-2 ...

Метод золотого сечения - C++
Доброго времения суток. Помогите пжлст исправить или добавь формулу(методы Золотого сечения). Там резульаты получается все нуля,а нужно...

Метод золотого сечения - C++
Пожалуйста , скиньте код Золотого сечения на С++ и объясните строчки именно с алгоритмом , очень прошу

Метод хорд, касательных, золотого сечения - C++
Написать программу которая решает какой из методов дает более точный результат для уравнения (уравнение свое), Хорд/касательных/золотого...

Метод золотого сечения считается неправильно - C++
#include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &quot;conio.h&quot; #include &quot;math.h&quot; #include &lt;iostream&gt; float Afunc(float x1) { ...

Метод Золотого сечения. Пассивный поиск - C++
Нужно написать программу Описание на картинке. Выручайте! Спасибо заранее кто поможет сделать. изображение

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
11.12.2011, 18:39     Метод Золотого Сечения #2
Метод Золотого сечения подразумевает нахождения экстремума функции на промежутке [a;b] путём последовательного деления промежутка на две части(см систему)
http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases}  & \text {x}_{1} = b - \tau *(b - a) \\   & \text {x}_{2} = a + \tau *(b - a) \end{cases}
где
http://www.cyberforum.ru/cgi-bin/latex.cgi?\tau = \frac{\sqrt{5} - 1}{2}\approx 0,61803399 (http://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{1} < {x}_{2})
-=ЮрА=-
Заблокирован
Автор FAQ
11.12.2011, 19:08     Метод Золотого Сечения #3
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
#include <iostream>
#include <cmath>
using namespace std;
 
double f(double x)
{
    double ret = pow(x,3) + 8*pow(x,2) - 3*x + 3;
    return ret;
}
 
int main()
{
    long nIter = 1;
    double a, b, e, xmin;
    cout<<"Enter a : ";cin>>a;
    cout<<"Enter b : ";cin>>b;
    cout<<"Enter e : ";cin>>e;
    double t = (sqrt(5) - 1)*0.5;
    double x1 = b - t*(b - a);
    double x2 = a + t*(b - a);
    while(e <= fabs(b - a))
    {
        cout<<"Iteration : "<<(nIter++)<<endl;
        cout<<"x1 =  "<<x1<<endl;
        cout<<"x2 =  "<<x2<<endl;
        cout<<"f(x1) "<<f(x1)<<endl;
        cout<<"f(x2) "<<f(x2)<<endl;
        if(f(x2) < f(x1))
            a = x1;
        else
            b = x2;
        x1 = b - t*(b - a);
        x2 = a + t*(b - a);
    }
    cout<<"xmin =  "<<(xmin = (a + b)*0.5)<<endl;
    cout<<"f(xmin) "<<f(xmin)<<endl;
    system("pause");
    return 0;
}
Вывод в консоль
Enter a : -5
Enter b : 5
Enter e : 0.001
Iteration : 1
x1 = -1.18034
x2 = 1.18034
f(x1) 16.0422
f(x2) 12.2491
Iteration : 2
x1 = 1.18034
x
раскрыть
2 = 2.63932
f(x1) 12.2491
f(x2) 69.1957
Iteration : 3
x1 = 0.27864
x2 = 1.18034
f(x1) 2.80684
f(x2) 12.2491
Iteration : 4
x1 = -0.27864
x2 = 0.27864
f(x1) 4.43541
f(x2) 2.80684
Iteration : 5
x1 = 0.27864
x2 = 0.623059
f(x1) 2.80684
f(x2) 4.47832
Iteration : 6
x1 = 0.0657781
x2 = 0.27864
f(x1) 2.83756
f(x2) 2.80684
Iteration : 7
x1 = 0.27864
x2 = 0.410197
f(x1) 2.80684
f(x2) 3.18452
Iteration : 8
x1 = 0.197334
x2 = 0.27864
f(x1) 2.72721
f(x2) 2.80684
Iteration : 9
x1 = 0.147084
x2 = 0.197334
f(x1) 2.735
f(x2) 2.72721
Iteration : 10
x1 = 0.197334
x2 = 0.22839
f(x1) 2.72721
f(x2) 2.74404
Iteration : 11
x1 = 0.17814
x2 = 0.197334
f(x1) 2.7251
f(x2) 2.72721
Iteration : 12
x1 = 0.166278
x2 = 0.17814
f(x1) 2.72695
f(x2) 2.7251
Iteration : 13
x1 = 0.17814
x2 = 0.185472
f(x1) 2.7251
f(x2) 2.72516
Iteration : 14
x1 = 0.173609
x2 = 0.17814
f(x1) 2.72553
f(x2) 2.7251
Iteration : 15
x1 = 0.17814
x2 = 0.180941
f(x1) 2.7251
f(x2) 2.72502
Iteration : 16
x1 = 0.180941
x2 = 0.182672
f(x1) 2.72502
f(x2) 2.72503
Iteration : 17
x1 = 0.179871
x2 = 0.180941
f(x1) 2.72504
f(x2) 2.72502
Iteration : 18
x1 = 0.180941
x2 = 0.181602
f(x1) 2.72502
f(x2) 2.72502
Iteration : 19
x1 = 0.181602
x2 = 0.18201
f(x1) 2.72502
f(x2) 2.72502

Iteration : 20
x1 = 0.181349
x2 = 0.181602
f(x1) 2.72502
f(x2) 2.72502
xmin = 0.181271
f(xmin) 2.72502
Для продолжения нажмите любую клавишу . . .
Миниатюры
Метод Золотого Сечения   Метод Золотого Сечения  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2011, 19:56     Метод Золотого Сечения
Еще ссылки по теме:

Ошибка в коде, использующем метод золотого сечения - C++
В общем одна единственная ошибка #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace...

Метод золотого сечения.исправьте ошибку пожалуйста - C++
Задача &quot;Провести оптимизацию полученных полиномов на всем заданном интервале по методу золотого сечения&quot; вот что я закодил: #include...

Метод "Золотого сечения". Программа не работает под Borland 3.1 - C++
Метод золотого сечения #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;math&gt; #include &lt;iostream&gt; #define M_E...

Для функции R(x)=cos(0.5*x + 0.2) - x^2 использувать метод "золотого сечения" - C++
Для функции R(x)=cos(0.5*x + 0.2) - x^2 использувать метод &quot;золотого сечения&quot;

Поиск методом золотого сечения - C++
Здравствуйте, вот задался целью написать поиск в большом массиве, с помощью метода золотого сечения: вернуть функция должна номер...

найти методом золотого сечения минимум - C++
просто нужно взять любое линейное уравнение и найти методом золотого сечения минимум. и на с++ всё это записать. не плохо было бы с...


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

Или воспользуйтесь поиском по форуму:
CryNet
0 / 0 / 1
Регистрация: 13.04.2011
Сообщений: 78
Записей в блоге: 1
11.12.2011, 19:56  [ТС]     Метод Золотого Сечения #4
а строчки кода прокоментировать можеш?
Yandex
Объявления
11.12.2011, 19:56     Метод Золотого Сечения
Ответ Создать тему
Опции темы

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