是否有内置函数来创建带有符号变量的数组任意尺寸?
例如,创建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中,您可以创建一个数组,其中每个元素都是指向变量的指针(指向值的指针)。这将是符号的数组。(如果我的想法是错误的,请有人纠正我。)
没有一个函数可以创建符号数组,但对于您的示例(单前缀、方形矩阵)来说,这很容易。
- 创建字符串前缀数组
- 创建字符串元素索引数组
- 连接前缀和索引
- 将字符串转换为符号
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
这可能是创建查找表的一种有趣方法。