субота, 21 липня 2012 р.

Місяць - подивилися, можна і помацати

Посадочний апарат "Луна-9".
(с) НПО Лавочкіна.
Фотографії здалеку -- цікаво, але хотілося б глянути й зблизька. Тому задача м'якої посадки на Місяць постала дуже рано. Зокрема, американці на ранніх "Рейнджерах" встановлювали капсулу із сейсмометром, що мала вижити при майже-жорсткій посадці. Однак першими успіху досягнули радянські ракетники.  

3 лютого 1966 року станція "Луна-9" передала перші зображення поверхні Місяця та перші зображення поверхні іншого небесного тіла взагалі!

Як це виглядало -- спробую розповісти. 

пʼятниця, 20 липня 2012 р.

Робота з матрицями в С++ -- бібліотека eigen

(c) Eigen FAQ
Багато років я шукав зручну і швидку бібліотеку лінійної алгебри для використання з C++ (*1). Вимоги ніби скромні -- щоб вміла створювати, додавати, віднімати матриці, множити їх на скаляр, множити між собою, шукати обернені та детермінанти. Все. При чому, для зовсім маленьких матриць -- розміром до 8х8, а в основному взагалі 2х2. (*2) Ну, ще Open Source ліцензія була б бажаною. :-) Але ця вимога не критична.

Відволікаючись поки від теми продуктивності, С++ має всі засоби, щоб зробити роботу з матрицями зручною. Однак більшість авторів матричних бібліотек вдавалися в пояснення, чому писати: add_matrix(A,B) багато крутіше, ніж A+B. Завершилося все тим, що я, на базі простенької бібліотеки Slate, склепав свою матричну бібліотеку -- Slate2, зручну для моїх потреб, хоча й доволі повільну (*3). Подивитися на останню версію цього чуда можна тут (ніяким іншим чином не розповсюджував). Щастя наступило лише кілька років тому -- натрапив на eigen!

Виникла eigen всередині проекту KDE. Зараз вона надзвичайно зручна, швидка, та вміє доволі багато. Зокрема, використовує шаблонне метапрограмування, щоб обійти деякі проблеми матричних бібліотек в C++ (*4). Вміє самостійно векторизувати, використовуючи SIMD-інструкції, такі як SSE, AltiVec і ARM NEON. Eigen3 -- третя версія, векторизує навіть роботу з матрицями комплексних чисел. Працює із фіксованими, динамічними та розрідженими матрицями. В ролі елементів матриць можуть бути числа з плаваючою крапкою, комплексні числа, цілі числа, користувацькі типи. Що вміє робити над матрицями? Багато, перераховувати довго, див. краще сюди: 1, 2, 3. Надійна -- містить більше півтисячі власних тестів, проходить стандартні тести BLAS та LAPACK , використовується багатьма проектами.

З того часу, як я натрапив на eigen ситуація покращилася -- з'явилися Armadillo, MTL4 (її попередня версія, MTL2 -- якраз наглядний приклад згадуваного вище багатослівного підходу), тощо. Як на мене, вони безперечно вартують уваги, але поступаються eigen, хоча фахово не скажу -- багато тестів не писав, багато часу на ознайомлення з ними не витрачав. Щоб відобразити своє, хай не до кінця науково перевірене, ставлення до eigen, зацитую її розробників:

Some other libraries do satisfy very well certain specialized needs, but none is as versatile as Eigen, has such a nice API, etc.

*** skipped ***

The state of existing matrix libraries before Eigen is that:
 some are Free Software
 some are fast
 some have a decent API
 some handle fixed-size matrices, some handle dynamic-size dense matrices, some handle sparse matrices
 some provide linear algebra algorithms (LU, QR, ...)
 some provide a geometry framework (quaternions, rotations...)

However Eigen is the first library to satisfy all these criteria.

Ну і ліцензія хороша -- LGPL3+.

субота, 14 липня 2012 р.

Місяць - "Що там, за горизонтом?", дубль 2

Копірайт пише, а взято тут.
Завоювавши своїм творцям пріоритет, фотографії "Луна-3" все ж були дуже низькоякісними. Спроби повторити її місію майже ідентичними станціями -- Луна-1960A i Луна-1960B, (серії Е-2Ф, потім перейменованих в Е-3 замість відміненого запуску атомної бомби на Місяць), завершилися аваріями. Перша ракета вимкнулася на 3 секунди раніше терміну -- недозаправили!,  друга розвалилася через секунду після старту, чудом нікого не вбивши -- див. спогади Чертока.

Тому, наступний раз побачити зворотню сторону вдалося лише через 6 років, при чому -- завдяки невдалій випадковості. "Зонд-3" мав бути напарником "Зонд-2" в марсіанському польоті. Однак, через якісь технічні неполадки, стартове вікно було впущене -- коли апарат був готовий, запускати на Марс його стало запізно.  Замість чекати два роки до наступного стартового вікна, було вирішено запустити його по тій же марсіанській траєкторії, як чисто інженерний тест, (Марса в точці перетину орбіти станції з його орбітою вже не було б), а по дорозі -- сфотографувати зворотну сторону Місяця. Зонд чудово відпрацював свою Місячну програму, і що найбільш сумно -- на відміну від "Зонд-2", дожив до моменту, коли він зустрівся би з Марсом, якщо б був запущений вчасно.

понеділок, 2 липня 2012 р.

Моделі теплоємності твердих тіл - вступ

Тепловий рух, (c) Wiki
Структуру роботи теоретика ми розглянули на дуже простому прикладі -- падінні тіл на Землю: 1, 2, 3. Подивимося тепер на більш реалістичні задачі, паралельно перемістившись у розвитку фізики на пару століть вперед.

Теплоємність. Чи більш ґрунтовна, але англійською: Heat capacity. Цитуючи Wiki, це: "фізична величина, яка визначається кількістю теплоти, яку потрібно надати тілу для підвищення його температури на один градус". Знаючи для конкретної речовини її питому теплоємність -- теплоємність на одиницю маси, і припускаючи, що вона слабо залежить від температури, (згадуємо роль моделей у фізиці), можна розраховувати, скільки енергії потрібно затратити, щоб нагріти тіло з цієї речовини від однієї температури до іншої, і навпаки -- скільки таке тіло може віддати тепла, охолоджуючись. Багато хто ще пам'ятає задачки із шкільного курсу фізики типу: "Скільки теплоти потрібно надати чайнику, щоб 1.5 літрів води нагрілися від кімнатної температури до кипіння?", які крутилися навколо формули: \[Q=c m (T_2-T_1).\]

Не зупиняючись на тому, чому теплоємність -- важливо, перейду безпосередньо до фізичного питання. Звідки можна взнати (питому) теплоємність? Можна з експерименту. Однак ця дорога нас поки мало цікавить. Вона не дасть розуміння, чому теплоємність саме така, звідки вона береться, і т.д. В цій серії нотаток подивимося, як теплоємність можна розрахувати. 

пʼятниця, 29 червня 2012 р.

Місяць - придивляючись

(с) NASA
Поступившись першим запуском штучного супутника, першим запуском людини в космос та рядом інших пріоритетів, американці, щоб "повернути втрачену гордість", високим штилем говорячи, зайнялися задачею висадки людини на Місяць. Для цього слід було вияснити, що ж він собою являє. Спочатку -- хоча б подивитися зблизька. Тогочасна техніка (згадайте фото "Луна-3") не особливо дозволяла зробити фото належної якості з орбіти. (Не те що тепер -- Lunar Reconnaissance Orbiter легко досягає 0.5м на піксель. ;-) Тому вирішено було використати апарат із телевізійними камерами, який розіб'ється об поверхню Місяця, однак передаватиме зображення до останнього моменту. Програма, яка передбачала запуск серії подібних апаратів, називалася Ranger (wiki, NASA).

Намагатимуся особливо в деталі не вдаватися. (В порівняння із розглядом перших супутників та "Луна-3".) Це забирає забагато сил, не так вже й суттєво, бо літератури (хоч і англомовної) багато, та й проект -- опис етапів вивчення сонячної системи "емісарами" Землі такими темпами ніколи не закінчиться. Якщо цікаво - питайтеся, а поки можу порекомендувати список літератури внизу поста. Навіть якщо сам проект "Рейнджер", з точки зору сучасності, має, в основному, лише історичну цінність, "людська" сторона розробки, менеджменту та керування подібними проектами завжди цікава.

понеділок, 18 червня 2012 р.

Чим займаються теоретики - розширення теорії

Падіння тіла із початковою швидкістю -- розраховуємо більш складну систему

Спробуємо розширити застосування нашої теорії на випадок, коли початкова швидкість не дорівнює нулю:\[v_0\neq0.\] Повторимо міркування з попередньої статті:

t v l
\( v_0 \) 0
\(\Delta t\)  \(v_0 + g \Delta t\) \(v_0 \Delta t\)
\(2\Delta t\)  \(v_0 + 2 g \Delta t\) \(v_0 \Delta t + g \Delta t^2 \)
\(3\Delta t\) \(v_0 + 3 g \Delta t\) \(v_0 \Delta t + 2 g \Delta t^2 \)
\(4\Delta t\) \(v_0 + 4 g \Delta t\) \(v_0 \Delta t + 3 g \Delta t^2 \)
\(5\Delta t\) \(v_0 + 5 g \Delta t\) \(v_0 \Delta t + 4 g \Delta t^2 \)
і т.д.

Розраховуємо повне переміщення, майже так само, як раніше: \[L=v_0 \Delta t + v_0 \Delta t + g \Delta t^2 + v_0 \Delta t + 2 g \Delta t^2 + \\ + v_0 \Delta t + 3 g \Delta t^2 + \ldots + v_0 \Delta t  + (N-1) g \Delta t^2,\] де \(N = \frac{t}{\Delta t}\) -- кількість проміжків \(\Delta t\), які складають наш час t. Доданки із g не змінилися, тому, після підсумовування, дадуть все те ж: \( g \frac{t^2}{2} - g  \frac{t \Delta t  }{2}\). Крім них залишилося N доданків: \[v_0 \Delta t + v_0 \Delta t + v_0 \Delta t  + \ldots + v_0 \Delta t = v_0 N\Delta t = v_0 t.\] Отже: \[L=v_0 t + g \frac{t^2}{2} - g  \frac{t \Delta t  }{2}, \] і в границі як завгодно малого \( \Delta t\):\[L=v_0 t + g \frac{t^2}{2}.\]
Тепер ми можемо розв'язувати новий клас задач, які безпосередньо стосуються реальності, наприклад, дослідження польоту тіл, підкинутих вверх. Детально їх тут не розглядатимемо, хоча в процесі такого розгляду можна зустріти декілька цікавих нюансів. :-)

Переходимо у два виміри -- узагальнення нашої теорії

 

середа, 13 червня 2012 р.

Чим займаються теоретики - застосування теорії

Що із теоріями можна робити

(c)
Попереднього разу ми побудували(*) теорію падіння тіл, яка стверджує: невеликі тіла, падаючи з висот, багато менших за розміри тіла, на яке падають, якщо нехтувати опором повітря, завжди падають із одним і тим же прискоренням g, величину якого можна знайти з формули: \[ g = G\frac{M}{R^2},\] де M i R -- маса та радіус планети, G -- гравітаційна стала. Для Землі: \[g\approx 9.8 м/с^2.\] Експериментально ця теорія підтверджена добре, тому здатна (в межах своєї області застосування) описувати реальність. Наприклад, вона мала б відповісти -- скільки пролетить за 5 секунд металева кулька, впавши з вертольота, що завис над озером. Спробуємо відповідь на це питання в неї вибити.