MATH.NET ตัวเลข \ การแจกแจงที่เสถียร ข้อยกเว้นประเภท 'System.NotSupportedException'

ฉันประสบปัญหา Exception error (น่าประหลาดใจ) ขณะทำการทดสอบทางสถิติแบบขนานกับ Math.Net Numerics และฉันต้องการทราบเหตุผล

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);

ข้อผิดพลาด: มีข้อยกเว้นที่ไม่สามารถจัดการได้ประเภท System.NotSupportedException เกิดขึ้นใน MathNet.Numerics.dll

ฉันคาดหวังว่าจะได้ b = 2.2484e-06, a = 4.3977e-07

ป.ล. การแจกแจงแบบคลาสสิกอื่นๆ เช่น Gamma ใช้งานได้โดยไม่มีปัญหา (เช่น การแจกแจงความน่าจะเป็น ), ตัดสินว่าปัญหาการติดตั้งใดๆ กับแพ็คเกจ

ดีที่สุด,

แก้ไข: จาก Github พื้นที่เก็บข้อมูล ฉันได้เพิ่ม Stable.cs ในโครงการของฉันที่มีคุณสมบัติและวิธีการทั้งหมด

ที่จริงแล้วคุณสมบัติทำงานได้ดี ดูภาพประกอบด้านล่างจาก 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));

อย่างไรก็ตาม ไม่มีอะไรที่ไร้เหตุผลเท่าที่ฉันกังวล ในการเรียกเมธอด Density ตาม object: st.Density(3.2) ซึ่งควรจะส่งคืน:

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

ดังนั้นจึงเป็นเรื่องยากที่จะสรุปปัญหา method definition เว้นแต่ว่าผู้คนจะคัดค้านความคิดเห็นนี้ด้วยภาพประกอบที่ถูกต้อง

ยิ่งไปกว่านั้น สำหรับค่าพิเศษของ stable parameters (เช่น _alpha = 2.0 เป็นต้น) PDF ที่กำหนดไว้จะส่งกลับ 0 (แปลก)


person dark.vador    schedule 12.06.2016    source แหล่งที่มา


คำตอบ (1)


คำตอบอยู่ใน Math.NET ที่เก็บ GitHub< /ก>.

ตัวอย่างของคุณไม่ตรงตามเงื่อนไขสูตร 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