Re: [討論] 有關rand(1)和rand(100)的差別

看板MATLAB作者 (Jong)時間10年前 (2014/11/26 21:37), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
※ 引述《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均勻的經過一個亂數分配? 若有任何指教和建議還請不吝分享,非常感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.46.212 ※ 文章網址: http://www.ptt.cc/bbs/MATLAB/M.1417009028.A.FE3.html ※ 編輯: hwwwh (140.113.46.212), 11/26/2014 21:39:06
文章代碼(AID): #1KTTU4_Z (MATLAB)
文章代碼(AID): #1KTTU4_Z (MATLAB)