c#与matlab混合编程探索

以下讲述如何使用c#来调用matlab函数实现北斗定位算法的仿真

1.准备

首先需要matlab2010,vs2010(其他版本是否可行,未知),另外需要安装matlab的辅助工具MCRInstaller(该工具无需下载,在安装好的matlab程序包中可以找到,例如:E:\matlab
2010\toolbox\compiler\deploy\win32)

2.准备matlab程序

上述截图是我的定位程序所涉及到的函数

3.matlab程序处理为dll文件,供c#调用,处理的基本步骤如下:

(1)打开matlab,选择File->New->Deployment
Project,按如图填写(其中前俩个空需要自己填写对应自己的内容),其中Name相当于c#中的命名空间

(2)点击ok之后,出现如下的界面,在build中点击Add
class建立类,名称为demo(这里的名字可以任意取,相当于c#中的类),点击demo下的Add
files选择自己的matlab函数,完成之后,截图如下:

(3)完成上述操作之后,点击右上角按钮Build开始生成dll文件,这个过程需要几分钟,请耐心等待

然后会生成1个文件和一个文件夹,请将文件夹location(针对我自己的名称)下的文件夹src中的location.dll拷贝出来

以上即完成了matlab的操作,接下来是c#的操作

4.c#语言编北斗定位界面如下:

接下来需要完成的步骤如下:

(1)这里最重要的是对按钮“开始计算”代码的编写,代码如下(下面会对代码进行解释):


 1  location.demo output = new location.demo();
2 MWArray[] PO = output.main(3, year, month, day, hour, min1, sec,Xu,Yu,Zu);
3 MWNumericArray po1 = (MWNumericArray)PO[0];
4 MWNumericArray po2 = (MWNumericArray)PO[1];
5 MWNumericArray po3 = (MWNumericArray)PO[2];
6 po1_d = (double)po1;
7 po2_d = (double)po2;
8 po3_d = (double)po3;
9
10 textBox3.Text = po1_d.ToString();
11 textBox4.Text = po2_d.ToString();
12 textBox5.Text = po3_d.ToString();

下面按行号解释:

第1行实力化命名空间location.demo,注意这里matlab函数所形成的命名空间不要与所编写界面的命名空间相同,可能会出现意外的错误,稍加留意。

第2行为c#调用matlab函数进行求解的关键,其中main是我的定位程序的主函数,这里曾遇到过许多为题:

问题之一:MWMCR::EvaluateFunction error ... Error using ==> main Too many
output
arguments,这个原因是困扰我最大的一个问题,之前理解的是main后面的第一个参数为输入参数的个数,填写的为6一直出现上述错误,经查找发现这里代表的意思为输出参数的个数,我的输出参数有3个,故这里应该填写3,而不是6。

第3-5行为将所求参数赋值给变量

第6-8行为对变量进行类型转换

第10-12行为对数值进行显示,显示在相应的textbox中

5.经上述所有的步骤之后即可运行程序,运行结果如下:

PS:如有问题,欢迎交流,如需程序,qq:369274019。

c#与matlab混合编程探索,布布扣,bubuko.com

时间: 2024-10-17 04:23:00

c#与matlab混合编程探索的相关文章

VC与Matlab混合编程之调用动态链接库dll(C++)——<二>

VC与Matlab混合编程之调用动态链接库dll--<二> 1.是先建立 matlab 的 m 文件. ellipsefit.m 其包含:function [Xc,Yc,A,B,Phi,P]=ellipsefit(x,y) 2.MCC命令编译生成得到h.dll.lib等文件 在matlab命令行中输入: mcc -W cpplib:ellipsefit ellipsefit.m -T link:lib (此方式为c++风格函数) (具体命令含义可参考<精通matlab与C/C++混合程序

VC++和Matlab混合编程(在VC中调用将.m文件生成的DLL)

这是师兄们在实际项目中用到的关于VC++和MATLAB混合编程的实例.最近自己在瞎鼓捣,也就研究了下这块,本想写篇博文,但网上这块的资料还算是比较多,写的也比较具体,想着不重复劳动,因此我也就不写了. //提取节点信息 mxArray *csd_path; mxArray *save_path; mxArray *mat_path=mxCreateCellMatrix(NULL,NULL);//mxCreateCellMatrix:创建二维单位矩阵 mxArray *analog=mxCreat

java/matlab混合编程应用移植到其他电脑上遇到的问题

问题1:jar包部署在其他电脑上设置vm参数无效 @echo off start java -Xmx1028M -Xms1028M -XX:PermSize=100M -XX:MaxPermSize=100M -XX:SurvivorRatio=8 -jar Edition_1.0_fat.jar 要把参数设置在前面才有效,开始把jar包放前面虽然自己电脑能运行但是其他人的电脑不能运行 问题2:# An unexpected error has been detected by HotSpot

VS2013调用MATLAB混合编程

Visual Studio和MATLAB混合编程,有两种方法: 1 MATLAB调用C程序: 2 VS调用MATLAB(目前见到的都是VS,其他编译器如codeblocks,或不提供这项功能): 前一种是用MATLAB的mex命令调用VS或其他编译器,将以一定方式编写出的C文件编译成.mexw32(针对win32)或者.mexw64(针对win64),然后MATLAB就可以用调用动态链接库的方式,调用C程序.这一过程中,只需要在安装好编译器的前提下,执行: mex -setup 和 mbuild

C++和MATLAB混合编程-DLL

先小话一下DLL,DLL是动态链接库,是源代码编译后的二进制库文件和程序接口,和静态链接库不同的是,程序在编译时并不链接动态链接库的执行体,而是在文件中保留一个调用标记,在程序运行时才将动态链接库文件加载入内存.并且DLL在运行时是共享的,即当多个程序调用时,内存中也只保持一份动态链接库. 动态链接库的调用有显式和隐式两种方式. 隐式链接需要用到我们前面生成的plotdata.c,plotdata.h,plotdata.lib以及plotdata.dll文件. 首先将plotdata.c,plo

关于C++与Matlab混合编程错误??? Unexpected Standard exception from MEX file.

 最近在用c++和matlab 混合编程是遇到了一些问题,如下: ??? Unexpected Standard exception from MEX file. What() is:c:program Error in ==> mscale at 32 [rho,s] = matscale(abs(a),0.01); Error in ==> utScaledExpm at 7 [s,junk,a] = mscale(a,'noperm','safebal'); Error in ==&

C/C++与Matlab混合编程初探

欢迎转载,尊重原创,所以转载请注明出处. http://blog.csdn.net/bendanban/article/details/37830495 Matlab 拥有丰富的功能,编程简单.不过,有些情况下,Matlab程序的执行速度比较慢.C/C++编译执行的程序速度比较快,编程难度上比Matlab要高一些.因此存在一种方案,就是使用Matlab实现我们的实验程序,用C/C++来实现Matlab程序中比较耗时的部分,从Matlab程序中调用C/C++的程序以实现加速. 本文主要讲解如何在M

C#和matlab混合编程

C#和MatLab的混合编程,充分利用了winform的直观显示和matlab的强大计算能力.在此以一个小例子的形式给大家讲述一下二者混合编程的实现. 一.软件的配置说明 C#版本:VS2010        matlab版本:matlab2013a 二.把 matlab函数编译成dll文件 2.1首先写一个函数的.m文件(如下函数MatrixOpera实现两个矩阵的相加和相减) %--------------------------------------------------------

FORTRAN &amp; MATLAB 混合编程

[email protected] 第一部分:Fortran调用Matlab引擎 1  什么是Matlab引擎 所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++.Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab的控制.可以主要功能有: ★ 打开/关闭一个Matlab对话: ★ 向Matlab环境发送命令字符串: ★ 从Matlab环境中读取数据: ★ 向Matlab环境中写入数据. 与其它各种接口相比,引擎所提供的Matl