matlab 如何生成指定分布的随机数?

matlab 如何生成指定分布的随机数?,第1张

抄别的一个函数给你吧:

=========================================

function y=dis_rand(x,p,n)

%dis_rand 产生离散分布随机数

% x:可能取值

% p:取值概率

% n:拟生成随机数的数目

cp=cumsum(p)

y=zeros(1,n)

for i=1:n

y(i)=x(sum(cp<=rand(1))+1)

end

算法说明:利用matlab中的rand函数获取区间[0,1]上均匀分布的随机数,根据希望的分布律把[0,1]区间分段,各段的长差宽腔度依次为随机数取各个虚衫可能值的概率。当那个均匀分布的随机数落在其中第i个小段上时,就把第i个可能取值输出。

=========================================

你的问题这样调用:

y=dis_rand([0 0.5 1],[1/3 1/3 1/3],100)

即按照你要巧悔的概率从0,0.5,1三个数字中产生100个随机数。但我看了下因为rand本身在样本数少的时候就不是很准确,这样100个样本下,1/3概率还是有明显偏差的。不过所有概率方面的东西要在小样本下都很难”准确“了。

调试程序时世团,随机数种子可以设常数,例如srand(54321)

用帆返绝 rand() 产生均匀分布随机数 x1,x2

利用瑞利分布得正态分布随机数 y1,y2

再按要求线态姿性缩放一下到[0.01,2] 区间。

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <time.h>

main(){

#define N 100

double rd[N]

double x1,x2,y1,y2

double pi2=6.28318530728,mx,mi,ave=0

int i

//srand(54321)

srand(time(NULL))

for (i=0i<=N-2i=i+2){

x1=1.0*rand()/RAND_MAX

x2=1.0*rand()/RAND_MAX

y1= sqrt((-2.0*log(x1))) * cos(pi2*x2)

y2= sqrt((-2.0*log(x1))) * sin(pi2*x2)

rd[i]=y1

rd[i+1]=y2

}

mx=rd[0]mi=rd[0]

for (i=0i<Ni++){

if (rd[i]>mx)mx=rd[i]

if (rd[i]<mi)mi=rd[i]

}

//printf("mi=%lf mx=%lf\n",mi,mx)

for (i=0i<Ni++) rd[i] = (rd[i]-mi)/(mx-mi+0.001) * (2.0-0.01) + 0.01

for (i=0i<N-2i=i+2) printf("%lf %lf\n",rd[i],rd[i+1])

return 0

}

不用加分,我做过,用来产生图像的高斯噪声,也就是你要的正态分布.

1.首先你的样本应该是有一咐迟定范围的吧,我假设它是从1-255

2.根据你的方差和期望,把样本代进去,算出该样本出现的概率

3.然后根据概率知识,你做一个累积概率

4.接着你用随机数产生一个0-1之间的均匀分布

5.看这个衡竖李数落在哪个累积概纤册率区间

6.按你要的样本数重复4-5

代码这里我给个matlab程序你参考一下,很好懂的

function [dest] = GeneGauss(expectation,deviation,width,height)

dest=zeros(width,height)

pz=zeros(256)

tempConst1=1/(sqrt(2*pi)*deviation)

tempConst2=2*deviation*deviation

for i=1:256

pz(i)=tempConst1*exp(-(i-1-expectation)^2/tempConst2)

end

f=zeros(256)

f(1)=pz(1)

for i=2:256

f(i) = f(i-1)+pz(i)

end

for i=1:width

for j=1:height

n=rand

for k=1:256

if(n<f(k))

dest(i,j)=k-1

break

end

end

end

end

end


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12445284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存