Math.NET Numerics
Welcome to our official feedback forum. Do you have an idea? Do you recognize a good idea when you see one? We want to hear from you!

131 votes

95 votes

Add methods for linear and quadratic programming
Linear and quadratic programming methods are great techniques for minimization problems. Other, more complicated methodologies  such as MPC  can built on top of them fairly easily.
47 votes 
Provide principle component analysis
Extend the linear algebra part with PCA using either Singular Value Decomposition or Eigenvalue Decomposition. Easy implementation, great value!
44 votes 
32 votes

Investigate Mono.Simd
The upcoming Mono.Simd assembly is nearing release. Using these functions in certain areas could give massive performance gains.
28 votes 
Implement MATLAB's pchip interpolation algorithm
Piecewise Cubic Hermite Interpolating Polynomial
26 votes 
Add support for surface interpolation (2D, mesh)
Extend the interpolation methods to support 2D surface interpolation, i.e. on a mesh. See http://community.opensourcedotnet.info/forums/t/565.aspx
26 votes 
Solve a system of nonlinear equations
aka fsolve of matlab
24 votes 
Add Rotation Matrix and Vector classes for 2D, 3D and generic sized spaces
2D and 3D calculations could benefit from optimized functions for Rotation Matrices, 2D and 3D vectors, Solving for Transformation or Rotation Matrices, using Quaternions, and more.
24 votes 
Add row echelon and reduced row echelon form computation
Computing reduced row echelon and row echelon form of a Matrix could be used with Gaussian and GaussJordan elimination techniques.
22 votes 
21 votes

Add MoorePenrose pseudoinverse
This a proposition to add a MoorePenrose pseudoinverse implementation (couldn't find it in Math.net numerics). This example is implemented as a Extension Method to the Matrix<double> class. The pseudoinverse it is computed using the singular value decomposition. The algorithm comes from Wikipedia. Save the code in your project and call Matrix.PseudoInverse()

/*
* ExtensionMethods_2.cs
*
*/using System;
using MathNet.Numerics.LinearAlgebra.Double.Factorization;namespace MathNet.Numerics.LinearAlgebra.Double
{
public static class ExtensionMethods
{
/// <summary>
/// Moore–Penrose pseudoinverse
/// If A = U • Σ • VT is the singular value decomposition of A, then A† = V • Σ† • UT.
/// For…19 votes 
VSLab
I think this is a great project. I am suggesting your library for VSLab (http://www.codeplex.com/vslab). I think that an F# wrapper would be great. Are you interested in contribute with your math library in creating a Matlab like environment? Have a look to the project!
19 votes 
Add stochastic processes
Almost all modern financial analysis are built around stochastic processes. There are many processes, some general like time series and some more specific. It would be very useful for people working in the finance field.
18 votes 
12 votes

Add support for cuda
Is this possible to split the matrix multiplication algorithms to use processor and gpgpu all at the same time?
It would be an amazing feature to be added.
10 votes 
Add an FFTSHIFT and iFFTSHIFT on a matrix similar to MATLAB
Add an FFTSHIFT and iFFTSHIFT on a matrix similar to MATLAB
7 votes 
Allow interpolation over complex numbers
Currently interpolation only supports real numbers. Consider also to provide special schemes like Laurent interpolation around the unit circle.
6 votes 
Optimized DenseLU solve
/// <summary>
/// Solves A*X=B for X using LU factorization.
/// </summary>
/// <param name="columnsOfB">The number of columns of B.</param>
/// <param name="a">The square matrix A.</param>
/// <param name="order">The order of the square matrix <paramref name="a"/>.</param>
/// <param name="b">On entry the B matrix; on exit the X matrix.</param>
/// <remarks>This is equivalent to the GETRF and GETRS LAPACK routines.</remarks>
public static unsafe void LUSolveUnsafe(int columnsOfB, double[] aIn, int order, double[] bIn)
{
#region Initialize
if (aIn == null)
throw new ArgumentNullException("a");
if (bIn == null)
throw new ArgumentNullException("b");int i;
int j;
int k;double* a = stackalloc double[aIn.Length];
double*…6 votes
 Don't see your idea?