2012-10-26 2 views
1

맥시마에서 함수를 사용하여 임의의 수의 변수로 임의의 수의 변수 x[1] ... x[n]으로 수치 적으로 시스템을 풀고 싶습니다. 변수 이름에 대괄호를 사용하여 for 루프의 변수를 인덱싱 할 수 있습니다. 여기 rk N = 2 예제 호출입니다 :Maxima - 변수 이름에 대괄호 사용

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

내가 수동으로 x2x1X[1]X[2]를 교체하는 경우이 오류가 사라집니다 : 불행하게도

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

, 나는 오류를 얻을 :

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

rk은 var에 대괄호를 사용하지 않는 것으로 보입니다. iable 이름은 필요하지만 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"만 있으면 받아 들일 것입니다.) –