【问题标题】:mathematica and matlab interaction with NetLink and data exchange between themMathematica 和 matlab 与 NetLink 的交互以及它们之间的数据交换
【发布时间】:2011-05-26 19:43:46
【问题描述】:

我在mathematica中使用如下代码调用matlab

In[1]:= Needs["NETLink`"]
matlab = CreateCOMObject["matlab.application"]
In[5]:= matlab@Execute["a=[1 2;3 4]"]

我想从mathematica 中获取matlab 工作区变量“a”并将其转换为mathematica 矩阵。 如何使用 netlink 做到这一点?

【问题讨论】:

  • 我没有 matlab,但假设matlab@Execute["a"] 的输出将是 Matlab 格式的字符串,您需要将该字符串解析为有效的 Mathematica 语法。或者,您可以使用 Mathematica 可以导入的格式将向量、矩阵从 matlab 导出到文件中。
  • @Sasha:你如何获得任何应用程序的“ProgID”?
  • @Jalil 我建议您提供一些在评估代码时获得的输出示例,例如matlab@Execute["a=[1 2;3 4]"]。然后有人可以帮助您编写将此类输出转换为 Mathematica 格式的代码。
  • @Alexey: 如果我写 matlab@Execute["a=1;"] 我不能使用 ImportString 命令因为 ";" .
  • @Jalil 你应该提供一组你希望能够转换成 Mathematica 格式的示例输出。

标签: matlab wolfram-mathematica netlink


【解决方案1】:

我不知道您如何连接 MATLAB...您的 ProgID 不适用于我的,我也不确定它是否正确。一种更简单、更可靠的方法是在 MATLAB 中创建您想要的任何内容,然后将其保存为 .mat 文件并将其导入 Mathematica。这是一个小例子:

MATLAB:

a=magic(4)

a =

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

save('file','a');

数学:

a = Transpose@Import["file.mat", {"HDF5", "Datasets", "a"}];

【讨论】:

  • 有什么直接的方法可以做到这一点吗?你的答案有两个阶段。
  • @Jalil:正如我所提到的,我无法让 Mathematica 与 MATLAB 连接。如果可以的话,我也许可以想办法。你能编辑你的问题并解释你为什么使用ProgID“matlab.application”吗?如何为任意应用程序选择正确的 ID?另外,我正在运行一个mac,所以我不知道事情是否有所不同。如果你解释如何连接,我会试一试。
【解决方案2】:

假设你得到了表单的输出

out = "
  a =

      16     2     3    13
       5    11    10     8
       9     7     6    12
       4    14    15     1

  ";

您可以使用ImportString 命令将其转换为Mathematica 的格式:

matrix = ImportString[out, "Table", "IgnoreEmptyLines" -> True, 
   "HeaderLines" -> 1];
matrix // TableForm

【讨论】:

  • @yoda & @Alexey 感谢您的热情回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2019-04-07
相关资源
最近更新 更多