我如何在 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]
如何让 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]