Нули бывают разными!

Mar 27, 2015 16:09

Давненько не занимался "Михалычем", программой для моделирования электрических, гидравлических и тепловых цепей, предположительно переплетенных между собой.

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







К одной стороне стены (pin1) подключен "источник переменной тепловой мощности" с амплитудой 3 кВт, а другая сторона (pin2) поддерживается при нулевой температуре. Мы наблюдаем, какая мощность уходит через стену, какова получается амплитуда температуры со стороны источника, и фазовые сдвиги всех величин. Довольно странная постановки задачи, но зная эти результаты, можно точно определить и реакцию системы на включение нагревателя, т.е мы ступеньку раскладываем на гармоники, реакцию на каждую из них мы знаем, складываем - и вуаля! Потому как честно решать прохождение тепла через толстую стену - понадобилось бы численно решать уравнения в частных производных, разбивать ее на кучу отдельных слоев и т.д.

С одной стороны мощность всегда 3 кВт, "по определению". На низких частотах она целиком уходит сквозь стену, сдвиг фазы π, потому что с одной стороны мощность "втекает", а из другой "вытекает", что соответствует обратному знаку. По мере роста частоты стена начинает вести себя как "реактивная нагрузка" - теплота лишь запасается в ней, а потом возвращается на место, при этом утечка наружу резко падает, а задержка фазы растет. Под конец фаза претерпевает страный "пик", это при высокой частоте, когда компьютер не может корректно посчитать 1 + exp ((-1+i)/sqrt(2) * tau * f), приходится сделать приближение exp(...)=0, тогда два конца стены по сути изолируются друг от друга.

Заметьте, аргумент комплексной величины не обязательно остается в рамках -π..π для наглядности в каждой точке прибавляется k*2π с таким k, чтобы обеспечить минимальное расстояние от предыдущей точки.

Сейчас, в целях отладки, ВСЕ вычисления производятся с размерными величинами! Все исходные данные вводятся в кельвинах, ваттах, сантиметрах и Вт/м/к, в таком виде составляется система уравнений и естественным образом получаются решения, которые затем запихиваются на графики. Не самая быстрая процедура, зато появляется дополнительная уверенность, что посчитано верно.

Далеко не с первого раза это заработало, нужно было так задавать систему уравнений, чтобы и нули в ней имели правильную размерность. В итоге для каждого типа цепей появились константы ZeroVoltage и ZeroCurrent, но как будто этого мало, в нескольких местах используется запись ZeroVoltage*0 (!), тогда как ZeroVoltage было бы ошибочно.
[Разгадка]
В тепловых цепях роль напряжения играет температура, ZeroVoltage равно 0 К (абсолютный ноль), а ZeroVoltage*0 даст 0 К{dif}, т.е разница температур в 0 К, таким образом, мы можем запросить ответ хоть в кельвинах, хоть в цельсиях, хоть в фаренгейтах, и 0 К превратится в -273,15 °С, а 0 К{dif} в 0 °С{dif}


На очереди - уравновешенное троичное БПФ для линейной свертки и нормальный графический интерфейс.

nyancat, моделирование, программки

Previous post Next post
Up