eaebec39创建于 2024年10月24日历史提交
package scientific.stats.continuous

import std.math.*
import std.unittest.*
import std.unittest.testmacro.*

import scientific.numbers.*
import scientific.stats.random.*

/*
 * Log of Probability density function
 */
public func pearson3LogPDF(x: Float64, k: Float64, loc!: Float64 = 0.0, scale!: Float64 = 1.0): Float64 {
    let y = (x - loc) / scale

    let t1 = 2.0 / k
    let t2 = t1 * t1
    let t3 = -t1
    let res = log(abs(t1)) - gammaLog(t2) + (t2 - 1.0) * (log(t1) + log(y - t3)) - t1 * (y - t3)
    return res - log(scale)
}

/*
 * Probability density function
 */
public func pearson3PDF(x: Float64, k: Float64, loc!: Float64 = 0.0, scale!: Float64 = 1.0): Float64 {
    let y = (x - loc) / scale

    return exp(pearson3LogPDF(x, k, loc: loc, scale: scale))
}

@Test
public class TestPearson3 {
    @TestCase
    func testPearson3(): Unit {
        @Assert(approxEqual(pearson3LogPDF(4.0, 2.0, loc: 1.0, scale: 2.0), -3.1931471805599454, atol:1e-13))
    }
}