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

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

Войти
Регистрация
Восстановить пароль
 
sanekjo
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 11
#1

Метод золотого сечения.исправьте ошибку пожалуйста - C++

14.12.2013, 16:47. Просмотров 746. Ответов 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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
float f(float x) {return 0.996515 * x*x - 0.016035 * x - 0.018121;}
int main(void) {
    int i = 0;
    float a, b, g=0.618, x1, x2,xm;
    float eps;
    setlocale(LC_ALL, "Russian");
    printf("Ввод отрезка [a, b] и точности eps:\n");
    scanf("%f%f%f",&a,&b,&eps);
    x1=b-(b-a)/g;
    x2=a+(b-a)/g;
    while (abs (a-b) > eps) {
    if (f (x1) < f (x2)) b=x2;
    else a=x1;
    x1=b-(b-a)/g;
    x2=a+(b-a)/g;   
    xm=x2-(x2-x1)/2;}
    printf("Минимум функции: (%f, %f), вычислено за %d итераций", xm, f(xm), i);
    getch();
    return 0;
}
но прога зацикливается(( интервал (-3;3) точность 0.001
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 16:47     Метод золотого сечения.исправьте ошибку пожалуйста
Посмотрите здесь:

C++ Метод золотого сечения.
Метод золотого сечения C++
Метод Золотого Сечения C++
Исправьте пожалуйста ошибку C++
C++ Метод "Золотого сечения". Программа не работает под Borland 3.1
C++ Исправьте ошибку, пожалуйста
Метод Золотого сечения. Пассивный поиск C++
Метод хорд, касательных, золотого сечения C++
C++ Метод золотого сечения считается неправильно
Метод золотого сечения C++
C++ Ошибка в коде, использующем метод золотого сечения

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nomyac
2 / 9 / 1
Регистрация: 12.10.2013
Сообщений: 43
14.12.2013, 17:08     Метод золотого сечения.исправьте ошибку пожалуйста #2
Почему же прога зацикливается? Давайте считать: a=-3; b=3; eps=0.001;
Смотрим условие в while, где сказано: пока |-3-3|>0.001, выполняем следующие действия.
Скажи, 6>0.001?
sanekjo
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 11
14.12.2013, 17:10  [ТС]     Метод золотого сечения.исправьте ошибку пожалуйста #3
6>0.001.а как сделать по другому?
nomyac
2 / 9 / 1
Регистрация: 12.10.2013
Сообщений: 43
14.12.2013, 17:16     Метод золотого сечения.исправьте ошибку пожалуйста #4
sanekjo, просто поискать в интернете)
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
#include <math.h>
#include <iostream>
#define M_E 2.71828182845904523536 
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;}   //это модуль
 
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"); //Консольная команда паузы проги
 
 
}
sanekjo
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 11
14.12.2013, 17:28  [ТС]     Метод золотого сечения.исправьте ошибку пожалуйста #5
а мою прогу можно исправить?
Yandex
Объявления
14.12.2013, 17:28     Метод золотого сечения.исправьте ошибку пожалуйста
Ответ Создать тему
Опции темы

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