在Maple中操作sequence元素时遇到问题。首先,这是代码。
b[0] := t -> (1-t)^3;
b[1] := t -> 3*t*(1-t)^2;
b[2] := t -> 3*t^2*(1-t);
b[3] := t -> t^3;
P := seq([seq([j*(i+1), j*(i-1)], i = 1 .. 4)], j = 1 .. 3);
EvalGamma := proc (b, P, i, t)
local CP, res;
option trace;
CP := P[i];
res := CP[1]*b[0](t)+CP[2]*b[1](t)+CP[3]*b[2](t)+CP[4]*b[3](t);
RETURN res;
end proc;
变量P是序列序列:P [i]是四个2D点的序列。 但是做作CP:= P [i];不做我想做的事:我不知道为什么,但结果不是程序中的P [i]。
奇怪的是,在程序之外,以下几行有效:
CP := P[1];
CP[1];
我将不胜感激任何建议。感谢。
答案 0 :(得分:0)
我假设您将程序称为
EvalGamma(b,P,i,t)
您遇到的问题是,当P插入到参数序列中时,嵌套的参数序列将“展平”以生成最终参数列表。解决此问题的一种简单方法是将P的序列放在列表结构中。所以使用
P := [seq([seq([j*(i+1), j*(i-1)], i = 1 .. 4)], j = 1 .. 3)];
一旦你这样做,我认为一切都会按预期工作。
答案 1 :(得分:0)
当您致电EvalGamma
时,您无法传递全局P
,这是(三个)列表(或列表)的表达序列。如果您尝试这样做,那么EvalGamma
将接收6个参数而不是4个,因为表达式序列P
中的三个(列表)列表中的每一个都被解释为调用的单独参数
相反,您可以将P
创建为列表,即
P := [seq([seq([j*(i+1), j*(i-1)], i = 1 .. 4)], j = 1 .. 3)];
或者您可以像EavlGamma(b, [P], some_i, some_name)
一样传递它。但是你应该只做这两种选择中的一种。
请注意,返回语法应为return res;
或(已弃用)RETURN(res);
。