wxMaxima ezunits смешной бизнес

Обработка юнитов нарушена или что я упускаю?

load(ezunits);

σ_N: 10000`N/(50`mm*10`mm);

newts: 123`kg*m/s^3; newts `` N; newts + 321 `kg*m/s^2;

производит не то, на что можно было бы надеяться:

(%i1)   load(ezunits);
(%o1)   "C:/maxima-5.43.2/share/maxima/5.43.2/share/ezunits/ezunits.mac"
(%i2)   σ_N: 10000`N/(50`mm*10`mm);
(σ_N)   10000 ` (N/500 ` 1/mm^2)
(%i5)   newts: 123`kg*m/s^3; newts `` N; newts + 321 `kg*m/s^2;
(newts) 123 ` (kg*m)/s^3
(%o4)   123/s ` N
(%o5)   321 ` (kg*m)/s^2+123 ` (kg*m)/s^3

Должно быть:

σ_N= 20 N/mm^2
newts= 123 N/s

person Dux    schedule 08.05.2020    source источник


Ответы (1)


В первой части вы должны использовать круглые скобки, чтобы указать желаемую группировку. Когда вы пишете a ` b/c, это интерпретируется как a ` (b/c), но в данном случае вам нужно (a ` b)/c. (Группировка работает таким образом, потому что предполагается, что такие вещи, как x ` m/s, встречаются чаще, чем (x ` m)/s.)

(%i2) σ_N: (10000`N)/(50`mm*10`mm);
                                  N
(%o2)                       20 ` ---
                                   2
                                 mm

Ради интереса давайте проверим размеры этой величины. Я думаю, это должна быть сила/площадь.

(%i3) dimensions (%);
                              mass
(%o3)                     ------------
                                     2
                          length time
(%i4) dimensions (N);
                           length mass
(%o4)                      -----------
                                  2
                              time
(%i5) dimensions (mm);
(%o5)                        length

Выглядит правильно для меня.

Что касается второй части, я не понимаю, что вы пытаетесь сделать так. Переменная newts имеет единицы, эквивалентные N/s, поэтому я не понимаю, почему вы пытаетесь преобразовать ее в N, и я не понимаю, почему вы пытаетесь добавить N/s к N. Во всяком случае, вот что я могу сделать из этого.

(%i6) newts: 123`kg*m/s^3;
                                 kg m
(%o6)                      123 ` ----
                                   3
                                  s
(%i7) newts `` N/s;
                                   N
(%o7)                        123 ` -
                                   s

Когда добавляются количества с разными измерениями, ezunits просто оставляет это в силе; он не выдает ошибку или что-то еще.

(%i8) newts + 321 ` kg*m/s^2;
                           kg m         kg m
(%o8)                321 ` ---- + 123 ` ----
                             2            3
                            s            s

Мотивация для этого заключается в том, что он допускает такие вещи, как 3`sheep + 2`horse или x`hour + y`dollar - коэффициент конверсии можно определить постфактум. В общем, допущение переинтерпретации выражений постфактум, как мне кажется, является математическим подходом.

person Robert Dodier    schedule 09.05.2020
comment
Хорошо, поэтому я должен использовать круглые скобки, чтобы заставить его работать. Я надеялся, что преобразование (kg*m)/s^3 в N даст N/s. С помощью N/s+N я хотел показать, что в этом случае он понимает, что их нельзя добавлять или сокращать каким-либо образом. - person Dux; 23.09.2020