a=-1; %分布左端,小于0的值
b=2; %分布右端,大于0的值
h=2/(b-a); %三角形高
k1=-h/a; %前半段斜率
k2=-h/b; %后半段斜率
invcdf=@(s)(sqrt(2*s/k1)+a).*(s<=-a*h/2)+...
(b-sqrt(2*(s-1)/k2)).*(s>-a*h/2);%cdf逆函数
N=10000; %随机数数量
RV=invcdf(rand(1,N)); %随机变量数列
K=50; %统计区间数量
xx=linspace(a+(b-a)/K/2,b-(b-a)/K/2,K);
n = hist(RV,xx); %统计变量不同区间出现数量
p=K*n/N/(b-a); %不同区间出现的概率
x=[a 0 b];y=[0 h 0]; %pdf图像
bar(xx,p,1);hold on
plot(x,y,'r','linewidth',2);hold off
xlabel('x');
ylabel('probability');
legend('probability histogram','theoretical pdf');