使用ezunits包时如何替换包含单位的表达式?



不指定单位,我可以表示面积和体积,并让Maxima显示关系:

(%i1) areaNoUnits: area = width * length$
(%i2) volumeNoUnits: volume  = area * height$
(%i3) volumeNoUnits, areaNoUnits;
(%o3)                    volume = height length width
(%i4) subst(areaNoUnits, volumeNoUnits);
(%o4)                    volume = height length width

现在我想指定单位,所以我将使用ezunits包。

'(反勾号)操作符是ezunits的组成部分:

表达式a ' b表示一个量纲量,其中a表示非量纲量,b表示量纲单位。

当我在面积和体积表达式中添加单位时,求值和替换不起作用:

(%i1) load ("ezunits")$
(%i2) areaWithUnits: area ` m^2 = (width ` m) * (length ` m);
2                   2
(%o2)                    area ` m  = length width ` m

(%i3) volumeWithUnits: volume ` m^3 = (area ` m^2) * (height ` m);
3                  3
(%o3)                   volume ` m  = area height ` m

(%i4) volumeWithUnits, areaWithUnits;
3                  3
(%o4)                   volume ` m  = area height ` m

(%i5) subst(areaWithUnits, volumeWithUnits);
3                  3
(%o5)                   volume ` m  = area height ` m

期望输出为:

volumeWithUnits, areaWithUnits;
3                          3
volume ` m  = height length width ` m

我在ezunits包中没有看到一个函数来执行求值或替换。正确的做法是什么?

我会这样表达:

(%i2) load (ezunits) $
(%i3) width: W ` m;
(%o3)                         W ` m
(%i4) length: L ` m;
(%o4)                         L ` m
(%i5) area: width * length;
2
(%o5)                       L W ` m
(%i6) height: H ` m;
(%o6)                         H ` m
(%i7) volume: area * height;
3
(%o7)                      H L W ` m

我把每一部分都写成conceptualname: symbolforquantity ` unit,然后在进一步的计算中只写conceptualname,而不是conceptualname ` unit

您在%i5中尝试的替换不起作用,因为subst是一个纯粹的形式替换—如果没有与替换表达式相同的文字子表达式,则不匹配;subst不查找可能有助于匹配的重排或分解。有一些方法可以解决这个问题,所以有可能使您的原始配方工作,但我认为总体上避开这个问题并使用conceptualnamesymbolforquantity ` unit会更好。

说一下我们可以用上面的%o7这样的表达式做些什么。至少有两种方法可以用特定的值替换符号HLW。一个是调用subst:

(%i2) load (ezunits) $ 
(%i3) volume: H*L*W ` m^3;
3
(%o3)                      H L W ` m
(%i4) subst ([L = 20, W = %pi], volume);
3
(%o4)                     20 %pi H ` m

另一种是利用ev

(%i5) ev (volume, L = 20, W = %pi);
3
(%o5)                     20 %pi H ` m

注意,在输入提示符中,something, someflags, somevalues相当于ev(something, someflags, somevalues)

(%i6) volume, L = 20, W = %pi;
3
(%o6)                     20 %pi H ` m

这只是为了方便。在函数中,必须说ev(...);这里不理解较短的语法。

ev通常很方便,但是用subst来预测结果通常更简单。

相关内容

  • 没有找到相关文章

最新更新