Mathematica is a powerful environment for symbolic and numerical computation. I have been using it for many years now. In this post I had explained how we can use Mathematica bundled with Raspberry distribution to control littleBits devices.

When I saw that there is support in Julia for interacting with Mathematica, I decided to investigate it further. Please note that for this to work, you must have a local copy of Mathematica; Julia does not replace Mathematica.

The package Mathematica.jl is required for this interaction. I found out that this package has dependency on a couple of other files (MathLink) that are not automatically installed by Julia’s package manager. The files are located here: https://github.com/MikeInnes/MathLink.jl. So I manually downloaded the ZIP file and extracted the SRC files to my local directory.

For convenience in launching Julia from the Terminal on my iMac (that is where I have my Mathematica installation), I set up an alias:

alias julia=”/Applications/Julia-0.4.6.app/Contents/Resources/julia/bin/julia”

Launch Julia on the Terminal by typing julia.

We have to install the Mathematica.jl package just once through Julia’s package manager. In my case, I had already installed it in an earlier session. The next important step is to tell Julia where it can locate the MathLink dependency files. See the following image:

Julia Session

Now we are all set to interact with Mathematica. The nice thing is that we need not launch Mathematica manually for this interaction to work.

Let us start by calculating the Nth prime number, where N is 10^10:

julia> Prime(10^10)

252097800623

Note that the answer is coming from Mathematica, not Julia.

Next, let us create an array of Lucas numbers for N = 10 to 20:

julia> res = [LucasL(n) for n = 10:20]

11-element Array{Any,1}:

123

199

322

521

843

1364

2207

3571

5778

9349

15127

What is interesting is that the result is a Julia expression, so we can access the elements of the returned array.

julia> res[1] + res[2]

322

Because the syntax of Mathematica and Julia are different, one way to execute an actual Mathematica expression in Julia is to represent it as a String and call Mathematica’s ToExpression function on the String.

As an example, let us use Mathematica to play some music – the notes C4 and D4, each lasting 1 second:

julia> ToExpression(“””EmitSound[Sound[{SoundNote[“C4”], SoundNote[“D4″]}]]”””)

When you execute the above code, you can hear Mathematica playing music.

A slight variation of the above is to play a Chord using notes C4-E4-G4, for 0.5 second using Violin:

julia> ToExpression(“””EmitSound[Sound[SoundNote[{“C4”, “E4”, “G4”}, 0.5, “Violin”]]]”””)

As the final example, I can define my own Mathematica function and execute it:

julia> ToExpression(“MyFunction[a_] = a ^ 34;MyFunction[2]”)

17179869184

So it is quite remarkable that we can interact with Mathematica and take advantage of its vast computational power from within Julia. I am sure that as Julia evolves, further enhancements to the Mathematica.jl package will be made.

Tags: ,