0

在 Maple 中操作序列元素时遇到问题。首先,这里是代码。

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] 是四个二维点的序列。但是做作CP := P[i]; 不做我想做的事:我不知道为什么,但结果不是过程中的 P[i] 。

奇怪的是,在程序之外,以下几行有效:

CP := P[1];
CP[1];

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

4

2 回答 2

0

我假设您将程序称为

EvalGamma(b,P,i,t)

您遇到的问题是,当 P 插入参数序列时,嵌套的参数序列被“展平”以产生最终的参数列表。解决此问题的一种简单方法是将 P 的序列放在列表结构中。所以使用

P := [seq([seq([j*(i+1), j*(i-1)], i = 1 .. 4)], j = 1 .. 3)];

一旦你这样做,我认为一切都会按预期工作。

于 2013-04-04T16:01:28.323 回答
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;or (deprecated) RETURN(res);

于 2013-04-04T16:04:44.443 回答