Ожидаемое скалярное значение: MATLAB Coder

Я получаю следующую ошибку при использовании кодировщика MATLAB для создания кода С++ из файла m с вызовом функции c ompmex.c

Вызовы функций C всегда возвращают скалярные значения, но здесь ожидается нескалярное значение.

Мой код:

function [D,gamma] = DSGD2(X,H) %#codegen

   [Xr,Xc]=size(X);
   [Hr,Hc]=size(H);

   D=zeros(Hr,Hc,'double');
   D=X(:,11:210);
   d1=sqrt(sum(D.*D)); D=D./repmat(d1,Xr,1);

   beta=zeros(Xr,Xc,'double');

   beta=coder.ceval('ompmex',H,X,H'*H,200);

Может ли кто-нибудь помочь в этом. Я не получаю рабочий ответ онлайн


person Astro    schedule 15.07.2014    source источник
comment
Пожалуйста, кто-нибудь..... кто может помочь   -  person Astro    schedule 16.07.2014
comment
Было бы полезно узнать подпись C ompmex. В сообщении говорится, что функция C не может вернуть массив, однако beta назначен размер Xr-by-Xc.   -  person Ryan Livingston    schedule 16.07.2014
comment
у меня нет большого опыта работы с C. Но что вы подразумеваете под подписью ompmex. Все, что я понимаю, это то, что ompmex - это функция c, пытающаяся вернуть переменную, недопустимую для MATLAB.   -  person Astro    schedule 16.07.2014
comment
Должен быть заголовочный файл (файл .h), содержащий объявление для ompmex. Что-то вроде double ompmex(double, into, double);. Другой вопрос, ompmex это файл MEX? У вас будет файл с именем ompmex.mex..., где ... может быть буквой и числом 32 или 64, например .mexa64.   -  person Ryan Livingston    schedule 16.07.2014
comment
Я также вижу, что вы упомянули ompmex.c в своем вопросе. Вы видите объявление функции (что-то вроде double ompmex(double, int, double);) в этом файле? Увидев способ объявления ompmex, необходимо посоветовать, как вызывать его через coder.ceval.   -  person Ryan Livingston    schedule 16.07.2014
comment
Привет... Я видел код. На самом деле есть два файла c. Первая функция ompmex.c устанавливает параметры, поэтому вторую функцию ompcore.c можно использовать с различными настройками параметров. ompmex использует двойное имя переменной , а определение ompcore.c выглядит следующим образом: mxArray ompcore(double D[],.......)   -  person Astro    schedule 16.07.2014
comment
Также я нашел одно решение: coder.opaque('double'). Объявив мою выходную переменную типа непрозрачной, мой код компилируется нормально, но теперь непрозрачный вывод непригоден даже для базовой операции, такой как + - *, из-за несоответствия типа переменной.   -  person Astro    schedule 16.07.2014


Ответы (1)


person    schedule
comment
Спасибо за поддержку. Я попробую это и посмотрю, работает ли это для меня. - person Astro; 19.08.2014
comment
Ну, я боюсь, но я предполагаю, что coder.ceval создаст некомпилируемый C-Code atm... но попробуйте. - person Markus; 19.08.2014