注册 登录
编程论坛 Matlab

求救,矩阵随机分布问题

tkovampire 发布于 2007-03-22 18:30, 1126 次点击
求矩阵A的随机分布,且使矩阵A中各元素的平均值为一常数,计算量又不能过大,该如何处理?
请高手指教,急!!!
5 回复
#2
尘埃1222007-03-23 08:56

呵呵,是不是要看你需要产生何种随机分布?

如果是需要产生正态分布的随机数你可以用normrnd('均值',‘标准差’,‘行数’,‘列数’)

A=normrnd(2,0.5,50,50); %产生均值为2,标准差为0.5的50*50矩阵A

B=reshape(A,50*50,1);

mean(B) %求矩阵均值

std(B) %求矩阵标准差

呵呵,不过产生结果不一定完全就是2和0.5,毕竟是随机数有一定的偏差在里面

你可以试试,如果想产生其他分布的随机数,找找对应分布函数命令就可以了

你也可以参考random函数

#3
tkovampire2007-03-23 10:59
谢谢楼上的,我用rand函数写了一段代码,
aveden=0;
while(aveden~=0.25)
iniden=rand(nx,ny)<0.3;
ave=sum(iniden(:,:));
aveden=ave./(nx*ny)
end
我想得到的平均值为0.25,求一个iniden矩阵的随机分布,可得到的iniden矩阵中的值总是0或1,我希望得到的值在0.3以下,该如何处理呀?

非常感谢!
#4
尘埃1222007-03-23 17:59

呵呵,问题出在“iniden=rand(nx,ny)<0.3;”这句话上

最后iniden保存的是:如果rand(nx,ny)中的值<0.3为1(真),反之则为0(假),这和C语言类似,结果就是iniden中保存的都是0或1的逻辑值,而不是一般意义上的数值

A=rand(2,2)

A =

0.2618 0.7839
0.7085 0.9862

iniden=A<0.3

iniden =

1 0
0 0


这能帮助你理解

如果你想产生值都在0.3以下的矩阵,不妨试试

B=rand(4,4)*0.3

B =

0.1420 0.2487 0.2154 0.0263
0.2708 0.0499 0.1708 0.1330
0.1353 0.1182 0.1382 0.1099
0.2414 0.1562 0.1336 0.0908

呵呵,希望这样能解决你的问题




#5
尘埃1222007-03-23 18:04

如果你想产生均值为0.25,并且所有值都小于0.3的矩阵

可以用

>> normrnd(0.25,0.03,5,5)

ans =

0.2944 0.2401 0.2246 0.2464 0.2370
0.2841 0.2247 0.2426 0.2480 0.2476
0.2295 0.2649 0.2699 0.2646 0.2961
0.2112 0.2947 0.2244 0.2321 0.2318
0.2478 0.2336 0.2140 0.2455 0.2096


呵呵,不知道我理解得对不对

[此贴子已经被作者于2007-3-23 18:06:25编辑过]

#6
zhangenter2007-03-23 19:24
aveden=0;
while(aveden~=0.25)
iniden=rand(nx,ny) ;
iniden(iniden>=0.3) = 0.25 ;
ave=sum(iniden(:,:));
aveden=ave./(nx*ny)
end
1