Weibull
韦布尔分布,即韦伯分布(Weibull distribution),又称韦氏分布或威布尔分布,威布尔分布在可靠性工程中被广泛应用,尤其适用于机电类产品的磨损累计失效的分布形式。由于它可以利用概率值很容易地推断出它的分布参数,被广泛应用于各种寿命试验的数据处理。
韦伯变量 x x x有两个参数 k 1 > 0 , k 2 > 0 k_1 > 0, k_2 > 0 k1>0,k2>0, x > 0 x > 0 x>0。
f ( x ) = k 1 k 2 × ( x k 2 ) k 1 − 1 e − ( x / k 2 ) k 1 , x > 0 f(x) = \frac{k_1}{k_2} \times \big(\frac{x}{k_2}\big)^{k_1 – 1} e^{-(x/k_2)^{k_1}},x > 0 f(x)=k2k1×(k2x)k1−1e−(x/k2)k1,x>0
F ( x ) = 1 − e − ( x / k 2 ) k 1 , x > 0 F(x) = 1 – e^{-(x/k_2)^{k_1}},x > 0 F(x)=1−e−(x/k2)k1,x>0
E ( x ) = k 2 k 1 Γ ( 1 k 1 ) E(x) = \frac{k_2}{k_1} \Gamma(\frac{1}{k_1}) E(x)=k1k2Γ(k11)
V ( x ) = k 2 2 k 1 [ 2 Γ ( 2 k 1 ) − 1 k 1 Γ ( 1 k 1 ) 2 ] V(x) = \frac{k_2^2}{k_1} \Big[2\Gamma(\frac{2}{k_1}) – \frac{1}{k_1}\Gamma(\frac{1}{k_1})^2\Big] V(x)=k1k22[2Γ(k12)−k11Γ(k11)2]
Γ ( k ) \Gamma(k) Γ(k):Gamma函数:
Γ ( k ) = ∫ 0 ∞ t k − 1 e − t d t , k > 0 \Gamma(k) = \int_0^{\infty} t^{k-1}e^{-t}dt, k > 0 Γ(k)=∫0∞tk−1e−tdt,k>0
- k 1 < = 1 k_1 <= 1 k1<=1,近似与指数分布
- k 1 > 1 k_1 > 1 k1>1,分布右倾
- k 1 > = 3 k_1 >= 3 k1>=3,近似正态分布
生成随机韦伯变量:
x = k 2 [ − l n ( 1 − u ) ] 1 / k 1 x = k_2\big[-ln(1 – u)\big]^{1/k_1} x=k2[−ln(1−u)]1/k1
例:变量 x x x为韦伯变量,参数 k 1 = 4 , k 2 = 10 k_1 = 4,k_2 = 10 k1=4,k2=10,随机变量生成过程如下:
- 生成随机均匀变量: u ∼ U ( 0 , 1 ) , u = 0.9 u \sim U(0, 1),u = 0.9 u∼U(0,1),u=0.9
- x = 10 × [ − l n ( 1 − 0.9 ) ] 1 / 4 ≈ 12.3183 x = 10 \times [-ln(1 – 0.9)]^{1/4} \approx 12.3183 x=10×[−ln(1−0.9)]1/4≈12.3183
- x ≈ 12.32 x \approx 12.32 x≈12.32
import numpy as np import matplotlib.pyplot as plt
def generate_weibull(k1=1, k2 = 10): u = np.random.uniform(0, 1) x = k2 * np.power(-np.log(1 - u), 1/k1) return x
vars_1 = [generate_weibull(k1=0.5, k2=10) for i in range(10000)] vars_2 = [generate_weibull(k1=1, k2=10) for i in range(10000)] vars_3 = [generate_weibull(k1=2, k2=10) for i in range(10000)] vars_4 = [generate_weibull(k1=3, k2=10) for i in range(10000)]
plt.figure(figsize=(12, 5)) plt.title("WeiBull") #plt.hist(vars_1, label='$k1=0.5$') plt.hist(vars_2, label='$k1=1$', alpha=0.5) plt.hist(vars_3, label='$k1=2$', alpha=0.5) plt.hist(vars_4, label='$k1=3$', alpha=0.5) plt.legend() plt.grid()

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213153.html原文链接:https://javaforall.net
