ILNumerics
An editor has nominated this article for deletion. You are welcome to participate in the deletion discussion, which will decide whether or not to retain it. |
![]() | This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
This article needs additional citations for verification. (May 2012) |
ILNumerics is a mathematical class library for Common Language Infrastructure (CLI) developers and a domain specific language (DSL) for the implementation of numerical algorithms on the .NET platform. While algebra systems with graphical user interfaces focus on prototyping of algorithms, implementation of such algorithms into distribution-ready applications is done using development environments and general purpose programming languages (GPL). ILNumerics is an extension to Visual Studio and aims at supporting the creation of technical applications based on .NET.
Developer(s) | ILNumerics |
---|---|
Stable release | v4.8
/ June 11, 2015 |
Written in | C#, Visual Basic |
Operating system | .NET Framework/ Mono, Windows |
Platform | IA-32, x86-64 |
Type | Technical computing, Mathematical software |
License | proprietary,GPLv3 |
Website | ilnumerics |
History
ILNumerics started in 2006 as an open source project, originating from the Technical University of Berlin. In 2007 ILNumerics won the BASTA! Innovation Awards 2007[1] as most innovative .NET project in Germany, Switzerland and Austria. After 6 years of open source development, the project added a closed source, proprietary license in 2011, aiming business and academic developers at the same time. The project quickly gained popularity (download numbers and engagement at stackoverflow.com[2][3][4], download counts from website not available). The .NET framework was selected as a managed foundation, since earlier attempts on the Java platform had been abandoned due to technical limitations. Similarly, the .NET framework has not been designed with the focus on requirements of technical application development. ILNumerics added interfaces to popular codes (LAPACK, FFTW), complex numbers and generic mult-dimensional array classes. In 2010 graphical capabilities have been added. Efforts to increase the performance of the technology were introduced in 2011. At the same time, a company was founded to continue the development. The technological goal is to establish the .NET framework as a feasible alternative to unmanaged languages for numeric computing.
Syntax
ILNumerics implements base functionality frequently needed for application development in technical areas: N-dimensional arrays, complex numbers, linear algebra, FFT and plotting controls (2D and 3D). Higher level functionality is provided by toolboxes for interpolation, optimization, statistics, HDF5 and machine learning. The ILNumerics DSL is embedded into .NET. Computational algorithms are formulated using any CLI language. However, only C# and Visual Basic are officially supported. Due to the strong type system of the .NET framework algorithms created with ILNumerics are strongly typed. This deviates from the syntax of alternatives, which are often weakly typed and therefore easier to adopt.
Graphics
A scene graph is used in ILNumerics to realize graphical output. Interactive 2D and 3D plots are used in Windows Forms applications. Hardware accelerated drawing is available via OpenGL. A software renderer is provided for legacy hardware, based on GDI+ and SVG.
IDE Integration
ILNumerics is distributed as an extension to Visual Studio. It adds a tool window to the IDE for the graphical inspection of mathematical objects while stepping through user code.
Performance
Since ILNumerics comes as a CLI assembly, it targets Common Language Infrastructure (CLI) applications. Just like Java - those frameworks are often criticized for not being suitable for numerical computations. Reasons are the memory management by a garbage collector and the intermediate language execution. ILNumerics approaches these limitations by optimizing the memory management via pooling of large array objects. Furthermore, it parallelizes numerical operations on multicore machines and performs loop unrolling and cache optimizations. Further speed-up is gained by the removal of bound checks on array accesses. In the sum these methods allow ILNumerics algorithms to compete with unmanaged languages compilers in terms of execution speed.[5][independent source needed] Linear algebra routines rely on processor specific optimized versions of LAPACK and BLAS.
Alternatives
Some algebraic systems come with compiler extensions for native code/C code generation. One example here is Matlab's Compiler. In conjunction with the .NET Builder of the same vendor it is possible to interface .NET applications. Other projects aim the .NET platform, namely: dnanalytics, NMath, NAG and Visual Numerics' IMSL. A list of alternatives on other platforms include NumPy/SciPy, R and the Julia, all of which require their own compiler infrastructure to be installed and distributed. Library extensions exist for C++ and JavaScript with IT++, Boost and Numeric.js.
See also
References
- ^ BASTA! Innovation Award 2007
- ^ https://www.nuget.org/packages/ILNumerics/
- ^ http://stackoverflow.com/questions/tagged/ilnumerics
- ^ https://visualstudiogallery.msdn.microsoft.com/9a67b49d-b0b2-4073-97fd-3f18ba08cc61
- ^ http://ilnumerics.net/blog/fast-faster-performance-comparison-c-ilnumerics-fortran-matlab-and-numpy-part-i/
External links
- ILNumerics website
- Review by S.Hanselmann
- Review on Channel9
- Article about Math Libraries for .NET at MSDN
- Review on InfoQ
- Array programming languages
- Numerical programming languages
- Free mathematics software
- Unix programming tools
- Numerical analysis software for Linux
- Numerical analysis software for OS X
- Numerical analysis software for Windows
- Computer vision software
- Free 3D graphics software
- OpenGL
- 3D scenegraph APIs
- Free science software
- C Sharp libraries
- Free data analysis software
- Free data visualization software
- Data visualization software