2014-01-23 66 views
2

我想做

我想創建生成一個隨機矩陣爲n×n(二維數組),關於這一點我必須做出計算其元素的程序是什麼是對稱其主對角線和每行的總和等於1二維數組對稱的主對角線行的總和等於1

詳細

我已經嘗試了太多的算法,但沒有一個是正常的,我可以通過鍵入

for i=1:n 
    n=rand(100); 

    for j=1:n 

     if(j>i) 
      matrix(i,j) = rand(100); 
      matrix(j,i)=matrix(i,j); 
     else if (j==i) 
     matrix = rand(100); 
     end 
    end 
end 
做對稱矩陣

我也可以通過查找每行的總和,然後將每個元素與該行的總和相除,然後當我使行的總和等於1時,矩陣的行的總和等於1

for i=1:n 

    for j=1:n 
     matrixS(i,j) = matrix(i,j)/sum(i); % The vektor of the row sums is made by another algorithm 
    end 
end 

問題

問題是,當我想使這個陣列與我提到的所有特性,每行等於1,矩陣是對稱的由主對角線

任何想法?

+1

你想隨機矩陣或你想要一個具有特定值的隨機矩陣(它不是隨機的)?我不明白這裏的問題。 – hesar

+0

Hesa​​r thnx您的問題!這個想法是,我想要生成一個具有以下特徵的矩陣:對稱是指主對角線,並且此矩陣的每一行都具有等於1的總和。 – EridB

+2

當您說「隨機」時,您需要指定您的分佈想要(統一?) –

回答

2

如果這是足夠隨機的,您可以生成隨機對角線元素對稱矩陣,然後調整對角線,這樣的行(和列)總和等於1

n = 4; 
randMat = zeros(n); 
randMat(tril(true(n),-1)) = rand(n*(n-1)/2, 1); %# fill in some values 
randMat = randMat + randMat'; %# make symmetric 
randMat(eye(n)>0) = 1 - sum(randMat,2); %# adjust diagonal 

%# Example 

randMat = 

    -0.7829 0.2785 0.5469 0.9575 
    0.2785 -0.4010 0.9649 0.1576 
    0.5469 0.9649 -1.4824 0.9706 
    0.9575 0.1576 0.9706 -1.0857 

>> sum(randMat) %# the same as sum(randMat,2)' 

ans = 

    1.0000 1.0000 1.0000 1.0000 
+0

......但這不符合要求' sum(diag(randMat))== 1' * or *'sum(randMat,2)== 1' –

+0

是的,正如Rody所說的那樣,它是對稱的,但沒有等於1的行的總和 – EridB

+0

@RodyOldenhuis:hehe,是。固定 – Jonas