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));
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/25411cd0c7f79a432637ae66f2dc6322.jpeg)
这段代码实现了以下功能:
1. 定义了一个变量 `n` 并赋值为 10000。
2. 调用函数 `myrand(n)` 生成一个长度为 `n` 的随机数列,并将结果存储在变量 `x` 中。
3. 定义了一个变量 `s` 并赋值为 0.1。
4. 使用起点为 0、步长为 `s`、终点为 5 的序列创建了一个变量 `b`,即 `[0, 0.1, 0.2, ..., 5]`。
5. 创建一个新的图形窗口,并设定窗口编号为 1。
6. 清除当前图形窗口中的内容。
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`。