2013-10-03 16 views
0

我下載了一個Maple過程,它返回一個表達式的向量(說,v),並且每個單獨的表達式都是用符號條目表示的其他向量(p,a)。例如:用符號的Maple向量代替數值

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

我想能夠評估在矢量「V」 表達它是通過向載體「p」和「A」分配數字值來產生後但是如果我定義向量「A」和「p」如下:

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

我得到的,其中一個向量的價值被重新分配,但其他矢量的值不結果:

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

任何有關這個問題的性質的洞察力將不勝感激。我一直在瀏覽與此proc相對應的Maple文件,以嘗試在Vector'v'返回表達式之前將值賦給'p'和'a',但這一直相對不成功,因爲我對Maple相對較新,主要過程中的許多子過程似乎最終需要符號向量才能成功返回向量'v'。

回答

0

p[i]xearm返回的第一個Vector中的條目是所謂的轉義本地。因此,他們的地址與您的全球矢量地址不同,這就是爲什麼他們無法按照預期進行評估的原因。

你可以解決這個問題,如下所示。更換,

v:=f[1]; 

通過,

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

a[i]b[i]在第一個結果通過xearm返回似乎被索引到全局名稱ab,並沒有相同的問題做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

您是否完全確定p已被成功分配爲撥打號碼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,使其表現爲你描述,但他們大多是很做作。例如,我可以在myProc的主體內圍繞p[5]p[2]的實例放置兩對未評估報價(兩對單左左引號)。

您能得到什麼,如果查詢v[2](並讓你意想不到的輸出包括未計算索引引用p),那麼你發出命令,

%; 

後?

,如果在有問題的時候,你剛纔發出命令,你得到什麼,

p; 

,如果在有問題的時候,你發出命令,你得到什麼,

map(eval,v); 

您是否可以自由地給出一個URL來源myProc

+0

在文件pysub.zip [鏈接](http://signalingsystems.ucsd.edu/code/)包含華普代碼我的工作(主文件是xearm.mpl,它在讀取來自pysub.mpl,loadXearm.mpl,printvar.mpl)。從工作表中,我讀入xearm.mpl並執行「f:= xearm('verbose'= true,'doUnsub'= false);」並分配「v:= f [1];」至於其他問題:「map(eval,v)」返回一個錯誤,「p」返回符號'_p_'(在我將它賦值給一個數值Vector之前),並且「%」返回精確表達式「v [2 ]「的確如此。希望一切都有意義,並感謝您的意見! – user2161810