2012-10-26 62 views
1

在Maxima中,我想用任意數量的變量x[1] ... x[n](使用rk函數)數值求解一個微分方程組。我在變量名中使用方括號,以便我可以在for循環中索​​引變量。下面是一個例子調用rk當n = 2:Maxima - 在變量名中使用方括號

rk([derivativeOfX[1],-2*x[1]+x[2],derivativeOfX[2],x[1]-2*x[2]], [X[1],derivativeOfX[1],X[2],derivativeOfX[2]], [1,1,2,0], [t,0,10,0.1]) 

不幸的是,我得到的錯誤:

define: in definition of f_rk_4, found bad argument X[1] 

如果我手動替換X[1]x1X[2]x2,該錯誤消失:

rk([derivativeOfX1,-2*x1+x2,derivativeOfX2,x1-2*x2], [x1,derivativeOfX1,x2,derivativeOfX2], [1,1,2,0], [t,0,10,0.1]); 

看來rk不喜歡var中的方括號可用名稱,但我需要它們以便將變量索引到for循環中。我該怎麼辦?

回答

3

一個簡單的解決方案是有兩組變量。在循環中使用x [1]和x [2]。在你的rk(...)表達式之前,設置x1等於x [1],x2等於x [2]。呼叫rk。然後將x1存儲在x [1]中,將x2存儲在x [2]中。

請注意,您可以使用concat生成變量名稱。例如,concat('x,1)將產生符號x1。

+0

我該如何設置循環中的x1 = x [1]和x2 = x [2]?我仍然需要索引變量x1和x2。 –

+0

您可以使用concat生成變量。表達式concat('x,1)給出了x1的結果。 – soegaard

+0

好吧,這是關鍵部分!謝謝! (只需將您的答案評論爲「concat」,我將接受它)。 –