C#与MATLAB混合编程在水闸数字化设计系统中的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#与MATLAB混合编程在水闸数字化设计系统中的应用刘廷
【摘要】为了实现水闸的优化设计,本文在分析C#和MATLAB各自编程优缺点的基础上,结合MATLAB遗传算法工具箱在水闸数字化设计系统中的应用,详细介绍了C#与MATLAB混合编程的过程,并用具体的工程实例证明了该方法的可行性及正确性.
【期刊名称】《河北水利》
【年(卷),期】2016(000)005
【总页数】1页(P18)
【关键词】C#;MATLAB;混合编程;水闸;遗传算法
【作者】刘廷
【作者单位】河北省水利水电第二勘测设计研究院
【正文语种】中文
Microsoft Visual C#和MATLAB分别是Microsoft公司和Math Works公司开发的两种高级编程语言,在程序设计上优势各异,为了最大程度上实现二者的优势互补,提高编程效率,本文以MATLAB 2011与VS2010作为开发环境,以MATLAB遗传算法工具箱在水闸数字化设计系统中的应用为例详细讲解了MATLAB 2011与VS2010混合编程的流程和其中应注意的问题。

C#与MATLAB混合编程有多种实现方法,本文采用灵活性较好、集成度较高的动态链接库技术实现C#对MATLAB函数的调用。

1.1 MATLAB创建动态链接库(DLL)
在MATLAB 2011版本中,已经对.NET混合编程提供了良好的接口和编程向导,具体步骤为:在Command Window窗口内输入“deploytool”,在弹出的Deployment Project对话框中输入工程名称、存储位置等,并在Type下拉框中选择“.Net Assembly”类型,然后,在弹出的.Net Assembly对话框中,点击[Add class]创建新类ycsf,并将提前准备好的遗传算法函数主文件(ycsf.m)添
加到新建的ycsf类中,单击Build按钮等待编译完成即可生成ycsf.dll文件。

1.2 C#调用动态链接库(DLL)
在已经创建的C#项目工程的解决方案资源管理器中,添加引用,选择
1.1 中创建好的ycsf.dll文件,并在程序代码的头文件部分添加using ycsf。

因为ycsf.dll本质上是把ycsf.m函数封装在ycsf类中生成的一个类库,所以,使用该
函数前必须首先进行实例化。

1.3 数据类型转换
由于C#与MATLAB的数据类型不同,所以为实现二者之间数据类型的相互转换,需要按照1.2的步骤添加对MWArray的引用,并在C#的头文件中添加using . Arrays和using MathWorks.MATLAB. NET.Utility。

C#数据向MATLAB数据转换:若C#数据是int、double、float、char等非数组型的变量则可以直接传递给MATLAB,若C#数据是数组类型,则再根据是什么类型的数组变量先传递给对应的MWArray子类(如MWNumericArray、MWCharArray等),再通过这些子类传递给MWArray类型的变量。

MATLAB数据向C#数据转换:MATLAB输出的数据与输入的数据一样,都是MWArray类型,所以C#中接收到的MATLAB返回的数据必须先强制转换为MWArray对应的子类型,再转换成C#中的数据类型。

本文以位于清凉江侧江河干渠渠首的某水闸为例,设计流量45m3/s,闸下设计水
位17.731m,上游设计挡水位为清凉江10年一遇洪水位17.88m,将过闸总净宽(x1)、闸墩厚度(x2)、闸室长度(x3)、闸门位置(x4)、闸底板厚度(x5)、铺盖长度(x6)6个变量作为基本优化变量,以水闸总造价最小为目标函数F(x),考虑了规范所规定的各种约束条件,优化时对典型剖面做了适当简化,通过C#与MATLAB 混合编程建立了水闸的优化设计模型,并实现了预期的效果。

优化结果见下表。

本文以MATLAB遗传算法工具箱在水闸数字化设计系统闸室的优化计算中的应用为例,详细讲解了MATLAB与C#混合编程的流程以及应注意的问题,并通过实例验证了整个流程的可行性和正确性,这对非计算机专业的技术人员来说具有很大的实用价值,因此,C#与MATLAB混合编程的思路具有一定的参考价值和较好的应用范围。

□。

相关文档
最新文档