2015-12-07 78 views
2

我的研究涉及从标量配方到基体配方的问题,反之亦然。有时找到相应的矩阵模式和必要的操作来执行它们可能会变得不明显并且难以可视化(特别是当产生的矩阵模式很大且稀疏时)。为了验证我的推导,我通常使用MATLAB的sym变量(允许对它们执行所有数学运算)实现两个公式并检查它们是否相等。Julia等价于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 

所以我的问题是有没有在朱莉娅这样做相当于替代?

目前这是唯一的东西(除了像IDE一样的MATLAB的缺失),这是阻止我完全迁移到朱莉娅。

回答

4

Base Julia不支持符号计算。对于这个功能,你可以使用像SymPy.jl这样的东西,这是一个用于Julia(通过Python)或Nemo的符号计算包,它是基于Julia的完整计算机代数系统。

2

这里是上面的例子中的朱等效形式,SymPy包的帮助下:

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 
+1

第三行似乎有点令人生畏,以下是少一点,以便:'VEC =符号[“× $ i“for i in 1:n]'。 – jverzani