Julia Wrappers for SymEngine, a fast symbolic manipulation library, written in C++.
You can install SymEngine.jl by giving the following command.
julia> Pkg.add("SymEngine")One can define variables in a few ways. The following three examples are equivalent.
Defining two symbolic variables with the names a and b, and assigning them to julia variables with the same name.
julia> a=symbols(:a); b=symbols(:b) b julia> a,b =symbols("a b") (a, b) julia>@vars a b (a, b)We are going to define an expression using the variables from earlier:
julia> ex1 = a +2(b+2)^2+2a +3(a+1) 3*a +3*(1+ a) +2*(2+ b)^2One can see that values are grouped, but no expansion is done.
A vector of variables can be defined using list comprehension and string interpolation.
julia> [symbols("α_$i") for i in1:3] 3-element Vector{Basic}: α_1 α_2 α_3Some times one might want to define a matrix of variables. One can use a matrix comprehension, and string interpolation to create a matrix of variables.
julia> W = [symbols("W_$i$j") for i in1:3, j in1:4] 3×4 Matrix{Basic}: W_11 W_12 W_13 W_14 W_21 W_22 W_23 W_24 W_31 W_32 W_33 W_34Now using the matrix we can perform matrix operations:
julia> W*[1.0, 2.0, 3.0, 4.0] 3-element Vector{Basic}:1.0*W_11 +2.0*W_12 +3.0*W_13 +4.0*W_14 1.0*W_21 +2.0*W_22 +3.0*W_23 +4.0*W_24 1.0*W_31 +2.0*W_32 +3.0*W_33 +4.0*W_34julia>expand(a +2(b+2)^2+2a +3(a+1)) 11+6*a +8*b +2*b^2Performs substitution.
julia>subs(a^2+(b-2)^2, b=>a) a^2+ (-2+ a)^2 julia>subs(a^2+(b-2)^2, b=>2) a^2 julia>subs(a^2+(b-2)^2, a=>2) 4+ (-2+ b)^2 julia>subs(a^2+(b-2)^2, a^2=>2) 2+ (-2+ b)^2 julia>subs(a^2+(b-2)^2, a=>2, b=>3) 5Peforms differentiation
julia>diff(a +2(b+2)^2+2a +3(a+1), b) 4*(2+ b)SymEngine.jl is licensed under MIT open source license.