Донецкий техникум промышленной автоматики

сама наукомістка

"Ні, хлопці, важко цю штуку описати, якщо хто не бачив, дуже вже вона проста на вигляд, особливо коли придивишся і повіриш нарешті своїм очам."

Стругацькі, "Пікнік на узбіччі"

Редрік Шухарт важко було описати "пустушку" швидше за все тому, що надто вже багато цих дивовижних об'єктів він переносив на своїй спині з Зони під прилавок Ернесту. Так само важко описувати улюблену комп'ютерну програму після приблизно тисячного дабл-кліка по її іконці: час перетворює все дивовижне в звичне і просте на вигляд. Але під цю оманливу простоту дуже навіть варто заглянути, якщо мова йде про програму Mathematica, однієї з найскладніших систем ПО в світі, якій 23 червня 1998 року минуло 10 років.

Давайте ми з Вами, шановний читачу, знайдемо на робочому столі іконку у вигляді різнобарвного зірчастого ікосаедра і зробимо по ній подвійне клацання. Це дасть нам паузу для неліричний відступу під акомпанемент вінчестера. Ох, вже ці дабл-кліки! Деякі люди дуже не люблять такі складні прийоми і відповідні їм операційні системи від MS. Однак тема даної статті - Mathematica - дає рідкісну в наші дні можливість не дратувати їх, і без того скривджених на дурне більшість, що віддає перевагу найгірше краще. Дійсно, хоча широкої поширеності і високої продуктивності платформи Wintel в доступному для огляду майбутньому ніщо не загрожує, компанія Wolfram Research (див. Www.wolfram.com), яка створила і розвиває Mathematica, забезпечує справжню многоплатформенность цієї програми на більш ніж 20 типах комп'ютерних систем: Windows 95 / NT, Macintosh, Sun SPARC, DEC Alpha, HP PA-RISC, Silicon Graphics, IBM RISC, Linux, NextStep (на 4 типах процесорів), OS / 2, OpenVMS і т.д. Легко здогадатися, яка з версій програми найприбутковіша для компанії. Зате користувачеві глибоко байдуже, на якій платформі він працює з Mathematica: він бачить той же інтерфейс, використовує ту саму мову програмування і без проблем переносить свої документи і програми на іншу платформу. Ось тільки при такому перенесенні він не виграє і порядку в продуктивності: пройшли ті часи, коли вчені та інженери кисло кривилися при згадці про PC.

А ось і вона, Mathematica! На екрані - графічний інтерфейс "Notebook" у всій своїй суворій простоті. Ніяких прикрас, ніяких мультиків з окатий Скрепочка, адже з цією програмою працюють люди серйозні, а не сміхотливі довгоногі секретарки. Зверху - вузьке горизонтальне вікно меню, зліва на пів-екрану - пусте поки вікно нового документа-ноутбука "Untitled-1", праворуч - вузьке вертикальне вікно палітри "BasicInput". Ні, ця палітра не має відношення до Бейсік: у Mathematica свою власну мову програмування - потужний, гнучкий, виразний і ні на що не схожий. А палітра ця, як і багато інших, що викликаються з меню чи створювані користувачем, просто знижує навантаження на клавіатуру. Клацаючи мишкою по кнопках палітр, можна вводити в документ-ноутбук грецькі, готичні і інші історичні літери, утомливо довгі команди типу JordanDecomposition [], матриці, суми, інтеграли, стрілки, тильди, Набла, індекси, ступеня, радикали тощо, без чого математик, втиснутий в командний рядок, відчуває себе хворим і нещасним. Втім, все це друкарське достаток - понад 700 спецсимволов - вводиться і за допомогою чечітки на клавіатурі, причому декількома альтернативними способами. Ноутбук багатоликий. Ноутбук - це електронний документ, який підтримує на екрані і на печатці текст, формули і графіку (2D і 3D) з кольором, масою шрифтів і символів, звичної двомірний математичних позначень і засобами форматування всього цього господарства, а не для друку - ще й анімацію зі звуком. Ноутбук - це файл * .nb в стандартній 7-бітної кодуванні і тому придатний для передачі по будь-яких каналах зв'язку. Ноутбук - це потужний засіб підготовки наукових статей, лекцій, книг і презентацій, а за якістю друку тексту з рясними формулами його перевершує хіба що тільки TEX. Але вся ця краса вторинні, а первинно те, що ноутбук - інтерфейс Mathematica, що забезпечує зручне спілкування людини з ядром програми, з "Kernel", де, власне, і укладені ті мільйони кінських сил обчислювальної потужності, за які мільйони користувачів люблять Mathematica.

До речі, ядро ​​поки дрімає на вінчестері, що не завантажені за непотрібністю, адже ми його ще ні про що не запитали. Запитаємо. Друкуємо в ноутбуці 2 + 2 і тиснемо Shift + Enter. Так і є: сам по собі інтерфейс тупий як пуп в математиці, хоч і здатний надрукувати цілу монографію по цій науці. Ноутбук викликає ядро, довго бурчить вінчестер, і ось з'являється воно, як тінь батька Гамлета: на Taskbar поруч з кнопкою "Mathematica" виникає кнопка "Mathematica Kernel", що відповідає виключно за індикацію завантаження ядра. Хоча саме ядро ​​ми ніколи не побачимо, весь сенс його незримої присутності полягає в його діях. Ядро удруковує перед 2 + 2 синє In [1] =, обчислює значення виразу 2 + 2 і з нового рядка друкує в ноутбуці відповідь: Out [1]: = 4. Феноменально! Так, рішення таких проблем на Mathematica подібно скопуванням городу за допомогою трактора "Кіровець". Але математичних проблем в науці і техніці багато і дуже різних. Над одними з них Mathematica замислюється на мікросекунди, над іншими - на місяці. Сказати, що ядро ​​програми може обчислити все, буде неправдою, а й нелегко придумати те, що йому не під силу: зазвичай людина, що знайшов слабке місце в Mathematica, поступово червоніє в міру усвідомлення того, що він сам не зумів правильно поставити їй запитання. Mathematica - універсальна програма для виконання обчислень всіх трьох основних типів: чисельних, графічних і символьних (тобто алгебраїчних). Хоча пристрій ядра модульне, не можна сказати, що зазначені типи обчислень в ньому строго розмежовані: чисельні алгоритми, наприклад, інтенсивно використовують алгебру, а графіка - швидкі чисельні оцінки з машинної точністю. Mathematica - інтерпретатор, і це розумно, тому що подаються користувачем короткі команди типу Solve і Plot3D запускають на виконання цілі сотні сторінок вже готового коду. Але Mathematica має і вбудований компілятор, який помітно прискорює обчислення, інтенсивно використовують FPU, він, наприклад, автоматично застосовується при графічних обчисленнях. У Mathematica тип змінних не обмовляється, тобто вона - нетіпірованная система. Дуже зручно, що для неї 1.5 - свідомо число з машинної точністю, проте 3/2 1000 !, Sqrt [2] і Pi - це абсолютно точні числа, які обчислюють за вимогу з довільною точністю, машинного чи вищою. Цікаво, як символьні вирази представляються на рівні ядра: xy перетворюється в Plus [x, Times [-1, y]]. Алгоритми ядра Mathematica багато в чому не схожі на те, як обчислює людина. Наприклад, обчислюючи невизначений інтеграл, вона спочатку будує можливу відповідь в максимально загальній формі (а набір відомих їй спецфункцій колосальний), потім його диференціює, після чого намагається підігнати результат до подинтегрального висловом. Нерозумно? Для людини - так, а Mathematica може собі таке дозволити від надлишку сил. (Раджу сходити на www.integrals.com і там подивитися її інтегратор в дії.) Багато алгоритми ядра написані вручну, але також багато згенеровані комп'ютерно - самої Mathematica. Приклад: алгоритми обчислення вбудованих функцій з машинної точністю (слід пам'ятати, що в цій програмі буквально все може обчислюватися і з довільною точністю - тоді FPU не використовується). В основі цих алгоритмів лежать формули, які, забезпечуючи достатню точність, повинні бути гранично короткими; ось такі оптимальні формули і вивела сама для себе Mathematica, витративши на деякі з них місяці обчислень. Це було того варте: в відношенні ефективності обчислювальних алгоритмів Mathematica не має собі рівних. Наприклад, на чисельне визначення власних значень випадкової матриці розміром 50 на 50 вона витрачає 1 секунду на типовому PC, а її конкурентка - програма Maple - більше 6 хвилин. Чи легко прискоритися в 400 разів "залізним" способом?

Mathematica - одна з найскладніших програм в світі. Її вихідний код написаний на комбінації Сі і власної мови Mathematica. Исходник ядра містить 500000 рядків Сі і 80000 рядків мови Mathematica, що становить 15 Мб коду в сукупності. Код Сі написаний на спеціальному фірмовому розширенні мови Сі, яке підтримує необхідні функції управління пам'яттю і має деякі об'єктно-орієнтовані можливості. У исходнике ядра на мову і систему припадає 30% коду, на чисельні обчислення - 25%, на алгебру - 25%, на графіку і обробку виходу ядра - 20%. Потрібно особливо підкреслити, що вихідний код ядра Mathematica з точністю до частки відсотка єдиний для всіх типів комп'ютерних систем, на яких працює ця програма. Однак це не так щодо інтерфейсу: його исходник містить близько 175000 рядків системно-незалежного коду Сі (з них 60000 відповідають за форматування виразів), але крім них - від 20000 до 50000 рядків системно-залежного коду Сі. Mathematica використовує модель обчислень клієнт-сервер, при цьому інтерфейс і ядро ​​пов'язані системою MathLink - тієї ж самої, що служить для зв'язку Mathematica із зовнішніми програмами. На більшості платформ ядро ​​може працювати на віддаленому сервері, але при сучасній продуктивності PC це якось неактуально. Останню думку варто розвинути в історичному аспекті. Концепцію програми Mathematica, її дизайн і мову придумав в 1986 році 27-річний Стівен Уолфрем (Stephen Wolfram); в наступному році він заснував компанію Wolfram Research. З тих пір більше тисячі людино-років пішло на розробку коду Mathematica, стільки ж - на її тестування. У 1988 році вийшла Mathematica 1.0. Обсяг вихідного коду її ядра становив 150000 рядків, і тому ця програма вимагала дуже просунутого "заліза" - на ті часи. Версія 2.0 (1991 рік) мала исходник ядра об'ємом 350000 рядків - і знову настільки могутній "дух" містився далеко не в будь-якому "тілі". Спочатку її вимоги - 8 Мб оперативної пам'яті для спокійної роботи і 15 Мб на вінчестері для інсталяції - здавалися просто жахливими, але за 5 років життя 2-й версії це відчуття випарувалося. Поточна версія 3.0, про яку і написана ця стаття, вийшла в 1996 році. Її чекали не тільки з нетерпінням (чекали щось не менше мільйона людино-років), а й зі страхом: а раптом вона зажадає 128 Мб оперативної пам'яті? Але немає: розробники стали скромнішими, а "залізо" зросла неймовірно. Сьогодні вимоги Mathematica нікого не злякають: на всіх платформах досить 130 Мб на вінчестері для повної інсталяції (з них 80% йде на вичерпну документацію і пакети), а рекомендований обсяг оперативки становить всього лише 32 Мб, причому для скромної Windows 95 рекомендується 16 Мб, і цього дійсно вистачає. Особливо повторю: для Linux рекомендується 32 Мб, як для NT і всіх Unix'ов. І ще про 95-ке. Поширена думка, що під цією ОС серйозно працювати взагалі неможливо. Не знаю, на чому воно грунтується, і "не скажу про всю Одесу", але у мене Mathematica під 95-кою безперервно вважає в фоновому режимі по кілька діб з повним завантаженням процесора і "свопом" в пару сотень Мб, при цьому нікому і нічому не заважає, і все OK. Агітацію я припиняю нагадуванням про те, що Mathematica дозволяє користувачеві вибрати собі до смаку практично будь-яку платформу. Більш того, вона дозволяє "переноситися" не тільки в просторі, але і в часі: програми, написані на мові Mathematica 1.0, працюють і з версією 3.0, хоча у ядер 1-й і 3-й версії збігаються всього лише кілька відсотків коду.

Все досить складне містить помилки. Природа пише і тестує генетичний код людини вже 3,5 млрд. Років - і що ж? Тому і в Mathematica є помилки і завжди будуть. Але компанія Wolfram Research до надійності свого дітища ставиться дуже серйозно. Особливо ретельно тестується ядро ​​програми. В основному це робиться автоматизованою системою, написаної на мові Mathematica! Система генерує і вводить в ядро ​​свої питання і аналізує його відповіді, використовуючи для контролю пари взаємно-зворотних операцій типу ступінь - корінь або інтегрування - диференціювання. Питання генеруються не тільки випадковим чином: всі стандартні математичні таблиці і тонни вправ з підручників сканувалися, вводилися і перевірялися. У кожному спірному випадку арбітром служить експерт-людина. При тестуванні автоматизована система перевіряє не тільки результат, але і використання пам'яті, швидкість і повідомлення про помилки. Є також і спеціальна інструментальна версія Mathematica: вона працює набагато повільніше звичайної, зате дозволяє контролювати на кожному кроці обчислень використання пам'яті, можливість переривання рахунку і те, які частини коду задіяні в даний момент. Зрозуміло, тестування програми проводиться окремо на кожному з багатьох рідних для неї типів комп'ютерних систем. Тому-то в Wolfram Research на 200 осіб припадає 550 найрізноманітніших комп'ютерів.

Мова Mathematica заслуговує найвищих похвал! Кажуть, що сьогодні молодь вже ніде не вивчає Фортран, і цей сивий науково-орієнтований патріарх вмирає. На жаль, він дуже застарів, і навіть " реанімація -90 "його не врятувала. Однак в останні роки в науково-технічних колах круто набирає популярність мову Mathematica. Цей науково-орієнтована мова дуже не схожий на Фортран, але здатний стати стандартом де-факто, як би Фортраном XXI століття. Він простий і логічний. У ньому надзвичайно продумано використовуються великі літери, три типи дужок, знаки пунктуації, кілька типів привласнення. Його концепції "expression", "list", "rule", "pattern", "string", "pure function" дуже загальні і так само функціональні. Він підтримує багато парадигм програмування: процедурну, функціональну, об'єктно-орієнтовану, а ще - як же це буде по-російськи? - "list-based", "rule-based", "string-based" і, зрозуміло, "mixed". Мовою Mathematica можна висловити будь-яку проблему з будь-якої математизированной області науки і техніки і при цьому отримати не тільки працюючу програму, але і задоволення.

Ну а такого розкішного Help'а, як в Mathematica, Ви ніде не знайдете. Недарма його названо "Help Browser": не тільки своїм пристроєм, але і інформаційним багатством він наводить на думки про Мережі. Вичерпний предметний покажчик, повний список вбудованих функцій з прикладами і посиланнями, опису стандартних пакетів, красиве введення для початківців, додаткова системно-залежна інформація. Але головна перлина Help'а - книга самого Стівена Уолфрема "The Mathematica Book", тобто найкраща книга про цю програму. Повністю і on-line! А в її паперовому варіанті, між іншим, 1400 сторінок. Весь вміст Help'а виконано у вигляді електронних документів-ноутбуків засобами інтерфейсу програми, і це взагалі типово для Mathematica: якщо в ній є правило, то з нього немає винятків.

Нарешті, останнє запитання: а чому дана стаття називається саме так? Help і тут допоможе. Якщо Ви перегляньте імена понад 1000 вбудованих функцій Mathematica і назви її алгоритмів, то зустрінете сотню знайомих прізвищ. Ератосфен і Чебишев, Ньютон і Ейлер, Ріман і Гаусс, Вейерштрасс і Жордан, Коші і Бессель ... Вони, як і багато тисяч інших іменитих і безіменних математиків, ніколи не працювали в Wolfram Research, і користувачі Mathematica не можуть ні заплатити їм, ні послати їм вдячний e-mail. Однак при кожному завантаженні Mathematica Kernel їх безсмертні душі перетікають з вінчестера в оперативну пам'ять і перетворюють залізного дурня в математичного генія. Тому будьте пильні, шановний читачу, і не лякайтеся, якщо під час сесії Mathematica з Вашого системного блоку стануть з'являтися задумливі примари в одязі різних епох і народів і здивовано дивитися на те, як швидко і легко Ви робите запаморочливі обчислення за допомогою якоїсь дивовижної машини . Не забудьте сказати їм щире "дякую", і вони підуть, не зіпсувавши Ваших * .nb файлів.

Сергій СІРИЙ

Нерозумно?
Чи легко прискоритися в 400 разів "залізним" способом?
Її чекали не тільки з нетерпінням (чекали щось не менше мільйона людино-років), а й зі страхом: а раптом вона зажадає 128 Мб оперативної пам'яті?
Років - і що ж?
Він підтримує багато парадигм програмування: процедурну, функціональну, об'єктно-орієнтовану, а ще - як же це буде по-російськи?
Нарешті, останнє запитання: а чому дана стаття називається саме так?