Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 13.12.2012
Сообщений: 2
1

Метод чисел Фибоначчи. Вывести решение в виде численного значения в точке экстремума независимой переменной

22.05.2014, 00:29. Показов 3113. Ответов 1
Метки нет (Все метки)

Написать программу которая должна выводить решение в виде численного значения в точке экстремума независимой переменной (x экстр.) и значения функции в этой точке y(x экстр.).
Метод расчета: Метод чисел Фибоначчи
Интервал поиска: x=-14..-0.7
Функция : max (8*x^2+7*x+1)/(x^4-17*x^3)+9
Величина точности поиска E=0.001
Нашёл что-то похожее, только тут условие другое "f(x)=2x*x*x-6*x+3, a=0, b=2,5".
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 #include <iostream>
#include <cmath>
#include <fstream>
#include "Methods.h"
 
void Fib(double, double, std::ofstream&);
 
int main()
{
    std::ofstream cout("rezult.txt", std::ios::out);
    setlocale(LC_ALL, "Russian");
    double a(0), b(2.5);
    Fib(a, b, cout);
    system("pause");
    return EXIT_SUCCESS;
}

Кликните здесь для просмотра всего текста
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
#define eps 1e-3
 
double Fun(double x)
{
    return (2 * x * x * x - 6 * x + 3);
}
int F(int n)
{
    int f, f1(1), f2(1), m(0);
    while(m < n - 1)
    {
        f = f1 + f2;
        f1 = f2;
        f2 = f;
        ++m;
    }
    return f1;
}
void Fib(double a, double b, std::ofstream& cout)
{
    cout<<"\n\n\n\tМетод Фибоначчи:\n\n";
    double x1, x2, _x, xf1, xf2;
    int k(0);
    int N(0);
    double fn1(1), fn2(1), fn, f = (b - a) / eps;
    while(fn1 < f)
    {
        fn = fn1 + fn2;
        fn1 = fn2;
        fn2 = fn;
        ++N;
    }
    x1 = a + (double)F(N - 2) / F(N) * (b - a) - (N&1 ? -1 : 1) * eps / F(N);
    x2 = a + (double)F(N - 1) / F(N) * (b - a) + (N&1 ? -1 : 1) * eps / F(N);
    xf1 = Fun(x1);
    xf2 = Fun(x2);
  P:
    ++k;
    if(xf1 >= xf2)
    {
        a = x1;
        x1 = x2;
        xf1 = xf2;
        x2 = a + (double)F(N - k - 1) / F(N - k) * (b - a) + ((N - k)&1 ? -1 : 1) * eps / F(N - k);
        xf2 = Fun(x2); 
    }
    else
    {
        b = x2;
        x2 = x1;
        xf2 = xf1;
        x1 = a + (double)F(N - k - 2) / F(N - k) * (b - a) - ((N - k)&1 ? -1 : 1) * eps / F(N - k);
        xf1 = Fun(x1);
    }
    cout<<"Итерация № "<<k<<'\n'
        <<"x1 = "<<x1<<"\t\tF(x1) = "<<xf1
        <<"\nx2 = "<<x2<<"\t\tF(x2) = "<<xf2
        <<'\n'<<std::endl;
    if(fabs(b - a) <= eps)
    {
        _x = (a + b) / 2;
        cout<<"Результат:\nx = "<<_x<<"\t\tF(x) = "<<Fun(_x)<<
            "\nКоличество итераций: "<<k;
    }
    else
        goto P;
}

Добавил #include <math.h>, а то ругался на fabs. Но что-то у меня не работает даже с тем условием. Помогите переписать программу.

Добавлено через 30 минут
Не сразу понял как работает программа, всё оказывается работает. Помогите переписать код программы под моё условие.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2014, 00:29
Ответы с готовыми решениями:

Метод Фибоначчи поиска экстремума c++
Здравствуйте, пытаюсь написать программу для поиска экстремума по методу Фибоначчи Делаю всё...

Для заданного набора пар значений независимой переменной функции определить наилучшее линейное приближение в виде прямой с уравнением y=ax+b и показат
Задача собственно такая: Для заданного набора пар значений независимой переменной функции...

Вывести в консоль в виде таблицы значения чисел в 16 и 10-ричном формате
Обьясните пожалуйста задание, и как его можно реализовать, выучили указатели. Задание:–виведення...

Вычислить массив чисел из первых 16 элементов числа чисел Фибоначчи в виде квадратной матрицы
Вычислить массив чисел из первых 16 элементов числа чисел Фибоначчи в виде квадратной матрицы

1
1 / 1 / 1
Регистрация: 13.12.2012
Сообщений: 2
02.07.2014, 02:13  [ТС] 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
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
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdio.h>
double f(double x)
{double f;
f = (9+((8*x*x+7*x+1)/(x*x*x*x-17*x*x*x)));
return f;
}
void main()
{
const double e=0.001, d=e/10;
const long Fn=50000; //N > (b-a)/(2*e)
 
 
    int F1, F0, F, N; // F1=F[n-1], F0=F[n-2]
    double x1,x2,y1,y2,x,y,a,b;
        cout<<"Vvedite nijnii granicy: "<<endl;
    cin>>a;
    cout<<"Vvedite verxnii granicy: "<<endl;
    cin>>b;
    F0=1; F1=1;
    F=0; N=0;
 
   cout<<"Method chisel Fibonachchi"<<endl<<endl;
   cout<<"Dano:(8*x^2+7*x+1)/(x^4-17*x^3)+9; [a,b]=[-14,-0,7]; eps=0.001\n "<<endl;
    while (F<Fn)
    {
        F=F1+F0;
        if (F<Fn)
        {
            F0=F1;
            F1=F;
        }
    }
    x1=a+F0*(b-a)/F;
    x2=a+F1*(b-a)/F;
    y1=f(x1);
    y2=f(x2);
    N=0;
    do
    {
        if (y1<=y2)
        {
            b=x2; x2=x1; y2=y1; x1=a+b-x2; y1=f(x1);
        }
        else
        {
            a=x1; x1=x2; y1=y2; x2=a+b-x1; y2=f(x2);
        }
        N++;
    }
    while (b-a>2*e);
    if (y1<=y2)
    {
        b=x2, x2=x1, y2=y1;
    }
else a=x1;
      x1=x2-d; // ychet raslichimosti
      y1=f(x1);
    x=(a+b)/2; y=f(x);
    cout<<"x= "<<x<<endl;
   cout<<"y= "<<y<<endl;
   cout<<endl<<"Kolichestvo experimentov N="<<N<<endl;
   getch();
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2014, 02:13

Вывести на экран в виде таблицы значения чисел из интервала от A до B с шагом C в системах счисления с основаниями 13, 10, 8, 14
Работа по системам счисления. Вывести на экран в виде таблицы значения чисел из интервала от A до...

Вывести на экран в виде таблицы значения чисел из интервала от A до B с шагом C в системах счисления с основан
Вывести на экран в виде таблицы значения чисел из интервала от A до B с шагом C в системах...

ДУ, не содержащее явно независимой переменной X
y''={e}^{2y} y(0)=0 y'(0)=1 Прошу помощи ввиду того, что в конце примера просто не могу взять...

Единица измерения независимой переменной функции
Пересаживаюсь c Maple на MathCAD Prime, жизнь заставила. Довольно любопытно реализована система...

Реализовать в виде последовательности генерацию первых N чисел Фибоначчи
Задание: Написать два варианта программы. Первый – с реализацией интерфейсов ...

Достаточное условие локального экстремума в угловой точке. Оптимальность по Парето
Привет всем, у меня теоретическое задание в курсовой: &quot;Достаточное условие локального экстремума...


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

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

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