Mathematica中下標不能用區分變數嗎?

在Mathematica中輸入

l = Subscript[l, 1] + 1

會出現錯誤說超過遞歸深度。看結果好像是它沒有把帶下標的變數l和l區分開。這是不是意味著Mathematica中無法通過給變數加下標以區別原有變數?

這樣的話,如果我要表示電壓相量v等於其實部和虛部之和如何表示才是標準的呢?

v = Subscript[v, x] + I*Subscript[v, y]


you need to activate [Notation] and [Symbolize] your varaible with subscript. have funs!


Subscript 在語義上和一個未定義的符號沒有什麼區別,它的作用主要是告訴前端在顯示這個表達式的時候要寫成下標的形式。

也就是說,談不上「用下標區分變數」,因為 Subscript[v, x] 本就不是一個 Symbol:

Head[Subscript[v, x]] (* Subscript *)
Head[vx] (* Symbol *)

其實並沒有什麼標準的表達方式,但習慣上就寫成,

v := vx + I vy

或者寫成依賴時間的形式,

v[t_] := vx[t] + I vy[t]

Subscript 的這個特點會導致表達式替換的困難,比如,

v + r Subscript[i, v] /. { v -&> vx + I vy }

在必須用 Symbol 的地方不能用下標,

Block[{Subscript[v, x] = 1}, Subscript[v, x] / r] (* Block::lvset *)


可以在開頭加入如下兩行代碼:

Needs["Notation`"];
Symbolize[ParsedBoxWrapper[SubscriptBox["_", "_"]]]

Mathematica會將匹配此表單的表達式視為單個變數,也就是將所有帶下標的字元視為單個符號變數。下面是例子,將V_{xy} , V_{x}  ,V_{y} 定義為單個變數:

Needs["Notation`"];
Symbolize[ParsedBoxWrapper[SubscriptBox["_", "_"]]];
Head[Subscript[v, xy]]
Head[Subscript[v, x]]
Head[Subscript[v, y]]

Out[50]= Symbol

Out[51]= Symbol

Out[52]= Symbol

參考:

[1] Can we use letter with a subscript as a variable in Mathematica?

[2] Whats the best practice of using subscripts in symbols?


推薦閱讀:

在mathematica中怎麼限定一個變數的類型,比如整數,正數,實數,複數等?
為什麼wolfram做了mathworld卻沒有physicsworld?
如何用計算機生成一段隨機的音樂?
如何從Deemo遊戲中提取音樂的midi文件?

TAG:WolframMathematica |