Source code for psy.utils.probs
# coding=utf-8
import numpy as np
from itertools import product
from psy.settings import GH_POINT_DT
[docs]def r4beta(shape1, shape2, a, b, size):
# 4参数beta分布
x = np.random.beta(shape1, shape2, size)
return (b - a) * x + a
[docs]def get_log_beta_pd(no_slip, guess):
# beta分布的对数概率密度函数
return np.log(0.6 - guess) + np.log(no_slip - 0.4)
[docs]def get_log_normal_pd(x):
# 正态分布的对数概率密度函数
return x ** 2 * -0.5
[docs]def get_log_lognormal_pd(x):
# 对数正态分布的对数概率密度函数
return np.log(1.0 / x) + get_log_normal_pd(np.log(x))
[docs]def inverse_logistic(y):
# logistic的反函数
return -1 * np.log(1.0 / y - 1)
[docs]def get_nodes_weights(dim_size):
# 多维高斯厄米特积分
x_nodes, x_weights = np.polynomial.hermite.hermgauss(GH_POINT_DT[dim_size])
x_nodes2_list = [x_nodes for _ in range(dim_size)]
x_nodes = np.array(list(product(*x_nodes2_list)))
x_nodes = x_nodes * 2 ** 0.5
x_weights2_list = [x_weights for _ in range(dim_size)]
x_weights = np.array(list(product(*x_weights2_list)))
x_weights = np.prod(x_weights, axis=1)
x_weights.shape = x_weights.shape[0], 1
x_weights = x_weights / np.pi ** 0.5
return x_nodes, x_weights