全栈工程师开发手册 (作者:栾鹏)
matlab2c动态链接库下载
matlab库函数大全
matlab2c基础教程
matlab2c开发全解教程
matlab2c调用方法:
1、下载动态链接库
2、将Matlab2c.dll拷贝到exe同目录下
3、将Matlab2c.h、Matlab2c.lib放到项目头文件目录下
4、在cpp文件中引入下面的代码
#include "Matlab2c.h"
#pragma comment(lib,"Matlab2c.lib")
using namespace Matlab2c;
matlab中conv函数简介
1、conv函数:用于计算向量的卷积和多项式乘法。
2、用法说明
实例1:多项式乘法,(s^2+2s+2)(s+4)(s+1)可以使用w=conv([1,2,2],conv([1,4],[1,1]))
实例2:向量的卷积,长度为m的向量序列u和长度为n的向量序列v的卷积,w=conv(u,v)
conv的c++源码实现
向量的离散卷积,相关运算,多项式乘法
输入:两个向量,或者多项式,输出结果方向根据后面向量的方向
输出:向量离散卷积,或者相关运算,或者多项式乘法的结果
Matrix Matlab2c::conv(Matrix& a,Matrix& b)
{
if(!(a.isVector() && b.isVector()))
throw_logic_error("输入参数必须为向量");
int i,k;
double m;
Matrix p;
if (b.row==1)
{
p.row=1;
p.column = a.row*a.column+b.row*b.column-1;
}else{
p.column=1;
p.row = a.row*a.column+b.row*b.column-1;
}
p.data = new double[p.row*p.column];
for (k=0;k<p.row*p.column;k++)
{
m=0;
for (i=0;i<a.row*a.column;i++)
if ((k-i)>-1 && (k-i)<b.row*b.column)
m+=(a.data[i])*(b.data[k-i]);
p.data[k]=m;
}
return p;
}
CMatrix Matlab2c::conv(CMatrix& a,CMatrix& b)
{
if(!(a.isVector() && b.isVector()))
throw_logic_error("输入参数必须为向量");
int i,k;
Complex m;
CMatrix p;
if (b.row==1)
{
p.row=1;
p.column = a.row*a.column+b.row*b.column-1;
}else{
p.column=1;
p.row = a.row*a.column+b.row*b.column-1;
}
p.data = new Complex[p.row*p.column];
for (k=0;k<p.row*p.column;k++)
{
m=0;
for (i=0;i<a.row*a.column;i++)
if ((k-i)>-1 && (k-i)<b.row*b.column)
m+=(a.data[i])*(b.data[k-i]);
p.data[k]=m;
}
return p;
}
conv函数的使用测试
#include "Matlab2c.h"
#pragma comment(lib,"Matlab2c.lib")
using namespace Matlab2c;
int main()
{
double a[]={1,2,3};
double b[]={2,3,4,5};
Matrix aa=Matrix(1,3,a);
Matrix bb=Matrix(1,4,b);
Matrix cc=Matlab2c::conv(aa,bb);
cout<<cc.toString()<<endl;
system("pause");
return 0;
}