Числа Фибоначчи: $%F_0 = 0$%, $%F_1 = 1$%, а любое следующее число Фибоначчи равно сумме двух предыдущих: $%F_n = F_{n – 1} + F_{n – 2}$%.
Известно, что при достаточно больших $%n$% справедливо приближенное равенство: $$F_n=\frac 1{\sqrt5} \cdot \big ( \frac {1+\sqrt5}2 \big ) ^n.$$ Определите наименьший номер $%n$%, начиная с которого равенство выполняется с точностью до заданного eps.

Решение задачи на Pascal:

    uses crt;
    var e,fn,f0,f1,y:real;
    n:integer;
    begin
    clrscr;
    write('e=');
    readln(e);
    f0:=0;
    n:=1;
    f1:=1;
    y:=1;
    fn:=0;
    while abs(fn-y)>e do
    begin
    n:=n+1;
    y:=f0+f1;
    fn:=(1/sqrt(5))*exp(ln((1+sqrt(5))/2)*n);
    f0:=f1;
    f1:=y;
    end;
    writeln('y=',y:0:0);
    writeln('fn=',fn:0:5);
    write('n=',n);
    readln
    end.

Никак не могу понять, как происходит вычисление, что такое eps (погрешность) и как она относится к формуле.

задан 27 Янв '15 22:21

изменен 27 Янв '15 22:59

%D0%92%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D0%BD%D0%B0's gravatar image


9917

10|600 символов нужно символов осталось
0

что такое eps(погрешность) и как она относится к формуле Если посмотреть на полную формулу для вычисления чисел Фибоначчи, так называемую формулу Бине, то видно, что приближённая формула отличается от полной на слагаемое, которое стремится к нулю... (более того, требуемый номер можно найти аналитически в пару строк) ... это отличие и есть погрешность вычисления ... то есть

Погрешность = abs(Точное значение - Приближённое значение)

И пару слов о программе...

uses crt;
var e,fn,f0,f1,y:real;
n:integer;

begin
clrscr;
write('e=');
readln(e);

%Тут определяют начальные значения чисел Фибоначчи
f0:=0;
n:=1;
f1:=1;
y:=1; %это переменная с точным значением числа с номером $%n$%... пока $%n=1$% %

fn:=0; %это переменная с приближёнными значениями И тут неясно почему ноль?... при $%n=1$% приближением является $%\frac{1+\sqrt{5}}{2\sqrt{5}}$% ...

while abs(fn-y)>e do %выполняется проверка того, что точное и приближённое значения отличаются на величину большую, чем погрешность ...
begin
n:=n+1; %Увеличивают номер числа Фибоначчи
y:=f0+f1; %Вычисляют следующее число Фибоначчи

fn:=(1/sqrt(5))exp(ln((1+sqrt(5))/2)n); %Вычисляют очередное приближение
Кстати, вычисление весьма не рациональное вычисление... можно это делать проще и быстрее...

f0:=f1; %Переобозначение вспомогательных переменных... предыдущие значения чисел Фибоначчи...
f1:=y;
end;

%Дальше идёт вывод ответа...
writeln('y=',y:0:0);
writeln('fn=',fn:0:5);
write('n=',n);
readln
end.

ссылка

отвечен 27 Янв '15 23:11

изменен 27 Янв '15 23:12

Большое спасибо! Буду думать дальше, как лучше написать программу.

(27 Янв '15 23:15) Sarah Side

введите константу $%k:=(1+sqrt(5))/2$%...

Тогда в начале программы получите, что $%fn:=k/sqrt(5)$%... а в теле цикла $%fn:=fn*k$% ...

Остальное вроде приемлемо...

(27 Янв '15 23:17) all_exist

Огромное спасибо, всю голову переломал, над этой задачей.

(27 Янв '15 23:23) Sarah Side
10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

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

Присоединяйтесь!

отмечен:

×480
×24
×13

задан
27 Янв '15 22:21

показан
472 раза

обновлен
27 Янв '15 23:23

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru