<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.opensourcedotnet.info/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Math.NET Project News</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/default.aspx</link><description>Current work and news around the Math.NET project. Math.NET is an opensource .NET framework for numeric and symbolic mathematics.</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Revised Interpolation Toolkit in Iridium</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/05/10/IridiumRevisedInterpolationToolkit.aspx</link><pubDate>Sat, 10 May 2008 15:31:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:56132</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=56132</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/05/10/IridiumRevisedInterpolationToolkit.aspx#comments</comments><description>&lt;p&gt;The next release of Math.NT Iridium, Iteration 16, comes with a revised interpolation architecture and implementation.&lt;/p&gt;&lt;p&gt;Up to now, the interpolation classes have been a bit akward to use, partially because of the SampleList collection class you had to use, and because of the design in general. It also provided only two interpolation algorithms, which are both somewhat outdated these days.&lt;/p&gt;&lt;p&gt;The new implementation provides some newer more stable algorithms (like Floater and Hormann&amp;#39;s algorithm for pole-free rational interpolation) together with a cleaner&amp;nbsp; design. Additionally, some of the algoriths can also provide the first and second derivative and in the case of splines even a definite integration. There is also a new facade/portal class that reduces building an interpolation to one simple method call. Usually you would just use this facade class to build/precompute an interpolation, but all the algorithms are also publicly available in the Algorithms-namespace, so if you know what you&amp;#39;re doing you can use them directly.&lt;/p&gt;&lt;p&gt;Sample code, which uses a pole-free rational barycentric interpolation (the default algorithm) with 5 given sample pairs (t, x(t)):&lt;/p&gt;&lt;div style="font-family:courier;"&gt;&lt;p&gt;double[] t = new double[] { -2, -1, 0, 1, 2};&lt;br /&gt;double[] x = new double[] { 1, 2, -1, 0, 1};&lt;br /&gt;&lt;br /&gt;IInterpolationMethod method =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Interpolation.Create(t, x);&lt;br /&gt;&lt;br /&gt;double res = method.Interpolate(0.5);&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Simple, isn&amp;#39;t it?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Unfortunately it was not possible to fit the new design into the old classes, so the new classes and interfaces replace the old classes completely. These old classes are still there for now and continue to work, but they&amp;#39;re marked as obsolete and we recommend strongly to upgrade your code base to the new architecture.&lt;/p&gt;&lt;p&gt;The new architecture has already been checked in to the &lt;a href="http://mathnet.opensourcedotnet.info/Repository.aspx"&gt;source repository&lt;/a&gt;. If you&amp;#39;re interested, please have a look at it and provide feedback - it&amp;#39;s not released yet so we can still change it completely :).  &lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=56132" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Interpolation/default.aspx">Interpolation</category></item><item><title>Iridium 2008 April Release (v2008.4.14.425)</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/04/06/IridiumRelease2008Arpil425.aspx</link><pubDate>Sun, 06 Apr 2008 11:50:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:56124</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=56124</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/04/06/IridiumRelease2008Arpil425.aspx#comments</comments><description>&lt;p&gt;Iteration 14 of Math.NET Iridium (Numerics) is now available, as 2008 April Release with Version 2008.4.14.425. &lt;b&gt;Grab it &lt;a href="http://community.opensourcedotnet.info/files/folders/mathnet/entry56122.aspx"&gt;here&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Sorry for the very short release cycle (just one week after iteration 12). The reason is that I won&amp;#39;t be able to work on Math.NET for the next three weeks and that some of the fixes and changes are important enough to not let you wait three weeks for no reason.&lt;/p&gt;&lt;p&gt;Please continue reporting issues and bugs you find, it&amp;#39;s very useful and helps making the whole project better. There&amp;#39;s also a big chance that the issue will actually be fixed: in the last few releases we always managed to fix all bugs we were aware of at that point. Thanks!&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Team:&lt;/span&gt; Christoph Rüegg, Joannès Vermorel, Matthew Kitchin&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Summary:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Bugs: All known 3 bugs have been fixed.&lt;/li&gt;&lt;li&gt;Better special function precision (Gamma, Beta, Erf, Distributions etc): now up to 12 - 14 digits. &lt;/li&gt;&lt;li&gt;New direct/real gamma function, new harmonic number function.&lt;/li&gt;&lt;li&gt;Interpolation: usability enhancements (better double-array support, less user code) &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;New Features:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;IRID-122: Core - New direct Gamma function (additional to GammaLn) with negative value support&lt;/li&gt;&lt;li&gt;IRID-123: Core - New Special Function: Harmonic Numbers&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-weight:bold;"&gt;Enhancements:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;IRID-121: Core - Better numerical precision for Gamma function&lt;/li&gt;&lt;li&gt;IRID-125: Interpolation - Additional interpolation and sample list constructors for double arrays.&lt;/li&gt;&lt;li&gt;IRID-126: Interpolation - Better interpolation order access and defaults&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-weight:bold;"&gt;Fixed Bugs:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;IRID-119: Interpolation - Polynomial Extrapolation in positive direction throws IndexOutOfRangeException&lt;/li&gt;&lt;li&gt;IRID-120: Linear Algebra - Infinite recursion&lt;/li&gt;&lt;li&gt;IRID-124: Linear Algebra - Matrix.CopyToArray - wrong indexer in inner loop condition.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For more details have a look at the &lt;a href="http://tracker.opensourcedotnet.info/Default.aspx?IRID=ChangeLog"&gt;Iridium tracker change log&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=56124" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Download/default.aspx">Download</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Neodym/default.aspx">Neodym</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Release/default.aspx">Release</category></item><item><title>Iridium 2008 March Release (v2008.3.12.405)</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/03/31/IridiumRelease2008March405.aspx</link><pubDate>Mon, 31 Mar 2008 09:41:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:56107</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=56107</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/03/31/IridiumRelease2008March405.aspx#comments</comments><description>&lt;p&gt;Iteration 12 of Math.NET Iridium (Numerics) is now available, as 2008 March Release with Version 2008.3.12.405. &lt;b&gt;Grab it &lt;a href="http://community.opensourcedotnet.info/files/folders/mathnet/entry56105.aspx"&gt;here&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Team:&lt;/span&gt; Christoph Rüegg, Joannès Vermorel, Matthew Kitchin&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;New Contributions:&lt;/span&gt; Mike Shugai&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Summary:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Bugs:&lt;/b&gt; All know&lt;a href="http://tracker.opensourcedotnet.info/Default.aspx?IRID=ChangeLog"&gt;&lt;/a&gt; 3 bugs have been fixed.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Linear Algera:&lt;/b&gt; Matrix Kronecker product, new Vector class, performance work (caching).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Core&lt;/b&gt;&lt;b&gt;:&lt;/b&gt; New Sinc function, Neper/Decibel ratio routines.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Probability Distributions&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;
New distributions: Student&amp;#39;s T-Distribution, F-Distribution, Skew-Alpha Stable Distribution. &lt;/li&gt;&lt;li&gt;Assemblies no longer signed with a certificate (because verification caused network access).&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;New Features:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;IRID-113: Core - Neper and Decibel Helper and Factors&lt;/li&gt;&lt;li&gt;IRID-116: Core - Sinc Function&lt;/li&gt;&lt;li&gt;IRID-111: Linear Algebra - Matrix Kronecker Tensor Product&lt;/li&gt;&lt;li&gt;RID-59: Linear Algebra - New Vector class (related to the Matrix class)&lt;/li&gt;&lt;li&gt;IRID-99: Probability Distributions - New Distribution: Skew Alpha Stable Distribution&lt;/li&gt;&lt;li&gt;IRID-108: Probability Distributions - New Distribution: F-Distribution&lt;/li&gt;&lt;li&gt;IRID-109: Probability Distributions - New Distribution: Student&amp;#39;s-T&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-weight:bold;"&gt;Enhancements:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;IRID-106: Linear Algebra - Cache for on-demand computations (like decompositions)&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-weight:bold;"&gt;Fixed Bugs:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;IRID-107: Core - Complex: Unexpected power behavior at zero&lt;/li&gt;&lt;li&gt;IRID-97: Linear Algebra - Matrix.Identity allocation bug in non-square cases&lt;/li&gt;&lt;li&gt;IRID-98: Probability Distributions - ArbitraryDistribution NextInt32 does not consider offset.&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-weight:bold;"&gt;Other:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;IRID-110: Remove Certificate Signing (cert validation causes network access)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For more details have a look at the &lt;a href="http://tracker.opensourcedotnet.info/Default.aspx?IRID=ChangeLog"&gt;Iridium tracker change log&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=56107" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Download/default.aspx">Download</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Neodym/default.aspx">Neodym</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Release/default.aspx">Release</category></item><item><title>Math.NET Tightened Security - working fine for you?</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/02/09/MathNetTightenedSecurity.aspx</link><pubDate>Sat, 09 Feb 2008 11:57:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:56052</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=56052</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/02/09/MathNetTightenedSecurity.aspx#comments</comments><description>&lt;p&gt;Since the &lt;a href="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/02/03/IridiumRelease2008February364.aspx"&gt;February 2008 Release&lt;/a&gt;, Math.NET Iridium and Neodym both adapted a new security model: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Strong Name:&lt;/b&gt; The official assemblies are now strong named. This means that you can put them into the global assembly cache, configure .NET code access policies, and prevent anyone from injecting bad code into the assembly or replace it completely.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Delayed and Test Signing: &lt;/b&gt;Other than other opensource projects we don&amp;#39;t make the private key of our strong name signing key publicly available. Instead we use delay and test signing for everyone who develops directly from the source code repository: the assemblies are delay signed with the official public key, but then are test-signed with individual keys you can easily create and register yourself (by running a batch file). If you have concerns about relaying on strong named assemblies where you don&amp;#39;t have access to the private key, simply re-sign the assembly with your own key pair of choice...&lt;/li&gt;&lt;li&gt;&lt;b&gt;Code Access Security:&lt;/b&gt; The assemblies don&amp;#39;t run as full-trust anymore but instead are locked down and refuse nearly all system-provided permissions including any file I/O, network access, reflection and unmanaged code. With this we guarantee that we don&amp;#39;t do anything bad on your system and that nobody can misuse the library to do bad things through this library. That&amp;#39;s why we now also &lt;b&gt;allow partially trusted callers&lt;/b&gt; - i.e. you can use the library even from a network share or directly from the internet, or from assemblies the user doesn&amp;#39;t need trust fully.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Signed with a certificate:&lt;/b&gt; All the official assemblies are now also signed with a certificate to certify authenticy. However, this has no effect on using the library in your own project, and the root certificate used to create the code signing certificate is not generally known (and of course not distributed with Microsoft Windows).&lt;/li&gt;&lt;/ul&gt;This tightened security aspects might also have effects on your code. Please let me know if you have an issue with these changes, if it breaks your code, makes it much slower or whatever. Thanks.&lt;br /&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=56052" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Neodym/default.aspx">Neodym</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Security/default.aspx">Security</category></item><item><title>Iridium 2008 February Release (v2008.2.10.364)</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/02/03/IridiumRelease2008February364.aspx</link><pubDate>Sun, 03 Feb 2008 11:39:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:56040</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=56040</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2008/02/03/IridiumRelease2008February364.aspx#comments</comments><description>&lt;p&gt;Iteration 10 of Math.NET Iridium (Numeric) is now available, as 2008 February Release with Version 2008.2.10.364. &lt;b&gt;Grab it &lt;a href="http://community.opensourcedotnet.info/files/folders/mathnet/entry56036.aspx"&gt;here&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;This is mostly a service release:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Bugs:&lt;/b&gt; All known &lt;a href="http://tracker.opensourcedotnet.info/Default.aspx?IRID=ChangeLog"&gt;8 bugs&lt;/a&gt; have been fixed.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Performance:&lt;/b&gt; The linear algebra implementation has ben optimized, resulting in &lt;a href="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/10/14/IridiumMatrixPerformanceImprovement.aspx"&gt;nearly 50% perf gain&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Api References:&lt;/b&gt; Inline Xml Documentation has been improved (but is still far from where we&amp;#39;d like it to be).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Security:&lt;/b&gt; The released binaries now have a strong name, are locked down with code access security and allow partial trusted callers. We now use test-signing internally. Also, the official assemblies are now signed with a certificate. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Build/Release Integration:&lt;/b&gt; We now moved completely to custom msbuild targets, releases are now fully automated (incl. documentation generation) and the continuous integration system has been upgraded. Since releasing is now much easier, you can expect new releases more often.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For the complete list of changes have a look at the &lt;a href="http://tracker.opensourcedotnet.info/Default.aspx?IRID=ChangeLog"&gt;Iridium tracker change log&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;At the same time I also released a first version of Math.NET Neodym (Signal Processing), Iteration 2 what makes it Version 2008.2.2.364. Grab it &lt;a href="http://community.opensourcedotnet.info/files/folders/mathnet/entry56035.aspx"&gt;here&lt;/a&gt;. Hopefully I&amp;#39;ll have more time in the future to work on Neodym... &lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=56040" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Download/default.aspx">Download</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Neodym/default.aspx">Neodym</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Release/default.aspx">Release</category></item><item><title>Matrix data structure optimization: Nearly 50% perf gain</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/10/14/IridiumMatrixPerformanceImprovement.aspx</link><pubDate>Sun, 14 Oct 2007 19:28:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:55864</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=55864</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/10/14/IridiumMatrixPerformanceImprovement.aspx#comments</comments><description>&lt;p&gt;Some time ago I did some very basic &lt;a class="" href="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/04/15/Iridium-Performance-Analysis.aspx"&gt;performance analysis of solving linear equation systems&lt;/a&gt; with Iridium. Since then we decided to rewrite the Matrix class to use jagged arrays instead of rectangular ones, see &lt;a class="" href="http://community.opensourcedotnet.info/forums/t/384.aspx"&gt;this forum discussion&lt;/a&gt;. There already was a discussion about that issue some long time ago, but at that time we decided to go for the more clean and safe way of rectangular arrays. Unfortunately the C# compiler today still can&amp;#39;t optimize loops on rectangular arrays as good as loops on jagged arrays. So we finally moved forward to jagged arrays, and indeed, we got a performance improvement (solving a linear equation system) by nearly 50%.&lt;/p&gt;
&lt;p&gt;Unfortunately, the change of the data structure comes at a cost: The semantics of the two following members changes, as they now do deep-copies instead of using the data structure directly as internal data structure. Have a look at the mentioned forum discussion on why this might be an issue.&lt;/p&gt;
&lt;p&gt;public Matrix(double[,] A)&lt;br /&gt;public static implicit operator double[,] (Matrix m)&lt;/p&gt;
&lt;p&gt;If you want to avoid deep-copying, e.g. for performance reasons, then use double[][] instead of double[,] to fill the matrix.&lt;/p&gt;
&lt;p&gt;The changes are already submitted to the &lt;a class="" href="http://mathnet.opensourcedotnet.info/Repository.aspx"&gt;subversion repository&lt;/a&gt;, and will be included in the next &lt;a class="" href="http://mathnet.opensourcedotnet.info/doc/Releases.ashx"&gt;iridium release&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=55864" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Linear+Algebra/default.aspx">Linear Algebra</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Math.NET Iridium on Linux and Mono</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/08/19/MathNetOnMonoLinux.aspx</link><pubDate>Sun, 19 Aug 2007 16:43:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:55821</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=55821</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/08/19/MathNetOnMonoLinux.aspx#comments</comments><description>&lt;p&gt;One of the principles of the Math.NET Iridium numerics library is to not depend on special hardware or some external super-optimized library, but just on the core .Net Framework 2.0. Thanks to this, Iridium also works with Mono on Linux with no special treatment - just add a reference to the assembly in MonoDevelop and start coding...&lt;/p&gt;&lt;p&gt;Apparently some users are not used to reference .Net assemblies on Mono yet, so I&amp;#39;ve created some screen shots showing how to add such a reference step-by-step in MonoDevelop on Ubuntu Linux:&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;a href="http://mathnet.opensourcedotnet.info/doc/MathNetOnMonoLinux.ashx"&gt;Math.NET on Mono (and Linux)&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=55821" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Wiki/default.aspx">Wiki</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Mono/default.aspx">Mono</category></item><item><title>Iridium Performance Analysis</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/04/15/Iridium-Performance-Analysis.aspx</link><pubDate>Sun, 15 Apr 2007 00:30:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:55692</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=55692</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/04/15/Iridium-Performance-Analysis.aspx#comments</comments><description>
&lt;p&gt;I started performing some very basic performance analysis of interesting parts of the Math.NET Iridium (Numerics) Library, motivated by a &lt;a href="http://dev.cdrnet.net/cs/forums/thread/55654.aspx"&gt;forum post&lt;/a&gt;.&lt;/p&gt;
 &lt;h4&gt;Machine Configuration&lt;/h4&gt; 
&lt;p&gt;I tested it on the following computers:&lt;/p&gt;
 
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Desktop, Intel &lt;strong&gt;P4, 3.4 GHz&lt;/strong&gt;, XP SP2&lt;br /&gt;
&lt;strong&gt;B&lt;/strong&gt;: Notebook, Intel &lt;strong&gt;Core 2 Duo, 2 GHz&lt;/strong&gt;, XP MCE SP2&lt;br /&gt;&lt;strong&gt;C&lt;/strong&gt;: Desktop, Intel &lt;strong&gt;Core 2 Duo, 2.&lt;em&gt;??&lt;/em&gt; GHz&lt;/strong&gt;, XP SP2&lt;br /&gt;&lt;/p&gt;
 
&lt;p&gt;On both machines there are lots of other processes running, hence I start the&amp;nbsp;app with high priority.&amp;nbsp;&lt;/p&gt;
 

 &lt;h4&gt;Test Strategy&lt;/h4&gt; 
&lt;p&gt;Quite simple (for a start): I run different problem sets. For each set I first run it two times (warm up, to let the JIT compiler do its work), then start a timer/stopwatch, run it five times, stop the timer and divide the resulting time span through five, to get an average.&lt;/p&gt;
 &lt;h4&gt;Case 1: Fourier Transform&lt;br /&gt;
&lt;/h4&gt; 
&lt;p&gt;I tested the forward fourier transform on a real sample set of doubles with seven different sample set lengths:&lt;/p&gt;
 
&lt;table&gt;  
&lt;tr&gt; 
&lt;td&gt;Set Length:&lt;/td&gt;
 
&lt;td&gt;A:&lt;/td&gt;
 
&lt;td&gt;B:&lt;/td&gt;
 
&lt;td&gt;C:&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt; 
&lt;td&gt;1024&lt;/td&gt;
 
&lt;td&gt;0 ms&lt;/td&gt;
 
&lt;td&gt;0 ms&lt;/td&gt;

&lt;td&gt;0 ms&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt; 
&lt;td&gt;4096&lt;/td&gt;
 
&lt;td&gt;0 ms&lt;/td&gt;
 
&lt;td&gt;0 ms&lt;/td&gt;

&lt;td&gt;0 ms&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt; 
&lt;td&gt;16384&lt;/td&gt;
 
&lt;td&gt;1 ms&lt;/td&gt;
 
&lt;td&gt;1 ms&lt;/td&gt;

&lt;td&gt;1 ms&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt; 
&lt;td&gt;65536&lt;/td&gt;
 
&lt;td&gt;6 ms&lt;/td&gt;
 
&lt;td&gt;5 ms&lt;/td&gt;

&lt;td&gt;5 ms&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt; 
&lt;td&gt;262144&lt;/td&gt;
 
&lt;td&gt;33 ms&lt;/td&gt;
 
&lt;td&gt;&lt;font color="#008000"&gt;28 ms&lt;/font&gt;&lt;/td&gt;

&lt;td&gt;30 ms&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt; 
&lt;td&gt;1048576&lt;/td&gt;
 
&lt;td&gt;&lt;font color="#008000"&gt;503 ms&lt;/font&gt;&lt;/td&gt;
 
&lt;td&gt;578 ms&lt;/td&gt;

&lt;td&gt;507 ms&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt; 
&lt;td&gt;2097152&lt;/td&gt;
 
&lt;td&gt;1339 ms&lt;/td&gt;
 
&lt;td&gt;1375 ms&lt;/td&gt;

&lt;td&gt;&lt;font color="#008000"&gt;1032 ms&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
 
&lt;p&gt;Note that on B and C the algorithm only used one of the two cores. Looks like we need to tweak that a bit, since multi-core CPUs are standard these days.&lt;br /&gt;
&lt;/p&gt;
 &lt;h4&gt;Case 2: Solving a linear equation system&lt;/h4&gt; 
&lt;p&gt;I tested solving a square real&amp;nbsp;linear equation system. Internally the LU decomposition algorithm&amp;nbsp;is used for such square systems. A Size of 1000x1000 means that we solve for 1000 unknowns:&lt;/p&gt;
 
&lt;table&gt;  
&lt;tr&gt; 
&lt;td&gt;Unknowns:&lt;/td&gt;

&lt;td&gt;Matrix Elements:&lt;/td&gt;

&lt;td&gt;A:&lt;/td&gt;

&lt;td&gt;B:&lt;/td&gt;

&lt;td&gt;C:&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt; 
&lt;td&gt;100&lt;/td&gt;

&lt;td&gt;10000&lt;/td&gt;

&lt;td&gt;2&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;2&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;2&amp;nbsp;ms&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt; 
&lt;td&gt;200&lt;/td&gt;

&lt;td&gt;40000&lt;/td&gt;

&lt;td&gt;18&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;18&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;&lt;font color="#008000"&gt;17&amp;nbsp;ms&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt; 
&lt;td&gt;400&lt;/td&gt;

&lt;td&gt;160000&lt;/td&gt;

&lt;td&gt;129&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;129&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;&lt;font color="#008000"&gt;121&amp;nbsp;ms&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt; 
&lt;td&gt;600&lt;/td&gt;

&lt;td&gt;360000&lt;/td&gt;

&lt;td&gt;415&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;418&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;&lt;font color="#008000"&gt;396&amp;nbsp;ms&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt; 
&lt;td&gt;800&lt;/td&gt;

&lt;td&gt;640000&lt;/td&gt;

&lt;td&gt;1056&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;&lt;font color="#008000"&gt;968&amp;nbsp;ms&lt;/font&gt;&lt;/td&gt;

&lt;td&gt;981&amp;nbsp;ms&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt; 
&lt;td&gt;1000&lt;/td&gt;

&lt;td&gt;1000000&lt;/td&gt;

&lt;td&gt;2041&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;1911&amp;nbsp;ms&lt;/td&gt;

&lt;td&gt;&lt;font color="#008000"&gt;1901&amp;nbsp;ms&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
 
&lt;p&gt;Again only one of the two cores on machine B and C was used.&lt;/p&gt;
 &lt;h4&gt;Conclusion&lt;/h4&gt; 
&lt;p&gt;I think the performance is quite acceptable for now. Of course it&amp;#39;s&amp;nbsp;far away from high performance libraries like the Intel MKL (blas, lapack etc. which&amp;nbsp;take advantage of all specialized features of&amp;nbsp;Intel CPUs), but in the end we target another kind of developer/application anyway. &amp;nbsp;If you really want to get all out of your machine, you&amp;#39;ll hardly do that in a managed programming environment like .Net. What we offer instead is a very&amp;nbsp;easy to use infrastructure that is completely managed (no unsafe wrapper), and that runs on any platform that runs .Net (including your PDA) and that is still fast enough for most cases.&lt;br /&gt;
&lt;/p&gt;
 
&lt;p&gt;After all, only 0.006 seconds for a Fourier transform of 65536 samples is not that bad, neither is 0.018 seconds to solve a linear equation system with 200 unknowns.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update: Added Machine C. The differences between the measured values on A,B and C don&amp;#39;t make much sense, I think I need a better testbed and a larger sample size. Or there are simply other factors that play an important role (e.g. memory alignment -&amp;gt; cache behavior).&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=55692" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Forum/default.aspx">Forum</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Interface/default.aspx">Interface</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/FFT/default.aspx">FFT</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Linear+Algebra/default.aspx">Linear Algebra</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Iridium Class Reference</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/04/06/Iridium-Class-Reference.aspx</link><pubDate>Fri, 06 Apr 2007 13:05:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:55688</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=55688</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/04/06/Iridium-Class-Reference.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve finally tried &lt;a href="http://www.sandcastledocs.com/"&gt;Sandcastle&lt;/a&gt; to automatically generate class references from the inline xml comments, as a replacement for the discontinued NDoc. The result for Math.NET Iridium is now available for &lt;a href="http://dev.cdrnet.net/cs/files/folders/mathnet/entry55686.aspx"&gt;download&lt;/a&gt;&amp;nbsp;(in both HtmlHelp &lt;em&gt;CHM&lt;/em&gt; and Ms Help 2 &lt;em&gt;HxS&lt;/em&gt; format). Please note that because NDoc wasn&amp;#39;t working anymore, inline XML documentation wasn&amp;#39;t a top priority for the last years. I didn&amp;#39;t have time to fix it yet, but thought it probably still helps more than none and thus made it available for download. I plan to provide such references for all future Iridium releases and expect its quality to improve clearly in the next release.&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=55688" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Download/default.aspx">Download</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Release/default.aspx">Release</category></item><item><title>Yttrium Diagramming</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/03/30/Yttrium-Diagramming.aspx</link><pubDate>Fri, 30 Mar 2007 13:44:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:55653</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=55653</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/03/30/Yttrium-Diagramming.aspx#comments</comments><description>&lt;p&gt;There was quite a huge check-in lately on the &lt;a href="http://mathnet.opensourcedotnet.info/"&gt;yttrium&lt;/a&gt; &lt;a href="http://mathnet.opensourcedotnet.info/Repository.aspx"&gt;source code repository&lt;/a&gt;. I&amp;#39;ve been refactoring the yttrium code base to a new microkernel based architecture (motivation: getting rid of cyclic dependencies and the high degree of complexity). The most striking change is the number of assemblies: Instead of a single dll the project is now split in &lt;a href="http://mathnet.opensourcedotnet.info/doc/YttriumModules.ashx"&gt;multiple modules &amp;amp; services&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I&amp;#39;m also working on the diagramming frontend &lt;em&gt;Whiteboard&lt;/em&gt;&amp;nbsp;again. As you may have noticed, &lt;a href="http://www.orbifold.net/default/"&gt;Fran&amp;ccedil;ois&lt;/a&gt; is back working on Diagramming.&amp;nbsp;Although he&amp;#39;s finally moved forward towards WPF/.NET3 with his new &lt;a href="http://www.orbifold.net/unfold/"&gt;Unfold project&lt;/a&gt;, he also released the older GDI+/.NET2 based &lt;a href="http://www.orbifold.net/netron/"&gt;Netron 3&lt;/a&gt; code &lt;a href="http://www.orbifold.net/default/?p=690"&gt;to the public&lt;/a&gt; (GPL; thanks, Fran&amp;ccedil;ois!). I&amp;#39;m currently porting Whiteboard to the newly refactored yttrium codebase and extending the Netron code to better match the yttrium model. It looks great so far, keep in touch. Btw, I also include adjusted shapes for the new &lt;a href="http://mathnet.opensourcedotnet.info/doc/YttriumPetriNetPackage.ashx"&gt;PetriNet demo package&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=55653" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Wiki/default.aspx">Wiki</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Repository/default.aspx">Repository</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Yttrium/default.aspx">Yttrium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category></item><item><title>Iridium Release 8: 2007 March (v2007.3.8)</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/03/14/Iridium-Release8-2007-March-v2007-3-8.aspx</link><pubDate>Wed, 14 Mar 2007 21:47:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:55606</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=55606</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/03/14/Iridium-Release8-2007-March-v2007-3-8.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve just released a new version of the C# Math.NET Numerics&amp;nbsp;toolkit&amp;nbsp;&lt;strong&gt;Iridium&lt;/strong&gt;, &lt;strong&gt;v2007.3.8&lt;/strong&gt;. Grab it &lt;a href="http://dev.cdrnet.net/cs/files/folders/mathnet/entry55605.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;What&amp;#39;s new in this release? &lt;/p&gt;&lt;ul&gt; &lt;li&gt;Completely revised FFT implementation  &lt;/li&gt;&lt;li&gt;Integration of the Torschutz Random Library, revised and extended with pdf/cdf functions. &lt;/li&gt;&lt;li&gt;Various minor enhancements and fixes&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I allowed myself to include some breaking changes; you&amp;#39;ll have to update your code if you&amp;#39;re working with either FFT transformations or with probability distributions and random generators. Nevertheless, I still recommend to upgrade, as I don&amp;#39;t expect breaking changes in this extent (if any)&amp;nbsp;in the next few releases. &lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=55606" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Download/default.aspx">Download</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/FFT/default.aspx">FFT</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Release/default.aspx">Release</category></item><item><title>Revised FFT Core for Iridium</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/02/28/Revised-FFT-Core-for-Iridium.aspx</link><pubDate>Tue, 27 Feb 2007 23:41:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:55590</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=55590</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2007/02/28/Revised-FFT-Core-for-Iridium.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m currently working on the Iridium (Math.NET Numerics) Fast Fourier Transformation Implementation, to finally fix &lt;a href="http://tracker.opensourcedotnet.info/Default.aspx?p=2&amp;amp;i=33"&gt;known bugs&lt;/a&gt; and&amp;nbsp;improve its usability (make it easier to work with). I expect a new Iridium release this week.&lt;/p&gt; &lt;p&gt;What&amp;#39;s new:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Unit Tests&lt;/strong&gt;: The code base is now tested (including &lt;strong&gt;MATLAB consistency&lt;/strong&gt; and symmetry preservation).&lt;/li&gt; &lt;li&gt;Completely redesigned backend (e.g. removed the previous inheritance scheme).&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Better support for real transformations&lt;/strong&gt;. New member design, also for complex transformations.&lt;/li&gt; &lt;li&gt;Optional &lt;strong&gt;Conventions&lt;/strong&gt; parameter. Controls scaling and integrand exponent behavior, e.g. to behave like Maple (symmetric scaling), MATLAB (asymmetric scaling) or Numeric Recipes (asymmetric scaling&amp;nbsp;&amp;amp; inverse exponent sign).&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Stateless&lt;/strong&gt;* instead of stateful classes. You don&amp;#39;t have to pass over the data on the constructor anymore, but as method parameters instead.&lt;br /&gt;&lt;em&gt;*except the precomputation cache. However, the classes are not static so you can get rid of the cache if you don&amp;#39;t need it anymore.&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The bad news: You&amp;#39;ll have to slightly adapt your code if you work with Iridium&amp;#39;s FFT implementation. However, the code will only become simpler...&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=55590" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/FFT/default.aspx">FFT</category></item><item><title>PowerShell for Math.NET</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2006/09/23/PowerShell-for-Math.NET.aspx</link><pubDate>Sat, 23 Sep 2006 10:40:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:4303</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=4303</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2006/09/23/PowerShell-for-Math.NET.aspx#comments</comments><description>&lt;p&gt;I think it would be really interesting to propagate the new MS PowerShell as a new interface for Math.NET, especially for the Yttrium project. Yttrium already provides very simple script support, but PowerShell has so much more to offer. I think about writing some PowerShell cmdlets and functions, and maybe a provider for yttrium systems, and make this the foundation of any future interactive interfaces.&lt;/p&gt; &lt;p&gt;Let me know what you think about this approach!&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=4303" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Yttrium/default.aspx">Yttrium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Scripting/default.aspx">Scripting</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Interface/default.aspx">Interface</category></item><item><title>Handling Floating Point Numbers</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2006/08/16/Handling-Floating-Point-Numbers.aspx</link><pubDate>Wed, 16 Aug 2006 21:23:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:1166</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=1166</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2006/08/16/Handling-Floating-Point-Numbers.aspx#comments</comments><description>&lt;p&gt;Did you know, that:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;a double can represent 0xFF&lt;strong&gt;&lt;font color="#ff0000"&gt;D&lt;/font&gt;&lt;/strong&gt;FFFFFFFFFFFFF = 18437736874454810623 distinct numbers?  &lt;/li&gt;&lt;li&gt;there are 450359962736 doubles between 1.0001 and 1.0002?  &lt;/li&gt;&lt;li&gt;54975581 between 10&amp;#39;000.0001 and 10&amp;#39;000.0002?  &lt;/li&gt;&lt;li&gt;52 between 10&amp;#39;000&amp;#39;000&amp;#39;000.0001 and&amp;nbsp;10&amp;#39;000&amp;#39;000&amp;#39;000.0002?  &lt;/li&gt;&lt;li&gt;the smallest difference between neighbor numbers is 4.941E&lt;strong&gt;&lt;font color="#ff0000"&gt;-&lt;/font&gt;&lt;/strong&gt;324 for 0, and the biggest difference 1.996E&lt;strong&gt;&lt;font color="#ff0000"&gt;+&lt;/font&gt;&lt;/strong&gt;292 for double.MaxValue?  &lt;/li&gt;&lt;li&gt;the difference between 1.0 and the&amp;nbsp;biggest number&amp;nbsp;smaller than 1.0 is 1.110E-16&lt;br /&gt;(this value is often called negative epsilon (*2 = the (positive) epsilon)&amp;nbsp;, &lt;strong&gt;but not in .Net!&lt;/strong&gt; In the framework, double.Epsilon&amp;nbsp;is defined as&amp;nbsp;4.941E-324, the number from above!)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;It&amp;#39;s common knowledge that floating point numbers are somewhat tricky to work with,&amp;nbsp;especially if rounding-off errors and exact values become important. Although this is (hopefully) discussed in any computer science and engineering study course, there&amp;nbsp;has been&amp;nbsp;quite some blogging about it lately:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://wesnerm.blogs.com/net_undocumented/2006/08/floatingpointin.html"&gt;Floating-Point Numbers&lt;/a&gt;&amp;nbsp;(Wesner Moise)  &lt;/li&gt;&lt;li&gt;&lt;a href="http://wesnerm.blogs.com/net_undocumented/2006/06/999_1.html"&gt;.999... = 1&lt;/a&gt; (Wesner Moise)  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.regdeveloper.co.uk/2006/08/12/floating_point_approximation/"&gt;The trouble with rounding floating point numbers&lt;/a&gt; (Dan Clarke)  &lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/kathykam/archive/2006/05/08/592888.aspx"&gt;Quiz of the Month: Double Trouble&lt;/a&gt; (Kathy Kam)  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/WhyYouCantDoubleParseDoubleMaxValueToStringOrSystemOverloadExceptionsWhenUsingDoubleParse.aspx"&gt;Why you can&amp;#39;t Double.Parse(double.MaxValue.ToStr...&lt;/a&gt; (Scott Hanselman)  &lt;/li&gt;&lt;li&gt;&lt;a href="http://wesnerm.blogs.com/net_undocumented/2005/01/floating_point_.html"&gt;Floating Point Arithmetic&lt;/a&gt; (Wesner Moise)  &lt;/li&gt;&lt;li&gt;&lt;a href="http://wesnerm.blogs.com/net_undocumented/2005/01/numbers_in_net.html"&gt;Numbers in .NET&lt;/a&gt; (Wesner Moise)  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.yoda.arachsys.com/csharp/floatingpoint.html"&gt;Binary floating point and .NET&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm"&gt;&lt;strong&gt;Comparing floating point numbers&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; (Bruce Dawson)&lt;/strong&gt;  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.physics.ohio-state.edu/~dws/grouplinks/floating_point_math.pdf"&gt;&amp;quot;What Every Computer Scientist Should Know About Floating-Point Arithmetic&amp;quot;&lt;/a&gt; (PDF)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;One of the conclusions is that &lt;strong&gt;it&amp;#39;s dangerous to compare floating point numbers directly&lt;/strong&gt;. Of course this is a problem in Math.NET Iridium, so I tried to add some helper functions to Iridium for handling double numbers. You&amp;#39;ll find them in the new static&amp;nbsp;&lt;em&gt;Number&lt;/em&gt; class directly in the &lt;em&gt;MathNet.Numerics&lt;/em&gt; namespace. The most important function, AlmostEquals, is inspired by Bruce Dawson&amp;#39;s article (see above). They&amp;#39;re propositions, so please let me know if you&amp;nbsp;think they&amp;#39;re flawed...&lt;/p&gt; &lt;h1&gt;Integer Representation of Doubles&lt;/h1&gt; &lt;p&gt;In order to work with doubles in an exact way, we have to treat them as integers. We can convert them either by doing some unsafe pointer casting, by emulating a union (&lt;em&gt;StructLayout&lt;/em&gt; and &lt;em&gt;FieldOffset&lt;/em&gt; attributes), or simply by using the &lt;em&gt;BitConverter&lt;/em&gt; (which uses the first pointer approach internally; System.Runtime.InteropServices namespace).&lt;/p&gt; &lt;p&gt;Unfortunately, floating point numbers&amp;nbsp;are&amp;nbsp;stored as&amp;nbsp;&lt;em&gt;signed magnitudes&lt;/em&gt;, while integers use the &lt;em&gt;two&amp;#39;s complement&lt;/em&gt; to&amp;nbsp;represent negative numbers.&amp;nbsp;We thus have to convert negative numbers if we need&amp;nbsp;them&amp;nbsp;to be&amp;nbsp;lexicographically ordered (such that the distance from 0 to 1 equals to the distance from -1 to 0, and that -0&amp;nbsp;=&amp;nbsp;+0):&lt;/p&gt;&lt;pre&gt;public static long SignedMagnitudeToTwosComplementInt64(long value)&lt;br /&gt;{&lt;br /&gt;  return (value &amp;gt;= 0) ? value : (long)(0x8000000000000000 - (ulong)value);&lt;br /&gt;}&lt;/pre&gt;&lt;pre&gt;public static ulong ToLexicographicalOrderedUInt64(double value)&lt;br /&gt;{&lt;br /&gt;  long signed64 = BitConverter.DoubleToInt64Bits(value);&lt;br /&gt;  ulong unsigned64 = (ulong)signed64;&lt;br /&gt;  return (signed64 &amp;gt;= 0) ? unsigned64 : 0x8000000000000000 - unsigned64;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;The expected behavior (excerpt from the unit tests):&lt;/p&gt;&lt;pre&gt;ToLexicographicalOrderedUInt64(2 * double.Epsilon) == 2&lt;br /&gt;ToLexicographicalOrderedUInt64(1 * double.Epsilon) == 1&lt;br /&gt;ToLexicographicalOrderedUInt64(0.0) == 0&lt;br /&gt;ToLexicographicalOrderedUInt64(-1 * double.Epsilon) == 0xFFFFFFFFFFFFFFFF&lt;br /&gt;&lt;br /&gt;SignedMagnitudeToTwosComplementInt64(1) == 1&lt;br /&gt;SignedMagnitudeToTwosComplementInt64(0) == 0&lt;br /&gt;SignedMagnitudeToTwosComplementInt64(-9223372036854775808) == 0&lt;br /&gt;SignedMagnitudeToTwosComplementInt64(-9223372036854775808 + 1) == -1&lt;/pre&gt;
&lt;h1&gt;Incrementing Doubles&lt;/h1&gt;
&lt;p&gt;Thanks to this two&amp;#39;s complement integer representation we immediately have the power to increment or decrement floating point numbers, and iterate through all numbers&amp;nbsp;a double can represent&amp;nbsp;in a given range:&lt;/p&gt;&lt;pre&gt;public static double Increment(double value)&lt;br /&gt;{&lt;br /&gt;  if(double.IsInfinity(value) || double.IsNaN(value))&lt;br /&gt;    return value;&lt;br /&gt;&lt;br /&gt;  long signed64 = BitConverter.DoubleToInt64Bits(value);&lt;br /&gt;  if(signed64 &amp;lt; 0)&lt;br /&gt;    signed64--;&lt;br /&gt;  else&lt;br /&gt;    signed64++;&lt;br /&gt;  if(signed64 == -9223372036854775808) // = &amp;quot;-0&amp;quot;, make it &amp;quot;+0&amp;quot;&lt;br /&gt;    return 0;&lt;br /&gt;&lt;br /&gt;  value = BitConverter.Int64BitsToDouble(signed64);&lt;br /&gt;  return double.IsNaN(value) ? double.NaN : value;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Again an excerpt of the expected behavior:&lt;/p&gt;&lt;pre&gt;double x = double.Epsilon;&lt;br /&gt;x = Decrement(x);&lt;br /&gt;--&amp;gt; x == 0&lt;br /&gt;x = Decrement(x);&lt;br /&gt;--&amp;gt; x == -double.Epsilon&lt;br /&gt;x = Increment(x);&lt;br /&gt;--&amp;gt; x == 0&lt;br /&gt;x = Increment(x);&lt;br /&gt;x = Increment(x);&lt;br /&gt;--&amp;gt; x == 2 * double.Epsilon&lt;br /&gt;x = double.MaxValue;&lt;br /&gt;x = Decrement(x);&lt;br /&gt;--&amp;gt; x &amp;lt; double.MaxValue&lt;br /&gt;x = Increment(x);&lt;br /&gt;--&amp;gt; x == double.MaxValue&lt;/pre&gt;
&lt;h1&gt;Evaluating the Precision: Epsilon&lt;/h1&gt;
&lt;p&gt;The incrementation step depends on the exponent, so it may differ between different numbers. It is important for example in iterative approximation algorithms to know when to stop. The following function returns the decrementation step near a given number, often referred to as a scaled negative epsilon:&lt;/p&gt;&lt;pre&gt;public static double EpsilonOf(double value)&lt;br /&gt;{&lt;br /&gt;  if(double.IsInfinity(value) || double.IsNaN(value))&lt;br /&gt;   return double.NaN;&lt;br /&gt;&lt;br /&gt;  long signed64 = BitConverter.DoubleToInt64Bits(value);&lt;br /&gt;  if(signed64 == 0)&lt;br /&gt;  {&lt;br /&gt;    signed64++;&lt;br /&gt;    return BitConverter.Int64BitsToDouble(signed64) - value;&lt;br /&gt;  }&lt;br /&gt;  else if(signed64-- &amp;lt; 0)&lt;br /&gt;    return BitConverter.Int64BitsToDouble(signed64) - value;&lt;br /&gt;  else&lt;br /&gt;    return value - BitConverter.Int64BitsToDouble(signed64);&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;And some examples:&lt;/p&gt;&lt;pre&gt;EpsilonOf(1.0).ToString() == &amp;quot;1.11022302462516E-16&amp;quot;&lt;br /&gt;EpsilonOf(0.0).ToString() == &amp;quot;4.94065645841247E-324&amp;quot;&lt;br /&gt;EpsilonOf(-1.0e+100).ToString() == &amp;quot;1.94266889222573E+84&amp;quot;&lt;br /&gt;EpsilonOf(1.0e-100).ToString() == &amp;quot;1.26897091865782E-116&amp;quot;&lt;br /&gt;EpsilonOf(double.MinValue).ToString() == &amp;quot;1.99584030953472E+292&amp;quot; &lt;/pre&gt;
&lt;h1&gt;Numbers between two doubles&lt;/h1&gt;
&lt;p&gt;It may be interesting to know how many numbers can be represented by a double variable, which are all between two given numbers. Using the methods introduced above this is simple:&lt;/p&gt;&lt;pre&gt;public static ulong NumbersBetween(double a, double b)&lt;br /&gt;{&lt;br /&gt;  // left out (see repository): handling NaN and Infinity &lt;br /&gt;&lt;br /&gt;  ulong ua = ToLexicographicalOrderedUInt64(a);&lt;br /&gt;&amp;nbsp; ulong ub = ToLexicographicalOrderedUInt64(b);&lt;br /&gt;&lt;br /&gt;  return (a &amp;gt;= b) ? ua - ub : ub - ua;&lt;br /&gt;} &lt;/pre&gt;
&lt;p&gt;Examples:&lt;/p&gt;&lt;pre&gt;NumbersBetween(1.0, 1.0) == 0&lt;br /&gt;NumbersBetween(0, double.Epsilon) == 1&lt;br /&gt;NumbersBetween(-double.Epsilon, 2 * double.Epsilon) == 3&lt;br /&gt;double test = Math.PI * 1e+150;&lt;br /&gt;NumbersBetween(test, test + 10 * Number.EpsilonOf(test) == 10&lt;br /&gt;NumbersBetween(1.0001, 1.0002) == 450359962737&lt;br /&gt;NumbersBetween(10000000000.0001, 10000000000.0002) == 53&lt;br /&gt;NumbersBetween(double.MinValue, double.MaxValue) == 18437736874454810622&lt;/pre&gt;
&lt;h1&gt;Compare doubles for (almost) equality&lt;/h1&gt;
&lt;p&gt;Now we come to the final but most important method, for a safe and more sensible way of comparing two floating point numbers for almost equality. Call this method with two doubles and a parameter specifying how many numbers may be between the two numbers at most (+1):&lt;/p&gt;&lt;pre&gt;public static bool AlmostEqual(double a, double b, int maxNumbersBetween)&lt;br /&gt;{&lt;br /&gt;  // left out (see repository): argument checks&lt;br /&gt;&lt;br /&gt;  // NaN&amp;#39;s should never equal to anything&lt;br /&gt;  if(double.IsNaN(a) || double.IsNaN(b)) //(a != a || b != b)&lt;br /&gt;    return false;&lt;br /&gt;  if(a == b)&lt;br /&gt;    return true;&lt;br /&gt;&lt;br /&gt;  // false, if only one of them is infinity or they differ on the infinity sign&lt;br /&gt;  if(double.IsInfinity(a) || double.IsInfinity(b))&lt;br /&gt;    return false;&lt;br /&gt;&lt;br /&gt;  ulong between = NumbersBetween(a, b);&lt;br /&gt;  return between &amp;lt;= (uint)maxNumbersBetween;&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Examples:&lt;/p&gt;&lt;pre&gt;Convert.ToDouble(&amp;quot;3.170404&amp;quot;) == 3.170404 --&amp;gt; TRUE&lt;br /&gt;Convert.ToDouble(&amp;quot;4.170404&amp;quot;) == 4.170404 --&amp;gt; FALSE&lt;br /&gt;Number.AlmostEqual(Convert.ToDouble(&amp;quot;3.170404&amp;quot;), 3.170404, 0) --&amp;gt; TRUE&lt;br /&gt;Number.AlmostEqual(Convert.ToDouble(&amp;quot;4.170404&amp;quot;), 4.170404, 0) --&amp;gt; FALSE&lt;br /&gt;Number.AlmostEqual(Convert.ToDouble(&amp;quot;4.170404&amp;quot;), 4.170404, 1) --&amp;gt; TRUE&lt;br /&gt;Number.AlmostEqual(0.0, 0.0 + double.Epsilon, 0) --&amp;gt; FALSE&lt;br /&gt;Number.AlmostEqual(0.0, 0.0 + double.Epsilon, 1) --&amp;gt; TRUE&lt;br /&gt;double max = double.MaxValue;&lt;br /&gt;Number.AlmostEqual(max, max - 2 * Number.EpsilonOf(max), 0) --&amp;gt; FALSE&lt;br /&gt;Number.AlmostEqual(max, max - 2 * Number.EpsilonOf(max), 1) --&amp;gt; FALSE&lt;br /&gt;Number.AlmostEqual(max, max - 2 * Number.EpsilonOf(max), 2) --&amp;gt; TRUE&lt;/pre&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=1166" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Iridium/default.aspx">Iridium</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category></item><item><title>New Math.NET Website Organization</title><link>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2006/08/16/New-Math.NET-Website-Organization.aspx</link><pubDate>Wed, 16 Aug 2006 11:38:00 GMT</pubDate><guid isPermaLink="false">5e0c48d9-3477-4155-b28a-6cca64e53d2a:1160</guid><dc:creator>Christoph Rüegg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.opensourcedotnet.info/blogs/mathnet_en/rsscomments.aspx?PostID=1160</wfw:commentRss><comments>http://community.opensourcedotnet.info/blogs/mathnet_en/archive/2006/08/16/New-Math.NET-Website-Organization.aspx#comments</comments><description>&lt;p&gt;In the last few years the Math.NET project websites&amp;nbsp;became scattered around web, including SourceForge and my personal web site. That&amp;#39;s why I&amp;#39;ve been reorganizing the websites the last weeks (and continue to do so the next days).&lt;/p&gt; &lt;p&gt;Our new central website, replacing SourceForge and my personal website as entry point for the project:&lt;/p&gt; &lt;p&gt;&lt;a href="http://mathnet.opensourcedotnet.info/"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;http://mathnet.opensourcedotnet.info/&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Every other project pages on the web are (or will be) linked from this website, mainly:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The &lt;a href="http://dev.cdrnet.net/cs/files/folders/mathnet/default.aspx"&gt;download archive&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;The &lt;a href="http://dev.cdrnet.net/cs/blogs/mathnet_en/default.aspx"&gt;news blog&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;The &lt;a href="http://dev.cdrnet.net/cs/forums/5/ShowForum.aspx"&gt;forum / discussion board&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;The &lt;a href="http://tracker.opensourcedotnet.info/Main.aspx"&gt;issue tracker&lt;/a&gt;  &lt;/li&gt;&lt;li&gt;The &lt;a href="http://mathnet.opensourcedotnet.info/wiki/"&gt;documentation wiki&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;All the information of the old websites (including &lt;a href="http://nmath.sourceforge.net"&gt;http://nmath.sourceforge.net&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.cdrnet.net/projects/nmath/"&gt;http://www.cdrnet.net/projects/nmath/&lt;/a&gt;)&amp;nbsp;will be integrated into the new website or one of the resources listed above. Please consider updating your links.&lt;/p&gt;&lt;img src="http://community.opensourcedotnet.info/aggbug.aspx?PostID=1160" width="1" height="1"&gt;</description><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Forum/default.aspx">Forum</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Organization/default.aspx">Organization</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Tracker/default.aspx">Tracker</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Wiki/default.aspx">Wiki</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Blog/default.aspx">Blog</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Website/default.aspx">Website</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Download/default.aspx">Download</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Documentation/default.aspx">Documentation</category><category domain="http://community.opensourcedotnet.info/blogs/mathnet_en/archive/tags/Math.NET/default.aspx">Math.NET</category></item></channel></rss>