Numerik MATH.NET \ Distribusi Stabil. Pengecualian tipe 'System.NotSupportedException'

Saya mengalami Exception error (secara mengejutkan) saat melakukan beberapa uji statistik paralel dengan Math.Net Numerics, dan saya ingin mengetahui alasannya.

using MathNet.Numerics.Distributions;
....
var stable = new Stable(1.7, -0.7, 0.0087, 0.9103);
        double b = stable.Density(3.2);
        double a = stable.Density(5.1);
        Console.WriteLine(b);
        Console.WriteLine(a);

Kesalahan: Pengecualian tipe System.NotSupportedException yang tidak tertangani terjadi di MathNet.Numerics.dll

Saya mengharapkan untuk mendapatkan b = 2.2484e-06, a = 4.3977e-07.

Ps: Distribusi klasik lainnya seperti Gamma berfungsi tanpa masalah (misalnya Distribusi Probabilitas ), mengesampingkan secara de facto masalah instalasi apa pun pada paket

Terbaik,

EDIT: Dari Github repositori Saya telah menambahkan Stable.cs di proyek saya yang mencakup semua properti dan metode.

Faktanya, propertinya berfungsi dengan baik. Lihat ilustrasi di bawah dari Program.cs:

   Stable st = new Stable(1.7, -0.7, 0.0087, 0.9103); // correct instantiation

   Console.WriteLine(string.Format(" Characteristic exponent: {0}\n 
   Skewness: {1}\n Scale: {2}\n Location: {3}" ,st.Alpha, st.Beta,  
   st.Scale,st.Location));

Namun tidak ada yang tidak masuk akal, sejauh yang saya ketahui, dalam memanggil metode Density berdasarkan object: st.Density(3.2) yang seharusnya mengembalikan:

PDF(_alpha, _beta, _scale, _location, x); 

Oleh karena itu, kita tergoda untuk menyimpulkan masalah method definition, kecuali orang menolak pendapat ini dengan ilustrasi yang valid.

Selain itu, pada nilai khusus stable parameters (misalnya _alpha = 2.0, dll.) PDF yang ditentukan mengembalikan 0 (aneh)


person dark.vador    schedule 12.06.2016    source sumber


Jawaban (1)


Jawabannya ada di Math.NET repositori GitHub.

Contoh Anda tidak memenuhi ketentuan rumus Density.

public double Density(double x)
{
    return PDF(_alpha, _beta, _scale, _location, x);
}

/// <summary>
/// Computes the probability density of the distribution (PDF) at x, i.e. ∂P(X ≤ x)/∂x.
/// </summary>
/// <param name="alpha">The stability (α) of the distribution. Range: 2 ≥ α > 0.</param>
/// <param name="beta">The skewness (β) of the distribution. Range: 1 ≥ β ≥ -1.</param>
/// <param name="scale">The scale (c) of the distribution. Range: c > 0.</param>
/// <param name="location">The location (μ) of the distribution.</param>
/// <param name="x">The location at which to compute the density.</param>
/// <returns>the density at <paramref name="x"/>.</returns>
/// <seealso cref="Density"/>
public static double PDF(double alpha, double beta, double scale, double location, double x)
{
    if (alpha <= 0.0 || alpha > 2.0 || beta < -1.0 || beta > 1.0 || scale <= 0.0)
    {
        throw new ArgumentException(Resources.InvalidDistributionParameters);
    }

    if (alpha == 2d)
    {
        return Normal.PDF(location, Constants.Sqrt2*scale, x);
    }

    if (alpha == 1d && beta == 0d)
    {
        return Cauchy.PDF(location, scale, x);
    }

    if (alpha == 0.5d && beta == 1d && x >= location)
    {
        return (Math.Sqrt(scale/Constants.Pi2)*Math.Exp(-scale/(2*(x - location))))/Math.Pow(x - location, 1.5);
    }

    throw new NotSupportedException();
}
person Piotr Leniartek    schedule 14.06.2016