使用 Matlab 从 C# 控制台应用程序创建图形或绘图?
如果我在 C# 中有一个二维数组,我如何在 Matlab 中将该数组的内容绘制为二维图?我正在寻找扩展方法,即
my2DArray.PlotInMatlab();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我最终让这个工作顺利。下面是一个示例图,由调用 Matlab .m 文件的 .NET 4.0 C# 控制台应用程序生成:
令人高兴的是,我们可以使用 Matlab 的所有功能来绘制图形,而只需几行 .NET。
如何在 .NET 中执行此操作:
在 Visual Studio 2010 中为 C# 创建一个新的 .NET 控制台应用程序,并将其更改为 .NET 4.0(右键单击该项目,选择“属性”)。
.NET Main():
.NET 类提供了与 Matlab 进行互操作的扩展方法(将文件命名为
MyMatlab.cs
)。接下来,我们将 .m 文件导出到 .NET 程序集中。我使用 Matlab 2010a(这也适用于 2010b)。使用Matlab,32位版本(Matlab启动时在启动屏幕中显示32位或64位)。
以下 Matlab 代码显示一个图形。将其另存为
Graph2D.m
。通过在控制台中输入以下内容在 Matlab 中进行测试(确保将 Matlab 工具栏中的
当前文件夹
更改为与Graph2D.m
相同的目录) ):<前><代码>x = 0:.2:20;
y = sin(x)./sqrt(x+1);
Graph2D(x,y,'我的标题','我的x轴','我的y轴')
在Matlab部署工具中,添加一个类
Graph
,并添加文件Graph2D.m
,然后将其打包成MatlabGraph.dll< /code> (在设置中将组件名称更改为
MatlabGraph
,这决定了生成的 .dll 的名称)。在您的 .NET 项目中,添加对
MatlabGraph.dll
的引用(我们刚刚从Graph2D.m
编译的 .NET .dll)。如果使用32 位
版本的 Matlab 进行编译,则该值为32 位
。32位
,要么一致64位
。32 位
,您的 .NET 应用必须针对x32
进行编译,您必须使用32 位
版本Matlab(它将在启动屏幕中显示32位
)导出.NET .dll,并且您必须导入MWArray的
到您的 .NET项目。32位
版本。 dll64位
,将.NET应用程序编译为All CPU
,则必须使用64位
版本的Matlab (它将在启动屏幕中显示64位
)导出.NET .dll,并且您必须导入MWArray.dll的
到您的 .NET 项目中。64位
版本File..New..Figure
在 Matlab 中创建一个新图形,使用Insert
对其进行自定义,然后使用 <代码>文件..生成M文件。新生成的 .m 文件中的行的作用相当明显,您可以将它们复制到原始 Graph2D.m 文件中,然后重新生成 MatlabGraph.dll。例如,向图窗添加标题会向自动生成的 .m 文件添加一行title({'My new title});
。I got this working well in the end. Here is a sample graph, generated by a .NET 4.0 C# console app that calls a Matlab .m file:
The nice thing is that we can use all the power of Matlab for drawing graphs, with only a few lines of .NET.
How to do this in .NET:
Create a new .NET console app for C# in Visual Studio 2010, and change it to .NET 4.0 (right click on the project, select "Properties").
.NET Main():
.NET class that provides extension methods to do interop into Matlab (name the file
MyMatlab.cs
).Next, we export a .m file into a .NET assembly. I used Matlab 2010a (this will work for 2010b also). Use Matlab, 32-bit version (32-bit or 64-bit is displayed in the splash screen when Matlab starts up).
The following Matlab code displays a graph. Save it as
Graph2D.m
.Test this within Matlab by typing the following at the console (make sure you change
Current Folder
in the Matlab toolbar to the same directory asGraph2D.m
):In the Matlab deployment tool, add a class
Graph
, and add the fileGraph2D.m
, then package it intoMatlabGraph.dll
(change the component name toMatlabGraph
in settings, this determines the name of the generated .dll).In your .NET project, add a reference to
MatlabGraph.dll
(the .NET .dll we have just compiled fromGraph2D.m
). This will be32-bit
if its compiled with the32-bit
release of Matlab.MWArray.dll
. You can find this by searching the Matlab install directory.32-bit
, or consistently64-bit
.32-bit
, your .NET app must be compiled forx32
, you must use the32-bit
version of Matlab (it will show32-bit
in the splash screen) to export the .NET .dll, and you must import the32-bit
version ofMWArray.dll
into your .NET project.64-bit
, compile your .NET app intoAll CPU
, you must use the64-bit
version of Matlab (it will show64-bit
in the splash screen) to export the .NET .dll, and you must import the64-bit
version ofMWArray.dll
into your .NET project.File..New..Figure
, customize it usingInsert
, then generate the .m code usingFile..Generate M file
. Its fairly obvious what the lines in the newly generated .m file do, you can copy them into your originalGraph2D.m
file, then regenerateMatlabGraph.dll
. For example, adding a title to the figure adds a linetitle({'My new title});
to the auto-generated .m file.