Re: [讨论] 有关rand(1)和rand(100)的差别

楼主: hwwwh (Jong)   2014-11-26 21:37:05
※ 引述《CBET ( )》之铭言:
: 做个实验就可以确定是一样的
: 但要注意 Matlab 是 column major
: 使用小一点的矩阵(例:2x2)也可以直接观察出来
: - -
: rng('default') % 重设 random seed
: A = rand(100);
: rng('default') % 重设 random seed
: B = zeros(100);
: for colIdx = 1 : 100
: for rowIdx = 1 : 100
: B(rowIdx, colIdx) = rand;
: end
: end
: all(A(:) == B(:))
先谢谢板上前辈的各种回应和意见,我想要先说明我的目的。
基本目的和想法说明如下:
(p.s.) c1,c2,c3,c4为背景常数(随背后参数改变而改变,会出现小数))
___________
我想要把F2(u,v)这个矩阵上每一个元素都乘上一个乱数,但这乱数必须是均匀分布。
F2(u,v)=F1(const1*u+const2*v)
因为F2(u,v)会去抓F1中的u和v,而u和v又不一定是整数,
所以我的做法是分层。
把F1(u,v)写成如下表示:
function [F1]=F1(u,v)
if u==0&&v==0
F1=0;
if u==0%%v~=0
F1=u+v;
else
F1=u-v;
end
这想法有点像是把F1先算好放在脑海里,
然后找出F2中要的u和v对应到F1中得什么u和什么v就把他抓出来。
比如说F2(2,2)假设等于F1(3.2,3),
那就回去抓F1(3.2,3)并得到0.2这个值。
====以上都是前情提要====
问题来了,如果要处里乱数矩阵这项,
一开始直觉最简单的方式就是把F1中每项结果都乘上rand:
function [F1]=F1(u,v)
if u==0&&v==0
F1=0;
if u==0%%v~=0
F1=(u+v)*rand;
else
F1=(u-v)*rand;
end
但最后验算发现和已知物理现象不符,所以我才会上来问这个问题。
当然我这边为什么不在得到F2后再处理是有原因的,
上述这个只是我简化过的概念而已,
而也是因为手上这个题目其物理上不可在得到F2后再做乱数处理才让我如此头痛。
后来有个想法
因为我会把F2从F1取出一个401x401的矩阵,
所以我可以在一开始就输入一个rand(401)的矩阵,
然后均匀分配好哪些u,v用的是rand矩阵中的哪一个乱数,
也许可以弄个近似乱数这样。
写完之后发现应该可行但循环判定却造成非常耗时(数十分钟),
因此也非常不实用。
所以我的想法还是回到上面那个每次抓都乘上一个rand的想法,
我不确定问题出在哪,
所以我的问题就是要怎么样
才可以让这个方法实现且意义上等同于把矩阵F2均匀的经过一个乱数分配?
若有任何指教和建议还请不吝分享,非常感谢!

Links booklink

Contact Us: admin [ a t ] ucptt.com