Преобразование рекурсивной функции matlab в код C с помощью mex coder

#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 выполнять эту работу, я не знаю.