beaver with chainsaw

Великая Октябрьская резня бензопилой

Сегодня прокатился прочистить Абрамцевскую просеку. Как обычно, с приключениями. Выезжал на велосипеде, а вернулся на самокате. Первый раз по этим местам проехался не зимой, оказалось, что там болотистая местность, а где-то лыжня проходила откровенно через болота. Я думал, это полянки, ан нет - просто там деревья не растут, вместо них камыши.

Но поставленную задачу выполнил - расчистил все 15 км, сжёг более литра бензина.
IMG20211016170431.jpg

Под катом, среди прочего, ОЧЕРЕДНОЙ сломанный петух и бонусная Марта.

Collapse )
А через неделю субботник - ремонт двух мостов.
PhysUnitCalc

Очередная несуразность в единицах измерения

Когда-то я написал программу PhysUnitCalc - калькулятор, умеющий работать с размерностями. Мне казалось, что я наступил уже на все грабли, которые там были разбросаны:

- офигенное решение сделать КИЛОграмм БАЗОВОЙ величиной в системе СИ,
- температуры, начинающиеся с разных нулей, так что 20 °С = 293,15 К, но при этом РАЗНИЦА в 20 °С равна разнице в 20 К,
- децибелы, действие которых зависит от контекста - если речь идёт об амплитуде, то 20 дБ = 10 раз, но если о мощности, то 10 дБ = 10 раз. Если к децибелам прибавлена единица (всевозможные дБВ - децибелвольты, дБА - децибелы звукового давления по кривой "А" и пр.) - то всё хорошо. Но безразмерных децибелов пришось ввести 2 разные величины: дБампл и дБмощ, очень уж мне хотелось получить инвариантность к смене единиц измерения.
- конфликтующие названия единиц. Гс - это может быть гаусс, а может быть гигасекунда. Тл - это может быть тесла, а может - тералитр. Прибавить сюда имперские величины - появляются также ft - фут либо фемтотонна (абсурд, но формально такая величина может существовать), и куда более вероятный min - минута либо миллидюйм. А ещё град - кому-то может показаться, что это градусы, другим - что это грады (странная угловая величина, 1 оборот = 400 град, не особо прижилась), а ещё это гекторадианы.

Долгое время моя программа могла принять любые величины, которые мне попадались, и корректно провести вычисления. Разве что дБпТл удивил, ну и хрен с ним.

И вот, сегодня я встретил ещё одну размерность. Немного мифическую, но вполне себе используемую, и при этом начисто нарушающую правила системы СИ!

Collapse )

PS.


PPS. Чего-то музыкой навеяло. Объясняет, почему кино было немым. Осторожно, нецензурная лексика.

Big Data, чтоб их... (3)

"В предыдущих сериях": мой прибор выдаёт 6 значений: 3 координаты и 3 угла, т.е все 6 степеней свободы твёрдого тела. Причём ошибки измерения этих 6 значений сильно коррелированы между собой. Как именно - прибор знает, и выдаёт ковариационную матрицу шума измерений. Чтобы определить положение прибора на космическом корабле, я хочу провести где-нибудь N=10 опытов, располагая мишень на разных дальностях, измеряя её положение с помощью прибора, и, "контрольное измерение" - с помощью лазерного трекера, причём он будет мерять положение мишени в системе координат космического корабля. "Вычитая одно из другого", мы и должны раз за разом получать 6 параметров положения прибора на космическом корабле, но они будут зашумлены.

В прошлый раз я нашёл довольно простую формулу, с какими весами нужно сложить все 6N чисел, найденных за все эти N опытов, чтобы получить 6 искомых параметров, и чтобы свести шум к минимуму. Для этого нужно из ковариационных матриц шума измерений Qk (k-номер опыта) посчитать матрицу R:



и затем для каждого опыта найти свою матрицу весов, Ak



Тогда искомый вектор из 6 параметров выразится следующим образом:



(xk - вектор из 6 значений, измеренных в опыте k)

Интересный частный случай, если Q1=Q2=...=QN=Q, т.е от опыта к опыту ни дисперсии, ни ковариации не меняются. Такое может получиться, если мы дальность и углы не меняем особо, "топчемся на одном месте". Тогда данная формула очень существенно упрощается.

Collapse )
Sidious

Покрышки с взрывным характером

Продолжаю кататься на велосипеде на работу и назад, а также время от времени в РКК Энергию. С 17 мая (когда решил записывать, сколько проехал, сколько сэкономил и сколько потратил) проехал уже 3200 километров. Агония трансмиссии продолжается, как это ни странно, но кроме трансмиссии, у велосипеда есть и другие расходные материалы - покрышки и тормоза!

Ещё походит :)
IMG20210923131614.jpg

Ещё походит :)
IMG20210923130022.jpg

Местами поменяю - ещё походит :)
IMG20211001132650.jpg

НА СВАЛКУ!!!
IMG20211011145154.jpg

Под катом ещё и котёл, конструкторам которого заготовлен отдельный котёл, и бонусная Марта.

Collapse )
slow loris

Big Data, чтоб их... (2)

Вчера получил упоротое уравнение, чтобы найти, с какими весами нужно брать результаты измерений, чтобы получить наименее шумную и при этом несмещённую оценку вектора параметров:



Слева блочная матрица, составленная из ковариационных матриц шума измерений. Для простейшего примера, где N=M=2 (два параметра, измеряются дважды), всё получилось правильно.

Сегодня решил проверить ещё один "примитивный частный случай", когда M=1, то есть мы измеряем одну-единственную величину, но много раз (N раз). Пока ковырял его - нашёл, где ошибся с множителями Лагранжа, решил наконец через них - вышло существенно компактнее...

Collapse )

Можно одним махом находить веса для всех M параметров, что мы пытаемся оценить. Для этого находим матрицу R (от слова Reciprocal - "обратная"):



И затем нужные веса укладываются в N матриц Ak, каждая размером M×M:



Первый столбец Ak указывает, с какими весами нужно брать M параметров, чтобы получить оценку первого параметра, второй столбец - для второго параметра, и т.д.

Такое меня больше устраивает - не нужно эти жуткие блочные матрицы собирать, всё укладывается в размеры M×M, в моём случае 6×6 (три компоненты параллельного переноса и три угла)

Надо, правда, чтобы матрицы были невырождены, так что первый пример со 100% корреляцией здесь не пройдёт. Но "в реальной жизни" у меня 100% корреляции и не будет никогда, так что пущай!

Вот теперь пора это дело испытать на "модельных" результатах...
QuatCore

Big Data, чтоб их...

Решил всё-таки вывести оптимальную обработку N измерений xk, каждое по M компонент (т.е вектор M×1), и на каждое дана своя ковариационная матрица шума измерений Qk размером M×M.

И понял, что лишь для оценки хотя бы первой компоненты нужно взять M×N различных весов. Это хотя бы записать - уже, блин, сложность. В матричном виде - разве что так:



где A1 - матрица весов для оценки первого компонента (всего таких нужно M штук), X - все измерения, собранные воедино.

В моём случае M=6 (три компоненты параллельного переноса и три угла малого поворота - не хочу пока заморачиваться с честными кватернионными вычислениями, для ошибки установки на корабле должно и углов хватить), N=10 для начала.

И выходит: нужно посчитать 6 матриц размером 6×10, или 360 значений!

Одно радует: это не QuatCore должен считать, а персональный компьютер - он это перемелет без каких-либо проблем. Но выкладки какие-то упоротые, и их результат, система из M×(N-1) уравнений с M×(N-1) неизвестными - не лучше...

Collapse )

Теперь бы стряхнуть пыль с компьютерной модели видеоизмерителя параметров сближения, получить с неё десяток измерений с ковариационными матрицами шума измерений - и посмотреть, что же получается. Вот вообще не знаю, чего ожидать!

UPD. Кстати, коэффициенты для оценки всех M компонент выражаются более красиво, чем если брать только одну компоненту под индексом z. Вот такое уравнение:



Слева блочная матрица M(N-1)×M(N-1), набранная из ковариационных матриц шума измерений. Матрица B имеет размеры M(N-1)×M - каждый её столбец i - вереница коэффициентов, нужных для оценки Xi. Справа матрица M(N-1)×M.

Возможно, я капитально туплю, и всё это дело элементарно упрощается...
doomguy

О человеческом факторе

В продолжение темы, затронутой в комментариях.

Очень простая, модельная задачка, все цифры "с потолка", без кучи нулей, просто для наглядности.

Есть пилот самолёта, есть автомат. 50% времени самолётом управляет пилот, 50% - автомат. И пилот, и автомат с одинаковой вероятностью 1% могут допустить ошибку. Если ошибку допустил автомат - то ситуацию попытается исправить пилот, но с вероятностью 1% у него это не удастся - будет катастрофа. Но будем милосердны к пилоту - и виновным в этом случае назначим автоматику (не всегда будет так: иногда скажут, данный отказ, например Runaway Stabilizer, описан в чеклистах, пилот был обязан его распознать и в течение 3 секунд парировать. Виноват пилот, см. страницу 215. "Повезло им" - следом ещё один самолёт рухнул, поэтому их отчасти реабилитировали).

Если самолётом управлял пилот, и он допустил ошибку - это сразу катастрофа, т.к автомат отключён, "у пилота приоритет". Виновным назначается пилот.

Что получается в конечном счёте?

Collapse )

PS. "Картинка для привлечения внимания", зловещая долина автоматизации:

(цифры очень условные, главное тут форма кривой)

Нарисовал её когда-то, чтобы обосновать, почему мне не нравится C/C++ :)
Owl

Самые удачные огари!

Долгое время их не встречал на столбиках: у самой воды их много. Там ещё Яуза обмелела основательно, то тут, то там были "косы", вот на них огари и сидели, но там их хорошо сфотать - телевик нужен.

А тут вдруг прилетели, сразу двое, видать, на солнышке решили погреться!

И прям повезло: огари упитанные, лоснящиеся, на солнышке переливаются. Очень разговорчивые, подвижные - то одним боком повернутся, то другим, то перелетят на соседний столбик. Под конец они наконец уселись вместе, поговорили о чём-то - и полетели дальше!


Под катом ещё всякое, что встречалось на пути: поезд "большая перемена", злобный сосед с перфоратором, котики, зебра.
Collapse )
Sidious

А Королёв бы не возражал!

Чего-то в ближайшие дни услышал много негатива по поводу "киноэкипажа", хочу высказать индивидуальное мнение, которое хрен оспоришь. Считаю, что Королёву эта затея бы понравилась.

Во-первых, Королёв и сам очень любил киноэкипажи:

Korolev_with_dog.jpg

"Кино" - от корня "Кинос", собака.

А вот профессиональных космонавтов до мозга костей им. Каманина он как раз недолюбливал, о чём можно прочитать как у Чертока, так и в дневниках Каманина!

Collapse )
QuatCore

Так ли полезна ковариационная матрица шума?

Всех причастных, непричастных и невиновных - с прошедшим днём начала космической эры! Бип-Бип-ура!

А я опять по уши закопался в математику. Уже довольно давно я "агитировал" за то, чтобы мой приборчик, ВидеоИзмеритель Параметров Сближения, выдавал не только сами параметры - дальность, углы, взаимную ориентацию, но и ковариационную матрицу шума измерений, 6х6.

По диагонали у нас лежат дисперсии, корень из которых даст ошибку измерения данного параметра в этот конкретный раз. О том, какая точность должна достигаться, указано в ТЗ, но в реальности она будет получаться гораздо выше на бОльшей части траектории. То есть, скажем, на 300 метрах, когда картинка МААЛЕНЬКАЯ, действительно не особо разгуляешься, но по мере приближения ошибка измерения дальности уменьшается КВАДРАТИЧНО.

То, что эти дисперсии знать ПОЛЕЗНО - особых сомнений нет. На корабле установлены и другие приборы: акселерометры, датчики угловой скорости, спутниковая навигация. Если одну и ту же величину можно будет измерить несколькими приборами, то необходимо также довольно хорошо представлять точность каждой величины, только тогда они будут правильно усреднены. А то написано в ТЗ: дальность "не хуже 5%", а у нас на самом деле уже на миллиметры вышла - но эти миллиметры отправятся "на свалку", потому что другим приборам доверия вышло больше.

Но дисперсии - это лишь 6 коэффициентов из 21, который нужно передать. Матрица 6х6 симметричная, поэтому достаточно передать главную диагональ (дисперсии) и один из треугольников, а это ещё 15 чисел, ковариации между измеренными величинами.

Я считал, что и ковариации очень хорошую службу сослужат, поскольку зачастую несколько измеренных параметров оказываются сильно коррелированными друг с другом. Грубо говоря, мы увидели, что картинка "сдвинулась влево". Это могло произойти потому что мы сдвинулись вправо, т.е сохранили ту же ориентацию в пространстве, включили боковые двигатели и начали поступательное движение. А может быть, совершили поворот вокруг своей оси, "по курсу", из-за чего картинка ушла вбок. Мы ОБЯЗАНЫ разобраться, что же именно произошло, и для этого должны очень внимательно наблюдать, как вынесенные вперёд отражатели смещаются относительно других 6, которые расположены в одной плоскости чуть дальше. Это куда более ШУМНЫЙ процесс - вместо усреднения мы вычитаем близкие величины, вот и получается, что два выданных нами параметра - смещение вправо и поворот вокруг вертикальной оси - будут иметь высокую корреляцию шума. Т.е если мы ошибёмся в смещении на 10 см, то НЕИЗБЕЖНО ошибёмся ещё и в угле поворота, скажем, на 1 градус. В ИЗВЕСТНУЮ СТОРОНУ, потому что суммарный эффект от смещения и поворота мы знаем очень хорошо!

Мне казалось, что это чрезвычайно ценная информация! И в пример я опять ставил датчик угловой скорости и акселерометр. Первый вполне успешно померял, что за секунду корабль повернулся на 1 градус. А второй успешно померял, что ускорение составляло 0,1 м/с2 - НУ И ЧТО С ТОГО??? В смещение оно напрямую не преобразуется, надо ещё было скорость знать, а мы её, может, и знали, но уже накопился дрейф, и для прямой оценки смещения акселерометр практически бесполезен... И вот на фоне этого появились показания ВИПС: поворот на 0,5 градуса и смещение на 20 см, а ещё шум в 0,5 градуса в показаниях углов, 20 см в показаниях смещения и практически единичный коэффициент корреляции (цифры абсолютно с потолка, просто как пример). Тут-то каменный цветок, наконец, складывается: точно зная, что поворот составлял 1 градус, борт решает, что ВИПС ошибся на 0,5 градуса "в минус" (померял 0,5 вместо 1), а исходя из величины и знака корреляции теперь известно, каково правильное смещение - вот мы и его теперь знаем и можем дрейф акселерометра подправить.

Но сейчас задачка немного другая: как бы так, проведя в цеху десяток-другой измерений, и сравнивая показания ВИПС с показаниями лазерного трекера, наиболее удачно померять положение прибора на аппарате. По-хорошему, и здесь, зная ковариационную матрицу шума при каждом измерении, можно какую-то дополнительную информацию вычленить, и получить лучшую точность, чем при "тупом усреднении".

Начал ковыряться (ковариаться), придумал совсем примитивную "модельную задачку" - и теперь я вовсе не уверен, что от этой матрицы есть какой-то толк...

Collapse )