任何語言動起手來都是很有趣的

2021-05-28 09:12:46 字數 2659 閱讀 6858

今天主要動手實現了下**《a real-time subcarrier allocation scheme for multiuser access````》的**部分,實現了對各個使用者子載波進行排序,進行標號,通道增益最大的表為1,其次的表為2,一次類推,具體matlab**如下

function result = matrixsort(matrix)

[m,n] = size(matrix);

temp = matrix;

temp = temp';

result = zeros(n,m);

for i=1:n

[y,i] = max(temp);

for j = 1:m

result(i(j),j) = i;

temp(i(j),j) = 0;

endif(temp == zeros(n,m))

break;

endendresult = result';

這個其實沒什麼難度,比較難的matlab都給我們封裝好了,只需我們呼叫就好了。比如,找到最大值所在的位置

備註:其實這樣正好為後面的分配打下了基礎:子載波分配的乙個約束條件,每乙個子載波只能分配給乙個使用者

排完序之後,還需要分配,這樣就需要找到每乙個子載波中的最大的增益那個

具體的**如下:可是在matlab7.0的環境中執行,如果不設斷點的話,執行起來總是計算遙遙無期,cpu使用率達到60%以上,還退不出來,只能任務管理器中強制退出,說明我的**裡面有很多bug

function result = initialalloction(channelgainsortn,eedsubnumber)

%使用排序好的通道增益順序表,來預分配

%%分配的原則是遍歷每一列,按照優先順序來分配

%分配達到每個使用者目標的數量

clcchannel = rand(4,20);

channelgainsort = matrixsort(channel);

[m,n] = size(channelgainsort);

result = zeros(m,n);

needsubnumber = 5; %暫定每個使用者需要5個子載波

usersubtotal = zeros(m,1);

for i = 1:n

[y,i] = min(channelgainsort(:,i));

if (usersubtotal(i) < needsubnumber)

result(i,i) = 1;

endif(usersubtotal(i) == needsubnumber)

continue;

endusersubtotal = sum(result,2);

end%下面是整理那些初次分配之後還沒有分配出去的子載波

temptotal = sum(result,1); %在完全分配的情況下,應該是乙個1矩陣

while min(temptotal) ~= 1

b = find(temptotal == 0); %用b來記錄那些每一列和還是0的位置

leftsubnumber = length(b);

c = find(usersubtotal < needsubnumber); %找到那些仍需要子載波的使用者

for i = b

tempmin = n+1; %這裡是要設定乙個初始的值n+1

%因為每次排序最大的值是n

for j = c

if(tempmin > channelgainsort(j,i))

tempmin = channelgainsort(j,i);

xlabel = j;

ylabel = i;

endend %這次迴圈之後找到了剩下的列數

%中的最大的增益

usersubtotal = sum(result,2);

if(usersubtotal(xlabel) ~= needsubnumber)

result(xlabel,ylabel) = 1;

endtemptotal = sum(result,1);

endendusersubtotal = sum(result,2);

result

usersubtotal

這個**裡面顯示設定乙個每個使用者需要的最忌子載波數量,然後依次去分配

在第乙個迴圈結束之後,可能還有些沒有分配出去,這是因為有可能某個使用者在該載波上的增益最大,但是她已經達到所需的子載波數了,因此只能讓賢,但這時候僅僅在那個迴圈裡面是不能找到分配給誰,因此需要第二個迴圈。

我的問題就是出在第二個迴圈那裡,如果不設斷點的話,似乎進入死迴圈,很鬱悶

還有乙個cost function沒有解決,明天繼續奮鬥······

晚上的時候去聽了課,感覺自己真的是比那些有心人落下了,人家看著詞彙能那麼流利的說出來,我很汗顏啊,不過自己還有機會,加油!!!

男生就是需要增長自己的本領,擁有活躍的大腦和強壯的身體。

任何一門語言思考的

1 第乙個hellowolrd程式。輸出 2 互動程式。如何從檔案讀取,從鍵盤讀取,輸出到檔案,輸出到螢幕。io 3 for迴圈,break,continue等 流程控制程式 4 函式呼叫方面 如何函式呼叫,模組呼叫 4 與資料庫打交道的類或模組 資料庫讀取方面 5 異常處理方面 6 物件導向方面 ...

微控制器C語言任何位置跳轉到任何指定位址 轉

用c語言寫的程式為求模組化,一般函式數量較多,函式呼叫的巢狀層數也多,要從乙個較深的巢狀立刻跳出到主函式,是非常困難的。用break或者return是跳不出來的,一般的解決方法或是使用c51的庫函式setjmp 和longjmp 實現長跳轉,但是這兩個函式在中斷函式內部是無能為力的 再或是在c函式中...

學習c 的50條忠告 本人覺得適用任何語言

這原本是乙個很老的帖子了,我今天之所以翻出來,是因為感覺很多和 我一樣尚未怎麼入門的人,可能真的很需要這些忠告。當然如果你是真 正的高手,你大可不看下面的這些文字。但是句我所只,似乎在程式設計這 條路上是沒有止境的,也不存在最終的高手。1.把c 當成一門新的語言學習 和c沒啥關係!真的。2.看 th...