I think the right strategy is to make a separate complex array
implementation library ("core.matrix.complex"?). In terms of dependencies,
it would only need to depend depend upon "core.matrix" and "complex".
The array representation could simply be a deftype which uses two
underlying arrays for the real and complex parts of the array respectively.
This world:
- use Complex values for array elements (mget etc.)
- allow the use of arbitrary underlying implementations (vectorz-clj,
Clatrix etc.)
- implement all the relevant core.matrix protocols for Complex scalar values
- implement all the relevant core.matrix protocols for Complex arrays
- maybe add some special functions for complex-specific tasks
- as an added bonus, act as a proof point that the core.matrix protocols
work for non-real valued arrays (which I think they do, but would be nice
to confirm...)
The implementation should be fairly straightforward, but if anyone wants I
can create a repo and bang out a bare-bones implementation in an hour or so
that people can build upon.
On Monday, 1 June 2015 08:49:22 UTC+1, Christopher Small wrote:
>
> Are these operations (*, +, etc) interoperable with core.matrix
> operations? That may end up being pretty key for a lot of numerical users.
>
> Chris
>
>
> On Sunday, May 31, 2015 at 3:55:46 PM UTC-7, Alan Forrester wrote:
>>
>> https://clojars.org/complex
>>
>> https://github.com/alanforr/complex
>>
>> Complex is a Clojure library for doing complex number calculations
>> that wraps the Java commons-math3 Complex library.
>>
>> complex
>>
>> A Clojure library for doing calculations with complex numbers. Wraps
>> the Java commons-math3 Complex library.
>>
>> Usage
>>
>> A complex number can be created by invoking the complex number
>> function. With one argument the function produces a complex number in
>> which only the real component is non-zero. With two arguments, the
>> first argument is the real part, the second argument is the imaginary
>> part:
>>
>> => (complex-number 1)
>>
>> Complex (1.0, 0.0)
>>
>> => (complex-number 1 2)
>>
>> Complex (1.0, 2.0).
>>
>> The library can be used to do complex arithmetic. The + function can
>> have any number of real or complex arguments but always produces a
>> complex result.
>>
>> => (+ 1 (complex-number 3 4))
>>
>> Complex (4.0, 4.0).
>>
>> The same is true of the other arithmetical operations *,-,/. The
>> arithmetical functions are fastest on a per number basis when used on
>> only two arguments. They are also faster when their arguments are
>> complex.
>>
>> The library also provides other functions, such as (pow a b), which
>> raises a to the power b, (sin a) which calculates the sine of a, and
>> several other functions. For details, see the docs.
>>
>> Alan
>>
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.