我在设置功能时遇到了困难,我将x1[1]
和x2[1]
替换为其中。任何帮助将不胜感激。
我的代码是:
restart;
with(LinearAlgebra);
x1[1] := -2+1606*alpha;
x2[1] := 2+400*alpha;
f := proc (alpha) options operator, arrow; (-x1[1]^2+1)^2+100*(-x1[1]^2+x2[1])^2 end proc;
f的输出会离开x1[1]
和x2[1]
,并且不会根据需要将其替换为-2+1600*alpha
和2+400*alpha
。
f(0);
然后没有给出所需的输出409。
我可以在身体中替换-2+1606*alpha
和2+400*alpha
,如下面的函数g
所示。虽然这不是我想要的,因为我希望它可以采用x1[1]
和x2[1]
设置的任何内容,而不是手动执行。
g := proc (alpha) options operator, arrow; (1-(1606*alpha-2)^2)^2+100*(2+400*alpha-(1606*alpha-2)^2)^2 end proc
g(0);
此处g(0);
根据需要给出了409。
我附上了一张照片,下面是枫木输出在屏幕上的显示方式。
答案 0 :(得分:2)
在表达式上应用运算符过程时,Maple会在评估之前执行。在表达式
中 f := proc (alpha) options operator, arrow; (-x1[1]^2+1)^2+100*(-x1[1]^2+x2[1])^2 end proc;
与使用“箭头”符号相同
f2 := alpha -> (-x1[1]^2+1)^2+100*(-x1[1]^2+x2[1])^2;
然后Maple正在寻找任何alpha
。空无一人。然后,当您调用f(0)
时,将使用运算符调用中的(不存在的)alpha
来计算表达式。因此,f(x) = f(0)
适用于任何x
。 From the help page:
使用选项箭头还会禁用Maple简化规则,该规则将运算符表达式中的任何非本地名称添加到参数列表中。该选项对模块没有意义。
相反,您可以使用unapply
运算符,该运算符返回计算表达式的运算符。如果将变量expr
定义为函数内容,则会更加清晰。
expr := (-x1[1]^2+1)^2+100*(-x1[1]^2+x2[1])^2;
f := alpha -> expr;
h := unapply(expr, alpha);
h(0); # returns 409