1

matlab 関数に次のようなコードがあります。

for i = init:end
    a= [a, char(zeros(size(a))]
    a= func(a)
    a = a(a~=0)
end

したがって、ループの各ステップでは、最初に a のサイズを 2 倍にし、それにランダム関数を適用してから、ゼロをすべて削除します。

これで coder を実行して、最終的に C コードに変換したいと考えています。もちろん、割り当てエラーが発生します。

動的に割り当てられた配列を許可しても役に立ちません。for ループ内にあるため、変数に異なる名前を単純に使用することはできません。

4

1 に答える 1

1

これは1年遅れて来るかもしれませんが、次のようなものです:

function a = foobar(init,ub)
coder.varsize('a',[1,Inf]);
a = 1;
for i = init:ub
    a = [a, ones(size(a))];
    a = sin(a);
    a = a(a~=0);
end

>> codegen foobar -args {1,1} -report

R2014aで私のために働きます。

配列を拡大しようとしている場合coder.varsize、配列のサイズが変更されることを MATLAB Coder に伝えるために を使用する必要がある場合があります。多くの場合、MATLAB Coder は使用しなくてもこれを把握できるcoder.varsizeため、最初は使用せずに試してから、エラーが発生した場合は追加することをお勧めします。

于 2014-05-28T16:53:28.137 に答える