Maxima ezunits:将单位应用于列表的所有元素
Maxima ezunits: apply a unit to all elements of a list
自从我发现 ezunits
包后,我在 Maxima 中广泛使用了它,但我找不到将单位应用于列表元素的令人满意的方法。
例如 [1,2,3]`hour
显然有效
a: [1,2,3]`hour;
>> [1,2,3] ` hour
(5`km)/a[2];
>> 5/2 ` km/hour
但我无法循环遍历它
makelist((5`km)/x, x, [1,2,3]`hour);
>>> makelist: third argument must be a number or a list; found: [1.0,2.0,3.0] ` hour
然而,如果我手动将单位应用到列表的每个元素,一切正常:
makelist((5`km)/x, x, [1`hour,2`hour,3`hour]);
[5 ` km/hour,5/2 ` km/hour,5/3 ` km/hour]
在此先感谢您提供的任何帮助。
解决方法可能在以下函数中:
unit2list(l,u):= makelist(x`u,x,l)$
不是很优雅,但似乎可行。
tellsimp
上面的建议是个好主意。这是另一个取决于仅部分记录的 distribute_over
属性:
(%i7) :lisp (setf (get '$\` 'distribute_over) '(mlist $matrix mequal))
(MLIST $MATRIX MEQUAL)
(%i7) [1,2,3]`m;
(%o7) [1 ` m, 2 ` m, 3 ` m]
注意标点符号!仔细区分反引号和单引号。
请注意,我已将反引号分布在列表、矩阵和方程式上,即
(a = b)`m
简化为:
a`m = b`m
当我编写 ezunits
程序包时,我曾考虑过让反引号自动分布在列表中,但最终还是放弃了。您对此话题有何评论?我很想听听用户对此有何评论。
提出问题的另一个解决方案。当全局标志 listarith
为 true
(默认值)时,许多算术运算分布在列表上。所以在你的例子中:
(%i22) a: [1,2,3]`hour;
(%o22) [1, 2, 3] ` hour
(%i23) (5`km)/a;
5 5 km
(%o23) [5, -, -] ` ----
2 3 hour
(%i24) %[2];
5 km
(%o24) - ` ----
2 hour
自从我发现 ezunits
包后,我在 Maxima 中广泛使用了它,但我找不到将单位应用于列表元素的令人满意的方法。
例如 [1,2,3]`hour
显然有效
a: [1,2,3]`hour;
>> [1,2,3] ` hour
(5`km)/a[2];
>> 5/2 ` km/hour
但我无法循环遍历它
makelist((5`km)/x, x, [1,2,3]`hour);
>>> makelist: third argument must be a number or a list; found: [1.0,2.0,3.0] ` hour
然而,如果我手动将单位应用到列表的每个元素,一切正常:
makelist((5`km)/x, x, [1`hour,2`hour,3`hour]);
[5 ` km/hour,5/2 ` km/hour,5/3 ` km/hour]
在此先感谢您提供的任何帮助。
解决方法可能在以下函数中:
unit2list(l,u):= makelist(x`u,x,l)$
不是很优雅,但似乎可行。
tellsimp
上面的建议是个好主意。这是另一个取决于仅部分记录的 distribute_over
属性:
(%i7) :lisp (setf (get '$\` 'distribute_over) '(mlist $matrix mequal))
(MLIST $MATRIX MEQUAL)
(%i7) [1,2,3]`m;
(%o7) [1 ` m, 2 ` m, 3 ` m]
注意标点符号!仔细区分反引号和单引号。
请注意,我已将反引号分布在列表、矩阵和方程式上,即
(a = b)`m
简化为:
a`m = b`m
当我编写 ezunits
程序包时,我曾考虑过让反引号自动分布在列表中,但最终还是放弃了。您对此话题有何评论?我很想听听用户对此有何评论。
提出问题的另一个解决方案。当全局标志 listarith
为 true
(默认值)时,许多算术运算分布在列表上。所以在你的例子中:
(%i22) a: [1,2,3]`hour;
(%o22) [1, 2, 3] ` hour
(%i23) (5`km)/a;
5 5 km
(%o23) [5, -, -] ` ----
2 3 hour
(%i24) %[2];
5 km
(%o24) - ` ----
2 hour