标签: mathlink

如何在Mathematica中使用FORTRAN子程序或函数?

我有兴趣在Mathematica会话中调用fortran代码.我了解到Mathlink提供了一种方法.但我对C语言知之甚少,对C++没什么了解.有人愿意给我一个详细的例子吗?

我正在使用Mathematica 8,MS Visual Studio 2008和Intel Fortran 11.该系统是Windows 7 Home Premium.

非常感谢!

fortran wolfram-mathematica mathlink

14
推荐指数
1
解决办法
4401
查看次数

MathLink函数中的CheckAbort?

我刚刚发现这样的MathLink函数,LinkWrite并且LinkRead具有类似于它自己的内部的东西CheckAbort,可以吸收任何中止,并且不会进一步传播它们.

这可以很容易地显示LinkRead:

link = LinkLaunch[First[$CommandLine] <> " -mathlink"];
LinkRead[link];
LinkWrite[link, Unevaluated[Pause[10]]];
{LinkRead[link], Print["!!"]}
Run Code Online (Sandbox Code Playgroud)

在评估上面的代码后按Alt+ .,您将得到以下输出:

During evaluation of In[6]:= !!
Out[9]= {ReturnPacket[$Aborted], Null}
Run Code Online (Sandbox Code Playgroud)

如你所见,中止被吸收了LinkRead.

我的问题是它打破了我自己的评估流量控制CheckAbort.

有没有办法拦截将中止这种功能被吸收LinkReadLinkWrite

wolfram-mathematica mathlink

12
推荐指数
1
解决办法
243
查看次数

如何在Python程序中使用Mathematica函数?

我想知道如何从Python调用Mathematica函数.

我很欣赏一个例子,例如,使用Mathematica函数Prime.

我搜索过MathLink但是如何在Python中使用它对我来说有点模糊.

我试图使用一个名为pyml的Mathematica-Python库,但我没有成功,也许是因为这个lib看起来很旧(在教程中说Mathematica 2或3).

尝试编译源代码Wolfram/Mathematica/8.0/SystemFiles/Links/Python但在使用python 2.6时出现了几个错误(文档说只应该对python 2.3起作用).

Pythonika很有趣,但看起来只是在Mathematica笔记本中使用,我想编写.py调用Mathematica函数的文件.

那么,有人知道编写使用Mathematica函数的python程序的好方法并且可以给我一个例子吗?

python unix wolfram-mathematica mathematica-8 mathlink

10
推荐指数
1
解决办法
3428
查看次数

通过MathLink在v.7.01会话中执行v.5.2内核中的代码

我在同一台机器上安装了Mathematica 7.01和Mathematica 5.2.我希望能够在Mathematica 7.01会话中评估v.5.2内核中的代码.我的意思是运行Mathematica 7.0.1标准会话我希望有一个命令,比如kernel5Evaluate评估5.2内核中的一些代码,并将结果返回到7.01内核并链接7.01 FrontEnd笔记本,这样代码将在7.01内核.

例如(在标准的Mathematica v.7.01会话中):

In[1]:= solutionFrom5 = kernel5Evaluate[NDSolve[{(y^\[Prime])[x]==y[x],y[1]==2},y,{x,0,3}]]
Out[1]= {{y -> InterpolatingFunction[{{0., 3.}}, <>]}}

In[2]:= kernel5Evaluate[Plot3D[Sin[x y],{x,-Pi,Pi},{y,-Pi,Pi}]]
During evaluation of In[2]:= GraphicsData["PostScript", "\<\............
Out[2]= -SurfaceGraphics-
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,结果应该好像v.5.2内核在v.7.01 FrontEnd中设置为"Notebook's Kernel".当然solutionFrom5变量应该设置为v.5.2内核返回的实际解决方案.

wolfram-mathematica mathlink

7
推荐指数
2
解决办法
768
查看次数

Mathematica:MathLink错误消息

我想我开始理解如何将用C/C++编写的函数链接到Mathematica.我面临的问题是我不知道如何从我的C包装器向Mathematica发送错误消息.在谷歌搜索后,我找到了这个MathLink教程.

第1.7节给了我一个关于如何发送错误消息的见解,但我得到了奇怪的结果.这是我正在使用的代码.


//File cppFunctions.h
#ifndef CPPFUNCTIONS_H
#define CPPFUNCTIONS_H
class Point {
public:
    double x, y;
    Point(){ x=y=0.0;}
    Point(double a, double b): x(a), y(b) {}
};
class Line {
public:
    Point p1, p2;
    Line(void) {}
    Line(const Point &P, const Point &Q): p1(P), p2(Q) {}
    double distanceTo(const Line &M, const double &EPS = 0.000001){
        double x21 = p2.x - p1.x;     double y21 = p2.y - p1.y;
        double x43 = M.p2.x - M.p1.x; double y43 = M.p2.y - M.p1.y; …
Run Code Online (Sandbox Code Playgroud)

c++ wolfram-mathematica mathlink

7
推荐指数
1
解决办法
2410
查看次数

如何使外部Mathematica功能可以中断?

我之前有一个关于将Mathematica与用C++编写的函数集成的问题.

这是一个后续问题:

如果计算时间过长,我希望能够使用评估>中止评估中止它.答案中建议的哪些技术可以实现可中断的基于C的扩展功能?如何在C端实施"可中断性"?

我需要以一种既不会破坏它,也不会损坏Mathematica内核的方式使我的函数可中断(即应该可以在Mathematica被中断后再次调用该函数)

c interop wolfram-mathematica mathlink

7
推荐指数
1
解决办法
378
查看次数

了解Kernel-FrontEnd通信 - 为什么我的前端会冻结?

编辑:只是确认你是否可以重现这个是否有用.尝试此操作只需要一台计算机(无需远程连接).

更新似乎其他人无法在Mac或Win7上重现这一点,因此它可能是WinXP特定的或特定于我的机器.在这一点上,我放弃了.


最好有一个关于前端和内核如何通信的教程,这样我们就可以调试远程内核问题.任何这样的一般答案(或其他地方的教程链接)都是最受欢迎的.我已经了解Sascha Kratky 的远程内核策略.

现在的实际问题是: 当我以任何方式连接到远程机器时(例如使用远程内核策略),前端迟早会冻结.我怎么能阻止这个?

以下是如何在一台机器上重现问题(无需远程连接):

  1. 创建新的内核配置(评估菜单 - >内核配置选项...)

    选择高级选项.

    MLOpen的论据:

    -LinkName "8000@YOUR-IP-HERE,8001@YOUR-IP-HERE" -LinkMode Listen 
    -LinkProtocol TCPIP -LinkHost "YOUR-IP-HERE" -LinkOptions MLDontInteract
    
    Run Code Online (Sandbox Code Playgroud)

    (替换YOUR-IP-HERE为计算机的IP地址.在Windows上,您可以通过ipconfig在命令窗口中输入来获取此信息.)

    用于启动内核的Shell命令:保留为空(我们将手动执行)

  2. 打开一个新的笔记本,将笔记本的内核设置为你刚设置的内核,并评估一些东西(1+1).

  3. 现在我们需要在连接超时之前手动启动内核.因此,math在命令行模式下启动一个新的kernel(),并评估以下内容:

    link=LinkConnect["8000,8001",LinkProtocol->"TCPIP"] (* connect to front end link *)
    
    $ParentLink = link; (* set the front end link as parent link *)
    
    Run Code Online (Sandbox Code Playgroud)

    现在连接已建立,一切似乎都正常工作(保存前端粉红色消息窗口中的一条消息)

  4. 评估Manipulate[n, {n, 0, 100, 1}].首先,这似乎也有效.现在玩滑块.前端迟早会冻结,需要被杀死.对我来说,向上和向下拖动滑块约10秒而不释放它总是足够的.

为什么前端会冻结? 如何以一切正常工作的方式在前端和内核之间创建TCPIP模式连接?


一些说明:

  • 我在Windows XP上.
  • 如果我使用,问题永远不会出现LinkProtocol -> "SharedMemory".
  • 使用评估 - …

wolfram-mathematica mathematica-frontend mathlink

7
推荐指数
1
解决办法
1858
查看次数

可以使用其他编程语言的Mathematica(python/C#)吗?

是否可以使用Mathematica的其他语言的计算能力?我需要做一些复杂的操作(不一定是象征性的,顺便说一句),能够直接从我的python/c#程序中调用Mathematica的函数或运行Mathematica的代码是非常可爱的.

可能吗?

c# python wolfram-mathematica mathlink

5
推荐指数
1
解决办法
3078
查看次数

使用任意PATH环境安装MathLink程序

是否可以使用Install[]自定义PATH环境变量启动MathLink程序?

我正在尝试使用mEngine将Mathematica连接到Windows上的MATLAB.只有mEngine.exePATH环境变量包含MATLAB库的路径时才会启动它.是否可以修改PATH以启动此程序,而无需修改系统路径?还是有其他方式推出mEngine.exe

interop wolfram-mathematica environment-variables mathlink

5
推荐指数
1
解决办法
622
查看次数

Mathlink内存使用积累

我用来MathLinkC++应用程序发送和接收独立的mma表达式作为字符串.

std::string expression[N];
// ...
for(int i = 0; i < N; ++i) {
    MLPutFunction(l, "EnterTextPacket", 1);
    MLPutString(l, expression[i].c_str());
    MLEndPacket(l);

    // Check Packet ...

    const char* result;
    MLGetString(l, &result);

    // process result ...

    MLDisownString(l, result);
}
Run Code Online (Sandbox Code Playgroud)

我希望MLDisownString释放已用过的内存,除非它没有.

有任何想法吗?

wolfram-mathematica mathlink

2
推荐指数
1
解决办法
287
查看次数

是否可以运行使用Mathematica .NET/Link的VB窗口应用程序,而不使用mathematica?

我想使用VB.Net 2010开发一个程序,我想通过.NET/Link使用Mathematica 3DPlot函数.我的问题是,是否可以在没有安装Mathematica的情况下在另一台计算机上运行该程序?谢谢

vb.net wolfram-mathematica mathlink

2
推荐指数
1
解决办法
320
查看次数

将Mathematica中的列表传递给c ++(Mathlink)

我只想将一个整数列表传递给用C++编写的函数.我已经设置了模板(.tm)文件和所有,我可以成功调用标量参数的测试函数.使用list参数调用函数的行为就好像根本没有定义函数一样.我怀疑参数类型不匹配.

在模板文档(http://reference.wolfram.com/mathematica/ref/file/file.tm.html)中,列表的数据类型类似于"Int32List".当我使用它时,我的C++函数必须包含列表长度的超长参数.使用列表的唯一示例代码是"sumalist.tm".此示例使用IntegerList(未出现在doku中的类型).

当我使用Int32List时,mprep结果需要一个带有额外整数参数的函数(不要像在doku中写的那样长).当我使用未记录的IntegerList类型时,额外参数的类型为long.

在我使用标量类型的实验中,我遇到了类似的问题 - 在tm文件中使用"Integer"时,c ++函数被正确调用,而不能用"Integer32"识别.

"sumalist.tm"示例也使用了一个奇怪的模式(list:{___ Integer}),我没有找到任何文档.我还想了解Evaluate行的含义(我怀疑它的使用是使函数可调用而没有列表中的花括号).

那么谁知道哪些数据类型真的适合用列表调用c ++函数 - 也许还有实数...?

c++ wolfram-mathematica mathlink

2
推荐指数
1
解决办法
686
查看次数