Паскаль. Основы программирования


Применение ряда Фибоначчи - часть 2


Если a - левый конец промежутка, b - правый, тогда разделить отрезок можно так:  x2 := a + (b - a)*fib(n - 1)/fib(n); y2 := f(x2);

Для n = 10 отношение fib(9)/fib(10) = 34/55 = 0.6181818... . Тогда, правая граница станет равна: x2 := 1.236364... . Для дальнейшего процесса поиска, надо "приблизить" левый конец промежутка на такое же расстояние к правому концу (

), затем найти соответствующее значения функции (y1 := f(x1) и определить, который из промежутков брать для дальнейшего рассмотрения.

В дальнейшем могут возникнуть несколько случаев.

Если x2 > x1 и y2 > y1, тогда в качестве правого конца промежутка принять x2 и зафиксировать его (b := x2), а x2 заменить на x1 (x2 := x1), y2 присвоить значение y1 (y2:=y1) и повторить процесс приближения левого конца к правому:

x1 := a + b - x2.

Если x2 <= x1 и y2 > y1, тогда a := x2; x2 := x1; y2 := y1 и повторить:

x1 := a + b - x2.

Если x2 > x1 и y2 < y1, тогда a := x1 и выполнить:      x1 := a + b - x2.

Если x2 <= x1 и y2 <= y1, тогда b := x1 и выполнить: x1 := a + b - x2.

Если ни одно из этих условий не выполняется, тогда выполнятся оператор:

x1 := a + b - x2

и весь процесс повторяется.

Для составления программы потребуется функция, вычисляющая члены ряда Фибоначчи, уже знакомая нам:

{ Функция вычисления членов ряда Фибоначчи }

Function fib(n : integer) : real;

      var

         f, f1, f2 : real;

         i : integer;

      begin

          f1 := 1; f := 0;

          for i := 1 to n do

             begin

                 f2 := f1; f1 := f;

                 f := f1 + f2

             end;

          fib := f

      end;

Нужно будет вычислять значения заданной функции и для этого составим следующую функцию:

{ Заданная исследуемая функция }

 Function

func(x : real) : real;

       begin

          func := x*x*x*x - 14*x*x*x + 60*x*x - 70*x

       end;

Полностью программа

приводится ниже:

Program Minimumfib;

     uses WinCrt;

   label 1;

   var

     a, aa, bb, x, b, x1, x2, y1, y2 : real;  i, n : integer;




Начало  Назад  Вперед