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