统计机器学习导论第十六章非参数估计——对概率密度函数进行逆变换采样

n=10000; x=myrand(n); s=0.1; b=[0:s:5];
figure(1); clf; hold on
a=histc(x,b); bar(b,a/s/n,'histc')

function x=myrand(n)

x=zeros(1,n); u=rand(1,n);
t=(0<=u & u<1/8); x(t)=sqrt(8*u(t));
t=(1/8<=u & u<1/4); x(t)=2-sqrt(2-8*u(t));
t=(1/4<=u & u<1/2); x(t)=1+4*u(t);
t=(1/2<=u & u<3/4); x(t)=3+sqrt(4*u(t)-2);
t=(3/4<=u & u<=1); x(t)=5-sqrt(4-4*u(t));

在这里插入图片描述

这段代码实现了以下功能:

1. 定义了一个变量 `n` 并赋值为 100002. 调用函数 `myrand(n)` 生成一个长度为 `n` 的随机数列,并将结果存储在变量 `x` 中。
3. 定义了一个变量 `s` 并赋值为 0.14. 使用起点为 0、步长为 `s`、终点为 5 的序列创建了一个变量 `b`,即 `[0, 0.1, 0.2, ..., 5]`。
5. 创建一个新的图形窗口,并设定窗口编号为 16. 清除当前图形窗口中的内容。
7. 在图形窗口中绘制直方图,并用直方图的高度除以 `s` 和 `n` 的乘积进行归一化,以显示随机数 `x` 的分布情况。
8. 定义了一个名为 `myrand` 的函数,该函数接受一个参数 `n`。
9. 在 `myrand` 函数中,首先创建一个长度为 `n` 的零向量 `x`。
10. 生成一个长度为 `n` 的随机数列 `u`,取值范围在 [0, 1) 之间。
11. 根据一系列条件语句,将根据不同的随机数值生成对应的 `x` 的值。
    - 如果随机数 `u` 的值在 [0, 1/8) 范围内,则将 `x` 的对应位置设置为 `sqrt(8*u)`。
    - 如果随机数 `u` 的值在 [1/8, 1/4) 范围内,则将 `x` 的对应位置设置为 `2-sqrt(2-8*u)`。
    - 如果随机数 `u` 的值在 [1/4, 1/2) 范围内,则将 `x` 的对应位置设置为 `1+4*u`。
    - 如果随机数 `u` 的值在 [1/2, 3/4) 范围内,则将 `x` 的对应位置设置为 `3+sqrt(4*u-2)`。
    - 如果随机数 `u` 的值在 [3/4, 1] 范围内,则将 `x` 的对应位置设置为 `5-sqrt(4-4*u)`。
12. 返回生成的随机数列 `x`。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值