С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

14.12.2013, 16:47. Просмотров 872. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 16:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод золотого сечения.исправьте ошибку пожалуйста (C++):

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

Метод Золотого Сечения - C++
Помогите пожалуйста прокомментировать данную программу, а то не до конца пойму все действия. #include &lt;iostream&gt; #define eps 1e-3 ...

Метод золотого сечения - 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) { ...

4
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?
0
sanekjo
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 11
14.12.2013, 17:10  [ТС] #3
6>0.001.а как сделать по другому?
0
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"); //Консольная команда паузы проги
 
 
}
1
sanekjo
0 / 0 / 0
Регистрация: 24.10.2013
Сообщений: 11
14.12.2013, 17:28  [ТС] #5
а мою прогу можно исправить?
0
14.12.2013, 17:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 17:28
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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