File: t_Distribution_gradient.py

package info (click to toggle)
openturns 1.24-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 66,204 kB
  • sloc: cpp: 256,662; python: 63,381; ansic: 4,414; javascript: 406; sh: 180; xml: 164; yacc: 123; makefile: 98; lex: 55
file content (39 lines) | stat: -rwxr-xr-x 1,210 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#! /usr/bin/env python

import openturns as ot
import openturns.testing as ott

ot.TESTPREAMBLE()

h = 1e-4

for factory in ot.DistributionFactory.GetContinuousUniVariateFactories():
    dist = factory.build()
    if dist.getName() == "MeixnerDistribution":
        # unstable
        continue
    p = dist.getParameter()
    n = len(p)
    x = dist.computeQuantile(0.51)
    pdfgrad = dist.computePDFGradient(x)
    cdfgrad = dist.computeCDFGradient(x)
    pdf_ref = dist.computePDF(x)
    cdf_ref = dist.computeCDF(x)

    pdfgrad_fd = ot.Point(n)
    for j in range(n):
        p_tmp = ot.Point(p)
        p_tmp[j] = p_tmp[j] + h
        dist.setParameter(p_tmp)
        pdfgrad_fd[j] = (dist.computePDF(x) - pdf_ref) / h
    print(dist.getName(), "PDF", pdfgrad, pdfgrad_fd)
    ott.assert_almost_equal(pdfgrad_fd, pdfgrad, 1e-3, 1e-3, dist.getName() + ".pdf")

    cdfgrad_fd = ot.Point(n)
    for j in range(n):
        p_tmp = ot.Point(p)
        p_tmp[j] = p_tmp[j] + h
        dist.setParameter(p_tmp)
        cdfgrad_fd[j] = (dist.computeCDF(x) - cdf_ref) / h
    print(dist.getName(), "CDF", cdfgrad, cdfgrad_fd)
    ott.assert_almost_equal(cdfgrad_fd, cdfgrad, 1e-3, 1e-3, dist.getName() + ".cdf")