#c# #c #matlab #mex
#c# #c #matlab #mex
Вопрос:
Мне нужно преобразовать рекурсивную функцию в matlab в C с помощью matlab mex coder. Рекурсивная функция matlab приведена ниже.
function [ cycle ] = f_cycle( adj_N, vect ,k )
cycle = [];
for i = 1: size(adj_N,1)
l_v= size(vect,2);
if(adj_N(vect(l_v),i)==1 )
if(size(find(vect==i),2)==0)
c1 = f_cycle(adj_N,[vect i],k);
elseif(i==k amp;amp; vect(l_v-1)~=k)
c1 = [vect k];
else
c1 = [];
end
if(size(c1,1)==1 amp;amp; size(c1,2) ~=0)
c1 = [c1 zeros(1,size(adj_N,1) 1-size(c1,2))];
end
cycle = [cycle;c1];
end
end
Комментарии:
1. Вы пробовали что-нибудь?
2. @mch Я пытался, но он сказал «не удается преобразовать рекурсивную функцию, требуется значительное изменение функции». Можете ли вы предложить, как я могу преобразовать его в C (mex coder или вручную).. Я не силен в C
3. @Maximus Я предлагаю вам взглянуть на эту документацию: mathworks.com/help/matlab/matlab_external /… . Он содержит более или менее минимальный пример. Однажды я написал файл MATLAB Mex на C, и я знаю, что немного раздражает получать доступ к аргументам функции, которую вы передаете из MATLAB.
4. @KonradKleine Я знаю, как преобразовать обычный скрипт matlab. Но здесь мне нужно преобразовать рекурсивную функцию matlab в C. В настоящее время я получаю сообщение об ошибке, в котором говорится, что вы не можете преобразовать рекурсивную функцию
5. Вы можете вручную преобразовать рекурсивную функцию Matlab в рекурсивную функцию C в соотношении 1: 1, а затем написать небольшое соединение в
mexFunction
, которое вызывает версию рекурсивной функции на C. Как заставить внутренний конвертер Matlab в C выполнять эту работу, я не знаю.