首页 > 解决方案 > (wx)Maxima:如何评估符号变量列表?

问题描述

我正在编写一个需要可变数量的符号变量的脚本,并且正在努力理解如何评估结果表达式

MWE:

(%i1)   foo:makelist(f[i],i,3);
(foo)   [f[1],f[2],f[3]]
(%i2)   bar:lreduce("*",foo);
(bar)   f[1]*f[2]*f[3]
(%i3)   vals:[1,2,3];
(vals)  [1,2,3]
(%i4)   
    ev(bar,foo:vals);
(%o4)   f[1]*f[2]*f[3]

在这里,我想针对f[1]:1和评估f[2]:2产品f[3]:3

以下作品:

ev(bar,lambda([L], for i thru length(L) do f[i]:L[i])(vals));

但是,我认为可能有更直接/实用的方法;也许是一种完全不同的声明符号变量的方式?

标签: variablessymbolic-mathmaximaevaluatewxmaxima

解决方案


在这种情况下,由于自由变量只是 subscripted f[1], f[2], f[3],您可以f临时分配一个列表,然后它将找出适当的值:

(%i6) e: f[1]*f[2]*f[3];
(%o6)                       f  f  f
                             1  2  3
(%i7) ev(e, f = [1, 2, 3]);
(%o7)                           6
(%i8) ev(e, f = [a, b, 7]);
(%o8)                         7 a b

更一般地说,处理此类问题的最直接方法是形成一个方程列表,然后代入表达式。例如:

(%i12) e: x*y*z;
(%o12)                        x y z
(%i13) l: map ("=", [x, y, z], [11, 22, 33]);
(%o13)              [x = 11, y = 22, z = 33]
(%i14) subst (l, e);
(%o14)                        7986

推荐阅读