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

Метод золотого сечения. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 143, средняя оценка - 4.73
дин
Сообщений: n/a
19.11.2009, 23:46     Метод золотого сечения. #1
Народ, подскажите пожалуйста как будет выглядеть задача на С++ по методу Золотого сечения, при условии: F0(x)= -(x*x*x)+9(x*x)-24x-2 a0= -5 b0=3
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.11.2009, 09:21     Метод золотого сечения. #2
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
#include <iostream>
#include <math.h>
using namespace std;
 
double f(double i)
{
    return  -1*(i*i*i)+9*(i*i)-24*i-2;
}
int main()
{
int i, n;
cout<<"Kol-vo shagov n= ";
cin>>n;
    double a=-5, b=3, g, h, fu1, fu2;
    g = a+(b-a)*(3-sqrt(double(5)))/2;
    h = a+(b-a)*(sqrt(double(5))-1)/2;
    fu1 = f(g);
    fu2 = f(h);
    for(i = 1; i <= n; i++)
    {
        if( fu1<=fu2 )
        {
            b = h;
            h = g;
            fu2 = fu1;
            g = a+(b-a)*(3-sqrt(double(5)))/2;
            fu1 = f(g);
        }
        else
        {
            a = g;
            g = h;
            fu1 = fu2;
            h = a+(b-a)*(sqrt(double(5))-1)/2;
            fu2 = f(h);
        }
    }
    cout<<(fu1-fu2)/2+fu2<<endl;
system ("PAUSE");
return 0;
}
kir_
11 / 6 / 1
Регистрация: 19.02.2010
Сообщений: 77
23.04.2010, 22:26     Метод золотого сечения. #3
Скажите пожалуста метод золотого сечения позволяет найти только минимум ?
Как находить максимум?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
23.04.2010, 22:59     Метод золотого сечения. #4
Нахождение корней уравнения
Choopa
 Аватар для Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
03.04.2011, 16:59     Метод золотого сечения. #5
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
/*
 Метод Золотого сечения (отношения)
 Программу сделал Сеченов Слава
Разработана на Borland C++
Если вы прогите в другой програмулине, 
то удалите строки где в коментах написании // Borland C++
   Удачи.
 */
#include <vcl.h>// Borland C++
#pragma hdrstop// Borland C++
    #include <math>
   #include <iostream>
#define M_E 2.71828182845904523536 //в Borland и без этой строки работает
   using namespace std;
 
double f(double x)
{return  pow(M_E,x)*sin(x*x-2*x+11);} //Здесь ваша формула
 
//---------------------------------------------------------------------------
 double ab(double i)
 {if(i<0)return -i;else return i;}   //это модуль
 
//---------------------------------------------------------------------------
 
#pragma argsused// Borland C++
void main()
{
 double a, b, g, h, fu1, fu2,eps=0.000001;
 
 
        for(int i=-1;i<=1;i+=2)//Сначало ищем минимум, затем максимум
        {
 
        cin>>a>>b; //Вводим начальную координату и конечную
 
    g = a+(b-a)*(0.38);
    h = b-0.38*(b-a);
    fu1 = i*f(g);
    fu2 = i*f(h);
 
    do{
 
        if( fu1<=fu2 )
        {
            b = h;
            h = g;
            fu2 = fu1;
            g = a+(b-a)*(0.38);  //Основная формула
            fu1 = i*f(g);
        }
        else
        {
            a = g;
            g = h;
            fu1 = fu2;
            h = b-0.38*(b-a);  //Основная формула
            fu2 = i*f(h);
        }
    }
    while(ab(a-b)>eps); //Условие выхода
    i==-1? cout<<"Minimum ":cout<<"Maximum ";
        cout<<"OTBET "<<(fu1-fu2)/2+fu2<<" v tochke "<<h<<endl;
 
 }
 
system ("PAUSE"); //Консольная команда паузы проги
 
 
}
kir_
11 / 6 / 1
Регистрация: 19.02.2010
Сообщений: 77
05.04.2011, 22:34     Метод золотого сечения. #6
Оф.топ.
это же надо было динозарика оживить =)
Yandex
Объявления
05.04.2011, 22:34     Метод золотого сечения.
Ответ Создать тему
Опции темы

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