2011-11-02 48 views
0

代碼創建單元陣列中的單元陣列: Array of Matrices in MATLAB [!謝謝胡沙姆阿里]加入細胞取自矩陣

功能是:

function result = createArrays(nArrays, arraySize) 
    result = cell(1, nArrays); 
    for i = 1 : nArrays 
     result{i} = zeros(arraySize); 
    end 
end 

我的代碼:

a=createArrays(49,[9,9]); 

    a{1}(1,1) = 0.01 + 1.*rand(1,1); 
    a{1}(2,2) = 0.01 + 1.*rand(1,1); 
    a{1}(3,3) = 0.01 + 1.*rand(1,1); 
    a{1}(4,4) = 0.01 + 1.*rand(1,1); 
    a{1}(5,5) = 0.01 + 1.*rand(1,1); 
    a{1}(6,6) = 0.01 + 1.*rand(1,1); 
    a{1}(7,7) = 0.01 + 1.*rand(1,1); 
    a{1}(8,8) = 0.01 + 1.*rand(1,1); 
    a{1}(9,9) = 0.01 + 1.*rand(1,1); 

我不能使用a {:}(1,1)來引用所有矩陣。 Matlab在使用循環時發現使用{}意外括號。

我想保留對角線上面的格式。我該怎麼辦?

回答

1

我能看到的最好的事情就是通過你所有的細胞循環:

for i = 1:49 
a{i}(1,1) = ... 
end 

但是,爲什麼使用電池時,你可以做一個三維矩陣?

a = zeros(49,9,9); 

a(:,2,2) = something 
+0

我的代碼的其餘部分需要將矩陣存儲在單元格數組中。答案的第一部分有用,謝謝! – Tetra

+0

好的,但第二種方法是更快,如果速度成爲一個因素有一天 – Smash

+0

知道了:)謝謝! – Tetra

1

要填充對角線元素,您不必一個接一個地去做。改用EYE函數。

c1 = 1; 
c2 = 0.01; 
for i = 1:numel(a) 
    a{i} = eye(size(a{i}) * c1 + c2; 
end 
+0

啊,我明白了。只是每個對角元素都是不同方程的結果。感謝您的建議! – Tetra