2013-04-04 15 views
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]是一個由四個2D點組成的序列。 但是情意CP:= P [i];不做我想要的:我不知道爲什麼,但結果並不是P [i]。

而且奇怪的是,該過程外,以下行工作:

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

我將不勝感激的任何建議。謝謝。

回答

0

我假設你調用該過程作爲

EvalGamma(b,P,i,t) 

您正在遇到的問題是,當P被插入的參數的序列,自變量的嵌套序列被「展平」,以產生最終參數列表。解決這個問題的簡單方法是將P的序列放入列表結構中。所以使用

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

一旦你這樣做,我認爲一切都會按預期工作。

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