2017-01-19 50 views
0

是否有內置函數來創建具有任意維數的符號變量 的數組?使用符號變量創建任意數組

例如,創建N^2個符號變量來填充相應的矩陣:

[x11, x12, ,x1N 
..., ..., ,.. 
XN1, xN2, ,xNN] 
+0

如果其中任何一個答案已經解決了您的問題,那麼您應該接受其中的一個。 –

回答

2

你只創建符號變量陣列。 Array{T,N}。朱莉婭的參數化鍵入處理它。

實施例:SymEngine.jl

可以使一個Matrix{SymEngine.Basic}SymEngine.Basic是其符號表達式是在類型)。朱莉婭的通用派遣使inv的工作。

編輯:

重新閱讀我認爲可能有更多的回答這個問題?如果你的意思是象徵性的變量一拉SymEngine.jl/SymPy.jl,那麼你可以通過插值到字符串創建不同的:

symbols("x$i") 

那麼答案的第一部分認爲:只要使用朱莉婭陣列是爲此類型鍵入。

arr[i,j] = symbols("x$i$j") 

很難從問題中知道這是您要找的還是其他的東西。

+0

這是否支持操作?例如,用一個符號矩陣進行矩陣乘法,並用另一個矩陣乘以實數? – user2820579

+0

此外,我安裝這個軟件包時遇到問題。 – user2820579

+0

是的,它只是使用Julia的派遣和促銷系統。矩陣乘法調用回退到一個通用函數,該函數在元素類型定義了「*」和「+」的任何情況下都可以工作。 –

0

由於Julia擁有specific符號type,所以我對「符號變量」一詞有點不清楚。

如果變量是指針的值,則你的問題可能是關於創建陣列,其中每個元素也是一個指針到某一值 - 這將是一個陣列的變量

在Julia中,您可以創建一個數組,其中每個元素都是指向變量(指向值的指針的指針)的指針。這將是符號的陣列。 (如果我的想法是錯誤的,有人請糾正我。)

沒有一個函數可以創建符號數組,但對於您的示例(單個前綴,方形矩陣),這非常容易。

  1. 創建字符串的數組前綴
  2. 創建字符串元素索引的陣列
  3. 級聯前綴和指數
  4. 將字符串轉換爲符號

function SymArray(N) 
    A = Array{Symbol}(N,N)  # initialize output array 
    prefixes = fill("x", (N,N)) # create array of prefixes 
    rix = collect(1:N)   # create column of numeric row indices 

    for i in collect(1:N) 
     tmpCol = string.(rix, i) # add column indices; 'dot' applies string() to each element 
     A[:,i] = tmpCol   # add fully indexed column to output array 
    end 

    A = Symbol.(prefixes, A)  # concatenate & convert strings to symbols 

    return(A) 
end 

julia> S = SymArray(3) 
3×3 Array{Symbol,2}: 
:x11 :x12 :x13 
:x21 :x22 :x23 
:x31 :x32 :x33 

julia> S[1,1] 
:x11 

但是,我們還沒有定義X11,所以它不指向任何東西。

julia> eval(S[1,1]) 
ERROR: UndefVarError: x11 not defined 
in eval(::Module, ::Any) at ./boot.jl:234 
in eval(::Any) at ./boot.jl:233 

您的值存儲到一個名爲變量的任何時間,您可以從符號的數組訪問值。

julia> x11 = 1.2 
1.2 

julia> eval(S[1,1]) 
1.2 

julia> 3*eval(S[1]) 
3.6 

這可能是創建一個查找表,一個有趣的方式。