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:

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.

## Recent Comments