Re: [問題] 矩陣相關問題

看板MATLAB作者 (eji)時間11年前 (2013/12/27 12:05), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/4 (看更多)
※ 引述《yayaya0415 (雅雅)》之銘言: : 各位大大好,小女~~我是MATLAB的新手~~最近在寫論文的程式,遇到問題了 : 希望各位大大可以幫幫小女的忙~~ : 以下是我遇到的問題 : Cj是一個4X5,5X6,6X7.........的矩陣 : j=0:2 : Cj的矩陣會隨著j逐漸變大 : 我希望結果可以列出Cj矩陣 : C0= 4 0 0 0 : 0 4 0 0 : 0 0 4 0 : 0 0 0 4 : 0 0 0 0 : C1= 4 0 0 0 0 : 0 4 0 0 0 : 0 0 4 0 0 : 0 0 0 4 0 : 0 0 0 0 4 : 0 0 0 0 0 : C2= 4 0 0 0 0 0 : 0 4 0 0 0 0 : 0 0 4 0 0 0 : 0 0 0 4 0 0 : 0 0 0 0 4 0 : 0 0 0 0 0 4 : 0 0 0 0 0 0 : 以上是我的問題 : 目前我是用笨方法~ : 已知mu2=4 : for i=1:8; : CBIG(i,i)=mu2; : end : C0= CBIG(3:8,3:7) : C1= CBIG(2:8,2:7) : 我設一個大的C矩陣 叫CBIG 從中擷取一小部份我要的C0.C1小矩陣 : 未來矩陣要更大 這種笨方法~~~~~~不行了~~ : 所以請各位大大幫幫小女!!!小女感激不盡!!!!!!!!!!!!!!!! 抓到規則就可以暴力把C0到Cn都產生出來 以下產生到C5 for i=0:5 eval(['C',num2str(i),'=diag(ones(',num2str(i),'+5,1)*mu);']); eval(['C',num2str(i),'(:,end)=[];']); end 而妳原本產生大矩陣再擷取也不算笨方法 這樣效率反而更好 CBIG=diag(ones(5+5,1)*mu); for i=0:5 eval(['C',num2str(i),'=CBIG(1:i+5,1:i+4);']) end 另外以妳的矩陣型態 或許可以考慮宣告稀疏矩陣 或者是乾脆不宣告矩陣直接抓指標計算 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.146.175

12/27 16:48, , 1F
謝謝你 我已經成功試出來了 你的回答對我很有幫助
12/27 16:48, 1F
文章代碼(AID): #1IlFoaoD (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1IlFoaoD (MATLAB)