Преобразование кода Matlab в C с помощью Matlab Coder — проблема с ячейкой

#c #matlab

#c #matlab

Вопрос:

Я пытаюсь преобразовать функцию в C в Matlab Coder.. Существует переменная cell, и при построении mex она выдает ошибку.

      R=cell(1,n);
for i=1:wi
        for j=1:hi
            if(cin(i,j)>0)
                     k=cin(i,j);
                    for x=i-2*rx 1:i 2*rx-1
                        for y=j-2*ry 1:j 2*ry-1
                                if(x>=1 amp;amp; y>=1 amp;amp; x<=wi amp;amp; y<=hi)
                                    R{k}=[R{k}, (x-1)*wi y];
                            end
                        end
                    end
            end
         end
end
 

Выдает ошибку при R {k}= [R {k}, (x-1) * wi y]; часть

«Попытка получить доступ к элементу, который не был определен перед использованием».

Кто-нибудь может мне помочь в этом?

Комментарии:

1. это не c , ваша проблема вообще связана с c ? если нет, удалите тег, чтобы он не сбивал с толку

Ответ №1:

Для генерации кода необходимо определить (т. Е. Назначить) Все элементы массива ячеек до их использования. Здесь R{k} используется до назначения. А именно, R{k} в RHS этого присваивания считывается этот элемент до его назначения.

Если вы хотите, чтобы элементы были пустыми матрицами, [] , то вы можете объявить R , как:

 % Cells should be varsize to grow them later on
coder.varsize('R{:}');

% Initialize all cells to empty
R = repmat({[]}, 1, n);

for i=1:wi
        for j=1:hi
            if(cin(i,j)>0)
                     k=cin(i,j);
                    for x=i-2*rx 1:i 2*rx-1
                        for y=j-2*ry 1:j 2*ry-1
                                if(x>=1 amp;amp; y>=1 amp;amp; x<=wi amp;amp; y<=hi)
                                    R{k}=[R{k}, (x-1)*wi y];
                            end
                        end
                    end
            end
         end
end
 

Более подробная информация в документе MATLAB Coder:

https://www.mathworks.com/help/simulink/ug/cell-array-restrictions-for-code-generation.html