← Все записи

Аналитическая машина

  • математика
  • cs
  • компьютеры
  • статья

Чарльз Бэббидж был настоящим гением своего времени, блестящим изобретателем, героем романов Гёте: он был готов душу дьяволу продать, лишь бы заглянуть «за кулисы» мироздания. Мы его помним за «Аналитическую Машину». По стопам великого Паскаля он пытался воплотить в жизнь то, что сегодня пылится у каждого в доме. И если первый изобрёл не более чем усложнённые счёты, то Бэббидж намного лет вперёд опередил своё время и предвосхитил создание вычислительных машин.

Как и многие великие учёные, Бэббидж видел корень зла в одном, а именно – в неточных вычислениях. В те поры обычно использовали таблицы с рассчитанными значениями различных функций. Нужен синус 23 градусов, открывай страницу 32. Табличные значения высчитывали люди в столбик, люди ошибались, ошибки накапливались, а Бэббидж негодовал. В конце 80х XIX столетия после того, как он в очередной раз обсудил проблему с астрономом Гершелем, его терпению настал конец. На тот момент у него уже было пару работ, где на высоком уровне анализировались убытки государства за счёт «плохих» цифр, и он решил положить конец проблеме раз и навсегда.

После мучительных и долгих исканий в его голову пришла идея «Разностной Машины». Машина должна была последовательно высчитывать значения какой-либо функции в различных точках. Например, f(x)=x², при x=1..10.  Сразу возникает несколько вопросов, которые сводятся к одному общему: «Как заставить груду металлолома это сделать?». Даже сегодня, имея ПК, зная язык программирования, нам бы пришлось написать какой-никакой рекурсивный анализатор выражений (или parser), решить проблему представления трансцендентных функций (синуса, логарифма) и вычислить в цикле уже все значения. К счастью, вторая проблема была решена ещё задолго до Бэббиджа с помощью рядов Тейлора. Как он решил первый вопрос здесь я и попробую рассказать, последний – оставим механикам.

Возьмём самую простую функцию f(x)=a*x+b. И построим такую таблицу:

x f(x) Δf
1 a*1+b a
2 a*2+b a
3 a*3+b a
4 a*4+b -

Третий столбец строится по формуле Δf=f(x+h)-f(x), где h=1, и он символизирует среднюю скорость изменения функции, для линейной функции она постоянна. Если h устремить к нулю, то мы получим дифференциал, который связан с Δf, как Δf=(f'(x)+ε)*h, т.е. отличается от Δf на величину бесконечно малую высшего порядка. В нашем элементарном примере видно, что для того чтобы получить значение в следующей точке, достаточно прибавить постоянную a. Вот она, главная идея. Если у нас есть полином n-ой степени, то мы можем построить все разности, вплоть до n-ого порядка, и потом рекурсивно делать вычисления. Сейчас всё поясним на примере.

Предположим, что мы хотим подсчитать значения функции f(x)=x³ в точках x=2..2.5, с шагом h=0.1. Теперь строим табличку:

x f(x) Δf Δ²f Δ³f
2 8.000 1.261 0.126 0.006
2.1 9.261 1.387 0.132 0.006
2.2 10.648 1.519 0.138 0.006
2.3 12.167 1.657 0.144 -
2.4 13.824 1.801 - -
2.5 15.625 - - -

Как видно из таблицы, в последнем столбце значения одинаковы и это есть хорошо. Это значит, что можно только вычислить все значения первого ряда (вручную), а потом последовательно переходить к следующим рядам. Вот правило: значение в данной клетке равно сумме значений в верхней и верхней-правой клетках. Например:

9.261 = 8.000 + 1.261;

1.387 = 1.261 + 0.126;

0.132 = 0.126 + 0.006.

Именно это и реализовал Бэббидж, именно поэтому его машина и называлась разностной (или аналитической). Важно отметить, что в его машине было всего 8 ячеек памяти, поэтому удавалось вычислять полиномы только n-ой степени, где n<=8. Каждая ячейка была представлена 31 шестёренкой: могла хранить значение величиной в двойное слово. Машина должна была работать на пару, до ума её довёл уже сын учёного.

Интересный факт, что уже в те годы Бэббидж правильно угадал архитектуру будущих компьютеров. Только вот процессор у него назывался фабрикой, память – складом, а шина была прообразом Фордовского конвейера.   Но разве можно от него было требовать большего.