我如何在 Maple 中使用变量的值

How do I use value of variable in Maple

如何让 Maple 在表达式的 RHS 中给出变量的值,而不是将其视为表达式中的变量。在下面的代码中,我想要一个 x 的三个函数的列表,它们是具有不同偏移量的二次函数,但这不是我得到的:

ix := [-1,0,1]:
b := []:
for a in ix
do
  b := [op(b),x->(x-a)^2];
end do;

输出为

虽然我希望它是(最后一行)

b := [ x -> (x+1)^2, x -> x^2, x -> (x-1)^2 ]

您的问题是您试图在 body 过程 的构造中使用 a 的值,而不是“表达式的 RHS" 如您所述。

尽量不要在这种情况下使用术语 "function",因为它只会混淆表达式和过程之间的区别。

这是一种从 ix 中获取值的方法,用于替换生成的 过程 列表中的 a(x-a)^2 body.

restart;
ix := [-1,0,1]:

b := []:
for a in ix do
  b := [op(b), unapply((x-a)^2,x)];
end do:
b;

    [x -> (x+1)^2, x -> x^2, x -> (x-1)^2]

以这种方式重复连接列表来构建列表效率很低。由于这种做法在性能方面表现不佳,你真的应该放弃它作为一种做法。

您只需调用 seq.

即可构建整个列表
Flist := [ seq( unapply((x-a)^2,x), a in ix ) ]:

Flist;

    [x -> (x+1)^2, x -> x^2, x -> (x-1)^2]

这里,Flist 是一个过程列表,每个过程都可以通过使用参数调用它来计算一个值。

Flist[1];

              x -> (x+1)^2

Flist[3](3.4);

                  5.76

#plot(Flist, -2..2);

注意:用箭头符号 x -> ... 显示的过程称为 operators

为了好玩,这里有等价物,使用表达式

Elist := [ seq( (x-a)^2, a in ix ) ]:

Elist;

        [       2   2         2]
        [(x + 1) , x , (x - 1) ]

Elist[1];

                       2
                (x + 1) 

eval(Elist[3], x=3.4);

                  5.76

#plot(Elist, x=-2..2);

还有其他方法可以生成过程,body 中的 a 值是通过编程指定的。 unapply 命令不是唯一可能的机制,尽管它对您的示例来说是最简单的。

另一种方法是替代,例如,

generic := x -> (x-_dummy)^2:

Hlist := [ seq( subs(_dummy=a, eval(generic)), a in ix ) ]:

Hlist;

    [x -> (x+1)^2, x -> x^2, x -> (x-1)^2]