Фибоначчи
Код C++
#include <iostream>
#define eps 1e-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::cout<<"\n\n\n\tМетод Фибоначчи:\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);
}
if(fabs(b - a) <= eps)
{
_x = (a + b) / 2;
std::cout<<"Результат:\nx = "<<_x<<"\t\tF(x) = "<<Fun(_x)<<
"\nКоличество итераций: "<<k;
}
else
goto P;
}
Комментарии:
Нету комментариев для вывода...