InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

.NET Scientific Computing with Meta Numerics

Posted by Abel Avram on Apr 09, 2009

Sections
Development
Topics
.NET ,
Artifacts & Tools
Tags
CodePlex

Meta Numerics is a .NET library for scientific computations offering support for complex numbers, matrixes, advanced functions and statistical operations.

Complex Numbers

The library supports complex numbers and 12 related arithmetic operations including advanced functions like: Gamma, Faddeeva and Riemann Zeta.

Matrixes

Meta Numerics permits the following computations with generic and square matrixes:

Operation Generic Square
Arithmetic

Y

Y

Decomposition  

Y

Determinant  

Y

Inverse  

Y

Eigenvalues and Eigenvectors  

Y

Advanced Functions

The library also contains the following advanced functions: Gamma, Psi, Beta, Incomplete Gamma, Incomplete Beta, Erf, Fresnel, Integrals, Exponential Integrals, Cylindrical Bessel J and Y, Spherical Bessel j and y, Reimann Zeta, Hermite H, Laguerre L, Legendre P, Chebyshev T.

Statistics and Analysis

The library allows to perform a large number of tests on data including t-tests, Mann-Whitney, F-Tests, Kolmogorov-Smirnov, Kuiper, Pearson's R, Spearman's R and Kendall's τ.  It also can be used for regressions “including fitting to a constant, fitting to a line, and fitting to aribitrary, parameterized functions. All fits return a χ2 statistic and error bars on all parameters.”. Distributions: “Uniform, Normal, Exponential, χ2, t, F, and Kolmogorov-Smirnov. You can easily obtain PDF values, CDF values, arbitrary central and raw moments, and probit values.” Analysis of “contingency tables using odds ratios, χ2 tests, Fisher exact tests”. Others.

The library can be downloaded from CodePlex under Microsoft Public License (Ms-PL).

Matrix representation by C Curl Posted
Re: Matrix representation by David Wright Posted
Other Open Source .NET scientific libraries: ILNumerics and dnAnalytics by Alex Buer Posted
  1. Back to top

    Matrix representation

    by C Curl

    A quick comment on the matrix implementation.

    You should seriously consider using a one-dimensional array to represent the matrices (and index this through offsets), otherwise it would be difficult to use the library for more than the very simplest problems. There's a ton of literature you can find on this.

    Multi-dimensional (or jagged arrays) are very textbook, but have terrible performance characteristics for pretty much every matrix operation, and especially so for matrix multiplication. By itself you should expect a performance improvement up to an order of magnitude for matrices with more than a few hundred rows/cols, but it also opens up other avenues that can give it another 10x boost.

    It's a bit more work to implement, but you can find some good examples of this in e.g. the Java CERN Colt library. Worth benchmarking against this first though.

  2. Back to top

    Re: Matrix representation

    by David Wright

    C Curl: Thanks for the suggestion. I have created a bug to track this issue. Please feel free to create others or use the discussion forum to bring up issues. Thanks for giving Meta.Numerics a look.

    Abel: Thanks for publicizing Meta.Numerics.

  3. Back to top

    Other Open Source .NET scientific libraries: ILNumerics and dnAnalytics

    by Alex Buer

    Nice to see more choice among open source .NET scientific libraries; other libraries include:

    ILNumerics is a LGPL .NET library with support for linear algebra, complex, and import/export of MATLAB files. It also includes a GPL library for visualization.

    dnAnalytics is a Microsoft Public License .NET library with support for sparse matrices, statistics and a F#-friendly syntax.

Educational Content

Jesper Boeg on Priming Kanban

In this interview, Jesper Boeg, author of the new InfoQ book – Priming Kanban, discusses the keys to using Kanban effectively, and how to get started if you are currently using other approaches.

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.