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

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

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

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

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

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

Вывести на экран в виде таблицы значения чисел из интервала от A до B с шагом C в системах счисления с основан - C++
Вывести на экран в виде таблицы значения чисел из интервала от A до B с шагом C в системах счисления с основаниями S, P, Q, R Числа...

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

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

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

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

1
blager
0 / 0 / 0
Регистрация: 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();
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2014, 02:13
Привет! Вот еще темы с ответами:

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

Вычислить и вывести на экран в виде таблицы значения функции, заданной в виде ряда Тейлора - Turbo Pascal
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от хнач до xкон с...

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

Вычислить и представить в виде массива последовательность первых 20-и чисел Фибоначчи - QBasic
Вычислить и представить в виде массива последовательность первых 20-и чисел Фибоначчи, если Xi ~ 1, Xi = 2, а каждый последующий элемент...


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

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

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