#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