Maple - 序列元素的影响

时间:2013-04-04 14:34:56

标签: element sequence maple

在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];

我将不胜感激任何建议。感谢。

2 个答案:

答案 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);