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

Jun 17, 2015 22:26

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



Самое главное: теперь величины надо писать с учетом регистра, иначе получалось слишком много неоднозначностей, начиная с 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 мА.

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

- исправлено представление отрицательных углов в формате dms (degrees-minutes-seconds), если раньше -25.5° [dms] давало -26°30'0,00'' (дополнительный код в своем роде, градусы со знаком минус, а все остальное - с плюсом), то теперь: -25°30'0,00''.
- изменено представление формул, генерируемых "на лету", т.е 10 м / 5 с запишется как 2 м/с, тогда как раньше ответ получался 2 м*с^(-1)
- предупреждение о потери точности в тригонометрических функциях, если задается очень большой аргумент (больше, чем 1E8). Это было сделано как временный костыль, чтобы пользователь что-то заподозрил, если вместо градусов (град) там прочитались гигарадианы (Град), сейчас это уже не проблема, но само по себе предупреждение здравое, ведь при нахождении остатка от деления 30E8 на 2pi значащих цифр подсократится прилично.
- возвращение к температуре (это пока единственная "афинная" величина): раньше в выражениях наподобие 100 Вт / 20 Вт/К получался ответ 5 К, или, при попытке перевести в цельсии, -268,15 °C. Сейчас дается ответ 5 K{dif}, или в цельсиях: 5 °C{dif}, что больше походит на правду. Иными словами, если какая-то величина содержит в себе градусы, мы полагаем, что они там значатся в дифференциальном смысле, а не в абсолютном. Как правило, так и происходит, а если нет - лучше не применять цельсии вообще, ошибка рано или поздно случится. Это изменение было внесено для "Михалыча", без него получались ошибочные ответы.
- Введены децибелы:
дБампл (dBampl) - безразмерная величина, 20 дБампл соответствует увеличению в 10 раз, т.е 1 В * 20 дБампл даст 10 В,
дБмощ (dBpower) - безразмерная величина, 10 дБмощ соответствует увеличению в 10 раз, т.е 1 Вт * 10 дБмощ даст 10 Вт,
дБА (dBA) - звуковое давление, за 0 берется 20 мкПа,
дБДж (dBJ) - энергия в децибелах, за 0 берется 1 Дж, 10 дБДж = 10 Дж, 20 дБДж = 100 Дж и т.д.,
дБм (dBm) - мощность в децибелах, за 0 берется 1 мВт, 10 дБм = 10 мВт, 20 дБм = 100 мВт и т.д.,
дБВт (dBW) - также мощность, но за 0 берется 1 Вт,
дБкВт (dBK) - мощность, за 0 берется 1 кВт,
дБф (dBf) - мощность, за 0 берется 1 фВт
дБВ (dBV) - напряжение, за 0 берется 1 В, 20 дБВ = 10 В, 40 дБВ = 100 В и т.д,
dBu, dBv - напряжение, за 0 берется 0.774596669241483 В (т.е выдающее мощность 1 мВт в нагрузку 600 Ом),
дБмВ (dBmV) - напряжение, за 0 берется 1 мВ,
дБмкВ (dBuV) - напряжение, за 0 берется 1 мкВ.

Надо понимать, 0 дБВ + 0 дБВ даст 6.02 дБВ, т.е складываются не численные значения децибел, а два напряжения. Такое толкование необходимо для сохранения инвариантности к смене величины, т.е (1 В [дБВ] + 1 В [дБВ]) [В] должны в итоге дать то же значение, 2 В, как и просто 1 В + 1 В.

Соответственно, если у нас есть напряжение на входе -5 dBu, а коэффициент усиления схемы по напряжению равен 30 дБ, то, чтобы найти напряжение на выходе, надо написать:
(-5) dBu * 30 dBampl
и получим: 25 dBu, чего и следовало ожидать.

Также можно видеть, что я пока не менял приоритет операторов, так что запись -5 dBu (без скобок) будет означать -(5 dBu), что приведет к ошибке при попытке поменять знак величины, выраженной в децибелах. Это будет исправлено в одной из следующих версий.

Ну и еще пару слов насчет разрешения неоднозначностей. Раньше величины на русском и на английском языке, а также разные написания одной и той же величины (м и метры, m и meters) были различными, никак не связанными величинами, разве что множитель одинаковый и размерность одна и та же - "длина". Сейчас, чтобы корректно строить окно автодополнения, решено было объединить разные описания в одной величине, но независимо от выбранного языка, все из них корректны.

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

Названия размерностей, сначала базовые:
L, расстояние, distance
M, масса, mass
T, время, time
I, ток, current
temp,темп, temperature, температура
angle,угол
Qty,количество, quantity
N, количествоВещества, amountOfSubstance
J, силаСвета, luminousIntensity
information, информация
currency, деньги

производные:
dimensionless, безразмерные
area,площадь
volume,объем
force, сила
pressure, давление
energy, энергия
magneticFlux, магнитныйПоток
magneticFluxDensity, магнитнаяИндукция
power, мощность
charge, заряд
voltage, напряжение
resistance, сопротивление
capacitance, емкость
inductance, индуктивность
frequency, частота
eventsPerSecond, частотаСобытий
solidAngle, телесныйУгол
magneticFieldIntensity, напряженностьМагнитногоПоля
conductivity, проводимость
luminousFlux, световойПоток
illuminance, освещенность
specificEnergy, удельнаяЭнергия
katalicActivity, активностьКатализатора

Мы можем начать вводить эти имена, и автодополнение выведет список всех величин, относящихся к данным размерностям.

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

математика, программки, physunitcalc

Previous post Next post
Up