-1

私はすでにコードを書いており、コードは以下のとおりです。

r=16;
n=10;
w=[3 5]


R2=n;
R3=floor(r/w(2))*w(2);
R4=floor(r/w(3))*w(3);


[A2,padded]=vec2mat(vec(1:R2),w(1));
[A3,padded]=vec2mat(vec(R2+1:R2+R3),w(2)); 

A100A100までは手で書くと見栄えが悪いのでこのコードを生成する必要がありfor loop.ますfor loopAA2 - A10

Matlab の専門家があなたの助けを必要としています。

4

1 に答える 1

4

個別の変数ではなく、MATLAB で "セル配列" と呼ばれるデータ構造にする必要があります。値がすべてスカラー値の場合は、「通常の」配列、別名行列を使用することもできます。

準備のために、あなたはそうします

R=56;
N=51;
W=[3 5 6 8 13 17 25 25 51];

R2=N; %//why that? are you sure?

RR = floor(R./W).*W;
%// So if you need this exception:
RR(1) = N;
%// or not, is up to you.

rows = cumsum(RR./W);

%//Now, whatever vec2mat returns, could be more than a simple scalar, so for AA we use
%//a cell array.

AA = repmat({[]}, 1, length(W));
offset=0;
for x=1:length(W)
    increment=RR(i)
    [AA{x},padded]=vec2mat(vec(offset+1:offset+increment),W(x));
    offset = offset+increment;
end
%%// Your AA values are now as well shifted by 1, so AA{1} is your old A2, and so on.

編集:

Dan が示唆するように、ベクトル化を見つけRRて使用します。しかし、創造物をうまくベクトル化できるとは思えません。rowAA

編集2:

ダンのソリューションを私のものに含めました。の値が大きい場合、パフォーマンスが大幅に向上する可能性がありますlength(W)

編集3:

古い質問に対する私のコードは、概念についてのアイデアを提供するはずです。自分で新しいパーツに実装してみることができます。うまくいかなかったときは、正確に何がうまくいかないのかを尋ねることができます。

于 2013-10-16T13:32:23.690 に答える