Category: образование

Category was added automatically. Read all entries about "образование".

QuatCore

atan(y/x) на двух умножениях!

Чего-то никак меня не отпустит эта тема, всё кажется, что есть очень простой и эффективный метод, надо только его найти!

Сейчас вот такое приближение "придумал". Напомню: у меня на входе два числа, x и y, причём x2+y2=1.
Допустим, что мы перешли к квадрантам I и IV, т.е x≥0, а потом ещё обеспечили условие x≥|y| (поменяв местами аргументы, если необходимо), т.е угол будет в диапазоне от -45 до +45 градусов. Тогда:



Максимальная ошибка составляет 0,041°, или 2,5 угловые минуты, и, возможно, ещё можно коэффициенты чуть оптимизировать.

Многовато вообще для моей задачи: мне ж этот угол ещё на 2 умножать (т.к в кватернионах угол был половинный), это будет 0,082°, при допустимой ошибке в 0,1°. Но может, кому пригодится такое приближение.

Под катом упоротые выкладки, которые привели к этому выражению... Ну как упоротые - вспоминали школьную математику, ну максимум 1-й курс института.

Collapse )

Наверное, эта тема меня так увлекла, потому что всегда интересно было узнать, а как же компьютер вообще считает сложные математические функции? Как в целом работает, складывает и умножает - уже разобрался, когда АЛУ ковырял, а вот эту математику обходили стороной как могли. В math.h не заглянешь, там одни заголовки, а функции уже откомпилированы под конкретную архитектуру. И в процессор не заглянешь (мой-исключение :), как там FPU вкалывает, а там же явно микрокода выше крыши! Кнут дальше арифметики не пошёл, во многих учебниках по программированию не мудрствуя лукаво говорят: ряд Тэйлора. А тут вроде как и "по делу" пришлось :)
QuatCore

Хотел выпендриться

Одно из замечаний к моему протоколу информационного обмена: ДОБАВЬ 16-битные заголовки к каждому сообщению!

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

Как положено, к командному слову есть бит чётности, и если он неверен - мы команду игнорируем "от греха подальше". Но им этого кажется недостаточно: вдруг нам так не повезёт, что ошибочно сменилось ДВА бита, и теперь мы решим, что надо выдать целевую информацию, хотя на самом деле заказывали телеметрию!

И далее мы выдадим ответное сообщение без каких-либо ошибок, вот только НЕ ТО! Чтобы этого не произошло, они и хотят, чтобы у каждого ответного сообщения был свой уникальный код. Вот тогда-то они увидят, что они заказывали одно, а мы прислали совсем другое!

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

Но застрял с этим вопросом уже на несколько дней...

Collapse )

В общем, нельзя верить Википедии, и нельзя верить StackOverflow :) И по-моему, повторю я одно 5-битное значение 3 раза, добавлю бит чётности - и скажу, что так и надо!
Doc

Более тяжёлые тела падают быстрее!

Увидел не так давно видео от Flammable Maths с таким заголовком, и подумал поначалу - он опять нас троллит. Это немецкий препод математики (насколько я знаю), и чувство юмора у него очень специфическое, особенно любит над инженерами издеваться, дескать e=π=3, cos(x) = 1, sin(x) = x.

Но нет, всё корректно: в безвоздушном пространстве, согласно законам Ньютона, тяжёлые тела действительно будут падать быстрее!

Быстренько изложу своими словами. Есть объект массой m и Земля массой M. На объект со стороны Земли действует сила



И согласно 2-му закону Ньютона она придаёт ему ускорение:



Тут можно вставить несколько страниц дискуссии, почему "инерционная масса" (слева) оказалась равна "гравитационной массе" (справа) и причём тут Эйнштейн, но сейчас мы о другом. Сокращаем их с чистой совестью, и получаем:



Ускорение зависит лишь от массы Земли и расстояния до неё, и не зависит от массы самого объекта, что как бы говорит все тела падают одинаково.

Вот только мы кое-чего забыли!

Collapse )
doomguy

День знаний

Позавчера я научился считать до 36 , а сегодня научился читать :)

Заказал обод на 36 спиц, сегодня по пути на работу заехал в пункт самовывоза, назвал номер заказа, мне выдали обод. Хотел было пойти, но решил сначала пересчитать количество отверстий. Начал было это делать, но подумалось - лучше бы этикетку найти, где всё написано. И действительно, увидел маленькую наклейку с надписью

27,5" 36H

Да, 36H - это как раз 36 отверстий, всё хорошо. А первое число очевидно диаметр, и он НЕВЕРНЫЙ, Я ЗАКАЗЫВАЛ 26 ДЮЙМОВ!

Выразил своё "Фе", продавец достал линейку, померял, потом ещё для надёжности приложил к велосипеду с колесом 27,5" - совпало.

Поскольку оплата была при получении, я просто не стал оплачивать, оставил обод у них. Сейчас уже созвонился - завтра обещали правильный привезти.

Ещё тут на форумах посидел немного, чтобы узнать, так что лучше - 32 спицы или 36? Очень уважаемый Sheldon Brown пишет (https://www.sheldonbrown.com/wheelbuild.html) что в "обычных" велосипедах был золотой стандарт 36 спиц, а вот в гоночных ради экономии веса стали их число уменьшать, благо гоночному велосипеду необходимо выдержать ровно один заезд, после чего он отправляется чуть ли не на свалку. Поэтому "усталость металла" можно сбросить со счетов, лишь бы доехал до финиша, не развалился на кочке и при этом был на сколько-то грамм легче.

А потом, как это часто бывает, 32 спицы стали признаком понтов - "как настоящие гонщики!" - и начали их на обычные велики ставить, пока это не стало ЕЩЁ ОДНИМ стандартом. Понятно, если эти 32 спицы взять хорошие, с той самой "талией" (про неё Sheldon тоже объяснил, что дело не в копеечной экономии веса, а в укреплении самых нагруженных частей при сохранении способности прилично растянуться при ударе, что распределит нагрузку по соседним спицам и не даст всей конструкции развалиться), и обод попрочнее (что компенсирует меньшее число спиц) - оно тоже может служить десятилетиями, но всё-таки 36 было оптимальнее.

Это просто я на триал-спорт зашёл сначала, стал там обод подбирать - и не нашёл НИ ОДНОГО на 36 спиц и 26 дюймов! Подумал - не отстал ли я безнадёжно от жизни? Да не...
QuatCore

Эзотерическая схемотехника: генерация субгармоник

Давно хотел начать такую серию постов. По сути, и начал когда-то: школьную задачку про резисторы можно отнести к этой серии.

Может, правильнее было назвать серию "теоретическая схемотехника", но такое название отпугнёт 99,9% читателей. Страшнее чего-то "теоретического" только "математические основы ..." (например, "математические основы теории автоматического регулирования"). Как только видишь книгу с таким заголовком - можно быть уверенным, всю физическую подоплёку оттуда выкинули, оставили голые формулы, и попробуй сообрази после этого, что они творят!

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

Сначала я буду устраивать опрос по той или иной теме, потом спустя некоторое время (надеюсь, не более месяца) давать развёрнутый ответ.

Первое, с чего хотелось бы начать - с генерации субгармоник.

Если в одном предложении: может ли схема, состоящая только из идеальных диодов, резисторов, конденсаторов и не очень идеальных катушек (хоть какое-то сопротивление обмотки у них есть, но насыщения не наступает), при поступлении синусоидального сигнала на некоторой частоте, скажем 1 кГц, начать генерировать незатухающий сигнал более низкой частоты?

Collapse )

Poll #2097563 Генерация субгармоник

Может ли схема без усилительных элементов при подаче одной частоты получить пониженную?

Да
8(66.7%)
Нет
4(33.3%)

Школьная задачка про резисторы

Несколько лет в рамках педпрактики я вёл в МФТИ курс "Телекоммуникационные устройства" (http://nabbla1.livejournal.com/50723.html), ещё и плакатики нарисовал, правда, их на следующий же день сняли (http://nabbla1.livejournal.com/53274.html).

Как ни странно, студентам ФРТК - Факультета Радиотехники и Кибернетики - до 5-го курса так никто и не рассказывал, что за зверь такой волновое сопротивление и что будет, если его не согласовать, поэтому я решил сделать небольшой ликбез, буквально на 1-2 пары, причем так, что студенты сами маленькими шажками выводят все соотношения, благодаря чему они запоминаются куда лучше, а я получаю возможность худо-бедно проверить знания студентов. Идею я подсмотрел у Фейнмана.

resistor_ladder.png

Всё начинается с простой задачки о лестничной цепи резисторов (см. схему) - нужно найти общее сопротивление цепи. Потом мы резистор R1 заменяем на катушку L, а резистор R2 - на конденсатор C и ищем импеданс при некоторой частоте ω. Далее, начинаем уменьшать длину каждого звена, сказав, что L=L0Δx, C=C0Δx, где L0, C0 - погонные индуктивность и ёмкость, Δx - длина звена, которую мы устремим к нулю. Всё - у нас получится формула волнового сопротивления
wave_resistance.png
Дальше можно подать на эту лестничную цепь некоторое напряжение и, решив диффур 1-го порядка, посмотреть, как напряжение распространяется вправо, т.е найти U(x), при условии, что U(0)=U0. Получаем ответ:
delay.png
откуда видно - амплитуда остаётся неизменной, крутится только фаза, причём с ростом частоты линейно растёт фазовый набег. И наконец, последнее усилие - вместо источника синусоидального напряжения подключить к цепи источник напряжения произвольной формы u(t) и посмотреть форму сигнала на удалении x от начала цепи. Тут самое время вспомнить преобразование Фурье и применить его так или иначе. Хорошо если студент помнит ПФ от сдвинутого во времени сигнала, т.к это именно оно и есть. Не знает - ну хотя бы выведет, уже будет неплохо. Оказывается, что в такой цепи сигнал только запаздывает, но не меняет своей формы - ровно такое поведение мы интуитивно ожидали от линии передачи, но здесь вывели его на коленке. Уже сразу можно понять, как это применить на практике - обрубить "бесконечный хвост" линии передачи, а чтобы начало линии "ничего не заметило", поставить туда его эквивалент - резистор сопротивлением Z. Можно пофилософствовать над тем, как так вышло - у нас были чисто реактивные компоненты - катушки и конденсаторы, но внезапно полный импеданс стал чисто активным - так куда же пропадает мощность!? А на следующем занятии закрепить материал, уже честно записав систему дифференциальных уравнений для отрезка линии передачи и рассмотреть, как сигнал будет отражаться от несогласованных концов.

Такой метод я успел обкатать на нескольких группах студентов, в целом весьма позитивно, но в последний раз умудрился немножко сесть в лужу. Я слишком рано объяснил, зачем нам понадобилась эта задачка с резисторами, и студент у доски решил "срезать путь" - сразу же вместо резисторов поставить катушку и конденсатор, дескать "зачем лишнюю работу делать?". Ну пожалуйста, флаг в руки! Тут-то и притаилась ловушка!

LC_ladder.png

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

Collapse )

PS.

PhysUnitCalc v. 0.5 - переписан с нуля!

Встречайте новую версию нашего замечательного калькулятора с физическими размерностями, комплексными числами и другими пряниками, вот ссылка для скачивания.

PhysUnitScreenshot.png

Самое главное: теперь величины надо писать с учетом регистра, иначе получалось слишком много неоднозначностей, начиная с s (секунды) и S (сименсы), g (граммы) и G (гауссы). Но бояться не надо - стоит только начать писать название величины, как появится окошко автодополнения и выдаст все величины без учета регистра того, что мы ввели. Например, написав гс, мы увидим:
гс (гектосекунды)
Гс (гигасекунды)
Гс (гаусс)
гс (грамм силы)
ГСм (гигасименс)
гСм (гектосименс)

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

Если же проигнорировать автодополнение и написать-таки неоднозначную величину, программа выдаст предупреждение и выберет величину без приставки, т.е предпочтет гаусс гигасекунде, теслу тералитру, минуту (min) миллидюйму, фут (ft) фемтотонне, грамм силы гектосекунде и т.д.

Кроме того, предупреждение возникнет при использовании величин Град, Grad и град - это гигарадианы и гекторадианы, а вовсе не градусы! Градусы записываются как "deg", "degrees", "градусы", \deg или собственно ° (этот символ набирается так: alt+0176 на Numpad'e при включенном Numlock). От написания град или Град я решил отказаться - кроме гигарадиан и гекторадиан ведь есть еще грады - странные "десятичные градусы", которых в окружности 400.

Из других важных изменений: Гц (герц) снова означает всего лишь 1/с. Мне когда-то показалось очень логичным определить Гц как 1 об/с, т.е 2pi рад/с, что позволяло бы во многих формулах избавиться от 2pi, но это слишком опасно, когда малая безразмерная константа выползает неявным образом, откуда не ждали, так что ответ может иметь нужный порядок величины и нужную размерность и при этом быть в корне неверен!

Еще одно важное изменение: если в ответе получается величина, к которой разрешается добавлять приставку, то будет поставлена наиболее подходящая, например вместо 10000 м мы получим 10 км. Как это заведено у физиков, приставки берутся только "через 3" - кило, мега, гига,..., милли, микро, нано,.... Если даже самая маленькая (йокто, 10-24) или самая большая (йотта, 1024) приставка не позволяет получить ответ в интервале [1;1000), то величина оставляется "как есть", т.е 10-34 м так и останутся 10-34 м. Важный частный случай: нулевое значение не будет "сползать вниз" а сохранит величину неизменной.

Наиболее подходящая приставка будет подбираться только в том случае, если мы не заявили явно, в какой величине мы хотим получить ответ, т.е 220 В / 1 кОм [A] так и даст 0.22 А, а не 220 мА.

Другие изменения, тысячи их:
Collapse )

Народ, а мне показалось, или вы побаиваетесь этого калькулятора немного? Он совсем не страшный на самом деле, ну разве что Америке могут настать кранты, если ихние студенты все задачки из первого семестра физики (введение в метрическую систему) будут на нем решать!

Генерация гауссовых случайных величин и "наглядное пособие" по отбраковке

В прошлом году я преподавал студентам магистратуры "Алмаза" предмет своего научрука "Корреляционные методы в пассивной локации и ориентации" и счел нужным буквально 2-3 пары посвятить методам Монте-Карло, потому что студенты Физтеха и Бауманки, которые попадали туда, имели пробел в этой области. Они хорошо программировали, и у них был предмет "вычислительная математика", где давались базовые знания по численному решению нелинейных уравнений, систем линейных уравнений и уравнений в частных производных, но при этом ни слова не говорилось о Монте-Карло. Теория вероятностей была на первом курсе, но к 5-му успешно забывалась.

Мне хотелось не просто дать готовые рецепты, но и объяснить (пусть и немного "на пальцах"), откуда у них ноги растут, чтобы они не казались каким-то "колдунством", и чтобы при необходимости студенты могли заглянуть в книги и довольно быстро понять и другие методы. Может, самым главным было, чтобы студенты перестали бояться и полюбили созидающий хаос.

Большой проблемой было время - надо было "переть напролом", не сильно залипая на частностях.

К примеру, в методе отбраковки надо бы определить мат. ожидание количества итераций, вроде бы простая вещь, хорошо студента к доске вызвать, чтобы сам решил.

Collapse )

Как не надо считать среднеквадратичное отклонение

Если у нас есть набор значений xn (n=1..N), и мы хотим посчитать для них среднеквадратичное отклонение, есть две классические формулы:

std1.png

std2.png

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

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

Ага, ЩАЗ. Вчера-таки оно выстрелило - извлечение корня из отрицательного числа, чего в принципе быть не должно. Ну, подумал - да, не надо было столько выборок, таки накопилась ошибка. Ладно, лень разбираться, пока поставлю 10 выборок, грубо, но жить можно. Не тут-то было, на 10 (!) выборках оно ломается. Вот уж чего не ожидал, все мои кватернионные алгоритмы на 32-битном DSP и то за 40 минут сильно ошибки не накапливают, норма остается в норме, да что же это такое-то!?

Оказалось, "убить" 2-ю формулу можно элементарно, повторяемость 50%. Вот как это делается.

Collapse )