Frequently Asked Questions
Legal questions
How much does ILNumerics.Net cost? All core modules of ILNumerics.Net are free of charge. You can use them for unlimited time and for creating your own project for free! However, if you are about to redistribute your code developed with ILNumerics.Net, you must register here! Can I redistribute ILNumerics.Net with my project? How much does each redist cost? Yes. After you have registered your project here you may distribute all core modules of ILNumerics.Net for free! Please read our license information!Supported features
Does ILNumerics.Net use LAPACK/ BLAS functions? Yes. Currently supported are AMD's ACML, Intels MKL and generic builds for other processors. Can ILNumerics.Net handle n-dimensional Arrays ? Yes. Even if you will most often use matrices for your computations, the number of dimensions for arrays is not limited in any way. All functions of ILNumerics.Net support n-dimensional arrays if applicable. Is there any support for plotting? There are .NET panels, which you may simply drop in your application, which can handle ILArray's to plot the data in any .NET platform! All the plots are highly configurable. ILNumerics.Net plotting is built on OpenTK - an OpenGL bindung for .NET. Currently implemented are line plots for 2D, surface and imagesc graphs for 3D. We will continue to add new graph types. Is there support for sparse arrays? Not yet. But its scheduled for a future release. -> roadmap Is there support for distributed computing? Not yet. Please check the roadmap. Does ILNumerics.Net run under the mono-framework? Yes. But it is not intensively tested yet. The current release was designed to run under Microsoft Windows .NET. Does ILNumerics.Net support cells? Yes. With some additional features ('deep referencing'). Does ILNumerics.Net support structs? Yes. Structs are a native part of most programming languages and can therefore also be used for ILNumerics.Net. Does ILNumerics.Net support logicals? Yes. Does ILNumerics.Net support complex data? Yes. In single and double precision. Which Plattforms does ILNumerics.Net run on? Everywhere .NET 2.0 is supported. This is Microsoft Windows, Linux and Mac with the mono-framework. Note, the support for mono framework is in an early state and will be verified in ILNumerics.Net 2.0 (roadmap). Is it possible to create and use cells holding structs? Yes. You can hold arbitrary data in a cell. Yust wrap the struct into a ILArray<myStructType> which than can be assigned to a cell element.Using ILNumerics.Net
Can I use my *.m files with ILNumerics.Net or do I have to rewrite my code? No and no. Coding in ILNumerics.Net is fun! In difference to script based math-frameworks you have strong typesafety, enabling you to create much more reliable code. ILNumerics.Net classes are designed to give you the fastes relearn experience of all numerical libraries around. This makes converting code from your existing scripts to real .NET application code very easy and fast. Due to the extensive compatibility to Matlab functions (for both: parameter list and function purpose), converting Matlab code to ILNumerics.Net code most the time will be a very simple task. Anyway, a direct (automated) conversion of .m files to - let's say - C# code is not possible yet. Which languages can I use ILLibray in? All CLS compliant. Examples: C#, C++(managed), VisualBasic, Phyton Do I have to install any binaries into the GAC? No. ILNumerics.Net does not need to be installed into the Global Assembly Cache (GAC). However you might do so manually, if you have/want to. Besides an easier referencing from your project this does not introduce any further advantages. How can I find out, if a variable of typeILArray<double> is null?
Since ILNumerics.Net overloads the unequal operator for ILArray's, the expression is evaluated as follows: a is of type ILArray<double>, therefore the operator != (ILArray<double>,ILArray<double>)is used. The result is a ILLogicalArray, which is than implicitly casted to bool. Since arguments of the != operator must not be null, you'll get an exception. To circumvent this, you'd better use:
if (object.equals(a,null)) {... to test for null references!
ILNumerics.Net occasionally complain about having not found files like 'lapack_gen.dll'.
Make sure your assembly is created in the same directory the file 'ILNumerics.Net.dll' among all other ILNumerics.Net redistributables lay in. Since ILNumerics.Net does not install into the GAC, you may choose to have a global binary folder for your project.
Matrix operations on my non-INTEL and non-AMD processor seem somewhat slow!
This might come from the fact, those processors are supported with an unoptimized BLAS library only. However, ILNumerics.Net is well prepared to get you going with your own (optimized) copy of the BLAS (f.e. ATLAS). Read the instructions here. Also, you may test if one of MKL and/or ACML is suitable for your needs anyway by manually selecting the lapack wrapper: ILMath.Lapack = new ILLapackMKL10_0() -> for MKL (preferred), ILMath.Lapack = new ILACML3_6() for AMD.
Using ILNumerics.Net on 64Bit Systems gives a lot of errors. It seems, the assembly cannot load Lapack libraries.
Current lapack libraries are 32bit binaries. Therefore, in order to use ILNumerics.Net on 64Bit, you have to compile your project executable for Win32 / X86. This will make the program run in 32bit emulation mode on 64bit machines. If you are using Visual Studio for development, make sure the target definition is set to "Win32" or "X86" (and NOT "Mixed Platform" or "Any CPU").