Инструменты пользователя

Инструменты сайта


bb:redbook:203

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bb:redbook:203 [2016/09/08 21:36]
prospero78 [1. Фибоначчи: гений средневековья]
bb:redbook:203 [2018/03/14 06:43]
иван_денисов удалено
Строка 6: Строка 6:
  
 ==== 2. Золотая пропорция ==== ==== 2. Золотая пропорция ====
-В эпоху Возрождения Леонардо да Винчи создал очень известный рисунок — «Витрувианский человек». Рисунок на столько совершенен, что потрясает воображение. Как оказалось, чтобы создать такой совершенный рисунок, Леонардо да Винчи воспользовался подсказкой, данной ему Фибоначчи. Например, отношение длины всего тела, к той части, что от пупка до пяток — 1,6180339887. А если взять длину части тела от пупка до пяток и сравнить с длиной от пупка до макушки — 1,6180339887...??? А если взять длину всей кисти к длине ладони — 1,6180339887!!! А если соотнести длину ладони к длине пальцев получится... 1,6180339887!!!! И это число преследует человека повсюду. Вот так Леонардо, с помощью математики создал свой шедевр. Мы тоже попробуем сейчас найти это число так точно, на сколько оно того заслуживает. [↑]+В эпоху [[https://ru.wikipedia.org/wiki/%D0%92%D0%BE%D0%B7%D1%80%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5|Возрождения ]] Леонардо да Винчи создал очень известный рисунок — [[https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%82%D1%80%D1%83%D0%B2%D0%B8%D0%B0%D0%BD%D1%81%D0%BA%D0%B8%D0%B9_%D1%87%D0%B5%D0%BB%D0%BE%D0%B2%D0%B5%D0%BA|«Витрувианский человек»]]. Рисунок на столько совершенен, что потрясает воображение. Как оказалось, чтобы создать такой совершенный рисунок, Леонардо да Винчи воспользовался подсказкой, данной ему Фибоначчи. Например, отношение длины всего тела, к той части, что от пупка до пяток — ''1,6180339887''. А если взять длину части тела от пупка до пяток и сравнить с длиной от пупка до макушки — ''1,6180339887''...??? А если взять длину всей кисти к длине ладони — ''1,6180339887''!!! А если соотнести длину ладони к длине пальцев получится... ''1,6180339887''!!!! И это число преследует человека повсюду. Вот так Леонардо, с помощью математики создал свой шедевр. Мы тоже попробуем сейчас найти это число так точно, на сколько оно того заслуживает.
  
  
 ==== 3. Задача о золотом сечении ==== ==== 3. Задача о золотом сечении ====
-Чтобы точно вычислить значение золотого сечения, нам необходимо знать, как создать непредельный ряд с основанием "1"[2]. В целом, этот метод известен. Достаточно взять сумму двух предыдущих членов ряда, чтобы получить третий. А вот чтобы найти саму золотую пропорцию — необходимо разделить последующий член пропорции, на предыдущий. И здесь есть интересная особенность: чем выше номера членов — тем точнее пропорция.+Чтобы точно вычислить значение золотого сечения, нам необходимо знать, как создать непредельный ряд с основанием "1" ((Непредельный ряд с основанием «1» хорошо известен из задачи Фибоначчи «О кроликах», предельный ряд с основанием «0» известен всем программистам — это классический двоичный ряд «0 1 4 8 16 32…». Мало кто знает, что таких рядов множество, и чем выше индекс непредельного ряда — тем больше избыточность такой позиционной системы счисления. И тем более она помехоустойчива. Всем известно, что чем сложнее система — тем выше вероятность отказа. С непредельными позиционными системами счисления — всё с точностью наоборот: чем крупнее система, тем выше надёжность. Это очень необычное свойство. )). В целом, этот метод известен. Достаточно взять сумму двух предыдущих членов ряда, чтобы получить третий. А вот чтобы найти саму золотую пропорцию — необходимо разделить последующий член пропорции, на предыдущий. И здесь есть интересная особенность: чем выше номера членов — тем точнее пропорция.
  
 Итак, нам потребуется три переменных. Две хранят предыдущее значение двух членов ряда Фибоначчи, одна — последующее. Также нам потребуется переменная, которая будет отвечать за счётчик цикла. И, собственно, сам цикл. Итак, нам потребуется три переменных. Две хранят предыдущее значение двух членов ряда Фибоначчи, одна — последующее. Также нам потребуется переменная, которая будет отвечать за счётчик цикла. И, собственно, сам цикл.
  
- Hello10.odc:+Hello10.odc: 
 +<code oberon2> 
 +MODULE TestHello10; 
 + (* это программа на языке 
 + Компонентный Паскаль. Она показывает 
 + как можно найти точную золотую пропорцию. *)
  
-  + IMPORT Log, Math;
  
-В программе применён простейший метод обмена данными: вычисляется новый член ряданаходится новое значение золотой пропорцииа затем старым членам присваивается новое значение из найденного нового члена.+ PROCEDURE Start*; 
 + VAR 
 + a0a1an: LONGINT; 
 + pr: REAL; 
 + i: INTEGER;
  
-А теперь посмотрим на вывод программы:+ BEGIN 
 + a0 := 0; 
 + a1 := 1; 
 + i := 1; 
 + WHILE i < 40 DO 
 + an := a0 + a1; 
 + Log.Int(i); Log.String(' * '); Log.Real(an / a1); Log.Ln; 
 + a0 := a1; 
 + a1 := an; 
 + INC(i) 
 + END; 
 + END Start;
  
-  +BEGIN 
 +END TestHello10.
  
-Обратите внимание на интересную закономерность: нечётный результат — меньше золотой пропорции, чётный — больше. Следующая пара повторяет эту закономерность, но уже гораздо ближе к истинной золотой пропорции. И каждый шаг приближает вычисления к ней[3].+(*)TestHello10.Start 
 +</code>
  
-На шаге 38 и 39 эти числа уже равны. И здесь нет ошибки: сказывается недостаточная точность вычислений с плавающей запятой. В примере использован цикл WHILE и это не оптимальное решениеТребуется вручную контролировать переменную "i"В качестве самостоятельного задания, предлагается переписать этот цикл использую FOR[↑]+В программе применён простейший метод обмена данными: вычисляется новый член ряданаходится новое значение золотой пропорцииа затем старым членам присваивается новое значение из найденного нового члена
 + 
 +А теперь посмотрим на вывод программы: 
 +<code> 
 +компилируется "TestHello10"   168   0 
 +старый модуль TestHello10 выгружен 
 + 1 *  1.0 
 + 2 *  2.0 
 + 3 *  1.5 
 + 4 *  1.666666666666667 
 + 5 *  1.6 
 + 6 *  1.625 
 + 7 *  1.615384615384615 
 + 8 *  1.619047619047619 
 + 9 *  1.617647058823529 
 + 10 *  1.618181818181818 
 + 11 *  1.617977528089888 
 + 12 *  1.618055555555556 
 + 13 *  1.618025751072961 
 + 14 *  1.618037135278515 
 + 15 *  1.618032786885246 
 + 16 *  1.618034447821682 
 + 17 *  1.618033813400125 
 + 18 *  1.618034055727554 
 + 19 *  1.618033963166706 
 + 20 *  1.618033998521803 
 + 21 *  1.618033985017358 
 + 22 *  1.618033990175597 
 + 23 *  1.618033988205325 
 + 24 *  1.618033988957902 
 + 25 *  1.618033988670443 
 + 26 *  1.618033988780243 
 + 27 *  1.618033988738303 
 + 28 *  1.618033988754322 
 + 29 *  1.618033988748204 
 + 30 *  1.618033988750541 
 + 31 *  1.618033988749648 
 + 32 *  1.618033988749989 
 + 33 *  1.618033988749859 
 + 34 *  1.618033988749909 
 + 35 *  1.61803398874989 
 + 36 *  1.618033988749897 
 + 37 *  1.618033988749894 
 + 38 *  1.618033988749895 
 + 39 *  1.618033988749895 
 +</code> 
 +Обратите внимание на интересную закономерность: нечётный результат — меньше золотой пропорции, чётный — больше. Следующая пара повторяет эту закономерностьно уже гораздо ближе к истинной золотой пропорции. И каждый шаг приближает вычисления к ней (( Точное значение числа золотой пропорции установить невозможно — это число иррационально (не имеет конца)С помощью классического двоичного ряда можно получить только число «2». Кроме того, ряды золотой пропорции обладают признаками //чётности// (если их представлять двоичным кодом). Такое свойство непредельных позиционных систем счисления позволяет проектировать компьютеры с автоматическим частично-гарантированным исправлением одиночных и множественных ошибок. У классического двоичного ряда — такое невозможно. Вообще. Это вообще очень большая и интересная тема. )).
  
-————————————————- +На шаге 38 и 39 эти числа уже равны. И здесь нет ошибки: сказывается недостаточная точность вычислений с плавающей запятой. В примере использован цикл ''WHILE'' и это не оптимальное решение. Требуется вручную контролировать переменную ''i''В качестве самостоятельного задания, предлагается переписать этот цикл использую ''FOR''.
-==== 4. Примечания ==== +
-[↑] У Стахова Алексея Петровича есть замечательная книга "Коды золотой пропорции"Настоятельно рекомендуется к прочтению.+
  
-[↑] Непредельный ряд с основанием "1" хорошо известен из задачи Фибоначчи "О кроликах", предельный ряд с основанием "0" известен всем программистам — это классический двоичный ряд "0 1 2 4 8 16 32...". Мало кто знает, что таких рядов множество, и чем выше индекс непредельного ряда — тем больше избыточность такой позиционной системы счисления. И тем более она помехоустойчива. Всем известно, что чем сложнее система — тем выше вероятность отказа. С непредельными позиционными системами счисления — всё с точностью наоборот: чем крупнее система, тем выше надёжность. Это очень необычное свойство. 
  
-[↑] Точное значение числа золотой пропорции установить невозможно — это число иррационально (не имеет конца). С помощью классического двоичного ряда можно получить только число "2". Кроме того, ряды золотой пропорции обладают признаками чётности (если их представлять двоичным кодом). Такое свойство непредельных позиционных систем счисления позволяет проектировать компьютеры с автоматическим частично-гарантированным исправлением одиночных и множественных ошибок. У классического двоичного ряда — такое невозможно. Вообще. Это вообще очень большая и интересная тема. 
-  
-[ ← Назад  ] [ Вверх ↑ ] [ Далее → ]