2013-10-03 2 views
0

표현식의 Vector (예 : v)를 반환하고 각 개별 표현식이 기호 항목이있는 다른 벡터 (p, a)로 표시되는 Maple proc를 다운로드했습니다. 예를 들어이 벡터 'P'와 'A'에 숫자 값을 할당하여를 생성 한 후상징적 인 Maple Vector에서 숫자 값을 대체합니다.

> v := myProc(); 
> v[1]; 
p[2] + a[1] 
> v[2]; 
p[5] + a[3] + sqrt(a[1]) 
... 

은 내가 벡터를 정의하지만 경우 벡터 'V'의 표현을 평가할 수 있도록하고 싶습니다 'A'와 'P'를 다음과 같이

내가 얻을
a := Vector(3,1): 
p := Vector(5,2): 

한 벡터의 값은 재 할당되지만 다른 벡터의 값이되지 않는 결과 :

> v[1]; 
p[2] + 1 
> v[2]; 
p[5] + 1 + sqrt(1) 

이 문제의 본질에 대한 통찰력은 인정 될 것입니다. 나는이 proc에 해당하는 Maple 파일을 통해 벡터 'v'가 표현식을 반환하기 전에 'p'와 'a'에 값을 할당하려고 시도했지만, 상대적으로 실패했다. 이는 내가 Maple과 메인 proc의 수많은 서브 프로세스는 궁극적으로 벡터 'v'를 성공적으로 반환하기 위해 상징적 벡터가 필요합니다.

답변

0

xearm에 의해 반환 된 첫 번째 벡터의 항목에있는 p[i]은 소위 이스케이프 된 지역입니다. 따라서 그들은 세계 p 벡터의 항목과 다른 주소를 가지므로 예상대로 평가하지 못합니다.

다음과 같이이 문제를 해결할 수 있습니다.xearm에 의해 반환 된 첫 번째 결과에

v:=f[1]; 
v:=convert(v,`global`); 
a[i]

b[i] 글로벌 이름 ab에 색인을 표시하고, 동일한 문제 등이없는 의해

v:=f[1]; 

를 교체 p[i]하십시오.

이전 답변에서 올바르게 작동하는 예제를 사용하면 다음과 같은 문제가있는 유사한 버전의 문제가 발생합니다.

restart: 

myProc:=proc() 
     local w, p; 
     w:=Vector(2); 
     w[1]:=p[2] + a[1]; 
     w[2]:=p[5] + a[3] + sqrt(a[1]); 
     return w; 
    end proc: 

v:=myProc(): 

v[1]; 
          p[2] + a[1] 

v[2]; 
             (1/2) 
         p[5] + a[3] + a[1]  

a:=Vector(3,1): 
p:=Vector(5,2): 

v[1]; 
           p[2] + 1 

v[2]; 
           p[5] + 2 

v:=convert(v,`global`): 

v; 
           [3] 
           [ ] 
           [4] 
+0

완벽하게 작동합니다! 매우 감사합니다!!! – user2161810

0

Vector(5,2)이라고 말한 결과로 성공적으로 할당 되었습니까?

예상대로 다음 작품이 나에게 적합합니다.

restart: 

myProc:=proc() 
      local w; 
      w:=Vector(2); 
      w[1]:=p[2] + a[1]; 
      w[2]:=p[5] + a[3] + sqrt(a[1]); 
      return w; 
     end proc: 

v:=myProc(): 

v[1]; 
          p[2] + a[1] 

v[2]; 
             (1/2) 
         p[5] + a[3] + a[1]  

a:=Vector(3,1): 
p:=Vector(5,2): 

v[1]; 
            3 

v[2]; 
            4 

나는 당신이 설명하는대로 동작하도록 myProc를 작성하는 몇 가지 교묘 한 방법을 생각 할 수 있지만 대부분 매우 인위적인입니다. 예를 들어 p[5]p[2]의 인스턴스 주위에 myProc 내부에 두 쌍의 평가 절하 (두 쌍의 단일 왼쪽 따옴표)를 배치 할 수 있습니다.

당신은 무엇을 얻을 경우 즉시 (p로 평가되지 않은 인덱스 참조를 포함하여 예기치 않은 출력과 점점) 그런 다음 명령을 실행

%; 

v[2]를 조회 한 후? 문제가있는 시점에서, 당신은 단지 명령을 실행하는 경우는 어떻게해야합니까 무엇

,

p; 

? 문제가있는 시점에서, 당신은 명령을 실행하는 경우는 어떻게해야합니까 무엇

,

map(eval,v); 

?

myProc의 출처에 대한 URL을 자유롭게 줄 수 있습니까?

+0

에서 파일 pysub.zip은 [링크] (http://signalingsystems.ucsd.edu/code/) 내가 함께 일하고 있어요 메이플 코드를 포함하는 (주 파일은 xearm.mpl이며 읽는다 procs from pysub.mpl, loadXearm.mpl, printvar.mpl). 워크 시트에서 xearm.mpl을 읽고 "f : = xearm ('verbose'= true, 'doUnsub'= false);" "v : = f [1];"을 할당하십시오. "map (eval, v)"는 오류를 반환하고, "p"는 ('숫자 벡터에 할당하기 전에)'_p_ '기호를 반환하고'% '는 정확한 표현식을 반환합니다.'v [2 ] "않습니다. 모두가 이해하고 귀하의 의견을 보내 주길 바래! – user2161810

관련 문제