tag:mathnet.uservoice.com,2008-02-07:/forums/general/activityMath.NET Numerics on UserVoice2011-12-13T11:57:19-08:00tag:mathnet.uservoice.com,2008-02-07:Event/103934172011-12-13T11:57:19-08:002011-12-13T11:57:19-08:00Add support for cuda<p>Anonymous suggested:<br />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.</p>Anonymoustag:mathnet.uservoice.com,2008-02-07:Event/102411282011-11-16T11:03:08-08:002011-11-16T11:03:08-08:00Clone [updated]<p>Override .Clone for the various matrix storage classes. Right now it's in the generic class and calls .At a zillion times instead of just doing an array block copy.</p><p>Christoph Rüegg said:<br /><div class="ugc"><p>Good point though concerning the unnecessary Clone calls, need think about some options there...</p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/102404122011-11-16T09:16:33-08:002011-11-16T09:16:33-08:00Clone [updated]<p>Override .Clone for the various matrix storage classes. Right now it's in the generic class and calls .At a zillion times instead of just doing an array block copy.</p><p>Christoph Rüegg said:<br /><div class="ugc"><p>github issue #24</p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/102403032011-11-16T08:58:32-08:002011-11-16T08:58:32-08:00Clone [updated]<p>Override .Clone for the various matrix storage classes. Right now it's in the generic class and calls .At a zillion times instead of just doing an array block copy.</p><p>Christoph Rüegg said:<br /><div class="ugc"><p>Clone is just a call to CopyTo. Are we talking about the same codebase?</p>
<p><a href="https://github.com/mathnet/mathnet-numerics/blob/master/src/Numerics/LinearAlgebra/Generic/Matrix.cs#L250" rel="nofollow" target="_blank">https://github.com/mathnet/mathnet-numerics/blob/master/src/Numerics/LinearAlgebra/Generic/Matrix.cs#L250</a></p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/102299052011-11-14T22:12:04-08:002011-11-14T22:12:04-08:00Clone [updated]<p>Override .Clone for the various matrix storage classes. Right now it's in the generic class and calls .At a zillion times instead of just doing an array block copy.</p><p>Lacko said:<br /><div class="ugc"><p>Actually, it's Clone and not CopyTo that has to be overridden, as CopyTo might be called with a matrix in another storage format.</p>
<p>I've just started using math.net a few days ago to replace my not so elaborate matrix implementation and mkl wrappers with something that's community supported. I'm pretty much satisfied but the first application already revealed some performance bootleneck. For instance, there's no direct access to the U and Vt matrices of the SVD class, only via a clone call which I think is unnecessary. I'd change the U() function to a simple property. To prevent changes to the matrix (which is probably not a big issue because users of math libs are usually aware of what they're doing) an immutable matrix class could be added to the lib. Unfortunately, changing U() to a property would break the interface. Well, Clone could be removed though. I've changed the clone function to do a block copy instead of an itemwise clone via the At function and still this single Copy uses 5% of my runtime.</p>
<p>I don't know how to contribute to the package but would happily implement some of these changes. Also, I have a piece of robust principal component code that I can port to math.net and make it part of the package if anyone's interested.</p></div></p>Lackotag:mathnet.uservoice.com,2008-02-07:Event/102291082011-11-14T17:48:55-08:002011-11-14T17:48:55-08:00Clone [is now planned]<p>Override .Clone for the various matrix storage classes. Right now it's in the generic class and calls .At a zillion times instead of just doing an array block copy.</p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/102291072011-11-14T17:48:55-08:002011-11-14T17:48:55-08:00Clone [updated]<p>Override .Clone for the various matrix storage classes. Right now it's in the generic class and calls .At a zillion times instead of just doing an array block copy.</p><p>Christoph Rüegg (admin) responded:<br /><div class="ugc"><p>Confirmed, managed dense matrix implementations are missing a proper override of CopyTo (some other implementations already do override it). Needs a github ticket.</p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/102255412011-11-14T08:12:10-08:002011-11-14T08:12:10-08:00Clone<p>Lacko suggested:<br />Override .Clone for the various matrix storage classes. Right now it's in the generic class and calls .At a zillion times instead of just doing an array block copy.</p>Lackotag:mathnet.uservoice.com,2008-02-07:Event/100347092011-10-18T03:25:18-07:002011-10-18T03:25:18-07:00cache cdf in Categorical distribution function [updated]<p>makro said:<br /><div class="ugc"><p>ok apparantly this class is depracted, sorry.</p></div></p>makrotag:mathnet.uservoice.com,2008-02-07:Event/100346522011-10-18T03:09:44-07:002011-10-18T03:09:44-07:00add Empirical distribution function (see wiki)makrotag:mathnet.uservoice.com,2008-02-07:Event/100346162011-10-18T03:00:57-07:002011-10-18T03:00:57-07:00cache cdf in Categorical distribution functionmakrotag:mathnet.uservoice.com,2008-02-07:Event/98486032011-09-22T01:51:04-07:002011-09-22T01:51:04-07:00add regression ( linear, parabolic, etc ) [updated]<p>Solve for the variables.</p><p>DP said:<br /><div class="ugc"><p>would add to the feature set.</p></div></p>DPtag:mathnet.uservoice.com,2008-02-07:Event/98485992011-09-22T01:50:41-07:002011-09-22T01:50:41-07:00add regression ( linear, parabolic, etc )<p>DP suggested:<br />Solve for the variables.</p>DPtag:mathnet.uservoice.com,2008-02-07:Event/90229972011-07-17T14:32:20-07:002011-07-17T14:32:20-07:00add a Math.Ulp function [is now completed]<p>ULP mean Unit in the Last Place.
It is implemented in Java and is useful in some cases.
Here is some code I have write, but I'm not sure of my implementation :
float absX = Math.Abs(value);
byte[] bytes = BitConverter.GetBytes(absX);
if (BitConverter.IsLittleEndian)
bytes[0]++;
else
bytes[bytes.Length - 1]++;
float nextFloatNumber = BitConverter.ToSingle(bytes, 0);
return (nextFloatNumber - absX);
Take a look at :
http://stackoverflow.com/questions/1668183/find-min-max-of-a-float-double-that-has-the-same-internal-representation</p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90229952011-07-17T14:32:20-07:002011-07-17T14:32:20-07:00add a Math.Ulp function [updated]<p>ULP mean Unit in the Last Place.
It is implemented in Java and is useful in some cases.
Here is some code I have write, but I'm not sure of my implementation :
float absX = Math.Abs(value);
byte[] bytes = BitConverter.GetBytes(absX);
if (BitConverter.IsLittleEndian)
bytes[0]++;
else
bytes[bytes.Length - 1]++;
float nextFloatNumber = BitConverter.ToSingle(bytes, 0);
return (nextFloatNumber - absX);
Take a look at :
http://stackoverflow.com/questions/1668183/find-min-max-of-a-float-double-that-has-the-same-internal-representation</p><p>Christoph Rüegg (admin) responded:<br /><div class="ugc"><p>See Precision.EpsilonOf (and .Increment/.Decrement/.DumbersBetween/.CompareTo etc)</p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90229632011-07-17T14:28:14-07:002011-07-17T14:28:14-07:00add Log Normal distribution [is now completed]Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90229612011-07-17T14:28:14-07:002011-07-17T14:28:14-07:00add Log Normal distribution [updated]<p>Christoph Rüegg (admin) responded:<br /><div class="ugc"><p>LogNormal is available in Math.NET Numerics</p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90228752011-07-17T14:20:13-07:002011-07-17T14:20:13-07:00implement a real number type that supports exact arithmetic [updated]<p>a real number type that lazily increases its precision when needed up to a maximum user-defined precision.</p><p>Christoph Rüegg said:<br /><div class="ugc"><p>That would essentially be a fixed-precision number, i.e. a System.Numerics.BigInteger with a fixed number of bits (or maybe digits) shifted virtually to the right of the comma? As opposed to e.g. a rational number constructed as a fraction of two BigIntegers?</p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90227272011-07-17T14:09:26-07:002011-07-17T14:09:26-07:00Matrix allocation as single array instead of array of arrays [is now completed]<p>Change matrix (and any other) allocation/member from:
double[][]
to:
double[] OR double[,]
and handle indexing etc internally. Not having matrix data as one continuous memory area is not a good thing for e.g. interop. Additionally, allocation is a lot slower for many rows.</p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90227252011-07-17T14:09:26-07:002011-07-17T14:09:26-07:00Matrix allocation as single array instead of array of arrays [updated]<p>Change matrix (and any other) allocation/member from:
double[][]
to:
double[] OR double[,]
and handle indexing etc internally. Not having matrix data as one continuous memory area is not a good thing for e.g. interop. Additionally, allocation is a lot slower for many rows.</p><p>Christoph Rüegg (admin) responded:<br /><div class="ugc"><p>Math.NET Numerics uses double[] for matrice data storage (mainly for native code compatibility)</p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90226472011-07-17T14:07:45-07:002011-07-17T14:07:45-07:00Reintegrate the Sparse Linear Algebra toolkit [is now completed]<p>Iridium once supported sparse linear algebra (for a very short time) but then it was temporarily removed because of some issues. Solve them and integrate it back.</p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90226452011-07-17T14:07:45-07:002011-07-17T14:07:45-07:00Reintegrate the Sparse Linear Algebra toolkit [updated]<p>Iridium once supported sparse linear algebra (for a very short time) but then it was temporarily removed because of some issues. Solve them and integrate it back.</p><p>Christoph Rüegg (admin) responded:<br /><div class="ugc"><p>Math.NET Numerics supports sparse matrices again</p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90226312011-07-17T14:06:58-07:002011-07-17T14:06:58-07:00Add methods for linear and quadratic programming [is now under review]<p>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.</p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90226112011-07-17T14:06:17-07:002011-07-17T14:06:17-07:00Provide linux packages (for use with mono) [is now planned]<p>Extend the package generation scripts and provide the missing documents (and maybe consider to switch back to a classic version system) to build linux packages (e.g. deb for debian/ubuntu) that will run under mono.</p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90225752011-07-17T14:05:42-07:002011-07-17T14:05:42-07:00Histogram constructor with buckets. Data is applied to the buckets. [is now under review]<p>I need to create a histogram with buckets from another histogram and expect my data to be counted relative to those buckets.</p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90225512011-07-17T14:04:45-07:002011-07-17T14:04:45-07:00Savitzky–Golay [is now under review]<p>?</p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90225432011-07-17T14:04:08-07:002011-07-17T14:04:08-07:00Savitzky–Golay [updated]<p>?</p><p>Christoph Rüegg said:<br /><div class="ugc"><p>I assume you're referring to Savitzky–Golay smoothing filters, as in <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Savitzky%E2%80%93Golay_smoothing_filter" rel="nofollow" target="_blank">https://secure.wikimedia.org/wikipedia/en/wiki/Savitzky%E2%80%93Golay_smoothing_filter</a></p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90225112011-07-17T14:00:27-07:002011-07-17T14:00:27-07:00Say how to install the DLL and XML files in your download package [is now completed]<p>There are no installation instructions in the downloaded zip file or the chm file within it. What do I use to install the library?</p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/90225092011-07-17T14:00:27-07:002011-07-17T14:00:27-07:00Say how to install the DLL and XML files in your download package [updated]<p>There are no installation instructions in the downloaded zip file or the chm file within it. What do I use to install the library?</p><p>Christoph Rüegg (admin) responded:<br /><div class="ugc"><p>There are NuGet packages available by now that simplify referncing in VS remarkably.</p></div></p>Christoph Rüeggtag:mathnet.uservoice.com,2008-02-07:Event/83813252011-06-14T11:00:32-07:002011-06-14T11:00:32-07:00Savitzky–Golay<p>jbmckim suggested:<br />?</p>jbmckimtag:mathnet.uservoice.com,2008-02-07:Event/82741652011-06-10T09:42:39-07:002011-06-10T09:42:39-07:00Histogram constructor with buckets. Data is applied to the buckets.<p>neosimian suggested:<br />I need to create a histogram with buckets from another histogram and expect my data to be counted relative to those buckets.</p>neosimiantag:mathnet.uservoice.com,2008-02-07:Event/74137092011-05-11T03:18:24-07:002011-05-11T03:18:24-07:00Implement a function minimization algorithm [updated]<p>Tom Robinson said:<br /><div class="ugc"><p>Optimisation methods would be very useful.</p></div></p>Tom Robinsontag:mathnet.uservoice.com,2008-02-07:Event/74135812011-05-11T03:10:05-07:002011-05-11T03:10:05-07:00Implement the Efficient Global Optimisation (EGO) Algorithm for Expensive Black-box functions [updated]<p>Tom Robinson said:<br /><div class="ugc"><p>This is a general stochastic method for finding the global optimum of an unknown function in any number of dimensions. It is most useful for expensive black box functions (i.e. a objective 'function' which takes minutes/hours for a single iteration).</p>
<p>This method has various added benefits. One being: As the optimisation is performed, a response surface is fitted to the unknown function which can be used as a surrogate for future function evaluations. The 'kriging' response model parameterises the unknown functions input variables in terms of output sensitivity and smoothness.</p>
<p>An outline of the original method is described in:</p>
<p>Jones, D., Schonlau, M., and Welch, W., 1998, “Efficient Global Optimization
<br />of Expensive Black-Box Functions,” J. Global Optim., 13*4*, pp. 455–492.</p>
<p>A copy of which can be found via Google search here:</p>
<p><a href="http://www.ressources-actuarielles.net/EXT/ISFA/1226.nsf/9c8e3fd4d8874d60c1257052003eced6/f84f7ac703bf5862c12576d8002f5259/$FILE/Jones98.pdf" rel="nofollow" target="_blank">http://www.ressources-actuarielles.net/EXT/ISFA/1226.nsf/9c8e3fd4d8874d60c1257052003eced6/f84f7ac703bf5862c12576d8002f5259/$FILE/Jones98.pdf</a></p></div></p>Tom Robinsontag:mathnet.uservoice.com,2008-02-07:Event/74132652011-05-11T02:48:29-07:002011-05-11T02:48:29-07:00Implement the Efficient Global Optimisation (EGO) Algorithm for Expensive Black-box functionsTom Robinsontag:mathnet.uservoice.com,2008-02-07:Event/54326952011-02-10T00:38:04-08:002011-02-10T00:38:04-08:00Collection.product<p>dane dang suggested:<br />/// <summary>
/// Returns the cartesian product of the two collections <c>c1</c>
/// and <c>c2</c>.
/// </summary>
/// <param name="c1">Should not be null.</param>
/// <param name="c2">Should not be null.</param>
public static ICollection Product(ICollection c1, ICollection c2)
{
if(c1 == null)
{
throw new ArgumentNullException("c1", string.Format(Resources.ArgumentNull, "c1"));
}
if(c2 == null)
{
throw new ArgumentNullException("c2", string.Format(Resources.ArgumentNull, "c2"));
}
return null;
}</p>dane dangtag:mathnet.uservoice.com,2008-02-07:Event/52065372011-02-01T09:55:43-08:002011-02-01T09:55:43-08:00ODE Solver(RK4 etc.) [updated]<p>Neil Dalchau said:<br /><div class="ugc"><p>I agree with fischi. If the .NET framework is to make inroads into scientific computing, then ODE solvers are mandatory. Having access to ODE solvers in .NET would basically turn me away from Matlab and over to .NET for nearly all of my work.</p></div></p>Neil Dalchautag:mathnet.uservoice.com,2008-02-07:Event/42742592010-12-09T08:06:00-08:002010-12-09T08:06:00-08:00Allow for performing matrix calculations like in Matlabmayerwintag:mathnet.uservoice.com,2008-02-07:Event/40799032010-11-27T04:49:22-08:002010-11-27T04:49:22-08:00ODE Solver(RK4 etc.) [updated]<p>fischi said:<br /><div class="ugc"><p>ODE solvers are one of the most crucial things. Maybe take some from odepack.
<br />Octave also has a very nice set of solvers. (e.g. radau5)</p></div></p>fischitag:mathnet.uservoice.com,2008-02-07:Event/39832052010-11-20T22:46:59-08:002010-11-20T22:46:59-08:00Add primality test<p>Halfdan Faber suggested:<br />Add a fast primality test, for example based on Miller-Rabin or similar efficient method.</p>Halfdan Fabertag:mathnet.uservoice.com,2008-02-07:Event/30230672010-09-23T10:27:36-07:002010-09-23T10:27:36-07:00Implement a peak finding algorithmBTtag:mathnet.uservoice.com,2008-02-07:Event/29207852010-09-15T08:38:52-07:002010-09-15T08:38:52-07:00Add Rotation Matrix and Vector classes for 2D, 3D and generic sized spaces<p>Xeno suggested:<br />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.</p>Xenotag:mathnet.uservoice.com,2008-02-07:Event/28551512010-09-09T03:13:16-07:002010-09-09T03:13:16-07:00Runge–Kutta methods<p>Evgeni Nabokov suggested:<br />http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods</p>Evgeni Nabokovtag:mathnet.uservoice.com,2008-02-07:Event/24605252010-07-26T08:46:23-07:002010-07-26T08:46:23-07:00how to calculate eigenvectors?<p>lehoangthanh suggested:<br />I have this code to calculate eigenvalues/vectors, however, it causes some errors when compiled. How can I solve?
----------------------------------------
using MathNet.Numerics;
using MathNet.Numerics.LinearAlgebra;
class Test
{
static void Main(string[] args)
{
Matrix m = new Matrix(new double[][] {
new double[] { 10.0, -18.0 },
new double[] { 6.0, -11.0 }});
// alternative way to create the matrix:
// double[][] data = Matrix.CreateMatrixData(2, 2);
// data[0][0] = 10.0;
// data[1][0] = 6.0;
// data[0][1] = -18.0;
// data[1][1] = -11.0;
// Matrix m = new Matrix(data);
EigenvalueDecomposition eigen = m.EigenvalueDecomposition;
Complex[] eigenValues = eigen.EigenValues;
// eigenvalues: 1, -2
Matrix eigenVectors = eigen.EigenVectors;
// eigenvectors: [0.894...,0.447...] and [6.708...,4.473...]
// alternative way to access the eigenvalues witout the Complex type:
// double[] eigenValuesReal = eigen.RealEigenvalues; // real part
// double[] eigenValuesImag = eigen.ImagEigenvalues; // imaginary part
}
}
</p>lehoangthanhtag:mathnet.uservoice.com,2008-02-07:Event/24582492010-07-26T02:34:05-07:002010-07-26T02:34:05-07:00Implement a real number type that has a variable base. EG would be using binary, or hexadecimal, etc<p>Akshay K. Ramkumar suggested:<br />Having support for variable bases can result in less computation. Maybe converting to binary or hex for faster computation then moving back? But the support for base variablility would help.</p>Akshay K. Ramkumartag:mathnet.uservoice.com,2008-02-07:Event/23289992010-07-06T03:52:39-07:002010-07-06T03:52:39-07:00Matrix allocation as single array instead of array of arrays [updated]<p>Change matrix (and any other) allocation/member from:
double[][]
to:
double[] OR double[,]
and handle indexing etc internally. Not having matrix data as one continuous memory area is not a good thing for e.g. interop. Additionally, allocation is a lot slower for many rows.</p><p>Greg said:<br /><div class="ugc"><p>I have seen benchmarks that show jagged arrays[][] are faster than block arrays[,]. </p>
<p><a href="http://www.heatonresearch.com/content/choosing-best-c-array-type-matrix-multiplication" rel="nofollow" target="_blank">http://www.heatonresearch.com/content/choosing-best-c-array-type-matrix-multiplication</a></p></div></p>Gregtag:mathnet.uservoice.com,2008-02-07:Event/23289712010-07-06T03:46:11-07:002010-07-06T03:46:11-07:00Implement a function minimization algorithm [updated]<p>Greg said:<br /><div class="ugc"><p>What do you guys think about a Levenberg–Marquardt algorithm? It wouldn't be to hard to port over.</p></div></p>Gregtag:mathnet.uservoice.com,2008-02-07:Event/23270372010-07-05T19:03:23-07:002010-07-05T19:03:23-07:00add function generation for common functions [updated]<p>Add function generations for common functions including number of points, magnitude, and domain.
E.g.
SquareWaveSignalGeneration( Npoints, x1,x2, mag, offset, freq, etc)
GuassianSignalGeneration(...)
ErfSignalGeneration(...)
sineSignalGeneration(...)
TriangleSingalGeneration(...)
SawTooth...
lorentzian
Sync
Etc.....
</p><p>Greg said:<br /><div class="ugc"><p>can implement this myself if you the community will review, add and fix it. I have extensive experience with this kinda thing in matlab and labview, so i could just copy their method signatures.</p></div></p>Gregtag:mathnet.uservoice.com,2008-02-07:Event/23270272010-07-05T19:00:27-07:002010-07-05T19:00:27-07:00add function generation for common functions<p>an anonymous user suggested:<br />Add function generations for common functions including number of points, magnitude, and domain.
E.g.
SquareWaveSignalGeneration( Npoints, x1,x2, mag, offset, freq, etc)
GuassianSignalGeneration(...)
ErfSignalGeneration(...)
sineSignalGeneration(...)
TriangleSingalGeneration(...)
SawTooth...
lorentzian
Sync
Etc.....
</p>anonymoustag:mathnet.uservoice.com,2008-02-07:Event/18168112010-04-20T00:33:48-07:002010-04-20T00:33:48-07:00Implement a function minimization algorithm [updated]<p>marcochiarini said:<br /><div class="ugc"><p>Hi guys! in my opinion efforts should be addressed to the general formulation:</p>
<p>Min f(x)
<br />x</p>
<p>s.t. g(x) <= K</p>
<p>This wold make Math.NET really powerful.</p>
<p>Regards,</p>
<p>Marco
</p></div></p>marcochiarinitag:mathnet.uservoice.com,2008-02-07:Event/17585532010-04-09T05:46:19-07:002010-04-09T05:46:19-07:00Add stochastic processes<p>an anonymous user suggested:<br />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.</p>anonymous