Browse Source

Cosmetics

pull/203/head
Christoph Ruegg 12 years ago
parent
commit
5fccbdd957
  1. 2
      LICENSE.md
  2. 5
      MathNet.Numerics.sln.DotSettings
  3. 42
      src/Numerics/Distributions/Triangular.cs
  4. 2
      src/Numerics/Financial/AbsoluteRiskMeasures.cs
  5. 4
      src/Numerics/LinearRegression/WeightedRegression.cs
  6. 10
      src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.cs
  7. 16
      src/Numerics/SpecialFunctions/Gamma.cs
  8. 135
      src/Numerics/Statistics/DescriptiveStatistics.cs

2
LICENSE.md

@ -1,7 +1,7 @@
Math.NET Numerics License (MIT/X11)
===================================
Copyright (c) 2002-2013 Math.NET
Copyright (c) 2002-2014 Math.NET
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation

5
MathNet.Numerics.sln.DotSettings

@ -1,4 +1,5 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeInspection/ExcludedFiles/FileMasksToSkip/=_002A_002Ecshtml/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/CodeStyle/CodeCleanup/Profiles/=Full_0020Cleanup_0020_0028Math_002ENET_0029/@EntryIndexedValue">&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;Profile name="Full Cleanup (Math.NET)"&gt;&lt;CSArrangeThisQualifier&gt;True&lt;/CSArrangeThisQualifier&gt;&lt;CSRemoveCodeRedundancies&gt;True&lt;/CSRemoveCodeRedundancies&gt;&lt;CSUseAutoProperty&gt;True&lt;/CSUseAutoProperty&gt;&lt;CSMakeFieldReadonly&gt;True&lt;/CSMakeFieldReadonly&gt;&lt;CSUpdateFileHeader&gt;True&lt;/CSUpdateFileHeader&gt;&lt;CSOptimizeUsings&gt;&lt;OptimizeUsings&gt;True&lt;/OptimizeUsings&gt;&lt;EmbraceInRegion&gt;False&lt;/EmbraceInRegion&gt;&lt;RegionName&gt;&lt;/RegionName&gt;&lt;/CSOptimizeUsings&gt;&lt;CSShortenReferences&gt;True&lt;/CSShortenReferences&gt;&lt;CSReformatCode&gt;True&lt;/CSReformatCode&gt;&lt;XMLReformatCode&gt;True&lt;/XMLReformatCode&gt;&lt;CssAlphabetizeProperties&gt;True&lt;/CssAlphabetizeProperties&gt;&lt;CssReformatCode&gt;True&lt;/CssReformatCode&gt;&lt;JsReformatCode&gt;True&lt;/JsReformatCode&gt;&lt;JsInsertSemicolon&gt;True&lt;/JsInsertSemicolon&gt;&lt;VBFormatDocComments&gt;True&lt;/VBFormatDocComments&gt;&lt;VBReformatCode&gt;True&lt;/VBReformatCode&gt;&lt;VBShortenReferences&gt;True&lt;/VBShortenReferences&gt;&lt;VBOptimizeImports&gt;True&lt;/VBOptimizeImports&gt;&lt;HtmlReformatCode&gt;True&lt;/HtmlReformatCode&gt;&lt;AspOptimizeRegisterDirectives&gt;True&lt;/AspOptimizeRegisterDirectives&gt;&lt;CSReorderTypeMembers&gt;True&lt;/CSReorderTypeMembers&gt;&lt;CSUseVar&gt;&lt;BehavourStyle&gt;CAN_CHANGE_BOTH&lt;/BehavourStyle&gt;&lt;LocalVariableStyle&gt;IMPLICIT_WHEN_INITIALIZER_HAS_TYPE&lt;/LocalVariableStyle&gt;&lt;ForeachVariableStyle&gt;ALWAYS_EXPLICIT&lt;/ForeachVariableStyle&gt;&lt;/CSUseVar&gt;&lt;/Profile&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/CodeCleanup/RecentlyUsedProfile/@EntryValue">Full Cleanup (Math.NET)</s:String>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ALIGN_LINQ_QUERY/@EntryValue">False</s:Boolean>
@ -48,11 +49,14 @@ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING&#xD;
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR&#xD;
OTHER DEALINGS IN THE SOFTWARE.&#xD;
&lt;/copyright&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=AVX/@EntryIndexedValue">AVX</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=CDF/@EntryIndexedValue">CDF</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=DFT/@EntryIndexedValue">DFT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=FFT/@EntryIndexedValue">FFT</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IA/@EntryIndexedValue">IA</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ILU/@EntryIndexedValue">ILU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=ILUTP/@EntryIndexedValue">ILUTP</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=IX/@EntryIndexedValue">IX</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=LU/@EntryIndexedValue">LU</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MAE/@EntryIndexedValue">MAE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=MC/@EntryIndexedValue">MC</s:String>
@ -66,6 +70,7 @@ OTHER DEALINGS IN THE SOFTWARE.&#xD;
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SAS/@EntryIndexedValue">SAS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SPSS/@EntryIndexedValue">SPSS</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SSD/@EntryIndexedValue">SSD</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SSE/@EntryIndexedValue">SSE</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SVD/@EntryIndexedValue">SVD</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=TFQMR/@EntryIndexedValue">TFQMR</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=WH/@EntryIndexedValue">WH</s:String>

42
src/Numerics/Distributions/Triangular.cs

@ -138,7 +138,7 @@ namespace MathNet.Numerics.Distributions
/// </summary>
public double Mean
{
get { return (_lower + _upper + _mode) / 3.0; }
get { return (_lower + _upper + _mode)/3.0; }
}
/// <summary>
@ -151,7 +151,7 @@ namespace MathNet.Numerics.Distributions
var a = _lower;
var b = _upper;
var c = _mode;
return (a * a + b * b + c * c - a * b - a * c - b * c) / 18.0;
return (a*a + b*b + c*c - a*b - a*c - b*c)/18.0;
}
}
@ -169,7 +169,7 @@ namespace MathNet.Numerics.Distributions
/// <value></value>
public double Entropy
{
get { return 0.5 + Math.Log((_upper - _lower) / 2); }
get { return 0.5 + Math.Log((_upper - _lower)/2); }
}
/// <summary>
@ -182,9 +182,9 @@ namespace MathNet.Numerics.Distributions
var a = _lower;
var b = _upper;
var c = _mode;
var q = Math.Sqrt(2) * (a + b - 2 * c) * (2 * a - b - c) * (a - 2 * b + c);
var d = 5 * Math.Pow(a * a + b * b + c * c - a * b - a * c - b * c, 3.0 / 2);
return q / d;
var q = Math.Sqrt(2)*(a + b - 2*c)*(2*a - b - c)*(a - 2*b + c);
var d = 5*Math.Pow(a*a + b*b + c*c - a*b - a*c - b*c, 3.0/2);
return q/d;
}
}
@ -208,9 +208,9 @@ namespace MathNet.Numerics.Distributions
var a = _lower;
var b = _upper;
var c = _mode;
return c >= (a + b) / 2
? a + Math.Sqrt((b - a) * (c - a) / 2)
: b - Math.Sqrt((b - a) * (b - c) / 2);
return c >= (a + b)/2
? a + Math.Sqrt((b - a)*(c - a)/2)
: b - Math.Sqrt((b - a)*(b - c)/2);
}
}
@ -311,8 +311,8 @@ namespace MathNet.Numerics.Distributions
var b = upper;
var c = mode;
if (a <= x && x <= c) return 2 * (x - a) / ((b - a) * (c - a));
if (c < x & x <= b) return 2 * (b - x) / ((b - a) * (b - c));
if (a <= x && x <= c) return 2*(x - a)/((b - a)*(c - a));
if (c < x & x <= b) return 2*(b - x)/((b - a)*(b - c));
return 0;
}
@ -342,15 +342,15 @@ namespace MathNet.Numerics.Distributions
public static double CDF(double lower, double upper, double mode, double x)
{
if (upper < mode) throw new ArgumentOutOfRangeException("upper", Resources.InvalidDistributionParameters);
if (mode < lower) throw new ArgumentOutOfRangeException("lower", Resources.InvalidDistributionParameters); // TODO: Is "lower" the appropriate argument here?
if (lower > mode) throw new ArgumentOutOfRangeException("lower", Resources.InvalidDistributionParameters);
var a = lower;
var b = upper;
var c = mode;
if (x < a) return 0;
if (a <= x && x <= c) return (x - a) * (x - a) / ((b - a) * (c - a));
if (c < x & x <= b) return 1 - (b - x) * (b - x) / ((b - a) * (b - c));
if (a <= x && x <= c) return (x - a)*(x - a)/((b - a)*(c - a));
if (c < x & x <= b) return 1 - (b - x)*(b - x)/((b - a)*(b - c));
return 1;
}
@ -367,7 +367,7 @@ namespace MathNet.Numerics.Distributions
public static double InvCDF(double lower, double upper, double mode, double p)
{
if (upper < mode) throw new ArgumentOutOfRangeException("upper", Resources.InvalidDistributionParameters);
if (mode < lower) throw new ArgumentOutOfRangeException("lower", Resources.InvalidDistributionParameters); // TODO: Is "lower" the appropriate argument here?
if (lower > mode) throw new ArgumentOutOfRangeException("lower", Resources.InvalidDistributionParameters);
var a = lower;
var b = upper;
@ -375,8 +375,8 @@ namespace MathNet.Numerics.Distributions
if (p <= 0) return lower;
// Taken from http://www.ntrand.com/triangular-distribution/
if (p < (c - a) / (b - a)) return a + Math.Sqrt(p * (c - a) * (b - a));
if (p < 1) return b - Math.Sqrt((1 - p) * (b - c) * (b - a));
if (p < (c - a)/(b - a)) return a + Math.Sqrt(p*(c - a)*(b - a));
if (p < 1) return b - Math.Sqrt((1 - p)*(b - c)*(b - a));
return upper;
}
@ -395,9 +395,9 @@ namespace MathNet.Numerics.Distributions
var c = mode;
var u = rnd.NextDouble();
return u < (c - a) / (b - a)
? a + Math.Sqrt(u * (b - a) * (c - a))
: b - Math.Sqrt((1 - u) * (b - a) * (b - c)); ;
return u < (c - a)/(b - a)
? a + Math.Sqrt(u*(b - a)*(c - a))
: b - Math.Sqrt((1 - u)*(b - a)*(b - c));
}
/// <summary>
@ -417,4 +417,4 @@ namespace MathNet.Numerics.Distributions
}
}
}
}

2
src/Numerics/Financial/AbsoluteRiskMeasures.cs

@ -37,7 +37,7 @@ namespace MathNet.Numerics.Financial
{
public static class AbsoluteRiskMeasures
{
//Note: The following statistics would be condidered an absolute risk statistic in the finance realm as well.
//Note: The following statistics would be considered an absolute risk statistic in the finance realm as well.
// Standard Deviation
// Annualized Standard Deviation = Math.Sqrt(Monthly Standard Deviation x ( 12 ))
// Skewness

4
src/Numerics/LinearRegression/WeightedRegression.cs

@ -64,7 +64,7 @@ namespace MathNet.Numerics.LinearRegression
/// <param name="x">Predictor matrix X</param>
/// <param name="y">Response vector Y</param>
/// <param name="w">Weight matrix W, usually diagonal with an entry for each predictor (row).</param>
/// <param name="intercept">True if an intercept should be added as first artificial perdictor value. Default = false.</param>
/// <param name="intercept">True if an intercept should be added as first artificial predictor value. Default = false.</param>
public static T[] Weighted<T>(T[][] x, T[] y, T[] w, bool intercept = false) where T : struct, IEquatable<T>, IFormattable
{
var predictor = Matrix<T>.Build.DenseOfRowArrays(x);
@ -82,7 +82,7 @@ namespace MathNet.Numerics.LinearRegression
/// </summary>
/// <param name="samples">List of sample vectors (predictor) together with their response.</param>
/// <param name="weights">List of weights, one for each sample.</param>
/// <param name="intercept">True if an intercept should be added as first artificial perdictor value. Default = false.</param>
/// <param name="intercept">True if an intercept should be added as first artificial predictor value. Default = false.</param>
public static T[] Weighted<T>(IEnumerable<Tuple<T[], T>> samples, T[] weights, bool intercept = false) where T : struct, IEquatable<T>, IFormattable
{
var xy = samples.UnpackSinglePass();

10
src/Numerics/Providers/LinearAlgebra/Mkl/MklLinearAlgebraProvider.cs

@ -72,10 +72,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
/// </summary>
public partial class MklLinearAlgebraProvider : ManagedLinearAlgebraProvider
{
int _nativeRevision = 0;
bool _nativeIX86 = false;
bool _nativeX64 = false;
bool _nativeIA64 = false;
int _nativeRevision;
bool _nativeIX86;
bool _nativeX64;
bool _nativeIA64;
readonly MklConsistency _consistency;
readonly MklPrecision _precision;
@ -113,7 +113,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Mkl
{
// TODO: Choose x86 or x64 based on Environment.Is64BitProcess
int a = 0, b = 0, linearAlgebra = 0;
int a, b, linearAlgebra;
try
{
a = SafeNativeMethods.query_capability(0);

16
src/Numerics/SpecialFunctions/Gamma.cs

@ -265,9 +265,13 @@ namespace MathNet.Numerics
const double big = 4503599627370496.0;
const double bigInv = 2.22044604925031308085e-16;
if (a < 0d || x < 0d)
if (a < 0d)
{
throw new ArgumentOutOfRangeException("a,x", Properties.Resources.ArgumentNotNegative);
throw new ArgumentOutOfRangeException("a", Properties.Resources.ArgumentNotNegative);
}
if (x < 0d)
{
throw new ArgumentOutOfRangeException("x", Properties.Resources.ArgumentNotNegative);
}
if (a.AlmostEqual(0.0))
@ -379,9 +383,13 @@ namespace MathNet.Numerics
return double.NaN;
}
if (a < 0 || a.AlmostEqual(0.0) || y0 < 0 || y0 > 1)
if (a < 0 || a.AlmostEqual(0.0))
{
throw new ArgumentOutOfRangeException("a");
}
if (y0 < 0 || y0 > 1)
{
throw new ArgumentOutOfRangeException("a,y0", Properties.Resources.ArgumentNotNegative);
throw new ArgumentOutOfRangeException("y0");
}
if (y0.AlmostEqual(0.0))

135
src/Numerics/Statistics/DescriptiveStatistics.cs

@ -28,11 +28,11 @@
// OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
using System;
using System.Collections.Generic;
namespace MathNet.Numerics.Statistics
{
using System;
using System.Collections.Generic;
/// <summary>
/// Computes the basic statistics of data set. The class meets the
/// NIST standard of accuracy for mean, variance, and standard deviation
@ -153,7 +153,7 @@ namespace MathNet.Numerics.Statistics
/// Computes descriptive statistics from a stream of data values.
/// </summary>
/// <param name="data">A sequence of datapoints.</param>
private void Compute(IEnumerable<double> data)
void Compute(IEnumerable<double> data)
{
double mean = 0;
double variance = 0;
@ -165,20 +165,26 @@ namespace MathNet.Numerics.Statistics
foreach (var xi in data)
{
double delta = xi - mean;
double scaleDelta = delta / ++n;
double scaleDeltaSqr = scaleDelta * scaleDelta;
double tmpDelta = delta * (n - 1);
double scaleDelta = delta/++n;
double scaleDeltaSqr = scaleDelta*scaleDelta;
double tmpDelta = delta*(n - 1);
mean += scaleDelta;
kurtosis += tmpDelta * scaleDelta * scaleDeltaSqr * (n * n - 3 * n + 3)
+ 6 * scaleDeltaSqr * variance - 4 * scaleDelta * skewness;
kurtosis += tmpDelta*scaleDelta*scaleDeltaSqr*(n*n - 3*n + 3)
+ 6*scaleDeltaSqr*variance - 4*scaleDelta*skewness;
skewness += tmpDelta * scaleDeltaSqr * (n - 2) - 3 * scaleDelta * variance;
variance += tmpDelta * scaleDelta;
skewness += tmpDelta*scaleDeltaSqr*(n - 2) - 3*scaleDelta*variance;
variance += tmpDelta*scaleDelta;
if (minimum > xi) { minimum = xi; }
if (maximum < xi) { maximum = xi; }
if (minimum > xi)
{
minimum = xi;
}
if (maximum < xi)
{
maximum = xi;
}
}
SetStatistics(mean, variance, skewness, kurtosis, minimum, maximum, n);
}
@ -189,7 +195,7 @@ namespace MathNet.Numerics.Statistics
/// Computes descriptive statistics from a stream of nullable data values.
/// </summary>
/// <param name="data">A sequence of datapoints.</param>
private void Compute(IEnumerable<double?> data)
void Compute(IEnumerable<double?> data)
{
double mean = 0;
double variance = 0;
@ -203,19 +209,25 @@ namespace MathNet.Numerics.Statistics
if (xi.HasValue)
{
double delta = xi.Value - mean;
double scaleDelta = delta / ++n;
double scaleDeltaSqr = scaleDelta * scaleDelta;
double tmpDelta = delta * (n - 1);
double scaleDelta = delta/++n;
double scaleDeltaSqr = scaleDelta*scaleDelta;
double tmpDelta = delta*(n - 1);
mean += scaleDelta;
kurtosis += tmpDelta * scaleDelta * scaleDeltaSqr * (n * n - 3 * n + 3)
+ 6 * scaleDeltaSqr * variance - 4 * scaleDelta * skewness;
kurtosis += tmpDelta*scaleDelta*scaleDeltaSqr*(n*n - 3*n + 3)
+ 6*scaleDeltaSqr*variance - 4*scaleDelta*skewness;
skewness += tmpDelta * scaleDeltaSqr * (n - 2) - 3 * scaleDelta * variance;
variance += tmpDelta * scaleDelta;
if (minimum > xi) { minimum = xi.Value; }
if (maximum < xi) { maximum = xi.Value; }
skewness += tmpDelta*scaleDeltaSqr*(n - 2) - 3*scaleDelta*variance;
variance += tmpDelta*scaleDelta;
if (minimum > xi)
{
minimum = xi.Value;
}
if (maximum < xi)
{
maximum = xi.Value;
}
}
}
@ -224,10 +236,10 @@ namespace MathNet.Numerics.Statistics
}
/// <summary>
/// Computes descriptive statistics from a stream of data values using high accuracy.
/// Computes descriptive statistics from a stream of data values.
/// </summary>
/// <param name="data">A sequence of datapoints.</param>
private void ComputeDecimal(IEnumerable<double> data)
void ComputeDecimal(IEnumerable<double> data)
{
decimal mean = 0;
decimal variance = 0;
@ -236,22 +248,29 @@ namespace MathNet.Numerics.Statistics
decimal minimum = Decimal.MaxValue;
decimal maximum = Decimal.MinValue;
int n = 0;
foreach (decimal xi in data)
foreach (double x in data)
{
decimal xi = (decimal)x;
decimal delta = xi - mean;
decimal scaleDelta = delta / ++n;
decimal scaleDeltaSQR = scaleDelta * scaleDelta;
decimal tmpDelta = delta * (n - 1);
decimal scaleDelta = delta/++n;
decimal scaleDeltaSQR = scaleDelta*scaleDelta;
decimal tmpDelta = delta*(n - 1);
mean += scaleDelta;
kurtosis += tmpDelta * scaleDelta * scaleDeltaSQR * (n * n - 3 * n + 3)
+ 6 * scaleDeltaSQR * variance - 4 * scaleDelta * skewness;
kurtosis += tmpDelta*scaleDelta*scaleDeltaSQR*(n*n - 3*n + 3)
+ 6*scaleDeltaSQR*variance - 4*scaleDelta*skewness;
skewness += tmpDelta * scaleDeltaSQR * (n - 2) - 3 * scaleDelta * variance;
variance += tmpDelta * scaleDelta;
if (minimum > xi) { minimum = xi; }
if (maximum < xi) { maximum = xi; }
skewness += tmpDelta*scaleDeltaSQR*(n - 2) - 3*scaleDelta*variance;
variance += tmpDelta*scaleDelta;
if (minimum > xi)
{
minimum = xi;
}
if (maximum < xi)
{
maximum = xi;
}
}
SetStatistics((double)mean, (double)variance, (double)skewness, (double)kurtosis, (double)minimum, (double)maximum, n);
@ -259,10 +278,10 @@ namespace MathNet.Numerics.Statistics
}
/// <summary>
/// Computes descriptive statistics from a stream of nullable data values using high accuracy.
/// Computes descriptive statistics from a stream of nullable data values.
/// </summary>
/// <param name="data">A sequence of datapoints.</param>
private void ComputeDecimal(IEnumerable<double?> data)
void ComputeDecimal(IEnumerable<double?> data)
{
decimal mean = 0;
decimal variance = 0;
@ -271,24 +290,31 @@ namespace MathNet.Numerics.Statistics
decimal minimum = Decimal.MaxValue;
decimal maximum = Decimal.MinValue;
int n = 0;
foreach (decimal? xi in data)
foreach (double? x in data)
{
if (xi.HasValue)
if (x.HasValue)
{
decimal delta = xi.Value - mean;
decimal scaleDelta = delta / ++n;
decimal scaleDeltaSQR = scaleDelta * scaleDelta;
decimal tmpDelta = delta * (n - 1);
decimal xi = (decimal)x.Value;
decimal delta = xi - mean;
decimal scaleDelta = delta/++n;
decimal scaleDeltaSQR = scaleDelta*scaleDelta;
decimal tmpDelta = delta*(n - 1);
mean += scaleDelta;
kurtosis += tmpDelta * scaleDelta * scaleDeltaSQR * (n * n - 3 * n + 3)
+ 6 * scaleDeltaSQR * variance - 4 * scaleDelta * skewness;
kurtosis += tmpDelta*scaleDelta*scaleDeltaSQR*(n*n - 3*n + 3)
+ 6*scaleDeltaSQR*variance - 4*scaleDelta*skewness;
skewness += tmpDelta * scaleDeltaSQR * (n - 2) - 3 * scaleDelta * variance;
variance += tmpDelta * scaleDelta;
if (minimum > xi) { minimum = xi.Value; }
if (maximum < xi) { maximum = xi.Value; }
skewness += tmpDelta*scaleDeltaSQR*(n - 2) - 3*scaleDelta*variance;
variance += tmpDelta*scaleDelta;
if (minimum > xi)
{
minimum = xi;
}
if (maximum < xi)
{
maximum = xi;
}
}
}
SetStatistics((double)mean, (double)variance, (double)skewness, (double)kurtosis, (double)minimum, (double)maximum, n);
@ -305,7 +331,7 @@ namespace MathNet.Numerics.Statistics
/// <param name="minimum">For setting Minimum.</param>
/// <param name="maximum">For setting Maximum.</param>
/// <param name="n">For setting Count.</param>
private void SetStatistics(double mean, double variance, double skewness, double kurtosis, double minimum, double maximum, int n)
void SetStatistics(double mean, double variance, double skewness, double kurtosis, double minimum, double maximum, int n)
{
Mean = mean;
Count = n;
@ -315,24 +341,23 @@ namespace MathNet.Numerics.Statistics
Maximum = maximum;
if (n > 1)
{
Variance = variance / (n - 1);
Variance = variance/(n - 1);
StandardDeviation = Math.Sqrt(Variance);
}
if (Variance != 0)
{
if (n > 2)
{
Skewness = (double)n / ((n - 1) * (n - 2)) * (skewness / (Variance * StandardDeviation));
Skewness = (double)n/((n - 1)*(n - 2))*(skewness/(Variance*StandardDeviation));
}
if (n > 3)
{
Kurtosis = ((double)n * n - 1) / ((n - 2) * (n - 3))
* (n * kurtosis / (variance * variance) - 3 + 6.0 / (n + 1));
Kurtosis = ((double)n*n - 1)/((n - 2)*(n - 3))
*(n*kurtosis/(variance*variance) - 3 + 6.0/(n + 1));
}
}
}
}
}
}

Loading…
Cancel
Save