请用rand1To5实现等概率随机产生1~7的随机函数rand1To7

public class rand1to5 {
/*
* 给定一个等概率随机产生1~5的随机函数rand1To5如下 public int rand1To5() { return (int)
* (Math.random() * 5) + 1; } 除此之外不能使用任何额外的随机机制,
* 请用rand1To5实现等概率随机产生1~7的随机函数rand1To7。
*/
public int rand1To5() {
return (int) (Math.random() * 5) + 1;
}

public int rand1To7() {
    int num = 0;
    do {
        num = 5 * (rand1To5() - 1) + rand1To5() - 1;// 0-24
    } while (num > 20); // 把21 22 23 24 的概率平摊到0-20上
    return num % 7 + 1;
}
// 拓展: 1-m 等概率 转化成 等1-n概率 问题
// 实质就是看 把 m 看成m进制 n<m 则 m进制能装下n
// m>n 扩充成m^2 也就是增加一位 看能不能放下n 以此类推

// 给定一个以p概率产生0,以1-p概率产生1的随机函数rand01p如下:
// 除此之外不能使用任何额外的随机机制,请用rand01p实现等概率随机
// 产生1~6的随机函数rand1To6。
public int rand01p() {
    // you can change p as you like
    double p = 0.83;
    return Math.random() < p ? 0 : 1;
}

public int rand01() {
    int num = 0;
    do {
        num = rand01p();
    } while (num == rand01()); // 01 和 10 产生的概率是相同的 把1看做01 0看做10
    return num == 1 ? 1 : 0;
}

public int rand0To3() {
    return rand01() * 2 + rand01();
}

public int rand1To6() {
    int num = 0;
    do {
        num = rand0To3() * 4 + rand0To3();
    } while (num > 11);
    return num % 6 + 1;

}
// 其实就是一个扩大 补位 然后筛选的过程

}

在Matlab中,我们可以使用内置的随机信号生成函数来模拟典型的随机信号。以下是一些常见的随机信号模拟示例: 1. 高斯白噪声信号 高斯白噪声信号是一种具有平均值为0、方差为1的随机信号。在Matlab中,我们可以使用randn函数生成高斯白噪声信号。 ```matlab N = 1000; % 信号长度 x = randn(N, 1); % 生成高斯白噪声信号 plot(x); % 绘制信号波形 ``` 2. 随机步进信号 随机步进信号是一种随机变化的离散信号,每个样本值都是相邻样本值的随机步进。在Matlab中,我们可以使用randi函数生成随机步进信号。 ```matlab N = 1000; % 信号长度 x = randi([-1, 1], N, 1); % 生成随机步进信号 x = cumsum(x); % 对信号进行累加 plot(x); % 绘制信号波形 ``` 3. 均匀分布随机信号 均匀分布随机信号是一种具有均匀分布的随机信号,其取值范围在一定区间内等概率分布。在Matlab中,我们可以使用rand函数生成均匀分布随机信号。 ```matlab N = 1000; % 信号长度 a = -1; % 信号最小值 b = 1; % 信号最大值 x = a + (b-a)*rand(N, 1); % 生成均匀分布随机信号 plot(x); % 绘制信号波形 ``` 4. 指数分布随机信号 指数分布随机信号是一种具有指数分布的随机信号,其概率密度函数为$f(x)=\lambda e^{-\lambda x}$。在Matlab中,我们可以使用exprnd函数生成指数分布随机信号。 ```matlab N = 1000; % 信号长度 lambda = 0.5; % 指数分布参数 x = exprnd(1/lambda, N, 1); % 生成指数分布随机信号 plot(x); % 绘制信号波形 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值