Перераспределение кодера Matlab

У меня есть такой код в моей функции Matlab:

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

Итак, на каждом шаге цикла вы сначала удваиваете размер a, применяете к нему некоторую случайную функцию, а затем удаляете все, что равно нулю.

Теперь я хочу запустить кодировщик, чтобы в конечном итоге превратить его в код C. Конечно, это дает мне ошибки распределения.

Разрешение динамически размещаемых массивов не помогает. Я не могу просто использовать разные имена для своих переменных, потому что они находятся в цикле for.


person user e to the power of 2pi    schedule 02.07.2013    source источник
comment
каков тип элементов a? вы отображали результат, чтобы увидеть, что вы получаете от одной итерации к другой?   -  person innoSPG    schedule 02.07.2013
comment
Как я уже сказал, это пример кода. а может быть что угодно. Код работает в Matlab, но у кодировщика возникают проблемы с преобразованием его в код c.   -  person user e to the power of 2pi    schedule 02.07.2013
comment
вы можете запустить пример кода и убедиться, что он тоже работает, чтобы получить лучшее предложение.   -  person innoSPG    schedule 02.07.2013


Ответы (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, поэтому лучше сначала попробовать без него, а затем добавить его, если обнаружатся ошибки.

person Ryan Livingston    schedule 28.05.2014