Re: [問題] 請問如何將FOR迴圈改寫成矩陣運算已回收

看板MATLAB作者 (Veritas)時間16年前 (2009/06/24 13:10), 編輯推噓6(609)
留言15則, 4人參與, 最新討論串3/3 (看更多)
※ 引述《hopebear (只想做自己)》之銘言: : 小弟實力不夠深 : 厚請高手開示 : 程式碼如下 : 非常感謝 : 如果無法改寫 麻煩請推文一下 : M1、U、N0皆為1x1的正整數,x為1x100的正整數,L1~L4為1xM1-1的正整數 : 最主要是計算出 D(a,b,c,d) 迴圈內的值 : 但是 D(a,b,c,d)矩陣牽連到 s4(d)、C(a,b,c)與 B(a,b)與 A(a)內的值 : for i=1:100 : for a=1:1:M1-1 : for b=1:1:M1-1-L1(a) : for c=1:1:M1-1-L1(a)-L2(b) : for d=1:1:M1-1-L1(a)-L2(b)-L3(c) 這四個迴圈跑的長度不同 所以並不 "方正" 要硬做成矩陣也可以 補零就好 這樣會浪費很多空間 不過本來矩陣就是在浪費空間的 做出來的矩陣大小大概為 100*(M1-1)^N N為迴圈的數目 在這個例子裡為4 不過看來你想做到16的樣子 不知道你的M1有多大 假設是11好了 那當N=4時 你的矩陣是10^6 Bytes ~ 1MB 當N=16時 你的矩陣是10^18 Bytes ~ 10^9GB ~ 10^6TB 所以應該做不下去.... 就算不用矩陣 我也懷疑在你有生之年是不是跑得完十六個迴圈 : end : end : end : end : R(i)=log2(U)/(U^3)*sum(sum(sum(sum(D)))); : end : 抱歉先前有些變數沒說明很清楚 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.54.153

06/24 14:16, , 1F
推最後一句XD
06/24 14:16, 1F

06/24 19:13, , 2F
感謝高手解答若M1=17其實FOR還跑的出來但M1越大跑出來的
06/24 19:13, 2F

06/24 19:13, , 3F
的可能性 唉....ORZ
06/24 19:13, 3F

06/24 19:50, , 4F
7869,眼睛@@,4個還勉強,但是在消去第四個迴圈後,想
06/24 19:50, 4F

06/24 19:56, , 5F
要消去第三個迴圈時,發現需要補零的問題。正如sunev大
06/24 19:56, 5F

06/24 19:56, , 6F
其實你要做的是改寫成c
06/24 19:56, 6F

06/24 20:00, , 7F
所說,迴圈中想要得到的矩陣已經太大了。這樣看,簡化
06/24 20:00, 7F

06/24 20:03, , 8F
是沒有意義的,但是後來我看到迴圈外面好長的sum...= =+
06/24 20:03, 8F

06/24 20:06, , 9F
那麼,直接把新算出的結果加到原有的結果上不就可以少用
06/24 20:06, 9F

06/24 20:08, , 10F
很多空間來保存中間運算了嗎?
06/24 20:08, 10F

06/24 20:55, , 11F
還有一個問題,為甚麼兩篇文的數學公式好像不完全一樣?
06/24 20:55, 11F

06/24 21:00, , 12F
究竟原始的數學公式是怎樣的呢?
06/24 21:00, 12F

06/25 02:45, , 13F
給我點時間 我會盡快貼出數學式
06/25 02:45, 13F

06/25 02:50, , 14F
先口頭敘述一下就是多重sigma*binopdf*函數
06/25 02:50, 14F

06/25 02:51, , 15F
抱歉有點簡略 我會盡快貼上
06/25 02:51, 15F
文章代碼(AID): #1AGRKhcY (MATLAB)
文章代碼(AID): #1AGRKhcY (MATLAB)