Julia 中类似于 MATLAB 的 `sym` 的函数是什么?

3
我的研究涉及将标量公式转化为矩阵公式,反之亦然。有时,找到相应的矩阵模式和必要的操作可能变得不明显且难以可视化(特别是当结果矩阵模式很大且稀疏时)。为了验证我的推导,我通常使用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之外)。

2个回答

4

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


3

下面是使用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

2
第三行看起来有点令人生畏,接下来的部分则稍微简单一些:vec=Sym["x$i" for i in 1:n] - jverzani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接