是否有内置函数来创建带有符号变量的数组 任意维度?
例如,要创建N ^ 2个符号变量来填充相应的矩阵:
[x11, x12, ,x1N
..., ..., ,..
XN1, xN2, ,xNN]
答案 0 :(得分:2)
您只需创建符号变量数组。 Array{T,N}
。朱莉娅的参数化打字处理它。
示例:SymEngine.jl
您可以设置Matrix{SymEngine.Basic}
(SymEngine.Basic
是其符号表达式所在的类型)。 Julia的通用调度使inv
之类的工作成为可能。
编辑:
重新阅读我认为可能会有更多回答这个问题?如果你的意思是符号变量la SymEngine.jl / SymPy.jl,那么你可以通过插入字符串来创建不同的变量:
symbols("x$i")
然后答案的第一部分成立:只使用为此类型键入的Julia数组。
arr[i,j] = symbols("x$i$j")
很难从这个问题中知道这是你正在寻找的东西还是别的东西。
答案 1 :(得分:0)
我对短语"符号变量"有点不清楚。因为朱莉娅有一个specific符号type。
如果变量是指向某个值的指针,那么您的问题可能是创建数组,其中每个元素也是指向某个值的指针 - 这将是变量数组。
在Julia中,您可以创建一个数组,其中每个元素都是指向变量的指针(指向值的指针)。这将是一个符号数组。 (如果我对此的看法是错误的,请有人纠正我。)
创建符号数组没有单一功能,但对于您的示例(单前缀,方阵),它非常简单。
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
这可能是创建查找表的一种有趣方式。