2

Is the handling of the units broken or what am I missing?

load(ezunits);

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

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

produces not what one would have hoped for:

(%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

Should be:

σ_N= 20 N/mm^2
newts= 123 N/s
Dux
  • 101
  • 4

1 Answers1

1

For the first part, you have to use parentheses to indicate the grouping you want. When you write a ` b/c, it is interpreted as a ` (b/c), but in this case you want (a ` b)/c. (Grouping works that way because it's assumed that stuff like x ` m/s is more common than (x ` m)/s.)

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

Just for fun, let's check the dimensions of this quantity. I guess it should be force/area.

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

Looks right to me.

For the second part, I don't understand what you're trying to so. The variable newts has units equivalent to N/s, so I don't understand why you're trying to convert it to N, and I don't understand why you're trying to add N/s to N. Anyway here's what I can make of it.

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

When quantities with different dimensions are added, ezunits just lets it stand; it doesn't produce an error or anything.

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

The motivation for that is that it allows for stuff like 3`sheep + 2`horse or x`hour + y`dollar-- the conversion rate can be determined after the fact. In general, allowing for expressions to be reinterpreted after the fact is, I believe, the mathematical attitude.

Robert Dodier
  • 16,905
  • 2
  • 31
  • 48
  • OK so I have to use parentheses to make it work. I hoped by converting "(kg*m)/s^3" to N it would return N/s. With "N/s+N" I wanted to show that in this instance it understands that those cannot be added or shortened in any way. – Dux Sep 23 '20 at 18:33