2016-02-13 88 views
1

我有一個單元格數組,它是:A(1x2)。如何劃分一個單元格數組元素

我想把它的行列式除以數字。

W={[4,-2;-2,0.2],[4,-2;-2,0.2]} 

我可以採用W的行列式嗎?我怎樣才能把它分成一個數字?

如果我使用cell2mat()它會將它轉換爲一個矩陣,但它不會是一個對稱矩陣。 完整的代碼是:

W={[4,-2;-2,0.2],[4,-2;-2,0.2]}; 
N=size(W,1); 

S = cell(1,numel(W)); %% initialize S first 
nu = 9;  % don't assign constants inside the loop 
Arg=[nu-N+1:nu]; % don't assign constants inside the loop 
for i = 1: numel(W) 
S{i}=W{i}/nu; %% no parens here 
K=2^(nu*N/2)*pi^(N*(N-1)/4)*prod(gamma(Arg/2)); 
Wd = 1/K * (det(S{i})^(-nu/2) * (det(W{i})^((nu-N-1)/2) * exp(-1/2* trace(inv(S{i})*W{i})); %% removed lots of parens, added some curly braces 

+0

歡迎來到堆棧溢出! – gariepy

+0

試試這個:'cellfun(@ det,A)' –

+0

你期望輸出什麼?我不清楚這個問題。 – Daniel

回答

-1

首先,你的任務是不是很有效的MATLAB,讓我們將其更改爲:

W={[4,-2;-2,0.2],[4,-2;-2,0.2]}; 

,創建一個有效的單元陣列在MATLAB中。它有兩個元素,每個元素都是一個2x2矩陣。要在要素獲得取決定因素,你必須解引用他們,就像這樣:

det1 = det(W{1}) 
det2 = det(W{2}) 

注意花括號。如果你經常使用MATLAB索引,就像這樣:

det1 = det(A(1)) %% DOESN'T WORK 

你會得到一個錯誤,因爲DET()不會對電池陣列工作。需要去引用花括號來移除外層(單元陣列)並進入內層(矩陣)。

受到一些分裂,你只是做正常師:

det1 = det1/my_number; 

,當然,你可以做這一切在一個聲明:

det1 = det(A{1})/my_number; 

編輯:分割矩陣由一個數字,只是分裂!編輯2:你的代碼消失了,但我從你的編輯歷史中檢索到了,我認爲主要的問題是讓你的引用正確。這裏是一個更正的版本:

W={[4,-2;-2,0.2],[4,-2;-2,0.2]}; 
N=size(W,1); 

S = cell(1, numel(W)); %% initialize S first 
nu = 9;  % don't assign constants inside the loop 
Arg=[nu-N+1:nu]; % don't assign constants inside the loop 
for i = 1: numel(W) 
    S{i}=W{i}/nu; %% no parens here 
    K=2^(nu*N/2)*pi^(N*(N-1)/4)*prod(gamma(Arg/2)); 
    Wd = 1/K * (det(S{i})^(-nu/2) * (det(W{i})^((nu-N-1)/2) * exp(  -1/2*trace(inv(S{i}*W{i})); %% removed lots of parens, added some curly braces 
end 
+0

downvote?真的嗎? – gariepy

+0

我試過det()它的工作,但我面臨的另一個問題是:S = W {1} /我的號碼?不工作:( –

+0

除非我誤解了您的問題,否則標準的分工操作員應該工作(請參閱修改後的答案)。如果這不起作用,請發佈您正在使用的確切代碼,我們可以爲您進行調試 – gariepy

相關問題