Статус: Member Группы: Registered, Advanced Member Зарегистрирован: 28.02.2012(UTC) Сообщений: 10 Откуда: Italy Сказал «Спасибо»: 1948 раз Поблагодарили: 3 раз в 3 постах
|
Привет, Автор: mikekaganski Насчёт dimLess(a). Эта функция, хотя программно и реализуемая, методически неправильна. Попробуйте представить обратную ей функцию. a:2mbimLess(a;cm)c:b^2dimmed(c;cm^2)здесь явно видно, что произошло. bimLess(a)c:b^2dimmed(c)??? И вообще, "простое" избавление от единиц может быть основано только на принятой "базовой" системе единиц - а это лишь соглашение, которое может изменяться со временем. Банально: a:5kmb:a/mc:a/cmdimLess(a)Очевидна разница значений b (число метров в отрезке) и c (число сантиметров в отрезке). А чему равна d? Числу чего в отрезке? Если бы я жил в Британии, я бы, возможно, удивился, увидев там 5000. И я могу понять человека, который бы ожидал увидеть там 5 на основании того, что первоначальное присвоение было произведено в км. Конечно, на самом деле фрагмент в приложении выше, родился именно для использования в SMath (только), когда встроенные функции требуют безразмерные переменные, как и в linterp(#) (используйте b:=a/UoM(a) или b:=dimLess(a) , чтобы получить безразмерное значение в единицы SMath умолчанию UoM () для получения указанных единицы); "базовой" системе единиц является внутренним SMath умолчанию система единиц (я обновил пример, чтобы лучше показать, как это работает). Восстановление блока, очевидно, должны быть сделаны со знанием фактов, в противном случае результат будет как чистый безразмерное число, не физическом смысле, и даже это просто ошибка. Автор: mikekaganski Можно было бы представить себе функцию, которая не избавляется от единиц, а сохраняет единицы в отдельной переменной для последующего использования. Мне кажется, что избавляться от единиц нужно только временно, для использования в функциях, требующих безразмерных величин. По крайней мере, я не знаю других причин. Так вот, после преобразований можно было бы осмысленно возвращать размерности: f(x):line(unitlessVarimLess(x;unitsBackup);y:linterp(unitlessVar;vec1;vec2);dimmed(y;unitsBackup^2);3;1)И даже в такой (часто очень желательной) форме нужно отдавать себе отчёт в применимости такой операции. Так, в этом примере ещё надо, чтобы интерполируемая зависимость не была связана с единицами измерений - а где такую взять для нетривиального случая? Так что даже здесь было бы лучше, если бы большее число функций программы просто позволяли работать с единицами, а не требовали избавляться от них. Я согласен Отредактировано пользователем 14 августа 2012 г. 3:55:52(UTC)
| Причина: Не указана
|