Calling Mathematica functions from Clojuratica

No matter what data we're working on with Mathematica, we'll want to call Mathematica functions from Clojure. The Clojuratica library makes this almost as easy as calling Clojure functions. Let's see how to do it.

Getting ready

You must first have Clojuratica and Mathematica talking to each other. Either complete the Setting up Mathematica to talk to Clojuratica for Mac OS X and Linux recipe or the Setting up Mathematica to talk to Clojuratica for Windows recipe. You'll need to have called the init-mma function.

Also, make sure that the Clojuratica namespace is imported into your script or REPL, as follows:

(use 'clojuratica)

How to do it…

In order to call a function, just use Mathematica's name for it with Clojure's function-calling syntax. For this example, we'll solve a nonlinear system of equations. In Mathematica, this will look as follows:

FindRoot[{Exp[x-2] == y, y^2 == x}, {{x, 1}, {y, 1}}].

In Clojure, it will look similar to this:

user=> (math (FindRoot [(== (Exp (- x 2)) y)
                        (== (Power y 2) x)] [[x 1] [y 1]]))
[(-> x 0.019026016103714054) (-> y 0.13793482556524314)]

How it works…

This recipe was very simple, but it doesn't hurt to break it down a little:

(FindRoot [(== (Exp (- x 2)) y) (== (Power y 2) x)] [[x 1] [y 1]])

This is just Mathematica's FindRoot function. That's right. All you need to do is call the function just as you would call any Clojure function, but using the same name that you do in Mathematica. The arguments to FindRoot are a sequence of Equals expressions and a sequence of starting points for each variable in the system of equations. These are also the same as in the Mathematica expression, but Clojuratica, in a good lisp fashion, requires the operator to always go first. It defines some aliases to Mathematica functions, such as the == and in this expression, which are changed to Equals and Subtract.

(math ...)

Any calls that we make to Mathematica must be wrapped in the math macro. We briefly discussed this macro at the end of the Setting up Mathematica to talk to Clojuratica for Mac OS X and Linux recipe. It takes the function name and parameters that we just spoke about, sends these to Mathematica, and returns the answer.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.226.104.153