使用符号变量创建任意数组



是否有内置函数来创建带有符号变量的数组任意尺寸?

例如,创建N^2个符号变量来填充相应的矩阵:

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

您只需创建符号变量的数组。CCD_ 1。Julia的参数打字处理它。

示例:SymEngine.jl

可以生成Matrix{SymEngine.Basic}(SymEngine.Basic是其符号表达式所在的类型)。Julia的通用调度使inv这样的东西发挥作用。

编辑:

重新阅读我认为可能还有更多的东西可以回答这个问题?如果你指的是符号变量a la SymEngine.jl/SymPy.jl,那么你可以通过插入字符串来创建不同的变量:

symbols("x$i")

那么答案的第一部分就成立了:只需使用为这种类型键入的Julia数组。

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

很难从这个问题中知道这是你想要的还是其他什么。

我对"符号变量"这个短语有点不清楚,因为Julia有一个特定的符号类型。

如果一个变量是指向某个值的指针,那么你的问题可能是创建数组,其中每个元素也是指向某个数值的指针——这将是一个变量数组

在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

这可能是创建查找表的一种有趣方法。

最新更新