大神求助,毕业设计
mathematica吧
全部回复
仅看楼主
level 11
ZCNwant 楼主
各位大神求解,我想用vb调用mathematica生成的dat或txt来画图,但是vb菜鸟,求各位大神帮忙,小弟感激不尽。
2013年05月01日 15点05分 1
level 10
为啥要用vb画图啊
2013年05月02日 04点05分 3
level 11
ZCNwant 楼主
我想用vb做一个窗口,然后输入值,在mma里计算好了,再把图形化出来,直接在vb上显示。
2013年05月02日 05点05分 4
level 2
大哥,你成功了吗?我现在也想用VB调用mma,但是好像没有接口还是组件,想问问该怎么弄!
2025年10月24日 05点10分 5
请看一下6楼。
2025年10月25日 16点10分
吧务
level 15
……12年过去,我还真能在一定程度上回答这个问题了。
首先需要指出的是,Mathematica是有.NET/Link的,所以如果你用的是Visual Basic .NET,那么按照自带帮助来大概就行了。(我自己没用过,所以容我加个“大概”。)
但是,我们谈及VB,一般都是指Visual Basic 6.0 (VB6),这就有点麻烦了。MMA.SE唯一相关的讨论似乎是《Mathematica Functions from VBA》(编号23864),可早在2016年,就有评论指出该帖下面唯一的答案似乎已经失效。那么,还有没有其他办法呢?我还真想到了一个,那就是,借用命令行(command line, cmd)作为中介:
Function run(str As String) As String
Dim myshell As New WshShell 'requires ref to Windows Script Host Object Model
run = myshell.Exec("wolframscript -code " & str).StdOut.ReadAll
End Function
在debug窗口中:
print run("Solve[x^2+2x+5==0]")
效果:
注意:
1. 我是在VBA下面做的测试,但VB6应该差不多。
2. 函数返回值是个字符串,你多半需要进一步对其进行处理。
3. 函数的速度稍微有点拉,但是至少可以跑。(疑似是因为WolframScript的启动速度太慢了,也就是说,如果不需要频繁调用此函数的话,性能问题应该不会太突出。)
4. 如注释所说,你需要到“工具“ -> ”引用”里把“Windows Script Host Object Model”给勾上。
2025年10月25日 16点10分 6
关于在VBA中调用命令行的问题,可以进一步参考stackoverflow帖子《Capture output value from a shell command in VBA?》(编号2784367)。
2025年10月25日 16点10分
vindobona 在编号2784367下面新写了一个答案,亲测可用,不过这个方法仅可用于与excel的vba交互。
2025年11月26日 10点11分
level 9
我这里这样写:
run = MyShell.Exec("C:\Program Files\Wolfram Research\Mathematica\13.3\wolframscript.exe -code " & str).StdOut.ReadAll
否则出现:
运行时错误 '-2147024894 (80070002): 方法 'Exeo'作用于对象 'IWshShell3' 时失败.
2025年10月27日 12点10分 7
……你直接在命令行里能在不使用完整路径的情况下调用 wolframscript 吗?
2025年10月27日 12点10分
@xzcyr 在cmd里面提示 'wolframscript' 不是内部或外部命令,也不是可运行的程序或批处理,应该是环境变量问题吧
2025年10月27日 12点10分
@liyajx 你安装Mathematica的时候是不是没有勾选“安装wolframscript(大意,我不太记得原文了)”?这个我也没实验过,但我猜想,如果没勾选的话,就 不会有 C:\Program Files\Wolfram Research\WolframScript 这个文件夹。
2025年10月27日 13点10分
level 9
突发奇想我用这个:
Print run("Plot[Sin[x],{x,0,.1}]")
得到:
Graphics[
Annotation[{{{{}, {},
Annotation[{Directive[Opacity[1.],
RGBColor[0.368417, 0.506779, 0.709798], AbsoluteThickness[2]],
Line[{{2.040816326530612*^-9,
2.040816326530612*^-9}, {0.00003067179205596268,
0.00003067179205115355},......得到了图像各点的坐标
2025年10月27日 13点10分 8
想要点的坐标的话,这样或许更好一些:Print run("Cases[Plot[Sin[x],{x,0,.1}],Line[a_]:>a,Infinity][[1]]//ExportString[#,\""CSV\""]&")
2025年10月27日 13点10分
@xzcyr 哦,学到了!
2025年10月27日 13点10分
1