2017-08-17 58 views
-1

我想創建一個隨機矩陣,以便每列的總和爲1,並且每行按升序排列。我想要這個矩陣來解決以下問題:我有一個單元陣列P {k}(r,a),它的每個單元都是一個隨機矩陣,並且必須具有以下條件:如何在matlab中創建一個隨機矩陣,使每列的總和等於1,並且其行按升序排列?

1)在陣列的每個單元的矩陣的每一列應等於1個
∀k,一個Σp {ķ}(R,A)= 1

2)所述陣列中的矩陣的每一列之間的(r,a)> p {k}(r,a)

我寫了這段代碼,但沒有提供第一個條件離子:

clear all 
close all 
clc   
r=6 
a=6 
k=3 
p=cell(k,1) 
    for n=1:k 
    q=rand(r,a); 
    s=sum(q); 
    for i=1:a 
     q(:,i)=q(:,i)./s(i); 
    end 
    q 
    s=sum(q) 
    p{n}=q(:,:) 
end 
for i=1:a 
m=zeros(r,k); 
    for n=1:k 
    m(:,n)=p{n}(:,i) ;  
    end 
for j=1:r 
m(j,:)=sort(m(j,:)); 
end  
    sm=sum(m);  
      for n=1:k 
      p{n}(:,i)=m(:,n); 
      end 
    p{n}(:,i)=p{n}(:,i)./s(:,i) ;  
end 
p{1}(:,:) 
sa=sum(p{1}(:,:)) 
p{2}(:,:) 
sa=sum(p{2}(:,:)) 
p{3}(:,:) 
sa=sum(p{3}(:,:)) 
+2

你的意思是「行按升序排列」是什麼意思?你如何定義行的順序? –

+0

如果您得到的答案不符合您的需求,或許您的問題需要澄清。 [mcve]會有幫助。 – beaker

+0

你到目前爲止嘗試過什麼? – m7913d

回答

1

這可能工作,但隨機生成不統一。告訴我,如果它不是你想要的。

rowMax = 10; 
columnMax = 11; 

for i = 1:columnMax 
    val = 1; 
    for j = 1:rowMax-1 
    r = rand(); 
    M(i, j) = val*r; 
    val -= val*r; 
    end 
    M(i, rowMax) = val; 
    M(i, :) = sort(M(i, :)); 
end 
+0

嗨,這段代碼排列的行,但每列的元素總和沒有得到一個 –

+0

當你說「其列的總和是一個」,所有列的總和等於1或只是總和EACH列等於1? –

+0

只是EACH列的總和等於1 –

1

你可以試試這個代碼,

n=3;%Number of rows 
m=2;%Number of columns 
A =rand(n,m)% create a random matrix 
A_s=sort(A,2)% arrang/sort rows in ascending order 
A_n=normc(A_s)% Normalize columns of matrix (sum of A columns is one) 

如果你試試這個,你可能會得到這樣的事情,

A =

0.7572 0.5678 
0.7537 0.0759 
0.3804 0.0540 

A_S =

0.5678 0.7572 
0.0759 0.7537 
0.0540 0.3804 

A_N =

0.9868 0.6677 
0.1318 0.6646 
0.0938 0.3355 

代碼可以進一步簡化,但只是想講清楚。如果您有任何其他問題或需要進一步澄清,請讓我知道。

+0

在此代碼中,在對列進行歸一化之後,不會觀察行的順序,並且列的總和也不是一個。 –

+0

對於總和的歸一化,請將A_n = normc(A_s)替換爲A_n =(A_s)./ repmat(sum(A_s),[n,1]),那麼列的總和將爲1。 –

+0

對不起,我的答案很快。但是你描述它的方式不能解決你的問題。我相信你不能得到一個已經規範化列和排序行的矩陣。祝你好運 –

0

它可以是不可能的升序排序行,並享有平等的各列的總和爲1

鑑於男,一個MXN矩陣Matrix

你想Condition

但是,如果我在[1; n]中,Demonstration

所以,你找不到一個矩陣的總和等於1,並通過升序排列的行g訂單。

相關問題