【问题标题】:Julia's equivalent of MATLAB's `sym`?Julia 相当于 MATLAB 的 `sym`?
【发布时间】:2015-12-07 07:17:31
【问题描述】:

我的研究涉及从标量公式到矩阵公式的转换问题,反之亦然。有时找到相应的矩阵模式和对它们执行的必要操作可能会变得不明显且难以可视化(尤其是当生成的矩阵模式很大且稀疏时)。为了验证我的推导,我通常使用 MATLAB 的 sym 变量(允许对它们执行所有数学运算)来实现这两个公式,并检查它们是否相等。

我的意思的一个简单的例子:

vec = sym('x',[2,1])
a = (3:4)'
vectorResult = a'*vec

scalar1 = sym('x1')
scalar2 = sym('x2')
scalarResult = a(1)*scalar1 + a(2)*scalar2

isequaln(vectorResult,scalarResult)

ans =

     1

所以我的问题是在 Julia 中是否有等效的替代方法?

目前这是唯一阻止我完全迁移到 Julia 的事情(除了缺少 MATLAB 之类的 IDE)。

【问题讨论】:

    标签: matlab matrix julia


    【解决方案1】:

    Base Julia 不支持符号计算。对于该功能,您可以使用 SymPy.jl 之类的东西,它是 Julia 中的符号计算包(通过 Python)或 Nemo,它是基于 Julia 的完整计算机代数系统。

    【讨论】:

      【解决方案2】:

      SymPy 包的帮助下,这是上述示例的 Julia 等效形式:

      using SymPy # load SymPy package, you must Pkg.add("SymPy") before
      n=10; # vector length 
      vec=Sym[Sym(symbol(:x,i)) for i in 1:n]; # create the vector of Sym
      a=rand(Int,n); # random vector of factors 
      vectorResult= transpose(a)*vec; # matrix product
      scalarResult=[sum([vec[i]*a[i] for i in 1:n])]; # scaler operation
      scalarResult==vectorResult # => true
      

      【讨论】:

      • 第三行看起来有点吓人,下面的就少了一点:vec=Sym["x$i" for i in 1:n].
      猜你喜欢
      • 1970-01-01
      • 2018-06-24
      • 2021-09-14
      • 2019-02-05
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      相关资源
      最近更新 更多