通过.Net代码加载和使用Mathematica包

时间:2013-02-13 01:17:20

标签: c# graph wolfram-mathematica packages

我正在使用C#将数据传递给Mathematica并返回Graphs:

MathKernel k = new MathKernel();
k.CaptureGraphics = true;
k.GraphicsFormat = "JPEG";
k.Compute("Show[Graphics[{Thick, Blue, Circle[{#, 0}] & /@ Range[4], Black, Dashed, Line[{{0, 0}, {5, 0}}]}]]");
pictureBox1.Image = k.Graphics[0];

enter image description here

这一直有效,直到我需要使用Package。我看到原始数据被返回而不是图像:

StringBuilder command = new StringBuilder();
command.Append("fakedata01 = With[{n = DayCount[{2008, 01, 01}, {2011, 3, 27}]}, Transpose[{Array[DatePlus[{2008, 01, 01}, #] &, n, 0], #}] & /@ (100. + (Accumulate /@ RandomVariate[NormalDistribution[0, 1], {8, n}]))];");
command.Append("Dimensions[%];");
command.Append("XYZLineGraph[fakedata01, Title -> \"Banks\\[CloseCurlyQuote] Share Prices\", Subtitle -> \"1 January 2008 = 100\", ScaleUnits -> \"Index\", DateLabelFormat -> \"Quarter1\", PartialLastYear -> 2.95/12, Footnotes -> {{\"*\", \"MSCI financials index\"}}, Sourcenotes -> {\"Bloomberg\"}, SpecialGridValues -> 100, PlotStyle -> {Red, XYZDarkBlue, XYZPink, XYZMauve, XYZPaleOrange, XYZTurquoise, Green, Gray}, Epilog -> {Red, Arrow[{{{2009, 3}, 30}, {{2009, 8}, 48}}], Text[\"Label\", {{2009, 3}, 25}]}]");

MathKernel k = new MathKernel();
k.CaptureGraphics = true;
k.GraphicsFormat = "JPEG";
k.Compute("Get[\"XYZ`XYZGraphs`\"];");
k.Compute("Get[\"XYZ`XYZUtilities`\"]");
k.Compute("Show[" + command.ToString() + "]");
pictureBox1.Image = k.Graphics[0];

错误是:

Get :: noopen:无法打开XYZ XYZGraphs

我已在Mathematica中安装了软件包,因此在启动时它们可用。当我在Mathematica中运行命令时,它给出了预期的输出。

是否有人知道如何加载套餐以便通过.Net电话提供?

这两行不起作用:

k.Compute("Get[\"XYZ`XYZGraphs`\"];");
k.Compute("Get[\"XYZ`XYZUtilities`\"]");

我也尝试了以下内容,它也有同样的问题:

k.Compute("Get[\"XYZ`XYZGraphs`\"];Get[\"XYZ`XYZUtilities`\"];Show[" + command.ToString() + "]");

<子> 我已经看过这些线程,但它们在Mathematica中而不是在C#中: Load a mathematica package from within a package Building Application Packages with multple packages and references in Mathematica

1 个答案:

答案 0 :(得分:1)

我解决了问题,https://mathematica.stackexchange.com/questions/19516/load-a-mathematica-package-via-net-code

完整的答案结束了

我在Mathematica会话中评估了$ UserBaseDirectory。在该目录中是预先建立的Applications文件夹,您应该在其中放置您的工作。这是您的私人应用程序文件夹。

假设您正在对TopicX进行扩展工作。在您的私人Applications文件夹中创建一个TopicX文件夹。您可以创建包含您的工作的辅助文件夹,并根据此主题组织您的笔记本。

现在在包中创建BeginPackage语句(名称为XYZGraphs.m并放在XYZ文件夹中):

BeginPackage["XYZ`XYZGraphs`"]

现在您可以使用以下方式从任何地方加载包

<< XYZ`XYZGraphs`