tag:mathnet.uservoice.com,2008-02-07:/forums/general/activity Math.NET Numerics on UserVoice 2011-12-13T11:57:19-08:00 tag:mathnet.uservoice.com,2008-02-07:Event/10393417 2011-12-13T11:57:19-08:00 2011-12-13T11:57:19-08:00 Add 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> Anonymous tag:mathnet.uservoice.com,2008-02-07:Event/10241128 2011-11-16T11:03:08-08:00 2011-11-16T11:03:08-08:00 Clone [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üegg tag:mathnet.uservoice.com,2008-02-07:Event/10240412 2011-11-16T09:16:33-08:00 2011-11-16T09:16:33-08:00 Clone [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üegg tag:mathnet.uservoice.com,2008-02-07:Event/10240303 2011-11-16T08:58:32-08:00 2011-11-16T08:58:32-08:00 Clone [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üegg tag:mathnet.uservoice.com,2008-02-07:Event/10229905 2011-11-14T22:12:04-08:00 2011-11-14T22:12:04-08:00 Clone [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> Lacko tag:mathnet.uservoice.com,2008-02-07:Event/10229108 2011-11-14T17:48:55-08:00 2011-11-14T17:48:55-08:00 Clone [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üegg tag:mathnet.uservoice.com,2008-02-07:Event/10229107 2011-11-14T17:48:55-08:00 2011-11-14T17:48:55-08:00 Clone [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üegg tag:mathnet.uservoice.com,2008-02-07:Event/10225541 2011-11-14T08:12:10-08:00 2011-11-14T08:12:10-08:00 Clone <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> Lacko tag:mathnet.uservoice.com,2008-02-07:Event/10034709 2011-10-18T03:25:18-07:00 2011-10-18T03:25:18-07:00 cache cdf in Categorical distribution function [updated] <p>makro said:<br /><div class="ugc"><p>ok apparantly this class is depracted, sorry.</p></div></p> makro tag:mathnet.uservoice.com,2008-02-07:Event/10034652 2011-10-18T03:09:44-07:00 2011-10-18T03:09:44-07:00 add Empirical distribution function (see wiki) makro tag:mathnet.uservoice.com,2008-02-07:Event/10034616 2011-10-18T03:00:57-07:00 2011-10-18T03:00:57-07:00 cache cdf in Categorical distribution function makro tag:mathnet.uservoice.com,2008-02-07:Event/9848603 2011-09-22T01:51:04-07:00 2011-09-22T01:51:04-07:00 add 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> DP tag:mathnet.uservoice.com,2008-02-07:Event/9848599 2011-09-22T01:50:41-07:00 2011-09-22T01:50:41-07:00 add regression ( linear, parabolic, etc ) <p>DP suggested:<br />Solve for the variables.</p> DP tag:mathnet.uservoice.com,2008-02-07:Event/9022997 2011-07-17T14:32:20-07:00 2011-07-17T14:32:20-07:00 add 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022995 2011-07-17T14:32:20-07:00 2011-07-17T14:32:20-07:00 add 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022963 2011-07-17T14:28:14-07:00 2011-07-17T14:28:14-07:00 add Log Normal distribution [is now completed] Christoph Rüegg tag:mathnet.uservoice.com,2008-02-07:Event/9022961 2011-07-17T14:28:14-07:00 2011-07-17T14:28:14-07:00 add 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022875 2011-07-17T14:20:13-07:00 2011-07-17T14:20:13-07:00 implement 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022727 2011-07-17T14:09:26-07:00 2011-07-17T14:09:26-07:00 Matrix 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022725 2011-07-17T14:09:26-07:00 2011-07-17T14:09:26-07:00 Matrix 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022647 2011-07-17T14:07:45-07:00 2011-07-17T14:07:45-07:00 Reintegrate 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022645 2011-07-17T14:07:45-07:00 2011-07-17T14:07:45-07:00 Reintegrate 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022631 2011-07-17T14:06:58-07:00 2011-07-17T14:06:58-07:00 Add 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022611 2011-07-17T14:06:17-07:00 2011-07-17T14:06:17-07:00 Provide 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022575 2011-07-17T14:05:42-07:00 2011-07-17T14:05:42-07:00 Histogram 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022551 2011-07-17T14:04:45-07:00 2011-07-17T14:04:45-07:00 Savitzky–Golay [is now under review] <p>?</p> Christoph Rüegg tag:mathnet.uservoice.com,2008-02-07:Event/9022543 2011-07-17T14:04:08-07:00 2011-07-17T14:04:08-07:00 Savitzky–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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022511 2011-07-17T14:00:27-07:00 2011-07-17T14:00:27-07:00 Say 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/9022509 2011-07-17T14:00:27-07:00 2011-07-17T14:00:27-07:00 Say 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üegg tag:mathnet.uservoice.com,2008-02-07:Event/8381325 2011-06-14T11:00:32-07:00 2011-06-14T11:00:32-07:00 Savitzky–Golay <p>jbmckim suggested:<br />?</p> jbmckim tag:mathnet.uservoice.com,2008-02-07:Event/8274165 2011-06-10T09:42:39-07:00 2011-06-10T09:42:39-07:00 Histogram 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> neosimian tag:mathnet.uservoice.com,2008-02-07:Event/7413709 2011-05-11T03:18:24-07:00 2011-05-11T03:18:24-07:00 Implement a function minimization algorithm [updated] <p>Tom Robinson said:<br /><div class="ugc"><p>Optimisation methods would be very useful.</p></div></p> Tom Robinson tag:mathnet.uservoice.com,2008-02-07:Event/7413581 2011-05-11T03:10:05-07:00 2011-05-11T03:10:05-07:00 Implement 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 Robinson tag:mathnet.uservoice.com,2008-02-07:Event/7413265 2011-05-11T02:48:29-07:00 2011-05-11T02:48:29-07:00 Implement the Efficient Global Optimisation (EGO) Algorithm for Expensive Black-box functions Tom Robinson tag:mathnet.uservoice.com,2008-02-07:Event/5432695 2011-02-10T00:38:04-08:00 2011-02-10T00:38:04-08:00 Collection.product <p>dane dang suggested:<br />/// &lt;summary&gt; /// Returns the cartesian product of the two collections &lt;c&gt;c1&lt;/c&gt; /// and &lt;c&gt;c2&lt;/c&gt;. /// &lt;/summary&gt; /// &lt;param name=&quot;c1&quot;&gt;Should not be null.&lt;/param&gt; /// &lt;param name=&quot;c2&quot;&gt;Should not be null.&lt;/param&gt; public static ICollection Product(ICollection c1, ICollection c2) { if(c1 == null) { throw new ArgumentNullException(&quot;c1&quot;, string.Format(Resources.ArgumentNull, &quot;c1&quot;)); } if(c2 == null) { throw new ArgumentNullException(&quot;c2&quot;, string.Format(Resources.ArgumentNull, &quot;c2&quot;)); } return null; }</p> dane dang tag:mathnet.uservoice.com,2008-02-07:Event/5206537 2011-02-01T09:55:43-08:00 2011-02-01T09:55:43-08:00 ODE 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 Dalchau tag:mathnet.uservoice.com,2008-02-07:Event/4274259 2010-12-09T08:06:00-08:00 2010-12-09T08:06:00-08:00 Allow for performing matrix calculations like in Matlab mayerwin tag:mathnet.uservoice.com,2008-02-07:Event/4079903 2010-11-27T04:49:22-08:00 2010-11-27T04:49:22-08:00 ODE 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> fischi tag:mathnet.uservoice.com,2008-02-07:Event/3983205 2010-11-20T22:46:59-08:00 2010-11-20T22:46:59-08:00 Add primality test <p>Halfdan Faber suggested:<br />Add a fast primality test, for example based on Miller-Rabin or similar efficient method.</p> Halfdan Faber tag:mathnet.uservoice.com,2008-02-07:Event/3023067 2010-09-23T10:27:36-07:00 2010-09-23T10:27:36-07:00 Implement a peak finding algorithm BT tag:mathnet.uservoice.com,2008-02-07:Event/2920785 2010-09-15T08:38:52-07:00 2010-09-15T08:38:52-07:00 Add 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> Xeno tag:mathnet.uservoice.com,2008-02-07:Event/2855151 2010-09-09T03:13:16-07:00 2010-09-09T03:13:16-07:00 Runge–Kutta methods <p>Evgeni Nabokov suggested:<br />http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods</p> Evgeni Nabokov tag:mathnet.uservoice.com,2008-02-07:Event/2460525 2010-07-26T08:46:23-07:00 2010-07-26T08:46:23-07:00 how 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> lehoangthanh tag:mathnet.uservoice.com,2008-02-07:Event/2458249 2010-07-26T02:34:05-07:00 2010-07-26T02:34:05-07:00 Implement 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. Ramkumar tag:mathnet.uservoice.com,2008-02-07:Event/2328999 2010-07-06T03:52:39-07:00 2010-07-06T03:52:39-07:00 Matrix 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> Greg tag:mathnet.uservoice.com,2008-02-07:Event/2328971 2010-07-06T03:46:11-07:00 2010-07-06T03:46:11-07:00 Implement 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> Greg tag:mathnet.uservoice.com,2008-02-07:Event/2327037 2010-07-05T19:03:23-07:00 2010-07-05T19:03:23-07:00 add 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> Greg tag:mathnet.uservoice.com,2008-02-07:Event/2327027 2010-07-05T19:00:27-07:00 2010-07-05T19:00:27-07:00 add 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> anonymous tag:mathnet.uservoice.com,2008-02-07:Event/1816811 2010-04-20T00:33:48-07:00 2010-04-20T00:33:48-07:00 Implement 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) &lt;= K</p> <p>This wold make Math.NET really powerful.</p> <p>Regards,</p> <p>Marco </p></div></p> marcochiarini tag:mathnet.uservoice.com,2008-02-07:Event/1758553 2010-04-09T05:46:19-07:00 2010-04-09T05:46:19-07:00 Add 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