[問題] for迴圈太多 該如何改寫已回收

看板MATLAB作者 ( )時間15年前 (2010/04/14 19:43), 編輯推噓2(207)
留言9則, 5人參與, 最新討論串1/1
由於以前畢業的學長 寫了matlab程式 可是迴圈用了六七個 參數小的時候還好~ 只有3.4個迴圈 一兩分鐘就出來了 可是這個參數為7 就跑了好久 大約一天多了 因為這不是我的架構以及寫的程式~也不是很常碰matlab 所以改起來非常頭痛~ 不知道有沒有辦法利用其他的寫法 可以讓這個複雜的呼叫 可以簡單一些呢? 不好意思~ 因為真的不太瞭程式裡面在做什麼 而且matlab在我自己做的方向幾乎沒用到~ -----------感謝各位--------- clear all; clc; tic p=7;%prime 值 n=7;%M-sequence 值 w=p*(n+1)/2; %threshold 值 U=p*(p-1)*n;%User number S=[]; ini=7; %同時使用者初值 fin=294; %同時使用者終值 for user=ini:fin %active user number U1=[]; u=U/n; for u1=0:u for u2=0:u for u3=0:u for u4=0:u for u5=0:u for u6=0:u u7=user-u1-u2-u3-u4-u5-u6; if u7>=0 if u7<=u S(1,1)=u1; S(1,2)=u2; S(1,3)=u3; S(1,4)=u4; S(1,5)=u5; S(1,6)=u6; S(1,7)=u7; U1=[U1;S]; end end end end end end end end [x,y]=size(U1); q=(1/2)*p/(2*p^2-1); for b=1:x,a=0; k=U1(b,1); if k<p U2(b,1)=0; elseif k==u U2(b,1)=0; else for i=p:k a=a+(1/2)*factorial(k)/(factorial(i)*factorial(k-i))*q^i*(1-q)^(k-i); end; U2(b,1)=a; end end U3=sum(U2)/x; er(user-ini+1)=U3; end; t=ini:fin; semilogy (t,er,'r*') %bar:長條圖 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.163.243 ※ 編輯: fukada0916 來自: 140.116.163.243 (04/14 19:45)

04/14 20:08, , 1F
先看一下 u7=user-u1-u2-u3-u4-u5-u6; 的下一行就怪怪的
04/14 20:08, 1F

04/14 20:09, , 2F
接著是 if u7>=0 再接著是 if u7<=u 感覺這在做白工
04/14 20:09, 2F

04/14 20:11, , 3F
還是從程式目的來看 改起來比較合宜
04/14 20:11, 3F

04/14 20:13, , 4F
同意 感覺做白工@@
04/14 20:13, 4F

04/14 22:47, , 5F
乍看之下 u1~u7都是一樣的東西 u2可以從u1始跑
04/14 22:47, 5F

04/14 22:48, , 6F
減少一下排列組合中 重複的部分
04/14 22:48, 6F

04/14 22:48, , 7F
u3從u2 u4從u3....
04/14 22:48, 7F

04/15 09:00, , 8F
而且整個迴圈只是記錄七個數字?? @@
04/15 09:00, 8F

04/15 10:26, , 9F
應該是利用U1=[U1;S]紀錄所有的解
04/15 10:26, 9F
文章代碼(AID): #1BnQfE1L (MATLAB)