2011-07-26 18 views
0

matlabでは、マトリックスを宣言しなければなりません。どうすればいいですか?たとえば、できますかMatlab - 動的インデックス作成

function res = compute() 
    res(1) = 1; 
    res(2) = 2; 
end 

または最初にresを宣言する必要がありますか?

答えて

1

はい。いろいろな方法がありますが、最初に配列を宣言する方法を学ぶことから始めることができますhere。あなたは、配列/行列を宣言する必要はありません

res = [1,2]

1

:あなたのような何かをしようとしているようなあなたの場合には

、それが見えます。あなたが今持っているものはうまくいくでしょう。あなたの行列を宣言する必要はありません

あなたは常にmatrix = []

でもスゴと空行列を宣言することができ、あなたは

a = 

    0  0  0 
    0  0  7 
2

その結果

a(2,3) = 7 

のようなものを行うことができますmatlabで。あなたのコードは動作します。

マトリクスにonesまたはzerosを使用してメモリを事前に割り当てた方が一般的に高速です。そうしないと、Matlabは行列のサイズが変わるたびにメモリを再割り当てしなければなりません。

% Slow 
x(1) = 3; % x is now 1 by 1 
x(5) = 9; % Matlab has to reallocate memory to increase x to be 1 by 5 
x(10) = 2; % And another reallocation to increase x to be 1 by 10 

% Better 
y = zeros(1,10); % preallocate memory for the matrix 
y(1) = 3; 
y(5) = 9; 
y(10) = 2; 

% One-liner 
z([1 5 10]) = [3 9 2]; % you can assign multiple values at once 

事前割り当てはあなたがループ

のために使用する必要はありませんので、あなたは、コードをベクトル化することができた場合であっても良く、ループ

a = zeros(1,100) 
for i=1:100 
    a(i) = i^2; 
end 

を使用する必要があり、ほとんどのときに役立ちます

a = (1:100).^2;