Matlab与C#混合编程Word文档格式.docx
- 文档编号:15228956
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:26
- 大小:1.16MB
Matlab与C#混合编程Word文档格式.docx
《Matlab与C#混合编程Word文档格式.docx》由会员分享,可在线阅读,更多相关《Matlab与C#混合编程Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
4、生成一个实例,并对.net组件所输出的结果进行数据类型的转换,以符合.net编程环境中对数据类型的要求,这个在以前我已经讲过,这里就不再多说了。
关键是掌握如何把一个矩阵(在matlab中,一个m*n的矩阵对应.net中的一个1*(m*n)的数组)转换成数据类型一致的数组。
目前所有的matlab数据类型(无论什么类型,都可以把它看成一个矩阵,这样就可以利用数组的思想来思考)都可以进行转化,具体的可能需要经过实验才能符合各自的要求。
虽然matab对.net的支持不如它对c++支持的功能强大,但也已经满足了我们实际应用的需求。
如果我们可以把大部分的运算都放在matlab里面完成,数据转换的数量又少,那么整个系统的运行速度与效率还是挺高的。
c#与matlab混合编程图解
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Runtime.InteropServices;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
Programp=newProgram();
p.MatlabTest();
Console.WriteLine("
按任意键退出..."
);
Console.ReadKey();
}
///<
summary>
///测试C#matlab调用
/summary>
privatevoidMatlabTest()
正在载入matlabfor.NET库......"
DotNetTest.DotNetTestclassdt=newDotNetTest.DotNetTestclass();
完成......"
-----------------------------------------------"
//多项式
intdemention=3;
double[]dd=newdouble[demention];
dd[0]=1;
dd[1]=4;
dd[2]=6;
//MathWorks.MATLAB.NET.Arrays.MWArrayd=
//
MathWorks.MATLAB.NET.Arrays.MWNumericArray.MakeSparse(
1,demention,MathWorks.MATLAB.NET.Arrays.MWArrayComplexity.Real,demention);
MathWorks.MATLAB.NET.Arrays.MWNumericArrayd=(MathWorks.MATLAB.NET.Arrays.MWNumericArray)dd;
开始计算多项式:
[{0}]......"
d.ToString());
//存储计算结果
MathWorks.MATLAB.NET.Arrays.MWArrayh;
//调用matlab函数计算
h=dt.myroots(d);
//取得实部
Arrayreal=((MathWorks.MATLAB.NET.Arrays.MWNumericArray)h).ToArray(MathWorks.MATLAB.NET.Arrays.MWArrayComponent.Real);
stringrealpart="
实部列表:
"
;
foreach(doubleiinreal)
realpart+=i+"
\t"
}
//取得虚部
Arrayimaginary=((MathWorks.MATLAB.NET.Arrays.MWNumericArray)h).ToArray(MathWorks.MATLAB.NET.Arrays.MWArrayComponent.Imaginary);
stringimaginarypart="
虚部列表:
foreach(doubleiinimaginary)
imaginarypart+=i+"
Console.WriteLine(realpart);
Console.WriteLine(imaginarypart);
//打印结果
计算结果:
Console.WriteLine(h.ToString());
}
C#与Matlab混合编程的几种方式
1.通过从Matlab的*.m文件中生成C语言版本的DLL
具体过程:
1)在Matlab中写好一个m文件(比如一个简单的加法函数myplus.m);
2)使用Matlab的mbuild-setup选择编译器,我机器上的编译器有两个LCC和VC2008(注意如果使用VS.net做应用的话,建议编译器选VC2008,否则C#中会告诉你DLL找不到EntryPoint)
3)在命令行中使用mcc-Bcsharedlib:
mypluslibmyplus.m(如果是多个M文件,接着往后写),等待几十秒之后会生成若干文件(*.c,*.h,*.dll等),其中.h文件中有导出的函数原型。
4)建立C#工程,并将前面的dll拷贝到合适路径,使用[DllImport("
mypluslib.dll"
CallingConvention=CallingConvention.Cdecl)]将.h文件中的函数使用C#的语法声明。
一般来说,这些函数中会有**Initialize,**Terminate和M文件中定义的函数(**代表lib名称)。
5)使用CsharpMatlabCompilerVer4.cs将C#中的数据类型和Matlab中的矩阵等类型进行变换。
该文件定义了MatlabCSharp类,主要是导入了libmx.dll中的一些函数,并封装了一些实用的函数如double2mxArray_scalarReal等。
2.C#调用Matlab工作区计算并返回结果
主要使用engOpen,engClose,engPutVariable,engEvalString,engGetVariable函数进行操作。
大致过程如下:
MatlabCSharp.engPutVariable(ep,"
ml_a"
mx_a);
ml_b"
mx_b);
MatlabCSharp.engEvalString(ep,"
ml_c=ml_a+ml_b;
);
mx_c=MatlabCSharp.engGetVariable(ep,"
ml_c"
3.使用MatlabDeployTool生成COM组件
注:
老版本的叫ComTool,现在叫做DeployTool。
在CommandWindow里面直接输入deploytool即可
1)选择NewDeploymentProject->
MATLABBuilderNE->
GenericCOMComponent
2)添加相应的M文件
3)保存,编译
4)新建C#工程,添加Reference,Ok
4.使用MatlabDeployTool生成.Net组件
.NetComponent
4)新建C#工程,由于经常要
usingMathWorks.MATLAB.NET.Arrays;
usingMathWorks.MATLAB.NET.Utility;
因此需添加MWArray这个Reference,一般安装玩MATLABBuilderNE就有了,放在GAC当中的。
C#与Matlab混合编程
(VS2005+Matlab7.5)制作dll步骤:
star——matlab——MatlabBuilderfor.net——deploymenttool——新建——MatlabBuilderfor.net——.Netcomponent——右键addfile——找目标M文件——编译
VS2005引用:
引用编译的dll,同时保持*.ctf在同一文件夹下
Code
test.testclasstest=newtest.testclass();
MWNumericArray是MWArray和c#中数据的中间类,怎么用?
怎样在C#与mat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab C# 混合 编程