«Неопределенная функция или метод» в командном окне Matlab Engine - PullRequest
4 голосов
/ 18 января 2012

Я работаю с Visual Studio над кодом C ++ и отправляю некоторые переменные в движок MATLAB. Пока проблем нет. Представьте, что у меня открыто командное окно MATLAB и эти переменные:

» whos
  Name            Size             Bytes  Class     Attributes

  QWe             1x365             2920  double              
  QWp             1x364             2912  double              
  QWu             1x364             2912  double 

Я могу использовать стандартные функции MATLAB, но я загрузил новую функцию.m (которая обычно работает в MATLAB после задания пути), которую это командное окно из движка MATLAB не распознает или не находит.

» isnormq(Q)
??? Undefined function or method 'isnormq'

Я думал, что они (командное окно и MATLAB) были синхронизированы, но теперь я вижу, что это не так.

Как я могу решить эту проблему, чтобы я мог использовать свой function.m из командного окна? Любая помощь будет приветствоваться.

Ответы [ 2 ]

3 голосов
/ 29 мая 2012

Поскольку это было давно, и никто не ответил, я опубликую то, что я сделал:

В Matlab каждый раз, когда вам нужен newtoolbox, вы связываете путь один раз, и он остается "навсегда". Вы можете использовать функции из панели инструментов, как если бы они были по умолчанию в Matlab.

При использовании движка Matlab это не работает, поэтому необходимо написать командную строку:

% Here we load the toolbox for converting quaternion to Euler Angles
addpath(genpath('C:\Program Files (x86)\MATLAB\R2010a\toolbox\SpinCalc')); //for example
0 голосов
/ 11 августа 2017

Прошло много времени, но я столкнулся с той же проблемой и нахожу некоторую интересную информацию о ней.

Прежде всего, в новой версии MATLAB (2016a) путь поиска MATLAB Engine - C:\ Program Files \ MATLAB \ R2016a (или по тому же пути, по которому вы устанавливаете MATLAB).Так что, если вы не измените его, C ++ может использовать все встроенные функции. Кроме того, вы можете использовать функции из Панелей инструментов!

Но есть еще одна проблема: как насчет пользовательских функций?Поэтому мне нужно поместить файл .m непосредственно в C: \ Program Files \ MATLAB \ R2016a , чтобы сделать его видимым для MATLAB Engine.

Здесь мы можем пойти другим путем - просто добавьте путьвашего файла .m в MATLAB через C ++:

char CommandChangePath[MAX_PATH];
strcpy(CommandChangePath, "addpath('C:\\Users\\SuperUser\\Documents\\Visual Studio 2017\\Projects\\MyCppProject')");
engEvalString(ep, CommandChangePath);

Для меня очень полезно поместить необходимую функцию MATLAB в текущий проект C ++, добавить путь и использовать затем!Теперь вам не нужно менять путь на каждом шаге - он запоминается и всегда полезен для текущего приложения.

...