摘要:MATLAB对于矩阵处理是非常高效的,而C++对于矩阵操作是非常麻烦的,因而可以采用C++与MATLAB混合编程求解矩阵问题。

主要思路就是,在MATLAB中编写函数脚本并使用C++编译为dll文件(在C++中可以调用编译的函数),然后对VS项目进行文件配置,编写C++代码调用MATLAB中定义的函数。

问题描述:对于一个多项式

需要求解c0到c5的值,由相关条件已知c0=c1=0,且

可得如下矩阵式:

对比类似AX=B,可求X=A\B。

1、写出MATLAB代码如下

运行结果:

2、使用C++编译器将ComputeC2_C5.m文件编译成C++可以调用的.dll文件,步骤:

2.1、在MATLAB控制栏输入"mex -setup"

2.2、点击"mex -setup C++",使用C++进行编译

2.3、输入"deploytool",弹出编译(Compiler)窗口,选择Library Compiler(库编译)。

2.4、进入MATLAB Compiler窗口,按照如下步骤,1)选择C++ Shared Library,2)点击"+"号按钮添加将要编译的.m文件,3)填写Library的信息,默认自动填写脚本文件名称,4)点击Package"√"按钮,进行编译打包处理。

2.5、选择一个文件夹存放打包生成的文件,默认和脚本文件名相同的.prj文件。

2.6、打包处理过程(大概需要几十秒)

2.7、生成后自动存放在与脚本同名的文件夹下,如下图所示,第一个文件夹中的exe文件用于程序发布时用,第二个文件夹中包含相当于release下得.h,.lib和 .dll文件,第三个文件包含测试用地.h,.lib和 .dll文件等文件,是测试需要的;至此MATLAB生成dll文件完成。

3、新建C++项目,并将打包生成的文件导入C++项目。

3.1、将for_testing文件夹中的.h、.lib、.dll文件复制到项目中并和.h、.cpp、.cu(CUDA项目文件)放在一起

3.2、并将.h(ComputeC2_C5.h)文件添加到项目中

3.3、配置电脑系统环境变量和VS工程属性

1)在系统环境变量的Path中添加"Matlab安装目录\bin\win64;"

2)在项目属性->配置属性->VC++ 目录->包含目录,添加"Matlab安装目录\extern\include"

3)在项目属性->配置属性->VC++ 目录->库目录,添加"Matlab安装目录\extern\include\lib\win64\microsoft"

4)在项目属性->配置属性->链接器->输入->附加依赖项,添加

" libmat.lib

libmex.lib

mclmcr.lib

mclmcrrt.lib

libemlrt.lib

libeng.lib

libfixedpoint.lib

libcovrt.lib "

4、编写代码

代码(.cu文件是CUDA项目的文件,和.cpp文件类似,一样可以使用):

#pragma once

#pragma comment(lib,"mclmcrrt.lib") //MATLAB中的库文件

#pragma comment(lib,"ComputeC2_C5.lib") //必须要链接ComputeC2_C5.lib库才能正常编译运行#include"mclcppclass.h" //使用mwArray类的头文件

#include "ComputeC2_C5.h" //MATLAB生成的头文件

void ComputeC(doubleamplitude)

{if (!ComputeC2_C5Initialize())//初始化; 注意这个初始化中 !ComputeC2_C5Initialize() 字段中的 ComputeC2_C5与matlab编译成的.lib同名

{

cout<< "Could not initialize addfunction!";

exit(0);

}

mwArray X(4, 1, mxDOUBLE_CLASS, mxREAL); //申请4行1列的矩阵数组

mwArray A(1, 1, mxDOUBLE_CLASS, mxREAL); //申请1行1列的矩阵数组

double *C2ToC5 = new double[4]; //保存X矩阵中的元素

A.SetData(&amplitude, 1); //设置参数

ComputeC2_C5(1, X, A); //调用函数

X.GetData(C2ToC5,4); //将函数返回值保存在C2ToC5数组中

cout <

{

cout<< "c" << i + 2 << "=" << C2ToC5[i] <

}

ComputeC2_C5Terminate();//注意结束中 !ComputeC2_C5Terminate() 字段中的 ComputeC2_C5也与matlab编译成的.lib同名

}intmain()

{

ComputeC(10);

system("pause");return 0;

}

5、结果(上边为VS项目运行结果,下边为MATLAB运行结果,结果一致):

6、常见问题:

6.1、MATLAB和VS项目需要位数相同,同为32位或64位。

6.2、编译通过,运行提示"mclmcr.lib",因为系统环境变量没有配置

6.3、编译通过,运行不出错但是窗口一闪而过,则是没有设置初始化和结束语句。即

matlab求解多项式系数,C++和MATLAB混合编程求解多项式系数(矩阵相除)相关推荐

  1. matlab两个多项式相除,C++和MATLAB混合编程求解多项式系数(矩阵相除)

    摘要:MATLAB对于矩阵处理是非常高效的,而C++对于矩阵操作是非常麻烦的,因而可以采用C++与MATLAB混合编程求解矩阵问题. 主要思路就是,在MATLAB中编写函数脚本并使用C++编译为dll ...

  2. C语言编程实现求解应力向量,基于MATLAB与Visual C 实现主应力的编程求解.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab 基于MATLAB与Visual C 实现主应力的编 ...

  3. matlab输出lccde_Matlab与Visual C++混合编程处理全站仪数据的方法

    Matlab 与 Visual C++ 混合编程处理全站仪数据的方法 胡加星,刘立龙,刘靖晔 [摘 要] 内业数据检核中经常要对点的外业实测坐标与内业成图后的坐标进行 比较,以此来发现是否出现造点或是 ...

  4. c语言 栈求解表达式_非线性方程组的编程求解方法

    [作者声明] 本文所有文字均为作者原创,所有图片均为作者本人亲自拍摄或制作. 版权所有,仅供阅读欣赏,禁止任何单位或个人以任何形式对本文的文字或图片进行包括但不限于复制.转载.引用.抄袭.截图.模仿. ...

  5. Matlab与C/C++混合编程接口及应用

    http://www.cnblogs.com/lidabo/archive/2012/08/24/2654148.html 在参考文献基础上.补充和完善了. Matlab与C/C++混合编程接口及应用 ...

  6. MATLAB和C语言混合编程示例

    MATLAB虽然很好用,尤其在数值运算,图像处理,仿真方面很简洁.方便,但有时间当处理比较大的数据时速度确实有点让人捉急,不过MATLAB提供了和C/C++混合编程的接口,以此兼具二者的优点来缓解这个 ...

  7. matlab元胞自动机学风演化,利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程...

    利用MATLAB和VC60混合编程技术研究元胞自动机动态演化过程 第! !卷!第期 ! 成都理工大学学报! 自然科学版 !# $ % - 2: 5 34- 1 -6;!9 ? : A ? $ % $ ...

  8. matlab生产计划问题,基于MATLAB的生产计划最优化系统设计

    龙源期刊网 http://www.doczj.com/doc/d0588b0949d7c1c708a1284ac850ad02de8007fa.html 基于MATLAB的生产计划最优化系统设计作者: ...

  9. D:MATLAB.N个实用技巧-MATLAB中文论坛精华总结

    在为此书作序的时候,MATLAB中文论坛的主题已经达到10万,帖子超过100万,有效会员30万.MATLAB的基础技巧已经在论坛里得到了充分的展示与探讨,大家常见的问题大部分获得了解答!是时候做一个小 ...

最新文章

  1. linux文件属性解析,Linux操作系统的文件属性与目录配置解析
  2. [翻译] WPAttributedMarkup
  3. JZOJ 3617. 【ZJOI2014】力
  4. 浅谈Nginx负载均衡与F5的区别
  5. 如何修改操作系统运行服务器,如何设置Bios 最常见bios设置与修改详细图解教程...
  6. eclipse中快捷搜索文件快捷键
  7. 49. NAT 服务器
  8. hdu1059Dividing
  9. 使用Antlr实现简单的DSL
  10. 开源字体_开源字体的前5大资源
  11. 百度站长平台"添加站点"提示"您无权访问该页面,点击确定按钮返回首页?"
  12. Unity 检测手机性能,区分高中低端机型
  13. 关于cv::warpaffine函数
  14. Daily record-August
  15. 当年锥子的大爆炸,如今12个语言版本都可轻松搞定!
  16. LoRa信道争抢怎么办?传说中的冲突退避管用吗?
  17. 谷歌play商店_Google Play商店优化的17个技巧
  18. 学籍管理系统java_学籍管理系统(Java初级版)
  19. 【整理】扩频及CDMA知识点
  20. dts、dtb的那些事儿

热门文章

  1. ABAP Pragma
  2. php+剥去标签,php剥去字符串中的html与xml及php标签的函数strip_tags()
  3. 处理器排行_垃圾处理器排行榜 适邦垃圾处理器榜上有名
  4. java工程师_Java开发工程师需要掌握哪些技能?
  5. python贪吃蛇小游戏_python开发贪吃蛇小游戏
  6. go 语言 mysql_Go语言基础之操作MySQL
  7. 三星 P600 android,顶级硬件S pen笔手写—三星P600_三星 Galaxy Note 10.1 2014 Edition P600_平板电脑市场-中关村在线...
  8. mysql的c接口_mysql C接口大全
  9. 海上瓶子下有东西吗_小小的瓶盖竟有如此大的作用, 闻名不如眼见, 你知道吗?...
  10. 为什么我那么努力,模电还是学不懂?