0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 3
1

Метод Фибоначчи

20.11.2009, 12:45. Показов 26344. Ответов 5
Метки нет (Все метки)

Ребята, помогите пожалуйста написать программу на С++ по методу Фибоначчи, при условии
f(x)=2x*x*x-6*x+3, a=0, b=2,5 .
0

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

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

Метод оптимизации. Метод Фибоначчи
Дан отрезок минимизации и точность минимизации Е=0.01. Помогите пожалуйста решить данную задачу....

Метод Фибоначчи C++
Помогите с программой. Нужно написать программу с оптимизацией методом Фибаначчи. Функцию, границы...

Генератор XORShift и Метод Фибоначчи с запаздываниями
Вопрос такой,как генерировать вещественные числа в определенном диапазоне с помощью XORShift и...

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

5
Эксперт JavaЭксперт С++
8366 / 3587 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
20.11.2009, 12:54 2
Вот
Main.cpp
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;
}

Methods.h
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;
}
1
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 7
21.06.2011, 20:26 3
Что делает выражение
C++
1
N&1
на 33,34 строчке?
0
Higher
1948 / 1214 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.06.2011, 20:28 4
N&1 == N%2
0
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 63
17.06.2021, 18:11 5
а есть возможность реализовать такой код, но без goto?
0
542 / 437 / 356
Регистрация: 05.11.2013
Сообщений: 1,208
Записей в блоге: 6
17.06.2021, 18:20 6
Функцию и интервал определите сами

Проверено для функции func(x)=x2+1 на интервале [-2;2] с единственным решением x = 0.

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
#include <iostream>
#include <cmath>
using namespace std;
 
double f(double x) {
 return pow(x,2)+1;
}
 
double gold (double(*func)(double), double a, double b, double eps) {
 const double g = (sqrt(5) - 1.0) / 2;
 double a1, b1;
 int k = 0;
 a1 = a + (1 - g) * (b - a);
 b1 = a + g * (b - a);
 while (abs(b - a) > eps) {
  if (func(a1) > func(b1)) {
   a = a1; a1 = b1;  b1 = a + g * (b - a);
  }
  else  {
   b = b1; b1 = a1; a1 = a + (1 - g) * (b - a);
  }
  if (++k > 1e5) break; //во избежание зацикливания
 }
 return (a + b) / 2;
}
 
int main() {
 double a = -2., b = 2., eps = 0.0001;
 double x = gold(f, a, b, eps);
 cout.precision(7);
 cout << "x=" << fixed << x << ", f(x)=" << f(x) << endl;
 return 0;
}
Здесь ищется минимум функции
Уже в двух темах ищется, собственно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2021, 18:20

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

По заданному числу Фибоначчи найти предыдущее и следующее числа Фибоначчи
Дано целое число N(&gt;1), которое является числом Фибоначчи: N=Fk. Найти целые числа Fk-1 и Fk+1 -...

Набрать с чисел Фибоначчи в интервале от 1 до 100, только просто числа, а также их порядковые номера в ряду Фибоначчи
Помогите с задачкой Набрать с чисел Фибоначчи в интервале от 1 до 100, только просто числа, а...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя)
Здравствуйте! Дали весьма интересное задание. Сравнить два вышеуказанных метода сортировки для...


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

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

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