Как вызвать функцию Matlab из Mathematica? - PullRequest
6 голосов
/ 22 декабря 2010

Я хотел бы вызвать функцию Matlab из Mathematica.Как лучше всего это сделать?

На сайте Wolfram я нашел древний пост, описывающий способ сделать это, это все еще способ соединить их?

Ответы [ 4 ]

6 голосов
/ 02 февраля 2011

Вы можете попробовать NETLink для этого хотя бы под Windows:

In[1]:= Needs["NETLink`"]
matlab = CreateCOMObject["matlab.application"]

Out[2]= «NETObject[COMInterface[MLApp.DIMLApp]]»

И затем вы можете вызывать функции Matlab:

In[4]:= matlab@Execute["version"]

Out[4]= "
ans =

7.9.0.529 (R2009b)

"

In[5]:= matlab@Execute["a=2"]

matlab@Execute["a*2"]

Out[5]= "
a =

     2

"

Out[6]= "
ans =

     4

"

HTH

2 голосов
/ 14 декабря 2011

Вы можете использовать mEngine . Предварительно скомпилированный исполняемый файл Windows MathLink работает с Mathematica 8. В Windows вам может понадобиться добавить MATLAB в системный путь .

Преимущество этого по сравнению с методом NETLink заключается в том, что передача переменных между Mathematica и MATLAB будет такой же простой, как mGet["x"] или mPut["x"]. Хотя это может быть возможно и с NETLink, преимущество mEngine заключается в том, что вам не нужно реализовывать его самостоятельно (что здорово, если, как и я, вы ничего не знаете о COM или .NET)

1 голос
/ 29 января 2011

Я полагаю, что это сложная проблема в целом, но ее можно легко решить с помощью небольшого программирования для конкретного случая. Я продемонстрирую с C #.

Я бы построил строку вызовов, вот так.

  • Mathematica вызывает программу на C # через MathLink . Это почти тривиально для установки, и Mathematica имеет пример проекта в каталоге Mathematica \ 8.0 \ SystemFiles \ Links \ NETLink .
  • Программа C # вызывает Matlab. Есть несколько способов сделать этот вызов, и эта удобная ссылка описывает, как это сделать, и предлагает пример кода.
  • Программа C # возвращает результаты Matlab.

В целом, я мог бы сделать это менее чем за 50 строк кода на C # для решения конкретной проблемы. Другими словами, не слишком много работы. Возможные проблемы заключаются в преобразовании данных, но если вы хотите отправлять туда и обратно массивы данных, MathLink предлагает многое из коробки. Точно так же Mathematica может быть связана с MATLAB через Java, хотя я сам этого не делал.

Возможно, самое простое соединение может быть сделано через Python. Mathematica предлагает устанавливаемую библиотеку MathLink python, расположенную по адресу Mathematica \ 8.0 \ SystemFiles \ Links \ NETLink , а Matlab имеет библиотеку дополнений PyMat, которую можно загрузить здесь , но этот пакет давно не поддерживается и поддерживает только самые древние из Matlabs.

В качестве альтернативы вы можете вообще отказаться от Matlab в пользу SAGE и / или numpy.

0 голосов
/ 02 мая 2013

Для этого есть новый пакет --- MATLink .Это наиболее полный такой пакет, который я знаю.(Отказ от ответственности: я один из разработчиков MATLink.)

MATLink позволяет вам ...

  • без проблем вызывать функции MATLAB из Mathematica

  • передача данных между двумя системами

Поддерживается большинство типов данных MATLAB, включая разреженные массивы, структуры и ячейки.

Более полное описаниедоступно здесь .Подробные примеры см. На веб-сайте .

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...