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

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

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

需要求解c到c的值,由相关条件已知c=c=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. 【数字信号处理】卷积编程实现 ( Matlab 卷积和多项式乘法 conv 函数 | 使用 matlab 代码求卷积并绘图 )

    文章目录 一.Matlab 卷积和多项式乘法 conv 函数 二.使用 matlab 代码求卷积并绘图 一.Matlab 卷积和多项式乘法 conv 函数 Matlab 文档地址 : https:// ...

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

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

  4. Matlab C++混合编程 在VisualStudio下的编程 使用了Opencv库

    某工程上需要在matlab上使用c++版本的opencv,之前使用的是版本配置是matlab2018和vs2018,而现在使用的是matlab2016和vs2015,不同matlab版本的调用c++代 ...

  5. matlab系列之(一)——利用matlab实现任意两个多项式相加

    上课时的课程作业,后续我会持续整理出来注释好,供大家共同学习!致谢课程老师! 一.问题描述 输入任意两个多项式,相加后输出结果: 二.问题分析 输入多项式可以采用输入系数矩阵或完整多项式的方式,为了符 ...

  6. matlab求和与求积,matlab两个向量求和

    MATLAB提供的roots函数用于求多项式 的全部根,其调用格式为: x=roots(P) 其中P为多项式的系数向量,求得的根赋给 向量x,即x(1),x(2),-,x(n)分别代表...... ( ...

  7. 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...

    matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析 课程设计任务书 学生姓名: 专业班级: 指导教师: 刘 新 华 工作单位:信息工程学院 题 目: 利用MATLAB对线性电路正弦稳态 ...

  8. 怎么判断两个多项式互素_多项式互素性质的补充讨论

    54 科技咨询导报 Science and Technology Consulting Herald 2007 NO.16 Science and Technology Consulting Hera ...

  9. 基于MATLAB的全局多项式插值法(趋势面法)与逆距离加权(IDW)法插值与结果分析

    基于MATLAB的全局多项式插值法(趋势面法)与逆距离加权(IDW)法插值与结果分析 1 背景知识 2 实际操作部分 2.1 空间数据读取 2.2 异常数据剔除 2.3 验证集筛选 2.4 最小二乘法 ...

最新文章

  1. IndexError: list index out of range的解决办法
  2. Deep Residual Learning for Image Recognition 笔记
  3. boost::polygon模块实现自定义点相关的测试程序
  4. easyUI parser的使用
  5. ios7 uuid的获取方法
  6. 【liferay】6、关于liferay中使用requestMapping映射地址提交表单
  7. Struts2中Action各种转发类型
  8. 【MongoDB系列】:MongoDB 查询应用
  9. [转载] Netty
  10. ROS学习笔记—— tf 工具包介绍
  11. java 彻底删除文件_如何删除java文件
  12. C# Winform重启软件
  13. 陶瓷天线和PCB天线以及IPEX天线三者间区别
  14. iOS H264编码及解码
  15. 仓储管理之盘点——盘点方法
  16. 亚太区最美面孔杨超越登榜,网友:不喜欢她
  17. Java蓝桥模拟战——特殊的数字:153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
  18. keepalived 中关于 weight 和 preempt_delay 的实验
  19. 用LaTex写伪代码(使用algorithm2e包)
  20. web前端移动端课程之canvas教程系列

热门文章

  1. 科技公司重新关注2级以上驾驶员辅助
  2. 如何部署自动驾驶系统
  3. Java的File类
  4. 2021年大数据ELK(九):使用VSCode测试分词器
  5. Python库全部整理出来了,非常全面
  6. Android 动态广播与静态广播
  7. Error:Execution failed for task ':app:mergeDebugResources'. Error: java.lang.RuntimeException: Som
  8. 二叉树的遍历(递归与非递归)
  9. 2022-2028年中国边缘计算行业投资分析及前景预测报告(全卷)
  10. Pandas 基础 (5) —— 处理缺失数据及层次化索引